# Solvers Ecosystem

The solver ecosystem in JSO is in constant development. We are looking into unifying the solver structure to make solvers, subsolvers, and tools plug-and-play.

Within JSO, our solver development has focused on three types of packages:

• New methods, usually accompanied by research papers;

• our implementation of (well- or no-so-well-)known methods;

• wrappers around noteworthy solvers implemented in other languages.

## Solver list

Below is the list of solvers and the type of problems that they are designed to solve.

SolverPackageDescriptionTypes of problem
cannolesCaNNOLeS.jlRegularization method for nonlinear least squaresEquality-constrained NLS
dciDCISolver.jlTrust-cylinder similar to two-step SQPEquality-constrained NLP
lbfgsJSOSolvers.jlFactorization-free linesearch limited-memory inverse BFGSUnconstrained NLP
percivalPercival.jlFactorization-free augmented LagrangianGenerally-constrained NLP
ripqpRipQP.jlRegularized Interior-Point Quadratic ProgrammingConvex QP (incl. LP)
tronJSOSolvers.jlFactorization-free trust-region second-order or quasi-Newton methodBound-constrained NLP
tronlsJSOSolvers.jlLeast-squares versions of tronUnconstrained NLS
trunkJSOSolvers.jlFactorization-free trust-region second-order or quasi-Newton methodUnconstrained NLP
trunklsJSOSolvers.jlLeast-squares version of trunkUnconstrained NLS

## Types of problems

Our optimization problems can be defined as

$\text{minimize} \quad f(x) \quad \text{subject to} \quad x \in \Omega.$

Our constraint types and their meanings are:

• Unconstrained: $$\Omega = \mathbb R^n$$.

• Bound constrained: $$\Omega = \{x \in \mathbb R^n |\ \ell \leq x \leq u\}$$.

• Equality constrained: $$\Omega = \{x \in \mathbb R^n |\ c(x) = 0\}$$.

• Generally constrained: $$\Omega = \{x \in \mathbb R^n |\ c_L \leq c(x) \leq c_U \}$$, where $$c_{L_i} = c_{U_i}$$ is a valid possibility, as are $$c_{L_i} = -\infty$$ and $$c_{U_i} = \infty$$, but not at the same time.

In addition to differences in the constraints, we also have different objective types:

• NLP: General objective. The objective $$f(x)$$ of these problems has no special structure to exploit. Access to its derivatives occurs through the default NLPModels.jl API.

• NLS: Nonlinear Least-Squares problems. These problems are defined by $$f(x) = \tfrac{1}{2}\Vert F(x)\Vert^2$$, with $$F$$ and its derivatives available through the API for NLSModels, part of NLPModels.jl

• QP: Quadratic Programming. These problems are defined by $$f(x) = \tfrac{1}{2}x^T Q x + g^T x + c$$, with the API defined by QuadraticModels.jl.