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?",
173 &(*sepa)->delay,
TRUE, delay, NULL, NULL) );
176 (void)
SCIPsnprintf(paramdesc,
SCIP_MAXSTRLEN,
"base for exponential increase of frequency at which separator <%s> is called (1: call at each multiple of frequency)", name);
178 &(*sepa)->expbackoff,
TRUE, 4, 1, 100, NULL, NULL) );
189 assert(sepa != NULL);
190 assert(*sepa != NULL);
191 assert(!(*sepa)->initialized);
195 if( (*sepa)->sepafree != NULL )
197 SCIP_CALL( (*sepa)->sepafree(set->scip, *sepa) );
215 assert(sepa != NULL);
224 if( set->misc_resetstat )
242 if( sepa->sepainit != NULL )
247 SCIP_CALL( sepa->sepainit(set->scip, sepa) );
263 assert(sepa != NULL);
272 if( sepa->sepaexit != NULL )
277 SCIP_CALL( sepa->sepaexit(set->scip, sepa) );
293 assert(sepa != NULL);
300 if( sepa->sepainitsol != NULL )
305 SCIP_CALL( sepa->sepainitsol(set->scip, sepa) );
320 assert(sepa != NULL);
324 if( sepa->sepaexitsol != NULL )
329 SCIP_CALL( sepa->sepaexitsol(set->scip, sepa) );
351 assert(sepa != NULL);
352 assert(sepa->
freq >= -1);
354 assert(0.0 <= bounddist && bounddist <= 1.0);
356 assert(set->scip != NULL);
357 assert(stat != NULL);
359 assert(result != NULL);
362 ( (depth == 0 && sepa->
freq != -1) ||
363 (sepa->
freq > 0 && depth % sepa->
freq == 0 &&
394 SCIP_CALL( sepa->sepaexeclp(set->scip, sepa, result, allowlocal) );
428 SCIPerrorMessage(
"execution method of separator <%s> returned invalid result <%d>\n",
429 sepa->
name, *result);
461 assert(sepa != NULL);
462 assert(sepa->
freq >= -1);
464 assert(set->scip != NULL);
465 assert(stat != NULL);
467 assert(result != NULL);
469 if( sepa->sepaexecsol != NULL &&
470 ( (depth == 0 && sepa->
freq != -1) ||
471 (sepa->
freq > 0 && depth % sepa->
freq == 0 &&
502 SCIP_CALL( sepa->sepaexecsol(set->scip, sepa, sol, result, allowlocal) );
536 SCIPerrorMessage(
"execution method of separator <%s> returned invalid result <%d>\n",
537 sepa->
name, *result);
561 assert(sepa != NULL);
572 assert(sepa != NULL);
585 assert(sepa != NULL);
587 sepa->sepacopy = sepacopy;
596 assert(sepa != NULL);
598 sepa->sepafree = sepafree;
607 assert(sepa != NULL);
609 sepa->sepainit = sepainit;
618 assert(sepa != NULL);
620 sepa->sepaexit = sepaexit;
629 assert(sepa != NULL);
631 sepa->sepainitsol = sepainitsol;
640 assert(sepa != NULL);
642 sepa->sepaexitsol = sepaexitsol;
650 assert(sepa != NULL);
660 assert(sepa != NULL);
670 assert(sepa != NULL);
682 assert(sepa != NULL);
686 set->sepassorted =
FALSE;
694 assert(sepa != NULL);
705 assert(sepa != NULL);
715 assert(sepa != NULL);
725 assert(sepa != NULL);
736 assert(sepa != NULL);
747 assert(sepa != NULL);
757 assert(sepa != NULL);
767 assert(sepa != NULL);
777 assert(sepa != NULL);
787 assert(sepa != NULL);
797 assert(sepa != NULL);
807 assert(sepa != NULL);
817 assert( sepa != NULL );
827 assert( sepa != NULL );
837 assert( sepa != NULL );
847 assert(sepa != NULL);
857 assert(sepa != NULL);
867 assert(sepa != NULL);
877 assert(sepa != NULL);
887 assert(sepa != NULL);
897 assert(sepa != NULL);
907 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_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_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)
int SCIPsepaGetFreq(SCIP_SEPA *sepa)
SCIP_RETCODE SCIPsepaInitsol(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)
#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)
SCIP_Bool SCIPsetIsIntegral(SCIP_SET *set, SCIP_Real val)
public data structures and miscellaneous methods
void SCIPsepaSetInitsol(SCIP_SEPA *sepa, SCIP_DECL_SEPAINITSOL((*sepainitsol)))
#define SCIP_DECL_SEPAINIT(x)
SCIP_Longint SCIPsepaGetNConssFound(SCIP_SEPA *sepa)
void SCIPclockFree(SCIP_CLOCK **clck)
#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)