/// <summary> /// Stores data and performs the optimization. /// The list of parameters is open-ended so that sub-classes can extend it /// with arguments specific to their concrete implementations. /// When the method is called multiple times, instance data is overwritten /// only when actually present in the list of arguments: when not specified, /// data set in a previous call is retained(and thus is optional in /// subsequent calls). /// Important note: Subclasses must override /// <see cref="ParseOptimizationData"/> if they need to register /// their own options; but then, they must also call /// base.ParseOptimizationData(optData) within that method. /// </summary> /// <param name="optData"> /// This method will register the following data: /// <list> /// <item><see cref="MaxEval"/></item> /// <item><see cref="MaxIter"/></item> /// </list> /// </param> /// <returns>a point/value pair that satisfies the convergence criteria.</returns> public T Optimize(params IOptimizationData[] optData) { // Parse options. ParseOptimizationData(optData); // Reset counters. evaluations.ResetCount(); iterations.ResetCount(); // Perform optimization. return(DoOptimize()); }