[ 
https://issues.apache.org/jira/browse/MATH-1658?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17707264#comment-17707264
 ] 

Gilles Sadowski commented on MATH-1658:
---------------------------------------

bq. It is a bit peculiar that with BaseOptimizer, ConvergenceChecker can be 
passed only in constructor.

>From the outset, let me state that actually, the peculiarity is rather that 
>not all settings are passed to the constructor.
Indeed, one of the principles which we try to enforce as often as possible is 
_immutability_.

I now view {{OptimizationData}} as kind-of a "hack" (but it was meant to try 
and fix more blatant problems of the previous design); but I don't say that 
there is an urgent need to refactor, even though the contents of package 
[{{o.a.c.math4.legacy.fitting.leastsquares}}|https://commons.apache.org/proper/commons-math/commons-math-docs/apidocs/org/apache/commons/math4/legacy/fitting/leastsquares/package-summary.html]
 is an indication of how things could be done (noting that the functionality 
there was previously within the {{optim}} package).

It may indeed be more consistent to treat all settings in the same way.
However, if so, I wouldn't maintain two ways of passing {{OptimizationData}} 
arguments; that is, we should drop the constructor way.  It can done now 
because 4.0 allows compatibility breaking (and we release a "beta" version).


> ConvergenceChecker should implement OptimizationData
> ----------------------------------------------------
>
>                 Key: MATH-1658
>                 URL: https://issues.apache.org/jira/browse/MATH-1658
>             Project: Commons Math
>          Issue Type: Improvement
>          Components: legacy
>    Affects Versions: 4.0-beta1
>            Reporter: François Laferrière
>            Priority: Minor
>
> It is a bit peculiar that with BaseOptimizer, ConvergenceChecker can be 
> passed only in constructor.
> It should be possible to change ConvergenceChecker at any other time.
> Further it is a bit strange that the constructor do not accept other 
> OptimizationData.
> In my use cases, I need to create an optimizer once with complex 
> OptimizationData and reuse it many time with very few changes (including 
> changing the ConvergenceChecker).
> So, I suggest that
>  * ConvergenceChecker implements OptimizationData.
>  * protected BaseOptimizer(ConvergenceChecker<PAIR> checker) is replaced by 
> protected BaseOptimizer(OptimizationData... optData) 
> Doing so is compatible with existing code and provide much more flexibility.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to