uno
A next-gen SQP & barrier solver for nonlinearly constrained optimization
Science Score: 64.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
✓CITATION.cff file
Found CITATION.cff file -
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
✓Academic publication links
Links to: researchgate.net -
✓Committers with academic emails
3 of 11 committers (27.3%) from academic institutions -
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.7%) to scientific vocabulary
Keywords
Keywords from Contributors
Repository
A next-gen SQP & barrier solver for nonlinearly constrained optimization
Basic Info
Statistics
- Stars: 360
- Watchers: 10
- Forks: 30
- Open Issues: 20
- Releases: 8
Topics
Metadata Files
README.md
Uno
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.} & ~cL \le c(x) \le cU \ & ~xL \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.
This formulation allows for unbounded variables and equality constraints, and explicitly separates general nonlinear and bound constraints.
Unifying nonlinearly constrained optimization
We consider the family of Lagrange-Newton (essentially SQP and interior-point) methods that iteratively solve the optimality (KKT) conditions with Newton's method, and we argue that most Lagrange-Newton methods can be broken down into the following generic ingredients: * a constraint relaxation strategy: a systematic way to relax the general constraints; * an inequality handling method: a systematic way to handle the inequality constraints; * a Lagrange-Newton subproblem: a local Lagrange-Newton approximation of the reformulated problem, composed of: * a Hessian model: a model of the Lagrangian Hessian of the original problem; * a regularization strategy: a strategy to regularize the Lagrangian Hessian or the augmented system of the reformulated problem; * a globalization strategy: an acceptance test of the trial iterate; * a globalization mechanism: a recourse action upon rejection of the trial iterate.
The following graph gives an overview of state-of-the-art strategies:
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 our preprint or my latest slides.
Uno implements 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 with exact Hessian);
* ipopt mimics IPOPT (line-search feasibility restoration filter barrier method with exact Hessian and primal-dual regularization).
Installation instructions
See the INSTALL file for instructions on how to compile Uno from source or use the precompiled libraries and executables.
Solving a problem with Uno
Controlling Uno via options
Options can be set in three different ways (with decreasing precedence):
- passing an option file (option_file=file) that contains option value on each line;
- setting a preset that mimics an existing solver (preset=[filtersqp|ipopt]);
- setting individual options (see the default options).
Interfaces
AMPL/nl files
To solve an AMPL model in the .nl format, type in the build directory: ./uno_ampl model.nl [-AMPL] [option=value ...]
where [option=value ...] is a list of options separated by spaces. If the -AMPL flag is supplied, the solution is written to the AMPL solution file model.sol.
A couple of CUTEst instances are available in the /examples directory.
Julia
Uno can be installed in Julia via Uno_jll.jl and used via AmplNLWriter.jl. An example can be found here.
Combining strategies on the fly
For an overview of the available strategies, type: ./uno_ampl --strategies:
- to pick a constraint relaxation strategy, use the argument: constraint_relaxation_strategy=[feasibility_restoration]
- to pick an inequality handling method, use the argument: inequality_handling_method=[inequality_constrained|primal_dual_interior_point]
- to pick a Hessian model, use the argument: hessian_model=[exact|identity|zero]
- to pick a regularization strategy, use the argument: regularization_strategy=[primal|primal_dual|none]
- to pick a globalization strategy, use the argument: globalization_strategy=[l1_merit|fletcher_filter_method|waechter_filter_method|funnel_method]
- to pick a globalization mechanism, use the argument : globalization_mechanism=[TR|LS]
Latest results (August 13, 2025)
Uno presets 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).
All log files can be found here.
How to cite Uno
In an article
We have submitted our paper to the Mathematical Programming Computation journal. The preprint is available on ResearchGate.
Until it is published, you can use the following bibtex entry:
@unpublished{VanaretLeyffer2024,
author = {Vanaret, Charlie and Leyffer, Sven},
title = {Unifying nonlinearly constrained nonconvex optimization},
year = {2024},
note = {Submitted to Mathematical Programming Computation}
}
On social media
To mention Uno on Twitter, use @UnoSolver.
To mention Uno on LinkedIn, use #unosolver.
Credits
The theoretical abstract framework for unifying nonlinearly constrained optimization was developed by Charlie Vanaret (Argonne National Laboratory & Zuse-Institut Berlin) and Sven Leyffer (Argonne National Laboratory). Uno was designed and implemented by Charlie Vanaret. It is released under the MIT license (see the license file).
The contributors are (in alphabetical order): Oscar Dowson, Marcel Jacobse, David Kiessling, Alexis Montoison, Rujia Liu, Manuel Schaich, Silvio Traversaro.
The Uno logo was created by Charlie Vanaret based on a saddle point icon by luimonts (CC BY 3.0).
Owner
- Name: Dr. Charlie Vanaret
- Login: cvanaret
- Kind: user
- Location: Berlin, Germany
- Company: Zuse-Institut Berlin
- Website: https://cvanaret.wordpress.com/
- Twitter: cvanaret
- Repositories: 2
- Profile: https://github.com/cvanaret
Researcher in nonlinear optimization, Lead developer of the modular open-source Uno (Unifying Nonlinear Optimization) solver
Citation (CITATION.cff)
cff-version: 2.0.3
message: "If you use this software, please cite it as below."
authors:
- family-names: "Vanaret"
given-names: "Charlie"
orcid: "https://orcid.org/0000-0002-1131-7631"
title: "Uno"
version: 2.0.3
url: "https://github.com/cvanaret/Uno"
preferred-citation:
type: unpublished
authors:
- family-names: "Vanaret"
given-names: "Charlie"
orcid: "https://orcid.org/0000-0002-1131-7631"
- family-names: "Leyffer"
given-names: "Sven"
orcid: "https://orcid.org/0000-0001-8839-5876"
title: "Unifying nonlinearly constrained nonconvex optimization"
year: 2024
GitHub Events
Total
- Create event: 121
- Commit comment event: 8
- Release event: 5
- Issues event: 74
- Watch event: 80
- Delete event: 95
- Issue comment event: 325
- Push event: 614
- Pull request review comment event: 43
- Pull request review event: 73
- Pull request event: 302
- Fork event: 9
Last Year
- Create event: 121
- Commit comment event: 8
- Release event: 5
- Issues event: 74
- Watch event: 80
- Delete event: 95
- Issue comment event: 325
- Push event: 614
- Pull request review comment event: 43
- Pull request review event: 73
- Pull request event: 302
- Fork event: 9
Committers
Last synced: 7 months ago
Top Committers
| Name | Commits | |
|---|---|---|
| Charlie Vanaret | v****t@z****e | 826 |
| cvanaret | v****t@m****e | 609 |
| vanaret | c****t@e****r | 205 |
| vanaret | c****t@a****v | 42 |
| d.kiessling | d****g@k****e | 33 |
| Alexis Montoison | a****n@p****a | 27 |
| Oscar Dowson | o****w | 13 |
| Manuel Schaich | r****h@o****m | 11 |
| leyffer | l****r@a****v | 9 |
| Rujia Liu | r****u@u****m | 2 |
| Silvio Traversaro | s****o@t****t | 1 |
Committer Domains (Top 20 + Academic)
Issues and Pull Requests
Last synced: 4 months ago
All Time
- Total issues: 49
- Total pull requests: 266
- Average time to close issues: 3 days
- Average time to close pull requests: 2 days
- Total issue authors: 9
- Total pull request authors: 9
- Average comments per issue: 2.06
- Average comments per pull request: 0.85
- Merged pull requests: 196
- Bot issues: 0
- Bot pull requests: 0
Past Year
- Issues: 45
- Pull requests: 262
- Average time to close issues: 3 days
- Average time to close pull requests: 2 days
- Issue authors: 6
- Pull request authors: 8
- Average comments per issue: 2.02
- Average comments per pull request: 0.85
- Merged pull requests: 192
- Bot issues: 0
- Bot pull requests: 0
Top Authors
Issue Authors
- odow (19)
- cvanaret (18)
- amontoison (5)
- traversaro (2)
- FlorianSchwendinger (1)
- metab0t (1)
- rujialiu (1)
- MLopez-Ibanez (1)
- bzhangcw (1)
Pull Request Authors
- cvanaret (192)
- amontoison (44)
- odow (17)
- worc4021 (4)
- mjacobse (3)
- metab0t (2)
- rujialiu (2)
- traversaro (1)
- david0oo (1)