[Ipopt] IPOPT Warmstart

Andreas Waechter awaechter.iems at gmail.com
Fri Dec 16 14:38:46 EST 2011


Hi Michael,

If I understand correctly, you want to restore the entire Ipopt state 
after each iteration, but delete all Ipopt information in between.  This 
will not work, because the state of Ipopt is defined by more than the 
values of the iterates (such as your L-BFGS approximation, the filter in 
the line search, the barrier parameter etc).  It would be very 
complicated to figure out what all the relevant data is, store it, and 
then restore it.

For most problems, the main memory requirements in Ipopt will be in the 
linear solver.  If you are using MA27, you might be able to reduce 
memory requirement by setting "ma27_liw_init_factor" and 
"ma27_la_init_factor" to smaller values.  For Mumps, try a smaller value 
for "mumps_mem_percent".  Or try a different linear solver, such as Pardiso.

Or simply buy more memory for your computer :)

Hope this helps,

Andreas

On 12/15/2011 04:53 AM, "Michael Gißler" wrote:
> Hello everyone,
>
> for a student research project I try to implement IPOPT in a structural topology optimization software. For my needs I have to shutdown IPOPT after running one iteration to clean memory. So, what I try to do is warmstarting each iteration with the information stored of the former iteration.
>
> Until now I got a version which:
> * shuts down after one iteration (max_iter=1)
> * saving design variable values
> * running it again with the values from the former iteration
> * furthermore: running a loop in the main function of mynlp in which I generate new objects for each iteration
>
> I know there's a lot of information missing to get good results but before I go on I got some questions due to that:
>
> In IPOPT there are two ways to restore a former iteration:
>
> One is to store the values of the TNLP problem formulation (x, z_L,Z_U,lambda) and one to store the NLP information (x,s,y_c,y_d,z_U,z_L,v_u, v_L).
>
> Furthemore each TNLP problem definition internally gets "translated" into an NLP formulation by the class TNLPAdapter. The TNLP formulation is just more common to input a problem definition.
>
> Q1: Because of that I think I get better warmstarting conditions by saving the information of the NLP formulation (which IPOPT uses it internally)? Or is there no difference?
>
> There is function to input the NLP information by setting "warmstart_entire_iterate" to "yes" and using get_warmstart_iterate().
>
> Q2: Is there also a function to output this vector? (In my case after running one iteration.)
>
> Last but not least a question on another topic:
>
> Turing "warm_start_init_point" to "yes" should result in using initial values for x, z_L, z_U and lambda. But in the first iteration init_z and init_lambda are zero (false) so the assert commands in get_starting_point() kill the programm. By deleting the assert commands it seems the values I enter for this vectors get really used inside (changing them results in different convergence).
>
> Q3: Someone can tell me what's happening there inside? I just know from debugging that get_starting_point() gets called twice in one iteration and by calling it the second time init_z and init_lambda are 1 (true).
>
> After my work the whole software should work like that:
>
> Loop:
> * FE-problem ->  Solve to store gradients, objective function value and so on (there's no second order information! ->  "hessian_approximation" ->  "limited-memory")
> * Running IPOPT for one iteration
>   ** Input the information of the FE Solver and IPOPT's former solution
>   ** Output the information of IPOPT and store them (with new design variable values a new FE-problem is generated)
> * Termination criteria checking by the exisiting software (not by IPOPT)
>
>
> Thanks in advance,
>
> Michael



More information about the Ipopt mailing list