Procedure GMP::SolverSession::GenerateBinaryEliminationRow(solverSession, solution, branch)

# GMP::SolverSession::GenerateBinaryEliminationRow

The procedure GMP::SolverSession::GenerateBinaryEliminationRow adds a binary row to a solver session which will eliminate a binary solution.

GMP::SolverSession::GenerateBinaryEliminationRow(
solverSession,    ! (input) a solver session
solution,         ! (input) a solution
branch            ! (input) a scalar value
)


## Arguments

solverSession

An element in the set AllSolverSessions.

solution

An integer scalar reference to a solution.

branch

An integer scalar reference to a branch. Value should be either 1 or 2.

## Return Value

The procedure returns 1 on success, or 0 otherwise.

Note

• This procedure will fail if the GMP corresponding to the solver session does not have model type MIP.

• This procedure can only be called from within a CallbackBranch, CallbackAddCut or CallbackAddLazyConstraint callback procedure.

• The branch argument will be ignored if this procedure is called from within a CallbackAddCut or CallbackAddLazyConstraint callback procedure.

• Every call to GMP::SolverSession::GenerateBinaryEliminationRow adds the following row:

(5)\begin{aligned} \sum_{i\in S_{lo}} x_i - \sum_{i\in S_{up}} x_i \geq 1 - \sum_{i\in S_{up}} lev_i \end{aligned}

where $$S_{lo}$$ defines the set of binary columns whose level values equals 0 and $$S_{up}$$ the set of binary columns whose level values equals 1.

## Example

The procedure GMP::SolverSession::GenerateBinaryEliminationRow can be used to enforce a MIP solver to branch a node that would have been fathomed otherwise. We can achieve this by installing a branching callback using procedure GMP::Instance::SetCallbackBranch and adding the following code to the callback procedure:

! Get LP solution at the current node.

GMP::Solution::RetrieveFromSolverSession(ThisSession,1);

! Get the number of nodes that the MIP solver wants to create from the
! current branch.

NrBranches := GMP::SolverSession::GetNumberOfBranchNodes(ThisSession);

if ( NrBranches = 0 ) then

! The LP solution at the current node appears to be integer feasible.
! We enforce the MIP solver to branch the current node by creating a
! branch containing one constraint that cuts off this LP solution.

GMP::SolverSession::GenerateBinaryEliminationRow(ThisSession,1,1);

endif;

return 1;


Here ‘ThisSession’ is an input argument of the callback procedure and a scalar element parameter into the set AllSolverSessions.