This article needs additional citations for verification. (August 2013) |
Given a transformation between input and output values, described by a mathematical function, optimization deals with generating and selecting the best solution from some set of available alternatives, by systematically choosing input values from within an allowed set, computing the output of the function and recording the best output values found during the process. Many real-world problems can be modeled in this way. For example, the inputs could be design parameters for a motor, the output could be the power consumption. For another optimization, the inputs could be business choices and the output could be the profit obtained.
An optimization problem, (in this case a minimization problem), can be represented in the following way:
In continuous optimization, 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. In combinatorial optimization, A is some subset of a discrete space, like binary strings, permutations, or sets of integers.
The use of optimization software requires that the function f is defined in a suitable programming language and connected at compilation or run time 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) and, in some cases, additional information about the function like derivatives.
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 list of notable optimization software organized according to license and business model type.