# DCISolver - Dynamic Control of Infeasibility Solver

Documentation CI Coverage Release DOI

DCI is a solver for equality-constrained nonlinear problems, i.e., optimization problems of the form

min f(x)     s.t.     c(x) = 0.


It uses other JuliaSmoothOptimizers packages for development. In particular, NLPModels.jl is used for defining the problem, and SolverCore for the output. 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

## References

Bielschowsky, R. H., & Gomes, F. A. Dynamic control of infeasibility in equality constrained optimization. SIAM Journal on Optimization, 19(3), 1299-1325 (2008). 10.1137/070679557

Migot, T., Orban D., & Siqueira A. S. DCISolver. jl: A Julia Solver for Nonlinear Optimization using Dynamic Control of Infeasibility. Journal of Open Source Software 70(7), 3991 (2022). 10.21105/joss.03991

## How to Cite

If you use DCISolver.jl in your work, please cite using the format given in CITATION.cff.

## Installation

1. LDLFactorizations.jl is used by default. Follow HSL.jl's MA57 installation for an alternative.
2. pkg> add DCISolver

## Example

using DCISolver, ADNLPModels

# Rosenbrock
nlp = ADNLPModel(x -> 100 * (x[2] - x[1]^2)^2 + (x[1] - 1)^2, [-1.2; 1.0])
stats = dci(nlp)

# Constrained
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])
stats = dci(nlp)


# Bug reports and discussions

If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, start an issue or a discussion on the topic, please.

If you want to ask a question not suited for a bug report, feel free to start a discussion here. This forum is for general discussion about this repository and the JuliaSmoothOptimizers, so questions about any of our packages are welcome.