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.