SCIP_EventhdlrData
273 char* regforestfilename;
281 intnrestartsperformed;
282 intrestarthitcounter;
287 charrestartpolicyparam;
291 charcompletiontypeparam;
330#define DECL_TIMESERIESUPDATE(x) SCIP_RETCODE x (\ 333 TREEDATA* treedata, \ 391 else if( num >= 1e+20 )
407assert(regforest !=
NULL);
409 if( *regforest ==
NULL)
411regforestptr = *regforest;
431assert(regforest !=
NULL);
432assert(datapoint !=
NULL);
437 for( treeidx = 0; treeidx < regforest->
ntrees; ++treeidx )
439 inttreepos = regforest->
nbegin[treeidx];
440 int* childtree = &(regforest->
child[2 * treepos]);
441 int* splitidxtree = &(regforest->
splitidx[treepos]);
448 while( splitidxtree[pos] != - 1 )
452assert(splitidxtree[pos] < regforest->
dim);
454goright = (datapoint[splitidxtree[pos]] > valuetree[pos]) ? 1 : 0;
455pos = childtree[2 * pos + goright];
458value += valuetree[pos];
472 const char* filename
498 if(
SCIPfgets(buffer, (
int)
sizeof(buffer), file) ==
NULL)
501 SCIPerrorMessage(
"Could not read first line of regression file '%s'\n", filename);
506sscanret = sscanf(buffer, firstlineformat, &ntrees, &dim, &size);
511 SCIPerrorMessage(
"Could not extract tree information from buffer line [%s]\n", buffer);
515 SCIPdebugMessage(
"Read ntrees=%d, dim=%d, size=%d (return value %d)\n", ntrees, dim, size, sscanret);
525 if( dim <= 0 || ntrees <= 0 || size <= 0 )
528 SCIPerrorMessage(
"Cannot create regression tree with negative size, dimension, or number of trees\n");
535regforestptr = *regforest;
543regforestptr->
dim= dim;
544regforestptr->
size= size;
545regforestptr->
ntrees= ntrees;
554 while( !
SCIPfeof(file) && !error )
560 if(
SCIPfgets(buffer, (
int)
sizeof(buffer), file) ==
NULL)
563sscanret = sscanf(buffer, dataformat,
565®forestptr->
child[2 * pos],
566®forestptr->
child[2 * pos + 1],
581assert(treepos < regforestptr->ntrees);
583regforestptr->
nbegin[treepos++] = pos;
612assert(stats !=
NULL);
613assert(other !=
NULL);
628assert(dest !=
NULL);
629assert(src !=
NULL);
643assert(treeprofilestats !=
NULL);
657 if( mindepth < treeprofile->profilesize )
692assert(treeprofile !=
NULL);
696(*treeprofile)->profile =
NULL;
697(*treeprofile)->profilesize = 0;
703(*treeprofile)->lastestimate = -1.0;
716assert(treeprofile !=
NULL);
718 if( *treeprofile ==
NULL)
725*treeprofile =
NULL;
742assert(node !=
NULL);
744 if( treeprofile ==
NULL)
748assert(nodedepth >= 0);
756nodedepthcnt = ++treeprofile->
profile[nodedepth];
761nbits = 8*
sizeof(
unsignedint);
763 if( (
unsigned int)nodedepth < nbits && nodedepthcnt == (1U << nodedepth) )
778 if( nodedepthcnt > maxnodes )
784 else if( nodedepthcnt == maxnodes )
811 if( treeprofile ==
NULL)
837estimate += growthfac;
838growthfac *= gamma_d;
842 for( ; d < waist; ++d )
846assert(1.0 <= gamma_d && gamma_d <= 2.0);
847estimate += growthfac;
848growthfac *= gamma_d;
855assert(0.0 <= gamma_d && gamma_d <= 1.0);
857estimate += growthfac;
858growthfac *= gamma_d;
889assert(pqueue !=
NULL);
896assert(nodeinfo !=
NULL);
916assert(ssg !=
NULL);
941assert(ssg !=
NULL);
948(*ssg)->nsubtrees = 0;
968 if( (*ssg)->nodes2info !=
NULL)
1000assert(oldpos == -1 || oldpos == nodeinfo->
pos);
1001nodeinfo->
pos= newpos;
1016assert(ssg !=
NULL);
1017assert(node !=
NULL);
1023nodeinfo->
node= node;
1025nodeinfo->
pos= -1;
1036assert(subtreeidx >= 0);
1037assert(subtreeidx < ssg->nsubtrees);
1046assert(0 <= nodeinfo->
pos);
1068assert(ssg !=
NULL);
1073nnewsubtrees = nopennodes[0] + nopennodes[1] + nopennodes[2] + (addfocusnode ? 1 : 0);
1098 for( t = 0; t < 3; ++t )
1101 int nnodes= nopennodes[t];
1105 for( n = 0; n <
nnodes; ++n )
1149gap =
MIN(gap, 1.0);
1173 if( nodeinfo ==
NULL)
1181 if( nodeinfo ==
NULL)
1188assert(pqueue !=
NULL);
1191pos = nodeinfo->
pos;
1206assert(nodeinfofirst ==
NULL|| subtreeidx == nodeinfofirst->
subtreeidx);
1237 intparentnodelabel;
1241assert(ssg !=
NULL);
1248 if( nchildren == 0 )
1258parentnode = focusnode;
1267parentnode = focusnode;
1270parentnodelabel = parentnodeinfo->
subtreeidx;
1273 for( n = 0; n < nchildren; ++n )
1291#ifdef SCIP_DISABLED_CODE 1328 for( l = 0; l < ssg->
nsubtrees; ++l )
1335 for( t = 0; t < 3; ++t )
1339 for( n = 0; n < nopennodes[t]; ++n )
1349assert(label >= 0 && label < ssg->nsubtrees);
1350lowerbounds[label] =
MIN(lowerbounds[label], lowerbound);
1356 for( l = 0; l < ssg->
nsubtrees; ++l )
1370subtreegap =
MIN(subtreegap, 1.0);
1372gapsum += subtreegap;
1376 if( updatescaling )
1417 for( l = 0; l < ssg->
nsubtrees; ++l )
1432gapsum += subtreegap;
1436 if( updatescaling )
1479((ssg->
nmaxsubtrees== -1 || nnewsubtrees <= ssg->nmaxsubtrees) &&
1491 SCIPdebugMsg(
scip,
"Keep split into %d subtrees because new split into %d subtrees exceeds limit %d\n",
1501 if( insertchildren )
1509updatescaling =
TRUE;
1515 else if( insertchildren )
1521 if( nchildren == 0 )
1542treedata->
nopen= 1;
1556assert(treedata !=
NULL);
1577 if( *treedata ==
NULL)
1595assert(node !=
NULL);
1598treedata->
nopen--;
1600 if( nchildren == 0 )
1608treedata->
nnodes+= nchildren;
1609treedata->
nopen+= nchildren;
1637char* treeDataPrint(
1648 "weight: %.4Lf, ssg %.4f",
1681assert(des !=
NULL);
1707newtrend = des->
beta* (newlevel - des->
level) + (1.0 - des->
beta) * des->
trend;
1709des->
level= newlevel;
1710des->
trend= newtrend;
1720assert(des !=
NULL);
1725 returndes->
trend;
1735timeseries->
nvals= 0;
1736timeseries->
nobs= 0L;
1758assert(timeseries !=
NULL);
1759assert(name !=
NULL);
1760assert(alpha >= 0.0 && alpha <= 1);
1761assert(beta >= 0.0 && beta <= 1);
1765timeseriesptr = *timeseries;
1766assert(timeseriesptr !=
NULL);
1772assert(timeseriesupdate !=
NULL);
1773timeseriesptr->timeseriesupdate = timeseriesupdate;
1784timeseriesptr->
des.
alpha= alpha;
1785timeseriesptr->
des.
beta= beta;
1800assert(timeseries !=
NULL);
1809*timeseries =
NULL;
1818assert(timeseries !=
NULL);
1855 if( timeseries->
nobs== 0L )
1862 if(
EPSZ(val - targetval, tolerance) )
1863 returntreedata->
nnodes;
1870 if( (targetval > val && trend < tolerance) || (targetval < val && trend > -tolerance) )
1877 returntimeseries->
useleafts? 2.0 * estimated - 1.0 : estimated;
1914assert(timeseries->
nvals% 2 == 0);
1916des = ×eries->
des;
1920 for( i = 0; i < timeseries->
nvals/ 2; ++i )
1922timeseries->
vals[i] = timeseries->
vals[2 * i];
1944assert(timeseries !=
NULL);
1945assert(treedata !=
NULL);
1948assert(timeseries->timeseriesupdate !=
NULL);
1949 SCIP_CALL( timeseries->timeseriesupdate(
scip, timeseries, treedata, &value) );
1954 if( timeseries->
useleafts&& ! isleaf )
1957timeseries->
nobs++;
1966tspos = timeseries->
nvals++;
1967timeseries->
vals[tspos] = value;
1987 returntimeseries->
name;
1996 TIMESERIES** tss = eventhdlrdata->timeseries;
2002assert(tss[t] !=
NULL);
2005tss[t]->
useleafts= eventhdlrdata->useleafts;
2020 TIMESERIES** tss = eventhdlrdata->timeseries;
2026assert(tss[t] !=
NULL);
2081assert(eventhdlrdata !=
NULL);
2082treedata = eventhdlrdata->treedata;
2085 if( treedata->
weight<= 0.3 )
2088coeffs = coeffs_early;
2092 else if( treedata->
weight<= 0.6 )
2094coeffs = coeffs_intermediate;
2103coeffs = coeffs_late;
2115 TSPOStspos = tsposs[t];
2119testim = treedata->
nnodes;
2121estim += coeffs[t] * testim;
2124 if( estim < treedata->
nnodes)
2139 charcompletiontype;
2141assert(eventhdlrdata !=
NULL);
2142treedata = eventhdlrdata->treedata;
2143completiontype = eventhdlrdata->completiontypeparam;
2157 SCIP_Booluseweight = eventhdlrdata->treeisbinary;
2160 if( eventhdlrdata->regforest !=
NULL)
2162 else if( useweight && usessg )
2164 else if( useweight )
2173 switch(completiontype)
2192*completed = eventhdlrdata->coefmonoweight * (
SCIP_Real)treedata->
weight+
2193eventhdlrdata->coefmonossg * (1.0 - treedata->
ssg->
value);
2205*completed = 1.0 - treedata->
ssg->
value;
2230completed =
MIN(completed, 1.0);
2232 if( completed > 0.0 )
2246assert(ts !=
NULL);
2247assert(value !=
NULL);
2268abspb =
REALABS(primalbound);
2270*value = 1.0 -
REALABS(primalbound - dualbound)/
MAX(abspb, absdb);
2274*value =
MAX(*value, 0.0);
2332assert(eventhdlrdata !=
NULL);
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;
2408 if( nnodes < eventhdlrdata->minnodes )
2426 if( completion < 1.0 / eventhdlrdata->restartfactor )
2430 "Completion %.5f less than restart threshold %.5f\n",
2431completion, 1.0 / eventhdlrdata->restartfactor);
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",
2468estimation, eventhdlrdata->treedata->nnodes, estimation / eventhdlrdata->treedata->nnodes);
2489applyrestart =
TRUE;
2492applyrestart =
FALSE;
2504 returnapplyrestart;
2516 TIMESERIES** tss = eventhdlrdata->timeseries;
2522assert(tss[t] !=
NULL);
2525#ifdef SCIP_MORE_DEBUG 2527 "Update of time series '%s', current value %.4f (%" SCIP_LONGINT_FORMAT " observations)\n",
2544 TREEDATA* treedata = eventhdlrdata->treedata;
2545 char* ptr = strbuf;
2552 if( reportnum > 0 )
2561completed =
MIN(1.0, completed);
2562completed =
MAX(0.0, completed);
2571 "weight: %.4Lf completed %.4f\n",
2584 "estim",
"value",
"trend",
"resolution",
"smooth");
2589 real2String(wbeestim, wbeestimstr, 0),
"-",
"-",
"-",
"-");
2593 "-",
"-",
"-",
"-");
2600 TIMESERIES* ts = eventhdlrdata->timeseries[t];
2616 if( reportnum > 0 )
2641assert(eventhdlrdata !=
NULL);
2659assert(eventhdlrdata !=
NULL);
2667eventhdlrdata->lastrestartrun = 0;
2668eventhdlrdata->nrestartsperformed = 0;
2680assert(eventhdlrdata !=
NULL);
2694assert(eventhdlrdata !=
NULL);
2696eventhdlrdata->restarthitcounter = 0;
2697eventhdlrdata->weightlastreport = 0.0;
2698eventhdlrdata->nreports = 0;
2707 if( eventhdlrdata->treeprofile_enabled )
2712eventhdlrdata->treeisbinary =
TRUE;
2724assert(eventhdlrdata !=
NULL);
2726 if( eventhdlrdata->treeprofile !=
NULL)
2745assert(eventhdlr !=
NULL);
2748assert(eventhdlrdata !=
NULL);
2750treedata = eventhdlrdata->treedata;
2771 if( nchildren != 2 )
2772eventhdlrdata->treeisbinary =
FALSE;
2787(eventhdlrdata->reportfreq == 0
2788|| treedata->
weight>= eventhdlrdata->weightlastreport + 1.0 / (
SCIP_Real)eventhdlrdata->reportfreq) )
2792 if( eventhdlrdata->reportfreq > 0 )
2810eventhdlrdata->restarthitcounter++;
2812 if( eventhdlrdata->restarthitcounter >= eventhdlrdata->hitcounterlim )
2817eventhdlrdata->nrestartsperformed++;
2820 "Restart triggered after %d consecutive estimations that the remaining tree will be large\n",
2821eventhdlrdata->restarthitcounter);
2831eventhdlrdata->restarthitcounter = 0;
2846assert(eventhdlr !=
NULL);
2849assert(eventhdlrdata !=
NULL);
2851 if( eventhdlrdata->showstats )
2866assert(disp !=
NULL);
2871assert(eventhdlr !=
NULL);
2873assert(eventhdlrdata !=
NULL);
2874treedata = eventhdlrdata->treedata;
2878completed =
MIN(completed, 1.0);
2880 if( treedata->
weight>= 0.005 && completed > 0 )
2904eventExecEstim, eventhdlrdata) );
2905assert(eventhdlr !=
NULL);
2916 SCIP_CALL(
SCIPaddCharParam(
scip,
"estimation/restarts/restartpolicy",
"restart policy: (a)lways, (c)ompletion, (e)stimation, (n)ever",
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)
3036assert(eventhdlrdata !=
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)
#define SCIP_LONGINT_FORMAT
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 timeSeriesCreate(SCIP *scip, TIMESERIES **timeseries, const char *name, SCIP_Real targetvalue, SCIP_Real initialvalue, SCIP_Real alpha, SCIP_Real beta, DECL_TIMESERIESUPDATE((*timeseriesupdate)))
static SCIP_RETCODE subtreeSumGapSplit(SCIP *scip, SUBTREESUMGAP *ssg, SCIP_Bool addfocusnode)
static SCIP_DECL_PQUEUEELEMCHGPOS(elemChgPosNodeInfo)
#define DES_BETA_TREEWEIGHT
static void freeTreeProfile(SCIP *scip, TREEPROFILE **treeprofile)
static SCIP_DECL_EVENTEXIT(eventExitEstim)
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
static SCIP_DECL_EVENTEXEC(eventExecEstim)
#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_DECL_EVENTCOPY(eventCopyEstim)
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)
#define DEFAULT_RESTARTACTPRICERS
SCIP_Real SCIPgetTreesizeEstimation(SCIP *scip)
static SCIP_DECL_EVENTINIT(eventInitEstim)
static void timeSeriesFree(SCIP *scip, TIMESERIES **timeseries)
#define DEFAULT_RESTARTFACTOR
static SCIP_DECL_SORTPTRCOMP(compareNodeInfos)
#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)
static SCIP_DECL_EVENTFREE(eventFreeEstim)
#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_DECL_TABLEOUTPUT(tableOutputEstim)
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_DECL_EVENTINITSOL(eventInitsolEstim)
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_DECL_DISPOUTPUT(dispOutputCompleted)
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
static SCIP_DECL_EVENTEXITSOL(eventExitsolEstim)
#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)
void SCIPpqueueFree(SCIP_PQUEUE **pqueue)
SCIP_RETCODE SCIPpqueueInsert(SCIP_PQUEUE *pqueue, void *elem)
int SCIPpqueueNElems(SCIP_PQUEUE *pqueue)
SCIP_RETCODE SCIPpqueueCreate(SCIP_PQUEUE **pqueue, int initsize, SCIP_Real sizefac, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), SCIP_DECL_PQUEUEELEMCHGPOS((*elemchgpos)))
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 SCIPsetEventhdlrInitsol(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTINITSOL((*eventinitsol)))
SCIP_RETCODE SCIPsetEventhdlrCopy(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTCOPY((*eventcopy)))
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_EVENTHDLR * SCIPfindEventhdlr(SCIP *scip, const char *name)
SCIP_EVENTHDLRDATA * SCIPeventhdlrGetData(SCIP_EVENTHDLR *eventhdlr)
SCIP_RETCODE SCIPsetEventhdlrExitsol(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTEXITSOL((*eventexitsol)))
SCIP_RETCODE SCIPsetEventhdlrFree(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTFREE((*eventfree)))
SCIP_RETCODE SCIPsetEventhdlrExit(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTEXIT((*eventexit)))
SCIP_RETCODE SCIPsetEventhdlrInit(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTINIT((*eventinit)))
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)
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
type definitions for managing events
struct SCIP_EventhdlrData SCIP_EVENTHDLRDATA
#define SCIP_EVENTTYPE_NODEBRANCHED
#define SCIP_EVENTTYPE_NODEDELETE
type definitions for message output methods
type definitions for miscellaneous datastructures
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
type definitions for problem statistics
type definitions for displaying statistics tables
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4