SCIP Doxygen Documentation
Loading...
Searching...
No Matches

Detailed Description

methods for storing cuts in a cut pool

Author
Tobias Achterberg
Stefan Heinz
Gerald Gamrath
Marc Pfetsch
Kati Wolter

Definition in file cutpool.c.

#include <assert.h>
#include "scip/def.h"
#include "scip/set.h"
#include "scip/stat.h"
#include "scip/clock.h"
#include "scip/lp.h"
#include "scip/cons.h"
#include "scip/sepa.h"
#include "scip/sepastore.h"
#include "scip/cutpool.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/struct_cutpool.h"

Go to the source code of this file.

Functions

static SCIP_DECL_HASHGETKEY (hashGetKeyCut)
static SCIP_DECL_HASHKEYEQ (hashKeyEqCut)
static SCIP_DECL_HASHKEYVAL (hashKeyValCut)
static SCIP_RETCODE cutpoolEnsureCutsMem (SCIP_CUTPOOL *cutpool, SCIP_SET *set, int num)
static SCIP_RETCODE cutCreate (SCIP_CUT **cut, BMS_BLKMEM *blkmem, SCIP_ROW *row)
static SCIP_RETCODE cutFree (SCIP_CUT **cut, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp)
static SCIP_Bool cutIsAged (SCIP_CUT *cut, int agelimit)
SCIP_ROWSCIPcutGetRow (SCIP_CUT *cut)
int SCIPcutGetAge (SCIP_CUT *cut)
SCIP_Real SCIPcutGetLPActivityQuot (SCIP_CUT *cut)
SCIP_RETCODE SCIPcutpoolCreate (SCIP_CUTPOOL **cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, int agelimit, SCIP_Bool globalcutpool)
SCIP_RETCODE SCIPcutpoolFree (SCIP_CUTPOOL **cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp)
SCIP_RETCODE SCIPcutpoolClear (SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp)
static SCIP_RETCODE cutpoolDelCut (SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_CUT *cut)
SCIP_Bool SCIPcutpoolIsCutNew (SCIP_CUTPOOL *cutpool, SCIP_SET *set, SCIP_ROW *row)
SCIP_RETCODE SCIPcutpoolAddRow (SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_ROW *row)
SCIP_RETCODE SCIPcutpoolAddNewRow (SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_ROW *row)
SCIP_RETCODE SCIPcutpoolDelRow (SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_ROW *row)
SCIP_RETCODE SCIPcutpoolSeparate (SCIP_CUTPOOL *cutpool, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, SCIP_Bool cutpoolisdelayed, SCIP_Bool root, SCIP_RESULT *result)
SCIP_CUT ** SCIPcutpoolGetCuts (SCIP_CUTPOOL *cutpool)
int SCIPcutpoolGetNCuts (SCIP_CUTPOOL *cutpool)
SCIP_Longint SCIPcutpoolGetMaxNCuts (SCIP_CUTPOOL *cutpool)
SCIP_Real SCIPcutpoolGetTime (SCIP_CUTPOOL *cutpool)
SCIP_Longint SCIPcutpoolGetNCalls (SCIP_CUTPOOL *cutpool)
SCIP_Longint SCIPcutpoolGetNRootCalls (SCIP_CUTPOOL *cutpool)
SCIP_Longint SCIPcutpoolGetNCutsFound (SCIP_CUTPOOL *cutpool)
SCIP_Longint SCIPcutpoolGetNCutsAdded (SCIP_CUTPOOL *cutpool)
void SCIPcutpoolAddMaxNCuts (SCIP_CUTPOOL *cutpool, SCIP_Longint ncuts)
void SCIPcutpoolSetTime (SCIP_CUTPOOL *cutpool, SCIP_Real time)
void SCIPcutpoolAddNCalls (SCIP_CUTPOOL *cutpool, SCIP_Longint ncalls)
void SCIPcutpoolAddNRootCalls (SCIP_CUTPOOL *cutpool, SCIP_Longint nrootcalls)
void SCIPcutpoolAddNCutsFound (SCIP_CUTPOOL *cutpool, SCIP_Longint ncutsfound)
void SCIPcutpoolAddNCutsAdded (SCIP_CUTPOOL *cutpool, SCIP_Longint ncutsadded)

Function Documentation

◆ SCIP_DECL_HASHGETKEY()

SCIP_DECL_HASHGETKEY ( hashGetKeyCut )
static

gets the hash key of a cut

Definition at line 61 of file cutpool.c.

References assert(), NULL, and SCIP_Cut::row.

◆ SCIP_DECL_HASHKEYEQ()

◆ SCIP_DECL_HASHKEYVAL()

SCIP_DECL_HASHKEYVAL ( hashKeyValCut )
static

◆ cutpoolEnsureCutsMem()

SCIP_RETCODE cutpoolEnsureCutsMem ( SCIP_CUTPOOL * cutpool,
SCIP_SET * set,
int num )
static

resizes cuts array to be able to store at least num entries

Parameters
cutpoolcut pool
setglobal SCIP settings
numminimal number of slots in array

Definition at line 291 of file cutpool.c.

References assert(), BMSreallocMemoryArray, SCIP_Cutpool::cuts, SCIP_Cutpool::cutssize, NULL, SCIP_ALLOC, SCIP_OKAY, and SCIPsetCalcMemGrowSize().

Referenced by SCIPcutpoolAddNewRow().

◆ cutCreate()

SCIP_RETCODE cutCreate ( SCIP_CUT ** cut,
BMS_BLKMEM * blkmem,
SCIP_ROW * row )
static

creates a cut and captures the row

Parameters
cutpointer to store the cut
blkmemblock memory
rowrow this cut represents

Definition at line 321 of file cutpool.c.

References SCIP_Row::age, assert(), BMSallocBlockMemory, NULL, SCIP_ALLOC, SCIP_OKAY, and SCIProwCapture().

Referenced by SCIPcutpoolAddNewRow().

◆ cutFree()

SCIP_RETCODE cutFree ( SCIP_CUT ** cut,
BMS_BLKMEM * blkmem,
SCIP_SET * set,
SCIP_LP * lp )
static

frees a cut and releases the row

Parameters
cutpointer to store the cut
blkmemblock memory
setglobal SCIP settings
lpcurrent LP data

Definition at line 347 of file cutpool.c.

References assert(), BMSfreeBlockMemory, NULL, SCIP_CALL, SCIP_OKAY, and SCIProwRelease().

Referenced by cutpoolDelCut(), and SCIPcutpoolClear().

◆ cutIsAged()

SCIP_Bool cutIsAged ( SCIP_CUT * cut,
int agelimit )
static

returns whether the cut's age exceeds the age limit

Parameters
cutcut to check
agelimitmaximum age a cut can reach before it is deleted from the pool, or -1

Definition at line 370 of file cutpool.c.

References SCIP_Cut::age, assert(), NULL, and SCIP_Bool.

Referenced by SCIPcutpoolSeparate().

◆ SCIPcutpoolCreate()

SCIP_RETCODE SCIPcutpoolCreate ( SCIP_CUTPOOL ** cutpool,
BMS_BLKMEM * blkmem,
SCIP_SET * set,
int agelimit,
SCIP_Bool globalcutpool )

creates cut pool

Parameters
cutpoolpointer to store cut pool
blkmemblock memory
setglobal SCIP settings
agelimitmaximum age a cut can reach before it is deleted from the pool
globalcutpoolis this the global cut pool of SCIP?

Definition at line 427 of file cutpool.c.

References assert(), BMSallocMemory, NULL, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_CLOCKTYPE_DEFAULT, SCIP_HASHSIZE_CUTPOOLS, SCIP_HASHSIZE_CUTPOOLS_SMALL, SCIP_INVALID, SCIP_OKAY, SCIPclockCreate(), and SCIPhashtableCreate().

Referenced by initSolve(), and SCIPcreateCutpool().

◆ SCIPcutpoolFree()

SCIP_RETCODE SCIPcutpoolFree ( SCIP_CUTPOOL ** cutpool,
BMS_BLKMEM * blkmem,
SCIP_SET * set,
SCIP_LP * lp )

frees cut pool

Parameters
cutpoolpointer to store cut pool
blkmemblock memory
setglobal SCIP settings
lpcurrent LP data

Definition at line 468 of file cutpool.c.

References assert(), BMSfreeMemory, BMSfreeMemoryArrayNull, NULL, SCIP_CALL, SCIP_OKAY, SCIPclockFree(), SCIPcutpoolClear(), and SCIPhashtableFree().

Referenced by freeReoptSolve(), freeSolve(), and SCIPfreeCutpool().

◆ SCIPcutpoolClear()

SCIP_RETCODE SCIPcutpoolClear ( SCIP_CUTPOOL * cutpool,
BMS_BLKMEM * blkmem,
SCIP_SET * set,
SCIP_LP * lp )

removes all rows from the cut pool

Parameters
cutpoolcut pool
blkmemblock memory
setglobal SCIP settings
lpcurrent LP data

Definition at line 494 of file cutpool.c.

References assert(), cutFree(), SCIP_Cutpool::cuts, FALSE, SCIP_Cutpool::globalcutpool, SCIP_Cutpool::hashtable, i, SCIP_Row::inglobalcutpool, SCIP_Cutpool::ncuts, SCIP_Cutpool::nremovablecuts, NULL, SCIP_Cut::row, SCIP_CALL, SCIP_OKAY, SCIPhashtableRemoveAll(), and SCIProwUnlock().

Referenced by freeReoptSolve(), freeSolve(), and SCIPcutpoolFree().

◆ cutpoolDelCut()

◆ SCIPcutpoolIsCutNew()

SCIP_Bool SCIPcutpoolIsCutNew ( SCIP_CUTPOOL * cutpool,
SCIP_SET * set,
SCIP_ROW * row )

checks if cut is already existing

Parameters
cutpoolcut pool
setglobal SCIP settings
rowcutting plane to add

Definition at line 593 of file cutpool.c.

References assert(), SCIP_Row::constant, FALSE, SCIP_Cutpool::hashtable, SCIP_Row::len, SCIP_Row::lhs, NULL, SCIP_Row::rhs, SCIP_Cut::row, SCIP_Bool, SCIP_Real, SCIPhashtableRetrieve(), SCIProwGetMaxval(), SCIPsetIsFeasGT(), SCIPsetIsFeasLT(), SCIPsetIsInfinity(), and TRUE.

Referenced by SCIPisCutNew().

◆ SCIPcutpoolAddRow()

SCIP_RETCODE SCIPcutpoolAddRow ( SCIP_CUTPOOL * cutpool,
BMS_BLKMEM * blkmem,
SCIP_SET * set,
SCIP_STAT * stat,
SCIP_LP * lp,
SCIP_ROW * row )

if not already existing, adds row to cut pool and captures it

Parameters
cutpoolcut pool
blkmemblock memory
setglobal SCIP settings
statproblem statistics data
lpcurrent LP data
rowcutting plane to add

Definition at line 656 of file cutpool.c.

References assert(), SCIP_Row::constant, cutpoolDelCut(), SCIP_Cutpool::hashtable, SCIP_Row::len, SCIP_Row::lhs, NULL, SCIP_Row::rhs, SCIP_Cut::row, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPcutpoolAddNewRow(), SCIPcutpoolAddRow(), SCIPhashtableRetrieve(), SCIProwGetMaxidx(), SCIProwGetMaxval(), SCIPsetIsFeasLT(), and SCIPsetIsInfinity().

Referenced by SCIPaddDelayedPoolCut(), SCIPaddPoolCut(), SCIPaddRowCutpool(), SCIPcutpoolAddRow(), and SCIPreoptApplyCuts().

◆ SCIPcutpoolAddNewRow()

◆ SCIPcutpoolDelRow()

SCIP_RETCODE SCIPcutpoolDelRow ( SCIP_CUTPOOL * cutpool,
BMS_BLKMEM * blkmem,
SCIP_SET * set,
SCIP_STAT * stat,
SCIP_LP * lp,
SCIP_ROW * row )

removes the LP row from the cut pool

Parameters
cutpoolcut pool
blkmemblock memory
setglobal SCIP settings
statproblem statistics data
lpcurrent LP data
rowrow to remove

Definition at line 798 of file cutpool.c.

References assert(), cutpoolDelCut(), SCIP_Cutpool::hashtable, NULL, SCIP_CALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIPerrorMessage, SCIPhashtableRetrieve(), and SCIProwGetName().

Referenced by SCIPdelDelayedPoolCut(), SCIPdelPoolCut(), and SCIPdelRowCutpool().

◆ SCIPcutpoolSeparate()

SCIP_RETCODE SCIPcutpoolSeparate ( SCIP_CUTPOOL * cutpool,
BMS_BLKMEM * blkmem,
SCIP_SET * set,
SCIP_STAT * stat,
SCIP_EVENTQUEUE * eventqueue,
SCIP_EVENTFILTER * eventfilter,
SCIP_LP * lp,
SCIP_SEPASTORE * sepastore,
SCIP_SOL * sol,
SCIP_Bool cutpoolisdelayed,
SCIP_Bool root,
SCIP_RESULT * result )

separates cuts of the cut pool

Parameters
cutpoolcut pool
blkmemblock memory
setglobal SCIP settings
statproblem statistics data
eventqueueevent queue
eventfilterevent filter for global events
lpcurrent LP data
sepastoreseparation storage
solsolution to be separated (or NULL for LP-solution)
cutpoolisdelayedis the cutpool delayed (count cuts found)?
rootare we at the root node?
resultpointer to store the result of the separation call

Definition at line 827 of file cutpool.c.

References SCIP_Cut::age, SCIP_Cutpool::agelimit, assert(), SCIP_Stat::bestefficacy, c, cutIsAged(), cutoff, cutpoolDelCut(), SCIP_Cutpool::cuts, FALSE, SCIP_Cutpool::firstunprocessed, SCIP_Cutpool::firstunprocessedsol, SCIP_Row::fromcutpool, SCIP_Stat::lpcount, MAX, MIN, SCIP_Stat::minefficacyfac, SCIP_Cutpool::ncalls, SCIP_Stat::ncutpoolfails, SCIP_Cutpool::ncuts, SCIP_Cutpool::ncutsadded, SCIP_Cutpool::nremovablecuts, SCIP_Cutpool::nrootcalls, NULL, SCIP_Cutpool::poolclock, SCIP_Cut::pos, SCIP_Cut::processedlp, SCIP_Cutpool::processedlp, SCIP_Cutpool::processedlpefficacy, SCIP_Cut::processedlpsol, SCIP_Cutpool::processedlpsol, SCIP_Cutpool::processedlpsolefficacy, result, SCIP_Cut::row, SCIP_Bool, SCIP_CALL, SCIP_CUTOFF, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_Longint, SCIP_OKAY, SCIP_Real, SCIP_SEPARATED, SCIPclockStart(), SCIPclockStop(), SCIPconshdlrIncNCutsFound(), SCIProwGetLPEfficacy(), SCIProwGetLPFeasibility(), SCIProwGetName(), SCIProwGetNNonz(), SCIProwGetOriginConshdlr(), SCIProwGetOriginSepa(), SCIProwGetSolEfficacy(), SCIProwGetSolFeasibility(), SCIProwIsInLP(), SCIProwIsModifiable(), SCIPsepaIncNCutsAdded(), SCIPsepaIncNCutsFoundAtNode(), SCIPsepastoreAddCut(), SCIPsepastoreGetNCuts(), SCIPsepastoreGetNCutsAdded(), SCIPsetDebugMsg, SCIPsetGetSepaMaxcuts(), SCIPsetIsFeasPositive(), sol, and TRUE.

Referenced by cutpoolSeparate(), SCIPseparateCutpool(), and SCIPseparateSolCutpool().

◆ SCIPcutpoolAddMaxNCuts()

void SCIPcutpoolAddMaxNCuts ( SCIP_CUTPOOL * cutpool,
SCIP_Longint ncuts )

adds the maximum number of cuts that were stored in the pool; this is primarily used to keep statistics when SCIP performs a restart

Parameters
cutpoolcut pool
ncutsnumber of cuts to add

Definition at line 1148 of file cutpool.c.

References assert(), SCIP_Cutpool::maxncuts, NULL, and SCIP_Longint.

Referenced by SCIPsolve().

◆ SCIPcutpoolSetTime()

void SCIPcutpoolSetTime ( SCIP_CUTPOOL * cutpool,
SCIP_Real time )

sets time in seconds used for separating cuts from the pool; this is primarily used to keep statistics when SCIP performs a restart

Parameters
cutpoolcut pool
timepoolclock time

Definition at line 1160 of file cutpool.c.

References assert(), NULL, SCIP_Cutpool::poolclock, SCIP_Real, and SCIPclockSetTime().

Referenced by SCIPsolve().

◆ SCIPcutpoolAddNCalls()

void SCIPcutpoolAddNCalls ( SCIP_CUTPOOL * cutpool,
SCIP_Longint ncalls )

adds the number of times the cut pool was separated; this is primarily used to keep statistics when SCIP performs a restart

Parameters
cutpoolcut pool
ncallsncalls

Definition at line 1172 of file cutpool.c.

References assert(), ncalls, SCIP_Cutpool::ncalls, NULL, and SCIP_Longint.

Referenced by SCIPsolve().

◆ SCIPcutpoolAddNRootCalls()

void SCIPcutpoolAddNRootCalls ( SCIP_CUTPOOL * cutpool,
SCIP_Longint nrootcalls )

adds the number of times the cut pool was separated at the root; this is primarily used to keep statistics when SCIP performs a restart

Parameters
cutpoolcut pool
nrootcallsnrootcalls

Definition at line 1184 of file cutpool.c.

References assert(), SCIP_Cutpool::nrootcalls, NULL, and SCIP_Longint.

Referenced by SCIPsolve().

◆ SCIPcutpoolAddNCutsFound()

void SCIPcutpoolAddNCutsFound ( SCIP_CUTPOOL * cutpool,
SCIP_Longint ncutsfound )

adds the total number of cuts that were added to the pool; this is primarily used to keep statistics when SCIP performs a restart

Parameters
cutpoolcut pool
ncutsfoundtotal number of cuts added to cut pool

Definition at line 1196 of file cutpool.c.

References assert(), SCIP_Cutpool::ncutsfound, NULL, and SCIP_Longint.

Referenced by SCIPsolve().

◆ SCIPcutpoolAddNCutsAdded()

void SCIPcutpoolAddNCutsAdded ( SCIP_CUTPOOL * cutpool,
SCIP_Longint ncutsadded )

adds the total number of cuts that were separated from the pool; this is primarily used to keep statistics when SCIP performs a restart

Parameters
cutpoolcut pool
ncutsaddedtotal number of cuts added from cut pool to sepastore

Definition at line 1208 of file cutpool.c.

References assert(), SCIP_Cutpool::ncutsadded, NULL, and SCIP_Longint.

Referenced by SCIPsolve().