Contained below is a list of the frequently asked questions for 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.
See How to use Ipopt.
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.
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.)
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.
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.
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.
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.)
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.
The new C++ version also contains features not available in the Fortran version.
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.