An Open Source Software Library Designed to Solve General Purpose Nonlinear Optimization Problems

Optizelle [op-t_uh_-zel] is an open source software library designed to solve general purpose nonlinear optimization problems of the form

$$ \begin{array}{|l|l|}\hline \begin{array}[t]{rcl} \min\limits_{x\in X} && f(x) \end{array} & \begin{array}[t]{rcl} \min\limits_{x\in X} && f(x)\\ \mathrm{st} && g(x)=0 \end{array}\\\hline \begin{array}[t]{rcl} \min\limits_{x\in X} && f(x)\\ \mathrm{st} && h(x)\succeq 0 \end{array} & \begin{array}[t]{rcl} \min\limits_{x\in X} && f(x)\\ \mathrm{st} && g(x)=0\\ && h(x)\succeq 0 \end{array}\\\hline \end{array} $$

It features

  • State of the art algorithms

    • Unconstrained – steepest descent, preconditioned nonlinear-CG (Fletcher-Reeves, Polak-Ribiere, Hestenes-Stiefel), BFGS, Newton-CG, SR1, trust-region Newton, Barzilai-Borwein two-point approximation

    • Equality constrained – inexact composite-step SQP

    • Inequality constrained – primal-dual interior point method for cone constraints (linear, second-order cone, and semidefinite), log-barrier method for cone constraints

    • Constrained – any combination of the above

  • Open source

    • Released under the 2-Clause BSD License

    • Free and ready to use with both open and closed sourced commercial codes

  • Multilanguage support

    • Interfaces to C++, MATLAB/Octave, and Python
  • Robust computations and repeatability

    • Can stop, archive, and restart the computation from any optimization iteration

    • Combined with the multilanguage support, the optimization can be started in one language and migrated to another. For example, archived optimization runs that started in Python can be migrated and completed in C++.

  • User-defined parallelism

    • Fully compatible with OpenMP, MPI, or GPUs
  • Extensible linear algebra

    • Supports user-defined vector algebra and preconditioners

    • Enables sparse, dense, and matrix-free computations

    • Ability to define custom inner products and compatibility with preconditioners such as algebraic multigrid make Optizelle well-suited for PDE constrained optimization

  • Sophisticated Control of the Optimization Algorithms

    • Allows the user to insert arbitrary code into the optimization algorithm, which enables custom heuristics to be embedded without modifying the source. For example, in signal processing applications, the optimization iterates could be run through a band-pass filter at the end of each optimization iteration.


Platform Package Interfaces

Installation should be as easy as opening the package and following the instructions found therein.


We provide a full set of instructions for building, installing, and using Optizelle in our manual (letter,a4.)


For the source, please download a zipped archive of our code. For power users, we provide public access to our git repository on our Github page. In order to clone the Optizelle repository, use the command

    git clone https://github.com/OptimoJoe/Optizelle.git

Building and installation may be as simple as executing the following commands from the base Optizelle directory:

  1. mkdir build
  2. cd build
  3. ccmake ..
  4. Configure the build
  5. make install

For more detailed instructions, please consult our documentation.


For general questions, please visit our community forum. In addition, we provide paid support and consulting for Optizelle. If you are interested, please contact us.


We appreciate community contributions to Optizelle! If you notice a bug, please file a report on our issues page. Alternatively, for more in-depth contributions, clone our repository and send a pull request via our Github page. Finally, we appreciate help in answering general user questions on our community forum.