# New package: DCISolver.jl

We are very happy to announce the publication in the Journal of Open Source Software of the paper DCISolver.jl: A Julia Solver for Nonlinear Optimization using Dynamic Control of Infeasibility. It is accessible in open access here.

DCISolver.jl is a new pure Julia implementation of the Dynamic Control of Infeasibility method (DCI), introduced by Bielschowsky and Gomes in 2008, for solving the equality-constrained nonlinear optimization problem

$\underset{x \in \mathbb{R}^n}{\text{minimize}} \quad f(x) \quad \text{subject to} \quad h(x) = 0,$

where $$f:\mathbb{R}^n \rightarrow \mathbb{R}$$ and $$h:\mathbb{R}^n \rightarrow \mathbb{R}^m$$ are twice continuously differentiable. DCI is an iterative method that aims to compute a local minimum using first and second-order derivatives. Our initial motivation for developing DCISolver.jl is to solve PDE-constrained optimization problems, many of which have equality constraints only.

DCISolver.jl is built upon the JuliaSmoothOptimizers (JSO) tools, and takes as input an AbstractNLPModel, JSO's general model API defined in NLPModels.jl, a flexible data type to evaluate objective and constraints, their derivatives, and to provide any information that a solver might request from a model. The user can hand-code derivatives, use automatic differentiation, or use JSO-interfaces to classical mathematical optimization modeling languages such as AMPL, CUTEst, or JuMP.

We refer to the documentation and tutorials for examples and benchmarks.

## Example

In the following example, we use DCISolver.jl on two optimization problems modeled with ADNLPModels.jl using automatic differentiation to compute the derivatives.

using DCISolver, ADNLPModels
# Unconstrained Rosenbrock optimization
nlp = ADNLPModel(x -> 100 * (x[2] - x[1]^2)^2 + (x[1] - 1)^2, [-1.2; 1.0])
stats = dci(nlp)
# Constrained optimization
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)

## References

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, 7(70), 3991 (2022). 10.21105/joss.03991

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