[Ipopt] How to warm start dual variables in IPOPT?

Илья Палачев iliyapalachev at gmail.com
Sat May 7 08:34:19 EDT 2016


I'm having the question regarding the similar problem.

While trying to do the following:
1. Solve some problem (it succeeds in ~2 minutes)
... and save primal and dual variables in some intermediate buffers using finalize_solution callback.
2. Re-run the solution of the same problem (it succeeds almost in the same time)

The last iteration of the 1st run shows the following line in the log:

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  64  1.5248822e-04 0.00e+00 1.01e-16 -11.0 5.36e-02    -  1.00e+00 1.00e+00h  1
But the first iteration of the 2nd run shows the following:

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  1.5478317e-04 0.00e+00 1.00e-03  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0

As you can see, dual infeasibility (inf_du) is different at these two iterations. Is it correct?

It's very likely that the difference between them (~ 0.001) is some internal constant, such as other constants that are described in the options manual that are also having this default value (0.001). Is there any option that controls that parameter?

Thanks in advance,

06.11.2015, 22:24, "Stefan Vigerske" <stefan at math.hu-berlin.de>:
> Hi,
> as an interior point solver, it cannot do very much with the solution of
> a previous problem, but the log should at least differ a bit if you set
> a warm_start_init_point.
> If you set this option, I believe init_z and init_lambda should be true
> in TNLP::get_starting_point(). You might want to verify this.
> Stefan
> On 11/05/2015 11:40 AM, max leo correa cordova wrote:
>>  Hello. I am using IPOPT for solving MPC using the c++ interface. I want to improve the computational time in the solution by using the final values of primal and dual variables (x, lambda, z_l and z_u) in the previous prediction. I have read the documentation and used:
>>  app->Options()->SetStringValue("warm_start_init_point","yes");
>>  and initialize lambda, z_l and z_u in MyNLP::get_starting_point(), but the results are the same and seems that Ipopt doesn't use the dual initial values. Could you help me please how to do that correct or is it factible to use this approach of warm starting? I will apprecciate your help.
>>  Thanks in advance
>>  Max
>>  _______________________________________________
>>  Ipopt mailing list
>>  Ipopt at list.coin-or.org
>>  http://list.coin-or.org/mailman/listinfo/ipopt
> --
> http://www.gams.com/~stefan
> _______________________________________________
> Ipopt mailing list
> Ipopt at list.coin-or.org
> http://list.coin-or.org/mailman/listinfo/ipopt

More information about the Ipopt mailing list