  Derivative-based iterative methods for nonlinearly constrained nonconvex
optimization usually share common algorithmic components, such as strategies
for computing a descent direction and mechanisms that promote global
convergence. Based on this observation, we introduce an abstract framework
based on four common ingredients that describes most derivative-based iterative
methods and unifies their workflows. We then present Uno, a modular C++ solver
that implements our abstract framework and allows the automatic generation of
various strategy combinations with no programming effort from the user. Uno is
meant to (1) organize mathematical optimization strategies into a coherent
hierarchy; (2) offer a wide range of efficient and robust methods that can be
compared for a given instance; (3) enable researchers to experiment with novel
optimization strategies; and (4) reduce the cost of development and maintenance
of multiple optimization solvers. Uno's software design allows user to compose
new customized solvers for emerging optimization areas such as robust
optimization or optimization problems with complementarity constraints, while
building on reliable nonlinear optimization techniques. We demonstrate that Uno
is highly competitive against state-of-the-art solvers filterSQP, IPOPT, SNOPT,
MINOS, LANCELOT, LOQO, and CONOPT on a subset of 429 small problems from the
CUTEst collection. Uno is available as open-source software under the MIT
license at https://github.com/cvanaret/Uno .
