Multi-objective Optimization

Multi-objective optimization

Multi-objective optimization deals with mathematical optimization problems involving more than one objective function that have to be optimized simultaneously. Optimal decisions need to take into account the presence of trade-offs between two or more conflicting objectives. For example, minimizing the travelling distance while minimizing the travelling time (which might conflict if the shortest route is not the fastest). AIMMS allows you to define multiple objectives for linear models only. Multi-objective optimization in AIMMS is currently only supported by CPLEX and Gurobi.

Blended or lexicographic objective

You can define a mixture of blended and lexicographic (or hierarchical) objectives. A blended objective consists of the linear combination of several objectives with given weights. A lexicographic objective assumes that the objectives can be ranked in order of importance. A solution is considered lexicographically better than another solution if it is better in the first objective where they differ (following the order). For a minimization problem, an optimal solution is one that is lexicographically minimal.

The procedure GMP::Column::SetAsMultiObjective

Currently, the only way to specify a multi-objective optimization model is by using the GMP library. The procedure GMP::Column::SetAsMultiObjective can be used to mark a variable as an objective used for multi-objective optimization. Typically, the definition of such a variable defines the objective but the variable can also be used in an equality constraint which then defines the objective.


Consider the following declarations

Variable TotalDistance {
    Definition :  sum( (i,j), Distance(i,j) * X(i,j) );
Variable TotalTime {
    Definition :  sum( (i,j), TravelTime(i,j) * X(i,j) );

Here X(i,j) is a (binary) variable indicating whether the road between \(i\) and \(j\) is used. The variables TotalDistance and TotalTime can be specified as objectives in a multi-objective optimization model using:

GMP::Column::SetAsMultiObjective( genMP, TotalDistance, 2, 1.0, 0, 0.1 );
GMP::Column::SetAsMultiObjective( genMP, TotalTime, 1, 1.0, 0, 0.0 );

In this example, AIMMS will only pass the coefficients of the variable X as the multi-objective coefficients to the solver, so Distance(i,j) for the first objective and TravelTime(i,j) for the second objective. (In other words, the multi-objective variables TotalDistance and TotalTime will be substituted by their definitions.) After solving the model, the objectives can be deleted by calling the procedure GMP::Instance::DeleteMultiObjectives.

Priority and weight

The priority of the objective can be specified using the third argument of the procedure GMP::Column::SetAsMultiObjective. Its fourth argument defines the weight by which the objective coefficients are multiplied when forming a blended objective, i.e., if multiple objectives have the same priority. The last two (optional) arguments specify the absolute and relative tolerance respectively, which define the amount by which a solution may deviate from the optimal value for the objective.

Mathematical program objective

In case of multi-objective optimization, the variable specified in the Objective attribute of the mathematical program will be treated as a normal variable, that is, it will not be used as one of the multi-objectives, unless specified as such using the procedure GMP::Column::SetAsMultiObjective. Note that for multi-objective optimization, the mathematical program suffices Objective and BestBound refer to the (blended) objective with the highest priority (after the solve).