Scippy

SCIP

Solving Constraint Integer Programs

sepastore.c File Reference

Detailed Description

methods for storing separated cuts

Author
Tobias Achterberg
Marc Pfetsch

Definition in file sepastore.c.

#include <assert.h>
#include "scip/def.h"
#include "scip/set.h"
#include "scip/stat.h"
#include "scip/lp.h"
#include "scip/var.h"
#include "scip/tree.h"
#include "scip/reopt.h"
#include "scip/sepastore.h"
#include "scip/event.h"
#include "scip/sepa.h"
#include "scip/cons.h"
#include "scip/debug.h"
#include "scip/struct_sepastore.h"

Go to the source code of this file.

Functions

static SCIP_RETCODE sepastoreEnsureCutsMem (SCIP_SEPASTORE *sepastore, SCIP_SET *set, int num)
 
SCIP_RETCODE SCIPsepastoreCreate (SCIP_SEPASTORE **sepastore)
 
SCIP_RETCODE SCIPsepastoreFree (SCIP_SEPASTORE **sepastore)
 
void SCIPsepastoreStartInitialLP (SCIP_SEPASTORE *sepastore)
 
void SCIPsepastoreEndInitialLP (SCIP_SEPASTORE *sepastore)
 
void SCIPsepastoreStartForceCuts (SCIP_SEPASTORE *sepastore)
 
void SCIPsepastoreEndForceCuts (SCIP_SEPASTORE *sepastore)
 
static SCIP_Bool sepastoreIsCutRedundant (SCIP_SEPASTORE *sepastore, SCIP_SET *set, SCIP_STAT *stat, SCIP_ROW *cut)
 
static SCIP_Bool sepastoreIsCutRedundantOrInfeasible (SCIP_SEPASTORE *sepastore, SCIP_SET *set, SCIP_STAT *stat, SCIP_ROW *cut, SCIP_Bool *infeasible)
 
static SCIP_Bool sepastoreIsBdchgApplicable (SCIP_SET *set, SCIP_ROW *cut)
 
static SCIP_RETCODE sepastoreAddCut (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_RETCODE sepastoreDelCut (SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, int pos)
 
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_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)
 
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)
 
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)
 
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)
 
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)
 
static int sepastoreGetBestCut (SCIP_SEPASTORE *sepastore)
 
static SCIP_RETCODE computeScore (SCIP_SEPASTORE *sepastore, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Bool handlepool, int pos, SCIP_EFFICIACYCHOICE efficiacychoice)
 
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_RETCODE SCIPsepastoreClearCuts (SCIP_SEPASTORE *sepastore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp)
 
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)
 
SCIP_Bool SCIPsepastoreIsCutApplicable (SCIP_SET *set, SCIP_ROW *cut)
 
SCIP_ROW ** SCIPsepastoreGetCuts (SCIP_SEPASTORE *sepastore)
 
int SCIPsepastoreGetNCuts (SCIP_SEPASTORE *sepastore)
 
int SCIPsepastoreGetNCutsFound (SCIP_SEPASTORE *sepastore)
 
int SCIPsepastoreGetNCutsFoundRound (SCIP_SEPASTORE *sepastore)
 
int SCIPsepastoreGetNCutsApplied (SCIP_SEPASTORE *sepastore)
 

Function Documentation

static SCIP_RETCODE sepastoreEnsureCutsMem ( SCIP_SEPASTORE sepastore,
SCIP_SET set,
int  num 
)
static

resizes cuts and score arrays to be able to store at least num entries

Parameters
sepastoreseparation storage
setglobal SCIP settings
numminimal number of slots in array

Definition at line 49 of file sepastore.c.

References BMSreallocMemoryArray, SCIP_SepaStore::cuts, SCIP_SepaStore::cutssize, SCIP_SepaStore::efficacies, NULL, SCIP_SepaStore::objparallelisms, SCIP_SepaStore::orthogonalities, SCIP_ALLOC, SCIP_OKAY, SCIPsetCalcMemGrowSize(), and SCIP_SepaStore::scores.

Referenced by sepastoreAddCut().

SCIP_RETCODE SCIPsepastoreCreate ( SCIP_SEPASTORE **  sepastore)

creates separation storage

Parameters
sepastorepointer to store separation storage

Definition at line 79 of file sepastore.c.

References BMSallocMemory, FALSE, NULL, SCIP_ALLOC, and SCIP_OKAY.

Referenced by initSolve().

SCIP_RETCODE SCIPsepastoreFree ( SCIP_SEPASTORE **  sepastore)

frees separation storage

Parameters
sepastorepointer to store separation storage

Definition at line 105 of file sepastore.c.

References BMSfreeMemory, BMSfreeMemoryArrayNull, NULL, and SCIP_OKAY.

Referenced by freeSolve().

void SCIPsepastoreStartInitialLP ( SCIP_SEPASTORE sepastore)

informs separation storage, that the setup of the initial LP starts now

Parameters
sepastoreseparation storage

Definition at line 124 of file sepastore.c.

References SCIP_SepaStore::initiallp, SCIP_SepaStore::ncuts, NULL, and TRUE.

Referenced by SCIPinitConssLP().

void SCIPsepastoreEndInitialLP ( SCIP_SEPASTORE sepastore)

informs separation storage, that the setup of the initial LP is now finished

Parameters
sepastoreseparation storage

Definition at line 136 of file sepastore.c.

References FALSE, SCIP_SepaStore::initiallp, SCIP_SepaStore::ncuts, and NULL.

Referenced by SCIPinitConssLP().

void SCIPsepastoreStartForceCuts ( SCIP_SEPASTORE sepastore)

informs separation storage, that the following cuts should be used in any case

Parameters
sepastoreseparation storage

Definition at line 148 of file sepastore.c.

References SCIP_SepaStore::forcecuts, NULL, and TRUE.

Referenced by enforceConstraints().

void SCIPsepastoreEndForceCuts ( SCIP_SEPASTORE sepastore)

informs separation storage, that the following cuts should no longer be used in any case

Parameters
sepastoreseparation storage

Definition at line 159 of file sepastore.c.

References FALSE, SCIP_SepaStore::forcecuts, and NULL.

Referenced by enforceConstraints().

static SCIP_Bool sepastoreIsCutRedundant ( SCIP_SEPASTORE sepastore,
SCIP_SET set,
SCIP_STAT stat,
SCIP_ROW cut 
)
static

checks cut for redundancy due to activity bounds

Parameters
sepastoreseparation storage
setglobal SCIP settings
statproblem statistics data
cutseparated cut

Definition at line 171 of file sepastore.c.

References FALSE, NULL, SCIP_Real, SCIPdebugMessage, SCIProwGetLhs(), SCIProwGetMaxActivity(), SCIProwGetMinActivity(), SCIProwGetName(), SCIProwGetRhs(), SCIProwIsModifiable(), SCIPsetIsInfinity(), SCIPsetIsLE(), and TRUE.

Referenced by sepastoreAddCut().

static SCIP_Bool sepastoreIsCutRedundantOrInfeasible ( SCIP_SEPASTORE sepastore,
SCIP_SET set,
SCIP_STAT stat,
SCIP_ROW cut,
SCIP_Bool infeasible 
)
static

checks cut for redundancy or infeasibility due to activity bounds

Parameters
sepastoreseparation storage
setglobal SCIP settings
statproblem statistics data
cutseparated cut
infeasiblepointer to store whether the cut has been detected to be infeasible

Definition at line 209 of file sepastore.c.

References FALSE, NULL, SCIP_Real, SCIPdebugMessage, SCIProwGetLhs(), SCIProwGetMaxActivity(), SCIProwGetMinActivity(), SCIProwGetName(), SCIProwGetRhs(), SCIProwIsModifiable(), SCIPsetIsFeasGT(), SCIPsetIsFeasLT(), SCIPsetIsInfinity(), SCIPsetIsLE(), and TRUE.

Referenced by sepastoreAddCut().

static SCIP_Bool sepastoreIsBdchgApplicable ( SCIP_SET set,
SCIP_ROW cut 
)
static

checks whether a cut with only one variable can be applied as boundchange

This is the case if the bound change would prove infeasibility (w.r.t feastol), or if the new bound is at least epsilon better than the old bound. In the latter case, also the opposite bound has to be taken into account.

Parameters
setglobal SCIP settings
cutcut with a single variable

Definition at line 265 of file sepastore.c.

References FALSE, MAX, MIN, NULL, SCIP_Bool, SCIP_Real, SCIPcolGetVar(), SCIProwGetCols(), SCIProwGetConstant(), SCIProwGetLhs(), SCIProwGetNNonz(), SCIProwGetRhs(), SCIProwGetVals(), SCIProwIsLocal(), SCIProwIsModifiable(), SCIPsetIsFeasGT(), SCIPsetIsFeasLT(), SCIPsetIsFeasZero(), SCIPsetIsGT(), SCIPsetIsInfinity(), SCIPsetIsLT(), SCIPsetIsZero(), SCIPvarAdjustLb(), SCIPvarAdjustUb(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), and TRUE.

Referenced by SCIPsepastoreApplyCuts(), SCIPsepastoreIsCutApplicable(), and sepastoreAddCut().

static SCIP_RETCODE sepastoreAddCut ( 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

adds cut stored as LP row to separation storage and captures it; if the cut should be forced to be used, an infinite score has to be used

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
statproblem statistics data
eventqueueevent queue
eventfilterevent filter for global events
lpLP data
solprimal solution that was separated, or NULL for LP solution
cutseparated cut
forcecutshould the cut be forced to enter the LP?
rootare we at the root node?
infeasiblepointer to store whether the cut is infeasible

Definition at line 366 of file sepastore.c.

References SCIP_SepaStore::cuts, SCIP_SepaStore::cutssize, SCIP_SepaStore::efficacies, SCIP_EventFilter::eventmask, FALSE, SCIP_SepaStore::forcecuts, SCIP_SepaStore::initiallp, SCIP_EventFilter::len, SCIP_SepaStore::ncuts, SCIP_SepaStore::nforcedcuts, NULL, SCIP_SepaStore::objparallelisms, SCIP_SepaStore::orthogonalities, SCIP_Bool, SCIP_CALL, SCIP_EVENTTYPE_ROWADDEDSEPA, SCIP_EVENTTYPE_ROWDELETEDSEPA, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPeventCreateRowAddedSepa(), SCIPeventCreateRowDeletedSepa(), SCIPeventqueueAdd(), SCIProwCapture(), SCIProwChgLocal(), SCIProwGetLhs(), SCIProwGetName(), SCIProwGetNNonz(), SCIProwGetObjParallelism(), SCIProwGetRhs(), SCIProwIsInLP(), SCIProwIsLocal(), SCIProwIsModifiable(), SCIProwRelease(), SCIPsetGetSepaMaxcuts(), SCIPsetInfinity(), SCIPsetIsInfinity(), SCIP_SepaStore::scores, sepastoreEnsureCutsMem(), sepastoreIsBdchgApplicable(), sepastoreIsCutRedundant(), and sepastoreIsCutRedundantOrInfeasible().

Referenced by SCIPsepastoreAddCut().

static SCIP_RETCODE sepastoreDelCut ( SCIP_SEPASTORE sepastore,
BMS_BLKMEM blkmem,
SCIP_SET set,
SCIP_EVENTQUEUE eventqueue,
SCIP_EVENTFILTER eventfilter,
SCIP_LP lp,
int  pos 
)
static

removes a non-forced cut from the separation storage

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
eventqueueevent queue
eventfilterevent filter for global events
lpLP data
posposition of cut to delete

Definition at line 512 of file sepastore.c.

References SCIP_SepaStore::cuts, SCIP_SepaStore::efficacies, SCIP_EventFilter::eventmask, SCIP_EventFilter::len, SCIP_SepaStore::ncuts, SCIP_SepaStore::nforcedcuts, NULL, SCIP_SepaStore::objparallelisms, SCIP_SepaStore::orthogonalities, SCIP_CALL, SCIP_EVENTTYPE_ROWDELETEDSEPA, SCIP_OKAY, SCIPeventCreateRowDeletedSepa(), SCIPeventqueueAdd(), SCIProwRelease(), and SCIP_SepaStore::scores.

Referenced by SCIPsepastoreApplyCuts(), SCIPsepastoreRemoveInefficaciousCuts(), and sepastoreUpdateOrthogonalities().

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 
)

adds cut to separation storage and captures it; if the cut should be forced to enter the LP, an infinite score has to be used

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
statproblem statistics data
eventqueueevent queue
eventfilterevent filter for global events
lpLP data
solprimal solution that was separated, or NULL for LP solution
cutseparated cut
forcecutshould the cut be forced to enter the LP?
rootare we at the root node?
infeasiblepointer to store whether the cut is infeasible

Definition at line 554 of file sepastore.c.

References SCIP_SepaStore::initiallp, SCIP_SepaStore::ncutsfound, SCIP_SepaStore::ncutsfoundround, NULL, SCIP_CALL, SCIP_OKAY, SCIPdebugCheckRow, SCIProwGetLhs(), SCIProwGetRhs(), SCIProwIsInLP(), SCIPsetIsInfinity(), and sepastoreAddCut().

Referenced by SCIPaddCut(), and SCIPcutpoolSeparate().

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 
)
static

applies a lower bound change

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
statproblem statistics
transprobtransformed problem
origproboriginal problem
treebranch and bound tree
reoptreoptimization data structure
lpLP data
branchcandbranching candidate storage
eventqueueevent queue
cliquetableclique table data structure
varproblem variable
boundnew lower bound of variable
localis it a local bound change? (otherwise global)
appliedpointer to store whether the domain change was applied
cutoffpointer to store TRUE, if an infeasibility has been detected

Definition at line 592 of file sepastore.c.

References FALSE, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_OKAY, SCIPdebugMessage, SCIPnodeAddBoundchg(), SCIPnodeCutoff(), SCIPsetIsFeasLE(), SCIPsetIsGT(), SCIPtreeGetCurrentNode(), SCIPtreeGetRootNode(), SCIPvarAdjustLb(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), and TRUE.

Referenced by sepastoreApplyBdchg().

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 
)
static

applies an upper bound change

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
statproblem statistics
transprobtransformed problem
origproboriginal problem
treebranch and bound tree
reoptreoptimization data structure
lpLP data
branchcandbranching candidate storage
eventqueueevent queue
cliquetableclique table data structure
varproblem variable
boundnew upper bound of variable
localis it a local bound change? (otherwise global)
appliedpointer to store whether the domain change was applied
cutoffpointer to store TRUE, if an infeasibility has been detected

Definition at line 677 of file sepastore.c.

References FALSE, NULL, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIPdebugMessage, SCIPnodeAddBoundchg(), SCIPnodeCutoff(), SCIPsetIsFeasGE(), SCIPsetIsLT(), SCIPtreeGetCurrentNode(), SCIPtreeGetRootNode(), SCIPvarAdjustUb(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), and TRUE.

Referenced by sepastoreApplyBdchg().

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 
)
static

applies a cut that is a bound change directly as bound change instead of adding it as row to the LP

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
statproblem statistics
transprobtransformed problem
origproboriginal problem
treebranch and bound tree
reoptreoptimization data structure
lpLP data
branchcandbranching candidate storage
eventqueueevent queue
cliquetableclique table data structure
cutcut with a single variable
efficiacychoicetype of solution to base feasibility computation on
appliedpointer to store whether the domain change was applied
cutoffpointer to store whether an empty domain was created

Definition at line 762 of file sepastore.c.

References FALSE, SCIP_SepaStore::initiallp, MAX, SCIP_SepaStore::ncutsapplied, NULL, REALABS, SCIP_Bool, SCIP_CALL, SCIP_EFFICIACYCHOICE_LP, SCIP_EFFICIACYCHOICE_NLP, SCIP_EFFICIACYCHOICE_RELAX, SCIP_INVALID, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_Real, SCIPcolGetVar(), SCIPdebugMessage, SCIPerrorMessage, SCIProwGetCols(), SCIProwGetConstant(), SCIProwGetLhs(), SCIProwGetLPFeasibility(), SCIProwGetName(), SCIProwGetNLPFeasibility(), SCIProwGetNNonz(), SCIProwGetRelaxFeasibility(), SCIProwGetRhs(), SCIProwGetVals(), SCIProwIsLocal(), SCIProwIsModifiable(), SCIPsetEpsilon(), SCIPsetIsFeasZero(), SCIPsetIsInfinity(), SCIPsetIsZero(), sepastoreApplyLb(), and sepastoreApplyUb().

Referenced by SCIPsepastoreApplyCuts().

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 
)
static

updates the orthogonalities and scores of the non-forced cuts after the given cut was added to the LP

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
eventqueueevent queue
eventfilterevent filter for global events
lpLP data
cutcut that was applied
mincutorthogonalityminimal orthogonality of cuts to apply to LP

Definition at line 892 of file sepastore.c.

References SCIP_SepaStore::cuts, SCIP_SepaStore::efficacies, SCIP_SepaStore::nforcedcuts, NULL, SCIP_SepaStore::objparallelisms, SCIP_SepaStore::orthogonalities, SCIP_CALL, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIProwGetName(), SCIProwGetNNonz(), SCIProwGetOrthogonality(), SCIP_SepaStore::scores, and sepastoreDelCut().

Referenced by sepastoreApplyCut().

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 
)
static

applies the given cut to the LP and updates the orthogonalities and scores of remaining cuts

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
statproblem statistics
eventqueueevent queue
eventfilterglobal event filter
lpLP data
cutcut to apply to the LP
mincutorthogonalityminimal orthogonality of cuts to apply to LP
depthdepth of current node
efficiacychoicetype of solution to base feasibility computation on
ncutsappliedpointer to count the number of applied cuts

Definition at line 944 of file sepastore.c.

References SCIP_SepaStore::initiallp, MAX, SCIP_SepaStore::ncutsapplied, NULL, SCIP_Row::origin, SCIP_Row::origintype, SCIP_CALL, SCIP_EFFICIACYCHOICE_LP, SCIP_EFFICIACYCHOICE_NLP, SCIP_EFFICIACYCHOICE_RELAX, SCIP_INVALID, SCIP_INVALIDCALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIP_Real, SCIP_ROWORIGINTYPE_CONS, SCIP_ROWORIGINTYPE_SEPA, SCIP_ROWORIGINTYPE_UNSPEC, SCIPconshdlrIncNAppliedCuts(), SCIPdebugMessage, SCIPerrorMessage, SCIPlpAddRow(), SCIProwGetLPFeasibility(), SCIProwGetName(), SCIProwGetNLPFeasibility(), SCIProwGetRelaxFeasibility(), SCIProwIsInLP(), SCIPsepaIncNAppliedCuts(), SCIPsetEpsilon(), and sepastoreUpdateOrthogonalities().

Referenced by SCIPsepastoreApplyCuts().

static int sepastoreGetBestCut ( SCIP_SEPASTORE sepastore)
static

returns the position of the best non-forced cut in the cuts array

Parameters
sepastoreseparation storage

Definition at line 1034 of file sepastore.c.

References SCIP_SepaStore::nforcedcuts, NULL, SCIP_INVALID, SCIP_Real, SCIP_REAL_MIN, and SCIP_SepaStore::scores.

Referenced by SCIPsepastoreApplyCuts().

static SCIP_RETCODE computeScore ( SCIP_SEPASTORE sepastore,
SCIP_SET set,
SCIP_STAT stat,
SCIP_LP lp,
SCIP_Bool  handlepool,
int  pos,
SCIP_EFFICIACYCHOICE  efficiacychoice 
)
static

computes score for current LP solution and initialized orthogonalities

Parameters
sepastoreseparation storage
setglobal SCIP settings
statproblem statistics
lpLP data
handlepoolwhether the efficacy of cuts in the pool should be reduced
posposition of cut to handle
efficiacychoicetype of solution to base efficiacy computation on

Definition at line 1062 of file sepastore.c.

References SCIP_SepaStore::cuts, SCIP_SepaStore::efficacies, SCIP_SepaStore::objparallelisms, SCIP_SepaStore::orthogonalities, SCIP_EFFICIACYCHOICE_LP, SCIP_EFFICIACYCHOICE_NLP, SCIP_EFFICIACYCHOICE_RELAX, SCIP_INVALID, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_Real, SCIPerrorMessage, SCIProwGetLPEfficacy(), SCIProwGetNLPEfficacy(), SCIProwGetRelaxEfficacy(), SCIProwIsInGlobalCutpool(), SCIPsetIsInfinity(), and SCIP_SepaStore::scores.

Referenced by SCIPsepastoreApplyCuts(), and SCIPsepastoreRemoveInefficaciousCuts().

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 
)

adds cuts to the LP and clears separation storage

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
statproblem statistics
transprobtransformed problem
origproboriginal problem
treebranch and bound tree
reoptreoptimization data structure
lpLP data
branchcandbranching candidate storage
eventqueueevent queue
eventfilterglobal event filter
cliquetableclique table data structure
rootare we at the root node?
efficiacychoicetype of solution to base efficiacy computation on
cutoffpointer to store whether an empty domain was created

Definition at line 1117 of file sepastore.c.

References computeScore(), SCIP_SepaStore::cuts, SCIP_SepaStore::efficacies, FALSE, MAX, SCIP_SepaStore::ncuts, SCIP_SepaStore::nforcedcuts, NULL, SCIP_SepaStore::objparallelisms, SCIP_SepaStore::orthogonalities, SCIP_Bool, SCIP_CALL, SCIP_INVALID, SCIP_OKAY, SCIP_Real, SCIPdebugMessage, SCIPnodeGetDepth(), SCIProwCapture(), SCIProwGetName(), SCIProwGetNNonz(), SCIProwIsModifiable(), SCIProwRelease(), SCIPsepastoreClearCuts(), SCIPsetGetSepaMaxcuts(), SCIPsetIsFeasPositive(), SCIPsetIsInfinity(), SCIPtreeGetCurrentNode(), SCIP_SepaStore::scores, sepastoreApplyBdchg(), sepastoreApplyCut(), sepastoreDelCut(), sepastoreGetBestCut(), sepastoreIsBdchgApplicable(), and TRUE.

Referenced by applyCuts(), priceAndCutLoop(), SCIPapplyCutsProbing(), and SCIPinitConssLP().

SCIP_RETCODE SCIPsepastoreClearCuts ( SCIP_SEPASTORE sepastore,
BMS_BLKMEM blkmem,
SCIP_SET set,
SCIP_EVENTQUEUE eventqueue,
SCIP_EVENTFILTER eventfilter,
SCIP_LP lp 
)

clears the separation storage without adding the cuts to the LP

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
eventqueueevent queue
eventfilterevent filter for global events
lpLP data

Definition at line 1249 of file sepastore.c.

References BMSfreeMemoryArrayNull, SCIP_SepaStore::cuts, SCIP_SepaStore::cutssize, SCIP_EventFilter::eventmask, SCIP_SepaStore::initiallp, SCIP_EventFilter::len, SCIP_SepaStore::ncuts, SCIP_SepaStore::ncutsfoundround, SCIP_SepaStore::nforcedcuts, NULL, SCIP_CALL, SCIP_EVENTTYPE_ROWDELETEDSEPA, SCIP_OKAY, SCIPdebugMessage, SCIPeventCreateRowDeletedSepa(), SCIPeventqueueAdd(), and SCIProwRelease().

Referenced by applyCuts(), priceAndCutLoop(), SCIPclearCuts(), and SCIPsepastoreApplyCuts().

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 
)

removes cuts that are inefficacious w.r.t. the current LP solution from separation storage without adding the cuts to the LP

Parameters
sepastoreseparation storage
blkmemblock memory
setglobal SCIP settings
statproblem statistics data
eventqueueevent queue
eventfilterevent filter for global events
lpLP data
rootare we at the root node?
efficiacychoicetype of solution to base efficiacy computation on

Definition at line 1297 of file sepastore.c.

References computeScore(), SCIP_SepaStore::efficacies, FALSE, SCIP_SepaStore::nforcedcuts, NULL, SCIP_CALL, SCIP_INVALID, SCIP_OKAY, SCIPdebugMessage, SCIPsetIsEfficacious(), and sepastoreDelCut().

Referenced by SCIPremoveInefficaciousCuts().

SCIP_Bool SCIPsepastoreIsCutApplicable ( SCIP_SET set,
SCIP_ROW cut 
)

indicates whether a cut is applicable

A cut is applicable if it is modifiable, not a bound change, or a bound change that changes bounds by at least epsilon.

Parameters
setglobal SCIP settings
cutcut to check

Definition at line 1338 of file sepastore.c.

References SCIProwGetNNonz(), SCIProwIsModifiable(), and sepastoreIsBdchgApplicable().

Referenced by SCIPisCutApplicable().

SCIP_ROW** SCIPsepastoreGetCuts ( SCIP_SEPASTORE sepastore)

get cuts in the separation storage

Parameters
sepastoreseparation storage

Definition at line 1347 of file sepastore.c.

References SCIP_SepaStore::cuts, and NULL.

Referenced by SCIPgetCuts().

int SCIPsepastoreGetNCutsFound ( SCIP_SEPASTORE sepastore)

get total number of cuts found so far

Parameters
sepastoreseparation storage

Definition at line 1367 of file sepastore.c.

References SCIP_SepaStore::ncutsfound, and NULL.

Referenced by SCIPgetNCutsFound().

int SCIPsepastoreGetNCutsFoundRound ( SCIP_SEPASTORE sepastore)

get number of cuts found so far in current separation round

Parameters
sepastoreseparation storage

Definition at line 1377 of file sepastore.c.

References SCIP_SepaStore::ncutsfoundround, and NULL.

Referenced by SCIPgetNCutsFoundRound().

int SCIPsepastoreGetNCutsApplied ( SCIP_SEPASTORE sepastore)

get total number of cuts applied to the LPs

Parameters
sepastoreseparation storage

Definition at line 1387 of file sepastore.c.

References SCIP_SepaStore::ncutsapplied, and NULL.

Referenced by SCIPgetNCutsApplied().