This repository implements a sparse interior point solver in C++.
Our method optimizes nonlinear nonconvex optimization problems of the form
The functions
The user is required to provide a linear system solver for the Newton-KKT systems. This can be done, for example via SLACG or SIP_QDLDL.
Some examples with code can be found in the SIP Examples repository.
No dynamic memory allocation is done inside of the solver, as long as logging is off.
SIP implements the Augmented Barrier-Lagrangian method, which can be seen as a combination of the Primal Infeasible Interior Point and the Augmented Lagrangian methods (as shown below).
We represent the barrier parameter by
We start by defining the Barrier-Lagrangian
Next, we define the Augmented Barrier-Lagrangian
We will use
As we wish to employ a primal method, we compute
Below, we use
Noting that
we let
and find
Above, we introduced auxiliary variables
Letting
Note that
Letting
We can now reformulate the linear system above in terms of
This formulation has the advantage of being more numerically stable, due to having fewer dependencies on
Using
assuming that
This means that
Once a primal line search step size
where
The dual variable updates are scaled by
Note that the only terms of
In particular, when these inner products are negative,
A fraction-to-the-boundary rule is applied to prevent
In this section, we show that
is invertible, assuming again that
To prove this, letting
note that
where we eliminated
Depending on the sparsity pattern of the matrices involved,
doing this block-elimination (in full or in part) may be reasonable,
although typically it is faster to solve the block-3x3 formulation above
via a sparse