Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
3.0
-
None
Description
I suggest to change the signatures of the "optimize" methods in
- UnivariateOptimizer
- MultivariateOptimizer
- MultivariateDifferentiableOptimizer
- MultivariateDifferentiableVectorOptimizer
- BaseMultivariateSimpleBoundsOptimizer
Currently, the arguments are
- the allowed number of evaluations of the objective function
- the objective function
- the type of optimization (minimize or maximize)
- the initial guess
- optionally, the lower and upper bounds
A marker interface:
public interface OptimizationData {}
would in effect be implemented by all input data so that the signature would become (for MultivariateOptimizer):
public PointValuePair optimize(MultivariateFunction f,
OptimizationData... optData);
A thread was started on the "dev" ML.
Initially, this proposal aimed at avoiding to call some optimizer-specific methods. An example is the "setSimplex" method in "o.a.c.m.optimization.direct.SimplexOptimizer": it must be called before the call to "optimize". Not only this departs form the common API, but the definition of the simplex also fixes the dimension of the problem; hence it would be more natural to pass it together with the other parameters (i.e. in "optimize") that are also dimension-dependent (initial guess, bounds).
Eventually, the API will be simpler: users will
- construct an optimizer (passing dimension-independent parameters at construction),
- call "optimize" (passing any dimension-dependent parameters).