Skip to content

cvanaret/Uno

Repository files navigation

Uno

Contents

Uno (Unifying Nonlinear Optimization) is a C++ framework for solving nonlinearly constrained optimization problems of the form:

$$ \begin{align} \min_{x \in \mathbb{R}^n} & ~f(x) \\ \text{s.t.} & ~c_L \le c(x) \le c_U \\ & ~x_L \le x \le x_U \\ \end{align} $$

where $f: \mathbb{R}^n \rightarrow \mathbb{R}$ and $c: \mathbb{R}^n \rightarrow \mathbb{R}^m$ are (ideally twice) continuously differentiable.

Uno unifies Lagrange-Newton methods that iteratively solve the optimality (KKT) conditions with Newton's method. The following methods are currently supported:

  • Sequential (convex and nonconvex) Quadratic Programming (SQP) method
  • primal-dual Interior-Point Method (IPM)
  • Sequential Linear Programming (SLP)
  • Newton's method for unconstrained optimization

Uno breaks down these methods into a set of common building blocks that interact with one another, such as constraint reformulation, step computation, and globalization. These strategies can be combined at runtime in various ways.

Uno's wheel of strategies

Uno can be used via its AMPL/nl, Julia, Python, C, and Fortran interfaces.

Installation

See the installation guide file for instructions on how to compile Uno from source, or use the precompiled libraries and executables.

Getting started

To get started with Uno, check out the official documentation.

How to cite Uno

Our theory paper published in Mathematical Programming Computation may be cited with the following BibTeX entry:

@article{VanaretLeyffer2026,
  author = {Vanaret, Charlie and Leyffer, Sven},
  title = {Implementing a unified solver for nonlinearly constrained optimization},
  journal = {Mathematical Programming Computation},
  year = {2026},
  doi = {10.1007/s12532-026-00310-9}
}

We also submitted a software article to the Journal of Open Source Software (JOSS):

@unpublished{VanaretMontoison2026,
  author = {Vanaret, Charlie and Montoison, Alexis},
  title = {Uno: a composable framework for nonlinearly constrained optimization},
  year = {2026},
  note = {Submitted to the Journal of Open Source Software}
}

Credits

The theoretical unification framework was developed by Charlie Vanaret (Argonne National Laboratory & Zuse-Institut Berlin) and Sven Leyffer (Argonne National Laboratory). The interfaces and continuous integration infrastructure for Uno were developed and are maintained by Alexis Montoison (Argonne National Laboratory) and Charlie Vanaret. Uno itself was designed and implemented by Charlie Vanaret. It is released under the MIT license.

The contributors are (in alphabetical order): Oscar Dowson, Marcel Jacobse, Arnav Kapoor, David Kiessling, Rujia Liu, Stefano Lovato, Manuel Schaich, Silvio Traversaro.

The Uno logo was created by Charlie Vanaret based on a saddle point icon by luimonts (CC BY 3.0).