Comparison of optimization software
|This article's lead section may not adequately summarize key points of its contents. (October 2010)|
Given a system transforming a set of inputs to output values, described by a mathematical function f, optimization refers to the generation and selection of a best solution from some set of available alternThe Nature of Mathematical Programming," Mathematical Programming Glossary, INFORMS Computing Society.</ref> by systematically choosing input values from within an allowed set, computing the value of the function, and recording the best value found during the process. Many real-world and theoretical problems may be modeled in this general framework. For example, the inputs can be design parameters of a motor, the output can be the power consumption, or the inputs can be business choices and the output can be the obtained profit, or the inputs can describe the configuration of a physical system and the output can be its energy.
An optimization problem can be represented in the following way
- Given: a function f : A R from some set A to the real numbers
- Search for: an element x0 in A such that f(x0) ≤ f(x) for all x in A ("minimization").
Typically, A is some subset of the Euclidean space Rn, often specified by a set of constraints, equalities or inequalities that the members of A have to satisfy. Maximization can be reduced to minimization by multiplying the function by minus one.
The use of optimization software requires that the function f is defined in a suitable programming language and linked to the optimization software. The optimization software will deliver input values in A, the software module realizing f will deliver the computed value f(x). In this manner, a clear separation of concerns is obtained: different optimization software modules can be easily tested on the same function f, or a given optimization software can be used for different functions f.
The following tables provide a comparison of optimization software libraries, either specialized or general purpose libraries with significant optimization coverage.
|Name||Language||Latest stable version||Academic/noncommercial
use is free
|Can be used in
|ALGLIB||C++, C#, FreePascal, VBA||3.8.0 / August 2013||Yes||Yes||Dual (Commercial, GPL)||General purpose library, includes optimization package.|
|AMPL||C||October 2013||Yes||Yes||Dual (Commercial, academic)||A popular algebraic modeling language for linear, mixed-integer and nonlinear optimization. Student and AMPL for courses versions are available for free.|
|APMonitor||Fortran, C++, Python, Matlab, Julia||0.6.2 / March 2016||Yes||Yes||Dual (Commercial, academic)||A differential and algebraic modeling language for mixed-integer and nonlinear optimization. Freely available interfaces for Matlab, Python, and Julia.|
|Artelys Knitro||C, C++, Python, Java, C#, Matlab, R||10.1 / April 2016||No||Yes||Proprietary||General purpose library, specialized in nonlinear optimization. Handles mixed-integer problems (MINLP) and mathematical programs with equilibrium constraints (MPEC). Specialized algorithms for nonlinear least squares problems.|
|GNU Scientific Library||C||1.16 / July 2013||Yes||No||GPL||Free library provided by GNU project.|
|GNU Linear Programming Kit||C||4.52 / July 2013||Yes||No||GPL||Free library for linear programming (LP) and mixed integer programming (MIP).|
|IMSL Numerical Libraries||C, Java, C#, Fortran, Python||many components||No||Yes||Proprietary|
|LIONsolver||C++, Java||2.0.198 / October 2011||Yes||Yes||Proprietary||Support for interactive and learning optimization,
according to RSO principles .
|MKL||C++, Fortran||11.1 / October 2013||No||Yes||Proprietary||Numerical library from Intel. MKL is specialized on linear algebra,
but contains some optimization-related functionality.
|MIDACO||C++, Python, Matlab, C#, Fortran, R, Java, Excel, VBA||5.0 / April 2016||Yes||Yes||Dual (Commercial, BY-NC-ND)||General purpose global optimization solver, single- and multi-objective MINLP problems, supporting parallelization and large-scale. Free limited version available under BY-NC-ND.|
|NAG Numerical Libraries||C, Fortran||Mark 24 / October 2013||No||Yes||Proprietary|
|NMath||C#||5.3 / May 2013||No||Yes||Proprietary||C# numerical library built on top of MKL.|
|OptaPlanner||Java||6.0.1.Final / Dec 2013||Yes||Yes||ASL||Lightweight optimization solver in Java|
|Pagmo/Pygmo||C++ and Python||2.3||Yes||Yes||GPLv3||Easy coarse parallelization of solvers. Contains IPOPT, SQP solvers, Evolutionary Solvers, Swarm Intelligence solvers and more ...|
|SciPy||Python||0.13.1 / November 2013||Yes||Yes||BSD||General purpose numerical and scientific computing library for Python.|