Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

methods and datastructures for separators

Author
Tobias Achterberg
Timo Berthold

Definition in file sepa.c.

#include <assert.h>
#include <string.h>
#include "scip/def.h"
#include "scip/set.h"
#include "scip/stat.h"
#include "scip/clock.h"
#include "scip/paramset.h"
#include "scip/sepastore.h"
#include "scip/scip.h"
#include "scip/sepa.h"
#include "scip/pub_message.h"
#include "scip/pub_misc.h"
#include "scip/struct_sepa.h"

Go to the source code of this file.

Functions

 SCIP_DECL_SORTPTRCOMP (SCIPsepaComp)
 
 SCIP_DECL_SORTPTRCOMP (SCIPsepaCompName)
 
static SCIP_DECL_PARAMCHGD (paramChgdSepaPriority)
 
SCIP_RETCODE SCIPsepaCopyInclude (SCIP_SEPA *sepa, SCIP_SET *set)
 
static SCIP_RETCODE doSepaCreate (SCIP_SEPA **sepa, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, int freq, SCIP_Real maxbounddist, SCIP_Bool usessubscip, SCIP_Bool delay, SCIP_DECL_SEPACOPY((*sepacopy)), SCIP_DECL_SEPAFREE((*sepafree)), SCIP_DECL_SEPAINIT((*sepainit)), SCIP_DECL_SEPAEXIT((*sepaexit)), SCIP_DECL_SEPAINITSOL((*sepainitsol)), SCIP_DECL_SEPAEXITSOL((*sepaexitsol)), SCIP_DECL_SEPAEXECLP((*sepaexeclp)), SCIP_DECL_SEPAEXECSOL((*sepaexecsol)), SCIP_SEPADATA *sepadata)
 
SCIP_RETCODE SCIPsepaCreate (SCIP_SEPA **sepa, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, int freq, SCIP_Real maxbounddist, SCIP_Bool usessubscip, SCIP_Bool delay, SCIP_DECL_SEPACOPY((*sepacopy)), SCIP_DECL_SEPAFREE((*sepafree)), SCIP_DECL_SEPAINIT((*sepainit)), SCIP_DECL_SEPAEXIT((*sepaexit)), SCIP_DECL_SEPAINITSOL((*sepainitsol)), SCIP_DECL_SEPAEXITSOL((*sepaexitsol)), SCIP_DECL_SEPAEXECLP((*sepaexeclp)), SCIP_DECL_SEPAEXECSOL((*sepaexecsol)), SCIP_SEPADATA *sepadata)
 
SCIP_RETCODE SCIPsepaFree (SCIP_SEPA **sepa, SCIP_SET *set)
 
SCIP_RETCODE SCIPsepaInit (SCIP_SEPA *sepa, SCIP_SET *set)
 
SCIP_RETCODE SCIPsepaExit (SCIP_SEPA *sepa, SCIP_SET *set)
 
SCIP_RETCODE SCIPsepaInitsol (SCIP_SEPA *sepa, SCIP_SET *set)
 
SCIP_RETCODE SCIPsepaExitsol (SCIP_SEPA *sepa, SCIP_SET *set)
 
SCIP_RETCODE SCIPsepaExecLP (SCIP_SEPA *sepa, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, int depth, SCIP_Real bounddist, SCIP_Bool allowlocal, SCIP_Bool execdelayed, SCIP_RESULT *result)
 
SCIP_RETCODE SCIPsepaExecSol (SCIP_SEPA *sepa, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, int depth, SCIP_Bool allowlocal, SCIP_Bool execdelayed, SCIP_RESULT *result)
 
SCIP_SEPADATASCIPsepaGetData (SCIP_SEPA *sepa)
 
void SCIPsepaSetData (SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata)
 
void SCIPsepaSetCopy (SCIP_SEPA *sepa, SCIP_DECL_SEPACOPY((*sepacopy)))
 
void SCIPsepaSetFree (SCIP_SEPA *sepa, SCIP_DECL_SEPAFREE((*sepafree)))
 
void SCIPsepaSetInit (SCIP_SEPA *sepa, SCIP_DECL_SEPAINIT((*sepainit)))
 
void SCIPsepaSetExit (SCIP_SEPA *sepa, SCIP_DECL_SEPAEXIT((*sepaexit)))
 
void SCIPsepaSetInitsol (SCIP_SEPA *sepa, SCIP_DECL_SEPAINITSOL((*sepainitsol)))
 
void SCIPsepaSetExitsol (SCIP_SEPA *sepa, SCIP_DECL_SEPAEXITSOL((*sepaexitsol)))
 
void SCIPsepaSetIsParentsepa (SCIP_SEPA *sepa)
 
void SCIPsepaSetParentsepa (SCIP_SEPA *sepa, SCIP_SEPA *parentsepa)
 
const char * SCIPsepaGetName (SCIP_SEPA *sepa)
 
const char * SCIPsepaGetDesc (SCIP_SEPA *sepa)
 
int SCIPsepaGetPriority (SCIP_SEPA *sepa)
 
void SCIPsepaSetPriority (SCIP_SEPA *sepa, SCIP_SET *set, int priority)
 
int SCIPsepaGetFreq (SCIP_SEPA *sepa)
 
void SCIPsepaSetFreq (SCIP_SEPA *sepa, int freq)
 
SCIP_Real SCIPsepaGetMaxbounddist (SCIP_SEPA *sepa)
 
SCIP_Bool SCIPsepaUsesSubscip (SCIP_SEPA *sepa)
 
void SCIPsepaEnableOrDisableClocks (SCIP_SEPA *sepa, SCIP_Bool enable)
 
SCIP_Real SCIPsepaGetSetupTime (SCIP_SEPA *sepa)
 
SCIP_Real SCIPsepaGetTime (SCIP_SEPA *sepa)
 
SCIP_Longint SCIPsepaGetNCalls (SCIP_SEPA *sepa)
 
int SCIPsepaGetNCallsAtNode (SCIP_SEPA *sepa)
 
SCIP_Longint SCIPsepaGetNCutoffs (SCIP_SEPA *sepa)
 
SCIP_Longint SCIPsepaGetNCutsFound (SCIP_SEPA *sepa)
 
SCIP_Longint SCIPsepaGetNCutsApplied (SCIP_SEPA *sepa)
 
void SCIPsepaIncNAppliedCuts (SCIP_SEPA *sepa)
 
void SCIPsepaIncNCutsFound (SCIP_SEPA *sepa)
 
void SCIPsepaIncNCutsFoundAtNode (SCIP_SEPA *sepa)
 
SCIP_Longint SCIPsepaGetNCutsFoundAtNode (SCIP_SEPA *sepa)
 
SCIP_Longint SCIPsepaGetNConssFound (SCIP_SEPA *sepa)
 
SCIP_Longint SCIPsepaGetNDomredsFound (SCIP_SEPA *sepa)
 
SCIP_Bool SCIPsepaIsDelayed (SCIP_SEPA *sepa)
 
SCIP_Bool SCIPsepaWasLPDelayed (SCIP_SEPA *sepa)
 
SCIP_Bool SCIPsepaWasSolDelayed (SCIP_SEPA *sepa)
 
SCIP_Bool SCIPsepaIsInitialized (SCIP_SEPA *sepa)
 
SCIP_Bool SCIPsepaIsParentsepa (SCIP_SEPA *sepa)
 
SCIP_SEPASCIPsepaGetParentsepa (SCIP_SEPA *sepa)
 

Function Documentation

◆ SCIP_DECL_PARAMCHGD()

static SCIP_DECL_PARAMCHGD ( paramChgdSepaPriority  )
static

method to call, when the priority of a separator was changed

Definition at line 56 of file sepa.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPparamGetData(), SCIPparamGetInt(), and SCIPsetSepaPriority().

◆ SCIPsepaCopyInclude()

SCIP_RETCODE SCIPsepaCopyInclude ( SCIP_SEPA sepa,
SCIP_SET set 
)

copies the given separator to a new scip

Parameters
sepaseparator
setSCIP_SET of SCIP to copy to

Definition at line 70 of file sepa.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPsepaGetName(), and SCIPsetDebugMsg.

Referenced by SCIPsetCopyPlugins().

◆ doSepaCreate()

static SCIP_RETCODE doSepaCreate ( SCIP_SEPA **  sepa,
SCIP_SET set,
SCIP_MESSAGEHDLR messagehdlr,
BMS_BLKMEM blkmem,
const char *  name,
const char *  desc,
int  priority,
int  freq,
SCIP_Real  maxbounddist,
SCIP_Bool  usessubscip,
SCIP_Bool  delay,
SCIP_DECL_SEPACOPY((*sepacopy))  ,
SCIP_DECL_SEPAFREE((*sepafree))  ,
SCIP_DECL_SEPAINIT((*sepainit))  ,
SCIP_DECL_SEPAEXIT((*sepaexit))  ,
SCIP_DECL_SEPAINITSOL((*sepainitsol))  ,
SCIP_DECL_SEPAEXITSOL((*sepaexitsol))  ,
SCIP_DECL_SEPAEXECLP((*sepaexeclp))  ,
SCIP_DECL_SEPAEXECSOL((*sepaexecsol))  ,
SCIP_SEPADATA sepadata 
)
static

internal method for creating a separator

Parameters
sepapointer to separator data structure
setglobal SCIP settings
messagehdlrmessage handler
blkmemblock memory for parameter settings
namename of separator
descdescription of separator
prioritypriority of separator (>= 0: before, < 0: after constraint handlers)
freqfrequency for calling separator
maxbounddistmaximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for applying separation
usessubscipdoes the separator use a secondary SCIP instance?
delayshould separator be delayed, if other separators found cuts?
sepadataseparator data

Definition at line 89 of file sepa.c.

References BMSallocMemory, BMSclearMemory, BMSduplicateMemoryArray, FALSE, NULL, paramname, SCIP_ALLOC, SCIP_CALL, SCIP_CLOCKTYPE_DEFAULT, SCIP_MAXSTRLEN, SCIP_MAXTREEDEPTH, SCIP_OKAY, SCIPclockCreate(), SCIPsetAddBoolParam(), SCIPsetAddIntParam(), SCIPsetAddRealParam(), SCIPsnprintf(), and TRUE.

Referenced by SCIPsepaCreate().

◆ SCIPsepaCreate()

SCIP_RETCODE SCIPsepaCreate ( SCIP_SEPA **  sepa,
SCIP_SET set,
SCIP_MESSAGEHDLR messagehdlr,
BMS_BLKMEM blkmem,
const char *  name,
const char *  desc,
int  priority,
int  freq,
SCIP_Real  maxbounddist,
SCIP_Bool  usessubscip,
SCIP_Bool  delay,
SCIP_DECL_SEPACOPY((*sepacopy))  ,
SCIP_DECL_SEPAFREE((*sepafree))  ,
SCIP_DECL_SEPAINIT((*sepainit))  ,
SCIP_DECL_SEPAEXIT((*sepaexit))  ,
SCIP_DECL_SEPAINITSOL((*sepainitsol))  ,
SCIP_DECL_SEPAEXITSOL((*sepaexitsol))  ,
SCIP_DECL_SEPAEXECLP((*sepaexeclp))  ,
SCIP_DECL_SEPAEXECSOL((*sepaexecsol))  ,
SCIP_SEPADATA sepadata 
)

creates a separator

Parameters
sepapointer to separator data structure
setglobal SCIP settings
messagehdlrmessage handler
blkmemblock memory for parameter settings
namename of separator
descdescription of separator
prioritypriority of separator (>= 0: before, < 0: after constraint handlers)
freqfrequency for calling separator
maxbounddistmaximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for applying separation
usessubscipdoes the separator use a secondary SCIP instance?
delayshould separator be delayed, if other separators found cuts?
sepadataseparator data

Definition at line 190 of file sepa.c.

References doSepaCreate(), NULL, SCIP_CALL_FINALLY, SCIP_OKAY, and SCIPsepaFree().

Referenced by SCIPincludeSepa(), and SCIPincludeSepaBasic().

◆ SCIPsepaFree()

SCIP_RETCODE SCIPsepaFree ( SCIP_SEPA **  sepa,
SCIP_SET set 
)

calls destructor and frees memory of separator

Parameters
sepapointer to separator data structure
setglobal SCIP settings

Definition at line 229 of file sepa.c.

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

Referenced by SCIPsepaCreate().

◆ SCIPsepaInit()

◆ SCIPsepaExit()

SCIP_RETCODE SCIPsepaExit ( SCIP_SEPA sepa,
SCIP_SET set 
)

calls exit method of separator

Parameters
sepaseparator
setglobal SCIP settings

Definition at line 304 of file sepa.c.

References FALSE, SCIP_Sepa::initialized, SCIP_Sepa::name, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, and SCIP_Sepa::setuptime.

Referenced by SCIPsetInitPlugins().

◆ SCIPsepaInitsol()

SCIP_RETCODE SCIPsepaInitsol ( SCIP_SEPA sepa,
SCIP_SET set 
)

informs separator that the branch and bound process is being started

Parameters
sepaseparator
setglobal SCIP settings

Definition at line 334 of file sepa.c.

References FALSE, SCIP_Sepa::lpwasdelayed, NULL, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), SCIP_Sepa::setuptime, and SCIP_Sepa::solwasdelayed.

Referenced by SCIPsetExitprePlugins().

◆ SCIPsepaExitsol()

SCIP_RETCODE SCIPsepaExitsol ( SCIP_SEPA sepa,
SCIP_SET set 
)

informs separator that the branch and bound process data is being freed

Parameters
sepaseparator
setglobal SCIP settings

Definition at line 361 of file sepa.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), and SCIP_Sepa::setuptime.

Referenced by SCIPsetInitsolPlugins().

◆ SCIPsepaExecLP()

SCIP_RETCODE SCIPsepaExecLP ( SCIP_SEPA sepa,
SCIP_SET set,
SCIP_STAT stat,
SCIP_SEPASTORE sepastore,
int  depth,
SCIP_Real  bounddist,
SCIP_Bool  allowlocal,
SCIP_Bool  execdelayed,
SCIP_RESULT result 
)

calls LP separation method of separator

Parameters
sepaseparator
setglobal SCIP settings
statdynamic problem statistics
sepastoreseparation storage
depthdepth of current node
bounddistcurrent relative distance of local dual bound to global dual bound
allowlocalshould the separator be asked to separate local cuts
execdelayedexecute separator even if it is marked to be delayed
resultpointer to store the result of the callback method

Definition at line 385 of file sepa.c.

References SCIP_Sepa::delay, SCIP_Sepa::expbackoff, SCIP_Sepa::freq, SCIP_Sepa::lastsepanode, SCIP_Sepa::lpwasdelayed, MAX, SCIP_Sepa::maxbounddist, SCIP_Stat::nactiveconss, SCIP_Sepa::name, SCIP_Stat::nboundchgs, SCIP_Sepa::ncalls, SCIP_Sepa::ncallsatnode, SCIP_Sepa::nconssfound, SCIP_Sepa::ncutoffs, SCIP_Sepa::ncutsfound, SCIP_Sepa::ncutsfoundatnode, SCIP_Sepa::ndomredsfound, SCIP_Stat::nholechgs, SCIP_Stat::nprobboundchgs, SCIP_Stat::nprobholechgs, SCIP_Stat::ntotalnodes, NULL, SCIP_CALL, SCIP_CONSADDED, SCIP_CUTOFF, SCIP_DELAYED, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_INVALIDRESULT, SCIP_Longint, SCIP_NEWROUND, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIP_SEPARATED, SCIPclockStart(), SCIPclockStop(), SCIPcutpoolGetNCuts(), SCIPerrorMessage, SCIPgetDelayedGlobalCutpool(), SCIPgetGlobalCutpool(), SCIPsepastoreGetNCuts(), SCIPsetDebugMsg, SCIPsetIsIntegral(), SCIPsetIsLE(), and SCIP_Sepa::sepaclock.

Referenced by separationRoundLP().

◆ SCIPsepaExecSol()

SCIP_RETCODE SCIPsepaExecSol ( SCIP_SEPA sepa,
SCIP_SET set,
SCIP_STAT stat,
SCIP_SEPASTORE sepastore,
SCIP_SOL sol,
int  depth,
SCIP_Bool  allowlocal,
SCIP_Bool  execdelayed,
SCIP_RESULT result 
)

calls primal solution separation method of separator

Parameters
sepaseparator
setglobal SCIP settings
statdynamic problem statistics
sepastoreseparation storage
solprimal solution that should be separated
depthdepth of current node
allowlocalshould the separator allow local cuts
execdelayedexecute separator even if it is marked to be delayed
resultpointer to store the result of the callback method

Definition at line 502 of file sepa.c.

References SCIP_Sepa::delay, SCIP_Sepa::expbackoff, SCIP_Sepa::freq, SCIP_Sepa::lastsepanode, MAX, SCIP_Stat::nactiveconss, SCIP_Sepa::name, SCIP_Stat::nboundchgs, SCIP_Sepa::ncalls, SCIP_Sepa::ncallsatnode, SCIP_Sepa::nconssfound, SCIP_Sepa::ncutoffs, SCIP_Sepa::ncutsfound, SCIP_Sepa::ncutsfoundatnode, SCIP_Sepa::ndomredsfound, SCIP_Stat::nholechgs, SCIP_Stat::nprobboundchgs, SCIP_Stat::nprobholechgs, SCIP_Stat::ntotalnodes, NULL, SCIP_CALL, SCIP_CONSADDED, SCIP_CUTOFF, SCIP_DELAYED, SCIP_DIDNOTFIND, SCIP_DIDNOTRUN, SCIP_INVALIDRESULT, SCIP_Longint, SCIP_NEWROUND, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIP_SEPARATED, SCIPclockStart(), SCIPclockStop(), SCIPerrorMessage, SCIPsepastoreGetNCuts(), SCIPsetDebugMsg, SCIPsetIsIntegral(), SCIP_Sepa::sepaclock, and SCIP_Sepa::solwasdelayed.

Referenced by separationRoundSol().

◆ SCIPsepaSetCopy()

void SCIPsepaSetCopy ( SCIP_SEPA sepa,
SCIP_DECL_SEPACOPY((*sepacopy))   
)

sets copy method of separator

Parameters
sepaseparator

Definition at line 633 of file sepa.c.

References NULL.

Referenced by SCIPsetSepaCopy().

◆ SCIPsepaSetFree()

void SCIPsepaSetFree ( SCIP_SEPA sepa,
SCIP_DECL_SEPAFREE((*sepafree))   
)

sets destructor method of separator

Parameters
sepaseparator

Definition at line 644 of file sepa.c.

References NULL.

Referenced by SCIPsetSepaFree().

◆ SCIPsepaSetInit()

void SCIPsepaSetInit ( SCIP_SEPA sepa,
SCIP_DECL_SEPAINIT((*sepainit))   
)

sets initialization method of separator

Parameters
sepaseparator

Definition at line 655 of file sepa.c.

References NULL.

Referenced by SCIPsetSepaInit().

◆ SCIPsepaSetExit()

void SCIPsepaSetExit ( SCIP_SEPA sepa,
SCIP_DECL_SEPAEXIT((*sepaexit))   
)

sets deinitialization method of separator

Parameters
sepaseparator

Definition at line 666 of file sepa.c.

References NULL.

Referenced by SCIPsetSepaExit().

◆ SCIPsepaSetInitsol()

void SCIPsepaSetInitsol ( SCIP_SEPA sepa,
SCIP_DECL_SEPAINITSOL((*sepainitsol))   
)

sets solving process initialization method of separator

Parameters
sepaseparator

Definition at line 677 of file sepa.c.

References NULL.

Referenced by SCIPsetSepaInitsol().

◆ SCIPsepaSetExitsol()

void SCIPsepaSetExitsol ( SCIP_SEPA sepa,
SCIP_DECL_SEPAEXITSOL((*sepaexitsol))   
)

sets solving process deinitialization method of separator

Parameters
sepaseparator

Definition at line 688 of file sepa.c.

References NULL.

Referenced by SCIPsetSepaExitsol().

◆ SCIPsepaSetIsParentsepa()

void SCIPsepaSetIsParentsepa ( SCIP_SEPA sepa)

declares separator to be a parent separator

Parameters
sepaseparator

Definition at line 699 of file sepa.c.

References SCIP_Sepa::isparentsepa, NULL, and TRUE.

Referenced by SCIPsetSepaIsParentsepa().

◆ SCIPsepaSetParentsepa()

void SCIPsepaSetParentsepa ( SCIP_SEPA sepa,
SCIP_SEPA parentsepa 
)

sets the parent separator

Parameters
sepaseparator
parentsepaparent separator

Definition at line 709 of file sepa.c.

References NULL, and SCIP_Sepa::parentsepa.

Referenced by SCIPsetSepaParentsepa().

◆ SCIPsepaSetPriority()

void SCIPsepaSetPriority ( SCIP_SEPA sepa,
SCIP_SET set,
int  priority 
)

sets priority of separator

Parameters
sepaseparator
setglobal SCIP settings
prioritynew priority of the separator

Definition at line 750 of file sepa.c.

References FALSE, NULL, and SCIP_Sepa::priority.

Referenced by SCIPsetSepaPriority().

◆ SCIPsepaEnableOrDisableClocks()

void SCIPsepaEnableOrDisableClocks ( SCIP_SEPA sepa,
SCIP_Bool  enable 
)

enables or disables all clocks of sepa, depending on the value of the flag

Parameters
sepathe separator for which all clocks should be enabled or disabled
enableshould the clocks of the separator be enabled?

Definition at line 805 of file sepa.c.

References NULL, SCIPclockEnableOrDisable(), SCIP_Sepa::sepaclock, and SCIP_Sepa::setuptime.

◆ SCIPsepaIncNAppliedCuts()

void SCIPsepaIncNAppliedCuts ( SCIP_SEPA sepa)

increase count of applied cuts

Parameters
sepaseparator

Definition at line 887 of file sepa.c.

References SCIP_Sepa::ncutsapplied, and NULL.

Referenced by sepastoreApplyCut().

◆ SCIPsepaIncNCutsFound()

void SCIPsepaIncNCutsFound ( SCIP_SEPA sepa)

increase count of found cuts

Parameters
sepaseparator

Definition at line 897 of file sepa.c.

References SCIP_Sepa::ncutsfound, and NULL.

Referenced by SCIPcutpoolSeparate().

◆ SCIPsepaIncNCutsFoundAtNode()

void SCIPsepaIncNCutsFoundAtNode ( SCIP_SEPA sepa)

increase count of found cuts at current node

Parameters
sepaseparator

Definition at line 907 of file sepa.c.

References SCIP_Sepa::ncutsfoundatnode, and NULL.

Referenced by SCIPcutpoolSeparate().