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 and of the constraint multipliers corresponding to the active bounds of
(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 and corresponding to the variable bounds (see (3)).

However, IPOPT also passes the values of the bound multipliers and 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 and
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 ( 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 ) 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.

- ... Zavala
^{21} - Department of Chemical Engineering, Carnegie Mellon University