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.