Procedure GMP::Column::SetAsMultiObjective(GMP, column, priority, weight, abstol, reltol)

GMP::Column::SetAsMultiObjective

The procedure GMP::Column::SetAsMultiObjective sets a column as one of the multi-objectives of a generated mathematical program, thereby creating a multi-objective optimization problem.

GMP::Column::SetAsMultiObjective(
     GMP,            ! (input) a generated mathematical program
     column,         ! (input) a scalar reference or column number
     priority,       ! (input) a numerical expression
     weight,         ! (input) a numerical expression
     [abstol],       ! (input/optional) a numerical expression
     [reltol]        ! (input/optional) a numerical expression
     )

Arguments

GMP
An element in AllGeneratedMathematicalPrograms.
column
A scalar reference to an existing column in the matrix or the number of that column in the range \(\{ 0 .. n-1 \}\) where \(n\) is the number of columns in the matrix.
priority
A scalar value specifying the priority of the objective. An objective with the highest priority is considered first.
weight
A scalar value specifying the weight of the objective. It defines the weight by which the objective coefficients are multiplied when forming a blended objective, i.e., if multiple objectives have the same priority.
abstol
A scalar value specifying the absolute tolerance by which a solution may deviate from the optimal value of the objective of the previous optimization problem. The default value is 0.0.
reltol
A scalar value specifying the relative tolerance by which a solution may deviate from the optimal value of the objective of the previous optimization problem. The default value is 0.0.

Return Value

The procedure returns 1 on success, and 0 otherwise.

Note

  • The column should be linear and have at exactly one coefficient in the matrix.
  • The column should be free, i.e., not have a lower or upper bound.
  • If GMP::Column::SetAsMultiObjective is called twice for the same column then only the information from the second call is used (and the information from the first call is ignored).
  • Use the procedure GMP::Instance::DeleteMultiObjectives to delete all multi-objectives.
  • Multi-objective optimization is only supported by CPLEX 12.9 or higher, and GUROBI 8.0 or higher.
  • The meaning of the relaxation of the objective, which is controlled by the abstol and reltol arguments, depends on whether the multi-objective problem is an LP or MIP. See the Multi-Objective Optimization section in the CPLEX Help or the GUROBI Help for more information.

Example

In the example below two multi-objectives are specified:

myGMP := GMP::Instance::Generate( MP );

GMP::Column::SetAsMultiObjective( myGMP, TotalDist, 2, 1.0, 0, 0.1 );
GMP::Column::SetAsMultiObjective( myGMP, TotalTime, 1, 1.0, 0, 0.0 );

GMP::Instance::Solve( myGMP );

We can now switch the priorities of the two objectives by adding:

GMP::Column::SetAsMultiObjective( myGMP, TotalDist, 1, 1.0, 0, 0.1 );
GMP::Column::SetAsMultiObjective( myGMP, TotalTime, 2, 1.0, 0, 0.0 );

GMP::Instance::Solve( myGMP );

See also

The procedure GMP::Instance::DeleteMultiObjectives.