DCISolver - Dynamic Control of Infeasibility Solver
DCI is a solver for equality-constrained nonlinear problems, i.e., optimization problems of the form
\[ \min_x \ f(x) \quad \text{s.t.} \quad c(x) = 0,\]
based on the paper
Bielschowsky, R. H., & Gomes, F. A. Dynamic control of infeasibility in equality constrained optimization. SIAM Journal on Optimization, 19(3), 1299-1325 (2008). 10.1007/s10589-020-00201-2
DCISolver
is a JuliaSmoothOptimizers-compliant solver. It takes an AbstractNLPModel
as an input and returns a GenericExecutionStats
.
Installation
DCISolver
is a registered package. To install this package, open the Julia REPL (i.e., execute the julia binary), type ] to enter package mode, and install DCISolver
as follows
add DCISolver
It uses LDLFactorizations.jl by default to compute the factorization in the tangent step. Follow HSL.jl's MA57
installation for an alternative.
The feasibility steps are factorization-free and use iterative methods from Krylov.jl.
Example
using DCISolver, ADNLPModels, Logging
nlp = ADNLPModel(
x -> 100 * (x[2] - x[1]^2)^2 + (x[1] - 1)^2,
[-1.2; 1.0],
x -> [x[1] * x[2] - 1],
[0.0], [0.0],
name = "Rosenbrock with x₁x₂=1"
)
stats = with_logger(NullLogger()) do
dci(nlp, nlp.meta.x0)
end
println(stats)
Generic Execution stats status: first-order stationary objective value: 2.035899899718871e-10 primal feasibility: 2.851882273002815e-6 dual feasibility: 0.0006043535477299483 solution: [1.0000014238685366 1.000001428011703] iterations: 9 elapsed time: 0.618865966796875 solver specific: lagrangian: -2.053608276550044e-10 multiplier: [-0.0001433968090121397]