Procedure GMP::Column::FreezeMulti(GMP, binding, column, value)

GMP::Column::FreezeMulti

The procedure GMP::Column::FreezeMulti freezes a group of columns, belonging to a variable, in the matrix of a generated mathematical program.

GMP::Column::FreezeMulti(
     GMP,            ! (input) a generated mathematical program
     binding,        ! (input) an index binding
     column,         ! (input) a variable expression
     value           ! (input) a numerical expression
     )

Arguments

GMP
An element in AllGeneratedMathematicalPrograms.
binding
An index binding that specifies and possibly limits the scope of indices.
column
A variable that, combined with the binding domain, specifies the columns.
value
The new value for each column, defined over the binding domain binding, that should be used to freeze the column value.

Return Value

The procedure returns 1 on success, and 0 otherwise.

Note

  • The columns remain visible in the constraint listing and math program inspector. In addition, it will be retained in solver maintained copies of the generated math program.
  • Use GMP::Column::UnfreezeMulti to undo the freezing.
  • During a call to function GMP::Column::FreezeMulti AIMMS stores the upper and lower bound of the column before the function was called. This information is used when function GMP::Column::UnfreezeMulti is called thereafter. This information is not copied by the function GMP::Instance::Copy.

Example

To freeze variable x(i) to demand(i) we can use:

for (i) do
    GMP::Column::Freeze( myGMP, x(i), demand(i) );
endfor;

It is more efficient to use:

GMP::Column::FreezeMulti( myGMP, i, x(i), demand(i) );

If we only want to freeze those x(i) for which dom(i) is unequal to zero, then we use:

GMP::Column::FreezeMulti( myGMP, i | dom(i), x(i), demand(i) );