Ipopt Documentation  
 
Loading...
Searching...
No Matches
Frequenty Asked Questions

Contained below is a list of the frequently asked questions for Ipopt.

What is Ipopt?

Ipopt (*I*nterior *P*oint *OPT*imizer, pronounced eye-pea-Opt) is a software package for large-scale nonlinear optimization. Ipopt implements an interior-point algorithm for continuous, nonlinear, nonconvex, constrained optimization problems. It is meant to be a general purpose nonlinear programming (NLP) solver. However, it is mainly written for large-scale problems with up to million of variables and constraints. (For such large problems, it is assumed that the derivative matrices are sparse.)

Please see the Ipopt project page for a more detailed description.

How do I use Ipopt?

See How to use Ipopt.

What license is Ipopt released under?

The Ipopt source code is now released under the Eclipse Public License (EPL).

Originally (before release 3.9.2), IPOPT was released under the Common Public License (CPL). However, the CPL has been "deprecated and superseded" by the Ecplise Public License (EPL). The new license (EPL) is almost the same as the old with 2 "new and improved" features: (i) the license steward is the Eclipse Foundation (not IBM) and (ii) the EPL does not have the "defense termination clause" (aka the patent retaliation bit) which was a point of objection by some. Some additional information regarding the licenses might be found at this FAQ.

What do I need to build Ipopt?

While the source code for Ipopt itself is released as open source under the Eclipse Public License (EPL), compilation requires third party components (such as BLAS, LAPACK, some sparse linear solver library) which you have to obtain separately. The Ipopt documentation gives detailed instructions on how to obtain and compile these components. (These components may be covered by license agreements different from EPL and may not be free for commercial use.)

On what operating systems can Ipopt be used?

Convenient configuration scripts and Makefiles are provided and have been tested for several flavors of GNU/Linux, macOS, and MSYS2/MinGW. Previous versions of IPOPT have also been run on an old iPod, as well as BlueGene.

Is Ipopt thread-safe?

Ipopt itself is thread-safe. Please check the used third-party components, i.e., linear algebra and linear solvers, for thread-safety, too. For example, MUMPS is not thread-safe. Since Ipopt 3.14.0, however, calls into MUMPS are protected by a mutex in the Ipopt/MUMPS interface, so that it should be possible to use Ipopt with MUMPS in a multi-threading environment as well.

What is the method behind Ipopt?

Ipopt implements a interior point method for nonlinear programming. Search directions (coming from a linearization of the optimality conditions) can be computed in a full-space version by solving a large symmetric linear system.

Ipopt can employ second derivative information, if available, or otherwise approximate it by means of a limited-memory quasi-Newton approach (BFGS and SR1).

Global convergence of the method is ensured by a line search procedure, based on a filter method.

This paper describes the implementation of Ipopt: [12].

Additional technical information may be found in other publications here.

Who do I contact with questions about Ipopt?

If you have any questions or comments please create a discussion at the Ipopt GitHub Discussions system. Please include detailed information about your configuration (operating system, compilers, version number of Ipopt, etc) if you are writing about a compilation or execution problem. (Note: You need a GitHub account to create or contribute to a discussion.)

What is the difference between the Fortran version and the C++ version?

The original version of Ipopt was written in Fortran 77 by Andreas Wächter at Carnegie Mellon University. This version was contributed to the COIN-OR initiative and development has continued. In an effort to make Ipopt more flexible for new algorithm development, we set out to design and implement a new version of Ipopt in C++. This version was released on Aug. 26, 2005, and is the primary version for new developments. The previous Fortran version is still available, but will not see any new development other than bug fixes.

Currently, there are some features in the Fortran version that are not implemented in the C++ version.

  • Quasi-Newton Strategies: There is no reduced-space option in the new C++ version, but full space L-BFGS and L-SR1 options are slated for development.
  • Complementarities: Handling of complementarity constraints using Arvind Raghunathan's constraint relaxation is not implemented.

The new C++ version also contains features not available in the Fortran version.

  • New problem structure: The new problem structure handles general inequalities. This means that slack variables are handled by Ipopt and you no longer need to add them yourself. This also allows Ipopt to identify the slack variables and take extra steps.
  • Adaptive Mu Update: The new version of Ipopt includes an adaptive strategy for selecting the value of the barrier parameter. In many cases, this can reduce the number of iterations required by Ipopt. [7]
  • New linear solvers: More linear solvers have been interfaced with Ipopt with other linear solvers.

All in all we think that the new version is easier to use. Furthermore, we think it is now far easier for others to contribute to the open source project.