SCIP Doxygen Documentation
Loading...
Searching...
No Matches
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-2026 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:98
#define SCIP_Real
Definition def.h:163
SCIP_Bool cutoff
int nvars
SCIP_VAR * var
static SCIP_VAR ** vars
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
SCIP_Bool SCIPtreeIsFocusNodeLPConstructed(SCIP_TREE *tree)
Definition tree.c:9472
SCIP_NODE * SCIPtreeGetProbingRoot(SCIP_TREE *tree)
Definition tree.c:9404
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:8736
SCIP_NODE * SCIPtreeGetBestSibling(SCIP_TREE *tree, SCIP_SET *set)
Definition tree.c:8197
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:5624
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:9417
SCIP_Bool SCIPtreeProbing(SCIP_TREE *tree)
Definition tree.c:9391
int SCIPtreeGetFocusDepth(SCIP_TREE *tree)
Definition tree.c:9434
SCIP_Real SCIPtreeGetAvgLowerbound(SCIP_TREE *tree, SCIP_Real cutoffbound)
Definition tree.c:8416
SCIP_Bool SCIPtreeIsPathComplete(SCIP_TREE *tree)
Definition tree.c:9374
SCIP_Bool SCIPtreeProbingObjChanged(SCIP_TREE *tree)
Definition tree.c:9570
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:9537
SCIP_RETCODE SCIPtreeSetNodesel(SCIP_TREE *tree, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_NODESEL *nodesel)
Definition tree.c:5874
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:9047
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:7421
SCIP_RATIONAL * SCIPtreeGetLowerboundExact(SCIP_TREE *tree, SCIP_SET *set)
Definition tree.c:8302
int SCIPtreeGetNChildren(SCIP_TREE *tree)
Definition tree.c:9334
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:7514
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:6179
SCIP_NODE * SCIPtreeGetCurrentNode(SCIP_TREE *tree)
Definition tree.c:9492
void SCIPnodeMarkPropagated(SCIP_NODE *node, SCIP_TREE *tree)
Definition tree.c:1394
int SCIPtreeGetNLeaves(SCIP_TREE *tree)
Definition tree.c:9354
SCIP_NODE * SCIPtreeGetRootNode(SCIP_TREE *tree)
Definition tree.c:9559
SCIP_RETCODE SCIPtreeStoreRelaxSol(SCIP_TREE *tree, SCIP_SET *set, SCIP_RELAXATION *relaxation, SCIP_PROB *transprob)
Definition tree.c:8041
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:6593
void SCIPtreeMarkProbingObjChanged(SCIP_TREE *tree)
Definition tree.c:9581
SCIP_RETCODE SCIPtreeAddDiveBoundChange(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Bool preferred)
Definition tree.c:7260
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:9526
SCIP_Real SCIPtreeGetLowerbound(SCIP_TREE *tree, SCIP_SET *set)
Definition tree.c:8268
SCIP_RETCODE SCIPtreeRestoreRelaxSol(SCIP_TREE *tree, SCIP_SET *set, SCIP_RELAXATION *relaxation, SCIP_PROB *transprob)
Definition tree.c:8085
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:5780
SCIP_NODE * SCIPtreeGetBestChild(SCIP_TREE *tree, SCIP_SET *set)
Definition tree.c:8170
SCIP_RETCODE SCIPtreeLoadProbingLPState(SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
Definition tree.c:7568
int SCIPtreeGetEffectiveRootDepth(SCIP_TREE *tree)
Definition tree.c:9548
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:5734
SCIP_NODE * SCIPtreeGetPrioSibling(SCIP_TREE *tree)
Definition tree.c:8144
void SCIPtreeSetFocusNodeLP(SCIP_TREE *tree, SCIP_Bool solvelp)
Definition tree.c:9461
int SCIPnodeGetNDualBndchgs(SCIP_NODE *node)
Definition tree.c:8695
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:9364
SCIP_Real SCIPtreeCalcNodeselPriority(SCIP_TREE *tree, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BRANCHDIR branchdir, SCIP_Real targetvalue)
Definition tree.c:5970
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:9344
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:5673
SCIP_NODE * SCIPtreeGetBestNode(SCIP_TREE *tree, SCIP_SET *set)
Definition tree.c:8234
SCIP_NODE * SCIPtreeGetBestLeaf(SCIP_TREE *tree)
Definition tree.c:8224
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:7858
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:5902
SCIP_Bool SCIPtreeHasFocusNodeLP(SCIP_TREE *tree)
Definition tree.c:9451
void SCIPtreeGetDiveBoundChangeData(SCIP_TREE *tree, SCIP_VAR ***variables, SCIP_BRANCHDIR **directions, SCIP_Real **values, int *ndivebdchgs, SCIP_Bool preferred)
Definition tree.c:7292
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:5821
SCIP_RETCODE SCIPtreeCreate(SCIP_TREE **tree, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_NODESEL *nodesel)
Definition tree.c:5543
void SCIPchildChgNodeselPrio(SCIP_TREE *tree, SCIP_NODE *child, SCIP_Real priority)
Definition tree.c:3066
int SCIPtreeGetCurrentDepth(SCIP_TREE *tree)
Definition tree.c:9509
SCIP_NODE * SCIPtreeGetPrioChild(SCIP_TREE *tree)
Definition tree.c:8118
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:6744
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:7489
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:7650
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:6887
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:9482
SCIP_NODESEL * SCIPtreeGetNodesel(SCIP_TREE *tree)
Definition tree.c:5864
SCIP_Real SCIPtreeCalcChildEstimate(SCIP_TREE *tree, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_Real targetvalue)
Definition tree.c:6120
SCIP_NODE * SCIPtreeGetLowerboundNode(SCIP_TREE *tree, SCIP_SET *set)
Definition tree.c:8335
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:7824
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:8965
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:7315
type definitions for branching rules
struct SCIP_BranchCand SCIP_BRANCHCAND
Definition type_branch.h:55
struct SCIP_Conflict SCIP_CONFLICT
type definitions for conflict store
struct SCIP_ConflictStore SCIP_CONFLICTSTORE
type definitions for constraints and constraint handlers
struct SCIP_Cons SCIP_CONS
Definition type_cons.h:63
type definitions for managing events
struct SCIP_EventFilter SCIP_EVENTFILTER
Definition type_event.h:180
struct SCIP_EventQueue SCIP_EVENTQUEUE
Definition type_event.h:181
type definitions for branching and inference history
enum SCIP_BranchDir SCIP_BRANCHDIR
type definitions for implications, variable bounds, and cliques
struct SCIP_CliqueTable SCIP_CLIQUETABLE
type definitions for LP management
struct SCIP_Lp SCIP_LP
Definition type_lp.h:111
enum SCIP_BoundType SCIP_BOUNDTYPE
Definition type_lp.h:60
type definitions for exact LP management
struct SCIP_LpExact SCIP_LPEXACT
struct SCIP_LPiState SCIP_LPISTATE
Definition type_lpi.h:107
struct SCIP_LPiNorms SCIP_LPINORMS
Definition type_lpi.h:108
struct SCIP_Messagehdlr SCIP_MESSAGEHDLR
struct SCIP_Nodesel SCIP_NODESEL
type definitions for collecting primal CIP solutions and primal informations
struct SCIP_Primal SCIP_PRIMAL
Definition type_primal.h:39
type definitions for storing and manipulating the main problem
struct SCIP_Prob SCIP_PROB
Definition type_prob.h:52
type definitions for propagators
struct SCIP_Prop SCIP_PROP
Definition type_prop.h:51
struct SCIP_Rational SCIP_RATIONAL
struct SCIP_Relaxation SCIP_RELAXATION
Definition type_relax.h:51
type definitions for collecting reoptimization information
struct SCIP_Reopt SCIP_REOPT
Definition type_reopt.h:39
enum SCIP_Retcode SCIP_RETCODE
type definitions for global SCIP settings
struct SCIP_Set SCIP_SET
Definition type_set.h:71
type definitions for problem statistics
struct SCIP_Stat SCIP_STAT
Definition type_stat.h:66
type definitions for branch and bound tree
struct SCIP_Node SCIP_NODE
Definition type_tree.h:63
struct SCIP_Tree SCIP_TREE
Definition type_tree.h:65
type definitions for problem variables
struct SCIP_Var SCIP_VAR
Definition type_var.h:166