47 #define EVENTHDLR_NAME "solvingphase" 48 #define EVENTHDLR_DESC "event handler to adjust settings depending on current stage" 50 #define EVENTHDLR_EVENT SCIP_EVENTTYPE_BESTSOLFOUND | SCIP_EVENTTYPE_NODEBRANCHED | SCIP_EVENTTYPE_NODEFOCUSED 51 #define TRANSITIONMETHODS "elor" 53 #define DEFAULT_SETNAME "-" 54 #define DEFAULT_TRANSITIONMETHOD 'r' 55 #define DEFAULT_NODEOFFSET 50L 56 #define DEFAULT_FALLBACK FALSE 57 #define DEFAULT_INTERRUPTOPTIMAL FALSE 59 #define DEFAULT_ENABLED FALSE 60 #define DEFAULT_TESTMODE FALSE 62 #define DEFAULT_USERESTART1TO2 FALSE 63 #define DEFAULT_USERESTART2TO3 FALSE 64 #define DEFAULT_USEEMPHSETTINGS TRUE 67 #define DEFAULT_LOGREGRESSION_XTYPE 'n' 68 #define LOGREGRESSION_XTYPES "lnt" 97 struct SCIP_EventhdlrData
99 char logregression_xtype;
102 char* improvesetname;
107 char transitionmethod;
129 int nnondefaultparams;
130 int nondefaultparamssize;
135 int nnodesbelowincumbent;
158 if( estim1 < estim2 )
160 else if( estim1 > estim2 )
171 if( number1 < number2 )
173 else if( number1 > number2 )
191 assert(
nnodes == 0 || nodes != NULL);
192 assert(scip != NULL);
193 assert(eventhdlrdata->depthinfos != NULL);
196 for( n = 0; n <
nnodes; ++n )
220 assert(pos >= 0 && pos < depthinfo->
nminnodes);
221 assert(depthinfo->
minnodes[pos] == node);
224 ++eventhdlrdata->nrank1nodes;
229 ++eventhdlrdata->nnodesbelowincumbent;
233 eventhdlrdata->nnodesleft +=
nnodes;
249 assert(node != NULL);
265 --eventhdlrdata->nrank1nodes;
277 assert(scip != NULL);
283 return eventhdlrdata->nrank1nodes;
296 assert(scip != NULL);
302 return eventhdlrdata->nnodesbelowincumbent;
327 assert(eventhdlrdata != NULL);
330 for( d = 0; d < eventhdlrdata->maxdepth; ++d )
331 eventhdlrdata->depthinfos[d]->nminnodes = 0;
333 eventhdlrdata->nrank1nodes = 0;
334 eventhdlrdata->nnodesbelowincumbent = 0;
335 eventhdlrdata->nnodesleft = 0;
337 nleaves = nchildren = nsiblings = 0;
349 eventhdlrdata->newbestsol =
FALSE;
361 assert(scip != NULL);
362 assert(depthinfo != NULL);
369 (*depthinfo)->nsolvednodes = 0;
370 (*depthinfo)->nminnodes = 0;
371 (*depthinfo)->minnodescapacity = 2;
386 assert(scip != NULL);
387 assert(depthinfo != NULL);
388 assert(*depthinfo != NULL);
389 assert((*depthinfo)->minnodes != NULL);
408 assert(scip != NULL);
409 assert(node != NULL);
410 assert(eventhdlrdata != NULL);
414 assert(depthinfo != NULL);
425 eventhdlrdata->nnodesbelowincumbent--;
432 --(eventhdlrdata->nrank1nodes);
439 --eventhdlrdata->nnodesleft;
454 oldsize = eventhdlrdata->maxdepth;
463 else if( nodedepth + 1 >= eventhdlrdata->maxdepth )
465 assert(nodedepth > 0);
467 newsize = 2 * nodedepth;
471 if( newsize > oldsize )
475 for( c = oldsize; c < newsize; ++c )
481 eventhdlrdata->maxdepth = newsize;
483 assert(newsize > nodedepth);
497 assert(scip != NULL);
498 assert(node != NULL);
499 assert(eventhdlrdata != NULL);
542 for( n = 0; n <
nnodes; ++n )
552 for( n = 0; n <
nnodes; ++n )
562 for( n = 0; n <
nnodes; ++n )
582 switch( eventhdlrdata->logregression_xtype )
629 assert(scip != NULL);
630 assert(eventhdlrdata != NULL);
632 regression = eventhdlrdata->regression;
633 assert(regression != NULL);
639 currentx =
getX(scip, eventhdlrdata);
675 return ((
SCIPgetNNodes(scip) > eventhdlrdata->nodeoffset) && (eventhdlrdata->nnodesbelowincumbent == 0));
710 lambda = (axisintercept - primalbound) / (firstprimalbound - primalbound);
729 referencevalue = eventhdlrdata->optimalvalue;
736 if(
EPSZ((primalbound - referencevalue)/max, 1e-9) )
753 switch( eventhdlrdata->transitionmethod )
813 else if( eventhdlrdata->solvingphase !=
SOLVINGPHASE_PROOF || eventhdlrdata->fallback )
830 switch(eventhdlrdata->solvingphase)
843 SCIPdebugMsg(scip,
"Unknown solving phase: %d -> ABORT!\n ", eventhdlrdata->solvingphase);
862 char* paramfilename = NULL;
865 switch(eventhdlrdata->solvingphase)
868 paramfilename = eventhdlrdata->feassetname;
871 paramfilename = eventhdlrdata->improvesetname;
874 paramfilename = eventhdlrdata->proofsetname;
878 SCIPdebugMsg(scip,
"Unknown solving phase: %d -> ABORT!\n ", eventhdlrdata->solvingphase);
882 assert(paramfilename != NULL);
888 file = fopen(paramfilename,
"r");
893 SCIPwarningMessage(scip,
"Parameter file <%s> not found--keeping settings as before.\n", paramfilename);
917 const char* relevantparams[] = {
930 "limits/autorestartnodes",
932 "solvingphases/enabled",
933 "solvingphases/fallback",
934 "solvingphases/interruptoptimal",
935 "solvingphases/nodeoffset",
936 "solvingphases/feassetname",
937 "solvingphases/proofsetname",
938 "solvingphases/optimalvalue",
939 "solvingphases/improvesetname",
940 "solvingphases/testmode",
941 "solvingphases/transitionmethod",
942 "solvingphases/useemphsettings",
943 "solvingphases/userestart1to2",
944 "solvingphases/userestart2to3",
945 "solvingphases/xtype" 947 int nrelevantparams = 28;
950 for( p = 0; p < nrelevantparams; ++p )
963 for( p = 0; p < eventhdlrdata->nnondefaultparams; ++p )
989 if( eventhdlrdata->useemphsettings )
1023 oldsolvingphase = eventhdlrdata->solvingphase;
1030 if( oldsolvingphase == eventhdlrdata->solvingphase )
1035 if( eventhdlrdata->solvingphase ==
SOLVINGPHASE_PROOF && eventhdlrdata->transitionmethod ==
'o' &&
1036 eventhdlrdata->interruptoptimal )
1047 else if( eventhdlrdata->solvingphase ==
SOLVINGPHASE_PROOF && eventhdlrdata->userestart2to3 )
1077 regressionx =
getX(scip, eventhdlrdata);
1081 if(
SCIPisEQ(scip, eventhdlrdata->lastx, regressionx) )
1088 eventhdlrdata->lastx = regressionx;
1089 eventhdlrdata->lasty = regressiony;
1109 eventhdlrdata->newbestsol =
TRUE;
1133 eventhdlrdata->newbestsol =
FALSE;
1167 assert(scip != NULL);
1168 assert(eventhdlrdata != NULL);
1172 eventhdlrdata->logreached =
TRUE;
1178 eventhdlrdata->rank1reached =
TRUE;
1185 eventhdlrdata->estimatereached =
TRUE;
1192 eventhdlrdata->optimalreached =
TRUE;
1205 #ifdef SCIP_DISABLED_CODE 1209 assert(scip != NULL);
1210 assert(eventhdlr != NULL);
1219 #define eventCopySolvingphase NULL 1228 assert(scip != NULL);
1229 assert(eventhdlr != NULL);
1233 assert(eventhdlrdata != NULL);
1249 assert(scip != NULL);
1251 eventhdlrdata->depthinfos = NULL;
1252 eventhdlrdata->maxdepth = 0;
1253 eventhdlrdata->nnodesbelowincumbent = 0;
1254 eventhdlrdata->nnodesleft = 0;
1255 eventhdlrdata->nrank1nodes = 0;
1257 eventhdlrdata->newbestsol =
FALSE;
1268 assert(scip != NULL);
1272 if( eventhdlrdata->maxdepth > 0 )
1277 for( c = 0; c < eventhdlrdata->maxdepth; ++c )
1284 eventhdlrdata->maxdepth = 0;
1304 eventhdlrdata->nnondefaultparams = 0;
1305 eventhdlrdata->nondefaultparams = NULL;
1306 eventhdlrdata->nondefaultparamssize = 0;
1309 for( p = 0; p < nparams; ++p )
1316 if( eventhdlrdata->nnondefaultparams == 0 )
1319 eventhdlrdata->nondefaultparamssize = 8;
1321 else if( eventhdlrdata->nnondefaultparams == eventhdlrdata->nondefaultparamssize )
1323 eventhdlrdata->nondefaultparamssize *= 2;
1325 eventhdlrdata->nnondefaultparams, eventhdlrdata->nondefaultparamssize) );
1329 eventhdlrdata->nondefaultparams[eventhdlrdata->nnondefaultparams++] = param;
1343 assert(scip != NULL);
1344 assert(eventhdlr != NULL);
1348 assert(eventhdlrdata != NULL);
1354 eventhdlrdata->optimalreached =
FALSE;
1355 eventhdlrdata->logreached =
FALSE;
1356 eventhdlrdata->rank1reached =
FALSE;
1357 eventhdlrdata->estimatereached =
FALSE;
1358 eventhdlrdata->nnondefaultparams = 0;
1359 eventhdlrdata->nondefaultparams = NULL;
1360 eventhdlrdata->nondefaultparamssize = 0;
1363 if( eventhdlrdata->enabled )
1372 if( eventhdlrdata->enabled || eventhdlrdata->testmode )
1390 assert(scip != NULL);
1391 assert(eventhdlr != NULL);
1395 assert(eventhdlrdata != NULL);
1411 assert(scip != NULL);
1412 assert(eventhdlr != NULL);
1424 if( eventhdlrdata->enabled )
1431 if( eventhdlrdata->testmode )
1444 #define DISP_NAME_NRANK1NODES "nrank1nodes" 1445 #define DISP_DESC_NRANK1NODES "current number of rank1 nodes left" 1446 #define DISP_HEAD_NRANK1NODES "rank1" 1447 #define DISP_WIDT_NRANK1NODES 7 1448 #define DISP_PRIO_NRANK1NODES 40000 1449 #define DISP_POSI_NRANK1NODES 500 1450 #define DISP_STRI_NRANK1NODES TRUE 1456 assert(disp != NULL);
1458 assert(scip != NULL);
1467 #define DISP_NAME_NNODESBELOWINC "nnodesbelowinc" 1468 #define DISP_DESC_NNODESBELOWINC "current number of nodes with an estimate better than the current incumbent" 1469 #define DISP_HEAD_NNODESBELOWINC "nbInc" 1470 #define DISP_WIDT_NNODESBELOWINC 6 1471 #define DISP_PRIO_NNODESBELOWINC 40000 1472 #define DISP_POSI_NNODESBELOWINC 550 1473 #define DISP_STRI_NNODESBELOWINC TRUE 1479 assert(disp != NULL);
1481 assert(scip != NULL);
1498 eventhdlrdata = NULL;
1500 assert(eventhdlrdata != NULL);
1502 eventhdlrdata->feassetname = NULL;
1503 eventhdlrdata->improvesetname = NULL;
1504 eventhdlrdata->proofsetname = NULL;
1506 eventhdlrdata->depthinfos = NULL;
1507 eventhdlrdata->maxdepth = 0;
1508 eventhdlrdata->eventfilterpos = -1;
1511 eventhdlrdata->regression = NULL;
1518 eventExecSolvingphase, eventhdlrdata) );
1519 assert(eventhdlr != NULL);
1523 NULL, NULL, NULL, NULL, NULL, NULL, dispOutputNRank1Nodes, NULL,
DISP_WIDT_NRANK1NODES,
DISP_PRIO_NRANK1NODES,
DISP_POSI_NRANK1NODES,
1526 NULL, NULL, NULL, NULL, NULL, NULL, dispOutputNnodesbelowinc, NULL,
DISP_WIDT_NNODESBELOWINC,
DISP_PRIO_NNODESBELOWINC,
DISP_POSI_NNODESBELOWINC,
1558 "transition method: Possible options are 'e'stimate,'l'ogarithmic regression,'o'ptimal-value based,'r'ank-1",
1561 "should the event handler interrupt the solving process after optimal solution was found?",
1565 "should a restart be applied between the feasibility and improvement phase?",
1569 "should a restart be applied between the improvement and the proof phase?",
1580 "should emphasis settings for the solving phases be used, or settings files?",
static SCIP_RETCODE recomputeNodeInformation(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
static SCIP_RETCODE applySolvingPhase(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define DISP_HEAD_NRANK1NODES
SCIP_Real SCIPgetFirstPrimalBound(SCIP *scip)
SCIP_PARAM ** SCIPgetParams(SCIP *scip)
#define TRANSITIONMETHODS
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
static SCIP_RETCODE fixOrUnfixRelevantParameters(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_Bool fix)
SCIP_RETCODE SCIPsetEventhdlrInitsol(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTINITSOL((*eventinitsol)))
#define DISP_HEAD_NNODESBELOWINC
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
#define DISP_NAME_NRANK1NODES
static SCIP_Bool transitionPhase3(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_Longint SCIPgetNLPIterations(SCIP *scip)
static void removeNode(SCIP_NODE *node, SCIP_EVENTHDLRDATA *eventhdlrdata)
static SCIP_RETCODE adaptSolverBehavior(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
static SCIP_Bool checkRankOneTransition(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define DISP_WIDT_NNODESBELOWINC
SCIP_Real SCIPgetPrimalbound(SCIP *scip)
static SCIP_RETCODE freeDepthinfo(SCIP *scip, DEPTHINFO **depthinfo)
SCIP_RETCODE SCIPgetLeaves(SCIP *scip, SCIP_NODE ***leaves, int *nleaves)
SCIP_RETCODE SCIPsetEventhdlrExitsol(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTEXITSOL((*eventexitsol)))
#define DEFAULT_USERESTART1TO2
SCIP_RETCODE SCIPsetEventhdlrExit(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTEXIT((*eventexit)))
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
struct SCIP_EventhdlrData SCIP_EVENTHDLRDATA
SCIP_RETCODE SCIPgetOpenNodesData(SCIP *scip, SCIP_NODE ***leaves, SCIP_NODE ***children, SCIP_NODE ***siblings, int *nleaves, int *nchildren, int *nsiblings)
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
static SCIP_Real getCurrentRegressionTangentAxisIntercept(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
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_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
enum SCIP_Retcode SCIP_RETCODE
static SCIP_RETCODE addNodesInformation(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_NODE **nodes, int nnodes)
#define SCIP_EVENTTYPE_NODEFOCUSED
const char * SCIPparamGetName(SCIP_PARAM *param)
SCIP_Real SCIPregressionGetIntercept(SCIP_REGRESSION *regression)
int SCIPgetNNodesLeft(SCIP *scip)
void SCIPregressionAddObservation(SCIP_REGRESSION *regression, SCIP_Real x, SCIP_Real y)
#define SCIPfreeBlockMemory(scip, ptr)
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_Bool SCIPparamIsDefault(SCIP_PARAM *param)
SCIP_EVENTHDLR * SCIPfindEventhdlr(SCIP *scip, const char *name)
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
#define DEFAULT_NODEOFFSET
static SCIP_DECL_EVENTEXEC(eventExecSolvingphase)
#define DISP_POSI_NNODESBELOWINC
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
int SCIPnodeGetDepth(SCIP_NODE *node)
static SCIP_RETCODE changeEmphasisParameters(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define SCIPallocBlockMemory(scip, ptr)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
void SCIPdispInt(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, int val, int width)
static int checkLeavesBelowIncumbent(SCIP *scip)
static SCIP_Bool checkEstimateCriterion(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_RETCODE SCIPgetSiblings(SCIP *scip, SCIP_NODE ***siblings, int *nsiblings)
void SCIPeventhdlrSetData(SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define SCIP_EVENTTYPE_NODEBRANCHED
static SCIP_DECL_SORTPTRCOMP(sortCompTreeinfo)
SCIP_Longint SCIPnodeGetNumber(SCIP_NODE *node)
static SCIP_RETCODE ensureDepthInfoArraySize(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_NODE *node)
void SCIPregressionRemoveObservation(SCIP_REGRESSION *regression, SCIP_Real x, SCIP_Real y)
void SCIPsortedvecDelPosPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int pos, int *len)
enum SolvingPhase SOLVINGPHASE
SCIP_RETCODE SCIPsetEventhdlrFree(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTFREE((*eventfree)))
SCIP_RETCODE SCIPsetEventhdlrCopy(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTCOPY((*eventcopy)))
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
static SCIP_Real getX(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_RETCODE SCIPgetChildren(SCIP *scip, SCIP_NODE ***children, int *nchildren)
SCIP_NODE * SCIPeventGetNode(SCIP_EVENT *event)
SCIP_RETCODE SCIPsetEventhdlrInit(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTINIT((*eventinit)))
SCIP_Bool SCIPparamIsFixed(SCIP_PARAM *param)
SCIP_Bool SCIPsortedvecFindPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *val, int len, int *pos)
#define DISP_DESC_NNODESBELOWINC
int SCIPgetNChildren(SCIP *scip)
#define DISP_PRIO_NNODESBELOWINC
static SCIP_RETCODE collectNondefaultParams(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_Longint SCIPgetNDelayedCutoffs(SCIP *scip)
static int getNNodesBelowIncumbent(SCIP *scip)
SCIP_RETCODE SCIPunfixParam(SCIP *scip, const char *name)
static SCIP_DECL_DISPOUTPUT(dispOutputNRank1Nodes)
#define DISP_POSI_NRANK1NODES
SCIP_Longint SCIPgetNTotalNodes(SCIP *scip)
SCIP_RETCODE SCIPsetEmphasis(SCIP *scip, SCIP_PARAMEMPHASIS paramemphasis, SCIP_Bool quiet)
static SCIP_RETCODE updateLogRegression(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
void SCIPregressionFree(SCIP_REGRESSION **regression)
#define DEFAULT_INTERRUPTOPTIMAL
public data structures and miscellaneous methods
#define DISP_STRI_NNODESBELOWINC
#define DEFAULT_LOGREGRESSION_XTYPE
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
static SCIP_DECL_EVENTFREE(eventFreeSolvingphase)
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_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
static SCIP_DECL_EVENTINITSOL(eventInitsolSolvingphase)
#define DISP_STRI_NRANK1NODES
static SCIP_RETCODE createDepthinfo(SCIP *scip, DEPTHINFO **depthinfo)
int SCIPgetNSols(SCIP *scip)
SCIPInterval log(const SCIPInterval &x)
void SCIPsortedvecInsertPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *keyval, int *len, int *pos)
eventhdlr for solving phase dependent parameter adjustment
SCIP_RETCODE SCIPfixParam(SCIP *scip, const char *name)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
static int getNRank1Nodes(SCIP *scip)
#define DEFAULT_USERESTART2TO3
static SCIP_DECL_EVENTEXIT(eventExitSolvingphase)
enum SCIP_ParamEmphasis SCIP_PARAMEMPHASIS
SCIP_Real SCIPnodeGetEstimate(SCIP_NODE *node)
#define DISP_WIDT_NRANK1NODES
#define SCIP_EVENTTYPE_BESTSOLFOUND
#define DISP_NAME_NNODESBELOWINC
static SCIP_RETCODE releaseNodeInformation(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_NODE *node)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
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 SCIPrestartSolve(SCIP *scip)
SCIP_RETCODE SCIPreadParams(SCIP *scip, const char *filename)
SCIP_Real SCIPregressionGetSlope(SCIP_REGRESSION *regression)
SCIP_NODETYPE SCIPnodeGetType(SCIP_NODE *node)
#define DEFAULT_USEEMPHSETTINGS
#define SCIP_DECL_EVENTCOPY(x)
SCIP_RETCODE SCIPincludeEventHdlrSolvingphase(SCIP *scip)
static SCIP_RETCODE updateDataStructures(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_EVENTTYPE eventtype)
void SCIPregressionReset(SCIP_REGRESSION *regression)
static void determineSolvingPhase(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define eventCopySolvingphase
SCIP_RETCODE SCIPregressionCreate(SCIP_REGRESSION **regression)
SCIP_RETCODE SCIPinterruptSolve(SCIP *scip)
SCIP_Real SCIPgetUpperbound(SCIP *scip)
#define DEFAULT_TRANSITIONMETHOD
static void releaseNodeFromDepthInfo(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_NODE *node)
static SCIP_RETCODE changeParametersUsingSettingsFiles(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_EVENTHDLRDATA * SCIPeventhdlrGetData(SCIP_EVENTHDLR *eventhdlr)
#define DISP_DESC_NRANK1NODES
#define DISP_PRIO_NRANK1NODES
int SCIPregressionGetNObservations(SCIP_REGRESSION *regression)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
const char * SCIPdispGetName(SCIP_DISP *disp)
int SCIPgetNParams(SCIP *scip)
static SCIP_DECL_EVENTEXITSOL(eventExitsolSolvingphase)
static SCIP_DECL_EVENTINIT(eventInitSolvingphase)
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)
static SCIP_Bool checkOptimalSolution(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
#define LOGREGRESSION_XTYPES
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)
static void testCriteria(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
static SCIP_Bool checkLogCriterion(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)