Warm start in IPOPT

Hi,

I’m trying to warm start a model in IPOPT. This is what my code looks like:

ampl.setOption('solver', 'ipopt')
ampl.param['FIX'] = 1
ampl.solve() ---- FIRST RUN OF THE MODEL
ampl.param['FIX'] = 0
ampl.solve() ---- SECOND RUN OF THE MODEL

The problem is that the last iteration of the first run is the following:

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
  73  9.1505589e+03 9.65e-03 7.07e-01  -5.7 3.88e+00  -4.5 6.70e-01 3.03e-01f  1

But the first run of the second run is the following:

iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du alpha_pr  ls
   0  9.1505589e+03 2.06e+02 1.00e+00  -1.0 0.00e+00    -  0.00e+00 0.00e+00   0 y

It can be seen that the primal infeasibility increases a lot, and it should not because the second run of the model includes less constraints that the first one, so I’m just wondering if I am not warm starting the second run properly and some additional instructions are required.

Thanks!

Salva.

In general, it is difficult to get warm-starting to work for interior point solvers like Ipopt. However, Ipopt does have a number of options for requesting and managing a warm start — see Warm Start in the Ipopt options listing. There’s also a discussion of How to warm start dual variables in IPOPT? in an old Ipopt user forum posting.

(AMPL does pass the primal and dual optimal values back to Ipopt when you solve for a second time.)