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 an element in the set Integers 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 and Gurobi.

  • Multi-objective optimization is not supported for generated mathematical programs created by one of the following functions:

    • GMP::Instance::GenerateRobustCounterpart,

    • GMP::Instance::GenerateStochasticProgram,

    • GMP::Instance::CreatePresolved,

    • GMP::Instance::CreateDual, or

    • GMP::Instance::CreateMasterMIP.

  • 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.