82#define EVENTHDLR_NAME "estim"
83#define EVENTHDLR_DESC "event handler for tree size estimation and restarts"
84#define EVENTTYPE_ESTIM (SCIP_EVENTTYPE_NODEDELETE | SCIP_EVENTTYPE_NODEBRANCHED)
101#define RESTARTPOLICY_CHAR_NEVER 'n'
102#define RESTARTPOLICY_CHAR_ALWAYS 'a'
103#define RESTARTPOLICY_CHAR_COMPLETION 'c'
104#define RESTARTPOLICY_CHAR_ESTIMATION 'e'
106#define DES_USETRENDINLEVEL TRUE
109#define TABLE_NAME "estim"
110#define TABLE_DESC "tree size estimations statistics table"
111#define TABLE_POSITION 18500
112#define TABLE_EARLIEST_STAGE SCIP_STAGE_INIT
115#define DISP_NAME "completed"
116#define DISP_DESC "completion of search in percent (based on tree size estimation)"
117#define DISP_HEADER "compl."
119#define DISP_PRIORITY 110000
120#define DISP_POSITION 30100
121#define DISP_STRIPLINE TRUE
123#define INITIALSIZE 100
127#define DES_ALPHA_TREEWEIGHT 0.65
128#define DES_BETA_TREEWEIGHT 0.15
130#define DES_ALPHA_GAP 0.6
131#define DES_BETA_GAP 0.15
133#define DES_ALPHA_LEAFFREQUENCY 0.3
134#define DES_BETA_LEAFFREQUENCY 0.33
136#define DES_ALPHA_SSG 0.6
137#define DES_BETA_SSG 0.15
139#define DES_ALPHA_OPENNODES 0.6
140#define DES_BETA_OPENNODES 0.15
142#define MAX_REGFORESTSIZE 10000000
147#define COMPLETIONTYPE_AUTO 'a'
148#define COMPLETIONTYPE_REGFOREST 'r'
149#define COMPLETIONTYPE_MONOREG 'm'
150#define COMPLETIONTYPE_TREEWEIGHT 'w'
151#define COMPLETIONTYPE_SSG 's'
152#define COMPLETIONTYPE_GAP 'g'
156#define ESTIMMETHOD_COMPL 'c'
157#define ESTIMMETHOD_WBE 'b'
158#define ESTIMMETHOD_ENSMBL 'e'
159#define ESTIMMETHOD_GAP 'g'
160#define ESTIMMETHOD_LFREQ 'l'
161#define ESTIMMETHOD_OPEN 'o'
162#define ESTIMMETHOD_SSG 's'
163#define ESTIMMETHOD_TPROF 't'
164#define ESTIMMETHOD_TREEWEIGHT 'w'
166#define ESTIMMETHODS "bceglostw"
169#define TREEPROFILE_MINSIZE 512
170#define SSG_STARTPRIMBOUND SCIP_INVALID
242#define DEFAULT_USELEAFTS TRUE
243#define DEFAULT_REPORTFREQ -1
244#define DEFAULT_REGFORESTFILENAME "-"
245#define DEFAULT_COEFMONOWEIGHT 0.3667
246#define DEFAULT_COEFMONOSSG 0.6333
247#define DEFAULT_COMPLETIONTYPE COMPLETIONTYPE_AUTO
248#define DEFAULT_ESTIMMETHOD ESTIMMETHOD_TREEWEIGHT
251#define DEFAULT_TREEPROFILE_ENABLED FALSE
252#define DEFAULT_TREEPROFILE_MINNODESPERDEPTH 20.0
253#define DEFAULT_RESTARTPOLICY 'e'
254#define DEFAULT_RESTARTLIMIT 1
255#define DEFAULT_MINNODES 1000L
256#define DEFAULT_COUNTONLYLEAVES FALSE
257#define DEFAULT_RESTARTFACTOR 50.0
258#define DEFAULT_RESTARTNONLINEAR FALSE
259#define DEFAULT_RESTARTACTPRICERS FALSE
260#define DEFAULT_HITCOUNTERLIM 50
261#define DEFAULT_SSG_NMAXSUBTREES -1
263#define DEFAULT_SSG_NMINNODESLASTSPLIT 0L
264#define DEFAULT_SHOWSTATS FALSE
267struct SCIP_EventhdlrData
273 char* regforestfilename;
274 SCIP_Real restartfactor;
275 SCIP_Real weightlastreport;
276 SCIP_Real treeprofile_minnodesperdepth;
277 SCIP_Real coefmonoweight;
278 SCIP_Real coefmonossg;
279 SCIP_Longint minnodes;
281 int nrestartsperformed;
282 int restarthitcounter;
287 char restartpolicyparam;
291 char completiontypeparam;
293 SCIP_Bool countonlyleaves;
295 SCIP_Bool treeprofile_enabled;
296 SCIP_Bool treeisbinary;
297 SCIP_Bool restartnonlinear;
298 SCIP_Bool restartactpricers;
330#define DECL_TIMESERIESUPDATE(x) SCIP_RETCODE x (\
333 TREEDATA* treedata, \
391 else if( num >= 1
e+20 )
409 if( *regforest ==
NULL )
429 SCIP_Real value = 0.0;
501 SCIPerrorMessage(
"Could not read first line of regression file '%s'\n", filename);
511 SCIPerrorMessage(
"Could not extract tree information from buffer line [%s]\n", buffer);
525 if( dim <= 0 || ntrees <= 0 || size <= 0 )
528 SCIPerrorMessage(
"Cannot create regression tree with negative size, dimension, or number of trees\n");
631 dest->maxdepth =
src->maxdepth;
632 dest->lastfulldepth =
src->lastfulldepth;
633 dest->minwaistdepth =
src->minwaistdepth;
634 dest->maxwaistdepth =
src->maxwaistdepth;
696 (*treeprofile)->profile =
NULL;
697 (*treeprofile)->profilesize = 0;
703 (*treeprofile)->lastestimate = -1.0;
718 if( *treeprofile ==
NULL )
739 SCIP_Longint maxnodes;
744 if( treeprofile ==
NULL )
761 nbits = 8*
sizeof(
unsigned int);
811 if( treeprofile ==
NULL )
948 (*ssg)->nsubtrees = 0;
968 if( (*ssg)->nodes2info !=
NULL )
1098 for( t = 0; t < 3; ++t )
1105 for( n = 0; n <
nnodes; ++n )
1125 SCIP_Real lowerbound
1149 gap =
MIN(gap, 1.0);
1248 if( nchildren == 0 )
1273 for( n = 0; n < nchildren; ++n )
1291#ifdef SCIP_DISABLED_CODE
1300 SCIP_Real* lowerbounds;
1335 for( t = 0; t < 3; ++t )
1343 SCIP_Real lowerbound;
1454 SCIP_Longint nsolvednodes
1491 SCIPdebugMsg(
scip,
"Keep split into %d subtrees because new split into %d subtrees exceeds limit %d\n",
1521 if( nchildren == 0 )
1542 treedata->
nopen = 1;
1577 if( *treedata ==
NULL )
1600 if( nchildren == 0 )
1608 treedata->
nnodes += nchildren;
1609 treedata->
nopen += nchildren;
1648 "weight: %.4Lf, ssg %.4f",
1665 SCIP_Real initialvalue
1735 timeseries->
nvals = 0;
1736 timeseries->
nobs = 0
L;
1749 SCIP_Real targetvalue,
1750 SCIP_Real initialvalue,
1761 assert(beta >= 0.0 && beta <= 1);
1855 if( timeseries->
nobs == 0
L )
1884 SCIP_Real estimation
1916 des = ×eries->
des;
1920 for(
i = 0;
i < timeseries->
nvals / 2; ++
i )
1922 timeseries->
vals[
i] = timeseries->
vals[2 *
i];
1948 assert(timeseries->timeseriesupdate !=
NULL);
1949 SCIP_CALL( timeseries->timeseriesupdate(
scip, timeseries, treedata, &value) );
1987 return timeseries->
name;
2005 tss[t]->useleafts = eventhdlrdata->useleafts;
2082 treedata = eventhdlrdata->treedata;
2085 if( treedata->
weight <= 0.3 )
2092 else if( treedata->
weight <= 0.6 )
2125 return (SCIP_Real)treedata->
nnodes;
2137 SCIP_Real values[9];
2142 treedata = eventhdlrdata->treedata;
2157 SCIP_Bool
useweight = eventhdlrdata->treeisbinary;
2160 if( eventhdlrdata->regforest !=
NULL )
2193 eventhdlrdata->coefmonossg * (1.0 - treedata->
ssg->
value);
2243 SCIP_Real dualbound;
2274 *value =
MAX(*value, 0.0);
2363 switch (eventhdlrdata->restartpolicyparam)
2374 SCIPerrorMessage(
"Unknown restart policy %c\n", eventhdlrdata->restartpolicyparam);
2399 if( eventhdlrdata->restartlimit != -1 && eventhdlrdata->nrestartsperformed >= eventhdlrdata->restartlimit )
2403 if( eventhdlrdata->countonlyleaves )
2404 nnodes = eventhdlrdata->treedata->nleaves;
2406 nnodes = eventhdlrdata->treedata->nvisited;
2430 "Completion %.5f less than restart threshold %.5f\n",
2431 completion, 1.0 / eventhdlrdata->restartfactor);
2447 SCIP_Real estimation;
2451 if( estimation < 0.0 )
2455 "Estimation %g is still unavailable\n",
2463 if( estimation > eventhdlrdata->treedata->nnodes * eventhdlrdata->restartfactor )
2467 "Estimation %g exceeds number of estimation tree nodes %" SCIP_LONGINT_FORMAT " by a factor of %.1f\n",
2468 estimation, eventhdlrdata->treedata->nnodes, estimation / eventhdlrdata->treedata->nnodes);
2525#ifdef SCIP_MORE_DEBUG
2527 "Update of time series '%s', current value %.4f (%" SCIP_LONGINT_FORMAT " observations)\n",
2544 TREEDATA* treedata = eventhdlrdata->treedata;
2571 "weight: %.4Lf completed %.4f\n",
2584 "estim",
"value",
"trend",
"resolution",
"smooth");
2593 "-",
"-",
"-",
"-");
2667 eventhdlrdata->lastrestartrun = 0;
2668 eventhdlrdata->nrestartsperformed = 0;
2696 eventhdlrdata->restarthitcounter = 0;
2697 eventhdlrdata->weightlastreport = 0.0;
2698 eventhdlrdata->nreports = 0;
2707 if( eventhdlrdata->treeprofile_enabled )
2712 eventhdlrdata->treeisbinary =
TRUE;
2726 if( eventhdlrdata->treeprofile !=
NULL )
2750 treedata = eventhdlrdata->treedata;
2771 if( nchildren != 2 )
2772 eventhdlrdata->treeisbinary =
FALSE;
2787 (eventhdlrdata->reportfreq == 0
2788 || treedata->
weight >= eventhdlrdata->weightlastreport + 1.0 / (SCIP_Real)eventhdlrdata->reportfreq) )
2792 if( eventhdlrdata->reportfreq > 0 )
2793 eventhdlrdata->weightlastreport = 1 / (
SCIP_Real)eventhdlrdata->reportfreq *
SCIPfloor(
scip, ((SCIP_Real)treedata->
weight * eventhdlrdata->reportfreq));
2810 eventhdlrdata->restarthitcounter++;
2812 if( eventhdlrdata->restarthitcounter >= eventhdlrdata->hitcounterlim )
2817 eventhdlrdata->nrestartsperformed++;
2820 "Restart triggered after %d consecutive estimations that the remaining tree will be large\n",
2821 eventhdlrdata->restarthitcounter);
2831 eventhdlrdata->restarthitcounter = 0;
2851 if( eventhdlrdata->showstats )
2874 treedata = eventhdlrdata->treedata;
2920 "tree size estimation method: (c)ompletion, (e)nsemble, "
2921 "time series forecasts on either (g)ap, (l)eaf frequency, (o)open nodes, tree (w)eight, (s)sg, "
2922 "or (t)ree profile or w(b)e",
2935 "factor by which the estimated number of nodes should exceed the current number of nodes",
2939 "whether to apply a restart when nonlinear constraints are present",
2943 "whether to apply a restart when active pricers are used",
2947 "coefficient of tree weight in monotone approximation of search completion",
2951 "coefficient of 1 - SSG in monotone approximation of search completion",
2954 SCIP_CALL(
SCIPaddIntParam(
scip,
"estimation/restarts/hitcounterlim",
"limit on the number of successive samples to really trigger a restart",
2958 "report frequency on estimation: -1: never, 0:always, k >= 1: k times evenly during search",
2965 "approximation of search tree completion: (a)uto, (g)ap, tree (w)eight, (m)onotone regression, (r)egression forest, (s)sg",
2969 "should the event handler collect data?",
2973 "minimum average number of nodes at each depth before producing estimations",
2977 "use leaf nodes as basic observations for time series, or all nodes?",
2981 "should statistics be shown at the end?",
2986 "the maximum number of individual SSG subtrees; -1: no limit",
2990 "minimum number of nodes to process between two consecutive SSG splits",
3029 if( eventhdlr ==
NULL )
3038 switch (eventhdlrdata->estimmethod)
3077 SCIPerrorMessage(
"Unknown estimation '%c' method specified, should be one of [%s]\n",
#define SCIP_ALLOC_TERMINATE(retcode, x, TERM)
#define SCIP_CALL_ABORT(x)
#define SCIP_CALL_TERMINATE(retcode, x, TERM)
static void SCIPregForestFree(SCIP_REGFOREST **regforest)
static char * timeSeriesGetName(TIMESERIES *timeseries)
static SCIP_RETCODE subtreeSumGapComputeFromScratchEfficiently(SCIP *scip, SUBTREESUMGAP *ssg, SCIP_Bool updatescaling)
enum RestartPolicy RESTARTPOLICY
#define DEFAULT_COEFMONOWEIGHT
static SCIP_RETCODE subtreeSumGapSplit(SCIP *scip, SUBTREESUMGAP *ssg, SCIP_Bool addfocusnode)
#define DES_BETA_TREEWEIGHT
static void freeTreeProfile(SCIP *scip, TREEPROFILE **treeprofile)
static SCIP_RETCODE updateTreeData(SCIP *scip, TREEDATA *treedata, SCIP_NODE *node, int nchildren)
#define DEFAULT_SHOWSTATS
#define DEFAULT_RESTARTLIMIT
static SCIP_Real getEnsembleEstimation(SCIP_EVENTHDLRDATA *eventhdlrdata)
static SCIP_Bool shouldApplyRestart(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define DES_ALPHA_TREEWEIGHT
#define DES_ALPHA_OPENNODES
#define MAX_REGFORESTSIZE
#define RESTARTPOLICY_CHAR_ALWAYS
#define RESTARTPOLICY_CHAR_NEVER
static SCIP_Bool isRestartApplicable(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define DEFAULT_REPORTFREQ
static SCIP_Real timeSeriesGetSmoothEstimation(TIMESERIES *timeseries)
static SCIP_RETCODE subtreeSumGapCreate(SCIP *scip, SUBTREESUMGAP **ssg)
static void doubleExpSmoothUpdate(DOUBLEEXPSMOOTH *des, SCIP_Real xnew)
static void copyTreeProfileStats(TREEPROFILESTATS *dest, TREEPROFILESTATS *src)
#define DEFAULT_SSG_NMAXSUBTREES
#define DES_BETA_LEAFFREQUENCY
#define DEFAULT_SSG_NMINNODESLASTSPLIT
#define COMPLETIONTYPE_REGFOREST
#define DES_USETRENDINLEVEL
#define COMPLETIONTYPE_MONOREG
#define ESTIMMETHOD_TREEWEIGHT
#define COMPLETIONTYPE_TREEWEIGHT
#define ESTIMMETHOD_LFREQ
static SCIP_RETCODE timeSeriesUpdate(SCIP *scip, TIMESERIES *timeseries, TREEDATA *treedata, SCIP_Bool isleaf)
#define DEFAULT_TREEPROFILE_ENABLED
static SCIP_Real SCIPregForestPredict(SCIP_REGFOREST *regforest, SCIP_Real *datapoint)
static void freeTreeData(SCIP *scip, TREEDATA **treedata)
static SCIP_RETCODE resetTreeData(SCIP *scip, TREEDATA *treedata)
static SCIP_Real timeSeriesEstimate(TIMESERIES *timeseries, TREEDATA *treedata)
static SCIP_RETCODE includeTimeseries(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define ESTIMMETHOD_ENSMBL
#define COMPLETIONTYPE_GAP
#define COMPLETIONTYPE_SSG
static void timeSeriesUpdateSmoothEstimation(TIMESERIES *timeseries, SCIP_Real estimation)
#define DEFAULT_COUNTONLYLEAVES
static SCIP_RETCODE subtreeSumGapRemoveNode(SCIP *scip, SUBTREESUMGAP *ssg, SCIP_NODE *node)
static void timeSeriesResample(TIMESERIES *timeseries)
static SCIP_RETCODE subtreeSumGapReset(SCIP *scip, SUBTREESUMGAP *ssg)
static SCIP_RETCODE updateTreeProfile(SCIP *scip, TREEPROFILE *treeprofile, SCIP_NODE *node)
static SCIP_RETCODE createTreeData(SCIP *scip, TREEDATA **treedata)
static SCIP_RETCODE getEstimCompletion(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_Real *estim)
#define DEFAULT_HITCOUNTERLIM
#define DES_BETA_OPENNODES
static SCIP_Real calcGap(SCIP *scip, SCIP_Real lowerbound)
static SCIP_RETCODE timeSeriesCreate(SCIP *scip, TIMESERIES **timeseries, const char *name, SCIP_Real targetvalue, SCIP_Real initialvalue, SCIP_Real alpha, SCIP_Real beta,)
#define DEFAULT_RESTARTACTPRICERS
SCIP_Real SCIPgetTreesizeEstimation(SCIP *scip)
static void timeSeriesFree(SCIP *scip, TIMESERIES **timeseries)
#define DEFAULT_RESTARTFACTOR
#define DEFAULT_USELEAFTS
SCIP_RETCODE SCIPincludeEventHdlrEstim(SCIP *scip)
#define DES_ALPHA_LEAFFREQUENCY
static SCIP_RETCODE subtreeSumGapInsertChildren(SCIP *scip, SUBTREESUMGAP *ssg)
static SCIP_Real timeSeriesGetValue(TIMESERIES *timeseries)
@ RESTARTPOLICY_COMPLETION
@ RESTARTPOLICY_ESTIMATION
static SCIP_Bool shouldApplyRestartCompletion(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
static SCIP_RETCODE extendMemoryTreeProfile(SCIP *scip, TREEPROFILE *treeprofile, int mindepth)
static void subtreeSumGapFree(SCIP *scip, SUBTREESUMGAP **ssg)
#define DECL_TIMESERIESUPDATE(x)
static void timeSeriesReset(TIMESERIES *timeseries)
static char * printReport(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, char *strbuf, int reportnum)
#define RESTARTPOLICY_CHAR_COMPLETION
#define TABLE_EARLIEST_STAGE
#define ESTIMMETHOD_TPROF
static void doubleExpSmoothInit(DOUBLEEXPSMOOTH *des, SCIP_Real x1)
#define DEFAULT_COEFMONOSSG
static SCIP_Bool isEqualTreeProfileStats(TREEPROFILESTATS *stats, TREEPROFILESTATS *other)
static int timeSeriesGetResolution(TIMESERIES *timeseries)
static SCIP_RETCODE createTreeProfile(SCIP *scip, TREEPROFILE **treeprofile)
static void subtreeSumGapDelSubtrees(SCIP *scip, SUBTREESUMGAP *ssg)
static SCIP_RETCODE updateTimeseries(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, TREEDATA *treedata, SCIP_Bool isleaf)
static void resetTreeProfileStats(TREEPROFILESTATS *treeprofilestats)
static SCIP_Real treeDataGetWbe(TREEDATA *treedata)
static void resetTimeSeries(SCIP_EVENTHDLRDATA *eventhdlrdata)
#define DEFAULT_COMPLETIONTYPE
static SCIP_RETCODE SCIPregForestFromFile(SCIP_REGFOREST **regforest, const char *filename)
static RESTARTPOLICY getRestartPolicy(SCIP_EVENTHDLRDATA *eventhdlrdata)
static SCIP_Real doubleExpSmoothGetTrend(DOUBLEEXPSMOOTH *des)
static void doubleExpSmoothReset(DOUBLEEXPSMOOTH *des, SCIP_Real initialvalue)
static char * real2String(SCIP_Real num, char *buf, int digits)
static SCIP_RETCODE subtreeSumGapUpdate(SCIP *scip, SUBTREESUMGAP *ssg, SCIP_NODE *node, int nchildren, SCIP_Longint nsolvednodes)
static void freeTimeSeries(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
static SCIP_Real predictTotalSizeTreeProfile(SCIP *scip, TREEPROFILE *treeprofile, SCIP_Real minnodesperdepth)
#define ESTIMMETHOD_COMPL
#define TREEPROFILE_MINSIZE
#define COMPLETIONTYPE_AUTO
static SCIP_RETCODE subtreeSumGapStoreNode(SCIP *scip, SUBTREESUMGAP *ssg, SCIP_NODE *node, int subtreeidx)
static SCIP_RETCODE getSearchCompletion(SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_Real *completed)
#define RESTARTPOLICY_CHAR_ESTIMATION
static SCIP_Real timeSeriesGetTargetValue(TIMESERIES *timeseries)
#define DEFAULT_ESTIMMETHOD
#define SSG_STARTPRIMBOUND
#define DEFAULT_RESTARTNONLINEAR
#define DEFAULT_RESTARTPOLICY
static SCIP_Bool shouldApplyRestartEstimation(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define DEFAULT_TREEPROFILE_MINNODESPERDEPTH
#define DEFAULT_REGFORESTFILENAME
event handler for tree size estimation and restarts
SCIP_FILE * SCIPfopen(const char *path, const char *mode)
int SCIPfeof(SCIP_FILE *stream)
int SCIPfclose(SCIP_FILE *fp)
char * SCIPfgets(char *s, int size, SCIP_FILE *stream)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *image)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapRemoveAll(SCIP_HASHMAP *hashmap)
SCIP_RETCODE SCIPhashmapRemove(SCIP_HASHMAP *hashmap, void *origin)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_RETCODE SCIPaddLongintParam(SCIP *scip, const char *name, const char *desc, SCIP_Longint *valueptr, SCIP_Bool isadvanced, SCIP_Longint defaultvalue, SCIP_Longint minvalue, SCIP_Longint maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddCharParam(SCIP *scip, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddStringParam(SCIP *scip, const char *name, const char *desc, char **valueptr, SCIP_Bool isadvanced, const char *defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, 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 SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
void ** SCIPpqueueElems(SCIP_PQUEUE *pqueue)
void SCIPpqueueDelPos(SCIP_PQUEUE *pqueue, int pos)
SCIP_RETCODE SCIPpqueueCreate(SCIP_PQUEUE **pqueue, int initsize, SCIP_Real sizefac, SCIP_DECL_SORTPTRCOMP((*ptrcomp)),)
void SCIPpqueueFree(SCIP_PQUEUE **pqueue)
SCIP_RETCODE SCIPpqueueInsert(SCIP_PQUEUE *pqueue, void *elem)
int SCIPpqueueNElems(SCIP_PQUEUE *pqueue)
void * SCIPpqueueFirst(SCIP_PQUEUE *pqueue)
const char * SCIPdispGetName(SCIP_DISP *disp)
SCIP_RETCODE SCIPincludeDisp(SCIP *scip, const char *name, const char *desc, const char *header, SCIP_DISPSTATUS dispstatus, SCIP_DECL_DISPCOPY((*dispcopy)), SCIP_DECL_DISPFREE((*dispfree)), SCIP_DECL_DISPINIT((*dispinit)), SCIP_DECL_DISPEXIT((*dispexit)), SCIP_DECL_DISPINITSOL((*dispinitsol)), SCIP_DECL_DISPEXITSOL((*dispexitsol)), SCIP_DECL_DISPOUTPUT((*dispoutput)), SCIP_DISPDATA *dispdata, int width, int priority, int position, SCIP_Bool stripline)
SCIP_RETCODE SCIPsetEventhdlrFree(SCIP *scip, SCIP_EVENTHDLR *eventhdlr,)
SCIP_RETCODE SCIPsetEventhdlrInitsol(SCIP *scip, SCIP_EVENTHDLR *eventhdlr,)
SCIP_RETCODE SCIPsetEventhdlrCopy(SCIP *scip, SCIP_EVENTHDLR *eventhdlr,)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_RETCODE SCIPsetEventhdlrExit(SCIP *scip, SCIP_EVENTHDLR *eventhdlr,)
SCIP_EVENTHDLR * SCIPfindEventhdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetEventhdlrExitsol(SCIP *scip, SCIP_EVENTHDLR *eventhdlr,)
SCIP_EVENTHDLRDATA * SCIPeventhdlrGetData(SCIP_EVENTHDLR *eventhdlr)
SCIP_RETCODE SCIPsetEventhdlrInit(SCIP *scip, SCIP_EVENTHDLR *eventhdlr,)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_NODE * SCIPeventGetNode(SCIP_EVENT *event)
SCIP_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPreallocMemoryArray(scip, ptr, newnum)
#define SCIPallocMemoryArray(scip, ptr, num)
#define SCIPallocClearBlockMemoryArray(scip, ptr, num)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPallocClearMemoryArray(scip, ptr, num)
#define SCIPallocMemory(scip, ptr)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPfreeMemoryArray(scip, ptr)
#define SCIPfreeMemory(scip, ptr)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
SCIP_NODETYPE SCIPnodeGetType(SCIP_NODE *node)
SCIP_Real SCIPnodeGetLowerbound(SCIP_NODE *node)
SCIP_Longint SCIPnodeGetNumber(SCIP_NODE *node)
SCIP_NODE * SCIPnodeGetParent(SCIP_NODE *node)
int SCIPnodeGetDepth(SCIP_NODE *node)
int SCIPgetNActivePricers(SCIP *scip)
SCIP_Real SCIPretransformObj(SCIP *scip, SCIP_Real obj)
SCIP_RETCODE SCIPrestartSolve(SCIP *scip)
SCIP_Bool SCIPisInRestart(SCIP *scip)
SCIP_Real SCIPgetPrimalbound(SCIP *scip)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Real SCIPgetDualbound(SCIP *scip)
SCIP_Real SCIPgetLowerbound(SCIP *scip)
int SCIPgetNRuns(SCIP *scip)
SCIP_RETCODE SCIPincludeTable(SCIP *scip, const char *name, const char *desc, SCIP_Bool active, SCIP_DECL_TABLECOPY((*tablecopy)), SCIP_DECL_TABLEFREE((*tablefree)), SCIP_DECL_TABLEINIT((*tableinit)), SCIP_DECL_TABLEEXIT((*tableexit)), SCIP_DECL_TABLEINITSOL((*tableinitsol)), SCIP_DECL_TABLEEXITSOL((*tableexitsol)), SCIP_DECL_TABLEOUTPUT((*tableoutput)), SCIP_TABLEDATA *tabledata, int position, SCIP_STAGE earlieststage)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
int SCIPgetNSiblings(SCIP *scip)
int SCIPgetNChildren(SCIP *scip)
SCIP_RETCODE SCIPgetOpenNodesData(SCIP *scip, SCIP_NODE ***leaves, SCIP_NODE ***children, SCIP_NODE ***siblings, int *nleaves, int *nchildren, int *nsiblings)
SCIP_RETCODE SCIPgetChildren(SCIP *scip, SCIP_NODE ***children, int *nchildren)
SCIP_NODE * SCIPgetFocusNode(SCIP *scip)
int SCIPgetNLeaves(SCIP *scip)
SCIP_Bool SCIPwasNodeLastBranchParent(SCIP *scip, SCIP_NODE *node)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_Bool SCIPstrToRealValue(const char *str, SCIP_Real *value, char **endptr)
assert(minobj< SCIPgetCutoffbound(scip))
memory allocation routines
#define BMSfreeMemory(ptr)
#define BMSduplicateMemoryArray(ptr, source, num)
#define BMSclearMemory(ptr)
#define BMSallocMemoryArray(ptr, num)
#define BMSfreeMemoryArray(ptr)
#define BMSclearMemoryArray(ptr, num)
#define BMSfreeMemoryArrayNull(ptr)
#define BMSallocMemory(ptr)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
propagator for symmetry handling
public methods for displaying runtime statistics
public methods for managing events
wrapper functions to map file i/o to standard or zlib file i/o
struct SCIP_File SCIP_FILE
public methods for message output
public data structures and miscellaneous methods
public methods for branch and bound tree
public methods for display handler plugins
public methods for event handler plugins and event handlers
public methods for memory management
public methods for message handling
public methods for nonlinear relaxation
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for variable pricer plugins
public methods for solutions
public methods for querying solving statistics
public methods for statistics table plugins
public methods for timing
public methods for the branch-and-bound tree
SCIP_Bool usetrendinlevel
SCIP_Longint nodelastsplit
SCIP_PQUEUE ** subtreepqueues
SCIP_HASHMAP * nodes2info
SCIP_Longint nminnodeslastsplit
DECL_TIMESERIESUPDATE((*timeseriesupdate))
SCIP_Real smoothestimation
TREEPROFILESTATS lastestimatestats
type definitions for displaying runtime statistics
#define SCIP_DECL_DISPOUTPUT(x)
type definitions for managing events
#define SCIP_DECL_EVENTINITSOL(x)
#define SCIP_DECL_EVENTEXIT(x)
struct SCIP_EventhdlrData SCIP_EVENTHDLRDATA
#define SCIP_DECL_EVENTEXEC(x)
#define SCIP_EVENTTYPE_NODEBRANCHED
#define SCIP_DECL_EVENTCOPY(x)
#define SCIP_DECL_EVENTINIT(x)
#define SCIP_DECL_EVENTFREE(x)
#define SCIP_DECL_EVENTEXITSOL(x)
#define SCIP_EVENTTYPE_NODEDELETE
type definitions for message output methods
type definitions for miscellaneous datastructures
#define SCIP_DECL_PQUEUEELEMCHGPOS(x)
#define SCIP_DECL_SORTPTRCOMP(x)
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
type definitions for problem statistics
type definitions for displaying statistics tables
#define SCIP_DECL_TABLEOUTPUT(x)