|
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tree.h
Go to the documentation of this file.
22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
64 SCIP_Real estimate /**< estimate for (transformed) objective value of best feasible solution in subtree */
125 /** marks node, that propagation should be applied again the next time, a node of its subtree is focused */
141 /** adds constraint locally to the node and captures it; activates constraint, if node is active;
142 * if a local constraint is added to the root node, it is automatically upgraded into a global constraint
154 /** locally deletes constraint at the given node by disabling its separation, enforcing, and propagation capabilities
167 /** adds bound change with inference information to focus node, child of focus node, or probing node;
250 /** if given value is larger than the node's lower bound, sets the node's lower bound to the new value */
291 /** propagates implications of binary fixings at the given node triggered by the implication graph and the clique table */
397 /** sets the node selector used for sorting the nodes in the priority queue, and resorts the queue if necessary */
416 SCIP_Real cutoffbound /**< cutoff bound: all nodes with lowerbound >= cutoffbound are cut off */
428 SCIP_Bool* initroot /**< pointer to store whether the root LP relaxation has to be initialized */
442 /** calculates the node selection priority for moving the given variable's LP value to the given target value;
451 SCIP_BRANCHDIR branchdir, /**< type of branching that was performed: upwards, downwards, or fixed
457 /** calculates an estimate for the objective of the best feasible solution contained in the subtree after applying the given
473 * the variable is fixed to val (if not SCIP_INVALID) or a well chosen alternative in the current node,
483 * if solution value is equal to one of the bounds and the other bound is infinite, only two child nodes
498 SCIP_Real val, /**< value to branch on or SCIP_INVALID for branching on current LP/pseudo solution. A branching value is required for branching on continuous variables */
499 SCIP_NODE** downchild, /**< pointer to return the left child with variable rounded down, or NULL */
504 /** branches a variable x using the given domain hole; two child nodes will be created (x <= left, x >= right) */
519 SCIP_NODE** downchild, /**< pointer to return the left child with variable rounded down, or NULL */
524 * Branches on variable x such that up to n/2 children are created on each side of the usual branching value.
526 * If n is 2 or the variables local domain is too small for a branching into n pieces, SCIPtreeBranchVar() is called.
527 * The parameters minwidth and widthfactor determine the domain width of the branching variable in the child nodes.
528 * If n is odd, one child with domain width 'width' and having the branching value in the middle is created.
529 * Otherwise, two children with domain width 'width' and being left and right of the branching value are created.
530 * Next further nodes to the left and right are created, where width is multiplied by widthfactor with increasing distance from the first nodes.
531 * The initial width is calculated such that n/2 nodes are created to the left and to the right of the branching value.
532 * If this value is below minwidth, the initial width is set to minwidth, which may result in creating less than n nodes.
534 * Giving a large value for widthfactor results in creating children with small domain when close to the branching value
535 * and large domain when closer to the current variable bounds. That is, setting widthfactor to a very large value and n to 3
536 * results in a ternary branching where the branching variable is mostly fixed in the middle child.
537 * Setting widthfactor to 1.0 results in children where the branching variable always has the same domain width
552 SCIP_Real val, /**< value to branch on or SCIP_INVALID for branching on current LP/pseudo solution.
556 SCIP_Real widthfactor, /**< multiplier for children domain width with increasing distance from val, must be >= 1.0 */
598 * the changes of the probing node of the given probing depth are the last ones that remain active;
613 int probingdepth /**< probing depth of the node in the probing path that should be reactivated */
616 /** switches back from probing to normal operation mode, frees all nodes on the probing path, restores bounds of all
677 /** returns the current probing depth, i.e. the number of probing sub nodes existing in the probing path */
720 /** gets current node of the tree, i.e. the last node in the active path, or NULL if no current node exists */
726 /** gets depth of current node in the tree, i.e. the length of the active path minus 1, or -1 if no current node exists */
738 /** returns the depth of the effective root node (i.e. the first depth level of a node with at least two children) */
752 /* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and
761 #define SCIPtreeIsPathComplete(tree) ((tree)->focusnode == NULL || (tree)->focusnode->depth < (tree)->pathlen)
764 #define SCIPtreeGetProbingDepth(tree) (SCIPtreeGetCurrentDepth(tree) - SCIPnodeGetDepth((tree)->probingroot))
772 #define SCIPtreeGetCurrentNode(tree) ((tree)->pathlen > 0 ? (tree)->path[(tree)->pathlen-1] : NULL)
774 #define SCIPtreeHasCurrentNodeLP(tree) (SCIPtreeProbing(tree) ? (tree)->probingnodehaslp : SCIPtreeHasFocusNodeLP(tree))
781 /** gets the best child of the focus node w.r.t. the node selection priority assigned by the branching rule */
787 /** gets the best sibling of the focus node w.r.t. the node selection priority assigned by the branching rule */
813 /** gets the best node from the tree (child, sibling, or leaf) w.r.t. the node selection strategy */
827 /** gets the node with minimal lower bound of all nodes in the tree (child, sibling, or leaf) */
Definition: struct_nodesel.h:51 SCIP_RETCODE SCIPnodeFree(SCIP_NODE **node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_TREE *tree, SCIP_LP *lp) Definition: tree.c:984 SCIP_RETCODE SCIPtreeCreateProbingNode(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp) Definition: tree.c:5967 SCIP_RETCODE SCIPtreeSetNodesel(SCIP_TREE *tree, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_NODESEL *nodesel) Definition: tree.c:4702 SCIP_RETCODE SCIPnodeDelCons(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_CONS *cons) Definition: tree.c:1523 public methods for branch and bound tree SCIP_NODE * SCIPtreeGetLowerboundNode(SCIP_TREE *tree, SCIP_SET *set) Definition: tree.c:6553 SCIP_RETCODE SCIPnodeCreateChild(SCIP_NODE **node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_Real nodeselprio, SCIP_Real estimate) Definition: tree.c:936 SCIP_RETCODE SCIPtreeBranchVar(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Real val, SCIP_NODE **downchild, SCIP_NODE **eqchild, SCIP_NODE **upchild) Definition: tree.c:5003 SCIP_NODE * SCIPtreeGetBestChild(SCIP_TREE *tree, SCIP_SET *set) Definition: tree.c:6417 void SCIPtreeSetFocusNodeLP(SCIP_TREE *tree, SCIP_Bool solvelp) Definition: tree.c:7165 Definition: struct_var.h:196 Definition: struct_conflict.h:88 SCIP_NODE * SCIPtreeGetBestNode(SCIP_TREE *tree, SCIP_SET *set) Definition: tree.c:6481 Definition: struct_primal.h:36 Definition: struct_event.h:169 Definition: struct_message.h:35 type definitions for global SCIP settings SCIP_RETCODE SCIPtreeEndProbing(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter) Definition: tree.c:6223 SCIP_RETCODE SCIPtreeCreateRoot(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: tree.c:4570 SCIP_RETCODE SCIPtreeLoadLPState(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: tree.c:3297 Definition: struct_prob.h:38 SCIP_RETCODE SCIPtreeCreate(SCIP_TREE **tree, SCIP_SET *set, SCIP_NODESEL *nodesel) Definition: tree.c:4411 SCIP_RETCODE SCIPnodeAddBoundchg(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype, SCIP_Bool probingchange) Definition: tree.c:1892 type definitions for branching rules Definition: struct_tree.h:119 type definitions for problem statistics SCIP_RETCODE SCIPtreeCutoff(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Real cutoffbound) Definition: tree.c:4730 SCIP_Bool SCIPtreeIsFocusNodeLPConstructed(SCIP_TREE *tree) Definition: tree.c:7176 type definitions for LP management Definition: struct_set.h:55 void SCIPnodeMarkPropagated(SCIP_NODE *node, SCIP_TREE *tree) Definition: tree.c:1155 SCIP_Real SCIPtreeCalcNodeselPriority(SCIP_TREE *tree, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BRANCHDIR branchdir, SCIP_Real targetvalue) Definition: tree.c:4794 SCIP_RETCODE SCIPnodeAddBoundinfer(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype, SCIP_CONS *infercons, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool probingchange) Definition: tree.c:1641 SCIP_NODE * SCIPtreeGetBestSibling(SCIP_TREE *tree, SCIP_SET *set) Definition: tree.c:6444 SCIP_RETCODE SCIPtreeLoadLP(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_Bool *initroot) Definition: tree.c:3169 Definition: struct_cons.h:36 SCIP_RETCODE SCIPnodePropagateImplics(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_Bool *cutoff) Definition: tree.c:2274 void SCIPnodeUpdateLowerbound(SCIP_NODE *node, SCIP_STAT *stat, SCIP_SET *set, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Real newbound) Definition: tree.c:2168 datastructures for branch and bound tree type definitions for problem variables type definitions for managing events Definition: struct_prop.h:36 void SCIPnodePropagateAgain(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree) Definition: tree.c:1129 SCIP_RETCODE SCIPnodeFocus(SCIP_NODE **node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_CONFLICT *conflict, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_Bool *cutoff, SCIP_Bool exitsolve) Definition: tree.c:4011 SCIP_RETCODE SCIPnodeAddHolechg(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Real left, SCIP_Real right, SCIP_Bool probingchange, SCIP_Bool *added) Definition: tree.c:2042 SCIP_RETCODE SCIPtreeStartProbing(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp, SCIP_Bool strongbranching) Definition: tree.c:5918 int SCIPtreeGetEffectiveRootDepth(SCIP_TREE *tree) Definition: tree.c:7252 SCIP_RETCODE SCIPtreeFreePresolvingRoot(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_CONFLICT *conflict, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue) Definition: tree.c:4652 SCIP_Real SCIPtreeGetAvgLowerbound(SCIP_TREE *tree, SCIP_Real cutoffbound) Definition: tree.c:6605 SCIP_RETCODE SCIPtreeFree(SCIP_TREE **tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: tree.c:4473 void SCIPnodeSetEstimate(SCIP_NODE *node, SCIP_SET *set, SCIP_Real newestimate) Definition: tree.c:2260 type definitions for branch and bound tree SCIP_RETCODE SCIPtreeBranchVarHole(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Real left, SCIP_Real right, SCIP_NODE **downchild, SCIP_NODE **upchild) Definition: tree.c:5328 SCIP_RETCODE SCIPnodeReleaseLPIState(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_LP *lp) Definition: tree.c:261 SCIP_RETCODE SCIPnodeCaptureLPIState(SCIP_NODE *node, int nuses) Definition: tree.c:233 type definitions for storing and manipulating the main problem SCIP_RETCODE SCIPtreeBacktrackProbing(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int probingdepth) Definition: tree.c:6193 type definitions for propagators SCIP_RETCODE SCIPtreeCreatePresolvingRoot(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_CONFLICT *conflict, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue) Definition: tree.c:4614 Definition: struct_lp.h:251 SCIP_RETCODE SCIPtreeMarkProbingNodeHasLP(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_LP *lp) Definition: tree.c:6059 SCIP_RETCODE SCIPnodeAddCons(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_CONS *cons) Definition: tree.c:1484 SCIP_RETCODE SCIPnodeAddHoleinfer(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Real left, SCIP_Real right, SCIP_CONS *infercons, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool probingchange, SCIP_Bool *added) Definition: tree.c:1919 void SCIPnodeCutoff(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree) Definition: tree.c:1104 SCIP_RETCODE SCIPnodeUpdateLowerboundLP(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp) Definition: tree.c:2208 Definition: struct_stat.h:44 Definition: struct_tree.h:160 type definitions for collecting primal CIP solutions and primal informations SCIP_RETCODE SCIPtreeLoadProbingLPState(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: tree.c:5986 common defines and data types used in all packages of SCIP Definition: struct_event.h:204 void SCIPchildChgNodeselPrio(SCIP_TREE *tree, SCIP_NODE *child, SCIP_Real priority) Definition: tree.c:2242 SCIP_RETCODE SCIPtreeBranchVarNary(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Real val, int n, SCIP_Real minwidth, SCIP_Real widthfactor, int *nchildren) Definition: tree.c:5469 Definition: struct_branch.h:36 SCIP_Real SCIPtreeGetLowerbound(SCIP_TREE *tree, SCIP_SET *set) Definition: tree.c:6515 SCIP_RETCODE SCIPtreeClear(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp) Definition: tree.c:4510 SCIP_Real SCIPtreeCalcChildEstimate(SCIP_TREE *tree, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_Real targetvalue) Definition: tree.c:4944 memory allocation routines |