46#define NODESEL_NAME "estimate"
47#define NODESEL_DESC "best estimate search"
48#define NODESEL_STDPRIORITY 200000
49#define NODESEL_MEMSAVEPRIORITY 100
56#define DEFAULT_MINPLUNGEDEPTH -1
57#define DEFAULT_MAXPLUNGEDEPTH -1
58#define DEFAULT_MAXPLUNGEQUOT 0.25
60#define DEFAULT_BESTNODEFREQ 10
61#define DEFAULT_BREADTHFIRSTDEPTH -1
62#define DEFAULT_PLUNGEOFFSET 0
66struct SCIP_NodeselData
76 int breadthfirstdepth;
165 bestnodefreq = (nodeseldata->bestnodefreq == 0 ? INT_MAX : nodeseldata->bestnodefreq);
172 nodeseldata->plungeoffset);
184 minplungedepth = nodeseldata->minplungedepth;
185 maxplungedepth = nodeseldata->maxplungedepth;
186 maxplungequot = nodeseldata->maxplungequot;
187 if( minplungedepth == -1 )
191 minplungedepth += 10;
192 if( maxplungedepth >= 0 )
193 minplungedepth =
MIN(minplungedepth, maxplungedepth);
195 if( maxplungedepth == -1 )
197 maxplungedepth =
MAX(maxplungedepth, minplungedepth);
201 if( plungedepth > maxplungedepth )
204 SCIPdebugMsg(
scip,
"plungedepth: [%d,%d], cur: %d -> abort plunging\n", minplungedepth, maxplungedepth, plungedepth);
227 cutoffbound = lowerbound + 0.2 * (cutoffbound - lowerbound);
230 if( plungedepth < minplungedepth )
235 maxbound = lowerbound + maxplungequot * (cutoffbound - lowerbound);
238 SCIPdebugMsg(
scip,
"plungedepth: [%d,%d], cur: %d, bounds: [%g,%g], maxbound: %g\n",
239 minplungedepth, maxplungedepth, plungedepth, lowerbound, cutoffbound, maxbound);
341 if( depth1 < depth2 )
343 else if( depth1 > depth2 )
376 nodeselSelectEstimate, nodeselCompEstimate, nodeseldata) );
385 "nodeselection/estimate/minplungedepth",
386 "minimal plunging depth, before new best node may be selected (-1 for dynamic setting)",
389 "nodeselection/estimate/maxplungedepth",
390 "maximal plunging depth, before new best node is forced to be selected (-1 for dynamic setting)",
393 "nodeselection/estimate/maxplungequot",
394 "maximal quotient (estimate - lowerbound)/(cutoffbound - lowerbound) where plunging is performed",
397 "nodeselection/estimate/bestnodefreq",
398 "frequency at which the best node instead of the best estimate is selected (0: never)",
401 "nodeselection/estimate/breadthfirstdepth",
402 "depth until breadth-first search is applied",
405 "nodeselection/estimate/plungeoffset",
406 "number of nodes before doing plunging the first time",
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPincludeNodeselEstimate(SCIP *scip)
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 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)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_NODETYPE SCIPnodeGetType(SCIP_NODE *node)
SCIP_Real SCIPnodeGetLowerbound(SCIP_NODE *node)
SCIP_Real SCIPnodeGetEstimate(SCIP_NODE *node)
int SCIPnodeGetDepth(SCIP_NODE *node)
SCIP_RETCODE SCIPincludeNodeselBasic(SCIP *scip, SCIP_NODESEL **nodesel, const char *name, const char *desc, int stdpriority, int memsavepriority, SCIP_DECL_NODESELSELECT((*nodeselselect)), SCIP_DECL_NODESELCOMP((*nodeselcomp)), SCIP_NODESELDATA *nodeseldata)
void SCIPnodeselSetData(SCIP_NODESEL *nodesel, SCIP_NODESELDATA *nodeseldata)
SCIP_RETCODE SCIPsetNodeselFree(SCIP *scip, SCIP_NODESEL *nodesel,)
SCIP_NODESELDATA * SCIPnodeselGetData(SCIP_NODESEL *nodesel)
SCIP_RETCODE SCIPsetNodeselCopy(SCIP *scip, SCIP_NODESEL *nodesel,)
const char * SCIPnodeselGetName(SCIP_NODESEL *nodesel)
SCIP_Longint SCIPgetNSolsFound(SCIP *scip)
int SCIPgetMaxDepth(SCIP *scip)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Longint SCIPgetNStrongbranchLPIterations(SCIP *scip)
SCIP_Real SCIPgetLowerbound(SCIP *scip)
SCIP_Longint SCIPgetNNodeLPIterations(SCIP *scip)
SCIP_Real SCIPgetCutoffbound(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_NODE * SCIPgetBestSibling(SCIP *scip)
SCIP_NODE * SCIPgetBestChild(SCIP *scip)
SCIP_NODE * SCIPgetPrioSibling(SCIP *scip)
int SCIPgetDepth(SCIP *scip)
SCIP_NODE * SCIPgetBestNode(SCIP *scip)
int SCIPgetPlungeDepth(SCIP *scip)
SCIP_NODE * SCIPgetBestboundNode(SCIP *scip)
SCIP_NODE * SCIPgetPrioChild(SCIP *scip)
assert(minobj< SCIPgetCutoffbound(scip))
#define NODESEL_MEMSAVEPRIORITY
#define NODESEL_STDPRIORITY
#define DEFAULT_MAXPLUNGEDEPTH
#define DEFAULT_BESTNODEFREQ
#define DEFAULT_PLUNGEOFFSET
#define DEFAULT_BREADTHFIRSTDEPTH
#define DEFAULT_MINPLUNGEDEPTH
#define DEFAULT_MAXPLUNGEQUOT
node selector for best estimate search
public methods for message output
public methods for node selectors
public methods for branch and bound tree
public methods for memory management
public methods for message handling
public methods for node selector plugins
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for querying solving statistics
public methods for the branch-and-bound tree
#define SCIP_DECL_NODESELCOMP(x)
struct SCIP_Nodesel SCIP_NODESEL
#define SCIP_DECL_NODESELCOPY(x)
#define SCIP_DECL_NODESELSELECT(x)
#define SCIP_DECL_NODESELFREE(x)
struct SCIP_NodeselData SCIP_NODESELDATA
enum SCIP_Retcode SCIP_RETCODE
struct SCIP_Node SCIP_NODE
enum SCIP_NodeType SCIP_NODETYPE