Ipopt Frequently Asked Questions
Contained below is a list of the frequently asked questions for Ipopt. Currently, this list is limited, but it will grow in the near future.
What is IPOPT?
IPOPT (Interior Point OPTimizer, 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 Homepage for a more detailed description.
How do I use IPOPT?
You can use IPOPT directly from your own computer code (C++, C, Fortran, Matlab, R). You can also use Ipopt from optimization modeling environments such as AMPL, GAMS, CUTEr, as well as on the NEOS Server.
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.)
Some precompiled binaries are also available here, but they might not always work on your specific system setup.
On what operating systems can IPOPT be used?
Convenient configuration scripts and Makefiles are provided and have been tested for several flavors of UNIX (MacOS, AIX, IRIX, Linux, OSF1, SunOS). The code has also been successfully compiled with the Developer Studio under Windows. A native win32 compilation can also be done using MinGW/MSYS see Hints and Tricks. IPOPT had also been run on an old iPod, as well as BlueGene?.
Is IPOPT thread-safe?
IPOPT currently uses smart-pointers and a tagging mechanism, which unfortunately make the code not thread-safe.
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: A. Wächter and L. T. Biegler, On the Implementation of a Primal-Dual Interior Point Filter Line Search Algorithm for Large-Scale Nonlinear Programming, Mathematical Programming 106(1), pp. 25-57, 2006
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 send a message to the Ipopt Mailing List. 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 to subscribe to the mailing list before you can post a message.)
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. Adaptive Barrier Strategies for Nonlinear Interior Methods
- New linear solvers: Work is underway to interface Ipopt with other linear solvers, including open-source tools. Stay posted for more news.
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.