In order to build IPOPT, some third party components are required:
For more information on third-party components and how to obtain them,
see Section 2.2.
- BLAS (Basic Linear Algebra Subroutines). Many vendors of
compilers and operating systems provide precompiled and optimized
libraries for these dense linear algebra subroutines. You can also
get the source code for a simple reference implementation from www.netlib.org and have the IPOPT distribution compile it
automatically. However, it is strongly recommended to use some
optimized BLAS implemetion, for large problems this can make a
runtime difference of an order of magnitude!
Examples for efficient BLAS implementations are:
You find more information on the web by googling them.
- From hardware vendors:
- ACML (AMD Core Math Library) by AMD
- ESSL (Engineering Scientific Subroutine Library) by IBM
- MKL (Math Kernel Library) by Intel
- Sun Performance Library by Sun
- Atlas (Automatically Tuned Linear Algebra Software)
Note: BLAS libraries distributed with Linux are usually not
- LAPACK (Linear Algebra PACKage). Also for LAPACK, some vendors
offer precompiled and optimized libraries. But like with BLAS, you
can get the source code from www.netlib.org and have the
IPOPT distribution compile it automatically.
Note that currently LAPACK is only required if you intend to use the
quasi-Newton options in IPOPT. You can compile the code without
LAPACK, but an error message will then occur if you try to run the
code with an option that requires LAPACK. Currently, the LAPACK
routines that are used by IPOPT are only DPOTRF, DPOTRS, and DSYEV.
Note: LAPACK libraries distributed with Linux are usually not
- A sparse symmetric indefinite linear solver. IPOPT needs
to obtain the solution of sparse, symmetric, indefinite linear
systems, and for this it relies on third-party code.
Currently, the following linear solvers can be used:
You should include at least one of the linear solvers above in order
to run IPOPT, and if you want to be able to switch easily between
different alternatives, you can compile IPOPT with all of them.
- MA27 from the Harwell Subroutine Library
- MA57 from the Harwell Subroutine Library
- MUMPS (MUltifrontal Massively Parallel sparse direct Solver)
- The Parallel Sparse Direct Solver (PARDISO)
Note: The Pardiso version in Intel's MKL library does not yet
support the features necessary for IPOPT.
- The Watson Sparse Matrix Package (WSMP)
The IPOPT library also has mechanisms to load the MA27, MA57, and
Pardiso linear solvers from a shared library at runtime, if the
library has not been compiled with them (see
NOTE: The solution of the linear systems is a central
ingredient in IPOPT and the optimizer's performance and
robustness depends on your choice. The best choice depends on
your application, and it makes sense to try different options.
Most of the solvers also rely on efficient BLAS code (see above),
so you should use a good BLAS library tailored to your system.
Please keep this in mind, particularly when you are comparing
IPOPT with other optimization codes.
If you are compiling MA57 or MUMPS within the IPOPT build system,
you should also include the METIS linear system ordering package.
Interfaces to other linear solvers might be added in the future; if
you are interested in contributing such an interface please contact
us! Note that IPOPT requires that the linear solver is able to
provide the inertia (number of positive and negative eigenvalues) of
the symmetric matrix that is factorized.
- Furthermore, IPOPT can also use the Harwell Subroutine MC19
for scaling of the linear systems before they are passed to the
linear solver. This may be particularly useful if IPOPT is used
with MA27 or MA57. However, it is not required to have MC19 to
compile IPOPT; if this routine is missing, the scaling is never
- ASL (AMPL Solver Library). The source code is available at www.netlib.org, and the IPOPT makefiles will automatically
compile it for you if you put the source code into a designated
space. NOTE: This is only required if you want to use IPOPT from
AMPL and want to compile the IPOPT AMPL solver executable.
Since the IPOPT code is written in C++, you will need a C++ compiler
to build the IPOPT library. We tried very hard to write the code as
platform and compiler independent as possible.
In addition, the configuration script currently also searches for a
Fortran, since some of the dependencies above are written in Fortran.
If all third party dependencies are available as self-contained
libraries, those compilers are in principle not necessary. Also, it
is possible to use the Fortran-to-C compiler f2c from www.netlib.org/f2c to convert Fortran code to C, and compile the
resulting C files with a C compiler and create a library containing
the required third party dependencies. We have tested and used this
in connection with the Microsoft Visual C++ compiler, and instructions
on how to use it in this context are given below.