Scippy

    SCIP

    Solving Constraint Integer Programs

    tree.h
    Go to the documentation of this file.
    1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    2/* */
    3/* This file is part of the program and library */
    4/* SCIP --- Solving Constraint Integer Programs */
    5/* */
    6/* Copyright (c) 2002-2025 Zuse Institute Berlin (ZIB) */
    7/* */
    8/* Licensed under the Apache License, Version 2.0 (the "License"); */
    9/* you may not use this file except in compliance with the License. */
    10/* You may obtain a copy of the License at */
    11/* */
    12/* http://www.apache.org/licenses/LICENSE-2.0 */
    13/* */
    14/* Unless required by applicable law or agreed to in writing, software */
    15/* distributed under the License is distributed on an "AS IS" BASIS, */
    16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
    17/* See the License for the specific language governing permissions and */
    18/* limitations under the License. */
    19/* */
    20/* You should have received a copy of the Apache-2.0 license */
    21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
    22/* */
    23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    24
    25/**@file tree.h
    26 * @ingroup INTERNALAPI
    27 * @brief internal methods for branch and bound tree
    28 * @author Tobias Achterberg
    29 * @author Timo Berthold
    30 */
    31
    32/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    33
    34#ifndef __SCIP_TREE_H__
    35#define __SCIP_TREE_H__
    36
    37
    39#include "scip/def.h"
    40#include "scip/nodesel.h"
    41#include "scip/type_set.h"
    42#include "scip/type_stat.h"
    43#include "scip/type_cons.h"
    44#include "scip/type_event.h"
    45#include "scip/type_lp.h"
    46#include "scip/type_lpexact.h"
    47#include "scip/type_var.h"
    48#include "scip/type_prob.h"
    49#include "scip/type_primal.h"
    50#include "scip/type_tree.h"
    51#include "scip/type_reopt.h"
    52#include "scip/type_branch.h"
    53#include "scip/type_prop.h"
    54#include "scip/type_implics.h"
    55#include "scip/type_history.h"
    57#include "scip/pub_tree.h"
    58
    59#ifndef NDEBUG
    60#include "scip/struct_tree.h"
    61#endif
    62
    63#ifdef __cplusplus
    64extern "C" {
    65#endif
    66
    67
    68/*
    69 * Node methods
    70 */
    71
    72/** creates a child node of the focus node */
    74 SCIP_NODE** node, /**< pointer to node data structure */
    75 BMS_BLKMEM* blkmem, /**< block memory */
    76 SCIP_SET* set, /**< global SCIP settings */
    77 SCIP_STAT* stat, /**< problem statistics */
    78 SCIP_TREE* tree, /**< branch and bound tree */
    79 SCIP_Real nodeselprio, /**< node selection priority of new node */
    80 SCIP_Real estimate /**< estimate for (transformed) objective value of best feasible solution in subtree */
    81 );
    82
    83/** frees node and inactive path iteratively */
    85 SCIP_NODE** node, /**< node data */
    86 BMS_BLKMEM* blkmem, /**< block memory buffer */
    87 SCIP_SET* set, /**< global SCIP settings */
    88 SCIP_STAT* stat, /**< problem statistics */
    89 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    90 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    91 SCIP_TREE* tree, /**< branch and bound tree */
    92 SCIP_LP* lp /**< current LP data */
    93 );
    94
    95/** increases the reference counter of the LP state in the fork or subroot node */
    97 SCIP_NODE* node, /**< fork/subroot node */
    98 int nuses /**< number to add to the usage counter */
    99 );
    100
    101/** decreases the reference counter of the LP state in the fork or subroot node */
    103 SCIP_NODE* node, /**< fork/subroot node */
    104 BMS_BLKMEM* blkmem, /**< block memory buffers */
    105 SCIP_LP* lp /**< current LP data */
    106 );
    107
    108/** installs a child, a sibling, or a leaf node as the new focus node */
    110 SCIP_NODE** node, /**< pointer to node to focus (or NULL to remove focus); the node
    111 * is freed, if it was cut off due to a cut off subtree */
    112 BMS_BLKMEM* blkmem, /**< block memory */
    113 SCIP_SET* set, /**< global SCIP settings */
    114 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    115 SCIP_STAT* stat, /**< problem statistics */
    116 SCIP_PROB* transprob, /**< transformed problem */
    117 SCIP_PROB* origprob, /**< original problem */
    118 SCIP_PRIMAL* primal, /**< primal data */
    119 SCIP_TREE* tree, /**< branch and bound tree */
    120 SCIP_REOPT* reopt, /**< reoptimization data structure */
    121 SCIP_LP* lp, /**< current LP data */
    122 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    123 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    124 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
    125 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    126 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    127 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    128 SCIP_Bool* cutoff, /**< pointer to store whether the given node can be cut off */
    129 SCIP_Bool postponed, /**< was the current focus node postponed? */
    130 SCIP_Bool exitsolve /**< are we in exitsolve stage, so we only need to loose the children */
    131 );
    132
    133/** cuts off node and whole sub tree from branch and bound tree */
    135 SCIP_NODE* node, /**< node that should be cut off */
    136 SCIP_SET* set, /**< global SCIP settings */
    137 SCIP_STAT* stat, /**< problem statistics */
    138 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    139 SCIP_TREE* tree, /**< branch and bound tree */
    140 SCIP_PROB* transprob, /**< transformed problem after presolve */
    141 SCIP_PROB* origprob, /**< original problem */
    142 SCIP_REOPT* reopt, /**< reoptimization data structure */
    143 SCIP_LP* lp, /**< current LP */
    144 BMS_BLKMEM* blkmem /**< block memory */
    145 );
    146
    147/** marks node, that propagation should be applied again the next time, a node of its subtree is focused */
    149 SCIP_NODE* node, /**< node that should be propagated again */
    150 SCIP_SET* set, /**< global SCIP settings */
    151 SCIP_STAT* stat, /**< problem statistics */
    152 SCIP_TREE* tree /**< branch and bound tree */
    153 );
    154
    155/** marks node, that it is completely propagated in the current repropagation subtree level */
    157 SCIP_NODE* node, /**< node that should be propagated again */
    158 SCIP_TREE* tree /**< branch and bound tree */
    159 );
    160
    161/** adds constraint locally to the node and captures it; activates constraint, if node is active;
    162 * if a local constraint is added to the root node, it is automatically upgraded into a global constraint
    163 */
    165 SCIP_NODE* node, /**< node to add constraint to */
    166 BMS_BLKMEM* blkmem, /**< block memory */
    167 SCIP_SET* set, /**< global SCIP settings */
    168 SCIP_STAT* stat, /**< problem statistics */
    169 SCIP_TREE* tree, /**< branch and bound tree */
    170 SCIP_CONS* cons /**< constraint to add */
    171 );
    172
    173/** locally deletes constraint at the given node by disabling its separation, enforcing, and propagation capabilities
    174 * at the node; captures constraint; disables constraint, if node is active
    175 */
    177 SCIP_NODE* node, /**< node to add constraint to */
    178 BMS_BLKMEM* blkmem, /**< block memory */
    179 SCIP_SET* set, /**< global SCIP settings */
    180 SCIP_STAT* stat, /**< problem statistics */
    181 SCIP_TREE* tree, /**< branch and bound tree */
    182 SCIP_CONS* cons /**< constraint to locally delete */
    183 );
    184
    185/** return all bound changes on non-continuous variables based on constraint and propagator propagation
    186 *
    187 * Stop saving the bound changes when a propagation based on a dual information is reached.
    188 */
    190 SCIP_NODE* node, /**< node */
    191 SCIP_VAR** vars, /**< array of variables on which propagation triggers a bound change */
    192 SCIP_Real* varbounds, /**< array of bounds set by propagation */
    193 SCIP_BOUNDTYPE* varboundtypes, /**< array of boundtypes set by propagation */
    194 int* npropvars, /**< number of variables on which propagation triggers a bound change
    195 * if this is larger than the array size, arrays should be reallocated and method
    196 * should be called again */
    197 int propvarssize /**< available slots in arrays */
    198 );
    199
    200/** return bound changes on non-continuous variables based on constraint and propagator propagation
    201 *
    202 * Start saving the bound changes when a propagation based on a dual information is reached.
    203 *
    204 * @note Currently, we can only detect bound changes based in dual information if they arise from strong branching.
    205 */
    207 SCIP_NODE* node, /**< node */
    208 SCIP_VAR** vars, /**< array where to store variables with bound changes */
    209 SCIP_Real* varbounds, /**< array where to store changed bounds */
    210 SCIP_BOUNDTYPE* varboundtypes, /**< array where to store type of changed bound*/
    211 int* nvars, /**< buffer to store number of bound changes;
    212 * if this is larger than varssize, arrays should be reallocated and method
    213 * should be called again */
    214 int varssize /**< available slots in provided arrays */
    215 );
    216
    217/** adds bound change with inference information to focus node, child of focus node, or probing node;
    218 * if possible, adjusts bound to integral value;
    219 * at most one of infercons and inferprop may be non-NULL
    220 */
    222 SCIP_NODE* node, /**< node to add bound change to */
    223 BMS_BLKMEM* blkmem, /**< block memory */
    224 SCIP_SET* set, /**< global SCIP settings */
    225 SCIP_STAT* stat, /**< problem statistics */
    226 SCIP_PROB* transprob, /**< transformed problem after presolve */
    227 SCIP_PROB* origprob, /**< original problem */
    228 SCIP_TREE* tree, /**< branch and bound tree */
    229 SCIP_REOPT* reopt, /**< reoptimization data structure */
    230 SCIP_LP* lp, /**< current LP data */
    231 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    232 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    233 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    234 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    235 SCIP_VAR* var, /**< variable to change the bounds for */
    236 SCIP_Real newbound, /**< new value for bound */
    237 SCIP_BOUNDTYPE boundtype, /**< type of bound: lower or upper bound */
    238 SCIP_CONS* infercons, /**< constraint that deduced the bound change, or NULL */
    239 SCIP_PROP* inferprop, /**< propagator that deduced the bound change, or NULL */
    240 int inferinfo, /**< user information for inference to help resolving the conflict */
    241 SCIP_Bool probingchange /**< is the bound change a temporary setting due to probing? */
    242 );
    243
    244/** adds exact bound change with inference information to focus node, child of focus node, or probing node;
    245 * if possible, adjusts bound to integral value;
    246 * at most one of infercons and inferprop may be non-NULL
    247 */
    249 SCIP_NODE* node, /**< node to add bound change to */
    250 BMS_BLKMEM* blkmem, /**< block memory */
    251 SCIP_SET* set, /**< global SCIP settings */
    252 SCIP_STAT* stat, /**< problem statistics */
    253 SCIP_PROB* transprob, /**< transformed problem after presolve */
    254 SCIP_PROB* origprob, /**< original problem */
    255 SCIP_TREE* tree, /**< branch and bound tree */
    256 SCIP_REOPT* reopt, /**< reoptimization data structure */
    257 SCIP_LPEXACT* lpexact, /**< current LP data */
    258 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    259 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    260 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    261 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    262 SCIP_VAR* var, /**< variable to change the bounds for */
    263 SCIP_RATIONAL* newbound, /**< new value for bound */
    264 SCIP_BOUNDTYPE boundtype, /**< type of bound: lower or upper bound */
    265 SCIP_CONS* infercons, /**< constraint that deduced the bound change, or NULL */
    266 SCIP_PROP* inferprop, /**< propagator that deduced the bound change, or NULL */
    267 int inferinfo, /**< user information for inference to help resolving the conflict */
    268 SCIP_Bool probingchange /**< is the bound change a temporary setting due to probing? */
    269 );
    270
    271/** adds bound change to focus node, or child of focus node, or probing node;
    272 * if possible, adjusts bound to integral value
    273 */
    275 SCIP_NODE* node, /**< node to add bound change to */
    276 BMS_BLKMEM* blkmem, /**< block memory */
    277 SCIP_SET* set, /**< global SCIP settings */
    278 SCIP_STAT* stat, /**< problem statistics */
    279 SCIP_PROB* transprob, /**< transformed problem after presolve */
    280 SCIP_PROB* origprob, /**< original problem */
    281 SCIP_TREE* tree, /**< branch and bound tree */
    282 SCIP_REOPT* reopt, /**< reoptimization data structure */
    283 SCIP_LP* lp, /**< current LP data */
    284 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    285 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    286 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    287 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    288 SCIP_VAR* var, /**< variable to change the bounds for */
    289 SCIP_Real newbound, /**< new value for bound */
    290 SCIP_BOUNDTYPE boundtype, /**< type of bound: lower or upper bound */
    291 SCIP_Bool probingchange /**< is the bound change a temporary setting due to probing? */
    292 );
    293
    294/** adds exact bound change to focus node, or child of focus node, or probing node;
    295 * if possible, adjusts bound to integral value
    296 */
    298 SCIP_NODE* node, /**< node to add bound change to */
    299 BMS_BLKMEM* blkmem, /**< block memory */
    300 SCIP_SET* set, /**< global SCIP settings */
    301 SCIP_STAT* stat, /**< problem statistics */
    302 SCIP_PROB* transprob, /**< transformed problem after presolve */
    303 SCIP_PROB* origprob, /**< original problem */
    304 SCIP_TREE* tree, /**< branch and bound tree */
    305 SCIP_REOPT* reopt, /**< reoptimization data structure */
    306 SCIP_LPEXACT* lpexact, /**< current LP data */
    307 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    308 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    309 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    310 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    311 SCIP_VAR* var, /**< variable to change the bounds for */
    312 SCIP_RATIONAL* newbound, /**< new value for bound */
    313 SCIP_BOUNDTYPE boundtype, /**< type of bound: lower or upper bound */
    314 SCIP_Bool probingchange /**< is the bound change a temporary setting due to probing? */
    315 );
    316
    317/** adds hole with inference information to focus node, child of focus node, or probing node;
    318 * if possible, adjusts bound to integral value;
    319 * at most one of infercons and inferprop may be non-NULL
    320 */
    322 SCIP_NODE* node, /**< node to add bound change to */
    323 BMS_BLKMEM* blkmem, /**< block memory */
    324 SCIP_SET* set, /**< global SCIP settings */
    325 SCIP_STAT* stat, /**< problem statistics */
    326 SCIP_TREE* tree, /**< branch and bound tree */
    327 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    328 SCIP_VAR* var, /**< variable to change the bounds for */
    329 SCIP_Real left, /**< left bound of open interval defining the hole (left,right) */
    330 SCIP_Real right, /**< right bound of open interval defining the hole (left,right) */
    331 SCIP_CONS* infercons, /**< constraint that deduced the bound change, or NULL */
    332 SCIP_PROP* inferprop, /**< propagator that deduced the bound change, or NULL */
    333 int inferinfo, /**< user information for inference to help resolving the conflict */
    334 SCIP_Bool probingchange, /**< is the bound change a temporary setting due to probing? */
    335 SCIP_Bool* added /**< pointer to store whether the hole was added, or NULL */
    336 );
    337
    338/** adds hole change to focus node, or child of focus node */
    340 SCIP_NODE* node, /**< node to add bound change to */
    341 BMS_BLKMEM* blkmem, /**< block memory */
    342 SCIP_SET* set, /**< global SCIP settings */
    343 SCIP_STAT* stat, /**< problem statistics */
    344 SCIP_TREE* tree, /**< branch and bound tree */
    345 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    346 SCIP_VAR* var, /**< variable to change the bounds for */
    347 SCIP_Real left, /**< left bound of open interval defining the hole (left,right) */
    348 SCIP_Real right, /**< right bound of open interval defining the hole (left,right) */
    349 SCIP_Bool probingchange, /**< is the bound change a temporary setting due to probing? */
    350 SCIP_Bool* added /**< pointer to store whether the hole was added, or NULL */
    351 );
    352
    353/** if given value is larger than the node's lower bound, sets the node's lower bound to the new value */
    355 SCIP_NODE* node, /**< node to update lower bound for */
    356 SCIP_STAT* stat, /**< problem statistics */
    357 SCIP_SET* set, /**< global SCIP settings */
    358 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    359 SCIP_TREE* tree, /**< branch and bound tree */
    360 SCIP_PROB* transprob, /**< transformed problem data */
    361 SCIP_PROB* origprob, /**< original problem */
    362 SCIP_Real newbound, /**< new lower bound for the node (if it's larger than the old one) */
    363 SCIP_RATIONAL* newboundexact /**< new exact lower bound (or NULL if not needed) */
    364 );
    365
    366/** updates lower bound of node using lower bound of LP */
    368 SCIP_NODE* node, /**< node to set lower bound for */
    369 SCIP_SET* set, /**< global SCIP settings */
    370 SCIP_STAT* stat, /**< problem statistics */
    371 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    372 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    373 SCIP_TREE* tree, /**< branch and bound tree */
    374 SCIP_PROB* transprob, /**< transformed problem after presolve */
    375 SCIP_PROB* origprob, /**< original problem */
    376 SCIP_LP* lp /**< LP data */
    377 );
    378
    379/** change the node selection priority of the given child */
    381 SCIP_TREE* tree, /**< branch and bound tree */
    382 SCIP_NODE* child, /**< child to update the node selection priority */
    383 SCIP_Real priority /**< node selection priority value */
    384 );
    385
    386
    387/** sets the node's estimated bound to the new value */
    389 SCIP_NODE* node, /**< node to update lower bound for */
    390 SCIP_SET* set, /**< global SCIP settings */
    391 SCIP_Real newestimate /**< new estimated bound for the node */
    392 );
    393
    394/** propagates implications of binary fixings at the given node triggered by the implication graph and the clique table */
    396 SCIP_NODE* node, /**< node to propagate implications on */
    397 BMS_BLKMEM* blkmem, /**< block memory */
    398 SCIP_SET* set, /**< global SCIP settings */
    399 SCIP_STAT* stat, /**< problem statistics */
    400 SCIP_PROB* transprob, /**< transformed problem after presolve */
    401 SCIP_PROB* origprob, /**< original problem */
    402 SCIP_TREE* tree, /**< branch and bound tree */
    403 SCIP_REOPT* reopt, /**< reoptimization data structure */
    404 SCIP_LP* lp, /**< current LP data */
    405 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    406 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    407 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    408 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    409 SCIP_Bool* cutoff /**< pointer to store whether the node can be cut off */
    410 );
    411
    412/** returns all bound changes based on dual information.
    413 *
    414 * currently, this methods works only for bound changes made by strong branching on binary variables. we need this
    415 * method to ensure optimality within reoptimization.
    416 *
    417 * since the bound changes made by strong branching are stored as SCIP_BOUNDCHGTYPE_CONSINFER or SCIP_BOUNDCHGTYPE_PROPINFER
    418 * with no constraint or propagator, resp., we are are interested in bound changes with these attributes.
    419 *
    420 * all bound changes of type SCIP_BOUNDCHGTYPE_BRANCHING are stored in the beginning of the bound change array, afterwards,
    421 * we can find the other two types. thus, we start the search at the end of the list and stop when reaching the first
    422 * bound change of type SCIP_BOUNDCHGTYPE_BRANCHING.
    423 */
    425 SCIP_NODE* node, /**< node data */
    426 SCIP_VAR** vars, /**< array of variables on which the bound change is based on dual information */
    427 SCIP_Real* bounds, /**< array of bounds which are based on dual information */
    428 SCIP_BOUNDTYPE* boundtypes, /**< array of boundtypes which are based on dual information */
    429 int* nvars, /**< number of variables on which the bound change is based on dual information
    430 * if this is larger than the array size, arrays should be reallocated and method
    431 * should be called again */
    432 int varssize /**< available slots in arrays */
    433 );
    434
    435/** returns the number of bound changes based on dual information.
    436 *
    437 * currently, this methods works only for bound changes made by strong branching on binary variables. we need this
    438 * method to ensure optimality within reoptimization.
    439 *
    440 * since the bound changes made by strong branching are stored as SCIP_BOUNDCHGTYPE_CONSINFER or SCIP_BOUNDCHGTYPE_PROPINFER
    441 * with no constraint or propagator, resp., we are are interested in bound changes with these attributes.
    442 *
    443 * all bound changes of type SCIP_BOUNDCHGTYPE_BRANCHING are stored in the beginning of the bound change array, afterwards,
    444 * we can find the other two types. thus, we start the search at the end of the list and stop when reaching the first
    445 * bound change of type SCIP_BOUNDCHGTYPE_BRANCHING.
    446 */
    448 SCIP_NODE* node
    449 );
    450
    451/*
    452 * Tree methods
    453 */
    454
    455/** creates an initialized tree data structure */
    457 SCIP_TREE** tree, /**< pointer to tree data structure */
    458 BMS_BLKMEM* blkmem, /**< block memory buffers */
    459 SCIP_SET* set, /**< global SCIP settings */
    460 SCIP_NODESEL* nodesel /**< node selector to use for sorting leaves in the priority queue */
    461 );
    462
    463/** frees tree data structure */
    465 SCIP_TREE** tree, /**< pointer to tree data structure */
    466 BMS_BLKMEM* blkmem, /**< block memory buffers */
    467 SCIP_SET* set, /**< global SCIP settings */
    468 SCIP_STAT* stat, /**< problem statistics */
    469 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    470 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    471 SCIP_LP* lp /**< current LP data */
    472 );
    473
    474/** clears and resets tree data structure and deletes all nodes */
    476 SCIP_TREE* tree, /**< tree data structure */
    477 BMS_BLKMEM* blkmem, /**< block memory buffers */
    478 SCIP_SET* set, /**< global SCIP settings */
    479 SCIP_STAT* stat, /**< problem statistics */
    480 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    481 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    482 SCIP_LP* lp /**< current LP data */
    483 );
    484
    485/** creates the root node of the tree and puts it into the leaves queue */
    487 SCIP_TREE* tree, /**< tree data structure */
    488 SCIP_REOPT* reopt, /**< reoptimization data structure */
    489 BMS_BLKMEM* blkmem, /**< block memory buffers */
    490 SCIP_SET* set, /**< global SCIP settings */
    491 SCIP_STAT* stat, /**< problem statistics */
    492 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    493 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    494 SCIP_LP* lp /**< current LP data */
    495 );
    496
    497/** creates a temporary presolving root node of the tree and installs it as focus node */
    499 SCIP_TREE* tree, /**< tree data structure */
    500 SCIP_REOPT* reopt, /**< reoptimization data structure */
    501 BMS_BLKMEM* blkmem, /**< block memory buffers */
    502 SCIP_SET* set, /**< global SCIP settings */
    503 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    504 SCIP_STAT* stat, /**< problem statistics */
    505 SCIP_PROB* transprob, /**< transformed problem */
    506 SCIP_PROB* origprob, /**< original problem */
    507 SCIP_PRIMAL* primal, /**< primal data */
    508 SCIP_LP* lp, /**< current LP data */
    509 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    510 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    511 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
    512 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    513 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    514 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    515 );
    516
    517/** frees the temporary presolving root and resets tree data structure */
    519 SCIP_TREE* tree, /**< tree data structure */
    520 SCIP_REOPT* reopt, /**< reoptimization data structure */
    521 BMS_BLKMEM* blkmem, /**< block memory buffers */
    522 SCIP_SET* set, /**< global SCIP settings */
    523 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    524 SCIP_STAT* stat, /**< problem statistics */
    525 SCIP_PROB* transprob, /**< transformed problem */
    526 SCIP_PROB* origprob, /**< original problem */
    527 SCIP_PRIMAL* primal, /**< primal data */
    528 SCIP_LP* lp, /**< current LP data */
    529 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    530 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    531 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
    532 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    533 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    534 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    535 );
    536
    537/** returns the node selector associated with the given node priority queue */
    539 SCIP_TREE* tree /**< branch and bound tree */
    540 );
    541
    542/** sets the node selector used for sorting the nodes in the priority queue, and resorts the queue if necessary */
    544 SCIP_TREE* tree, /**< branch and bound tree */
    545 SCIP_SET* set, /**< global SCIP settings */
    546 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    547 SCIP_STAT* stat, /**< problem statistics */
    548 SCIP_NODESEL* nodesel /**< node selector to use for sorting the nodes in the queue */
    549 );
    550
    551/** cuts off nodes with lower bound not better than given upper bound */
    553 SCIP_TREE* tree, /**< branch and bound tree */
    554 SCIP_REOPT* reopt, /**< reoptimization data structure */
    555 BMS_BLKMEM* blkmem, /**< block memory */
    556 SCIP_SET* set, /**< global SCIP settings */
    557 SCIP_STAT* stat, /**< dynamic problem statistics */
    558 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    559 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    560 SCIP_LP* lp, /**< current LP data */
    561 SCIP_Real cutoffbound /**< cutoff bound: all nodes with lowerbound >= cutoffbound are cut off */
    562 );
    563
    564/** constructs the LP relaxation of the focus node */
    566 SCIP_TREE* tree, /**< branch and bound tree */
    567 BMS_BLKMEM* blkmem, /**< block memory */
    568 SCIP_SET* set, /**< global SCIP settings */
    569 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    570 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    571 SCIP_LP* lp, /**< current LP data */
    572 SCIP_Bool* initroot /**< pointer to store whether the root LP relaxation has to be initialized */
    573 );
    574
    575/** loads LP state for fork/subroot of the focus node */
    577 SCIP_TREE* tree, /**< branch and bound tree */
    578 BMS_BLKMEM* blkmem, /**< block memory buffers */
    579 SCIP_SET* set, /**< global SCIP settings */
    580 SCIP_PROB* prob, /**< problem data */
    581 SCIP_STAT* stat, /**< dynamic problem statistics */
    582 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    583 SCIP_LP* lp /**< current LP data */
    584 );
    585
    586/** calculates the node selection priority for moving the given variable's LP value to the given target value;
    587 * this node selection priority can be given to the SCIPcreateChild() call
    588 */
    590 SCIP_TREE* tree, /**< branch and bound tree */
    591 SCIP_SET* set, /**< global SCIP settings */
    592 SCIP_STAT* stat, /**< dynamic problem statistics */
    593 SCIP_VAR* var, /**< variable, of which the branching factor should be applied, or NULL */
    594 SCIP_BRANCHDIR branchdir, /**< type of branching that was performed: upwards, downwards, or fixed
    595 * fixed should only be used, when both bounds changed
    596 */
    597 SCIP_Real targetvalue /**< new value of the variable in the child node */
    598 );
    599
    600/** calculates an estimate for the objective of the best feasible solution contained in the subtree after applying the given
    601 * branching; this estimate can be given to the SCIPcreateChild() call
    602 */
    604 SCIP_TREE* tree, /**< branch and bound tree */
    605 SCIP_SET* set, /**< global SCIP settings */
    606 SCIP_STAT* stat, /**< dynamic problem statistics */
    607 SCIP_VAR* var, /**< variable, of which the branching factor should be applied, or NULL */
    608 SCIP_Real targetvalue /**< new value of the variable in the child node */
    609 );
    610
    611/** branches on a variable x
    612 * if x is a continuous variable, then two child nodes will be created
    613 * (x <= x', x >= x')
    614 * but if the bounds of x are such that their relative difference is smaller than epsilon,
    615 * the variable is fixed to val (if not SCIP_INVALID) or a well chosen alternative in the current node,
    616 * i.e., no children are created
    617 * if x is not a continuous variable, then:
    618 * if solution value x' is fractional, two child nodes will be created
    619 * (x <= floor(x'), x >= ceil(x')),
    620 * if solution value is integral, the x' is equal to lower or upper bound of the branching
    621 * variable and the bounds of x are finite, then two child nodes will be created
    622 * (x <= x", x >= x"+1 with x" = floor((lb + ub)/2)),
    623 * otherwise (up to) three child nodes will be created
    624 * (x <= x'-1, x == x', x >= x'+1)
    625 * if solution value is equal to one of the bounds and the other bound is infinite, only two child nodes
    626 * will be created (the third one would be infeasible anyway)
    627 */
    629 SCIP_TREE* tree, /**< branch and bound tree */
    630 SCIP_REOPT* reopt, /**< reoptimization data structure */
    631 BMS_BLKMEM* blkmem, /**< block memory */
    632 SCIP_SET* set, /**< global SCIP settings */
    633 SCIP_STAT* stat, /**< problem statistics data */
    634 SCIP_PROB* transprob, /**< transformed problem after presolve */
    635 SCIP_PROB* origprob, /**< original problem */
    636 SCIP_LP* lp, /**< current LP data */
    637 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    638 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    639 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    640 SCIP_VAR* var, /**< variable to branch on */
    641 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 */
    642 SCIP_NODE** downchild, /**< pointer to return the left child with variable rounded down, or NULL */
    643 SCIP_NODE** eqchild, /**< pointer to return the middle child with variable fixed, or NULL */
    644 SCIP_NODE** upchild /**< pointer to return the right child with variable rounded up, or NULL */
    645 );
    646
    647/** branches on a variable x; unlike the fp-version this will also branch x <= floor(x'), x >= ceil(x')
    648 * if x' is very close to being integral at one of its bounds;
    649 * in the fp version this case would be branched in the middle of the domain;
    650 * not meant for branching on a continuous variables
    651 */
    653 SCIP_TREE* tree, /**< branch and bound tree */
    654 SCIP_REOPT* reopt, /**< reoptimization data structure */
    655 BMS_BLKMEM* blkmem, /**< block memory */
    656 SCIP_SET* set, /**< global SCIP settings */
    657 SCIP_STAT* stat, /**< problem statistics data */
    658 SCIP_PROB* transprob, /**< transformed problem after presolve */
    659 SCIP_PROB* origprob, /**< original problem */
    660 SCIP_LP* lp, /**< current LP data */
    661 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    662 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    663 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    664 SCIP_VAR* var, /**< variable to branch on */
    665 SCIP_NODE** downchild, /**< pointer to return the left child with variable rounded down, or NULL */
    666 SCIP_NODE** upchild /**< pointer to return the right child with variable rounded up, or NULL */
    667 );
    668
    669/** branches a variable x using the given domain hole; two child nodes will be created (x <= left, x >= right) */
    671 SCIP_TREE* tree, /**< branch and bound tree */
    672 SCIP_REOPT* reopt, /**< reoptimization data structure */
    673 BMS_BLKMEM* blkmem, /**< block memory */
    674 SCIP_SET* set, /**< global SCIP settings */
    675 SCIP_STAT* stat, /**< problem statistics data */
    676 SCIP_PROB* transprob, /**< transformed problem after presolve */
    677 SCIP_PROB* origprob, /**< original problem */
    678 SCIP_LP* lp, /**< current LP data */
    679 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    680 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    681 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    682 SCIP_VAR* var, /**< variable to branch on */
    683 SCIP_Real left, /**< left side of the domain hole */
    684 SCIP_Real right, /**< right side of the domain hole */
    685 SCIP_NODE** downchild, /**< pointer to return the left child with variable rounded down, or NULL */
    686 SCIP_NODE** upchild /**< pointer to return the right child with variable rounded up, or NULL */
    687 );
    688
    689/** n-ary branching on a variable x
    690 * Branches on variable x such that up to n/2 children are created on each side of the usual branching value.
    691 * The branching value is selected as in SCIPtreeBranchVar().
    692 * If n is 2 or the variables local domain is too small for a branching into n pieces, SCIPtreeBranchVar() is called.
    693 * The parameters minwidth and widthfactor determine the domain width of the branching variable in the child nodes.
    694 * If n is odd, one child with domain width 'width' and having the branching value in the middle is created.
    695 * Otherwise, two children with domain width 'width' and being left and right of the branching value are created.
    696 * Next further nodes to the left and right are created, where width is multiplied by widthfactor with increasing distance from the first nodes.
    697 * The initial width is calculated such that n/2 nodes are created to the left and to the right of the branching value.
    698 * If this value is below minwidth, the initial width is set to minwidth, which may result in creating less than n nodes.
    699 *
    700 * Giving a large value for widthfactor results in creating children with small domain when close to the branching value
    701 * and large domain when closer to the current variable bounds. That is, setting widthfactor to a very large value and n to 3
    702 * results in a ternary branching where the branching variable is mostly fixed in the middle child.
    703 * Setting widthfactor to 1.0 results in children where the branching variable always has the same domain width
    704 * (except for one child if the branching value is not in the middle).
    705 */
    707 SCIP_TREE* tree, /**< branch and bound tree */
    708 SCIP_REOPT* reopt, /**< reoptimization data structure */
    709 BMS_BLKMEM* blkmem, /**< block memory */
    710 SCIP_SET* set, /**< global SCIP settings */
    711 SCIP_STAT* stat, /**< problem statistics data */
    712 SCIP_PROB* transprob, /**< transformed problem after presolve */
    713 SCIP_PROB* origprob, /**< original problem */
    714 SCIP_LP* lp, /**< current LP data */
    715 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    716 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    717 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    718 SCIP_VAR* var, /**< variable to branch on */
    719 SCIP_Real val, /**< value to branch on or SCIP_INVALID for branching on current LP/pseudo solution.
    720 * A branching value is required for branching on continuous variables */
    721 int n, /**< attempted number of children to be created, must be >= 2 */
    722 SCIP_Real minwidth, /**< minimal domain width in children */
    723 SCIP_Real widthfactor, /**< multiplier for children domain width with increasing distance from val, must be >= 1.0 */
    724 int* nchildren /**< buffer to store number of created children, or NULL */
    725 );
    726
    727/** adds a diving bound change to the tree together with the information if this is a bound change
    728 * for the preferred direction or not
    729 */
    731 SCIP_TREE* tree, /**< branch and bound tree */
    732 BMS_BLKMEM* blkmem, /**< block memory buffers */
    733 SCIP_VAR* var, /**< variable to apply the bound change to */
    734 SCIP_BRANCHDIR dir, /**< direction of the bound change */
    735 SCIP_Real value, /**< value to adjust this variable bound to */
    736 SCIP_Bool preferred /**< is this a bound change for the preferred child? */
    737 );
    738
    739/** get the dive bound change data for the preferred or the alternative direction */
    741 SCIP_TREE* tree, /**< branch and bound tree */
    742 SCIP_VAR*** variables, /**< pointer to store variables for the specified direction */
    743 SCIP_BRANCHDIR** directions, /**< pointer to store the branching directions */
    744 SCIP_Real** values, /**< pointer to store bound change values */
    745 int* ndivebdchgs, /**< pointer to store the number of dive bound changes */
    746 SCIP_Bool preferred /**< should the dive bound changes for the preferred child be output? */
    747 );
    748
    749/** clear the tree dive bound change data structure */
    751 SCIP_TREE* tree /**< branch and bound tree */
    752 );
    753
    754/** switches to probing mode and creates a probing root */
    756 SCIP_TREE* tree, /**< branch and bound tree */
    757 BMS_BLKMEM* blkmem, /**< block memory */
    758 SCIP_SET* set, /**< global SCIP settings */
    759 SCIP_LP* lp, /**< current LP data */
    760 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    761 SCIP_PROB* transprob, /**< transformed problem after presolve */
    762 SCIP_Bool strongbranching /**< is the probing mode used for strongbranching? */
    763 );
    764
    765/** creates a new probing child node in the probing path */
    767 SCIP_TREE* tree, /**< branch and bound tree */
    768 BMS_BLKMEM* blkmem, /**< block memory */
    769 SCIP_SET* set, /**< global SCIP settings */
    770 SCIP_LP* lp /**< current LP data */
    771 );
    772
    773/** sets the LP state for the current probing node
    774 *
    775 * @note state and norms are stored at the node and later released by SCIP; therefore, the pointers are set
    776 * to NULL by the method
    777 *
    778 * @note the pointers to state and norms must not be NULL; however, they may point to a NULL pointer if the
    779 * respective information should not be set
    780 */
    782 SCIP_TREE* tree, /**< branch and bound tree */
    783 BMS_BLKMEM* blkmem, /**< block memory */
    784 SCIP_LP* lp, /**< current LP data */
    785 SCIP_LPISTATE** lpistate, /**< pointer to LP state information (like basis information) */
    786 SCIP_LPINORMS** lpinorms, /**< pointer to LP pricing norms information */
    787 SCIP_Bool primalfeas, /**< primal feasibility when LP state information was stored */
    788 SCIP_Bool dualfeas /**< dual feasibility when LP state information was stored */
    789 );
    790
    791/** loads the LP state for the current probing node */
    793 SCIP_TREE* tree, /**< branch and bound tree */
    794 BMS_BLKMEM* blkmem, /**< block memory buffers */
    795 SCIP_SET* set, /**< global SCIP settings */
    796 SCIP_PROB* prob, /**< problem data */
    797 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    798 SCIP_LP* lp /**< current LP data */
    799 );
    800
    801/** marks the probing node to have a solved LP relaxation */
    803 SCIP_TREE* tree, /**< branch and bound tree */
    804 BMS_BLKMEM* blkmem, /**< block memory */
    805 SCIP_LP* lp /**< current LP data */
    806 );
    807
    808/** undoes all changes to the problem applied in probing up to the given probing depth;
    809 * the changes of the probing node of the given probing depth are the last ones that remain active;
    810 * changes that were applied before calling SCIPtreeCreateProbingNode() cannot be undone
    811 */
    813 SCIP_TREE* tree, /**< branch and bound tree */
    814 SCIP_REOPT* reopt, /**< reoptimization data structure */
    815 BMS_BLKMEM* blkmem, /**< block memory buffers */
    816 SCIP_SET* set, /**< global SCIP settings */
    817 SCIP_STAT* stat, /**< problem statistics */
    818 SCIP_PROB* transprob, /**< transformed problem */
    819 SCIP_PROB* origprob, /**< original problem */
    820 SCIP_LP* lp, /**< current LP data */
    821 SCIP_PRIMAL* primal, /**< primal data structure */
    822 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    823 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    824 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    825 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    826 int probingdepth /**< probing depth of the node in the probing path that should be reactivated */
    827 );
    828
    829/** switches back from probing to normal operation mode, frees all nodes on the probing path, restores bounds of all
    830 * variables and restores active constraints arrays of focus node
    831 */
    833 SCIP_TREE* tree, /**< branch and bound tree */
    834 SCIP_REOPT* reopt, /**< reoptimization data structure */
    835 BMS_BLKMEM* blkmem, /**< block memory buffers */
    836 SCIP_SET* set, /**< global SCIP settings */
    837 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    838 SCIP_STAT* stat, /**< problem statistics */
    839 SCIP_PROB* transprob, /**< transformed problem after presolve */
    840 SCIP_PROB* origprob, /**< original problem */
    841 SCIP_LP* lp, /**< current LP data */
    842 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    843 SCIP_PRIMAL* primal, /**< primal LP data */
    844 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    845 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    846 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    847 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    848 );
    849
    850/** stores relaxation solution before diving or probing */
    852 SCIP_TREE* tree, /**< branch and bound tree */
    853 SCIP_SET* set, /**< global SCIP settings */
    854 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    855 SCIP_PROB* transprob /**< transformed problem after presolve */
    856 );
    857
    858/** restores relaxation solution after diving or probing */
    860 SCIP_TREE* tree, /**< branch and bound tree */
    861 SCIP_SET* set, /**< global SCIP settings */
    862 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    863 SCIP_PROB* transprob /**< transformed problem after presolve */
    864 );
    865
    866
    867/** gets number of children of the focus node */
    869 SCIP_TREE* tree /**< branch and bound tree */
    870 );
    871
    872/** gets number of siblings of the focus node */
    874 SCIP_TREE* tree /**< branch and bound tree */
    875 );
    876
    877/** gets number of leaves in the tree (excluding children and siblings of focus nodes) */
    879 SCIP_TREE* tree /**< branch and bound tree */
    880 );
    881
    882/** gets number of open nodes in the tree (children + siblings + leaves) */
    884 SCIP_TREE* tree /**< branch and bound tree */
    885 );
    886
    887/** returns whether the active path goes completely down to the focus node */
    889 SCIP_TREE* tree /**< branch and bound tree */
    890 );
    891
    892/** returns whether the current node is a temporary probing node */
    894 SCIP_TREE* tree /**< branch and bound tree */
    895 );
    896
    897/** returns the temporary probing root node, or NULL if the we are not in probing mode */
    899 SCIP_TREE* tree /**< branch and bound tree */
    900 );
    901
    902/** returns the current probing depth, i.e. the number of probing sub nodes existing in the probing path */
    904 SCIP_TREE* tree /**< branch and bound tree */
    905 );
    906
    907/** gets focus node of the tree */
    909 SCIP_TREE* tree /**< branch and bound tree */
    910 );
    911
    912/** gets depth of focus node in the tree, or -1 if no focus node exists */
    914 SCIP_TREE* tree /**< branch and bound tree */
    915 );
    916
    917/** returns whether the LP was or is to be solved in the focus node */
    919 SCIP_TREE* tree /**< branch and bound tree */
    920 );
    921
    922/** sets mark to solve or to ignore the LP while processing the focus node */
    924 SCIP_TREE* tree, /**< branch and bound tree */
    925 SCIP_Bool solvelp /**< should the LP be solved in focus node? */
    926 );
    927
    928/** returns whether the LP of the focus node is already constructed */
    930 SCIP_TREE* tree /**< branch and bound tree */
    931 );
    932
    933/** returns whether the focus node is already solved and only propagated again */
    935 SCIP_TREE* tree /**< branch and bound tree */
    936 );
    937
    938/** gets current node of the tree, i.e. the last node in the active path, or NULL if no current node exists */
    940 SCIP_TREE* tree /**< branch and bound tree */
    941 );
    942
    943/** 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 */
    945 SCIP_TREE* tree /**< branch and bound tree */
    946 );
    947
    948/** returns whether the LP was or is to be solved in the current node */
    950 SCIP_TREE* tree /**< branch and bound tree */
    951 );
    952
    953/** returns the depth of the effective root node (i.e. the first depth level of a node with at least two children) */
    955 SCIP_TREE* tree /**< branch and bound tree */
    956 );
    957
    958/** gets the root node of the tree */
    960 SCIP_TREE* tree /**< branch and bound tree */
    961 );
    962
    963/** returns whether we are in probing and the objective value of at least one column was changed */
    965 SCIP_TREE* tree /**< branch and bound tree */
    966 );
    967
    968/** marks the current probing node to have a changed objective function */
    970 SCIP_TREE* tree /**< branch and bound tree */
    971 );
    972
    973#ifdef NDEBUG
    974
    975/* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and
    976 * speed up the algorithms.
    977 */
    978
    979#define SCIPtreeGetNLeaves(tree) SCIPnodepqLen((tree)->leaves)
    980#define SCIPtreeGetNChildren(tree) ((tree)->nchildren)
    981#define SCIPtreeGetNSiblings(tree) ((tree)->nsiblings)
    982#define SCIPtreeGetNNodes(tree) \
    983 (SCIPtreeGetNChildren(tree) + SCIPtreeGetNSiblings(tree) + SCIPtreeGetNLeaves(tree))
    984#define SCIPtreeIsPathComplete(tree) ((tree)->focusnode == NULL || (tree)->focusnode->depth < (tree)->pathlen)
    985#define SCIPtreeProbing(tree) ((tree)->probingroot != NULL)
    986#define SCIPtreeGetProbingRoot(tree) (tree)->probingroot
    987#define SCIPtreeGetProbingDepth(tree) (SCIPtreeGetCurrentDepth(tree) - SCIPnodeGetDepth((tree)->probingroot))
    988#define SCIPtreeGetFocusNode(tree) (tree)->focusnode
    989#define SCIPtreeGetFocusDepth(tree) ((tree)->focusnode != NULL ? (int)(tree)->focusnode->depth : -1)
    990#define SCIPtreeHasFocusNodeLP(tree) (tree)->focusnodehaslp
    991#define SCIPtreeSetFocusNodeLP(tree,solvelp) ((tree)->focusnodehaslp = solvelp)
    992#define SCIPtreeIsFocusNodeLPConstructed(tree) (tree)->focuslpconstructed
    993#define SCIPtreeInRepropagation(tree) ((tree)->focusnode != NULL \
    994 && SCIPnodeGetType((tree)->focusnode) == SCIP_NODETYPE_REFOCUSNODE)
    995#define SCIPtreeGetCurrentNode(tree) ((tree)->pathlen > 0 ? (tree)->path[(tree)->pathlen-1] : NULL)
    996#define SCIPtreeGetCurrentDepth(tree) ((tree)->pathlen-1)
    997#define SCIPtreeHasCurrentNodeLP(tree) (SCIPtreeProbing(tree) ? (tree)->probingnodehaslp : SCIPtreeHasFocusNodeLP(tree))
    998#define SCIPtreeGetEffectiveRootDepth(tree) ((tree)->effectiverootdepth)
    999#define SCIPtreeGetRootNode(tree) ((tree)->root)
    1000#define SCIPtreeProbingObjChanged(tree) ((tree)->probingobjchanged)
    1001#define SCIPtreeMarkProbingObjChanged(tree) ((tree)->probingobjchanged = TRUE)
    1002
    1003#endif
    1004
    1005
    1006/** gets the best child of the focus node w.r.t. the node selection priority assigned by the branching rule */
    1008 SCIP_TREE* tree /**< branch and bound tree */
    1009 );
    1010
    1011/** gets the best sibling of the focus node w.r.t. the node selection priority assigned by the branching rule */
    1013 SCIP_TREE* tree /**< branch and bound tree */
    1014 );
    1015
    1016/** gets the best child of the focus node w.r.t. the node selection strategy */
    1018 SCIP_TREE* tree, /**< branch and bound tree */
    1019 SCIP_SET* set /**< global SCIP settings */
    1020 );
    1021
    1022/** gets the best sibling of the focus node w.r.t. the node selection strategy */
    1024 SCIP_TREE* tree, /**< branch and bound tree */
    1025 SCIP_SET* set /**< global SCIP settings */
    1026 );
    1027
    1028/** gets the best leaf from the node queue w.r.t. the node selection strategy */
    1030 SCIP_TREE* tree /**< branch and bound tree */
    1031 );
    1032
    1033/** gets the best node from the tree (child, sibling, or leaf) w.r.t. the node selection strategy */
    1035 SCIP_TREE* tree, /**< branch and bound tree */
    1036 SCIP_SET* set /**< global SCIP settings */
    1037 );
    1038
    1039/** gets the minimal lower bound of all nodes in the tree */
    1041 SCIP_TREE* tree, /**< branch and bound tree */
    1042 SCIP_SET* set /**< global SCIP settings */
    1043 );
    1044
    1045/** gets the minimal exact lower bound of all nodes in the tree or NULL if empty
    1046 *
    1047 * @note The user must not modify the return value.
    1048 */
    1050 SCIP_TREE* tree, /**< branch and bound tree */
    1051 SCIP_SET* set /**< global SCIP settings */
    1052 );
    1053
    1054/** gets the node with minimal lower bound of all nodes in the tree (child, sibling, or leaf) */
    1056 SCIP_TREE* tree, /**< branch and bound tree */
    1057 SCIP_SET* set /**< global SCIP settings */
    1058 );
    1059
    1060/** gets the average lower bound of all nodes in the tree */
    1062 SCIP_TREE* tree, /**< branch and bound tree */
    1063 SCIP_Real cutoffbound /**< global cutoff bound */
    1064 );
    1065
    1066/** query if focus node was already branched on */
    1068 SCIP_TREE* tree, /**< branch and bound tree */
    1069 SCIP_NODE* node /**< tree node, or NULL to check focus node */
    1070 );
    1071
    1072#ifdef __cplusplus
    1073}
    1074#endif
    1075
    1076#endif
    common defines and data types used in all packages of SCIP
    #define SCIP_Bool
    Definition: def.h:91
    #define SCIP_Real
    Definition: def.h:156
    memory allocation routines
    struct BMS_BlkMem BMS_BLKMEM
    Definition: memory.h:437
    internal methods for node selectors and node priority queues
    public methods for branch and bound tree
    data structures for branch and bound tree
    Definition: heur_padm.c:135
    SCIP_Bool SCIPtreeIsFocusNodeLPConstructed(SCIP_TREE *tree)
    Definition: tree.c:9442
    SCIP_NODE * SCIPtreeGetProbingRoot(SCIP_TREE *tree)
    Definition: tree.c:9374
    SCIP_RETCODE SCIPnodeReleaseLPIState(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_LP *lp)
    Definition: tree.c:278
    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:2598
    void SCIPnodeGetDualBoundchgs(SCIP_NODE *node, SCIP_VAR **vars, SCIP_Real *bounds, SCIP_BOUNDTYPE *boundtypes, int *nvars, int varssize)
    Definition: tree.c:8706
    SCIP_NODE * SCIPtreeGetBestSibling(SCIP_TREE *tree, SCIP_SET *set)
    Definition: tree.c:8153
    SCIP_RETCODE SCIPtreeFree(SCIP_TREE **tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp)
    Definition: tree.c:5580
    SCIP_RETCODE SCIPnodeAddBoundchgExact(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LPEXACT *lpexact, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_RATIONAL *newbound, SCIP_BOUNDTYPE boundtype, SCIP_Bool probingchange)
    Definition: tree.c:2568
    SCIP_NODE * SCIPtreeGetFocusNode(SCIP_TREE *tree)
    Definition: tree.c:9387
    SCIP_Bool SCIPtreeProbing(SCIP_TREE *tree)
    Definition: tree.c:9361
    int SCIPtreeGetFocusDepth(SCIP_TREE *tree)
    Definition: tree.c:9404
    SCIP_Real SCIPtreeGetAvgLowerbound(SCIP_TREE *tree, SCIP_Real cutoffbound)
    Definition: tree.c:8386
    SCIP_Bool SCIPtreeIsPathComplete(SCIP_TREE *tree)
    Definition: tree.c:9344
    SCIP_Bool SCIPtreeProbingObjChanged(SCIP_TREE *tree)
    Definition: tree.c:9540
    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_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype, SCIP_Bool probingchange)
    Definition: tree.c:2539
    int SCIPtreeGetProbingDepth(SCIP_TREE *tree)
    Definition: tree.c:9507
    SCIP_RETCODE SCIPtreeSetNodesel(SCIP_TREE *tree, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_NODESEL *nodesel)
    Definition: tree.c:5830
    SCIP_RETCODE SCIPnodeDelCons(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_CONS *cons)
    Definition: tree.c:1739
    void SCIPnodeSetEstimate(SCIP_NODE *node, SCIP_SET *set, SCIP_Real newestimate)
    Definition: tree.c:3084
    void SCIPnodePropagateAgain(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree)
    Definition: tree.c:1368
    SCIP_RETCODE SCIPnodeCaptureLPIState(SCIP_NODE *node, int nuses)
    Definition: tree.c:250
    void SCIPnodeGetPropsAfterDual(SCIP_NODE *node, SCIP_VAR **vars, SCIP_Real *varbounds, SCIP_BOUNDTYPE *varboundtypes, int *nvars, int varssize)
    Definition: tree.c:9017
    SCIP_RETCODE SCIPtreeStartProbing(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp, SCIP_RELAXATION *relaxation, SCIP_PROB *transprob, SCIP_Bool strongbranching)
    Definition: tree.c:7377
    SCIP_RATIONAL * SCIPtreeGetLowerboundExact(SCIP_TREE *tree, SCIP_SET *set)
    Definition: tree.c:8265
    int SCIPtreeGetNChildren(SCIP_TREE *tree)
    Definition: tree.c:9304
    SCIP_RETCODE SCIPtreeSetProbingLPState(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_LP *lp, SCIP_LPISTATE **lpistate, SCIP_LPINORMS **lpinorms, SCIP_Bool primalfeas, SCIP_Bool dualfeas)
    Definition: tree.c:7470
    SCIP_RETCODE SCIPnodeCutoff(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_REOPT *reopt, SCIP_LP *lp, BMS_BLKMEM *blkmem)
    Definition: tree.c:1259
    SCIP_RETCODE SCIPtreeBranchVar(SCIP_TREE *tree, SCIP_REOPT *reopt, 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, SCIP_VAR *var, SCIP_Real val, SCIP_NODE **downchild, SCIP_NODE **eqchild, SCIP_NODE **upchild)
    Definition: tree.c:6135
    SCIP_NODE * SCIPtreeGetCurrentNode(SCIP_TREE *tree)
    Definition: tree.c:9462
    void SCIPnodeMarkPropagated(SCIP_NODE *node, SCIP_TREE *tree)
    Definition: tree.c:1394
    int SCIPtreeGetNLeaves(SCIP_TREE *tree)
    Definition: tree.c:9324
    SCIP_NODE * SCIPtreeGetRootNode(SCIP_TREE *tree)
    Definition: tree.c:9529
    SCIP_RETCODE SCIPtreeStoreRelaxSol(SCIP_TREE *tree, SCIP_SET *set, SCIP_RELAXATION *relaxation, SCIP_PROB *transprob)
    Definition: tree.c:7997
    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:1050
    SCIP_RETCODE SCIPtreeBranchVarExact(SCIP_TREE *tree, SCIP_REOPT *reopt, 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, SCIP_VAR *var, SCIP_NODE **downchild, SCIP_NODE **upchild)
    Definition: tree.c:6549
    void SCIPtreeMarkProbingObjChanged(SCIP_TREE *tree)
    Definition: tree.c:9551
    SCIP_RETCODE SCIPtreeAddDiveBoundChange(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Bool preferred)
    Definition: tree.c:7216
    SCIP_RETCODE SCIPnodeFree(SCIP_NODE **node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_TREE *tree, SCIP_LP *lp)
    Definition: tree.c:1115
    SCIP_Bool SCIPtreeHasCurrentNodeLP(SCIP_TREE *tree)
    Definition: tree.c:9496
    SCIP_Real SCIPtreeGetLowerbound(SCIP_TREE *tree, SCIP_SET *set)
    Definition: tree.c:8224
    SCIP_RETCODE SCIPtreeRestoreRelaxSol(SCIP_TREE *tree, SCIP_SET *set, SCIP_RELAXATION *relaxation, SCIP_PROB *transprob)
    Definition: tree.c:8041
    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:2711
    SCIP_RETCODE SCIPnodeAddBoundinferExact(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LPEXACT *lpexact, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_RATIONAL *newbound, SCIP_BOUNDTYPE boundtype, SCIP_CONS *infercons, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool probingchange)
    Definition: tree.c:2229
    SCIP_RETCODE SCIPtreeCreatePresolvingRoot(SCIP_TREE *tree, SCIP_REOPT *reopt, 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_CONFLICTSTORE *conflictstore, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable)
    Definition: tree.c:5736
    SCIP_NODE * SCIPtreeGetBestChild(SCIP_TREE *tree, SCIP_SET *set)
    Definition: tree.c:8126
    SCIP_RETCODE SCIPtreeLoadProbingLPState(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
    Definition: tree.c:7524
    int SCIPtreeGetEffectiveRootDepth(SCIP_TREE *tree)
    Definition: tree.c:9518
    SCIP_RETCODE SCIPtreeCreateRoot(SCIP_TREE *tree, SCIP_REOPT *reopt, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp)
    Definition: tree.c:5690
    SCIP_NODE * SCIPtreeGetPrioSibling(SCIP_TREE *tree)
    Definition: tree.c:8100
    void SCIPtreeSetFocusNodeLP(SCIP_TREE *tree, SCIP_Bool solvelp)
    Definition: tree.c:9431
    int SCIPnodeGetNDualBndchgs(SCIP_NODE *node)
    Definition: tree.c:8665
    SCIP_RETCODE SCIPnodeAddCons(SCIP_NODE *node, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_CONS *cons)
    Definition: tree.c:1696
    int SCIPtreeGetNNodes(SCIP_TREE *tree)
    Definition: tree.c:9334
    SCIP_Real SCIPtreeCalcNodeselPriority(SCIP_TREE *tree, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BRANCHDIR branchdir, SCIP_Real targetvalue)
    Definition: tree.c:5926
    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_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *cutoff)
    Definition: tree.c:3100
    int SCIPtreeGetNSiblings(SCIP_TREE *tree)
    Definition: tree.c:9314
    SCIP_RETCODE SCIPtreeClear(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp)
    Definition: tree.c:5629
    SCIP_NODE * SCIPtreeGetBestNode(SCIP_TREE *tree, SCIP_SET *set)
    Definition: tree.c:8190
    SCIP_NODE * SCIPtreeGetBestLeaf(SCIP_TREE *tree)
    Definition: tree.c:8180
    SCIP_RETCODE SCIPtreeEndProbing(SCIP_TREE *tree, SCIP_REOPT *reopt, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp, SCIP_RELAXATION *relaxation, SCIP_PRIMAL *primal, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable)
    Definition: tree.c:7814
    SCIP_RETCODE SCIPtreeCutoff(SCIP_TREE *tree, SCIP_REOPT *reopt, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_LP *lp, SCIP_Real cutoffbound)
    Definition: tree.c:5858
    SCIP_Bool SCIPtreeHasFocusNodeLP(SCIP_TREE *tree)
    Definition: tree.c:9421
    void SCIPtreeGetDiveBoundChangeData(SCIP_TREE *tree, SCIP_VAR ***variables, SCIP_BRANCHDIR **directions, SCIP_Real **values, int *ndivebdchgs, SCIP_Bool preferred)
    Definition: tree.c:7248
    SCIP_RETCODE SCIPtreeFreePresolvingRoot(SCIP_TREE *tree, SCIP_REOPT *reopt, 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_CONFLICTSTORE *conflictstore, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable)
    Definition: tree.c:5777
    SCIP_RETCODE SCIPtreeCreate(SCIP_TREE **tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_NODESEL *nodesel)
    Definition: tree.c:5499
    void SCIPchildChgNodeselPrio(SCIP_TREE *tree, SCIP_NODE *child, SCIP_Real priority)
    Definition: tree.c:3066
    int SCIPtreeGetCurrentDepth(SCIP_TREE *tree)
    Definition: tree.c:9479
    SCIP_NODE * SCIPtreeGetPrioChild(SCIP_TREE *tree)
    Definition: tree.c:8074
    SCIP_RETCODE SCIPtreeBranchVarHole(SCIP_TREE *tree, SCIP_REOPT *reopt, 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, SCIP_VAR *var, SCIP_Real left, SCIP_Real right, SCIP_NODE **downchild, SCIP_NODE **upchild)
    Definition: tree.c:6700
    SCIP_Bool SCIPtreeWasNodeLastBranchParent(SCIP_TREE *tree, SCIP_NODE *node)
    Definition: tree.c:1102
    SCIP_RETCODE SCIPtreeCreateProbingNode(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp)
    Definition: tree.c:7445
    SCIP_RETCODE SCIPnodeUpdateLowerboundLP(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_MESSAGEHDLR *messagehdlr, SCIP_EVENTFILTER *eventfilter, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp)
    Definition: tree.c:2973
    SCIP_RETCODE SCIPtreeMarkProbingNodeHasLP(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_LP *lp)
    Definition: tree.c:7606
    SCIP_RETCODE SCIPtreeBranchVarNary(SCIP_TREE *tree, SCIP_REOPT *reopt, 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, SCIP_VAR *var, SCIP_Real val, int n, SCIP_Real minwidth, SCIP_Real widthfactor, int *nchildren)
    Definition: tree.c:6843
    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_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype, SCIP_CONS *infercons, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool probingchange)
    Definition: tree.c:1909
    SCIP_RETCODE SCIPtreeLoadLPState(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
    Definition: tree.c:4238
    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_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *cutoff, SCIP_Bool postponed, SCIP_Bool exitsolve)
    Definition: tree.c:5007
    SCIP_Bool SCIPtreeInRepropagation(SCIP_TREE *tree)
    Definition: tree.c:9452
    SCIP_NODESEL * SCIPtreeGetNodesel(SCIP_TREE *tree)
    Definition: tree.c:5820
    SCIP_Real SCIPtreeCalcChildEstimate(SCIP_TREE *tree, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_Real targetvalue)
    Definition: tree.c:6076
    SCIP_NODE * SCIPtreeGetLowerboundNode(SCIP_TREE *tree, SCIP_SET *set)
    Definition: tree.c:8305
    SCIP_RETCODE SCIPtreeBacktrackProbing(SCIP_TREE *tree, SCIP_REOPT *reopt, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_LP *lp, SCIP_PRIMAL *primal, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, int probingdepth)
    Definition: tree.c:7780
    SCIP_RETCODE SCIPnodeUpdateLowerbound(SCIP_NODE *node, SCIP_STAT *stat, SCIP_SET *set, SCIP_EVENTFILTER *eventfilter, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Real newbound, SCIP_RATIONAL *newboundexact)
    Definition: tree.c:2851
    void SCIPnodeGetPropsBeforeDual(SCIP_NODE *node, SCIP_VAR **vars, SCIP_Real *varbounds, SCIP_BOUNDTYPE *varboundtypes, int *npropvars, int propvarssize)
    Definition: tree.c:8935
    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:4109
    void SCIPtreeClearDiveBoundChanges(SCIP_TREE *tree)
    Definition: tree.c:7271
    type definitions for branching rules
    type definitions for conflict store
    type definitions for constraints and constraint handlers
    type definitions for managing events
    type definitions for branching and inference history
    enum SCIP_BranchDir SCIP_BRANCHDIR
    Definition: type_history.h:48
    type definitions for implications, variable bounds, and cliques
    type definitions for LP management
    enum SCIP_BoundType SCIP_BOUNDTYPE
    Definition: type_lp.h:60
    type definitions for exact LP management
    type definitions for collecting primal CIP solutions and primal informations
    type definitions for storing and manipulating the main problem
    type definitions for propagators
    type definitions for collecting reoptimization information
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    type definitions for global SCIP settings
    type definitions for problem statistics
    type definitions for branch and bound tree
    type definitions for problem variables