60 assert(paramdata !=
NULL);
76 assert(set->scip !=
NULL);
78 if( sepa->sepacopy !=
NULL )
81 SCIP_CALL( sepa->sepacopy(set->scip, sepa) );
114 assert(sepa !=
NULL);
115 assert(name !=
NULL);
116 assert(desc !=
NULL);
118 assert(0.0 <= maxbounddist && maxbounddist <= 1.0);
119 assert(sepaexeclp !=
NULL || sepaexecsol !=
NULL);
124 (*sepa)->priority = priority;
125 (*sepa)->freq = freq;
126 (*sepa)->maxbounddist = maxbounddist;
127 (*sepa)->usessubscip = usessubscip;
128 (*sepa)->sepacopy = sepacopy;
129 (*sepa)->sepafree = sepafree;
130 (*sepa)->sepainit = sepainit;
131 (*sepa)->sepaexit = sepaexit;
132 (*sepa)->sepainitsol = sepainitsol;
133 (*sepa)->sepaexitsol = sepaexitsol;
134 (*sepa)->sepaexeclp = sepaexeclp;
135 (*sepa)->sepaexecsol = sepaexecsol;
136 (*sepa)->sepadata = sepadata;
139 (*sepa)->lastsepanode = -1;
141 (*sepa)->ncutoffs = 0;
142 (*sepa)->ncutsfound = 0;
143 (*sepa)->ncutsapplied = 0;
144 (*sepa)->nconssfound = 0;
145 (*sepa)->ndomredsfound = 0;
146 (*sepa)->ncallsatnode = 0;
147 (*sepa)->ncutsfoundatnode = 0;
148 (*sepa)->lpwasdelayed =
FALSE;
149 (*sepa)->solwasdelayed =
FALSE;
150 (*sepa)->initialized =
FALSE;
156 &(*sepa)->priority,
TRUE, priority, INT_MIN/4, INT_MAX/4,
160 (void)
SCIPsnprintf(paramdesc,
SCIP_MAXSTRLEN,
"frequency for calling separator <%s> (-1: never, 0: only in root node)", name);
165 (void)
SCIPsnprintf(paramdesc,
SCIP_MAXSTRLEN,
"maximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for applying separator <%s> (0.0: only on current best node, 1.0: on all nodes)",
168 &(*sepa)->maxbounddist,
TRUE, maxbounddist, 0.0, 1.0,
NULL,
NULL) );
172 "should separator be delayed, if other separators found cuts?",
184 assert(sepa !=
NULL);
185 assert(*sepa !=
NULL);
186 assert(!(*sepa)->initialized);
190 if( (*sepa)->sepafree !=
NULL )
192 SCIP_CALL( (*sepa)->sepafree(set->scip, *sepa) );
210 assert(sepa !=
NULL);
219 if( set->misc_resetstat )
237 if( sepa->sepainit !=
NULL )
242 SCIP_CALL( sepa->sepainit(set->scip, sepa) );
258 assert(sepa !=
NULL);
267 if( sepa->sepaexit !=
NULL )
272 SCIP_CALL( sepa->sepaexit(set->scip, sepa) );
288 assert(sepa !=
NULL);
295 if( sepa->sepainitsol !=
NULL )
300 SCIP_CALL( sepa->sepainitsol(set->scip, sepa) );
315 assert(sepa !=
NULL);
319 if( sepa->sepaexitsol !=
NULL )
324 SCIP_CALL( sepa->sepaexitsol(set->scip, sepa) );
345 assert(sepa !=
NULL);
346 assert(sepa->
freq >= -1);
348 assert(0.0 <= bounddist && bounddist <= 1.0);
350 assert(set->scip !=
NULL);
351 assert(stat !=
NULL);
353 assert(result !=
NULL);
355 if( sepa->sepaexeclp !=
NULL 385 SCIP_CALL( sepa->sepaexeclp(set->scip, sepa, result) );
419 SCIPerrorMessage(
"execution method of separator <%s> returned invalid result <%d>\n",
420 sepa->
name, *result);
451 assert(sepa !=
NULL);
452 assert(sepa->
freq >= -1);
454 assert(set->scip !=
NULL);
455 assert(stat !=
NULL);
457 assert(result !=
NULL);
459 if( sepa->sepaexecsol !=
NULL 488 SCIP_CALL( sepa->sepaexecsol(set->scip, sepa, sol, result) );
522 SCIPerrorMessage(
"execution method of separator <%s> returned invalid result <%d>\n",
523 sepa->
name, *result);
547 assert(sepa !=
NULL);
558 assert(sepa !=
NULL);
571 assert(sepa !=
NULL);
573 sepa->sepacopy = sepacopy;
582 assert(sepa !=
NULL);
584 sepa->sepafree = sepafree;
593 assert(sepa !=
NULL);
595 sepa->sepainit = sepainit;
604 assert(sepa !=
NULL);
606 sepa->sepaexit = sepaexit;
615 assert(sepa !=
NULL);
617 sepa->sepainitsol = sepainitsol;
626 assert(sepa !=
NULL);
628 sepa->sepaexitsol = sepaexitsol;
636 assert(sepa !=
NULL);
646 assert(sepa !=
NULL);
656 assert(sepa !=
NULL);
668 assert(sepa !=
NULL);
672 set->sepassorted =
FALSE;
680 assert(sepa !=
NULL);
691 assert(sepa !=
NULL);
701 assert(sepa !=
NULL);
711 assert(sepa !=
NULL);
722 assert(sepa !=
NULL);
733 assert(sepa !=
NULL);
743 assert(sepa !=
NULL);
753 assert(sepa !=
NULL);
763 assert(sepa !=
NULL);
773 assert(sepa !=
NULL);
783 assert(sepa !=
NULL);
793 assert(sepa !=
NULL);
803 assert( sepa !=
NULL );
813 assert( sepa !=
NULL );
823 assert( sepa !=
NULL );
833 assert(sepa !=
NULL);
843 assert(sepa !=
NULL);
853 assert(sepa !=
NULL);
863 assert(sepa !=
NULL);
873 assert(sepa !=
NULL);
883 assert(sepa !=
NULL);
893 assert(sepa !=
NULL);
enum SCIP_Result SCIP_RESULT
void SCIPsepaSetFree(SCIP_SEPA *sepa, SCIP_DECL_SEPAFREE((*sepafree)))
internal methods for separators
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
void SCIPsepaEnableOrDisableClocks(SCIP_SEPA *sepa, SCIP_Bool enable)
SCIP_RETCODE SCIPsepaCopyInclude(SCIP_SEPA *sepa, SCIP_SET *set)
SCIP_PARAMDATA * SCIPparamGetData(SCIP_PARAM *param)
void SCIPsepaIncNAppliedCuts(SCIP_SEPA *sepa)
internal methods for clocks and timing issues
struct SCIP_ParamData SCIP_PARAMDATA
SCIP_Bool SCIPsepaUsesSubscip(SCIP_SEPA *sepa)
SCIP_Longint SCIPsepaGetNDomredsFound(SCIP_SEPA *sepa)
SCIP_Real SCIPsepaGetSetupTime(SCIP_SEPA *sepa)
void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
int SCIPsnprintf(char *t, int len, const char *s,...)
const char * SCIPsepaGetName(SCIP_SEPA *sepa)
enum SCIP_Retcode SCIP_RETCODE
SCIP_Real SCIPsepaGetTime(SCIP_SEPA *sepa)
void SCIPsepaSetExit(SCIP_SEPA *sepa, SCIP_DECL_SEPAEXIT((*sepaexit)))
SCIP_Longint SCIPsepaGetNCutsFound(SCIP_SEPA *sepa)
void SCIPsepaIncNCutsFoundAtNode(SCIP_SEPA *sepa)
SCIP_RETCODE SCIPsetSepaPriority(SCIP *scip, SCIP_SEPA *sepa, int priority)
SCIP_RETCODE SCIPsepaFree(SCIP_SEPA **sepa, SCIP_SET *set)
#define SCIP_DECL_SEPAEXECLP(x)
internal methods for handling parameter settings
void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable)
#define BMSfreeMemory(ptr)
SCIP_DECL_SORTPTRCOMP(SCIPsepaComp)
SCIP_SEPADATA * SCIPsepaGetData(SCIP_SEPA *sepa)
SCIP_RETCODE SCIPsepaInit(SCIP_SEPA *sepa, SCIP_SET *set)
#define SCIP_DECL_SEPACOPY(x)
SCIP_RETCODE SCIPsepaExecSol(SCIP_SEPA *sepa, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, SCIP_SOL *sol, int depth, SCIP_Bool execdelayed, SCIP_RESULT *result)
int SCIPsepaGetFreq(SCIP_SEPA *sepa)
SCIP_RETCODE SCIPsepaInitsol(SCIP_SEPA *sepa, SCIP_SET *set)
#define BMSfreeMemoryArray(ptr)
SCIP_Longint lastsepanode
void SCIPclockReset(SCIP_CLOCK *clck)
static SCIP_DECL_PARAMCHGD(paramChgdSepaPriority)
SCIP_Longint SCIPsepaGetNCutoffs(SCIP_SEPA *sepa)
int SCIPsepaGetNCallsAtNode(SCIP_SEPA *sepa)
int SCIPsepastoreGetNCuts(SCIP_SEPASTORE *sepastore)
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
void SCIPsepaSetData(SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata)
void SCIPsepaSetFreq(SCIP_SEPA *sepa, int freq)
void SCIPsepaSetExitsol(SCIP_SEPA *sepa, SCIP_DECL_SEPAEXITSOL((*sepaexitsol)))
internal methods for global SCIP settings
SCIP_Real SCIPsepaGetMaxbounddist(SCIP_SEPA *sepa)
SCIP_RETCODE SCIPsetAddIntParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
internal methods for storing separated cuts
const char * SCIPsepaGetDesc(SCIP_SEPA *sepa)
#define BMSduplicateMemoryArray(ptr, source, num)
SCIP_Longint nprobboundchgs
SCIP_RETCODE SCIPclockCreate(SCIP_CLOCK **clck, SCIP_CLOCKTYPE clocktype)
void SCIPsepaSetCopy(SCIP_SEPA *sepa, SCIP_DECL_SEPACOPY((*sepacopy)))
SCIP_Longint SCIPsepaGetNCalls(SCIP_SEPA *sepa)
SCIP_Bool SCIPsepaWasLPDelayed(SCIP_SEPA *sepa)
public data structures and miscellaneous methods
void SCIPsepaSetInitsol(SCIP_SEPA *sepa, SCIP_DECL_SEPAINITSOL((*sepainitsol)))
#define SCIP_DECL_SEPAINIT(x)
static const char * paramname[]
SCIP_Longint SCIPsepaGetNConssFound(SCIP_SEPA *sepa)
void SCIPclockFree(SCIP_CLOCK **clck)
SCIP_RETCODE SCIPsepaExecLP(SCIP_SEPA *sepa, SCIP_SET *set, SCIP_STAT *stat, SCIP_SEPASTORE *sepastore, int depth, SCIP_Real bounddist, SCIP_Bool execdelayed, SCIP_RESULT *result)
#define SCIP_DECL_SEPAEXITSOL(x)
#define SCIP_DECL_SEPAEXECSOL(x)
#define SCIP_MAXTREEDEPTH
int SCIPparamGetInt(SCIP_PARAM *param)
void SCIPsepaSetPriority(SCIP_SEPA *sepa, SCIP_SET *set, int priority)
SCIP_Bool SCIPsepaWasSolDelayed(SCIP_SEPA *sepa)
SCIP_RETCODE SCIPsepaExit(SCIP_SEPA *sepa, SCIP_SET *set)
#define SCIP_DECL_SEPAEXIT(x)
#define SCIP_DECL_SEPAINITSOL(x)
public methods for message output
SCIP_Longint ncutsapplied
SCIP_Longint ndomredsfound
SCIP_Bool SCIPsepaIsDelayed(SCIP_SEPA *sepa)
internal methods for problem statistics
datastructures for separators
SCIP_Longint SCIPsepaGetNCutsApplied(SCIP_SEPA *sepa)
#define BMSallocMemory(ptr)
void SCIPsepaIncNCutsFound(SCIP_SEPA *sepa)
void SCIPsepaSetInit(SCIP_SEPA *sepa, SCIP_DECL_SEPAINIT((*sepainit)))
SCIP_Bool SCIPsepaIsInitialized(SCIP_SEPA *sepa)
common defines and data types used in all packages of SCIP
struct BMS_BlkMem BMS_BLKMEM
SCIP_RETCODE SCIPsetAddRealParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPsepaExitsol(SCIP_SEPA *sepa, SCIP_SET *set)
SCIP_RETCODE SCIPsetAddBoolParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_Longint nprobholechgs
SCIP_Longint SCIPsepaGetNCutsFoundAtNode(SCIP_SEPA *sepa)
#define SCIP_DECL_SEPAFREE(x)
int SCIPsepaGetPriority(SCIP_SEPA *sepa)
struct SCIP_SepaData SCIP_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)