event_solvingphase.c
Go to the documentation of this file.
30 * this event handler provides methods to support parameter adjustment at every new of the three solving phases:
32 * - Improvement phase - after the first solution was found until an optimal solution is found or believed to be found
33 * - Proof phase - the remaining time of the solution process after an optimal or believed-to-be optimal incumbent has been found.
35 * Of course, this event handler cannot detect by itself whether a given incumbent is optimal prior to termination of the
36 * solution process. It rather uses heuristic transitions based on properties of the search tree in order to
37 * determine the appropriate stage. Settings files can be passed to this event handler for each of the three phases.
51/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
78#define EVENTHDLR_EVENT SCIP_EVENTTYPE_BESTSOLFOUND | SCIP_EVENTTYPE_NODEBRANCHED | SCIP_EVENTTYPE_NODEFOCUSED /**< the actual event to be caught */
79#define TRANSITIONMETHODS "elor" /**< which heuristic transition method: (e)stimate based, (l)ogarithmic regression based, (o)ptimal value based (cheat!),
83#define DEFAULT_NODEOFFSET 50L /**< default node offset before transition to proof phase is active */
85#define DEFAULT_INTERRUPTOPTIMAL FALSE /**< should solving process be interrupted if optimal solution was found? */
90#define DEFAULT_USERESTART1TO2 FALSE /**< should a restart be applied between the feasibility and improvement phase? */
91#define DEFAULT_USERESTART2TO3 FALSE /**< should a restart be applied between the improvement and the proof phase? */
92#define DEFAULT_USEEMPHSETTINGS TRUE /**< should emphasis settings be used for the different solving phases, or settings files? */
95#define DEFAULT_LOGREGRESSION_XTYPE 'n' /**< default type to use for log regression - (t)ime, (n)odes, (l)p iterations */
96#define LOGREGRESSION_XTYPES "lnt" /**< available types for log regression - (t)ime, (n)odes, (l)p iterations */
106 SCIP_NODE** minnodes; /**< points to the rank-1 nodes at this depth (open nodes whose estimate is lower than current
117 char logregression_xtype;/**< type to use for log regression - (t)ime, (n)odes, (l)p iterations */
119 char* feassetname; /**< settings file parameter for the feasibility phase -- precedence over emphasis settings */
120 char* improvesetname; /**< settings file parameter for the improvement phase -- precedence over emphasis settings */
121 char* proofsetname; /**< settings file parameter for the proof phase -- precedence over emphasis settings */
123 SCIP_Longint nnodesleft; /**< store the number of open nodes that are considered internally to update data */
130 SCIP_Longint lastndelayedcutoffs; /**< the number of delayed cutoffs since the last update of a focus node */
133 SCIP_Bool userestart1to2; /**< should a restart be applied between the feasibility and improvement phase? */
134 SCIP_Bool userestart2to3; /**< should a restart be applied between the improvement and the proof phase? */
135 SCIP_Bool useemphsettings; /**< should emphasis settings for the solving phases be used, or settings files? */
139 SCIP_REGRESSION* regression; /**< regression data for log linear regression of the incumbent solutions */
142 SCIP_PARAM** nondefaultparams; /**< parameters with non-default values during problem initialization */
143 int nnondefaultparams; /**< number of parameters with non-default values during problem initialization */
145 int eventfilterpos; /**< the event filter position, or -1, if event has not (yet) been caught */
149 int nnodesbelowincumbent;/**< number of open nodes with an estimate lower than the current incumbent */
194/** insert an array of open nodes (leaves/siblings/children) into the event handler data structures and update the transition information */
216 assert(SCIPnodeGetType(node) == SCIP_NODETYPE_CHILD || SCIPnodeGetType(node) == SCIP_NODETYPE_LEAF
219 /* an open node has rank 1 if it has an estimate at least as small as the best solved node at this depth */
220 if( depthinfo->nsolvednodes == 0 || SCIPisGE(scip, depthinfo->minestimate, SCIPnodeGetEstimate(node)) )
229 SCIP_CALL( SCIPreallocBlockMemoryArray(scip, &depthinfo->minnodes, oldcapacity, depthinfo->minnodescapacity) );
233 SCIPsortedvecInsertPtr((void **)depthinfo->minnodes, sortCompTreeinfo, (void*)node, &depthinfo->nminnodes, &pos);
241 /* update active estimate information by bookkeeping nodes with an estimate smaller than the current incumbent */
273 contained = SCIPsortedvecFindPtr((void **)depthinfo->minnodes, sortCompTreeinfo, (void *)node, depthinfo->nminnodes, &pos);
278 SCIPsortedvecDelPosPtr((void **)depthinfo->minnodes, sortCompTreeinfo, pos, &(depthinfo->nminnodes));
302/** returns the current number of open nodes which have an estimate lower than the incumbent solution */
354 SCIP_CALL( SCIPgetOpenNodesData(scip, &leaves, &children, &siblings, &nleaves, &nchildren, &nsiblings) );
388 SCIP_CALL( SCIPallocBlockMemoryArray(scip, &(*depthinfo)->minnodes, (*depthinfo)->minnodescapacity) );
412/** removes the node itself and updates the data if this node defined an active estimate globally or locally at its depth level */
437 /* decrease counter of active estimate nodes if node has an estimate that is below the current incumbent */
438 if( SCIPisLT(scip, SCIPnodeGetEstimate(node), SCIPgetUpperbound(scip)) && SCIPnodeGetDepth(node) > 0 )
442 while( depthinfo->nminnodes > 0 && SCIPisGT(scip, SCIPnodeGetEstimate(depthinfo->minnodes[depthinfo->nminnodes - 1]), depthinfo->minestimate) )
471 /* create depth info array with small initial size or enlarge the existing array if new node is deeper */
480 SCIP_CALL( SCIPreallocBlockMemoryArray(scip, &eventhdlrdata->depthinfos, oldsize, 2 * nodedepth) ); /*lint !e647*/
516 /* in case that selected nodes were cut off in between two calls to this method, build data structures from scratch again */
517 if( SCIPgetNDelayedCutoffs(scip) > eventhdlrdata->lastndelayedcutoffs || eventhdlrdata->newbestsol
536/** ensures correctness of counters by explicitly summing up all children, leaves, and siblings with small estimates */
584/** get the point of the X axis for the regression according to the user choice of X type (time/nodes/iterations)*/
660/** checks if rank-1 transition has been reached, that is, when all open nodes have a best-estimate higher than the best
676/** check if Best-Estimate criterion was reached, that is, when the active estimate is not better than the current incumbent solution */
684 return ((SCIPgetNNodes(scip) > eventhdlrdata->nodeoffset) && (eventhdlrdata->nnodesbelowincumbent == 0));
691 * the logarithmic phase transition is reached when the slope of the logarithmic primal progress (as a function of the number of
692 * LP iterations or solving nodes) becomes gentle. More concretely, we measure the slope by calculating the axis intercept of the tangent of
693 * the logarithmic primal progress. We then compare this axis intercept to the first and current primal bound and say that
694 * the logarithmic phase transition is reached as soon as the axis intercept passes the current primal bound so that the
698 * tangent to check the criterion, the scalar allows for a continuous indicator how far the phase transition is still ahead
717 /* lambda is the scalar to describe the axis intercept as a linear combination of the current and the first primal bound
769 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, "reached rank-1 transition: nodes: %lld, rank-1: %d bound: %9.5g time: %.2f\n",
779 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, "optimal solution found: %lld, bound: %9.5g time: %.2f\n",
789 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, "reached best-estimate transition: nodes: %lld, estimate: %d bound: %9.5g time: %.2f\n",
790 SCIPgetNNodes(scip), eventhdlrdata->nnodesbelowincumbent, SCIPgetPrimalbound(scip), SCIPgetSolvingTime(scip));
799 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, "reached a logarithmic phase transition: %.2f\n", SCIPgetSolvingTime(scip));
810/* determine the solving phase: feasibility phase if no solution was found yet, otherwise improvement phase or proof phase
811 * depending on whether selected transition criterion was already reached and fallback is active or not
825 if( eventhdlrdata->solvingphase == SCIP_SOLVINGPHASE_IMPROVEMENT && transitionPhase3(scip, eventhdlrdata) )
863/** change general solving strategy of SCIP depending on the phase by reading from settings file */
902 SCIPwarningMessage(scip, "Parameter file <%s> not found--keeping settings as before.\n", paramfilename);
909 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, "Reading parameters from file <%s>\n", paramfilename);
917/** fix/unfix relevant solving parameters that should not accidentally be set to default values */
1017/* apply the user-specified phase-based settings: A phase transition invokes the read of phase-specific settings from a file */
1042 if( eventhdlrdata->solvingphase == SCIP_SOLVINGPHASE_PROOF && eventhdlrdata->transitionmethod == 'o' &&
1045 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, "Solution is optimal. Calling user interruption.\n");
1047 /* we call interrupt solve but do not return yet because user-specified settings for the proof phase are applied first */
1052 if( eventhdlrdata->solvingphase == SCIP_SOLVINGPHASE_IMPROVEMENT && eventhdlrdata->userestart1to2 )
1054 else if( eventhdlrdata->solvingphase == SCIP_SOLVINGPHASE_PROOF && eventhdlrdata->userestart2to3 )
1068 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL,"Changed solving phase to phase %d.\n", eventhdlrdata->solvingphase);
1089 SCIPregressionRemoveObservation(eventhdlrdata->regression, eventhdlrdata->lastx, eventhdlrdata->lasty);
1113 /* store that a new best solution was found, but delay the update of node information until a node was solved */
1135 /* if we lost track of exact number of open search nodes, we recompute node information from scratch */
1136 if( eventhdlrdata->newbestsol || eventhdlrdata->nnodesleft + SCIPgetNChildren(scip) != SCIPgetNNodesLeft(scip) )
1156 /* ensure that required tree information was correctly computed; only available in solving stage and at the beginning
1157 * or end of a node solution process because we delay the recomputation of the node information)
1161 (eventhdlrdata->nnodesleft == SCIPgetNNodesLeft(scip) && eventhdlrdata->nnodesbelowincumbent == checkLeavesBelowIncumbent(scip)));
1176 if( !(eventhdlrdata->phaseflags & SCIP_SOLVINGPHASEFLAG_LOG) && checkLogCriterion(scip, eventhdlrdata) )
1181 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, " Log criterion reached after %lld nodes, %.2f sec.\n",
1185 if( !(eventhdlrdata->phaseflags & SCIP_SOLVINGPHASEFLAG_RANK1) && checkRankOneTransition(scip, eventhdlrdata) )
1190 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, " Rank 1 criterion reached after %lld nodes, %.2f sec.\n",
1195 if( !(eventhdlrdata->phaseflags & SCIP_SOLVINGPHASEFLAG_ESTIMATE) && checkEstimateCriterion(scip, eventhdlrdata) )
1200 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, " Estimate criterion reached after %lld nodes, %.2f sec.\n",
1205 if( !(eventhdlrdata->phaseflags & SCIP_SOLVINGPHASEFLAG_OPTIMAL) && checkOptimalSolution(scip, eventhdlrdata) )
1210 SCIPverbMessage(scip, SCIP_VERBLEVEL_NORMAL, NULL, " Optimum reached after %lld nodes, %.2f sec.\n",
1221/* @todo: this code needs to stay disabled as long as the soft limit event handler is not copied, because we save
1282/** solving process deinitialization method of event handler (called before branch and bound process data is freed) */
1310/** collects all parameters that are set to non-default values and stores them in eventhdlrdata */
1392 SCIP_CALL( SCIPcatchEvent(scip, EVENTHDLR_EVENT, eventhdlr, NULL, &eventhdlrdata->eventfilterpos) );
1417 SCIPfreeBlockMemoryArrayNull(scip, &eventhdlrdata->nondefaultparams, eventhdlrdata->nondefaultparamssize);
1437 assert(eventtype != SCIP_EVENTTYPE_NODEFOCUSED || SCIPeventGetNode(event) == SCIPgetCurrentNode(scip));
1487#define DISP_DESC_NNODESBELOWINC "current number of nodes with an estimate better than the current incumbent"
1504 SCIPdispInt(SCIPgetMessagehdlr(scip), file, getNNodesBelowIncumbent(scip), DISP_WIDT_NNODESBELOWINC);
1542 SCIP_CALL( SCIPincludeDisp(scip, DISP_NAME_NRANK1NODES, DISP_DESC_NRANK1NODES, DISP_HEAD_NRANK1NODES, SCIP_DISPSTATUS_OFF,
1543 NULL, NULL, NULL, NULL, NULL, NULL, dispOutputNRank1Nodes, NULL, DISP_WIDT_NRANK1NODES, DISP_PRIO_NRANK1NODES, DISP_POSI_NRANK1NODES,
1545 SCIP_CALL( SCIPincludeDisp(scip, DISP_NAME_NNODESBELOWINC, DISP_DESC_NNODESBELOWINC, DISP_HEAD_NNODESBELOWINC, SCIP_DISPSTATUS_OFF,
1546 NULL, NULL, NULL, NULL, NULL, NULL, dispOutputNnodesbelowinc, NULL, DISP_WIDT_NNODESBELOWINC, DISP_PRIO_NNODESBELOWINC, DISP_POSI_NNODESBELOWINC,
1561 SCIP_CALL( SCIPaddBoolParam(scip, EVENTHDLR_NAME "s/testmode", "should the event handler only determine phase transitions, suppressing settings changes?",
1564 SCIP_CALL( SCIPaddStringParam(scip, EVENTHDLR_NAME "s/feassetname", "settings file for feasibility phase -- precedence over emphasis settings",
1567 SCIP_CALL( SCIPaddStringParam(scip, EVENTHDLR_NAME "s/improvesetname", "settings file for improvement phase -- precedence over emphasis settings",
1570 SCIP_CALL( SCIPaddStringParam(scip, EVENTHDLR_NAME "s/proofsetname", "settings file for proof phase -- precedence over emphasis settings",
1573 SCIP_CALL( SCIPaddLongintParam(scip, EVENTHDLR_NAME "s/nodeoffset", "node offset for rank-1 and estimate transitions", &eventhdlrdata->nodeoffset,
1575 SCIP_CALL( SCIPaddBoolParam(scip, EVENTHDLR_NAME "s/fallback", "should the event handler fall back from optimal phase?",
1578 "transition method: Possible options are 'e'stimate,'l'ogarithmic regression,'o'ptimal-value based,'r'ank-1",
1579 &eventhdlrdata->transitionmethod, FALSE, DEFAULT_TRANSITIONMETHOD, TRANSITIONMETHODS, NULL, NULL) );
1592 SCIP_CALL( SCIPaddRealParam(scip, EVENTHDLR_NAME "s/optimalvalue", "optimal solution value for problem",
1593 &eventhdlrdata->optimalvalue, FALSE, SCIP_INVALID, SCIP_REAL_MIN, SCIP_REAL_MAX, NULL, NULL) );
1596 SCIP_CALL( SCIPaddCharParam(scip, EVENTHDLR_NAME "s/xtype", "x-type for logarithmic regression - (t)ime, (n)odes, (l)p iterations",
1597 &eventhdlrdata->logregression_xtype, FALSE, DEFAULT_LOGREGRESSION_XTYPE, LOGREGRESSION_XTYPES, NULL, NULL) );
static SCIP_Bool checkRankOneTransition(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:664
static SCIP_RETCODE releaseNodeInformation(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_NODE *node)
Definition: event_solvingphase.c:503
static SCIP_DECL_EVENTINIT(eventInitSolvingphase)
Definition: event_solvingphase.c:1357
static SCIP_DECL_EVENTEXEC(eventExecSolvingphase)
Definition: event_solvingphase.c:1425
static SCIP_Bool transitionPhase3(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:753
static SCIP_RETCODE applySolvingPhase(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:1019
static SCIP_Bool checkEstimateCriterion(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:678
SCIP_SOLVINGPHASEFLAG SCIPgetSolvingPhaseFlags(SCIP *scip)
Definition: event_solvingphase.c:1627
static SCIP_RETCODE adaptSolverBehavior(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:989
static SCIP_RETCODE addNodesInformation(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_NODE **nodes, int nnodes)
Definition: event_solvingphase.c:196
static SCIP_Bool checkLogCriterion(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:701
static void testCriteria(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:1168
static SCIP_DECL_SORTPTRCOMP(sortCompTreeinfo)
Definition: event_solvingphase.c:159
static SCIP_Real getX(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:586
static SCIP_DECL_EVENTFREE(eventFreeSolvingphase)
Definition: event_solvingphase.c:1243
SCIP_SOLVINGPHASE SCIPgetSolvingPhase(SCIP *scip)
Definition: event_solvingphase.c:1607
static SCIP_DECL_EVENTINITSOL(eventInitsolSolvingphase)
Definition: event_solvingphase.c:1265
static SCIP_DECL_EVENTEXIT(eventExitSolvingphase)
Definition: event_solvingphase.c:1404
static SCIP_RETCODE collectNondefaultParams(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:1312
static SCIP_DECL_EVENTEXITSOL(eventExitsolSolvingphase)
Definition: event_solvingphase.c:1284
static void releaseNodeFromDepthInfo(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_NODE *node)
Definition: event_solvingphase.c:414
static SCIP_RETCODE fixOrUnfixRelevantParameters(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_Bool fix)
Definition: event_solvingphase.c:919
static void determineSolvingPhase(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:814
static int getNNodesBelowIncumbent(SCIP *scip)
Definition: event_solvingphase.c:304
static void removeNode(SCIP_NODE *node, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:254
SCIP_RETCODE SCIPincludeEventHdlrSolvingphase(SCIP *scip)
Definition: event_solvingphase.c:1510
static SCIP_RETCODE changeEmphasisParameters(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:831
static SCIP_RETCODE createDepthinfo(SCIP *scip, DEPTHINFO **depthinfo)
Definition: event_solvingphase.c:370
static SCIP_DECL_DISPOUTPUT(dispOutputNRank1Nodes)
Definition: event_solvingphase.c:1472
static int checkLeavesBelowIncumbent(SCIP *scip)
Definition: event_solvingphase.c:538
static SCIP_Real getCurrentRegressionTangentAxisIntercept(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:631
static SCIP_RETCODE updateLogRegression(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:1075
static SCIP_RETCODE freeDepthinfo(SCIP *scip, DEPTHINFO **depthinfo)
Definition: event_solvingphase.c:395
static SCIP_RETCODE recomputeNodeInformation(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:323
static SCIP_RETCODE updateDataStructures(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_EVENTTYPE eventtype)
Definition: event_solvingphase.c:1102
static SCIP_RETCODE ensureDepthInfoArraySize(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata, SCIP_NODE *node)
Definition: event_solvingphase.c:458
static SCIP_RETCODE changeParametersUsingSettingsFiles(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:865
static SCIP_Bool checkOptimalSolution(SCIP *scip, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event_solvingphase.c:730
eventhdlr for solving phase dependent parameter adjustment
#define SCIP_SOLVINGPHASEFLAG_OPTIMAL
Definition: event_solvingphase.h:61
#define SCIP_SOLVINGPHASEFLAG_ESTIMATE
Definition: event_solvingphase.h:60
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
Definition: scip_message.c:225
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
Definition: scip_message.c:120
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)
Definition: scip_param.c:111
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)
Definition: scip_param.c:167
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)
Definition: scip_param.c:194
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)
Definition: scip_param.c:139
SCIP_RETCODE SCIPreadParams(SCIP *scip, const char *filename)
Definition: scip_param.c:772
SCIP_RETCODE SCIPsetEmphasis(SCIP *scip, SCIP_PARAMEMPHASIS paramemphasis, SCIP_Bool quiet)
Definition: scip_param.c:882
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)
Definition: scip_param.c:57
void SCIPdispInt(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, int val, int width)
Definition: disp.c:627
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)
Definition: scip_disp.c:55
SCIP_RETCODE SCIPsetEventhdlrInitsol(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTINITSOL((*eventinitsol)))
Definition: scip_event.c:199
SCIP_RETCODE SCIPsetEventhdlrCopy(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTCOPY((*eventcopy)))
Definition: scip_event.c:143
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: scip_event.c:111
SCIP_EVENTHDLR * SCIPfindEventhdlr(SCIP *scip, const char *name)
Definition: scip_event.c:241
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
Definition: event.c:396
SCIP_EVENTHDLRDATA * SCIPeventhdlrGetData(SCIP_EVENTHDLR *eventhdlr)
Definition: event.c:406
SCIP_RETCODE SCIPsetEventhdlrExitsol(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTEXITSOL((*eventexitsol)))
Definition: scip_event.c:213
void SCIPeventhdlrSetData(SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTHDLRDATA *eventhdlrdata)
Definition: event.c:416
SCIP_RETCODE SCIPsetEventhdlrFree(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTFREE((*eventfree)))
Definition: scip_event.c:157
SCIP_RETCODE SCIPsetEventhdlrExit(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTEXIT((*eventexit)))
Definition: scip_event.c:185
SCIP_RETCODE SCIPsetEventhdlrInit(SCIP *scip, SCIP_EVENTHDLR *eventhdlr, SCIP_DECL_EVENTINIT((*eventinit)))
Definition: scip_event.c:171
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
Definition: scip_event.c:293
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
Definition: scip_mem.h:99
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
Definition: scip_mem.h:111
SCIP_Real SCIPgetFirstPrimalBound(SCIP *scip)
Definition: scip_solvingstats.c:1665
SCIP_Longint SCIPgetNDelayedCutoffs(SCIP *scip)
Definition: scip_solvingstats.c:430
SCIP_Longint SCIPgetNLPIterations(SCIP *scip)
Definition: scip_solvingstats.c:503
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:488
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:475
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:436
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
Definition: scip_numerics.c:449
SCIP_RETCODE SCIPgetOpenNodesData(SCIP *scip, SCIP_NODE ***leaves, SCIP_NODE ***children, SCIP_NODE ***siblings, int *nleaves, int *nchildren, int *nsiblings)
Definition: scip_tree.c:398
SCIP_RETCODE SCIPgetChildren(SCIP *scip, SCIP_NODE ***children, int *nchildren)
Definition: scip_tree.c:164
SCIP_RETCODE SCIPgetLeaves(SCIP *scip, SCIP_NODE ***leaves, int *nleaves)
Definition: scip_tree.c:248
SCIP_RETCODE SCIPgetSiblings(SCIP *scip, SCIP_NODE ***siblings, int *nsiblings)
Definition: scip_tree.c:206
void SCIPregressionRemoveObservation(SCIP_REGRESSION *regression, SCIP_Real x, SCIP_Real y)
Definition: misc.c:353
void SCIPregressionAddObservation(SCIP_REGRESSION *regression, SCIP_Real x, SCIP_Real y)
Definition: misc.c:385
SCIP_Real SCIPregressionGetIntercept(SCIP_REGRESSION *regression)
Definition: misc.c:278
int SCIPregressionGetNObservations(SCIP_REGRESSION *regression)
Definition: misc.c:258
SCIP_RETCODE SCIPregressionCreate(SCIP_REGRESSION **regression)
Definition: misc.c:420
SCIP_Real SCIPregressionGetSlope(SCIP_REGRESSION *regression)
Definition: misc.c:268
SCIP_Bool SCIPsortedvecFindPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *val, int len, int *pos)
void SCIPsortedvecInsertPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *keyval, int *len, int *pos)
void SCIPsortedvecDelPosPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int pos, int *len)
Definition: multiprecision.hpp:66
public methods for displaying runtime statistics
public methods for managing events
public methods for message output
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for handling parameter settings
public methods for branch and bound tree
public methods for display handler plugins
public methods for event handler plugins and event handlers
general public methods
public methods for memory management
public methods for message handling
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for solutions
public solving methods
public methods for querying solving statistics
public methods for timing
public methods for the branch-and-bound tree
Definition: event_solvingphase.c:103
Definition: struct_event.h:218
Definition: struct_tree.h:142
Definition: struct_paramset.h:109
Definition: struct_misc.h:256
Definition: struct_scip.h:72