On Nov 20, 2012, at 7:56 AM, Gilles Sadowski <gil...@harfang.homelinux.org> 
wrote:

> On Tue, Nov 20, 2012 at 05:08:23AM -0500, Konstantin Berlin wrote:
>> I am ok with option 2.
> 
> Thanks. I'll add new constructors if nobody has objections. Please note that
> by using "custom" checkers (even those defined in CM), you make some
> algorithms deviate from their "standard" behaviour.
> 
>> 
>> I guess my issue goes to my problem with the general API. The number
>> of iterations is a stopping condition, as well as all the other
>> conditions that are for some reason called convergence conditions. The
>> number of iterations condition is singled out as "bad", hence it
>> throws an exception, while others don't through an exception, and I
>> guess are considered "good".
> 
> Reaching the maximal count is "bad" because it means that the algorithm
> could not fulfill the (other) input requirements.
> The "maxEval" parameters was intended as a safe-guard to prevent the
> algorithm from _unexpectedly_ running too long. If the user knows that it
> takes a long time to find the solution with the required accuracy, he can
> increase "maxEval".

My point is that termination based on a criteria that you actually gave 
yourself is not an exception. It is expected behavior
and should be treated as such. There are other conditions that also prevent you 
from converging to a correct solution of the requested
tolerance. Like I mentioned, one such possible event is that you are not making 
enough progress. That does not imply that you are some
requested epsilon away from the minimum, but only says that you are getting 
there too slowly. All tolerance conditions in some ways are about 
a time constraint, otherwise you would always set them to maximum precision. I 
think the exception should not be thrown. Alternatively an exception should 
be thrown if the target functions gets NaNs or throws an exception. I don't 
think these conditions are checked for right now.

I agree that for some methods you can't tell, while for convex solvers you can 
look at first-order optimization condition and so on. This information should 
be provided to the user on termination of the optimization and not hidden.

> 
> As I said previously, your request introduces a conflict: It becomes
> possible that none of the convergence requirements is met.
> 
>> However, a stopping condition, even if you exclude the number of
>> iterations condition, does not imply convergence, aka that you found
>> an min point. In a convex solver you have to look at the first and
>> second order optimality condition in order to declare "success". A
>> typical stop of the algorithm could be that it has not made enough
>> progress rather than found the min, but with the current framework
>> this is also considered "good", with the user does not have a clue
>> that something went bad unless they take the solution and start
>> checking themselves.
> 
> But that's part of the behaviour inherent to some algorithm. However it will
> terminate as it wishes (i.e. satisfying its internal convergence criteria).
> 
>> 
>> That is why if you look at matlab fminunc, it contains about 5
>> different flags for termination.
> 
> That would probably require a new API.
> Can you give some examples of usage?
> Concrete proposals are always welcome and would hopefully open a discussion.

I think the information provided on return by the optimizers should be reworked 
for the better. This would require some thinking, so I will hold off on 
proposing something now, due to limited time that I have to fully dedicate to 
this problem. I think MATLAB should be a good guide on how to organize 
optimizations, since it has a very well regarded library. I would be happy to 
comment on any proposals from people who might have some time to write them.

On this note I would like to say that the directory structure of optimizers are 
somewhat of a puzzle. The "general" directory should be renamed to "convex", or 
something like it. In any case non-linear least-squares methods are not general 
methods, but a special case of a newton-based convex optimization. I think the 
library can benefit from better organization here.

Perhaps something like derivative based vs. direct vs. linear.

> 
>> This probably goes along with the point in the 873 bug that talks
>> about internal vs external criteria.
> 
> Not sure. There, "internal" or "external" (for lack of better words) are
> both "legitimate". The number of iterations is not (IMHO), because it's
> sort-of "unstable": If you increase the number of evaluations (or
> iterations), you can get another solution.
> I think that this difference in nature is a property that could serve to
> define an API (as was done with the current one).
> 

There are other "unstable" termination conditions, like I mentioned above. 
Throwing exception in this one case only is misleading. But in any case, 
termination of the algorithm based on a stopping condition is expected behavior.

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

Reply via email to