Hi.

[Please do not top-post.]

On Mon, Nov 19, 2012 at 09:17:39PM -0500, Konstantin Berlin wrote:
> That would solve the problem. Seems a bit messy though, since you now have 
> two conflicting stopping conditions, one you provide in the checker 
> implementation, the other in the function call. I am not clear why if you are 
> throwing an exception you don't provide more information inside it, so the 
> user can adjust their logic based on it.

I rather think that it is a straightforward usage of the current API.
[And it is much cleaner to always get the result as the output of the
"optimize".]

Why "conflicting"? One is assimilated to a solution (as you requested) and
the other will generate an exception (signalling a failure).

As already pointed out, the exception is not the best place to store this
information: in CM, exceptions are assumed to signal incompatibilites of the
input to a method and that method's expectations.

> Also, it seems like some classes, like CMAESOptimizer, also take number 
> iterations in their constructor.

IMO, that's a bug:
  https://issues.apache.org/jira/browse/MATH-873
[See my remark in the other thread that was started to deal with your request
(with subject "Making last iteration data available when iterative algorithms
fail to converge").]


Best regards,
Gilles

> 
> On Nov 19, 2012, at 7:36 PM, Gilles Sadowski <gil...@harfang.homelinux.org> 
> wrote:
> 
> > Hello.
> > 
> > On Mon, Nov 19, 2012 at 04:47:08PM -0500, Bruce A Johnson wrote:
> >> On Nov 17, 2012, at 6:57 PM, Konstantin Berlin wrote:
> >> 
> >>> There are numerous examples when the optimization might not have
> >>> converged to the stopping condition, but the minimum discovered point
> >>> is better than the starting point that was initially provided. The
> >>> user should have the ability to at least decide if it is good enough,
> >>> or use it as a starting point into a different optimization run. This
> >>> is the behavior that most optimizers have, including MATLAB.
> >>> 
> >>> This functionality important when you have a time constraint, where any 
> >>> improvement in result is better than no information at all. There are 
> >>> also non-convex regions of a function where the convergence rate is very 
> >>> slow, and you might want to stop.
> >>> 
> >>> A simple modification for now is to just let
> >>> org.apache.commons.math3.exception.TooManyEvaluationsException contain
> >>> within it the best found solution so far.
> >>> 
> >> 
> >> I agree that there are many situations where one is constrained by the 
> >> amount of resources one can throw at a problem and the user would like the 
> >> best solution given those resources (here, the maximum number of 
> >> iterations) so I fully support a solution that lets us get the best 
> >> solution that has been achieved.  I wonder if it is possible, instead of 
> >> using the exception, to specify a convergence checker that checks not only 
> >> the tolerances, but could instead return success if the maximum number of 
> >> iterations has been exceeded.  I realize this will look inappropriate to 
> >> some, but using the convergence checker in this way would be entirely up 
> >> to the person calling it.  If you can get back the number of iterations 
> >> used, then presumably if that is equal to the max  you'll know it hasn't 
> >> really converged. 
> > 
> > Your proposal is brilliant: problem solved (IMHO)!
> > The convergence checkers are there to allow users to define their notion
> > of convergence; and the API provides the current iteration count.
> > 
> > We could add this feature in CM's "Simple...Checker" implementations by
> > adding one constructor (and an if-block in the "converged" method) without
> > touching the optimizers.
> > The user who passes such a checker will indeed be aware of the implication:
> > the algorithm might quietly terminate before reaching the optimal solution.
> > 
> > Shall I
> > 1. resolve the issue as "Not a Problem" (the user should implement his own
> >   custom checker) or
> > 2. add the constructors in the checkers defined within CM and resolve as
> >   "Fixed"?
> > 
> > 
> > Regards,
> > Gilles
> > 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to