Cvanaret Uno Save

A next-gen solver for nonlinearly constrained nonconvex optimization. Modular and lightweight, it unifies iterative methods (SQP vs interior points) and globalization techniques (filter method vs merit function, line search vs trust region method) in a single framework. Competitive against IPOPT, filterSQP, SNOPT, MINOS and CONOPT

Project README

Uno

A modern, modular solver for nonlinearly constrained nonconvex optimization

Uno (Unifying Nonlinear Optimization) is a C++ library that unifies methods 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} $$

The theoretical abstract framework for unifying nonlinearly constrained nonconvex optimization was developed by Charlie Vanaret (Zuse-Institut Berlin) and Sven Leyffer (Argonne National Laboratory).

Uno was designed and implemented by Charlie Vanaret. Silvio Traversaro contributed to the CMakeLists.

Uno is released under the MIT license (see the license file).

Unifying nonlinearly constrained nonconvex optimization

We argue that most optimization methods can be broken down into four generic ingredients:

  • a constraint relaxation strategy: a systematic way to relax the nonlinear constraints;
  • a subproblem: a local model of the (possibly relaxed) problem at the current primal-dual iterate;
  • a globalization strategy: an acceptance test of the trial iterate;
  • a globalization mechanism: a recourse action upon rejection of the trial iterate.

Uno 1.0 implements the following strategies:

Uno 1.0 hypergraph

Any strategy combination can be automatically generated without any programming effort from the user. Note that all combinations do not necessarily result in sensible algorithms, or even convergent approaches. For more details, check out my presentation at the ICCOPT 2022 conference.

Uno 1.0 implements three presets, that is strategy combinations that correspond to existing solvers (as well as hyperparameter values found in their documentations):

  • filtersqp mimics filterSQP (trust-region feasibility restoration filter SQP method);
  • ipopt mimics IPOPT (line-search feasibility restoration filter barrier method);
  • byrd mimics Byrd's S $\ell_1$ QP (line-search $\ell_1$ merit S $\ell_1$ QP method).

Latest results (April 27, 2023)

Some of Uno combinations that correspond to existing solvers (called presets, see below) have been tested against state-of-the-art solvers on 429 small problems of the CUTEst benchmark. The figure below is a performance profile of Uno and state-of-the-art solvers filterSQP, IPOPT, SNOPT, MINOS, LANCELOT, LOQO and CONOPT; it shows how many problems are solved for a given budget of function evaluations (1 time, 2 times, 4 times, ..., $2^x$ times the number of objective evaluations of the best solver for each instance).

Performance profile of Uno 1.0

All log files can be found here.

How to cite Uno

In an article

Please be patient, we are actively working on our article.

On social media

To mention Uno on Twitter, use @UnoSolver.
To mention Uno on LinkedIn, use #unosolver.

Installation instructions

See the INSTALL file.

Solving a problem with Uno

To solve an AMPL model, type in the build directory: ./uno_ampl path_to_file/file.nl A couple of CUTEst instances are available in the /examples directory.

Combination of ingredients

To pick a globalization mechanism, use the argument (choose one of the possible options in brackets): -globalization_mechanism [LS|TR]
To pick a constraint relaxation strategy, use the argument: -constraint_relaxation_strategy [feasibility_restoration|l1_relaxation]
To pick a globalization strategy, use the argument: -globalization_strategy [l1_merit|leyffer_filter_strategy|waechter_filter_strategy]
To pick a subproblem method, use the argument: -subproblem [QP|LP|primal_dual_interior_point]
The options can be combined in the same command line.

For an overview of the available strategies, type: ./uno_ampl --strategies

To pick a preset, use the argument: -preset [filtersqp|ipopt|byrd]

Open Source Agenda is not affiliated with "Cvanaret Uno" Project. README Source: cvanaret/Uno