SIPOPT: Optimal Sensitivity Based on IPOPT

based on documentation by Hans Pirnay22 and Rodrigo López-Negrete23


The SIPOPT project provides a toolbox that uses NLP sensitivity theory to generate fast approximations to solutions when parameters in the problem change. It has been developed primarily by Hans Pirnay (RWTH-Aachen), Rodrigo López-Negrete (CMU), and Lorenz Biegler (CMU).

Sensitivity of nonlinear programming problems is a key step in any optimization study. Sensitivity provides information on regularity and curvature conditions at KKT points, assesses which variables play dominant roles in the optimization, and provides first order estimates for parametric nonlinear programs. Moreover, for NLP algorithms that use exact second derivatives, sensitivity can be implemented very efficiently within NLP solvers and provide valuable information with very little added computation. This implementation provides IPOPT with the capabilities to calculate sensitivities, and approximate perturbed solutions with them.

The basic sensitivity strategy implemented here is based on the application of the Implicit Function Theorem (IFT) to the KKT conditions of the NLP. As shown by Fiacco (1983), sensitivities can be obtained from a solution with suitable regularity conditions merely by solving a linearization of the KKT conditions. More details can be found in [7]. If you are using SIPOPT for your research, please cite [7].

The SIPOPT project is available in the IPOPT repository under $IPOPTDIR/Ipopt/contrib/sIPOPT. After having installed IPOPT successfully, SIPOPT can be build and installed by changing to the directory $IPOPTDIR/build/Ipopt/contrib/sIPOPT and executing make install. This should copy the generated libraries libsipopt.* to $IPOPTDIR/build/lib and an AMPL executable ipopt_sens to $IPOPTDIR/build/bin.

The files $IPOPTDIR/Ipopt/contrib/sIPOPT/examples/parametric_ampl/parametric.{mod,run} are an example that shows how to use SIPOPT to solve the NLP

$\displaystyle \min\quad$ $\displaystyle x_1^2 + x_2^2 + x_3^2,$ (10)
$\displaystyle \mathrm{such that}\quad$ $\displaystyle 6x_1 + 3x_2 + 2x_3 = p_1,$ (11)
  $\displaystyle p_2 x_1 + x_2 - x_3 = 1,$ (12)
  $\displaystyle x_1, x_2, x_3 \geq 0,$ (13)

where we perturb the parameters $ p_1$ and $ p_2$ from $ p_a = (p_1, p_2) = (5, 1)$ to $ p_b = (4.5, 1)$.

Note, that SIPOPT has been developed under the constraint that it must work with the regular IPOPT code. Due to this constraint, some compromises had to be made. However, there is an ongoing effort to develop SIPOPT 2, which is a fork of the IPOPT code that allows for the explicit definition of parametric NLPs. This code can be found at https://github.com/athrpf/sipopt2. If you have questions about SIPOPT 2, please contact ​Hans Pirnay.



Footnotes

... Pirnay22
RWTH Aachen, hans.pirnay@avt.rwth-aachen.de
... L\'opez-Negrete23
Carnegie Mellon University, rln@cmu.edu