[Ipopt] Line search rest in intermediate_callback

Andreas Waechter andreasw at watson.ibm.com
Fri Nov 20 13:48:19 EST 2009


Hi Herve,

If I understand correctly, you want to change the actual optimization 
problem on the fly during the intermediate_callback call, for example to 
update some penalty parameter in your objective function?

Well, Ipopt was not really designed with the idea to solve problems that 
are changing during the solution process, but I can envision circumstances 
where this makes sense.  You are right, you probably need to reset the 
line search if you change the definition of your objective function from 
one iteration to another, since otherwise the values are not compatible.

There is no mechanism at this point to reset the line search from within 
the intermediate_callback.  You would need to somehow get access to the 
line_search_ member in the IpoptAlgorithm class.  There is no 
infrastructure at the moment to do that, and you will have to somehow hack
your local copy.  If you don't mind global variables, you could just 
create global variables for storing the SmartPtr<LineSearch> variables

lineSearch
resto_LineSearch

that are created in the AlgorithmBuilder (IpAlgBuilder.cpp).  You can then 
call the Reset() method in your intermediate_callback call if you see that 
to be necessary.  You could call it for both, all the time, or just for 
the right one, depending on whether mode is RegularMode or 
RestorationPhaseMode, respectively.

This is not very pretty, but it will probably work and seems the easiest 
way to help you out.  If we wanted to do something more sound, we would 
have to define precisely what kind of on-the-fly-changes to the problem 
definition we would allow, and what other algorithm components (beside the 
line search) might be affected.  For example, we would probably also have 
to reset the quasi-Newton approximation, if you are using it and your 
modification (e.g., of your penalty parameter) influences the second 
derivatives of the model functions.  (The barrier function is not 
approximated with quasi-Newton.)

Hope this helps,

Andreas


On Wed, 18 Nov 2009 herve.martin.sc at libertysurf.fr wrote:

> Hi,
>
> Is it possible to reset the line search from the intermediate_callback 
> method? (like it is done for instance after each mu update).
>
> It would be useful for me as I would like to implement a penalty-like 
> method to regularize an optimization problem. I figured out that when 
> updating my penalty parameter, I would need to reset the history of 
> Ipopt iterates. Otherwise, I think that the Ipopt filter (or whatever 
> line search is selected) would reject any new iterate leading to an 
> increase in the objective. Am I right, or would I need to do more 
> modifications?
>
> Thanks in advance for any help
> Hervé MARTIN
>
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt
>
>


More information about the Ipopt mailing list