Scippy

SCIP

Solving Constraint Integer Programs

var.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-2019 Konrad-Zuse-Zentrum */
7 /* fuer Informationstechnik Berlin */
8 /* */
9 /* SCIP is distributed under the terms of the ZIB Academic License. */
10 /* */
11 /* You should have received a copy of the ZIB Academic License */
12 /* along with SCIP; see the file COPYING. If not visit scip.zib.de. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file var.h
17  * @ingroup INTERNALAPI
18  * @brief internal methods for problem variables
19  * @author Tobias Achterberg
20  */
21 
22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
23 
24 #ifndef __SCIP_VAR_H__
25 #define __SCIP_VAR_H__
26 
27 
28 #include "blockmemshell/memory.h"
29 #include "scip/def.h"
30 #include "scip/type_branch.h"
31 #include "scip/type_cons.h"
32 #include "scip/type_event.h"
33 #include "scip/type_history.h"
34 #include "scip/type_implics.h"
35 #include "scip/type_lp.h"
36 #include "scip/type_message.h"
37 #include "scip/type_misc.h"
38 #include "scip/type_primal.h"
39 #include "scip/type_prob.h"
40 #include "scip/type_prop.h"
41 #include "scip/type_relax.h"
42 #include "scip/type_reopt.h"
43 #include "scip/type_result.h"
44 #include "scip/type_retcode.h"
45 #include "scip/type_scip.h"
46 #include "scip/type_set.h"
47 #include "scip/type_sol.h"
48 #include "scip/type_stat.h"
49 #include "scip/type_tree.h"
50 #include "scip/type_var.h"
51 
52 #ifndef NDEBUG
53 #include "scip/struct_var.h"
54 #else
55 #include "scip/event.h"
56 #include "scip/pub_history.h"
57 #endif
58 
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62 
63 /*
64  * domain change methods
65  */
66 
67 /** applies single bound change */
68 extern
70  SCIP_BOUNDCHG* boundchg, /**< bound change to apply */
71  BMS_BLKMEM* blkmem, /**< block memory */
72  SCIP_SET* set, /**< global SCIP settings */
73  SCIP_STAT* stat, /**< problem statistics */
74  SCIP_LP* lp, /**< current LP data */
75  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
76  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
77  int depth, /**< depth in the tree, where the bound change takes place */
78  int pos, /**< position of the bound change in its bound change array */
79  SCIP_Bool* cutoff /**< pointer to store whether an infeasible bound change was detected */
80  );
81 
82 /** undoes single bound change */
83 extern
85  SCIP_BOUNDCHG* boundchg, /**< bound change to remove */
86  BMS_BLKMEM* blkmem, /**< block memory */
87  SCIP_SET* set, /**< global SCIP settings */
88  SCIP_STAT* stat, /**< problem statistics */
89  SCIP_LP* lp, /**< current LP data */
90  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
91  SCIP_EVENTQUEUE* eventqueue /**< event queue */
92  );
93 
94 /** applies domain change to the global problem */
95 extern
97  SCIP_DOMCHG* domchg, /**< domain change to apply */
98  BMS_BLKMEM* blkmem, /**< block memory */
99  SCIP_SET* set, /**< global SCIP settings */
100  SCIP_STAT* stat, /**< problem statistics */
101  SCIP_LP* lp, /**< current LP data */
102  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
103  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
104  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
105  SCIP_Bool* cutoff /**< pointer to store whether an infeasible domain change was detected */
106  );
107 
108 /** frees domain change data */
109 extern
111  SCIP_DOMCHG** domchg, /**< pointer to domain change */
112  BMS_BLKMEM* blkmem, /**< block memory */
113  SCIP_SET* set, /**< global SCIP settings */
114  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
115  SCIP_LP* lp /**< current LP data */
116  );
117 
118 /** converts a dynamic domain change data into a static one, using less memory than for a dynamic one */
119 extern
121  SCIP_DOMCHG** domchg, /**< pointer to domain change data */
122  BMS_BLKMEM* blkmem, /**< block memory */
123  SCIP_SET* set, /**< global SCIP settings */
124  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
125  SCIP_LP* lp /**< current LP data */
126  );
127 
128 /** applies domain change */
129 extern
131  SCIP_DOMCHG* domchg, /**< domain change to apply */
132  BMS_BLKMEM* blkmem, /**< block memory */
133  SCIP_SET* set, /**< global SCIP settings */
134  SCIP_STAT* stat, /**< problem statistics */
135  SCIP_LP* lp, /**< current LP data */
136  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
137  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
138  int depth, /**< depth in the tree, where the domain change takes place */
139  SCIP_Bool* cutoff /**< pointer to store whether an infeasible domain change was detected */
140  );
141 
142 /** undoes domain change */
143 extern
145  SCIP_DOMCHG* domchg, /**< domain change to remove */
146  BMS_BLKMEM* blkmem, /**< block memory */
147  SCIP_SET* set, /**< global SCIP settings */
148  SCIP_STAT* stat, /**< problem statistics */
149  SCIP_LP* lp, /**< current LP data */
150  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
151  SCIP_EVENTQUEUE* eventqueue /**< event queue */
152  );
153 
154 /** adds bound change to domain changes */
155 extern
157  SCIP_DOMCHG** domchg, /**< pointer to domain change data structure */
158  BMS_BLKMEM* blkmem, /**< block memory */
159  SCIP_SET* set, /**< global SCIP settings */
160  SCIP_VAR* var, /**< variable to change the bounds for */
161  SCIP_Real newbound, /**< new value for bound */
162  SCIP_BOUNDTYPE boundtype, /**< type of bound for var: lower or upper bound */
163  SCIP_BOUNDCHGTYPE boundchgtype, /**< type of bound change: branching decision or inference */
164  SCIP_Real lpsolval, /**< solval of variable in last LP on path to node, or SCIP_INVALID if unknown */
165  SCIP_VAR* infervar, /**< variable that was changed (parent of var, or var itself) */
166  SCIP_CONS* infercons, /**< constraint that deduced the bound change, or NULL */
167  SCIP_PROP* inferprop, /**< propagator that deduced the bound change, or NULL */
168  int inferinfo, /**< user information for inference to help resolving the conflict */
169  SCIP_BOUNDTYPE inferboundtype /**< type of bound for inference var: lower or upper bound */
170  );
171 
172 /** adds hole change to domain changes */
173 extern
175  SCIP_DOMCHG** domchg, /**< pointer to domain change data structure */
176  BMS_BLKMEM* blkmem, /**< block memory */
177  SCIP_SET* set, /**< global SCIP settings */
178  SCIP_HOLELIST** ptr, /**< changed list pointer */
179  SCIP_HOLELIST* newlist, /**< new value of list pointer */
180  SCIP_HOLELIST* oldlist /**< old value of list pointer */
181  );
182 
183 /** creates an artificial bound change information object with depth = INT_MAX and pos = -1 */
184 extern
186  SCIP_BDCHGINFO** bdchginfo, /**< pointer to store bound change information */
187  BMS_BLKMEM* blkmem, /**< block memory */
188  SCIP_VAR* var, /**< active variable that changed the bounds */
189  SCIP_BOUNDTYPE boundtype, /**< type of bound for var: lower or upper bound */
190  SCIP_Real oldbound, /**< old value for bound */
191  SCIP_Real newbound /**< new value for bound */
192  );
193 
194 /** frees a bound change information object */
195 extern
196 void SCIPbdchginfoFree(
197  SCIP_BDCHGINFO** bdchginfo, /**< pointer to store bound change information */
198  BMS_BLKMEM* blkmem /**< block memory */
199  );
200 
201 /** returns the relaxed bound change type */
202 extern
204  SCIP_BDCHGINFO* bdchginfo /**< bound change to add to the conflict set */
205  );
206 
207 /*
208  * methods for variables
209  */
210 
211 /** creates and captures an original problem variable; an integer variable with bounds
212  * zero and one is automatically converted into a binary variable
213  */
214 extern
216  SCIP_VAR** var, /**< pointer to variable data */
217  BMS_BLKMEM* blkmem, /**< block memory */
218  SCIP_SET* set, /**< global SCIP settings */
219  SCIP_STAT* stat, /**< problem statistics */
220  const char* name, /**< name of variable */
221  SCIP_Real lb, /**< lower bound of variable */
222  SCIP_Real ub, /**< upper bound of variable */
223  SCIP_Real obj, /**< objective function value */
224  SCIP_VARTYPE vartype, /**< type of variable */
225  SCIP_Bool initial, /**< should var's column be present in the initial root LP? */
226  SCIP_Bool removable, /**< is var's column removable from the LP (due to aging or cleanup)? */
227  SCIP_DECL_VARDELORIG ((*vardelorig)), /**< frees user data of original variable, or NULL */
228  SCIP_DECL_VARTRANS ((*vartrans)), /**< creates transformed user data by transforming original user data, or NULL */
229  SCIP_DECL_VARDELTRANS ((*vardeltrans)), /**< frees user data of transformed variable, or NULL */
230  SCIP_DECL_VARCOPY ((*varcopy)), /**< copies variable data if wanted to subscip, or NULL */
231  SCIP_VARDATA* vardata /**< user data for this specific variable */
232  );
233 
234 /** creates and captures a loose variable belonging to the transformed problem; an integer variable with bounds
235  * zero and one is automatically converted into a binary variable
236  */
237 extern
239  SCIP_VAR** var, /**< pointer to variable data */
240  BMS_BLKMEM* blkmem, /**< block memory */
241  SCIP_SET* set, /**< global SCIP settings */
242  SCIP_STAT* stat, /**< problem statistics */
243  const char* name, /**< name of variable */
244  SCIP_Real lb, /**< lower bound of variable */
245  SCIP_Real ub, /**< upper bound of variable */
246  SCIP_Real obj, /**< objective function value */
247  SCIP_VARTYPE vartype, /**< type of variable */
248  SCIP_Bool initial, /**< should var's column be present in the initial root LP? */
249  SCIP_Bool removable, /**< is var's column removable from the LP (due to aging or cleanup)? */
250  SCIP_DECL_VARDELORIG ((*vardelorig)), /**< frees user data of original variable, or NULL */
251  SCIP_DECL_VARTRANS ((*vartrans)), /**< creates transformed user data by transforming original user data, or NULL */
252  SCIP_DECL_VARDELTRANS ((*vardeltrans)), /**< frees user data of transformed variable, or NULL */
253  SCIP_DECL_VARCOPY ((*varcopy)), /**< copies variable data if wanted to subscip, or NULL */
254  SCIP_VARDATA* vardata /**< user data for this specific variable */
255  );
256 
257 /** copies and captures a variable from source to target SCIP; an integer variable with bounds zero and one is
258  * automatically converted into a binary variable; in case the variable data cannot be copied the variable is not
259  * copied at all
260  */
261 extern
263  SCIP_VAR** var, /**< pointer to store the target variable */
264  BMS_BLKMEM* blkmem, /**< block memory */
265  SCIP_SET* set, /**< global SCIP settings */
266  SCIP_STAT* stat, /**< problem statistics */
267  SCIP* sourcescip, /**< source SCIP data structure */
268  SCIP_VAR* sourcevar, /**< source variable */
269  SCIP_HASHMAP* varmap, /**< a hashmap to store the mapping of source variables corresponding
270  * target variables */
271  SCIP_HASHMAP* consmap, /**< a hashmap to store the mapping of source constraints to the corresponding
272  * target constraints */
273  SCIP_Bool global /**< should global or local bounds be used? */
274  );
275 
276 /** parses variable information (in cip format) out of a string; if the parsing process was successful an original
277  * variable is created and captured; if variable is of integral type, fractional bounds are automatically rounded; an
278  * integer variable with bounds zero and one is automatically converted into a binary variable
279  */
280 extern
282  SCIP_VAR** var, /**< pointer to variable data */
283  BMS_BLKMEM* blkmem, /**< block memory */
284  SCIP_SET* set, /**< global SCIP settings */
285  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
286  SCIP_STAT* stat, /**< problem statistics */
287  const char* str, /**< string to parse */
288  SCIP_Bool initial, /**< should var's column be present in the initial root LP? */
289  SCIP_Bool removable, /**< is var's column removable from the LP (due to aging or cleanup)? */
290  SCIP_DECL_VARCOPY ((*varcopy)), /**< copies variable data if wanted to subscip, or NULL */
291  SCIP_DECL_VARDELORIG ((*vardelorig)), /**< frees user data of original variable */
292  SCIP_DECL_VARTRANS ((*vartrans)), /**< creates transformed user data by transforming original user data */
293  SCIP_DECL_VARDELTRANS ((*vardeltrans)), /**< frees user data of transformed variable */
294  SCIP_VARDATA* vardata, /**< user data for this specific variable */
295  char** endptr, /**< pointer to store the final string position if successfully */
296  SCIP_Bool* success /**< pointer store if the paring process was successful */
297  );
298 
299 /** parses variable information (in cip format) out of a string; if the parsing process was successful a loose variable
300  * belonging to the transformed problem is created and captured; if variable is of integral type, fractional bounds are
301  * automatically rounded; an integer variable with bounds zero and one is automatically converted into a binary
302  * variable
303  */
304 extern
306  SCIP_VAR** var, /**< pointer to variable data */
307  BMS_BLKMEM* blkmem, /**< block memory */
308  SCIP_SET* set, /**< global SCIP settings */
309  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
310  SCIP_STAT* stat, /**< problem statistics */
311  const char* str, /**< string to parse */
312  SCIP_Bool initial, /**< should var's column be present in the initial root LP? */
313  SCIP_Bool removable, /**< is var's column removable from the LP (due to aging or cleanup)? */
314  SCIP_DECL_VARCOPY ((*varcopy)), /**< copies variable data if wanted to subscip, or NULL */
315  SCIP_DECL_VARDELORIG ((*vardelorig)), /**< frees user data of original variable */
316  SCIP_DECL_VARTRANS ((*vartrans)), /**< creates transformed user data by transforming original user data */
317  SCIP_DECL_VARDELTRANS ((*vardeltrans)), /**< frees user data of transformed variable */
318  SCIP_VARDATA* vardata, /**< user data for this specific variable */
319  char** endptr, /**< pointer to store the final string position if successfully */
320  SCIP_Bool* success /**< pointer store if the paring process was successful */
321  );
322 
323 /** increases usage counter of variable */
324 extern
325 void SCIPvarCapture(
326  SCIP_VAR* var /**< variable */
327  );
328 
329 /** decreases usage counter of variable, and frees memory if necessary */
330 extern
332  SCIP_VAR** var, /**< pointer to variable */
333  BMS_BLKMEM* blkmem, /**< block memory */
334  SCIP_SET* set, /**< global SCIP settings */
335  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
336  SCIP_LP* lp /**< current LP data (may be NULL, if it's not a column variable) */
337  );
338 
339 /** change variable name */
340 extern
341 /** change variable name */
343  SCIP_VAR* var, /**< problem variable */
344  BMS_BLKMEM* blkmem, /**< block memory */
345  const char* name /**< name of variable */
346  );
347 
348 /** initializes variable data structure for solving */
349 extern
350 void SCIPvarInitSolve(
351  SCIP_VAR* var /**< problem variable */
352  );
353 
354 /** gets and captures transformed variable of a given variable; if the variable is not yet transformed,
355  * a new transformed variable for this variable is created
356  */
357 extern
359  SCIP_VAR* origvar, /**< original problem variable */
360  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
361  SCIP_SET* set, /**< global SCIP settings */
362  SCIP_STAT* stat, /**< problem statistics */
363  SCIP_OBJSENSE objsense, /**< objective sense of original problem; transformed is always MINIMIZE */
364  SCIP_VAR** transvar /**< pointer to store the transformed variable */
365  );
366 
367 /** gets corresponding transformed variable of an original or negated original variable */
368 extern
370  SCIP_VAR* origvar, /**< original problem variable */
371  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
372  SCIP_SET* set, /**< global SCIP settings */
373  SCIP_STAT* stat, /**< problem statistics */
374  SCIP_VAR** transvar /**< pointer to store the transformed variable, or NULL if not existing yet */
375  );
376 
377 /** converts transformed variable into column variable and creates LP column */
378 extern
380  SCIP_VAR* var, /**< problem variable */
381  BMS_BLKMEM* blkmem, /**< block memory */
382  SCIP_SET* set, /**< global SCIP settings */
383  SCIP_STAT* stat, /**< problem statistics */
384  SCIP_PROB* prob, /**< problem data */
385  SCIP_LP* lp /**< current LP data */
386  );
387 
388 /** converts column transformed variable back into loose variable, frees LP column */
389 extern
391  SCIP_VAR* var, /**< problem variable */
392  BMS_BLKMEM* blkmem, /**< block memory */
393  SCIP_SET* set, /**< global SCIP settings */
394  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
395  SCIP_PROB* prob, /**< problem data */
396  SCIP_LP* lp /**< current LP data */
397  );
398 
399 /** converts variable into fixed variable */
400 extern
402  SCIP_VAR* var, /**< problem variable */
403  BMS_BLKMEM* blkmem, /**< block memory */
404  SCIP_SET* set, /**< global SCIP settings */
405  SCIP_STAT* stat, /**< problem statistics */
406  SCIP_PROB* transprob, /**< tranformed problem data */
407  SCIP_PROB* origprob, /**< original problem data */
408  SCIP_PRIMAL* primal, /**< primal data */
409  SCIP_TREE* tree, /**< branch and bound tree */
410  SCIP_REOPT* reopt, /**< reoptimization data structure */
411  SCIP_LP* lp, /**< current LP data */
412  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
413  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
414  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
415  SCIP_Real fixedval, /**< value to fix variable at */
416  SCIP_Bool* infeasible, /**< pointer to store whether the fixing is infeasible */
417  SCIP_Bool* fixed /**< pointer to store whether the fixing was performed (variable was unfixed) */
418  );
419 
420 /** transforms given variables, scalars and constant to the corresponding active variables, scalars and constant
421  *
422  * If the number of needed active variables is greater than the available slots in the variable array, nothing happens except
423  * that the required size is stored in the corresponding variable; hence, if afterwards the required size is greater than the
424  * available slots (varssize), nothing happens; otherwise, the active variable representation is stored in the arrays.
425  *
426  * The reason for this approach is that we cannot reallocate memory, since we do not know how the
427  * memory has been allocated (e.g., by a C++ 'new' or SCIP functions).
428  */
429 extern
431  SCIP_SET* set, /**< global SCIP settings */
432  SCIP_VAR** vars, /**< variable array to get active variables */
433  SCIP_Real* scalars, /**< scalars a_1, ..., a_n in linear sum a_1*x_1 + ... + a_n*x_n + c */
434  int* nvars, /**< pointer to number of variables and values in vars and vals array */
435  int varssize, /**< available slots in vars and scalars array */
436  SCIP_Real* constant, /**< pointer to constant c in linear sum a_1*x_1 + ... + a_n*x_n + c */
437  int* requiredsize, /**< pointer to store the required array size for the active variables */
438  SCIP_Bool mergemultiples /**< should multiple occurrences of a var be replaced by a single coeff? */
439  );
440 
441 /** transforms given variable, scalar and constant to the corresponding active, fixed, or
442  * multi-aggregated variable, scalar and constant; if the variable resolves to a fixed variable,
443  * "scalar" will be 0.0 and the value of the sum will be stored in "constant"; a multi-aggregation
444  * with only one active variable (this can happen due to fixings after the multi-aggregation),
445  * is treated like an aggregation; if the multi-aggregation constant is infinite, "scalar" will be 0.0
446  */
447 extern
449  SCIP_VAR** var, /**< pointer to problem variable x in sum a*x + c */
450  SCIP_SET* set, /**< global SCIP settings */
451  SCIP_Real* scalar, /**< pointer to scalar a in sum a*x + c */
452  SCIP_Real* constant /**< pointer to constant c in sum a*x + c */
453  );
454 
455 
456 /** flattens aggregation graph of multi-aggregated variable in order to avoid exponential recursion later-on */
457 extern
459  SCIP_VAR* var, /**< problem variable */
460  BMS_BLKMEM* blkmem, /**< block memory */
461  SCIP_SET* set /**< global SCIP settings */
462  );
463 
464 /** return for given variables all their active counterparts; all active variables will be pairwise different */
465 extern
467  SCIP_SET* set, /**< global SCIP settings */
468  SCIP_VAR** vars, /**< variable array with given variables and as output all active
469  * variables, if enough slots exist
470  */
471  int* nvars, /**< number of given variables, and as output number of active variables,
472  * if enough slots exist
473  */
474  int varssize, /**< available slots in vars array */
475  int* requiredsize /**< pointer to store the required array size for the active variables */
476  );
477 
478 /** performs second step of SCIPaggregateVars():
479  * the variable to be aggregated is chosen among active problem variables x' and y', preferring a less strict variable
480  * type as aggregation variable (i.e. continuous variables are preferred over implicit integers, implicit integers
481  * or integers over binaries). If none of the variables is continuous, it is tried to find an integer
482  * aggregation (i.e. integral coefficients a'' and b'', such that a''*x' + b''*y' == c''). This can lead to
483  * the detection of infeasibility (e.g. if c'' is fractional), or to a rejection of the aggregation (denoted by
484  * aggregated == FALSE), if the resulting integer coefficients are too large and thus numerically instable.
485  */
486 extern
488  SCIP_SET* set, /**< global SCIP settings */
489  BMS_BLKMEM* blkmem, /**< block memory */
490  SCIP_STAT* stat, /**< problem statistics */
491  SCIP_PROB* transprob, /**< tranformed problem data */
492  SCIP_PROB* origprob, /**< original problem data */
493  SCIP_PRIMAL* primal, /**< primal data */
494  SCIP_TREE* tree, /**< branch and bound tree */
495  SCIP_REOPT* reopt, /**< reoptimization data structure */
496  SCIP_LP* lp, /**< current LP data */
497  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
498  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
499  SCIP_EVENTFILTER* eventfilter, /**< event filter for global (not variable dependent) events */
500  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
501  SCIP_VAR* varx, /**< variable x in equality a*x + b*y == c */
502  SCIP_VAR* vary, /**< variable y in equality a*x + b*y == c */
503  SCIP_Real scalarx, /**< multiplier a in equality a*x + b*y == c */
504  SCIP_Real scalary, /**< multiplier b in equality a*x + b*y == c */
505  SCIP_Real rhs, /**< right hand side c in equality a*x + b*y == c */
506  SCIP_Bool* infeasible, /**< pointer to store whether the aggregation is infeasible */
507  SCIP_Bool* aggregated /**< pointer to store whether the aggregation was successful */
508  );
509 
510 /** converts loose variable into aggregated variable */
511 extern
513  SCIP_VAR* var, /**< loose problem variable */
514  BMS_BLKMEM* blkmem, /**< block memory */
515  SCIP_SET* set, /**< global SCIP settings */
516  SCIP_STAT* stat, /**< problem statistics */
517  SCIP_PROB* transprob, /**< tranformed problem data */
518  SCIP_PROB* origprob, /**< original problem data */
519  SCIP_PRIMAL* primal, /**< primal data */
520  SCIP_TREE* tree, /**< branch and bound tree */
521  SCIP_REOPT* reopt, /**< reoptimization data structure */
522  SCIP_LP* lp, /**< current LP data */
523  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
524  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
525  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
526  SCIP_VAR* aggvar, /**< loose variable y in aggregation x = a*y + c */
527  SCIP_Real scalar, /**< multiplier a in aggregation x = a*y + c */
528  SCIP_Real constant, /**< constant shift c in aggregation x = a*y + c */
529  SCIP_Bool* infeasible, /**< pointer to store whether the aggregation is infeasible */
530  SCIP_Bool* aggregated /**< pointer to store whether the aggregation was successful */
531  );
532 
533 /** converts variable into multi-aggregated variable */
534 extern
536  SCIP_VAR* var, /**< problem variable */
537  BMS_BLKMEM* blkmem, /**< block memory */
538  SCIP_SET* set, /**< global SCIP settings */
539  SCIP_STAT* stat, /**< problem statistics */
540  SCIP_PROB* transprob, /**< tranformed problem data */
541  SCIP_PROB* origprob, /**< original problem data */
542  SCIP_PRIMAL* primal, /**< primal data */
543  SCIP_TREE* tree, /**< branch and bound tree */
544  SCIP_REOPT* reopt, /**< reoptimization data structure */
545  SCIP_LP* lp, /**< current LP data */
546  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
547  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
548  SCIP_EVENTFILTER* eventfilter, /**< event filter for global (not variable dependent) events */
549  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
550  int naggvars, /**< number n of variables in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
551  SCIP_VAR** aggvars, /**< variables y_i in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
552  SCIP_Real* scalars, /**< multipliers a_i in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
553  SCIP_Real constant, /**< constant shift c in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
554  SCIP_Bool* infeasible, /**< pointer to store whether the aggregation is infeasible */
555  SCIP_Bool* aggregated /**< pointer to store whether the aggregation was successful */
556  );
557 
558 /** returns whether variable is not allowed to be multi-aggregated */
559 extern
561  SCIP_VAR* var /**< problem variable */
562  );
563 
564 /** returns whether the variable was flagged for deletion from global structures (cliques etc.) */
566  SCIP_VAR* var /**< problem variable */
567  );
568 
569 /** gets negated variable x' = offset - x of problem variable x; the negated variable is created if not yet existing;
570  * the negation offset of binary variables is always 1, the offset of other variables is fixed to lb + ub when the
571  * negated variable is created
572  */
573 extern
575  SCIP_VAR* var, /**< problem variable to negate */
576  BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
577  SCIP_SET* set, /**< global SCIP settings */
578  SCIP_STAT* stat, /**< problem statistics */
579  SCIP_VAR** negvar /**< pointer to store the negated variable */
580  );
581 
582 /** informs variable that its position in problem's vars array changed */
583 extern
585  SCIP_VAR* var, /**< problem variable */
586  int probindex /**< new problem index of variable */
587  );
588 
589 /** gives the variable a new name
590  *
591  * @note the old pointer is overwritten, which might result in a memory leakage
592  */
593 extern
595  SCIP_VAR* var, /**< problem variable */
596  const char* name /**< new name of variable */
597  );
598 
599 /** informs variable that it will be removed from the problem; adjusts probindex and removes variable from the
600  * implication graph;
601  * If 'final' is TRUE, the thorough implication graph removal is not performed. Instead, only the
602  * variable bounds and implication data structures of the variable are freed. Since in the final removal
603  * of all variables from the transformed problem, this deletes the implication graph completely and is faster
604  * than removing the variables one by one, each time updating all lists of the other variables.
605  */
606 extern
608  SCIP_VAR* var, /**< problem variable */
609  BMS_BLKMEM* blkmem, /**< block memory buffer */
610  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
611  SCIP_SET* set, /**< global SCIP settings */
612  SCIP_Bool final /**< is this the final removal of all problem variables? */
613  );
614 
615 /** marks the variable to be deleted from the problem */
616 extern
617 void SCIPvarMarkDeleted(
618  SCIP_VAR* var /**< problem variable */
619  );
620 
621 /** marks the variable to not to be multi-aggregated */
622 extern
624  SCIP_VAR* var /**< problem variable */
625  );
626 
627 /** modifies lock numbers for rounding */
628 extern
630  SCIP_VAR* var, /**< problem variable */
631  BMS_BLKMEM* blkmem, /**< block memory */
632  SCIP_SET* set, /**< global SCIP settings */
633  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
634  SCIP_LOCKTYPE locktype, /**< type of the variable locks */
635  int addnlocksdown, /**< increase in number of rounding down locks */
636  int addnlocksup /**< increase in number of rounding up locks */
637  );
638 
639 /** changes type of variable; cannot be called, if var belongs to a problem */
640 extern
642  SCIP_VAR* var, /**< problem variable to change */
643  SCIP_VARTYPE vartype /**< new type of variable */
644  );
645 
646 /** changes objective value of variable */
647 extern
649  SCIP_VAR* var, /**< variable to change */
650  BMS_BLKMEM* blkmem, /**< block memory */
651  SCIP_SET* set, /**< global SCIP settings */
652  SCIP_PROB* prob, /**< problem data */
653  SCIP_PRIMAL* primal, /**< primal data */
654  SCIP_LP* lp, /**< current LP data */
655  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
656  SCIP_Real newobj /**< new objective value for variable */
657  );
658 
659 /** adds value to objective value of variable */
660 extern
662  SCIP_VAR* var, /**< variable to change */
663  BMS_BLKMEM* blkmem, /**< block memory */
664  SCIP_SET* set, /**< global SCIP settings */
665  SCIP_STAT* stat, /**< problem statistics */
666  SCIP_PROB* transprob, /**< tranformed problem data */
667  SCIP_PROB* origprob, /**< original problem data */
668  SCIP_PRIMAL* primal, /**< primal data */
669  SCIP_TREE* tree, /**< branch and bound tree */
670  SCIP_REOPT* reopt, /**< reoptimization data structure */
671  SCIP_LP* lp, /**< current LP data */
672  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
673  SCIP_Real addobj /**< additional objective value for variable */
674  );
675 
676 /** changes objective value of variable in current dive */
677 extern
679  SCIP_VAR* var, /**< problem variable to change */
680  SCIP_SET* set, /**< global SCIP settings */
681  SCIP_LP* lp, /**< current LP data */
682  SCIP_Real newobj /**< new objective value for variable */
683  );
684 
685 /** adjust lower bound to integral value, if variable is integral */
686 extern
687 void SCIPvarAdjustLb(
688  SCIP_VAR* var, /**< problem variable */
689  SCIP_SET* set, /**< global SCIP settings */
690  SCIP_Real* lb /**< pointer to lower bound to adjust */
691  );
692 
693 /** adjust upper bound to integral value, if variable is integral */
694 extern
695 void SCIPvarAdjustUb(
696  SCIP_VAR* var, /**< problem variable */
697  SCIP_SET* set, /**< global SCIP settings */
698  SCIP_Real* ub /**< pointer to upper bound to adjust */
699  );
700 
701 /** adjust lower or upper bound to integral value, if variable is integral */
702 extern
703 void SCIPvarAdjustBd(
704  SCIP_VAR* var, /**< problem variable */
705  SCIP_SET* set, /**< global SCIP settings */
706  SCIP_BOUNDTYPE boundtype, /**< type of bound to adjust */
707  SCIP_Real* bd /**< pointer to bound to adjust */
708  );
709 
710 /** changes lower bound of original variable in original problem */
711 extern
713  SCIP_VAR* var, /**< problem variable to change */
714  SCIP_SET* set, /**< global SCIP settings */
715  SCIP_Real newbound /**< new bound for variable */
716  );
717 
718 /** changes upper bound of original variable in original problem */
719 extern
721  SCIP_VAR* var, /**< problem variable to change */
722  SCIP_SET* set, /**< global SCIP settings */
723  SCIP_Real newbound /**< new bound for variable */
724  );
725 
726 /** changes global lower bound of variable; if possible, adjusts bound to integral value;
727  * updates local lower bound if the global bound is tighter
728  */
729 extern
731  SCIP_VAR* var, /**< problem variable to change */
732  BMS_BLKMEM* blkmem, /**< block memory */
733  SCIP_SET* set, /**< global SCIP settings */
734  SCIP_STAT* stat, /**< problem statistics */
735  SCIP_LP* lp, /**< current LP data, may be NULL for original variables */
736  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage, may be NULL for original variables */
737  SCIP_EVENTQUEUE* eventqueue, /**< event queue, may be NULL for original variables */
738  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
739  SCIP_Real newbound /**< new bound for variable */
740  );
741 
742 /** changes global upper bound of variable; if possible, adjusts bound to integral value;
743  * updates local upper bound if the global bound is tighter
744  */
745 extern
747  SCIP_VAR* var, /**< problem variable to change */
748  BMS_BLKMEM* blkmem, /**< block memory */
749  SCIP_SET* set, /**< global SCIP settings */
750  SCIP_STAT* stat, /**< problem statistics */
751  SCIP_LP* lp, /**< current LP data, may be NULL for original variables */
752  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage, may be NULL for original variables */
753  SCIP_EVENTQUEUE* eventqueue, /**< event queue, may be NULL for original variables */
754  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
755  SCIP_Real newbound /**< new bound for variable */
756  );
757 
758 /** changes global bound of variable; if possible, adjusts bound to integral value;
759  * updates local bound if the global bound is tighter
760  */
761 extern
763  SCIP_VAR* var, /**< problem variable to change */
764  BMS_BLKMEM* blkmem, /**< block memory */
765  SCIP_SET* set, /**< global SCIP settings */
766  SCIP_STAT* stat, /**< problem statistics */
767  SCIP_LP* lp, /**< current LP data, may be NULL for original variables */
768  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage, may be NULL for original variables */
769  SCIP_EVENTQUEUE* eventqueue, /**< event queue, may be NULL for original variables */
770  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
771  SCIP_Real newbound, /**< new bound for variable */
772  SCIP_BOUNDTYPE boundtype /**< type of bound: lower or upper bound */
773  );
774 
775 /** changes current local lower bound of variable; if possible, adjusts bound to integral value; stores inference
776  * information in variable
777  */
778 extern
780  SCIP_VAR* var, /**< problem variable to change */
781  BMS_BLKMEM* blkmem, /**< block memory */
782  SCIP_SET* set, /**< global SCIP settings */
783  SCIP_STAT* stat, /**< problem statistics */
784  SCIP_LP* lp, /**< current LP data, may be NULL for original variables */
785  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage, may be NULL for original variables */
786  SCIP_EVENTQUEUE* eventqueue, /**< event queue, may be NULL for original variables */
787  SCIP_Real newbound /**< new bound for variable */
788  );
789 
790 /** changes current local upper bound of variable; if possible, adjusts bound to integral value; stores inference
791  * information in variable
792  */
793 extern
795  SCIP_VAR* var, /**< problem variable to change */
796  BMS_BLKMEM* blkmem, /**< block memory */
797  SCIP_SET* set, /**< global SCIP settings */
798  SCIP_STAT* stat, /**< problem statistics */
799  SCIP_LP* lp, /**< current LP data, may be NULL for original variables */
800  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage, may be NULL for original variables */
801  SCIP_EVENTQUEUE* eventqueue, /**< event queue, may be NULL for original variables */
802  SCIP_Real newbound /**< new bound for variable */
803  );
804 
805 /** changes current local bound of variable; if possible, adjusts bound to integral value; stores inference
806  * information in variable
807  */
808 extern
810  SCIP_VAR* var, /**< problem variable to change */
811  BMS_BLKMEM* blkmem, /**< block memory */
812  SCIP_SET* set, /**< global SCIP settings */
813  SCIP_STAT* stat, /**< problem statistics */
814  SCIP_LP* lp, /**< current LP data, may be NULL for original variables */
815  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage, may be NULL for original variables */
816  SCIP_EVENTQUEUE* eventqueue, /**< event queue, may be NULL for original variables */
817  SCIP_Real newbound, /**< new bound for variable */
818  SCIP_BOUNDTYPE boundtype /**< type of bound: lower or upper bound */
819  );
820 
821 /** changes lazy lower bound of the variable, this is only possible if the variable is not in the LP yet */
822 extern
824  SCIP_VAR* var, /**< problem variable */
825  SCIP_SET* set, /**< global SCIP settings */
826  SCIP_Real lazylb /**< the lazy lower bound to be set */
827  );
828 
829 /** changes lazy upper bound of the variable, this is only possible if the variable is not in the LP yet */
831  SCIP_VAR* var, /**< problem variable */
832  SCIP_SET* set, /**< global SCIP settings */
833  SCIP_Real lazylb /**< the lazy lower bound to be set */
834  );
835 
836 /** changes lower bound of variable in current dive; if possible, adjusts bound to integral value */
837 extern
839  SCIP_VAR* var, /**< problem variable to change */
840  SCIP_SET* set, /**< global SCIP settings */
841  SCIP_LP* lp, /**< current LP data */
842  SCIP_Real newbound /**< new bound for variable */
843  );
844 
845 /** changes upper bound of variable in current dive; if possible, adjusts bound to integral value */
846 extern
848  SCIP_VAR* var, /**< problem variable to change */
849  SCIP_SET* set, /**< global SCIP settings */
850  SCIP_LP* lp, /**< current LP data */
851  SCIP_Real newbound /**< new bound for variable */
852  );
853 
854 /** for a multi-aggregated variable, gives the local lower bound computed by adding the local bounds from all aggregation variables
855  * this lower bound may be tighter than the one given by SCIPvarGetLbLocal, since the latter is not updated if bounds of aggregation variables are changing
856  * calling this function for a non-multi-aggregated variable is not allowed
857  */
858 extern
860  SCIP_VAR* var, /**< problem variable */
861  SCIP_SET* set /**< global SCIP settings */
862  );
863 
864 /** for a multi-aggregated variable, gives the local upper bound computed by adding the local bounds from all aggregation variables
865  * this upper bound may be tighter than the one given by SCIPvarGetUbLocal, since the latter is not updated if bounds of aggregation variables are changing
866  * calling this function for a non-multi-aggregated variable is not allowed
867  */
868 extern
870  SCIP_VAR* var, /**< problem variable */
871  SCIP_SET* set /**< global SCIP settings */
872  );
873 
874 /** for a multi-aggregated variable, gives the global lower bound computed by adding the global bounds from all aggregation variables
875  * this global bound may be tighter than the one given by SCIPvarGetLbGlobal, since the latter is not updated if bounds of aggregation variables are changing
876  * calling this function for a non-multi-aggregated variable is not allowed
877  */
878 extern
880  SCIP_VAR* var, /**< problem variable */
881  SCIP_SET* set /**< global SCIP settings */
882  );
883 
884 /** for a multi-aggregated variable, gives the global upper bound computed by adding the global bounds from all aggregation variables
885  * this upper bound may be tighter than the one given by SCIPvarGetUbGlobal, since the latter is not updated if bounds of aggregation variables are changing
886  * calling this function for a non-multi-aggregated variable is not allowed
887  */
888 extern
890  SCIP_VAR* var, /**< problem variable */
891  SCIP_SET* set /**< global SCIP settings */
892  );
893 
894 /** adds a hole to the original domain of the variable*/
895 extern
897  SCIP_VAR* var, /**< problem variable */
898  BMS_BLKMEM* blkmem, /**< block memory */
899  SCIP_SET* set, /**< global SCIP settings */
900  SCIP_Real left, /**< left bound of open interval in new hole */
901  SCIP_Real right /**< right bound of open interval in new hole */
902  );
903 
904 /** adds a hole to the variable's global domain */
905 extern
907  SCIP_VAR* var, /**< problem variable */
908  BMS_BLKMEM* blkmem, /**< block memory */
909  SCIP_SET* set, /**< global SCIP settings */
910  SCIP_STAT* stat, /**< problem statistics */
911  SCIP_EVENTQUEUE* eventqueue, /**< event queue, may be NULL for original variables */
912  SCIP_Real left, /**< left bound of open interval in new hole */
913  SCIP_Real right, /**< right bound of open interval in new hole */
914  SCIP_Bool* added /**< pointer to store whether the hole was added, or NULL */
915  );
916 
917 /** adds a hole to the variable's current local domain */
918 extern
920  SCIP_VAR* var, /**< problem variable */
921  BMS_BLKMEM* blkmem, /**< block memory */
922  SCIP_SET* set, /**< global SCIP settings */
923  SCIP_STAT* stat, /**< problem statistics */
924  SCIP_EVENTQUEUE* eventqueue, /**< event queue, may be NULL for original variables */
925  SCIP_Real left, /**< left bound of open interval in new hole */
926  SCIP_Real right, /**< right bound of open interval in new hole */
927  SCIP_Bool* added /**< pointer to store whether the hole was added, or NULL */
928  );
929 
930 /** resets the global and local bounds of original variable to their original values */
931 extern
933  SCIP_VAR* var, /**< problem variable */
934  BMS_BLKMEM* blkmem, /**< block memory */
935  SCIP_SET* set, /**< global SCIP settings */
936  SCIP_STAT* stat /**< problem statistics */
937  );
938 
939 /** returns at which depth in the tree a bound change was applied to the variable that conflicts with the
940  * given bound; returns -1 if the bound does not conflict with the current local bounds of the variable
941  */
942 extern
944  SCIP_VAR* var, /**< problem variable */
945  SCIP_SET* set, /**< global SCIP settings */
946  SCIP_BOUNDTYPE boundtype, /**< bound type of the conflicting bound */
947  SCIP_Real bound /**< conflicting bound */
948  );
949 
950 /** informs variable x about a globally valid variable lower bound x >= b*z + d with integer variable z;
951  * if z is binary, the corresponding valid implication for z is also added;
952  * improves the global bounds of the variable and the vlb variable if possible
953  */
954 extern
956  SCIP_VAR* var, /**< problem variable */
957  BMS_BLKMEM* blkmem, /**< block memory */
958  SCIP_SET* set, /**< global SCIP settings */
959  SCIP_STAT* stat, /**< problem statistics */
960  SCIP_PROB* transprob, /**< transformed problem */
961  SCIP_PROB* origprob, /**< original problem */
962  SCIP_TREE* tree, /**< branch and bound tree if in solving stage */
963  SCIP_REOPT* reopt, /**< reoptimization data structure */
964  SCIP_LP* lp, /**< current LP data */
965  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
966  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
967  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
968  SCIP_VAR* vlbvar, /**< variable z in x >= b*z + d */
969  SCIP_Real vlbcoef, /**< coefficient b in x >= b*z + d */
970  SCIP_Real vlbconstant, /**< constant d in x >= b*z + d */
971  SCIP_Bool transitive, /**< should transitive closure of implication also be added? */
972  SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
973  int* nbdchgs /**< pointer to store the number of performed bound changes, or NULL */
974  );
975 
976 /** informs variable x about a globally valid variable upper bound x <= b*z + d with integer variable z;
977  * if z is binary, the corresponding valid implication for z is also added;
978  * updates the global bounds of the variable and the vub variable correspondingly
979  */
980 extern
982  SCIP_VAR* var, /**< problem variable */
983  BMS_BLKMEM* blkmem, /**< block memory */
984  SCIP_SET* set, /**< global SCIP settings */
985  SCIP_STAT* stat, /**< problem statistics */
986  SCIP_PROB* transprob, /**< transformed problem */
987  SCIP_PROB* origprob, /**< original problem */
988  SCIP_TREE* tree, /**< branch and bound tree if in solving stage */
989  SCIP_REOPT* reopt, /**< reoptimization data structure */
990  SCIP_LP* lp, /**< current LP data */
991  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
992  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
993  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
994  SCIP_VAR* vubvar, /**< variable z in x <= b*z + d */
995  SCIP_Real vubcoef, /**< coefficient b in x <= b*z + d */
996  SCIP_Real vubconstant, /**< constant d in x <= b*z + d */
997  SCIP_Bool transitive, /**< should transitive closure of implication also be added? */
998  SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
999  int* nbdchgs /**< pointer to store the number of performed bound changes, or NULL */
1000  );
1001 
1002 /** informs binary variable x about a globally valid implication: x == 0 or x == 1 ==> y <= b or y >= b;
1003  * also adds the corresponding implication or variable bound to the implied variable;
1004  * if the implication is conflicting, the variable is fixed to the opposite value;
1005  * if the variable is already fixed to the given value, the implication is performed immediately;
1006  * if the implication is redundant with respect to the variables' global bounds, it is ignored
1007  */
1008 extern
1010  SCIP_VAR* var, /**< problem variable */
1011  BMS_BLKMEM* blkmem, /**< block memory */
1012  SCIP_SET* set, /**< global SCIP settings */
1013  SCIP_STAT* stat, /**< problem statistics */
1014  SCIP_PROB* transprob, /**< transformed problem */
1015  SCIP_PROB* origprob, /**< original problem */
1016  SCIP_TREE* tree, /**< branch and bound tree if in solving stage */
1017  SCIP_REOPT* reopt, /**< reoptimization data structure */
1018  SCIP_LP* lp, /**< current LP data */
1019  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
1020  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
1021  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
1022  SCIP_Bool varfixing, /**< FALSE if y should be added in implications for x == 0, TRUE for x == 1 */
1023  SCIP_VAR* implvar, /**< variable y in implication y <= b or y >= b */
1024  SCIP_BOUNDTYPE impltype, /**< type of implication y <= b (SCIP_BOUNDTYPE_UPPER) or y >= b (SCIP_BOUNDTYPE_LOWER) */
1025  SCIP_Real implbound, /**< bound b in implication y <= b or y >= b */
1026  SCIP_Bool transitive, /**< should transitive closure of implication also be added? */
1027  SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
1028  int* nbdchgs /**< pointer to store the number of performed bound changes, or NULL */
1029  );
1030 
1031 /** fixes the bounds of a binary variable to the given value, counting bound changes and detecting infeasibility */
1032 extern
1034  SCIP_VAR* var, /**< problem variable */
1035  BMS_BLKMEM* blkmem, /**< block memory */
1036  SCIP_SET* set, /**< global SCIP settings */
1037  SCIP_STAT* stat, /**< problem statistics */
1038  SCIP_PROB* transprob, /**< transformed problem */
1039  SCIP_PROB* origprob, /**< original problem */
1040  SCIP_TREE* tree, /**< branch and bound tree if in solving stage */
1041  SCIP_REOPT* reopt, /**< reoptimization data structure */
1042  SCIP_LP* lp, /**< current LP data */
1043  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
1044  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
1045  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
1046  SCIP_Bool value, /**< value to fix variable to */
1047  SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
1048  int* nbdchgs /**< pointer to count the number of performed bound changes, or NULL */
1049  );
1050 
1051 /** adds the variable to the given clique and updates the list of cliques the binary variable is member of;
1052  * if the variable now appears twice in the clique with the same value, it is fixed to the opposite value;
1053  * if the variable now appears twice in the clique with opposite values, all other variables are fixed to
1054  * the opposite of the value they take in the clique
1055  */
1056 extern
1058  SCIP_VAR* var, /**< problem variable */
1059  BMS_BLKMEM* blkmem, /**< block memory */
1060  SCIP_SET* set, /**< global SCIP settings */
1061  SCIP_STAT* stat, /**< problem statistics */
1062  SCIP_PROB* transprob, /**< transformed problem */
1063  SCIP_PROB* origprob, /**< original problem */
1064  SCIP_TREE* tree, /**< branch and bound tree if in solving stage */
1065  SCIP_REOPT* reopt, /**< reoptimization data structure */
1066  SCIP_LP* lp, /**< current LP data */
1067  SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
1068  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
1069  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
1070  SCIP_Bool value, /**< value of the variable in the clique */
1071  SCIP_CLIQUE* clique, /**< clique the variable should be added to */
1072  SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
1073  int* nbdchgs /**< pointer to count the number of performed bound changes, or NULL */
1074  );
1075 
1076 /** adds a filled clique to the cliquelists of all corresponding variables */
1077 extern
1079  SCIP_VAR** vars, /**< problem variables */
1080  SCIP_Bool* values, /**< values of the variables in the clique */
1081  int nvars, /**< number of problem variables */
1082  BMS_BLKMEM* blkmem, /**< block memory */
1083  SCIP_SET* set, /**< global SCIP settings */
1084  SCIP_CLIQUE* clique /**< clique that contains all given variables and values */
1085  );
1086 
1087 /** deletes the variable from the given clique and updates the list of cliques the binary variable is member of */
1088 extern
1090  SCIP_VAR* var, /**< problem variable */
1091  BMS_BLKMEM* blkmem, /**< block memory */
1092  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
1093  SCIP_Bool value, /**< value of the variable in the clique */
1094  SCIP_CLIQUE* clique /**< clique the variable should be removed from */
1095  );
1096 
1097 /** adds a clique to the list of cliques of the given binary variable, but does not change the clique
1098  * itself
1099  */
1100 extern
1102  SCIP_VAR* var, /**< problem variable */
1103  BMS_BLKMEM* blkmem, /**< block memory */
1104  SCIP_SET* set, /**< global SCIP settings */
1105  SCIP_Bool value, /**< value of the variable in the clique */
1106  SCIP_CLIQUE* clique /**< clique that should be removed from the variable's clique list */
1107  );
1108 
1109 /** deletes a clique from the list of cliques the binary variable is member of, but does not change the clique
1110  * itself
1111  */
1112 extern
1114  SCIP_VAR* var, /**< problem variable */
1115  BMS_BLKMEM* blkmem, /**< block memory */
1116  SCIP_Bool value, /**< value of the variable in the clique */
1117  SCIP_CLIQUE* clique /**< clique that should be removed from the variable's clique list */
1118  );
1119 
1120 /** sets the branch factor of the variable; this value can be used in the branching methods to scale the score
1121  * values of the variables; higher factor leads to a higher probability that this variable is chosen for branching
1122  */
1123 extern
1125  SCIP_VAR* var, /**< problem variable */
1126  SCIP_SET* set, /**< global SCIP settings */
1127  SCIP_Real branchfactor /**< factor to weigh variable's branching score with */
1128  );
1129 
1130 /** sets the branch priority of the variable; variables with higher branch priority are always preferred to variables
1131  * with lower priority in selection of branching variable
1132  */
1133 extern
1135  SCIP_VAR* var, /**< problem variable */
1136  int branchpriority /**< branching priority of the variable */
1137  );
1138 
1139 /** sets the branch direction of the variable; variables with higher branch direction are always preferred to variables
1140  * with lower direction in selection of branching variable
1141  */
1142 extern
1144  SCIP_VAR* var, /**< problem variable */
1145  SCIP_BRANCHDIR branchdirection /**< preferred branch direction of the variable (downwards, upwards, auto) */
1146  );
1147 
1148 /** gets objective value of variable in current SCIP_LP; the value can be different from the bound stored in the variable's own
1149  * data due to diving, that operate only on the LP without updating the variables
1150  */
1151 extern
1153  SCIP_VAR* var /**< problem variable */
1154  );
1155 
1156 /** gets lower bound of variable in current SCIP_LP; the bound can be different from the bound stored in the variable's own
1157  * data due to diving or conflict analysis, that operate only on the LP without updating the variables
1158  */
1159 extern
1161  SCIP_VAR* var, /**< problem variable */
1162  SCIP_SET* set /**< global SCIP settings */
1163  );
1164 
1165 /** gets upper bound of variable in current SCIP_LP; the bound can be different from the bound stored in the variable's own
1166  * data due to diving or conflict analysis, that operate only on the LP without updating the variables
1167  */
1168 extern
1170  SCIP_VAR* var, /**< problem variable */
1171  SCIP_SET* set /**< global SCIP settings */
1172  );
1173 
1174 /** returns solution value and index of variable lower bound that is closest to the variable's value in the given primal solution
1175  * or current LP solution if no primal solution is given; returns an index of -1 if no variable lower bound is available
1176  */
1177 extern
1179  SCIP_VAR* var, /**< active problem variable */
1180  SCIP_SOL* sol, /**< primal solution, or NULL for LP solution */
1181  SCIP_SET* set, /**< global SCIP settings */
1182  SCIP_STAT* stat, /**< problem statistics */
1183  SCIP_Real* closestvlb, /**< pointer to store the value of the closest variable lower bound */
1184  int* closestvlbidx /**< pointer to store the index of the closest variable lower bound */
1185  );
1186 
1187 /** returns solution value and index of variable upper bound that is closest to the variable's value in the given primal solution;
1188  * or current LP solution if no primal solution is given; returns an index of -1 if no variable upper bound is available
1189  */
1190 extern
1192  SCIP_VAR* var, /**< active problem variable */
1193  SCIP_SOL* sol, /**< primal solution, or NULL for LP solution */
1194  SCIP_SET* set, /**< global SCIP settings */
1195  SCIP_STAT* stat, /**< problem statistics */
1196  SCIP_Real* closestvub, /**< pointer to store the value of the closest variable upper bound */
1197  int* closestvubidx /**< pointer to store the index of the closest variable upper bound */
1198  );
1199 
1200 /** remembers the current solution as root solution in the problem variables */
1201 extern
1202 void SCIPvarStoreRootSol(
1203  SCIP_VAR* var, /**< problem variable */
1204  SCIP_Bool roothaslp /**< is the root solution from LP? */
1205  );
1206 
1207 /** updates the current solution as best root solution in the problem variables if it is better */
1208 extern
1210  SCIP_VAR* var, /**< problem variable */
1211  SCIP_SET* set, /**< global SCIP settings */
1212  SCIP_Real rootsol, /**< root solution value */
1213  SCIP_Real rootredcost, /**< root reduced cost */
1214  SCIP_Real rootlpobjval /**< objective value of the root LP */
1215  );
1216 
1217 /** returns the solution value of the problem variables in the relaxation solution */
1218 extern
1220  SCIP_VAR* var, /**< problem variable */
1221  SCIP_SET* set /**< global SCIP settings */
1222  );
1223 
1224 /** returns the solution value of the transformed problem variable in the relaxation solution */
1225 extern
1227  SCIP_VAR* var /**< problem variable */
1228  );
1229 
1230 /** returns for the given binary variable the reduced cost which are given by the variable itself and its implication if
1231  * the binary variable is fixed to the given value
1232  */
1233 extern
1235  SCIP_VAR* var, /**< problem variable */
1236  SCIP_SET* set, /**< global SCIP settings */
1237  SCIP_Bool varfixing, /**< FALSE if for x == 0, TRUE for x == 1 */
1238  SCIP_STAT* stat, /**< problem statistics */
1239  SCIP_PROB* prob, /**< transformed problem, or NULL */
1240  SCIP_LP* lp /**< current LP data */
1241  );
1242 
1243 
1244 /** stores the solution value as relaxation solution in the problem variable */
1245 extern
1247  SCIP_VAR* var, /**< problem variable */
1248  SCIP_SET* set, /**< global SCIP settings */
1249  SCIP_RELAXATION* relaxation, /**< global relaxation data */
1250  SCIP_Real solval, /**< solution value in the current relaxation solution */
1251  SCIP_Bool updateobj /**< should the objective value be updated? */
1252  );
1253 
1254 /** stores the solution value as NLP solution in the problem variable */
1255 extern
1257  SCIP_VAR* var, /**< problem variable */
1258  SCIP_SET* set, /**< global SCIP settings */
1259  SCIP_Real solval /**< solution value in the current NLP solution */
1260  );
1261 
1262 /** resolves variable to columns and adds them with the coefficient to the row */
1263 extern
1265  SCIP_VAR* var, /**< problem variable */
1266  BMS_BLKMEM* blkmem, /**< block memory */
1267  SCIP_SET* set, /**< global SCIP settings */
1268  SCIP_STAT* stat, /**< problem statistics */
1269  SCIP_EVENTQUEUE* eventqueue, /**< event queue */
1270  SCIP_PROB* prob, /**< problem data */
1271  SCIP_LP* lp, /**< current LP data */
1272  SCIP_ROW* row, /**< LP row */
1273  SCIP_Real val /**< value of coefficient */
1274  );
1275 
1276 
1277 /** merge two variable histories together; a typical use case is that \p othervar is an image of the target variable
1278  * in a SCIP copy. Method should be applied with care, especially because no internal checks are performed whether
1279  * the history merge is reasonable
1280  *
1281  * @note Do not use this method if the two variables originate from two SCIP's with different objective functions, since
1282  * this corrupts the variable pseudo costs
1283  * @note Apply with care; no internal checks are performed if the two variables should be merged
1284  */
1285 extern
1287  SCIP_VAR* targetvar, /**< the variable that should contain both histories afterwards */
1288  SCIP_VAR* othervar, /**< the variable whose history is to be merged with that of the target variable */
1289  SCIP_STAT* stat /**< problem statistics */
1290  );
1291 
1292 /** sets the history of a variable; this method is typacally used within reoptimization to keep and update the variable
1293  * history over several iteraions
1294  */
1295 extern
1296 void SCIPvarSetHistory(
1297  SCIP_VAR* var, /**< variable */
1298  SCIP_HISTORY* history, /**< the history which is to set */
1299  SCIP_STAT* stat /**< problem statistics */
1300  );
1301 
1302 /** updates the pseudo costs of the given variable and the global pseudo costs after a change of
1303  * "solvaldelta" in the variable's solution value and resulting change of "objdelta" in the in the LP's objective value
1304  */
1305 extern
1307  SCIP_VAR* var, /**< problem variable */
1308  SCIP_SET* set, /**< global SCIP settings */
1309  SCIP_STAT* stat, /**< problem statistics */
1310  SCIP_Real solvaldelta, /**< difference of variable's new LP value - old LP value */
1311  SCIP_Real objdelta, /**< difference of new LP's objective value - old LP's objective value */
1312  SCIP_Real weight /**< weight in (0,1] of this update in pseudo cost sum */
1313  );
1314 
1315 /** gets the variable's pseudo cost value for the given step size "solvaldelta" in the variable's LP solution value */
1316 extern
1318  SCIP_VAR* var, /**< problem variable */
1319  SCIP_STAT* stat, /**< problem statistics */
1320  SCIP_Real solvaldelta /**< difference of variable's new LP value - old LP value */
1321  );
1322 
1323 /** gets the variable's pseudo cost value for the given step size "solvaldelta" in the variable's LP solution value,
1324  * only using the pseudo cost information of the current run
1325  */
1326 extern
1328  SCIP_VAR* var, /**< problem variable */
1329  SCIP_STAT* stat, /**< problem statistics */
1330  SCIP_Real solvaldelta /**< difference of variable's new LP value - old LP value */
1331  );
1332 
1333 /** gets the variable's (possible fractional) number of pseudo cost updates for the given direction */
1334 extern
1336  SCIP_VAR* var, /**< problem variable */
1337  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1338  );
1339 
1340 /** gets the variable's (possible fractional) number of pseudo cost updates for the given direction,
1341  * only using the pseudo cost information of the current run
1342  */
1343 extern
1345  SCIP_VAR* var, /**< problem variable */
1346  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1347  );
1348 
1349 
1350 /** compares both possible directions for rounding the given solution value and returns the minimum pseudo-costs of the variable */
1352  SCIP_VAR* var, /**< problem variable */
1353  SCIP_STAT* stat, /**< problem statistics */
1354  SCIP_SET* set, /**< global SCIP settings */
1355  SCIP_Real solval /**< solution value, e.g., LP solution value */
1356  );
1357 
1358 /** gets the an estimate of the variable's pseudo cost variance in direction \p dir */
1359 extern
1361  SCIP_VAR* var, /**< problem variable */
1362  SCIP_BRANCHDIR dir, /**< branching direction (downwards, or upwards) */
1363  SCIP_Bool onlycurrentrun /**< return pseudo cost variance only for current branch and bound run */
1364  );
1365 
1366 /** calculates a confidence bound for this variable under the assumption of normally distributed pseudo costs
1367  *
1368  * The confidence bound \f$ \theta \geq 0\f$ denotes the interval borders \f$ [X - \theta, \ X + \theta]\f$, which contains
1369  * the true pseudo costs of the variable, i.e., the expected value of the normal distribution, with a probability
1370  * of 95 %.
1371  *
1372  * @return value of confidence bound for this variable
1373  */
1374 extern
1376  SCIP_VAR* var, /**< variable in question */
1377  SCIP_SET* set, /**< global SCIP settings */
1378  SCIP_BRANCHDIR dir, /**< the branching direction for the confidence bound */
1379  SCIP_Bool onlycurrentrun, /**< should only the current run be taken into account */
1380  SCIP_CONFIDENCELEVEL clevel /**< confidence level for the interval */
1381  );
1382 
1383 /** check if the current pseudo cost relative error in a direction violates the given threshold. The Relative
1384  * Error is calculated at a specific confidence level
1385  */
1386 extern
1388  SCIP_VAR* var, /**< variable in question */
1389  SCIP_SET* set, /**< global SCIP settings */
1390  SCIP_STAT* stat, /**< problem statistics */
1391  SCIP_Real threshold, /**< threshold for relative errors to be considered reliable (enough) */
1392  SCIP_CONFIDENCELEVEL clevel /**< a given confidence level */
1393  );
1394 
1395 /** check if variable pseudo-costs have a significant difference in location. The significance depends on
1396  * the choice of \p clevel and on the kind of tested hypothesis. The one-sided hypothesis, which
1397  * should be rejected, is that fracy * mu_y >= fracx * mu_x, where mu_y and mu_x denote the
1398  * unknown location means of the underlying pseudo-cost distributions of x and y.
1399  *
1400  * This method is applied best if variable x has a better pseudo-cost score than y. The method hypothesizes that y were actually
1401  * better than x (despite the current information), meaning that y can be expected to yield branching
1402  * decisions as least as good as x in the long run. If the method returns TRUE, the current history information is
1403  * sufficient to safely rely on the alternative hypothesis that x yields indeed a better branching score (on average)
1404  * than y.
1405  *
1406  * @note The order of x and y matters for the one-sided hypothesis
1407  *
1408  * @note set \p onesided to FALSE if you are not sure which variable is better. The hypothesis tested then reads
1409  * fracy * mu_y == fracx * mu_x vs the alternative hypothesis fracy * mu_y != fracx * mu_x.
1410  *
1411  * @return TRUE if the hypothesis can be safely rejected at the given confidence level
1412  */
1413 extern
1415  SCIP_SET* set, /**< global SCIP settings */
1416  SCIP_STAT* stat, /**< problem statistics */
1417  SCIP_VAR* varx, /**< variable x */
1418  SCIP_Real fracx, /**< the fractionality of variable x */
1419  SCIP_VAR* vary, /**< variable y */
1420  SCIP_Real fracy, /**< the fractionality of variable y */
1421  SCIP_BRANCHDIR dir, /**< branching direction */
1422  SCIP_CONFIDENCELEVEL clevel, /**< confidence level for rejecting hypothesis */
1423  SCIP_Bool onesided /**< should a one-sided hypothesis y >= x be tested? */
1424  );
1425 
1426 /** tests at a given confidence level whether the variable pseudo-costs only have a small probability to
1427  * exceed a \p threshold. This is useful to determine if past observations provide enough evidence
1428  * to skip an expensive strong-branching step if there is already a candidate that has been proven to yield an improvement
1429  * of at least \p threshold.
1430  *
1431  * @note use \p clevel to adjust the level of confidence. For SCIP_CONFIDENCELEVEL_MIN, the method returns TRUE if
1432  * the estimated probability to exceed \p threshold is less than 25 %.
1433  *
1434  * @see SCIP_Confidencelevel for a list of available levels. The used probability limits refer to the one-sided levels
1435  * of confidence.
1436  *
1437  * @return TRUE if the variable pseudo-cost probabilistic model is likely to be smaller than \p threshold
1438  * at the given confidence level \p clevel.
1439  */
1440 extern
1442  SCIP_SET* set, /**< global SCIP settings */
1443  SCIP_STAT* stat, /**< problem statistics */
1444  SCIP_VAR* var, /**< variable x */
1445  SCIP_Real frac, /**< the fractionality of variable x */
1446  SCIP_Real threshold, /**< the threshold to test against */
1447  SCIP_BRANCHDIR dir, /**< branching direction */
1448  SCIP_CONFIDENCELEVEL clevel /**< confidence level for rejecting hypothesis */
1449  );
1450 
1451 /** increases the VSIDS of the variable by the given weight */
1452 extern
1454  SCIP_VAR* var, /**< problem variable */
1455  BMS_BLKMEM* blkmem, /**< block memory, or NULL if the domain value is SCIP_UNKNOWN */
1456  SCIP_SET* set, /**< global SCIP settings, or NULL if the domain value is SCIP_UNKNOWN */
1457  SCIP_STAT* stat, /**< problem statistics */
1458  SCIP_BRANCHDIR dir, /**< branching direction */
1459  SCIP_Real value, /**< domain value, or SCIP_UNKNOWN */
1460  SCIP_Real weight /**< weight of this update in conflict score */
1461  );
1462 
1463 /** scales the VSIDS of the variable by the given scalar */
1464 extern
1466  SCIP_VAR* var, /**< problem variable */
1467  SCIP_Real scalar /**< scalar to multiply the conflict scores with */
1468  );
1469 
1470 /** increases the number of active conflicts by one and the overall length of the variable by the given length */
1472  SCIP_VAR* var, /**< problem variable */
1473  BMS_BLKMEM* blkmem, /**< block memory, or NULL if the domain value is SCIP_UNKNOWN */
1474  SCIP_SET* set, /**< global SCIP settings, or NULL if the domain value is SCIP_UNKNOWN */
1475  SCIP_STAT* stat, /**< problem statistics */
1476  SCIP_BRANCHDIR dir, /**< branching direction */
1477  SCIP_Real value, /**< domain value, or SCIP_UNKNOWN */
1478  SCIP_Real length /**< length of the conflict */
1479  );
1480 
1481 /** gets the number of active conflicts containing this variable in given direction */
1483  SCIP_VAR* var, /**< problem variable */
1484  SCIP_STAT* stat, /**< problem statistics */
1485  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1486  );
1487 
1488 /** gets the number of active conflicts containing this variable in given direction
1489  * in the current run
1490  */
1492  SCIP_VAR* var, /**< problem variable */
1493  SCIP_STAT* stat, /**< problem statistics */
1494  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1495  );
1496 
1497 /** gets the average conflict length in given direction due to branching on the variable */
1499  SCIP_VAR* var, /**< problem variable */
1500  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1501  );
1502 
1503 /** gets the average conflict length in given direction due to branching on the variable
1504  * in the current run
1505  */
1507  SCIP_VAR* var, /**< problem variable */
1508  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1509  );
1510 
1511 /** increases the number of branchings counter of the variable */
1512 extern
1514  SCIP_VAR* var, /**< problem variable */
1515  BMS_BLKMEM* blkmem, /**< block memory, or NULL if the domain value is SCIP_UNKNOWN */
1516  SCIP_SET* set, /**< global SCIP settings, or NULL if the domain value is SCIP_UNKNOWN */
1517  SCIP_STAT* stat, /**< problem statistics */
1518  SCIP_BRANCHDIR dir, /**< branching direction (downwards, or upwards) */
1519  SCIP_Real value, /**< domain value, or SCIP_UNKNOWN */
1520  int depth /**< depth at which the bound change took place */
1521  );
1522 
1523 /** increases the inference score of the variable by the given weight */
1524 extern
1526  SCIP_VAR* var, /**< problem variable */
1527  BMS_BLKMEM* blkmem, /**< block memory, or NULL if the domain value is SCIP_UNKNOWN */
1528  SCIP_SET* set, /**< global SCIP settings, or NULL if the domain value is SCIP_UNKNOWN */
1529  SCIP_STAT* stat, /**< problem statistics */
1530  SCIP_BRANCHDIR dir, /**< branching direction (downwards, or upwards) */
1531  SCIP_Real value, /**< domain value, or SCIP_UNKNOWN */
1532  SCIP_Real weight /**< weight of this update in inference score */
1533  );
1534 
1535 /** increases the cutoff score of the variable by the given weight */
1536 extern
1538  SCIP_VAR* var, /**< problem variable */
1539  BMS_BLKMEM* blkmem, /**< block memory, or NULL if the domain value is SCIP_UNKNOWN */
1540  SCIP_SET* set, /**< global SCIP settings, or NULL if the domain value is SCIP_UNKNOWN */
1541  SCIP_STAT* stat, /**< problem statistics */
1542  SCIP_BRANCHDIR dir, /**< branching direction (downwards, or upwards) */
1543  SCIP_Real value, /**< domain value, or SCIP_UNKNOWN */
1544  SCIP_Real weight /**< weight of this update in cutoff score */
1545  );
1546 
1547 /** returns the variable's VSIDS score */
1548 extern
1550  SCIP_VAR* var, /**< problem variable */
1551  SCIP_STAT* stat, /**< problem statistics */
1552  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1553  );
1554 
1555 /** returns the variable's VSIDS score only using conflicts of the current run */
1556 extern
1558  SCIP_VAR* var, /**< problem variable */
1559  SCIP_STAT* stat, /**< problem statistics */
1560  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1561  );
1562 
1563 /** returns the average number of inferences found after branching on the variable in given direction */
1564 extern
1566  SCIP_VAR* var, /**< problem variable */
1567  SCIP_STAT* stat, /**< problem statistics */
1568  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1569  );
1570 
1571 /** returns the average number of inferences found after branching on the variable in given direction
1572  * in the current run
1573  */
1574 extern
1576  SCIP_VAR* var, /**< problem variable */
1577  SCIP_STAT* stat, /**< problem statistics */
1578  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1579  );
1580 
1581 /** returns the average number of cutoffs found after branching on the variable in given direction */
1582 extern
1584  SCIP_VAR* var, /**< problem variable */
1585  SCIP_STAT* stat, /**< problem statistics */
1586  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1587  );
1588 
1589 /** returns the average number of cutoffs found after branching on the variable in given direction in the current run */
1590 extern
1592  SCIP_VAR* var, /**< problem variable */
1593  SCIP_STAT* stat, /**< problem statistics */
1594  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1595  );
1596 
1597 /** outputs variable information into file stream */
1598 extern
1600  SCIP_VAR* var, /**< problem variable */
1601  SCIP_SET* set, /**< global SCIP settings */
1602  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1603  FILE* file /**< output file (or NULL for standard output) */
1604  );
1605 
1606 /** includes event handler with given data in variable's event filter */
1607 extern
1609  SCIP_VAR* var, /**< problem variable */
1610  BMS_BLKMEM* blkmem, /**< block memory */
1611  SCIP_SET* set, /**< global SCIP settings */
1612  SCIP_EVENTTYPE eventtype, /**< event type to catch */
1613  SCIP_EVENTHDLR* eventhdlr, /**< event handler to call for the event processing */
1614  SCIP_EVENTDATA* eventdata, /**< event data to pass to the event handler for the event processing */
1615  int* filterpos /**< pointer to store position of event filter entry, or NULL */
1616  );
1617 
1618 /** deletes event handler with given data from variable's event filter */
1619 extern
1621  SCIP_VAR* var, /**< problem variable */
1622  BMS_BLKMEM* blkmem, /**< block memory */
1623  SCIP_SET* set, /**< global SCIP settings */
1624  SCIP_EVENTTYPE eventtype, /**< event type mask of dropped event */
1625  SCIP_EVENTHDLR* eventhdlr, /**< event handler to call for the event processing */
1626  SCIP_EVENTDATA* eventdata, /**< event data to pass to the event handler for the event processing */
1627  int filterpos /**< position of event filter entry returned by SCIPvarCatchEvent(), or -1 */
1628  );
1629 
1630 /** returns the variable's VSIDS score */
1631 extern
1633  SCIP_VAR* var, /**< problem variable */
1634  SCIP_STAT* stat, /**< problem statistics */
1635  SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
1636  );
1637 
1638 /** returns the position of the bound change index */
1639 extern
1640 int SCIPbdchgidxGetPos(
1641  SCIP_BDCHGIDX* bdchgidx /**< bound change index */
1642  );
1643 
1644 /** removes (redundant) cliques, implications and variable bounds of variable from all other variables' implications and variable
1645  * bounds arrays, and optionally removes them also from the variable itself
1646  */
1647 extern
1649  SCIP_VAR* var, /**< problem variable */
1650  BMS_BLKMEM* blkmem, /**< block memory */
1651  SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
1652  SCIP_SET* set, /**< global SCIP settings */
1653  SCIP_Bool irrelevantvar, /**< has the variable become irrelevant? */
1654  SCIP_Bool onlyredundant, /**< should only the redundant implications and variable bounds be removed? */
1655  SCIP_Bool removefromvar /**< should the implications and variable bounds be removed from the var itself? */
1656  );
1657 
1658 #ifdef NDEBUG
1659 
1660 /* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and
1661  * speed up the algorithms.
1662  */
1663 
1664 #define SCIPvarCatchEvent(var, blkmem, set, eventtype, eventhdlr, eventdata, filterpos) \
1665  SCIPeventfilterAdd(var->eventfilter, blkmem, set, eventtype, eventhdlr, eventdata, filterpos)
1666 #define SCIPvarDropEvent(var, blkmem, set, eventtype, eventhdlr, eventdata, filterpos) \
1667  SCIPeventfilterDel(var->eventfilter, blkmem, set, eventtype, eventhdlr, eventdata, filterpos)
1668 #define SCIPvarGetVSIDS(var, stat, dir) ((var)->varstatus == SCIP_VARSTATUS_LOOSE || (var)->varstatus == SCIP_VARSTATUS_COLUMN ? \
1669  SCIPhistoryGetVSIDS(var->history, dir)/stat->vsidsweight : SCIPvarGetVSIDS_rec(var, stat, dir))
1670 #define SCIPbdchgidxGetPos(bdchgidx) ((bdchgidx)->pos)
1671 
1672 #endif
1673 
1674 /*
1675  * Hash functions
1676  */
1677 
1678 /** gets the key (i.e. the name) of the given variable */
1679 extern
1680 SCIP_DECL_HASHGETKEY(SCIPhashGetKeyVar);
1681 
1682 #ifdef __cplusplus
1683 }
1684 #endif
1685 
1686 #endif
SCIP_Real SCIPvarGetRelaxSolTransVar(SCIP_VAR *var)
Definition: var.c:13477
SCIP_RETCODE SCIPvarColumn(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_LP *lp)
Definition: var.c:3457
enum SCIP_BoundType SCIP_BOUNDTYPE
Definition: type_lp.h:50
SCIP_RETCODE SCIPvarChgBdLocal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype)
Definition: var.c:7931
SCIP_RETCODE SCIPvarChgBdGlobal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype)
Definition: var.c:7228
internal methods for managing events
int SCIPbdchgidxGetPos(SCIP_BDCHGIDX *bdchgidx)
Definition: var.c:17876
SCIP_RETCODE SCIPvarAddVlb(SCIP_VAR *var, 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_CLIQUETABLE *cliquetable, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *vlbvar, SCIP_Real vlbcoef, SCIP_Real vlbconstant, SCIP_Bool transitive, SCIP_Bool *infeasible, int *nbdchgs)
Definition: var.c:9709
SCIP_Real SCIPvarGetPseudocostCurrentRun(SCIP_VAR *var, SCIP_STAT *stat, SCIP_Real solvaldelta)
Definition: var.c:14006
public methods for branching and inference history structure
SCIP_RETCODE SCIPdomchgApply(SCIP_DOMCHG *domchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, int depth, SCIP_Bool *cutoff)
Definition: var.c:1225
SCIP_RETCODE SCIPvarChgLbLocal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_Real newbound)
Definition: var.c:7680
void SCIPvarCapture(SCIP_VAR *var)
Definition: var.c:2762
type definitions for miscellaneous datastructures
type definitions for implications, variable bounds, and cliques
SCIP_RETCODE SCIPvarsGetActiveVars(SCIP_SET *set, SCIP_VAR **vars, int *nvars, int varssize, int *requiredsize)
Definition: var.c:11492
SCIP_RETCODE SCIPvarPrint(SCIP_VAR *var, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
Definition: var.c:2895
SCIP_Real SCIPvarGetAvgCutoffs(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:15745
#define SCIP_DECL_VARTRANS(x)
Definition: type_var.h:138
void SCIPvarSetHistory(SCIP_VAR *var, SCIP_HISTORY *history, SCIP_STAT *stat)
Definition: var.c:4365
SCIP_RETCODE SCIPvarCreateOriginal(SCIP_VAR **var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata)
Definition: var.c:2001
SCIP_RETCODE SCIPdomchgMakeStatic(SCIP_DOMCHG **domchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
Definition: var.c:1087
void SCIPvarInitSolve(SCIP_VAR *var)
Definition: var.c:2819
SCIP_RETCODE SCIPvarTryAggregateVars(SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_CLIQUETABLE *cliquetable, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_Real scalarx, SCIP_Real scalary, SCIP_Real rhs, SCIP_Bool *infeasible, SCIP_Bool *aggregated)
Definition: var.c:5098
SCIP_RETCODE SCIPvarChgBranchDirection(SCIP_VAR *var, SCIP_BRANCHDIR branchdirection)
Definition: var.c:11305
SCIP_Real SCIPvarGetVSIDSCurrentRun(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:15408
SCIP_DECL_HASHGETKEY(SCIPhashGetKeyVar)
Definition: var.c:16490
SCIP_RETCODE SCIPvarChgObj(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_Real newobj)
Definition: var.c:5976
void SCIPbdchginfoFree(SCIP_BDCHGINFO **bdchginfo, BMS_BLKMEM *blkmem)
Definition: var.c:15876
static long bound
SCIP_RETCODE SCIPvarRelease(SCIP_VAR **var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
Definition: var.c:2774
SCIP_Longint SCIPvarGetNActiveConflictsCurrentRun(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:14795
SCIP_Real SCIPvarGetRelaxSol(SCIP_VAR *var, SCIP_SET *set)
Definition: var.c:13405
SCIP_RETCODE SCIPvarIncVSIDS(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real weight)
Definition: var.c:14531
SCIP_RETCODE SCIPvarResetBounds(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
Definition: var.c:8939
SCIP_RETCODE SCIPvarAddHoleLocal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_Real left, SCIP_Real right, SCIP_Bool *added)
Definition: var.c:8830
SCIP_RETCODE SCIPboundchgApply(SCIP_BOUNDCHG *boundchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, int depth, int pos, SCIP_Bool *cutoff)
Definition: var.c:554
SCIP_Bool SCIPvarIsMarkedDeleteGlobalStructures(SCIP_VAR *var)
Definition: var.c:16997
struct SCIP_VarData SCIP_VARDATA
Definition: type_var.h:107
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:53
SCIP_RETCODE SCIPvarCopy(SCIP_VAR **var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP *sourcescip, SCIP_VAR *sourcevar, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global)
Definition: var.c:2086
type definitions for global SCIP settings
#define SCIP_DECL_VARCOPY(x)
Definition: type_var.h:181
SCIP_Real SCIPvarGetMultaggrUbGlobal(SCIP_VAR *var, SCIP_SET *set)
Definition: var.c:8340
SCIP_Bool SCIPvarPscostThresholdProbabilityTest(SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_Real frac, SCIP_Real threshold, SCIP_BRANCHDIR dir, SCIP_CONFIDENCELEVEL clevel)
Definition: var.c:14407
SCIP_RETCODE SCIPvarChgType(SCIP_VAR *var, SCIP_VARTYPE vartype)
Definition: var.c:5925
SCIP_Real SCIPvarGetImplRedcost(SCIP_VAR *var, SCIP_SET *set, SCIP_Bool varfixing, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_LP *lp)
Definition: var.c:12951
SCIP_Bool SCIPvarSignificantPscostDifference(SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *varx, SCIP_Real fracx, SCIP_VAR *vary, SCIP_Real fracy, SCIP_BRANCHDIR dir, SCIP_CONFIDENCELEVEL clevel, SCIP_Bool onesided)
Definition: var.c:14341
type definitions for return codes for SCIP methods
SCIP_Real SCIPvarGetMultaggrLbGlobal(SCIP_VAR *var, SCIP_SET *set)
Definition: var.c:8274
SCIP_RETCODE SCIPvarCreateTransformed(SCIP_VAR **var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata)
Definition: var.c:2044
SCIP_RETCODE SCIPvarChgUbOriginal(SCIP_VAR *var, SCIP_SET *set, SCIP_Real newbound)
Definition: var.c:6336
SCIP_RETCODE SCIPvarGetTransformed(SCIP_VAR *origvar, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR **transvar)
Definition: var.c:3426
type definitions for collecting reoptimization information
SCIP_RETCODE SCIPvarDelCliqueFromList(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_Bool value, SCIP_CLIQUE *clique)
Definition: var.c:10904
void SCIPvarAdjustUb(SCIP_VAR *var, SCIP_SET *set, SCIP_Real *ub)
Definition: var.c:6244
type definitions for branching rules
type definitions for problem statistics
SCIP_RETCODE SCIPvarAddVub(SCIP_VAR *var, 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_CLIQUETABLE *cliquetable, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *vubvar, SCIP_Real vubcoef, SCIP_Real vubconstant, SCIP_Bool transitive, SCIP_Bool *infeasible, int *nbdchgs)
Definition: var.c:10081
SCIP_RETCODE SCIPvarSetNLPSol(SCIP_VAR *var, SCIP_SET *set, SCIP_Real solval)
Definition: var.c:13488
SCIP_RETCODE SCIPvarRemove(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, SCIP_Bool final)
Definition: var.c:5843
SCIP_RETCODE SCIPvarAddObj(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_Real addobj)
Definition: var.c:6051
#define SCIP_DECL_VARDELTRANS(x)
Definition: type_var.h:151
type definitions for LP management
SCIP_RETCODE SCIPvarIncInferenceSum(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real weight)
Definition: var.c:15011
enum SCIP_BranchDir SCIP_BRANCHDIR
Definition: type_history.h:39
SCIP_Real SCIPbdchginfoGetRelaxedBound(SCIP_BDCHGINFO *bdchginfo)
Definition: var.c:18065
void SCIPvarMarkDeleted(SCIP_VAR *var)
Definition: var.c:5879
SCIP_RETCODE SCIPdomchgAddBoundchg(SCIP_DOMCHG **domchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_VAR *var, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype, SCIP_BOUNDCHGTYPE boundchgtype, SCIP_Real lpsolval, SCIP_VAR *infervar, SCIP_CONS *infercons, SCIP_PROP *inferprop, int inferinfo, SCIP_BOUNDTYPE inferboundtype)
Definition: var.c:1348
SCIP_Bool SCIPvarDoNotMultaggr(SCIP_VAR *var)
Definition: var.c:5667
SCIP_Real SCIPvarGetAvgInferences(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:15547
SCIP_Real SCIPvarCalcPscostConfidenceBound(SCIP_VAR *var, SCIP_SET *set, SCIP_BRANCHDIR dir, SCIP_Bool onlycurrentrun, SCIP_CONFIDENCELEVEL clevel)
Definition: var.c:14226
enum SCIP_Confidencelevel SCIP_CONFIDENCELEVEL
Definition: type_misc.h:44
SCIP_Bool SCIPvarIsPscostRelerrorReliable(SCIP_VAR *var, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real threshold, SCIP_CONFIDENCELEVEL clevel)
Definition: var.c:14264
SCIP_RETCODE SCIPvarIncNActiveConflicts(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real length)
Definition: var.c:14667
SCIP_Real SCIPvarGetPseudocostVariance(SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Bool onlycurrentrun)
Definition: var.c:14172
void SCIPvarGetClosestVlb(SCIP_VAR *var, SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real *closestvlb, int *closestvlbidx)
Definition: var.c:13604
SCIP_RETCODE SCIPvarChgUbLazy(SCIP_VAR *var, SCIP_SET *set, SCIP_Real lazylb)
Definition: var.c:7202
SCIP_Real SCIPvarGetPseudocostCountCurrentRun(SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition: var.c:14098
SCIP_RETCODE SCIPvarAggregate(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_CLIQUETABLE *cliquetable, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *aggvar, SCIP_Real scalar, SCIP_Real constant, SCIP_Bool *infeasible, SCIP_Bool *aggregated)
Definition: var.c:4570
enum SCIP_LockType SCIP_LOCKTYPE
Definition: type_var.h:87
SCIP_RETCODE SCIPvarAddCliqueToList(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool value, SCIP_CLIQUE *clique)
Definition: var.c:10882
SCIP_RETCODE SCIPvarParseOriginal(SCIP_VAR **var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, const char *str, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARCOPY((*varcopy)), SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_VARDATA *vardata, char **endptr, SCIP_Bool *success)
Definition: var.c:2413
type definitions for SCIP&#39;s main datastructure
SCIP_RETCODE SCIPvarGetProbvarSum(SCIP_VAR **var, SCIP_SET *set, SCIP_Real *scalar, SCIP_Real *constant)
Definition: var.c:12133
SCIP_RETCODE SCIPvarCatchEvent(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
Definition: var.c:17824
void SCIPvarSetNamePointer(SCIP_VAR *var, const char *name)
Definition: var.c:5825
SCIP_RETCODE SCIPvarUpdatePseudocost(SCIP_VAR *var, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real solvaldelta, SCIP_Real objdelta, SCIP_Real weight)
Definition: var.c:13859
struct SCIP_EventData SCIP_EVENTDATA
Definition: type_event.h:155
SCIP_Real SCIPvarGetLbLP(SCIP_VAR *var, SCIP_SET *set)
Definition: var.c:12418
SCIP_RETCODE SCIPvarMultiaggregate(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_CLIQUETABLE *cliquetable, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, int naggvars, SCIP_VAR **aggvars, SCIP_Real *scalars, SCIP_Real constant, SCIP_Bool *infeasible, SCIP_Bool *aggregated)
Definition: var.c:5264
SCIP_RETCODE SCIPvarDropEvent(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
Definition: var.c:17851
SCIP_RETCODE SCIPbdchginfoCreate(SCIP_BDCHGINFO **bdchginfo, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_Real oldbound, SCIP_Real newbound)
Definition: var.c:15846
SCIP_Real SCIPvarGetVSIDS_rec(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:15357
SCIP_RETCODE SCIPvarChgLbDive(SCIP_VAR *var, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newbound)
Definition: var.c:7957
SCIP_RETCODE SCIPvarChgBranchPriority(SCIP_VAR *var, int branchpriority)
Definition: var.c:11175
SCIP_Real SCIPvarGetAvgConflictlength(SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition: var.c:14840
type definitions for problem variables
type definitions for relaxators
SCIP_Real SCIPvarGetAvgInferencesCurrentRun(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:15604
SCIP_Real SCIPvarGetObjLP(SCIP_VAR *var)
Definition: var.c:12372
type definitions for managing events
SCIP_RETCODE SCIPvarChgLbGlobal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Real newbound)
Definition: var.c:6895
SCIP_Real SCIPvarGetMultaggrUbLocal(SCIP_VAR *var, SCIP_SET *set)
Definition: var.c:8208
SCIP_Real SCIPvarGetPseudocost(SCIP_VAR *var, SCIP_STAT *stat, SCIP_Real solvaldelta)
Definition: var.c:13957
SCIP_RETCODE SCIPdomchgAddHolechg(SCIP_DOMCHG **domchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_HOLELIST **ptr, SCIP_HOLELIST *newlist, SCIP_HOLELIST *oldlist)
Definition: var.c:1445
void SCIPvarAdjustLb(SCIP_VAR *var, SCIP_SET *set, SCIP_Real *lb)
Definition: var.c:6227
SCIP_RETCODE SCIPvarAddLocks(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LOCKTYPE locktype, int addnlocksdown, int addnlocksup)
Definition: var.c:3056
#define SCIP_Bool
Definition: def.h:69
SCIP_Real SCIPvarGetAvgConflictlengthCurrentRun(SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition: var.c:14884
SCIP_RETCODE SCIPdomchgUndo(SCIP_DOMCHG *domchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue)
Definition: var.c:1274
enum SCIP_Objsense SCIP_OBJSENSE
Definition: type_prob.h:41
void SCIPvarGetClosestVub(SCIP_VAR *var, SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_Real *closestvub, int *closestvubidx)
Definition: var.c:13679
SCIP_RETCODE SCIPvarFlattenAggregationGraph(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set)
Definition: var.c:4291
SCIP_RETCODE SCIPvarChgObjDive(SCIP_VAR *var, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newobj)
Definition: var.c:6164
SCIP_Longint SCIPvarGetNActiveConflicts(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:14748
SCIP_RETCODE SCIPvarsAddClique(SCIP_VAR **vars, SCIP_Bool *values, int nvars, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_CLIQUE *clique)
Definition: var.c:10844
SCIP_Real SCIPvarGetAvgCutoffsCurrentRun(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:15792
type definitions for branch and bound tree
SCIP_RETCODE SCIPvarNegate(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR **negvar)
Definition: var.c:5702
SCIP_RETCODE SCIPvarChgName(SCIP_VAR *var, BMS_BLKMEM *blkmem, const char *name)
Definition: var.c:2801
type definitions for storing primal CIP solutions
type definitions for storing and manipulating the main problem
SCIP_Real SCIPvarGetMultaggrLbLocal(SCIP_VAR *var, SCIP_SET *set)
Definition: var.c:8142
SCIP_RETCODE SCIPvarRemoveCliquesImplicsVbs(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, SCIP_Bool irrelevantvar, SCIP_Bool onlyredundant, SCIP_Bool removefromvar)
Definition: var.c:1535
SCIP_RETCODE SCIPvarAddHoleOriginal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Real left, SCIP_Real right)
Definition: var.c:8401
SCIP_RETCODE SCIPvarParseTransformed(SCIP_VAR **var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, const char *str, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARCOPY((*varcopy)), SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_VARDATA *vardata, char **endptr, SCIP_Bool *success)
Definition: var.c:2477
void SCIPvarMergeHistories(SCIP_VAR *targetvar, SCIP_VAR *othervar, SCIP_STAT *stat)
Definition: var.c:4349
SCIP_RETCODE SCIPvarAddClique(SCIP_VAR *var, 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_CLIQUETABLE *cliquetable, SCIP_Bool value, SCIP_CLIQUE *clique, SCIP_Bool *infeasible, int *nbdchgs)
Definition: var.c:10759
#define SCIP_DECL_VARDELORIG(x)
Definition: type_var.h:118
type definitions for propagators
void SCIPvarStoreRootSol(SCIP_VAR *var, SCIP_Bool roothaslp)
Definition: var.c:12753
SCIP_RETCODE SCIPvarIncNBranchings(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, int depth)
Definition: var.c:14927
SCIP_RETCODE SCIPvarMarkDoNotMultaggr(SCIP_VAR *var)
Definition: var.c:5890
SCIP_Real SCIPvarGetPseudocostCount(SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition: var.c:14053
static const SCIP_Real scalars[]
Definition: lp.c:5650
SCIP_RETCODE SCIPvarChgUbLocal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_Real newbound)
Definition: var.c:7806
SCIP_MESSAGEHDLR * messagehdlr
Definition: struct_visual.h:44
SCIP_RETCODE SCIPvarFix(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, 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_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
Definition: var.c:3627
SCIP_Real SCIPvarGetUbLP(SCIP_VAR *var, SCIP_SET *set)
Definition: var.c:12488
datastructures for problem variables
#define SCIP_Real
Definition: def.h:157
result codes for SCIP callback methods
SCIP_RETCODE SCIPvarChgLbLazy(SCIP_VAR *var, SCIP_SET *set, SCIP_Real lazylb)
Definition: var.c:7179
type definitions for branching and inference history
SCIP_RETCODE SCIPdomchgFree(SCIP_DOMCHG **domchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
Definition: var.c:986
SCIP_RETCODE SCIPvarChgLbOriginal(SCIP_VAR *var, SCIP_SET *set, SCIP_Real newbound)
Definition: var.c:6277
SCIP_RETCODE SCIPvarTransform(SCIP_VAR *origvar, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_OBJSENSE objsense, SCIP_VAR **transvar)
Definition: var.c:3340
SCIP_RETCODE SCIPvarAddHoleGlobal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_Real left, SCIP_Real right, SCIP_Bool *added)
Definition: var.c:8582
#define SCIP_Longint
Definition: def.h:142
SCIP_RETCODE SCIPvarLoose(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_LP *lp)
Definition: var.c:3491
SCIP_RETCODE SCIPvarScaleVSIDS(SCIP_VAR *var, SCIP_Real scalar)
Definition: var.c:14617
SCIP_RETCODE SCIPvarAddImplic(SCIP_VAR *var, 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_CLIQUETABLE *cliquetable, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool transitive, SCIP_Bool *infeasible, int *nbdchgs)
Definition: var.c:10436
void SCIPvarUpdateBestRootSol(SCIP_VAR *var, SCIP_SET *set, SCIP_Real rootsol, SCIP_Real rootredcost, SCIP_Real rootlpobjval)
Definition: var.c:12764
void SCIPvarSetProbindex(SCIP_VAR *var, int probindex)
Definition: var.c:5810
int SCIPvarGetConflictingBdchgDepth(SCIP_VAR *var, SCIP_SET *set, SCIP_BOUNDTYPE boundtype, SCIP_Real bound)
Definition: var.c:16358
type definitions for message output methods
enum SCIP_Vartype SCIP_VARTYPE
Definition: type_var.h:60
SCIP_RETCODE SCIPvarIncCutoffSum(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real weight)
Definition: var.c:15095
SCIP_Real SCIPvarGetMinPseudocostScore(SCIP_VAR *var, SCIP_STAT *stat, SCIP_SET *set, SCIP_Real solval)
Definition: var.c:14141
SCIP_RETCODE SCIPvarDelClique(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool value, SCIP_CLIQUE *clique)
Definition: var.c:10921
type definitions for collecting primal CIP solutions and primal informations
SCIP_RETCODE SCIPvarSetRelaxSol(SCIP_VAR *var, SCIP_SET *set, SCIP_RELAXATION *relaxation, SCIP_Real solval, SCIP_Bool updateobj)
Definition: var.c:13344
SCIP_RETCODE SCIPvarAddToRow(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_LP *lp, SCIP_ROW *row, SCIP_Real val)
Definition: var.c:13751
common defines and data types used in all packages of SCIP
SCIP_RETCODE SCIPvarGetActiveRepresentatives(SCIP_SET *set, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize, SCIP_Bool mergemultiples)
Definition: var.c:3796
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:426
SCIP_RETCODE SCIPboundchgUndo(SCIP_BOUNDCHG *boundchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue)
Definition: var.c:751
enum SCIP_BoundchgType SCIP_BOUNDCHGTYPE
Definition: type_var.h:78
void SCIPvarAdjustBd(SCIP_VAR *var, SCIP_SET *set, SCIP_BOUNDTYPE boundtype, SCIP_Real *bd)
Definition: var.c:6261
SCIP_RETCODE SCIPdomchgApplyGlobal(SCIP_DOMCHG *domchg, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool *cutoff)
Definition: var.c:1309
SCIP_RETCODE SCIPvarChgUbGlobal(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Real newbound)
Definition: var.c:7038
SCIP_Real SCIPvarGetVSIDS(SCIP_VAR *var, SCIP_STAT *stat, SCIP_BRANCHDIR dir)
Definition: var.c:17809
type definitions for constraints and constraint handlers
SCIP_RETCODE SCIPvarFixBinary(SCIP_VAR *var, 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_CLIQUETABLE *cliquetable, SCIP_Bool value, SCIP_Bool *infeasible, int *nbdchgs)
Definition: var.c:10668
SCIP_RETCODE SCIPvarChgBranchFactor(SCIP_VAR *var, SCIP_SET *set, SCIP_Real branchfactor)
Definition: var.c:11049
uint64_t SCIP_EVENTTYPE
Definition: type_event.h:134
SCIP_RETCODE SCIPvarChgUbDive(SCIP_VAR *var, SCIP_SET *set, SCIP_LP *lp, SCIP_Real newbound)
Definition: var.c:8047
memory allocation routines