Procedure GMP::Coefficient::SetRaw(GMP, rowSet, colSet, coef, changeZero)

GMP::Coefficient::SetRaw

The procedure GMP::Coefficient::SetRaw sets the value of a range of (linear) coefficients for a group of columns and rows in a generated mathematical program.

GMP::Coefficient::SetRaw(
     GMP,            ! (input) a generated mathematical program
     rowSet,         ! (input) a subset of Integers
     colSet,         ! (input) a subset of Integers
     coef,           ! (input) a parameter
     changeZero      ! (input) a binary parameter
     )

Arguments

GMP

An element in AllGeneratedMathematicalPrograms.

rowSet

A subset of the set Integers, representing a set of row numbers.

colSet

A subset of the set Integers, representing a set of column numbers.

coef

A parameter over (rowSet, colSet) containing the new coefficient for each (row,column) combination.

changeZero

A binary parameter over (rowSet, colSet) which can be used to mark coefficients with a value of 0 (zero) in coef that should be changed by this procedure.

Return Value

The procedure returns 1 on success, or 0 otherwise.

Note

  • A coefficient with a value of 0 (zero) will be skipped by this procedure unless changeZero is set to 1 for the corresponding (row, column) combination.

  • This procedure cannot be used if one of the columns refers to the objective variable.

  • In case the generated mathematical program is nonlinear, this procedure will fail if one the columns is part of a nonlinear term in one of the rows. However, if the row is pure quadratic, then this procedure can be used to set the linear coefficient value for a quadratic column.

  • GMP procedures operate on a generated mathematical program in which all variables are moved to the left-hand-side of each constraint. This can have an influence on the sign of the coeffients as demonstrated in the example of procedure GMP::Coefficient::Set.

Example

Assume that ‘MP’ is a mathematical program with the following declaration (in ams format):

Variable x {
    IndexDomain: t;
    Range: nonnegative;
}
Variable y {
    IndexDomain: t;
    Range: nonnegative;
}
Constraint c1 {
    IndexDomain: t;
    Definition: - 2 * x(t) + y(t) <= 4;
}
MathematicalProgram MP {
    Objective: obj;
    Direction: minimize;
    Type: LP;
}

To use GMP::Coefficient::SetRaw we declare the following identifiers (in ams format):

ElementParameter myGMP {
    Range: AllGeneratedMathematicalPrograms;
}
Set ConstraintSet {
    SubsetOf: AllConstraints;
}
Set VariableSet {
    SubsetOf: AllVariables;
}
Set RowSet {
    SubsetOf: Integers;
    Index: rr;
}
Set ColumnSet {
    SubsetOf: Integers;
    Index: cc;
}
Parameter Coef {
    IndexDomain: (rr,cc);
}
Parameter ChangeZero {
    IndexDomain: (rr,cc);
}

To set the coefficients of variables x(t) and y(t) in constraint c1(t) to 1 and 0, respectively, we can use:

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

ConstraintSet := { 'c1' };
RowSet := GMP::Instance::GetRowNumbers( myGMP, ConstraintSet );

VariableSet := { 'x' };
ColumnSet := GMP::Instance::GetColumnNumbers( myGMP, VariableSet );

Coef(rr,cc) := 1.0;
ChangeZero(rr,cc) := 0;

GMP::Coefficient::SetRaw( myGMP, RowSet, ColumnSet, Coef, ChangeZero );

VariableSet := { 'y' };
ColumnSet := GMP::Instance::GetColumnNumbers( myGMP, VariableSet );

Coef(rr,cc) := 0.0;
ChangeZero(rr,cc) := 1;

GMP::Coefficient::SetRaw( myGMP, RowSet, ColumnSet, Coef, ChangeZero );