55 assert(sepastore !=
NULL);
70 assert(num <= sepastore->cutssize);
83 assert(sepastore !=
NULL);
87 (*sepastore)->cuts =
NULL;
88 (*sepastore)->efficacies =
NULL;
89 (*sepastore)->objparallelisms =
NULL;
90 (*sepastore)->orthogonalities =
NULL;
91 (*sepastore)->scores =
NULL;
92 (*sepastore)->cutssize = 0;
93 (*sepastore)->ncuts = 0;
94 (*sepastore)->nforcedcuts = 0;
95 (*sepastore)->ncutsfound = 0;
96 (*sepastore)->ncutsfoundround = 0;
97 (*sepastore)->ncutsapplied = 0;
98 (*sepastore)->initiallp =
FALSE;
99 (*sepastore)->forcecuts =
FALSE;
109 assert(sepastore !=
NULL);
110 assert(*sepastore !=
NULL);
111 assert((*sepastore)->ncuts == 0);
128 assert(sepastore !=
NULL);
130 assert(sepastore->
ncuts == 0);
140 assert(sepastore !=
NULL);
142 assert(sepastore->
ncuts == 0);
152 assert(sepastore !=
NULL);
163 assert(sepastore !=
NULL);
183 assert(sepastore !=
NULL);
198 SCIPsetDebugMsg(
set,
"ignoring activity redundant cut <%s> (sides=[%g,%g], act=[%g,%g])\n",
222 assert(sepastore !=
NULL);
224 assert(infeasible !=
NULL);
240 SCIPsetDebugMsg(
set,
"ignoring activity redundant cut <%s> (sides=[%g,%g], act=[%g,%g])\n",
248 SCIPsetDebugMsg(
set,
"cut <%s> is infeasible (sides=[%g,%g], act=[%g,%g])\n",
285 assert(cols !=
NULL);
289 assert(vals !=
NULL);
374 assert(sepastore !=
NULL);
376 assert(sepastore->
nforcedcuts <= pos && pos < sepastore->ncuts);
427 assert(sepastore !=
NULL);
433 assert(eventqueue !=
NULL);
434 assert(eventfilter !=
NULL);
462 if( !forcecut && sepastore->
ncuts > 0 && redundant )
480 sepastore->
ncuts = 0;
502 cutobjparallelism = 1.0;
511 if( set->sepa_objparalfac > 0.0 )
514 cutobjparallelism = 0.0;
517 SCIPsetDebugMsg(
set,
"adding cut <%s> to separation storage of size %d (forcecut=%u, len=%d)\n",
537 pos = sepastore->
ncuts;
539 sepastore->
cuts[pos] = cut;
543 sepastore->
scores[pos] = cutscore;
582 assert(sepastore !=
NULL);
583 assert(cutoff !=
NULL);
584 assert(applied !=
NULL);
594 SCIPsetDebugMsg(
set,
" -> applying bound change: <%s>: [%.20g,%.20g] -> [%.20g,%.20g]\n",
609 SCIPsetDebugMsg(
set,
" -> ignoring bound change: <%s>: [%.20g,%.20g] -> [%.20g,%.20g]\n",
618 SCIPsetDebugMsg(
set,
" -> applying global bound change: <%s>: [%.20g,%.20g] -> [%.20g,%.20g]\n",
637 SCIPsetDebugMsg(
set,
" -> ignoring global bound change: <%s>: [%.20g,%.20g] -> [%.20g,%.20g]\n",
667 assert(sepastore !=
NULL);
668 assert(cutoff !=
NULL);
669 assert(applied !=
NULL);
679 SCIPsetDebugMsg(
set,
" -> applying bound change: <%s>: [%.20g,%.20g] -> [%.20g,%.20g]\n",
694 SCIPsetDebugMsg(
set,
" -> ignoring bound change: <%s>: [%.20g,%.20g] -> [%.20g,%.20g]\n",
703 SCIPsetDebugMsg(
set,
" -> applying global bound change: <%s>: [%.20g,%.20g] -> [%.20g,%.20g]\n",
722 SCIPsetDebugMsg(
set,
" -> ignoring global bound change: <%s>: [%.20g,%.20g] -> [%.20g,%.20g]\n",
758 assert(sepastore !=
NULL);
761 assert(cutoff !=
NULL);
762 assert(applied !=
NULL);
769 assert(cols !=
NULL);
773 assert(vals !=
NULL);
790 SCIP_CALL(
sepastoreApplyLb(sepastore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
791 cliquetable, var, lhs/vals[0], local, applied, cutoff) );
796 SCIP_CALL(
sepastoreApplyUb(sepastore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
797 cliquetable, var, lhs/vals[0], local, applied, cutoff) );
809 SCIP_CALL(
sepastoreApplyUb(sepastore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
810 cliquetable, var, rhs/vals[0], local, applied, cutoff) );
815 SCIP_CALL(
sepastoreApplyLb(sepastore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
816 cliquetable, var, rhs/vals[0], local, applied, cutoff) );
824 if( *applied && !sepastore->
initiallp && set->sepa_feastolfac > 0.0 )
829 switch ( efficiacychoice )
845 infeasibility /=
REALABS(vals[0]);
848 if( infeasibility > 0.0 && (set->sepa_primfeastol ==
SCIP_INVALID || set->sepa_primfeastol > set->sepa_feastolfac * infeasibility) )
852 set->sepa_primfeastol =
MAX(set->sepa_feastolfac * infeasibility, epsilon);
875 assert(sepastore !=
NULL);
878 while( pos < sepastore->ncuts )
884 if( thisortho < sepastore->orthogonalities[pos] )
886 if( thisortho < mincutorthogonality )
889 SCIPsetDebugMsg(
set,
" -> deleting parallel cut <%s> after adding <%s> (pos=%d, len=%d, orthogonality=%g, score=%g)\n",
903 +
set->sepa_orthofac * thisortho;
929 assert(sepastore !=
NULL);
930 assert(ncutsapplied !=
NULL);
968 if( !sepastore->
initiallp && set->sepa_feastolfac > 0.0 )
973 switch ( efficiacychoice )
990 if( infeasibility > 0.0 && (set->sepa_primfeastol ==
SCIP_INVALID || set->sepa_primfeastol > set->sepa_feastolfac * infeasibility) )
994 set->sepa_primfeastol =
MAX(set->sepa_feastolfac * infeasibility, epsilon);
1013 assert(sepastore !=
NULL);
1017 for( pos = sepastore->
nforcedcuts; pos < sepastore->ncuts; pos++ )
1021 if( sepastore->
scores[pos] > bestscore )
1023 bestscore = sepastore->
scores[pos];
1047 cut = sepastore->
cuts[pos];
1050 switch ( efficiacychoice )
1071 cutefficacy *= 0.9999;
1075 cutscore = cutefficacy +
set->sepa_objparalfac * sepastore->
objparallelisms[pos] +
set->sepa_orthofac * 1.0;
1079 sepastore->
scores[pos] = cutscore;
1115 assert(sepastore !=
NULL);
1116 assert(
set !=
NULL);
1117 assert(tree !=
NULL);
1119 assert(cutoff !=
NULL);
1126 assert(node !=
NULL);
1136 mincutorthogonality = (root ?
set->sepa_minorthoroot :
set->sepa_minortho);
1137 mincutorthogonality =
MAX(mincutorthogonality, set->num_epsilon);
1140 for( pos = sepastore->
nforcedcuts; pos < sepastore->ncuts; pos++ )
1146 for( pos = 0; pos < sepastore->
nforcedcuts && !(*cutoff); pos++ )
1150 cut = sepastore->
cuts[pos];
1158 SCIP_CALL(
sepastoreApplyBdchg(sepastore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand,
1159 eventqueue, cliquetable, cut, efficiacychoice, &applied, cutoff) );
1169 SCIP_CALL(
sepastoreApplyCut(sepastore, blkmem,
set, stat, eventqueue, eventfilter, lp, cut, mincutorthogonality, depth, efficiacychoice, &ncutsapplied) );
1174 while( ncutsapplied < maxsepacuts && sepastore->ncuts > sepastore->
nforcedcuts && !(*cutoff) )
1181 assert(sepastore->
nforcedcuts <= bestpos && bestpos < sepastore->ncuts);
1184 cut = sepastore->
cuts[bestpos];
1188 SCIPsetDebugMsg(
set,
" -> applying cut <%s> (pos=%d/%d, len=%d, efficacy=%g, objparallelism=%g, orthogonality=%g, score=%g)\n",
1206 SCIP_CALL(
sepastoreApplyCut(sepastore, blkmem,
set, stat, eventqueue, eventfilter, lp, cut, mincutorthogonality, depth, efficiacychoice, &ncutsapplied) );
1231 assert(sepastore !=
NULL);
1236 for( c = 0; c < sepastore->
ncuts; ++c )
1253 sepastore->
ncuts = 0;
1283 assert( sepastore !=
NULL );
1288 while( c < sepastore->ncuts )
1322 assert(sepastore !=
NULL);
1324 return sepastore->
cuts;
1332 assert(sepastore !=
NULL);
1334 return sepastore->
ncuts;
1342 assert(sepastore !=
NULL);
1352 assert(sepastore !=
NULL);
1362 assert(sepastore !=
NULL);
internal methods for separators
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
static SCIP_RETCODE sepastoreApplyLb(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Real bound, SCIP_Bool local, SCIP_Bool *applied, SCIP_Bool *cutoff)
internal methods for managing events
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsFeasZero(SCIP_SET *set, SCIP_Real val)
#define BMSfreeMemoryArrayNull(ptr)
internal methods for branch and bound tree
enum SCIP_Efficiacychoice SCIP_EFFICIACYCHOICE
SCIP_Real SCIProwGetRelaxFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPeventqueueAdd(SCIP_EVENTQUEUE *eventqueue, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENT **event)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
void SCIPsepaIncNAppliedCuts(SCIP_SEPA *sepa)
SCIP_ROW ** SCIPsepastoreGetCuts(SCIP_SEPASTORE *sepastore)
int SCIProwGetNNonz(SCIP_ROW *row)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
void SCIProwCapture(SCIP_ROW *row)
const char * SCIProwGetName(SCIP_ROW *row)
void SCIPsepastoreStartForceCuts(SCIP_SEPASTORE *sepastore)
SCIP_Real SCIPsetInfinity(SCIP_SET *set)
static SCIP_RETCODE sepastoreUpdateOrthogonalities(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_ROW *cut, SCIP_Real mincutorthogonality)
int SCIPsepastoreGetNCutsApplied(SCIP_SEPASTORE *sepastore)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_Bool SCIPsetIsZero(SCIP_SET *set, SCIP_Real val)
#define SCIPdebugCheckRow(set, row)
enum SCIP_Retcode SCIP_RETCODE
SCIP_Real SCIProwGetLPEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
SCIP_Real SCIProwGetNLPEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
static SCIP_Bool sepastoreIsCutRedundant(SCIP_SEPASTORE *sepastore, SCIP_SET *set, SCIP_STAT *stat, SCIP_ROW *cut)
int SCIPnodeGetDepth(SCIP_NODE *node)
#define BMSfreeMemory(ptr)
void SCIPvarAdjustLb(SCIP_VAR *var, SCIP_SET *set, SCIP_Real *lb)
internal methods for LP management
int SCIPsetGetSepaMaxcuts(SCIP_SET *set, SCIP_Bool root)
SCIP_Bool SCIProwIsInLP(SCIP_ROW *row)
SCIP_Bool SCIPsetIsEfficacious(SCIP_SET *set, SCIP_Bool root, SCIP_Real efficacy)
SCIP_RETCODE SCIPnodeCutoff(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_REOPT *reopt, SCIP_LP *lp, BMS_BLKMEM *blkmem)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPeventCreateRowDeletedSepa(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row)
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsepastoreIsCutApplicable(SCIP_SET *set, SCIP_ROW *cut)
#define SCIP_EVENTTYPE_ROWADDEDSEPA
static SCIP_RETCODE sepastoreApplyCut(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_ROW *cut, SCIP_Real mincutorthogonality, int depth, SCIP_EFFICIACYCHOICE efficiacychoice, int *ncutsapplied)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_RETCODE SCIProwChgLocal(SCIP_ROW *row, SCIP_Bool local)
int SCIPsepastoreGetNCuts(SCIP_SEPASTORE *sepastore)
SCIP_RETCODE SCIPsepastoreRemoveInefficaciousCuts(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_Bool root, SCIP_EFFICIACYCHOICE efficiacychoice)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPsepastoreCreate(SCIP_SEPASTORE **sepastore)
SCIP_Real SCIProwGetNLPFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPlpAddRow(SCIP_LP *lp, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_ROW *row, int depth)
internal methods for global SCIP settings
SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
static int sepastoreGetBestCut(SCIP_SEPASTORE *sepastore)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
SCIP_Real * orthogonalities
internal methods for storing separated cuts
SCIP_Bool SCIProwIsModifiable(SCIP_ROW *row)
SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE sepastoreDelCut(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, int pos)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
SCIP_RETCODE SCIProwRelease(SCIP_ROW **row, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp)
data structures and methods for collecting reoptimization information
internal methods for problem variables
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
SCIP_RETCODE SCIPsepastoreAddCut(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_Bool forcecut, SCIP_Bool root, SCIP_Bool *infeasible)
static SCIP_Bool sepastoreIsCutRedundantOrInfeasible(SCIP_SEPASTORE *sepastore, SCIP_SET *set, SCIP_STAT *stat, SCIP_ROW *cut, SCIP_Bool *infeasible)
static SCIP_RETCODE sepastoreApplyUb(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Real bound, SCIP_Bool local, SCIP_Bool *applied, SCIP_Bool *cutoff)
void SCIPconshdlrIncNAppliedCuts(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsepastoreFree(SCIP_SEPASTORE **sepastore)
#define SCIP_EVENTTYPE_ROWDELETEDSEPA
static SCIP_RETCODE sepastoreEnsureCutsMem(SCIP_SEPASTORE *sepastore, SCIP_SET *set, int num)
static SCIP_Bool sepastoreIsBdchgApplicable(SCIP_SET *set, SCIP_ROW *cut)
void SCIPsepastoreEndInitialLP(SCIP_SEPASTORE *sepastore)
SCIP_Real SCIProwGetRelaxEfficacy(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_Bool SCIPsetIsFeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
void SCIPsepastoreStartInitialLP(SCIP_SEPASTORE *sepastore)
SCIP_Real SCIProwGetMaxActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
int SCIPsepastoreGetNCutsFound(SCIP_SEPASTORE *sepastore)
SCIP_Real SCIProwGetMinActivity(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_NODE * SCIPtreeGetRootNode(SCIP_TREE *tree)
SCIP_RETCODE SCIPnodeAddBoundchg(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype, SCIP_Bool probingchange)
SCIP_NODE * SCIPtreeGetCurrentNode(SCIP_TREE *tree)
SCIP_RETCODE SCIPsepastoreApplyCuts(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool root, SCIP_EFFICIACYCHOICE efficiacychoice, SCIP_Bool *cutoff)
SCIP_Real SCIProwGetLPFeasibility(SCIP_ROW *row, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE computeScore(SCIP_SEPASTORE *sepastore, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Bool handlepool, int pos, SCIP_EFFICIACYCHOICE efficiacychoice)
internal methods for problem statistics
SCIP_Real SCIProwGetObjParallelism(SCIP_ROW *row, SCIP_SET *set, SCIP_LP *lp)
SCIP_Bool SCIPsetIsFeasPositive(SCIP_SET *set, SCIP_Real val)
int SCIPsepastoreGetNCutsFoundRound(SCIP_SEPASTORE *sepastore)
#define BMSallocMemory(ptr)
#define BMSreallocMemoryArray(ptr, num)
internal methods for constraints and constraint handlers
static SCIP_RETCODE sepastoreApplyBdchg(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_ROW *cut, SCIP_EFFICIACYCHOICE efficiacychoice, SCIP_Bool *applied, SCIP_Bool *cutoff)
SCIP_Real * objparallelisms
SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetEpsilon(SCIP_SET *set)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
void SCIPvarAdjustUb(SCIP_VAR *var, SCIP_SET *set, SCIP_Real *ub)
datastructures for storing conflicts
common defines and data types used in all packages of SCIP
struct BMS_BlkMem BMS_BLKMEM
SCIP_RETCODE SCIPsepastoreClearCuts(SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp)
void SCIPsepastoreEndForceCuts(SCIP_SEPASTORE *sepastore)
SCIP_Real SCIProwGetOrthogonality(SCIP_ROW *row1, SCIP_ROW *row2, char orthofunc)
SCIP_RETCODE SCIPeventCreateRowAddedSepa(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_ROW *row)
SCIP_Bool SCIProwIsInGlobalCutpool(SCIP_ROW *row)