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