GithubHelp home page GithubHelp logo

alexandremoulti / uno Goto Github PK

View Code? Open in Web Editor NEW

This project forked from cvanaret/uno

0.0 0.0 0.0 43.47 MB

A modular and modern solver for nonlinearly constrained non-convex optimization. Unifies the workflows of most existing methods. Dozens of strategy combinations. Competitive against IPOPT and filterSQP

Home Page: https://uno-unifying-nonlinear-optimization.readthedocs.io

License: MIT License

Shell 0.38% C++ 97.72% Fortran 0.85% CMake 1.06%

uno's Introduction

Uno (Unifying Nonlinear Optimization)

What is 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.} & ~c_L \le c(x) \le c_U \\ & ~x_L \le x \le x_U \\ \end{align} $$

Uno breaks downs optimization methods 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.

The following hypergraph illustrates how some of the state-of-the-art solvers can be decomposed in terms of the four ingredients:

Combination hypergraph

Uno 1.0

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. This is joint work with Sven Leyffer (Argonne National Laboratory).

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; 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

How to cite Uno

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

Contributions

Uno was designed and implemented by Charlie Vanaret (Zuse-Institut Berlin).
The theoretical abstract framework for unifying nonlinear optimization was developed by Charlie Vanaret and Sven Leyffer.

Silvio Traversaro contributed to the CMakeLists.

License

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

Installation instructions

Packages and libraries

Compilation

  1. Create a build directory in the main directory: mkdir build
  2. Move to the build directory: cd build/
  3. Type cmake (Release can be replaced with Debug): cmake -DCMAKE_BUILD_TYPE=Release ..
  4. (optional) Use ccmake to provide the paths to the required and optional libraries: ccmake ..
  5. Compile (in parallel: n being the number of threads, e.g. 6): make -jn

To compile the code with different configurations, simply create a build directory for each configuration and perform instructions 1 to 5.

Unit tests

  1. Install the GoogleTest suite: sudo apt-get install googletest
  2. Perform steps 2 and 3
  3. Run the test suite: ./run_unotest

Autocompletion

To benefit from autocompletion, install the file uno_ampl-completion.bash: sudo cp uno_ampl-completion.bash /etc/bash_completion.d/ and open a new terminal.

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

Presets

Uno presets are strategy combinations that correspond to existing solvers (as well as known values for their hyperparameters). Uno 1.0 implements three presets:

  • 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).

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

uno's People

Contributors

cvanaret avatar traversaro avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.