[Coin-ipopt] Warm start in restoration

Andreas Waechter andreasw at watson.ibm.com
Tue Oct 3 09:09:51 EDT 2006

Hi Graham,

On Mon, 25 Sep 2006, Graham Sparrow wrote:

> Thanks Andreas, this is very helpful.
> I will take a closer look at the code, now that I know where I am 
> looking ;)
> I understand what you are saying about the way the restoration phase is 
> initialised etc, but just to check on a related point...
> If I understand correctly, the change that was introduced in Changeset 
> 779 to return restoration phase multipliers if it terminates in the 
> restoration phase, makes some of the restoration phase multipliers 
> available to the finalize_solution() function. So, if I extract 
> multipliers in my implementation of finalize_solution(), I can 
> effectively get the sensitivity of the constraint violation function to 
> the bounds and constraints of the normal NLP problem - this is of course 
> very useful by itself. I guess what is missing from the complete picture 
> of the restoration problem at this point are the values for the 
> introduced n and p variables mentioned in the implementation paper and 
> multipliers for their bounds?

Yes, this is correct, the mulitpliers for the p and n variables are not 
available in finalize_solution.

Also, to handle inequality constraints, Ipopt internally introduces slack 
variables, so that it has to deal only with equality constraints and 
bounds.  In finalize solution you don't get the multipliers for the 
equality constraints and slack multipliers separately (which could be an 
issue if you have a two-sided inequality constraint).

If you really want to dig into the details of an iteration and Ipopt's 
internal iterates, you can make use of the intermediate_callback method in 
the TNLP class.  It is called once per iteration (during convergence 
check), and you can get a handle on Ipopt's internal data structures, 
such as the IpoptData object, which stores the iterates.

I hope this helps a bit...



> Graham

>> Hi Graham,>At the moment, the warm start only works for the regular 
>> iterations, >i.e., when you pass that variables and multipliers back, 
>> Ipopt uses those >to start the regular optimization.  However, when you 
>> make the algorithm >start with the restoration phase (using 
>> start_with_resto), the multipliers >for the restoration phase (which is 
>> a problem formulation that is >different and larger than the normal 
>> NLP) are reinitialized like before >every restoration phase start.>If 
>> you would really want to do a warm start for the restoration phase, you 
>> >could try to adapt the IpRestoMinC_1Nrm.cpp and IpRestoIpoptNLP.cpp 
>> >files... somehow store the information away that IpRestoMinC_1Nrm.cpp 
>> >receives from the internal restoration phase algorithm after return 
>> (for >all restoration phase variables and multipliers which are more 
>> than for >the usual NLP), and change IpRestoIpoptNLP.cpp so that it 
>> makes use of >that information later in the InitializeStructures 
>> call...)>Maybe that helps a bit...>Andreas
> _________________________________________________________________
> Be one of the first to try Windows Live Mail.
> http://ideas.live.com/programpage.aspx?versionId=5d21c51a-b161-4314-9b0e-4911fb2b2e6d

More information about the Coin-ipopt mailing list