Warm-Starting Capabilities via AMPL

based on documentation by Victor M. Zavala21


Warm-starting an interior-point algorithm is an important issue. One of the main difficulties arises from the fact that full-space variable information is required to generate the warm-starting point. While IPOPT is currently equipped to retrieve and receive this type of information through the TNLP interface, there exist some communication barriers in the AMPL interface. When the user solves the problem (1)-(3), IPOPT will only return the optimal values of the primal variables $ x$ and of the constraint multipliers corresponding to the active bounds of $ g(x)$ (see (2)). The constraint multiplier values can be accessed through the .dual suffix or through the .sol file. If this information is used to solve the same problem again, you will notice that IPOPT will take some iterations in finding the same solution. The reason for this is that we are missing the input information of the multipliers $ z^L$ and $ z^U$ corresponding to the variable bounds (see (3)).

However, IPOPT also passes the values of the bound multipliers $ z^L$ and $ z^U$ to AMPL. This will be communicated to the AMPL user through the suffixes ipopt_zL_out and ipopt_zU_out, respectively. The user does not need to declare these suffixes, they will be generated automatically in the AMPL interface. The user can use the suffix values to initialize the bound multipliers for subsequent calls. In order to pass this information to IPOPT, the user will need to declare and assign values to the suffixes ipopt_zL_in and ipopt_zU_in. For instance, for a given variable x[i], this can be done by setting:

  let x[i].ipopt_zL_in := x[i].ipopt_zL_out;
  let x[i].ipopt_zU_in := x[i].ipopt_zU_out;

If the user does not specify some of these values, IPOPT will set these multipliers to 1.0 (as before). In order to make the warm-start effective, the user has control over the following options from AMPL:
warm_start_init_point
warm_start_bound_push
warm_start_mult_bound_push

Note, that the use of this feature is far from solving the complicated issue of warm- starting interior-point algorithms. As a general advice, this feature will be useful if the user observes that the solution of subsequent problems (i.e., for different data instances) preserves the same set of active inequalities and bounds (monitor the values of $ z^L$ and $ z^U$ for subsequent solutions). In this case, initializing the bound multipliers and setting warm_start_init_point to yes and setting warm_start_bound_push, warm_start_mult_bound_push and mu_init to a small value ($ 10^{-6}$ or so) will reduce significantly the number of iterations. This is particularly useful in setting up on-line applications and high-level optimization strategies in AMPL. If active-set changes are observed between subsequent solutions, then this strategy might not decrease the number of iterations (in some cases, it might even tend to increase the number of iterations).

You might also want to try the adaptive barrier update (instead of the default monotone one where above we chose the initial value $ 10^{-6}$) when doing the warm start. This can be activated by setting the mu_strategy option to adaptive. Also the option mu_oracle gives some alternative choices. In general, the adaptive choice often leads to less iterations, but the computational cost per iteration might be higher.

The file $IPOPTDIR/Ipopt/doc/hs071_warmstart.mod illustrates the use of the warm-start feature on the HS071 problem, see also Section 3.1.



Footnotes

... Zavala21
Department of Chemical Engineering, Carnegie Mellon University