Solving Constraint Integer Programs

Detailed Description

methods commonly used for presolving


SCIP_RETCODE SCIPshrinkDisjunctiveVarSet (SCIP *scip, SCIP_VAR **vars, SCIP_Real *bounds, SCIP_Bool *boundtypes, SCIP_Bool *redundants, int nvars, int *nredvars, int *nglobalred, SCIP_Bool *setredundant, SCIP_Bool *glbinfeas, SCIP_Bool fullshortening)

Function Documentation

◆ SCIPshrinkDisjunctiveVarSet()

SCIP_RETCODE SCIPshrinkDisjunctiveVarSet ( SCIP scip,
SCIP_VAR **  vars,
SCIP_Real bounds,
SCIP_Bool boundtypes,
SCIP_Bool redundants,
int  nvars,
int *  nredvars,
int *  nglobalred,
SCIP_Bool setredundant,
SCIP_Bool glbinfeas,
SCIP_Bool  fullshortening 

try to reduce the necessary variable in a set of variables with corresponding bounds and boundtypes for which one must be fulfilled

e.g. a set of logicor or bounddisjunctive constraint variables would be such a set

consider the following set:

x1 >= 1, x2 >= 3, x3 >= 1, x4 <= 0

by (global) implication data (cliques, implications, and variable bounds) we have also the following implications given:

x1 >= 1 => x3 >= 1 x2 >= 2 => x3 >= 1 x4 <= 0 => x1 >= 1

Because of the last implication x4 is redundant, because x1 >= 1 would also be fulfilled in the variable set, so we can reduce the set by x4. Also, the both other implications and x3 >= 1 (in the given variable set) all imply exactly x3 >= 1, so we tighten the global lower bound of x3 to 1 and the set of variables gets redundant.

scipSCIP data structure
varsvariables array for which at least one must be fulfilled in the following bounds and boundtypes
boundsbounds array for which at least one must be fulfilled
boundtypesboundtypes array (TRUE == SCIP_BOUNDTYPE_UPPER, FALSE == SCIP_BOUNDTYPE_LOWER) for which at least one must be fulfilled
redundantsarray which be filled and then indicate if a variable in the set is redundant
nvarsnumber of variables
nredvarspointer to store how many variables can be removed
nglobalredpointer to store number of global reductions on variable bounds found through this set of variables
setredundantpointer to store if we found a global reduction on a variable which was part of the given set of variables, this makes this disjunction redundant
glbinfeaspointer to store if global infeasibility was detected
fullshorteningdo we want to try the shortening procedure over the whole set (which might be expensive)

Definition at line 995 of file presolve.c.

References BMSclearMemoryArray, Scip::branchcand, CLEARRATIO, Scip::cliquetable, collectBinaryCliqueData(), collectNonBinaryImplicationData(), collectNonBinaryVBoundData(), Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Tree::npendingbdchgs, NULL, Scip::origprob, SCIP_Mem::probmem, Scip::reopt, SCIP_Tree::root, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIP_VARTYPE_BINARY, SCIPallocBufferArray, SCIPallocCleanBufferArray, SCIPcleanupCliques(), SCIPcutoffNode(), SCIPdebugMsg, SCIPfreeBufferArray, SCIPfreeCleanBufferArray, SCIPgetRootNode(), SCIPisGT(), SCIPisLT(), SCIPnodeAddBoundchg(), SCIPprobGetName(), SCIPprobGetNImplBinVars(), SCIPprobGetNVars(), SCIPprobGetVars(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetProbindex(), SCIPvarGetType(), SCIPvarGetUbGlobal(), SCIPvarIsBinary(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, TRUE, and w.

Referenced by detectImpliedBounds(), and shortenConss().