Scippy

    SCIP

    Solving Constraint Integer Programs

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

    static SCIP_DECL_HASHGETKEY ( hashGetKeyCut  )
    static

    gets the hash key of a cut

    Definition at line 61 of file cutpool.c.

    References NULL, and SCIP_Cut::row.

    ◆ SCIP_DECL_HASHKEYEQ()

    ◆ SCIP_DECL_HASHKEYVAL()

    static SCIP_DECL_HASHKEYVAL ( hashKeyValCut  )
    static

    ◆ cutpoolEnsureCutsMem()

    static 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 BMSreallocMemoryArray, SCIP_Cutpool::cuts, SCIP_Cutpool::cutssize, NULL, SCIP_ALLOC, SCIP_OKAY, and SCIPsetCalcMemGrowSize().

    Referenced by SCIPcutpoolAddNewRow().

    ◆ cutCreate()

    static 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, BMSallocBlockMemory, NULL, SCIP_ALLOC, SCIP_OKAY, and SCIProwCapture().

    Referenced by SCIPcutpoolAddNewRow().

    ◆ cutFree()

    static 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 BMSfreeBlockMemory, NULL, SCIP_CALL, SCIP_OKAY, and SCIProwRelease().

    Referenced by cutpoolDelCut(), and SCIPcutpoolClear().

    ◆ cutIsAged()

    static 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, and NULL.

    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 BMSallocMemory, NULL, SCIP_ALLOC, 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 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 cutFree(), SCIP_Cutpool::cuts, FALSE, SCIP_Cutpool::globalcutpool, SCIP_Cutpool::hashtable, 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 SCIP_Row::constant, FALSE, SCIP_Cutpool::hashtable, SCIP_Row::len, SCIP_Row::lhs, NULL, SCIP_Row::rhs, SCIP_Cut::row, 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 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 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, SCIP_Stat::bestefficacy, cutIsAged(), 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, 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(), 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 SCIP_Cutpool::maxncuts, and NULL.

    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 NULL, SCIP_Cutpool::poolclock, 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 SCIP_Cutpool::ncalls, and NULL.

    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 SCIP_Cutpool::nrootcalls, and NULL.

    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 SCIP_Cutpool::ncutsfound, and NULL.

    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 SCIP_Cutpool::ncutsadded, and NULL.

    Referenced by SCIPsolve().