SCIP Doxygen Documentation
Loading...
Searching...
No Matches
scip_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-2026 Zuse Institute Berlin (ZIB) */
7/* */
8/* Licensed under the Apache License, Version 2.0 (the "License"); */
9/* you may not use this file except in compliance with the License. */
10/* You may obtain a copy of the License at */
11/* */
12/* http://www.apache.org/licenses/LICENSE-2.0 */
13/* */
14/* Unless required by applicable law or agreed to in writing, software */
15/* distributed under the License is distributed on an "AS IS" BASIS, */
16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17/* See the License for the specific language governing permissions and */
18/* limitations under the License. */
19/* */
20/* You should have received a copy of the Apache-2.0 license */
21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
22/* */
23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24
25/**@file scip_var.h
26 * @ingroup PUBLICCOREAPI
27 * @brief public methods for SCIP variables
28 * @author Tobias Achterberg
29 * @author Timo Berthold
30 * @author Thorsten Koch
31 * @author Alexander Martin
32 * @author Marc Pfetsch
33 * @author Kati Wolter
34 * @author Gregor Hendel
35 * @author Leona Gottwald
36 */
37
38/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
39
40#ifndef __SCIP_SCIP_VAR_H__
41#define __SCIP_SCIP_VAR_H__
42
43
44#include "scip/def.h"
45#include "scip/type_cons.h"
46#include "scip/type_history.h"
47#include "scip/type_implics.h"
48#include "scip/type_lp.h"
49#include "scip/type_misc.h"
50#include "scip/type_prop.h"
51#include "scip/type_relax.h"
52#include "scip/type_result.h"
53#include "scip/type_retcode.h"
54#include "scip/type_scip.h"
55#include "scip/type_sol.h"
56#include "scip/type_tree.h"
57#include "scip/type_var.h"
58
59/* In debug mode, we include the SCIP's structure in scip.c, such that no one can access
60 * this structure except the interface methods in scip.c.
61 * In optimized mode, the structure is included in scip.h, because some of the methods
62 * are implemented as defines for performance reasons (e.g. the numerical comparisons).
63 * Additionally, the internal "set.h" is included, such that the defines in set.h are
64 * available in optimized mode.
65 */
66#ifdef NDEBUG
67#include "scip/pub_var.h"
68#endif
69
70#ifdef __cplusplus
71extern "C" {
72#endif
73
74/**@addtogroup PublicVariableMethods
75 *
76 *@{
77 */
78
79/** creates and captures problem variable
80 *
81 * If variable is of integral type, fractional bounds are automatically rounded.
82 * An integer variable with bounds zero and one is automatically converted into a binary variable.
83 *
84 * @warning When doing column generation and the original problem is a maximization problem, notice that SCIP will
85 * transform the problem into a minimization problem by multiplying the objective function by -1. Thus, the
86 * original objective function value of variables created during the solving process has to be multiplied by
87 * -1, too.
88 *
89 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
90 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
91 *
92 * @pre This method can be called if @p scip is in one of the following stages:
93 * - \ref SCIP_STAGE_PROBLEM
94 * - \ref SCIP_STAGE_TRANSFORMING
95 * - \ref SCIP_STAGE_INITPRESOLVE
96 * - \ref SCIP_STAGE_PRESOLVING
97 * - \ref SCIP_STAGE_EXITPRESOLVE
98 * - \ref SCIP_STAGE_PRESOLVED
99 * - \ref SCIP_STAGE_SOLVING
100 *
101 * @note the variable gets captured, hence at one point you have to release it using the method SCIPreleaseVar()
102 */
103SCIP_EXPORT
105 SCIP* scip, /**< SCIP data structure */
106 SCIP_VAR** var, /**< pointer to variable object */
107 const char* name, /**< name of variable, or NULL for automatic name creation */
108 SCIP_Real lb, /**< lower bound of variable */
109 SCIP_Real ub, /**< upper bound of variable */
110 SCIP_Real obj, /**< objective function value */
111 SCIP_VARTYPE vartype, /**< type of variable */
112 SCIP_Bool initial, /**< should var's column be present in the initial root LP? */
113 SCIP_Bool removable, /**< is var's column removable from the LP (due to aging or cleanup)? */
114 SCIP_DECL_VARDELORIG ((*vardelorig)), /**< frees user data of original variable, or NULL */
115 SCIP_DECL_VARTRANS ((*vartrans)), /**< creates transformed user data by transforming original user data, or NULL */
116 SCIP_DECL_VARDELTRANS ((*vardeltrans)), /**< frees user data of transformed variable, or NULL */
117 SCIP_DECL_VARCOPY ((*varcopy)), /**< copies variable data if wanted to subscip, or NULL */
118 SCIP_VARDATA* vardata /**< user data for this specific variable, or NULL */
119 );
120
121/** creates and captures problem variable without setting optional callbacks and variable data.
122 *
123 * Callbacks and variable data can be set in the following using SCIPvarSetDelorigData(), SCIPvarSetTransData(),
124 * SCIPvarSetDeltransData(), SCIPvarSetCopy(), and SCIPvarSetData().
125 *
126 * Variable flags are set as initial = TRUE and removable = FALSE, and can be adjusted by using SCIPvarSetInitial() and SCIPvarSetRemovable(), resp.
127 *
128 * If variable is of integral type, fractional bounds are automatically rounded.
129 * An integer variable with bounds zero and one is automatically converted into a binary variable.
130 *
131 * @warning When doing column generation and the original problem is a maximization problem, notice that SCIP will
132 * transform the problem into a minimization problem by multiplying the objective function by -1. Thus, the
133 * original objective function value of variables created during the solving process has to be multiplied by
134 * -1, too.
135 *
136 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
137 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
138 *
139 * @pre This method can be called if @p scip is in one of the following stages:
140 * - \ref SCIP_STAGE_PROBLEM
141 * - \ref SCIP_STAGE_TRANSFORMING
142 * - \ref SCIP_STAGE_INITPRESOLVE
143 * - \ref SCIP_STAGE_PRESOLVING
144 * - \ref SCIP_STAGE_EXITPRESOLVE
145 * - \ref SCIP_STAGE_PRESOLVED
146 * - \ref SCIP_STAGE_SOLVING
147 *
148 * @note the variable gets captured, hence at one point you have to release it using the method SCIPreleaseVar()
149 */
150SCIP_EXPORT
152 SCIP* scip, /**< SCIP data structure */
153 SCIP_VAR** var, /**< pointer to variable object */
154 const char* name, /**< name of variable, or NULL for automatic name creation */
155 SCIP_Real lb, /**< lower bound of variable */
156 SCIP_Real ub, /**< upper bound of variable */
157 SCIP_Real obj, /**< objective function value */
158 SCIP_VARTYPE vartype /**< type of variable */
159 );
160
161/** creates and captures problem variable that may be implied integral
162 *
163 * If variable is of integral type, fractional bounds are automatically rounded.
164 * An integer variable with bounds zero and one is automatically converted into a binary variable.
165 *
166 * @warning When doing column generation and the original problem is a maximization problem, notice that SCIP will
167 * transform the problem into a minimization problem by multiplying the objective function by -1. Thus, the
168 * original objective function value of variables created during the solving process has to be multiplied by
169 * -1, too.
170 *
171 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
172 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
173 *
174 * @pre This method can be called if @p scip is in one of the following stages:
175 * - \ref SCIP_STAGE_PROBLEM
176 * - \ref SCIP_STAGE_TRANSFORMING
177 * - \ref SCIP_STAGE_INITPRESOLVE
178 * - \ref SCIP_STAGE_PRESOLVING
179 * - \ref SCIP_STAGE_EXITPRESOLVE
180 * - \ref SCIP_STAGE_PRESOLVED
181 * - \ref SCIP_STAGE_SOLVING
182 *
183 * @note the variable gets captured, hence at one point you have to release it using the method SCIPreleaseVar()
184 */
185SCIP_EXPORT
187 SCIP* scip, /**< SCIP data structure */
188 SCIP_VAR** var, /**< pointer to variable object */
189 const char* name, /**< name of variable, or NULL for automatic name creation */
190 SCIP_Real lb, /**< lower bound of variable */
191 SCIP_Real ub, /**< upper bound of variable */
192 SCIP_Real obj, /**< objective function value */
193 SCIP_VARTYPE vartype, /**< type of variable */
194 SCIP_IMPLINTTYPE impltype, /**< implied integral type of the variable (none, weak or strong) */
195 SCIP_Bool initial, /**< should var's column be present in the initial root LP? */
196 SCIP_Bool removable, /**< is var's column removable from the LP (due to aging or cleanup)? */
197 SCIP_DECL_VARDELORIG ((*vardelorig)), /**< frees user data of original variable, or NULL */
198 SCIP_DECL_VARTRANS ((*vartrans)), /**< creates transformed user data by transforming original user data, or NULL */
199 SCIP_DECL_VARDELTRANS ((*vardeltrans)), /**< frees user data of transformed variable, or NULL */
200 SCIP_DECL_VARCOPY ((*varcopy)), /**< copies variable data if wanted to subscip, or NULL */
201 SCIP_VARDATA* vardata /**< user data for this specific variable, or NULL */
202);
203
204/** adds exact data to variable
205 *
206 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
207 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
208 *
209 * @pre This method can be called if @p scip is in one of the following stages:
210 * - \ref SCIP_STAGE_PROBLEM
211 * - \ref SCIP_STAGE_TRANSFORMING
212 * - \ref SCIP_STAGE_INITPRESOLVE
213 * - \ref SCIP_STAGE_PRESOLVING
214 * - \ref SCIP_STAGE_EXITPRESOLVE
215 * - \ref SCIP_STAGE_PRESOLVED
216 * - \ref SCIP_STAGE_SOLVING
217 */
218SCIP_EXPORT
220 SCIP* scip, /**< SCIP data structure */
221 SCIP_VAR* var, /**< pointer to variable */
222 SCIP_RATIONAL* lb, /**< lower bounf of variable */
223 SCIP_RATIONAL* ub, /**< upper bound of variable */
224 SCIP_RATIONAL* obj /** < objective function value */
225 );
226
227/** outputs the variable name to the file stream
228 *
229 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
230 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
231 *
232 * @pre This method can be called if @p scip is in one of the following stages:
233 * - \ref SCIP_STAGE_PROBLEM
234 * - \ref SCIP_STAGE_TRANSFORMING
235 * - \ref SCIP_STAGE_TRANSFORMED
236 * - \ref SCIP_STAGE_INITPRESOLVE
237 * - \ref SCIP_STAGE_PRESOLVING
238 * - \ref SCIP_STAGE_EXITPRESOLVE
239 * - \ref SCIP_STAGE_PRESOLVED
240 * - \ref SCIP_STAGE_INITSOLVE
241 * - \ref SCIP_STAGE_SOLVING
242 * - \ref SCIP_STAGE_SOLVED
243 * - \ref SCIP_STAGE_EXITSOLVE
244 * - \ref SCIP_STAGE_FREETRANS
245 */
246SCIP_EXPORT
248 SCIP* scip, /**< SCIP data structure */
249 FILE* file, /**< output file, or NULL for stdout */
250 SCIP_VAR* var, /**< variable to output */
251 SCIP_Bool type /**< should the variable type be also posted */
252 );
253
254/** print the given list of variables to output stream separated by the given delimiter character;
255 *
256 * i. e. the variables x1, x2, ..., xn with given delimiter ',' are written as: <x1>, <x2>, ..., <xn>;
257 *
258 * the method SCIPparseVarsList() can parse such a string
259 *
260 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
261 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
262 *
263 * @pre This method can be called if @p scip is in one of the following stages:
264 * - \ref SCIP_STAGE_PROBLEM
265 * - \ref SCIP_STAGE_TRANSFORMING
266 * - \ref SCIP_STAGE_TRANSFORMED
267 * - \ref SCIP_STAGE_INITPRESOLVE
268 * - \ref SCIP_STAGE_PRESOLVING
269 * - \ref SCIP_STAGE_EXITPRESOLVE
270 * - \ref SCIP_STAGE_PRESOLVED
271 * - \ref SCIP_STAGE_INITSOLVE
272 * - \ref SCIP_STAGE_SOLVING
273 * - \ref SCIP_STAGE_SOLVED
274 * - \ref SCIP_STAGE_EXITSOLVE
275 * - \ref SCIP_STAGE_FREETRANS
276 *
277 * @note The printing process is done via the message handler system.
278 */
279SCIP_EXPORT
281 SCIP* scip, /**< SCIP data structure */
282 FILE* file, /**< output file, or NULL for stdout */
283 SCIP_VAR** vars, /**< variable array to output */
284 int nvars, /**< number of variables */
285 SCIP_Bool type, /**< should the variable type be also posted */
286 char delimiter /**< character which is used for delimitation */
287 );
288
289/** print the given variables and coefficients as linear sum in the following form
290 * c1 <x1> + c2 <x2> ... + cn <xn>
291 *
292 * This string can be parsed by the method SCIPparseVarsLinearsum().
293 *
294 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
295 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
296 *
297 * @pre This method can be called if @p scip is in one of the following stages:
298 * - \ref SCIP_STAGE_PROBLEM
299 * - \ref SCIP_STAGE_TRANSFORMING
300 * - \ref SCIP_STAGE_TRANSFORMED
301 * - \ref SCIP_STAGE_INITPRESOLVE
302 * - \ref SCIP_STAGE_PRESOLVING
303 * - \ref SCIP_STAGE_EXITPRESOLVE
304 * - \ref SCIP_STAGE_PRESOLVED
305 * - \ref SCIP_STAGE_INITSOLVE
306 * - \ref SCIP_STAGE_SOLVING
307 * - \ref SCIP_STAGE_SOLVED
308 * - \ref SCIP_STAGE_EXITSOLVE
309 * - \ref SCIP_STAGE_FREETRANS
310 *
311 * @note The printing process is done via the message handler system.
312 */
313SCIP_EXPORT
315 SCIP* scip, /**< SCIP data structure */
316 FILE* file, /**< output file, or NULL for stdout */
317 SCIP_VAR** vars, /**< variable array to output */
318 SCIP_Real* vals, /**< array of coefficients or NULL if all coefficients are 1.0 */
319 int nvars, /**< number of variables */
320 SCIP_Bool type /**< should the variable type be also posted */
321 );
322
323
324/** print the given monomials as polynomial in the following form
325 * c1 <x11>^e11 <x12>^e12 ... <x1n>^e1n + c2 <x21>^e21 <x22>^e22 ... + ... + cn <xn1>^en1 ...
326 *
327 * This string can be parsed by the method SCIPparseVarsPolynomial().
328 *
329 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
330 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
331 *
332 * @pre This method can be called if @p scip is in one of the following stages:
333 * - \ref SCIP_STAGE_PROBLEM
334 * - \ref SCIP_STAGE_TRANSFORMING
335 * - \ref SCIP_STAGE_TRANSFORMED
336 * - \ref SCIP_STAGE_INITPRESOLVE
337 * - \ref SCIP_STAGE_PRESOLVING
338 * - \ref SCIP_STAGE_EXITPRESOLVE
339 * - \ref SCIP_STAGE_PRESOLVED
340 * - \ref SCIP_STAGE_INITSOLVE
341 * - \ref SCIP_STAGE_SOLVING
342 * - \ref SCIP_STAGE_SOLVED
343 * - \ref SCIP_STAGE_EXITSOLVE
344 * - \ref SCIP_STAGE_FREETRANS
345 *
346 * @note The printing process is done via the message handler system.
347 */
348SCIP_EXPORT
350 SCIP* scip, /**< SCIP data structure */
351 FILE* file, /**< output file, or NULL for stdout */
352 SCIP_VAR*** monomialvars, /**< arrays with variables for each monomial */
353 SCIP_Real** monomialexps, /**< arrays with variable exponents, or NULL if always 1.0 */
354 SCIP_Real* monomialcoefs, /**< array with monomial coefficients */
355 int* monomialnvars, /**< array with number of variables for each monomial */
356 int nmonomials, /**< number of monomials */
357 SCIP_Bool type /**< should the variable type be also posted */
358 );
359
360/** parses variable information (in cip format) out of a string; if the parsing process was successful a variable is
361 * created and captured; if variable is of integral type, fractional bounds are automatically rounded; an integer
362 * variable with bounds zero and one is automatically converted into a binary variable
363 *
364 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
365 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
366 *
367 * @pre This method can be called if @p scip is in one of the following stages:
368 * - \ref SCIP_STAGE_PROBLEM
369 * - \ref SCIP_STAGE_TRANSFORMING
370 * - \ref SCIP_STAGE_INITPRESOLVE
371 * - \ref SCIP_STAGE_PRESOLVING
372 * - \ref SCIP_STAGE_EXITPRESOLVE
373 * - \ref SCIP_STAGE_PRESOLVED
374 * - \ref SCIP_STAGE_SOLVING
375 */
376SCIP_EXPORT
378 SCIP* scip, /**< SCIP data structure */
379 SCIP_VAR** var, /**< pointer to store the problem variable */
380 const char* str, /**< string to parse */
381 SCIP_Bool initial, /**< should var's column be present in the initial root LP? */
382 SCIP_Bool removable, /**< is var's column removable from the LP (due to aging or cleanup)? */
383 SCIP_DECL_VARCOPY ((*varcopy)), /**< copies variable data if wanted to subscip, or NULL */
384 SCIP_DECL_VARDELORIG ((*vardelorig)), /**< frees user data of original variable */
385 SCIP_DECL_VARTRANS ((*vartrans)), /**< creates transformed user data by transforming original user data */
386 SCIP_DECL_VARDELTRANS ((*vardeltrans)), /**< frees user data of transformed variable */
387 SCIP_VARDATA* vardata, /**< user data for this specific variable */
388 char** endptr, /**< pointer to store the final string position if successful */
389 SCIP_Bool* success /**< pointer store if the paring process was successful */
390 );
391
392/** parses the given string for a variable name and stores the variable in the corresponding pointer if such a variable
393 * exits and returns the position where the parsing stopped
394 *
395 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
396 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
397 *
398 * @pre This method can be called if @p scip is in one of the following stages:
399 * - \ref SCIP_STAGE_PROBLEM
400 * - \ref SCIP_STAGE_TRANSFORMING
401 * - \ref SCIP_STAGE_INITPRESOLVE
402 * - \ref SCIP_STAGE_PRESOLVING
403 * - \ref SCIP_STAGE_EXITPRESOLVE
404 * - \ref SCIP_STAGE_PRESOLVED
405 * - \ref SCIP_STAGE_SOLVING
406 */
407SCIP_EXPORT
409 SCIP* scip, /**< SCIP data structure */
410 const char* str, /**< string to parse */
411 SCIP_VAR** var, /**< pointer to store the problem variable, or NULL if it does not exit */
412 char** endptr /**< pointer to store the final string position if successful */
413 );
414
415/** parse the given string as variable list (here ',' is the delimiter)) (<x1>, <x2>, ..., <xn>) (see
416 * SCIPwriteVarsList() ); if it was successful, the pointer success is set to TRUE
417 *
418 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
419 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
420 *
421 * @pre This method can be called if @p scip is in one of the following stages:
422 * - \ref SCIP_STAGE_PROBLEM
423 * - \ref SCIP_STAGE_TRANSFORMING
424 * - \ref SCIP_STAGE_INITPRESOLVE
425 * - \ref SCIP_STAGE_PRESOLVING
426 * - \ref SCIP_STAGE_EXITPRESOLVE
427 * - \ref SCIP_STAGE_PRESOLVED
428 * - \ref SCIP_STAGE_SOLVING
429 *
430 * @note The pointer success in only set to FALSE in the case that a variable with a parsed variable name does not exist.
431 *
432 * @note If the number of (parsed) variables is greater than the available slots in the variable array, nothing happens
433 * except that the required size is stored in the corresponding integer; the reason for this approach is that we
434 * cannot reallocate memory, since we do not know how the memory has been allocated (e.g., by a C++ 'new' or SCIP
435 * memory functions).
436 */
437SCIP_EXPORT
439 SCIP* scip, /**< SCIP data structure */
440 const char* str, /**< string to parse */
441 SCIP_VAR** vars, /**< array to store the parsed variable */
442 int* nvars, /**< pointer to store number of parsed variables */
443 int varssize, /**< size of the variable array */
444 int* requiredsize, /**< pointer to store the required array size for the active variables */
445 char** endptr, /**< pointer to store the final string position if successful */
446 char delimiter, /**< character which is used for delimitation */
447 SCIP_Bool* success /**< pointer to store the whether the parsing was successful or not */
448 );
449
450/** parse the given string as linear sum of variables and coefficients (c1 <x1> + c2 <x2> + ... + cn <xn>)
451 * (see SCIPwriteVarsLinearsum() ); if it was successful, the pointer success is set to TRUE
452 *
453 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
454 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
455 *
456 * @pre This method can be called if @p scip is in one of the following stages:
457 * - \ref SCIP_STAGE_PROBLEM
458 * - \ref SCIP_STAGE_TRANSFORMING
459 * - \ref SCIP_STAGE_INITPRESOLVE
460 * - \ref SCIP_STAGE_PRESOLVING
461 * - \ref SCIP_STAGE_EXITPRESOLVE
462 * - \ref SCIP_STAGE_PRESOLVED
463 * - \ref SCIP_STAGE_SOLVING
464 *
465 * @note The pointer success in only set to FALSE in the case that a variable with a parsed variable name does not exist.
466 *
467 * @note If the number of (parsed) variables is greater than the available slots in the variable array, nothing happens
468 * except that the required size is stored in the corresponding integer; the reason for this approach is that we
469 * cannot reallocate memory, since we do not know how the memory has been allocated (e.g., by a C++ 'new' or SCIP
470 * memory functions).
471 */
472SCIP_EXPORT
474 SCIP* scip, /**< SCIP data structure */
475 const char* str, /**< string to parse */
476 SCIP_VAR** vars, /**< array to store the parsed variables */
477 SCIP_Real* vals, /**< array to store the parsed coefficients */
478 int* nvars, /**< pointer to store number of parsed variables */
479 int varssize, /**< size of the variable array */
480 int* requiredsize, /**< pointer to store the required array size for the active variables */
481 char** endptr, /**< pointer to store the final string position if successful */
482 SCIP_Bool* success /**< pointer to store the whether the parsing was successful or not */
483 );
484
485/** parse the given string as linear sum of variables and coefficients (c1 <x1> + c2 <x2> + ... + cn <xn>)
486 * (see SCIPwriteVarsLinearsum() ); if it was successful, the pointer success is set to TRUE
487 *
488 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
489 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
490 *
491 * @pre This method can be called if @p scip is in one of the following stages:
492 * - \ref SCIP_STAGE_PROBLEM
493 * - \ref SCIP_STAGE_TRANSFORMING
494 * - \ref SCIP_STAGE_INITPRESOLVE
495 * - \ref SCIP_STAGE_PRESOLVING
496 * - \ref SCIP_STAGE_EXITPRESOLVE
497 * - \ref SCIP_STAGE_PRESOLVED
498 * - \ref SCIP_STAGE_SOLVING
499 *
500 * @note The pointer success in only set to FALSE in the case that a variable with a parsed variable name does not exist.
501 *
502 * @note If the number of (parsed) variables is greater than the available slots in the variable array, nothing happens
503 * except that the required size is stored in the corresponding integer; the reason for this approach is that we
504 * cannot reallocate memory, since we do not know how the memory has been allocated (e.g., by a C++ 'new' or SCIP
505 * memory functions).
506 */
507SCIP_EXPORT
509 SCIP* scip, /**< SCIP data structure */
510 char* str, /**< string to parse */
511 SCIP_VAR** vars, /**< array to store the parsed variables */
512 SCIP_RATIONAL** vals, /**< array to store the parsed coefficients */
513 int* nvars, /**< pointer to store number of parsed variables */
514 int varssize, /**< size of the variable array */
515 int* requiredsize, /**< pointer to store the required array size for the active variables */
516 char** endptr, /**< pointer to store the final string position if successful */
517 SCIP_Bool* success /**< pointer to store the whether the parsing was successful or not */
518 );
519
520/** parse the given string as signomial of variables and coefficients
521 * (c1 <x11>^e11 <x12>^e12 ... <x1n>^e1n + c2 <x21>^e21 <x22>^e22 ... + ... + cn <xn1>^en1 ...)
522 * (see SCIPwriteVarsPolynomial()); if it was successful, the pointer success is set to TRUE
523 *
524 * The user has to call SCIPfreeParseVarsPolynomialData(scip, monomialvars, monomialexps,
525 * monomialcoefs, monomialnvars, *nmonomials) short after SCIPparseVarsPolynomial to free all the
526 * allocated memory again. Do not keep the arrays created by SCIPparseVarsPolynomial around, since
527 * they use buffer memory that is intended for short term use only.
528 *
529 * Parsing is stopped at the end of string (indicated by the \\0-character) or when no more monomials
530 * are recognized.
531 *
532 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
533 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
534 *
535 * @pre This method can be called if @p scip is in one of the following stages:
536 * - \ref SCIP_STAGE_PROBLEM
537 * - \ref SCIP_STAGE_TRANSFORMING
538 * - \ref SCIP_STAGE_INITPRESOLVE
539 * - \ref SCIP_STAGE_PRESOLVING
540 * - \ref SCIP_STAGE_EXITPRESOLVE
541 * - \ref SCIP_STAGE_PRESOLVED
542 * - \ref SCIP_STAGE_SOLVING
543 */
544SCIP_EXPORT
546 SCIP* scip, /**< SCIP data structure */
547 const char* str, /**< string to parse */
548 SCIP_VAR**** monomialvars, /**< pointer to store arrays with variables for each monomial */
549 SCIP_Real*** monomialexps, /**< pointer to store arrays with variable exponents */
550 SCIP_Real** monomialcoefs, /**< pointer to store array with monomial coefficients */
551 int** monomialnvars, /**< pointer to store array with number of variables for each monomial */
552 int* nmonomials, /**< pointer to store number of parsed monomials */
553 char** endptr, /**< pointer to store the final string position if successful */
554 SCIP_Bool* success /**< pointer to store the whether the parsing was successful or not */
555 );
556
557/** frees memory allocated when parsing a signomial from a string
558 *
559 * @pre This method can be called if @p scip is in one of the following stages:
560 * - \ref SCIP_STAGE_PROBLEM
561 * - \ref SCIP_STAGE_TRANSFORMING
562 * - \ref SCIP_STAGE_INITPRESOLVE
563 * - \ref SCIP_STAGE_PRESOLVING
564 * - \ref SCIP_STAGE_EXITPRESOLVE
565 * - \ref SCIP_STAGE_PRESOLVED
566 * - \ref SCIP_STAGE_SOLVING
567 */
568SCIP_EXPORT
570 SCIP* scip, /**< SCIP data structure */
571 SCIP_VAR**** monomialvars, /**< pointer to store arrays with variables for each monomial */
572 SCIP_RATIONAL*** monomialcoefs, /**< pointer to store array with monomial coefficients */
573 int nmonomials /**< pointer to store number of parsed monomials */
574 );
575
576/** parse the given string as signomial of variables and coefficients
577 * (c1 <x11>^e11 <x12>^e12 ... <x1n>^e1n + c2 <x21>^e21 <x22>^e22 ... + ... + cn <xn1>^en1 ...)
578 * (see SCIPwriteVarsPolynomial()); if it was successful, the pointer success is set to TRUE
579 *
580 * The user has to call SCIPfreeParseVarsPolynomialData(scip, monomialvars, monomialexps,
581 * monomialcoefs, monomialnvars, *nmonomials) short after SCIPparseVarsPolynomial to free all the
582 * allocated memory again.
583 *
584 * Parsing is stopped at the end of string (indicated by the \\0-character) or when no more monomials
585 * are recognized.
586 *
587 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
588 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
589 *
590 * @pre This method can be called if @p scip is in one of the following stages:
591 * - \ref SCIP_STAGE_PROBLEM
592 * - \ref SCIP_STAGE_TRANSFORMING
593 * - \ref SCIP_STAGE_INITPRESOLVE
594 * - \ref SCIP_STAGE_PRESOLVING
595 * - \ref SCIP_STAGE_EXITPRESOLVE
596 * - \ref SCIP_STAGE_PRESOLVED
597 * - \ref SCIP_STAGE_SOLVING
598 */
599SCIP_EXPORT
601 SCIP* scip, /**< SCIP data structure */
602 char* str, /**< string to parse */
603 SCIP_VAR**** monomialvars, /**< pointer to store arrays with variables for each monomial */
604 SCIP_RATIONAL*** monomialcoefs, /**< pointer to store array with monomial coefficients */
605 int* nmonomials, /**< pointer to store number of parsed monomials */
606 char** endptr, /**< pointer to store the final string position if successful */
607 SCIP_Bool* success /**< pointer to store the whether the parsing was successful or not */
608 );
609
610/** frees memory allocated when parsing a signomial from a string
611 *
612 * @pre This method can be called if @p scip is in one of the following stages:
613 * - \ref SCIP_STAGE_PROBLEM
614 * - \ref SCIP_STAGE_TRANSFORMING
615 * - \ref SCIP_STAGE_INITPRESOLVE
616 * - \ref SCIP_STAGE_PRESOLVING
617 * - \ref SCIP_STAGE_EXITPRESOLVE
618 * - \ref SCIP_STAGE_PRESOLVED
619 * - \ref SCIP_STAGE_SOLVING
620 */
621SCIP_EXPORT
623 SCIP* scip, /**< SCIP data structure */
624 SCIP_VAR**** monomialvars, /**< pointer to store arrays with variables for each monomial */
625 SCIP_Real*** monomialexps, /**< pointer to store arrays with variable exponents */
626 SCIP_Real** monomialcoefs, /**< pointer to store array with monomial coefficients */
627 int** monomialnvars, /**< pointer to store array with number of variables for each monomial */
628 int nmonomials /**< pointer to store number of parsed monomials */
629 );
630
631/** increases usage counter of variable
632 *
633 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
634 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
635 *
636 * @pre This method can be called if @p scip is in one of the following stages:
637 * - \ref SCIP_STAGE_PROBLEM
638 * - \ref SCIP_STAGE_TRANSFORMING
639 * - \ref SCIP_STAGE_TRANSFORMED
640 * - \ref SCIP_STAGE_INITPRESOLVE
641 * - \ref SCIP_STAGE_PRESOLVING
642 * - \ref SCIP_STAGE_EXITPRESOLVE
643 * - \ref SCIP_STAGE_PRESOLVED
644 * - \ref SCIP_STAGE_INITSOLVE
645 * - \ref SCIP_STAGE_SOLVING
646 * - \ref SCIP_STAGE_SOLVED
647 * - \ref SCIP_STAGE_EXITSOLVE
648 */
649SCIP_EXPORT
651 SCIP* scip, /**< SCIP data structure */
652 SCIP_VAR* var /**< variable to capture */
653 );
654
655/** decreases usage counter of variable, if the usage pointer reaches zero the variable gets freed
656 *
657 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
658 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
659 *
660 * @pre This method can be called if @p scip is in one of the following stages:
661 * - \ref SCIP_STAGE_PROBLEM
662 * - \ref SCIP_STAGE_TRANSFORMING
663 * - \ref SCIP_STAGE_TRANSFORMED
664 * - \ref SCIP_STAGE_INITPRESOLVE
665 * - \ref SCIP_STAGE_PRESOLVING
666 * - \ref SCIP_STAGE_EXITPRESOLVE
667 * - \ref SCIP_STAGE_PRESOLVED
668 * - \ref SCIP_STAGE_INITSOLVE
669 * - \ref SCIP_STAGE_SOLVING
670 * - \ref SCIP_STAGE_SOLVED
671 * - \ref SCIP_STAGE_EXITSOLVE
672 * - \ref SCIP_STAGE_FREETRANS
673 *
674 * @note the pointer of the variable will be NULLed
675 */
676SCIP_EXPORT
678 SCIP* scip, /**< SCIP data structure */
679 SCIP_VAR** var /**< pointer to variable */
680 );
681
682/** changes the name of a variable
683 *
684 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
685 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
686 *
687 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_PROBLEM
688 *
689 * @note to get the current name of a variable, use SCIPvarGetName() from pub_var.h
690 */
691SCIP_EXPORT
693 SCIP* scip, /**< SCIP data structure */
694 SCIP_VAR* var, /**< variable */
695 const char* name /**< new name of constraint */
696 );
697
698/** gets and captures transformed variable of a given variable; if the variable is not yet transformed,
699 * a new transformed variable for this variable is created
700 *
701 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
702 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
703 *
704 * @pre This method can be called if @p scip is in one of the following stages:
705 * - \ref SCIP_STAGE_TRANSFORMING
706 * - \ref SCIP_STAGE_TRANSFORMED
707 * - \ref SCIP_STAGE_INITPRESOLVE
708 * - \ref SCIP_STAGE_PRESOLVING
709 * - \ref SCIP_STAGE_EXITPRESOLVE
710 * - \ref SCIP_STAGE_PRESOLVED
711 * - \ref SCIP_STAGE_INITSOLVE
712 * - \ref SCIP_STAGE_SOLVING
713 */
714SCIP_EXPORT
716 SCIP* scip, /**< SCIP data structure */
717 SCIP_VAR* var, /**< variable to get/create transformed variable for */
718 SCIP_VAR** transvar /**< pointer to store the transformed variable */
719 );
720
721/** gets and captures transformed variables for an array of variables;
722 * if a variable of the array is not yet transformed, a new transformed variable for this variable is created;
723 * it is possible to call this method with vars == transvars
724 *
725 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
726 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
727 *
728 * @pre This method can be called if @p scip is in one of the following stages:
729 * - \ref SCIP_STAGE_TRANSFORMING
730 * - \ref SCIP_STAGE_TRANSFORMED
731 * - \ref SCIP_STAGE_INITPRESOLVE
732 * - \ref SCIP_STAGE_PRESOLVING
733 * - \ref SCIP_STAGE_EXITPRESOLVE
734 * - \ref SCIP_STAGE_PRESOLVED
735 * - \ref SCIP_STAGE_INITSOLVE
736 * - \ref SCIP_STAGE_SOLVING
737 */
738SCIP_EXPORT
740 SCIP* scip, /**< SCIP data structure */
741 int nvars, /**< number of variables to get/create transformed variables for */
742 SCIP_VAR** vars, /**< array with variables to get/create transformed variables for */
743 SCIP_VAR** transvars /**< array to store the transformed variables */
744 );
745
746/** gets corresponding transformed variable of a given variable;
747 * returns NULL as transvar, if transformed variable is not yet existing
748 *
749 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
750 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
751 *
752 * @pre This method can be called if @p scip is in one of the following stages:
753 * - \ref SCIP_STAGE_TRANSFORMING
754 * - \ref SCIP_STAGE_TRANSFORMED
755 * - \ref SCIP_STAGE_INITPRESOLVE
756 * - \ref SCIP_STAGE_PRESOLVING
757 * - \ref SCIP_STAGE_EXITPRESOLVE
758 * - \ref SCIP_STAGE_PRESOLVED
759 * - \ref SCIP_STAGE_INITSOLVE
760 * - \ref SCIP_STAGE_SOLVING
761 * - \ref SCIP_STAGE_SOLVED
762 * - \ref SCIP_STAGE_EXITSOLVE
763 * - \ref SCIP_STAGE_FREETRANS
764 */
765SCIP_EXPORT
767 SCIP* scip, /**< SCIP data structure */
768 SCIP_VAR* var, /**< variable to get transformed variable for */
769 SCIP_VAR** transvar /**< pointer to store the transformed variable */
770 );
771
772/** gets corresponding transformed variables for an array of variables;
773 * stores NULL in a transvars slot, if the transformed variable is not yet existing;
774 * it is possible to call this method with vars == transvars, but remember that variables that are not
775 * yet transformed will be replaced with NULL
776 *
777 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
778 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
779 *
780 * @pre This method can be called if @p scip is in one of the following stages:
781 * - \ref SCIP_STAGE_TRANSFORMING
782 * - \ref SCIP_STAGE_TRANSFORMED
783 * - \ref SCIP_STAGE_INITPRESOLVE
784 * - \ref SCIP_STAGE_PRESOLVING
785 * - \ref SCIP_STAGE_EXITPRESOLVE
786 * - \ref SCIP_STAGE_PRESOLVED
787 * - \ref SCIP_STAGE_INITSOLVE
788 * - \ref SCIP_STAGE_SOLVING
789 * - \ref SCIP_STAGE_SOLVED
790 * - \ref SCIP_STAGE_EXITSOLVE
791 * - \ref SCIP_STAGE_FREETRANS
792 */
793SCIP_EXPORT
795 SCIP* scip, /**< SCIP data structure */
796 int nvars, /**< number of variables to get transformed variables for */
797 SCIP_VAR** vars, /**< array with variables to get transformed variables for */
798 SCIP_VAR** transvars /**< array to store the transformed variables */
799 );
800
801/** gets negated variable x' = lb + ub - x of variable x; negated variable is created, if not yet existing
802 *
803 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
804 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
805 *
806 * @pre This method can be called if @p scip is in one of the following stages:
807 * - \ref SCIP_STAGE_PROBLEM
808 * - \ref SCIP_STAGE_TRANSFORMING
809 * - \ref SCIP_STAGE_TRANSFORMED
810 * - \ref SCIP_STAGE_INITPRESOLVE
811 * - \ref SCIP_STAGE_PRESOLVING
812 * - \ref SCIP_STAGE_EXITPRESOLVE
813 * - \ref SCIP_STAGE_PRESOLVED
814 * - \ref SCIP_STAGE_INITSOLVE
815 * - \ref SCIP_STAGE_SOLVING
816 * - \ref SCIP_STAGE_SOLVED
817 * - \ref SCIP_STAGE_EXITSOLVE
818 * - \ref SCIP_STAGE_FREETRANS
819 */
820SCIP_EXPORT
822 SCIP* scip, /**< SCIP data structure */
823 SCIP_VAR* var, /**< variable to get negated variable for */
824 SCIP_VAR** negvar /**< pointer to store the negated variable */
825 );
826
827/** gets negated variables x' = lb + ub - x of variables x; negated variables are created, if not yet existing;
828 * in difference to \ref SCIPcreateVar, the negated variable must not be released (unless captured explicitly)
829 *
830 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
831 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
832 *
833 * @pre This method can be called if @p scip is in one of the following stages:
834 * - \ref SCIP_STAGE_PROBLEM
835 * - \ref SCIP_STAGE_TRANSFORMING
836 * - \ref SCIP_STAGE_TRANSFORMED
837 * - \ref SCIP_STAGE_INITPRESOLVE
838 * - \ref SCIP_STAGE_PRESOLVING
839 * - \ref SCIP_STAGE_EXITPRESOLVE
840 * - \ref SCIP_STAGE_PRESOLVED
841 * - \ref SCIP_STAGE_INITSOLVE
842 * - \ref SCIP_STAGE_SOLVING
843 * - \ref SCIP_STAGE_SOLVED
844 * - \ref SCIP_STAGE_EXITSOLVE
845 * - \ref SCIP_STAGE_FREETRANS
846 */
847SCIP_EXPORT
849 SCIP* scip, /**< SCIP data structure */
850 int nvars, /**< number of variables to get negated variables for */
851 SCIP_VAR** vars, /**< array of variables to get negated variables for */
852 SCIP_VAR** negvars /**< array to store the negated variables */
853 );
854
855/** gets a binary variable that is equal to the given binary variable, and that is either active, fixed, or
856 * multi-aggregated, or the negated variable of an active, fixed, or multi-aggregated variable
857 *
858 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
859 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
860 *
861 * @pre This method can be called if @p scip is in one of the following stages:
862 * - \ref SCIP_STAGE_PROBLEM
863 * - \ref SCIP_STAGE_TRANSFORMED
864 * - \ref SCIP_STAGE_INITPRESOLVE
865 * - \ref SCIP_STAGE_PRESOLVING
866 * - \ref SCIP_STAGE_EXITPRESOLVE
867 * - \ref SCIP_STAGE_PRESOLVED
868 * - \ref SCIP_STAGE_INITSOLVE
869 * - \ref SCIP_STAGE_SOLVING
870 * - \ref SCIP_STAGE_SOLVED
871 * - \ref SCIP_STAGE_EXITSOLVE
872 */
873SCIP_EXPORT
875 SCIP* scip, /**< SCIP data structure */
876 SCIP_VAR* var, /**< binary variable to get binary representative for */
877 SCIP_VAR** repvar, /**< pointer to store the binary representative */
878 SCIP_Bool* negated /**< pointer to store whether the negation of an active variable was returned */
879 );
880
881/** gets binary variables that are equal to the given binary variables, and which are either active, fixed, or
882 * multi-aggregated, or the negated variables of active, fixed, or multi-aggregated variables
883 *
884 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
885 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
886 *
887 * @pre This method can be called if @p scip is in one of the following stages:
888 * - \ref SCIP_STAGE_PROBLEM
889 * - \ref SCIP_STAGE_TRANSFORMED
890 * - \ref SCIP_STAGE_INITPRESOLVE
891 * - \ref SCIP_STAGE_PRESOLVING
892 * - \ref SCIP_STAGE_EXITPRESOLVE
893 * - \ref SCIP_STAGE_PRESOLVED
894 * - \ref SCIP_STAGE_INITSOLVE
895 * - \ref SCIP_STAGE_SOLVING
896 * - \ref SCIP_STAGE_SOLVED
897 * - \ref SCIP_STAGE_EXITSOLVE
898 */
899SCIP_EXPORT
901 SCIP* scip, /**< SCIP data structure */
902 int nvars, /**< number of binary variables to get representatives for */
903 SCIP_VAR** vars, /**< binary variables to get binary representatives for */
904 SCIP_VAR** repvars, /**< array to store the binary representatives */
905 SCIP_Bool* negated /**< array to store whether the negation of an active variable was returned */
906 );
907
908/** flattens aggregation graph of multi-aggregated variable in order to avoid exponential recursion later on
909 *
910 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
911 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
912 *
913 * @pre This method can be called if @p scip is in one of the following stages:
914 * - \ref SCIP_STAGE_INITPRESOLVE
915 * - \ref SCIP_STAGE_PRESOLVING
916 * - \ref SCIP_STAGE_EXITPRESOLVE
917 * - \ref SCIP_STAGE_PRESOLVED
918 * - \ref SCIP_STAGE_INITSOLVE
919 * - \ref SCIP_STAGE_SOLVING
920 * - \ref SCIP_STAGE_SOLVED
921 */
922SCIP_EXPORT
924 SCIP* scip, /**< SCIP data structure */
925 SCIP_VAR* var /**< problem variable */
926 );
927
928/** Transforms a given linear sum of variables, that is a_1*x_1 + ... + a_n*x_n + c into a corresponding linear sum of
929 * active variables, that is b_1*y_1 + ... + b_m*y_m + d.
930 *
931 * If the number of needed active variables is greater than the available slots in the variable array, nothing happens
932 * except that an upper bound on the required size is stored in the variable requiredsize; otherwise, the active
933 * variable representation is stored in the arrays.
934 *
935 * The reason for this approach is that we cannot reallocate memory, since we do not know how the memory has been
936 * allocated (e.g., by a C++ 'new' or SCIP functions). Note that requiredsize is an upper bound due to possible
937 * cancelations.
938 *
939 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
940 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
941 *
942 * @pre This method can be called if @p scip is in one of the following stages:
943 * - \ref SCIP_STAGE_TRANSFORMED
944 * - \ref SCIP_STAGE_INITPRESOLVE
945 * - \ref SCIP_STAGE_PRESOLVING
946 * - \ref SCIP_STAGE_EXITPRESOLVE
947 * - \ref SCIP_STAGE_PRESOLVED
948 * - \ref SCIP_STAGE_INITSOLVE
949 * - \ref SCIP_STAGE_SOLVING
950 * - \ref SCIP_STAGE_SOLVED
951 * - \ref SCIP_STAGE_EXITSOLVE
952 * - \ref SCIP_STAGE_FREETRANS
953 *
954 * @note The resulting linear sum is stored into the given variable array, scalar array, and constant. That means the
955 * given entries are overwritten.
956 *
957 * @note That method can be used to convert a single variables into variable space of active variables. Therefore call
958 * the method with the linear sum 1.0*x + 0.0.
959 */
960SCIP_EXPORT
962 SCIP* scip, /**< SCIP data structure */
963 SCIP_VAR** vars, /**< variable array x_1, ..., x_n in the linear sum which will be
964 * overwritten by the variable array y_1, ..., y_m in the linear sum
965 * w.r.t. active variables */
966 SCIP_Real* scalars, /**< scalars a_1, ..., a_n in linear sum which will be overwritten to the
967 * scalars b_1, ..., b_m in the linear sum of the active variables */
968 int* nvars, /**< pointer to number of variables in the linear sum which will be
969 * overwritten by the number of variables in the linear sum corresponding
970 * to the active variables */
971 int varssize, /**< available slots in vars and scalars array which is needed to check if
972 * the array are large enough for the linear sum w.r.t. active
973 * variables */
974 SCIP_Real* constant, /**< pointer to constant c in linear sum a_1*x_1 + ... + a_n*x_n + c which
975 * will chnage to constant d in the linear sum b_1*y_1 + ... + b_m*y_m +
976 * d w.r.t. the active variables */
977 int* requiredsize /**< pointer to store an upper bound on the required size for the linear sum
978 * w.r.t. the active variables */
979 );
980
981/** transforms given variable, scalar and constant to the corresponding active, fixed, or
982 * multi-aggregated variable, scalar and constant; if the variable resolves to a fixed variable,
983 * "scalar" will be 0.0 and the value of the sum will be stored in "constant"; a multi-aggregation
984 * with only one active variable (this can happen due to fixings after the multi-aggregation),
985 * is treated like an aggregation; if the multi-aggregation constant is infinite, "scalar" will be 0.0
986 *
987 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
988 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
989 *
990 * @pre This method can be called if @p scip is in one of the following stages:
991 * - \ref SCIP_STAGE_TRANSFORMED
992 * - \ref SCIP_STAGE_INITPRESOLVE
993 * - \ref SCIP_STAGE_PRESOLVING
994 * - \ref SCIP_STAGE_EXITPRESOLVE
995 * - \ref SCIP_STAGE_PRESOLVED
996 * - \ref SCIP_STAGE_INITSOLVE
997 * - \ref SCIP_STAGE_SOLVING
998 * - \ref SCIP_STAGE_SOLVED
999 * - \ref SCIP_STAGE_EXITSOLVE
1000 * - \ref SCIP_STAGE_FREETRANS
1001 */
1002SCIP_EXPORT
1004 SCIP* scip, /**< SCIP data structure */
1005 SCIP_VAR** var, /**< pointer to problem variable x in sum a*x + c */
1006 SCIP_Real* scalar, /**< pointer to scalar a in sum a*x + c */
1007 SCIP_Real* constant /**< pointer to constant c in sum a*x + c */
1008 );
1009
1010/** transforms given variable, scalar and constant to the corresponding active, fixed, or
1011 * multi-aggregated variable, scalar and constant; if the variable resolves to a fixed variable,
1012 * "scalar" will be 0.0 and the value of the sum will be stored in "constant"; a multi-aggregation
1013 * with only one active variable (this can happen due to fixings after the multi-aggregation),
1014 * is treated like an aggregation; if the multi-aggregation constant is infinite, "scalar" will be 0.0
1015 *
1016 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1017 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1018 *
1019 * @pre This method can be called if @p scip is in one of the following stages:
1020 * - \ref SCIP_STAGE_TRANSFORMED
1021 * - \ref SCIP_STAGE_INITPRESOLVE
1022 * - \ref SCIP_STAGE_PRESOLVING
1023 * - \ref SCIP_STAGE_EXITPRESOLVE
1024 * - \ref SCIP_STAGE_PRESOLVED
1025 * - \ref SCIP_STAGE_INITSOLVE
1026 * - \ref SCIP_STAGE_SOLVING
1027 * - \ref SCIP_STAGE_SOLVED
1028 * - \ref SCIP_STAGE_EXITSOLVE
1029 * - \ref SCIP_STAGE_FREETRANS
1030 */
1031SCIP_EXPORT
1033 SCIP* scip, /**< SCIP data structure */
1034 SCIP_VAR** var, /**< pointer to problem variable x in sum a*x + c */
1035 SCIP_RATIONAL* scalar, /**< pointer to scalar a in sum a*x + c */
1036 SCIP_RATIONAL* constant /**< pointer to constant c in sum a*x + c */
1037 );
1038
1039/** return for given variables all their active counterparts; all active variables will be pairwise different
1040 * @note It does not hold that the first output variable is the active variable for the first input variable.
1041 *
1042 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1043 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1044 *
1045 * @pre This method can be called if @p scip is in one of the following stages:
1046 * - \ref SCIP_STAGE_TRANSFORMED
1047 * - \ref SCIP_STAGE_INITPRESOLVE
1048 * - \ref SCIP_STAGE_PRESOLVING
1049 * - \ref SCIP_STAGE_EXITPRESOLVE
1050 * - \ref SCIP_STAGE_PRESOLVED
1051 * - \ref SCIP_STAGE_INITSOLVE
1052 * - \ref SCIP_STAGE_SOLVING
1053 * - \ref SCIP_STAGE_SOLVED
1054 * - \ref SCIP_STAGE_EXITSOLVE
1055 * - \ref SCIP_STAGE_FREETRANS
1056 */
1057SCIP_EXPORT
1059 SCIP* scip, /**< SCIP data structure */
1060 SCIP_VAR** vars, /**< variable array with given variables and as output all active
1061 * variables, if enough slots exist */
1062 int* nvars, /**< number of given variables, and as output number of active variables,
1063 * if enough slots exist */
1064 int varssize, /**< available slots in vars array */
1065 int* requiredsize /**< pointer to store the required array size for the active variables */
1066 );
1067
1068/** returns the reduced costs of the variable in the current node's LP relaxation;
1069 * the current node has to have a feasible LP.
1070 *
1071 * returns SCIP_INVALID if the variable is active but not in the current LP;
1072 * returns 0 if the variable has been aggregated out or fixed in presolving.
1073 *
1074 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_SOLVING
1075 *
1076 * @note The return value of this method should be used carefully if the dual feasibility check was explictely disabled.
1077 */
1078SCIP_EXPORT
1080 SCIP* scip, /**< SCIP data structure */
1081 SCIP_VAR* var /**< variable to get reduced costs, should be a column in current node LP */
1082 );
1083
1084/** returns the implied reduced costs of the variable in the current node's LP relaxation;
1085 * the current node has to have a feasible LP.
1086 *
1087 * returns SCIP_INVALID if the variable is active but not in the current LP;
1088 * returns 0 if the variable has been aggregated out or fixed in presolving.
1089 *
1090 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_SOLVING
1091 *
1092 * @note The return value of this method should be used carefully if the dual feasibility check was explictely disabled.
1093 */
1094SCIP_EXPORT
1096 SCIP* scip, /**< SCIP data structure */
1097 SCIP_VAR* var, /**< variable to get reduced costs, should be a column in current node LP */
1098 SCIP_Bool varfixing /**< FALSE if for x == 0, TRUE for x == 1 */
1099 );
1100
1101/** returns the Farkas coefficient of the variable in the current node's LP relaxation;
1102 * the current node has to have an infeasible LP.
1103 *
1104 * returns SCIP_INVALID if the variable is active but not in the current LP;
1105 * returns 0 if the variable has been aggregated out or fixed in presolving.
1106 *
1107 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_SOLVING
1108 */
1109SCIP_EXPORT
1111 SCIP* scip, /**< SCIP data structure */
1112 SCIP_VAR* var /**< variable to get reduced costs, should be a column in current node LP */
1113 );
1114
1115/** returns lower bound of variable directly before or after the bound change given by the bound change index
1116 * was applied
1117 */
1118SCIP_EXPORT
1120 SCIP* scip, /**< SCIP data structure */
1121 SCIP_VAR* var, /**< problem variable */
1122 SCIP_BDCHGIDX* bdchgidx, /**< bound change index representing time on path to current node */
1123 SCIP_Bool after /**< should the bound change with given index be included? */
1124 );
1125
1126/** returns upper bound of variable directly before or after the bound change given by the bound change index
1127 * was applied
1128 */
1129SCIP_EXPORT
1131 SCIP* scip, /**< SCIP data structure */
1132 SCIP_VAR* var, /**< problem variable */
1133 SCIP_BDCHGIDX* bdchgidx, /**< bound change index representing time on path to current node */
1134 SCIP_Bool after /**< should the bound change with given index be included? */
1135 );
1136
1137/** returns lower or upper bound of variable directly before or after the bound change given by the bound change index
1138 * was applied
1139 */
1140SCIP_EXPORT
1142 SCIP* scip, /**< SCIP data structure */
1143 SCIP_VAR* var, /**< problem variable */
1144 SCIP_BOUNDTYPE boundtype, /**< type of bound: lower or upper bound */
1145 SCIP_BDCHGIDX* bdchgidx, /**< bound change index representing time on path to current node */
1146 SCIP_Bool after /**< should the bound change with given index be included? */
1147 );
1148
1149/** returns whether the binary variable was fixed at the time given by the bound change index */
1150SCIP_EXPORT
1152 SCIP* scip, /**< SCIP data structure */
1153 SCIP_VAR* var, /**< problem variable */
1154 SCIP_BDCHGIDX* bdchgidx, /**< bound change index representing time on path to current node */
1155 SCIP_Bool after /**< should the bound change with given index be included? */
1156 );
1157
1158/** gets solution value for variable in current node
1159 *
1160 * @return solution value for variable in current node
1161 *
1162 * @pre This method can be called if @p scip is in one of the following stages:
1163 * - \ref SCIP_STAGE_PRESOLVED
1164 * - \ref SCIP_STAGE_SOLVING
1165 */
1166SCIP_EXPORT
1168 SCIP* scip, /**< SCIP data structure */
1169 SCIP_VAR* var /**< variable to get solution value for */
1170 );
1171
1172/** gets solution values of multiple variables in current node
1173 *
1174 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1175 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1176 *
1177 * @pre This method can be called if @p scip is in one of the following stages:
1178 * - \ref SCIP_STAGE_PRESOLVED
1179 * - \ref SCIP_STAGE_SOLVING
1180 */
1181SCIP_EXPORT
1183 SCIP* scip, /**< SCIP data structure */
1184 int nvars, /**< number of variables to get solution value for */
1185 SCIP_VAR** vars, /**< array with variables to get value for */
1186 SCIP_Real* vals /**< array to store solution values of variables */
1187 );
1188
1189/** sets the solution value of all variables in the global relaxation solution to zero
1190 *
1191 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1192 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1193 *
1194 * @pre This method can be called if @p scip is in one of the following stages:
1195 * - \ref SCIP_STAGE_PRESOLVED
1196 * - \ref SCIP_STAGE_SOLVING
1197 */
1198SCIP_EXPORT
1200 SCIP* scip, /**< SCIP data structure */
1201 SCIP_RELAX* relax /**< relaxator data structure */
1202 );
1203
1204/** sets the value of the given variable in the global relaxation solution;
1205 * this solution can be filled by the relaxation handlers and can be used by heuristics and for separation;
1206 * You can use SCIPclearRelaxSolVals() to set all values to zero, initially;
1207 * after setting all solution values, you have to call SCIPmarkRelaxSolValid()
1208 * to inform SCIP that the stored solution is valid
1209 *
1210 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1211 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1212 *
1213 * @pre This method can be called if @p scip is in one of the following stages:
1214 * - \ref SCIP_STAGE_PRESOLVED
1215 * - \ref SCIP_STAGE_SOLVING
1216 *
1217 * @note This method incrementally updates the objective value of the relaxation solution. If the whole solution
1218 * should be updated, using SCIPsetRelaxSolVals() instead or calling SCIPclearRelaxSolVals() before setting
1219 * the first value to reset the solution and the objective value to 0 may help the numerics.
1220 */
1221SCIP_EXPORT
1223 SCIP* scip, /**< SCIP data structure */
1224 SCIP_RELAX* relax, /**< relaxator data structure */
1225 SCIP_VAR* var, /**< variable to set value for */
1226 SCIP_Real val /**< solution value of variable */
1227 );
1228
1229/** sets the values of the given variables in the global relaxation solution and informs SCIP about the validity
1230 * and whether the solution can be enforced via linear cuts;
1231 * this solution can be filled by the relaxation handlers and can be used by heuristics and for separation;
1232 * the solution is automatically cleared, s.t. all other variables get value 0.0
1233 *
1234 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1235 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1236 *
1237 * @pre This method can be called if @p scip is in one of the following stages:
1238 * - \ref SCIP_STAGE_PRESOLVED
1239 * - \ref SCIP_STAGE_SOLVING
1240 */
1241SCIP_EXPORT
1243 SCIP* scip, /**< SCIP data structure */
1244 SCIP_RELAX* relax, /**< relaxator data structure */
1245 int nvars, /**< number of variables to set relaxation solution value for */
1246 SCIP_VAR** vars, /**< array with variables to set value for */
1247 SCIP_Real* vals, /**< array with solution values of variables */
1248 SCIP_Bool includeslp /**< does the relaxator contain all cuts in the LP? */
1249 );
1250
1251/** sets the values of the variables in the global relaxation solution to the values in the given primal solution
1252 * and informs SCIP about the validity and whether the solution can be enforced via linear cuts;
1253 * the relaxation solution can be filled by the relaxation handlers and might be used by heuristics and for separation
1254 *
1255 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1256 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1257 *
1258 * @pre This method can be called if @p scip is in one of the following stages:
1259 * - \ref SCIP_STAGE_PRESOLVED
1260 * - \ref SCIP_STAGE_SOLVING
1261 */
1262SCIP_EXPORT
1264 SCIP* scip, /**< SCIP data structure */
1265 SCIP_RELAX* relax, /**< relaxator data structure */
1266 SCIP_SOL* sol, /**< primal relaxation solution */
1267 SCIP_Bool includeslp /**< does the relaxator contain all cuts in the LP? */
1268 );
1269
1270/** returns whether the relaxation solution is valid
1271 *
1272 * @return TRUE, if the relaxation solution is valid; FALSE, otherwise
1273 *
1274 * @pre This method can be called if @p scip is in one of the following stages:
1275 * - \ref SCIP_STAGE_PRESOLVED
1276 * - \ref SCIP_STAGE_SOLVING
1277 */
1278SCIP_EXPORT
1280 SCIP* scip /**< SCIP data structure */
1281 );
1282
1283/** informs SCIP that the relaxation solution is valid and whether the relaxation can be enforced through linear cuts
1284 *
1285 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1286 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1287 *
1288 * @pre This method can be called if @p scip is in one of the following stages:
1289 * - \ref SCIP_STAGE_PRESOLVED
1290 * - \ref SCIP_STAGE_SOLVING
1291 */
1292SCIP_EXPORT
1294 SCIP* scip, /**< SCIP data structure */
1295 SCIP_RELAX* relax, /**< relaxator data structure that set the current relaxation solution */
1296 SCIP_Bool includeslp /**< does the relaxator contain all cuts in the LP? */
1297 );
1298
1299/** informs SCIP, that the relaxation solution is invalid
1300 *
1301 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1302 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1303 *
1304 * @pre This method can be called if @p scip is in one of the following stages:
1305 * - \ref SCIP_STAGE_PRESOLVED
1306 * - \ref SCIP_STAGE_SOLVING
1307 */
1308SCIP_EXPORT
1310 SCIP* scip /**< SCIP data structure */
1311 );
1312
1313/** gets the relaxation solution value of the given variable
1314 *
1315 * @return the relaxation solution value of the given variable
1316 *
1317 * @pre This method can be called if @p scip is in one of the following stages:
1318 * - \ref SCIP_STAGE_PRESOLVED
1319 * - \ref SCIP_STAGE_SOLVING
1320 */
1321SCIP_EXPORT
1323 SCIP* scip, /**< SCIP data structure */
1324 SCIP_VAR* var /**< variable to get value for */
1325 );
1326
1327/** gets the relaxation solution objective value
1328 *
1329 * @return the objective value of the relaxation solution
1330 *
1331 * @pre This method can be called if @p scip is in one of the following stages:
1332 * - \ref SCIP_STAGE_PRESOLVED
1333 * - \ref SCIP_STAGE_SOLVING
1334 */
1335SCIP_EXPORT
1337 SCIP* scip /**< SCIP data structure */
1338 );
1339
1340/** determine which branching direction should be evaluated first by strong branching
1341 *
1342 * @return TRUE iff strong branching should first evaluate the down child
1343 *
1344 */
1345SCIP_EXPORT
1347 SCIP* scip, /**< SCIP data structure */
1348 SCIP_VAR* var /**< variable to determine the branching direction on */
1349 );
1350
1351/** start strong branching - call before any strong branching
1352 *
1353 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1354 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1355 *
1356 * @pre This method can be called if @p scip is in one of the following stages:
1357 * - \ref SCIP_STAGE_PRESOLVED
1358 * - \ref SCIP_STAGE_SOLVING
1359 *
1360 * @note if propagation is enabled, strong branching is not done directly on the LP, but probing nodes are created
1361 * which allow to perform propagation but also creates some overhead
1362 */
1363SCIP_EXPORT
1365 SCIP* scip, /**< SCIP data structure */
1366 SCIP_Bool enablepropagation /**< should propagation be done before solving the strong branching LP? */
1367 );
1368
1369/** end strong branching - call after any strong branching
1370 *
1371 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1372 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1373 *
1374 * @pre This method can be called if @p scip is in one of the following stages:
1375 * - \ref SCIP_STAGE_PRESOLVED
1376 * - \ref SCIP_STAGE_SOLVING
1377 */
1378SCIP_EXPORT
1380 SCIP* scip /**< SCIP data structure */
1381 );
1382
1383/** gets strong branching information on column variable with fractional value
1384 *
1385 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1386 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1387 *
1388 * @pre This method can be called if @p scip is in one of the following stages:
1389 * - \ref SCIP_STAGE_PRESOLVED
1390 * - \ref SCIP_STAGE_SOLVING
1391 */
1392SCIP_EXPORT
1394 SCIP* scip, /**< SCIP data structure */
1395 SCIP_VAR* var, /**< variable to get strong branching values for */
1396 int itlim, /**< iteration limit for strong branchings */
1397 SCIP_Bool idempotent, /**< should scip's state remain the same after the call (statistics, column states...), or should it be updated ? */
1398 SCIP_Real* down, /**< stores dual bound after branching column down */
1399 SCIP_Real* up, /**< stores dual bound after branching column up */
1400 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound, or NULL;
1401 * otherwise, it can only be used as an estimate value */
1402 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound, or NULL;
1403 * otherwise, it can only be used as an estimate value */
1404 SCIP_Bool* downinf, /**< pointer to store whether the downwards branch is infeasible, or NULL */
1405 SCIP_Bool* upinf, /**< pointer to store whether the upwards branch is infeasible, or NULL */
1406 SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an
1407 * infeasible downwards branch, or NULL */
1408 SCIP_Bool* upconflict, /**< pointer to store whether a conflict constraint was created for an
1409 * infeasible upwards branch, or NULL */
1410 SCIP_Bool* lperror /**< pointer to store whether an unresolved LP error occurred or the
1411 * solving process should be stopped (e.g., due to a time limit) */
1412 );
1413
1414/** gets strong branching information with previous domain propagation on column variable
1415 *
1416 * Before calling this method, the strong branching mode must have been activated by calling SCIPstartStrongbranch();
1417 * after strong branching was done for all candidate variables, the strong branching mode must be ended by
1418 * SCIPendStrongbranch(). Since this method applies domain propagation before strongbranching, propagation has to be be
1419 * enabled in the SCIPstartStrongbranch() call.
1420 *
1421 * Before solving the strong branching LP, domain propagation can be performed. The number of propagation rounds
1422 * can be specified by the parameter @p maxproprounds.
1423 *
1424 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1425 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1426 *
1427 * @pre This method can be called if @p scip is in one of the following stages:
1428 * - \ref SCIP_STAGE_PRESOLVED
1429 * - \ref SCIP_STAGE_SOLVING
1430 *
1431 * @warning When using this method, LP banching candidates and solution values must be copied beforehand, because
1432 * they are updated w.r.t. the strong branching LP solution.
1433 */
1434SCIP_EXPORT
1436 SCIP* scip, /**< SCIP data structure */
1437 SCIP_VAR* var, /**< variable to get strong branching values for */
1438 SCIP_Real solval, /**< value of the variable in the current LP solution */
1439 SCIP_Real lpobjval, /**< LP objective value of the current LP solution */
1440 int itlim, /**< iteration limit for strong branchings */
1441 int maxproprounds, /**< maximum number of propagation rounds (-1: no limit, -2: parameter
1442 * settings) */
1443 SCIP_Real* down, /**< stores dual bound after branching column down */
1444 SCIP_Real* up, /**< stores dual bound after branching column up */
1445 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound, or NULL;
1446 * otherwise, it can only be used as an estimate value */
1447 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound, or NULL;
1448 * otherwise, it can only be used as an estimate value */
1449 SCIP_Longint* ndomredsdown, /**< pointer to store the number of domain reductions down, or NULL */
1450 SCIP_Longint* ndomredsup, /**< pointer to store the number of domain reductions up, or NULL */
1451 SCIP_Bool* downinf, /**< pointer to store whether the downwards branch is infeasible, or NULL */
1452 SCIP_Bool* upinf, /**< pointer to store whether the upwards branch is infeasible, or NULL */
1453 SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an
1454 * infeasible downwards branch, or NULL */
1455 SCIP_Bool* upconflict, /**< pointer to store whether a conflict constraint was created for an
1456 * infeasible upwards branch, or NULL */
1457 SCIP_Bool* lperror, /**< pointer to store whether an unresolved LP error occurred or the
1458 * solving process should be stopped (e.g., due to a time limit) */
1459 SCIP_Real* newlbs, /**< array to store valid lower bounds for all active variables, or NULL */
1460 SCIP_Real* newubs /**< array to store valid upper bounds for all active variables, or NULL */
1461 );
1462
1463/** gets strong branching information on column variable x with integral LP solution value (val); that is, the down branch
1464 * is (val -1.0) and the up brach ins (val +1.0)
1465 *
1466 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1467 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1468 *
1469 * @pre This method can be called if @p scip is in one of the following stages:
1470 * - \ref SCIP_STAGE_PRESOLVED
1471 * - \ref SCIP_STAGE_SOLVING
1472 *
1473 * @note If the integral LP solution value is the lower or upper bound of the variable, the corresponding branch will be
1474 * marked as infeasible. That is, the valid pointer and the infeasible pointer are set to TRUE.
1475 */
1476SCIP_EXPORT
1478 SCIP* scip, /**< SCIP data structure */
1479 SCIP_VAR* var, /**< variable to get strong branching values for */
1480 int itlim, /**< iteration limit for strong branchings */
1481 SCIP_Bool idempotent, /**< should scip's state remain the same after the call (statistics, column states...), or should it be updated ? */
1482 SCIP_Real* down, /**< stores dual bound after branching column down */
1483 SCIP_Real* up, /**< stores dual bound after branching column up */
1484 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound, or NULL;
1485 * otherwise, it can only be used as an estimate value */
1486 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound, or NULL;
1487 * otherwise, it can only be used as an estimate value */
1488 SCIP_Bool* downinf, /**< pointer to store whether the downwards branch is infeasible, or NULL */
1489 SCIP_Bool* upinf, /**< pointer to store whether the upwards branch is infeasible, or NULL */
1490 SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an
1491 * infeasible downwards branch, or NULL */
1492 SCIP_Bool* upconflict, /**< pointer to store whether a conflict constraint was created for an
1493 * infeasible upwards branch, or NULL */
1494 SCIP_Bool* lperror /**< pointer to store whether an unresolved LP error occurred or the
1495 * solving process should be stopped (e.g., due to a time limit) */
1496 );
1497
1498/** gets strong branching information on column variables with fractional values
1499 *
1500 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1501 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1502 *
1503 * @pre This method can be called if @p scip is in one of the following stages:
1504 * - \ref SCIP_STAGE_PRESOLVED
1505 * - \ref SCIP_STAGE_SOLVING
1506 */
1507SCIP_EXPORT
1509 SCIP* scip, /**< SCIP data structure */
1510 SCIP_VAR** vars, /**< variables to get strong branching values for */
1511 int nvars, /**< number of variables */
1512 int itlim, /**< iteration limit for strong branchings */
1513 SCIP_Real* down, /**< stores dual bounds after branching variables down */
1514 SCIP_Real* up, /**< stores dual bounds after branching variables up */
1515 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds, or NULL;
1516 * otherwise, they can only be used as an estimate value */
1517 SCIP_Bool* upvalid, /**< stores whether the returned up values are valid dual bounds, or NULL;
1518 * otherwise, they can only be used as an estimate value */
1519 SCIP_Bool* downinf, /**< array to store whether the downward branches are infeasible, or NULL */
1520 SCIP_Bool* upinf, /**< array to store whether the upward branches are infeasible, or NULL */
1521 SCIP_Bool* downconflict, /**< array to store whether conflict constraints were created for
1522 * infeasible downward branches, or NULL */
1523 SCIP_Bool* upconflict, /**< array to store whether conflict constraints were created for
1524 * infeasible upward branches, or NULL */
1525 SCIP_Bool* lperror /**< pointer to store whether an unresolved LP error occurred or the
1526 * solving process should be stopped (e.g., due to a time limit) */
1527 );
1528
1529/** gets strong branching information on column variables with integral values
1530 *
1531 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1532 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1533 *
1534 * @pre This method can be called if @p scip is in one of the following stages:
1535 * - \ref SCIP_STAGE_PRESOLVED
1536 * - \ref SCIP_STAGE_SOLVING
1537 */
1538SCIP_EXPORT
1540 SCIP* scip, /**< SCIP data structure */
1541 SCIP_VAR** vars, /**< variables to get strong branching values for */
1542 int nvars, /**< number of variables */
1543 int itlim, /**< iteration limit for strong branchings */
1544 SCIP_Real* down, /**< stores dual bounds after branching variables down */
1545 SCIP_Real* up, /**< stores dual bounds after branching variables up */
1546 SCIP_Bool* downvalid, /**< stores whether the returned down values are valid dual bounds, or NULL;
1547 * otherwise, they can only be used as an estimate value */
1548 SCIP_Bool* upvalid, /**< stores whether the returned up values are valid dual bounds, or NULL;
1549 * otherwise, they can only be used as an estimate value */
1550 SCIP_Bool* downinf, /**< array to store whether the downward branches are infeasible, or NULL */
1551 SCIP_Bool* upinf, /**< array to store whether the upward branches are infeasible, or NULL */
1552 SCIP_Bool* downconflict, /**< array to store whether conflict constraints were created for
1553 * infeasible downward branches, or NULL */
1554 SCIP_Bool* upconflict, /**< array to store whether conflict constraints were created for
1555 * infeasible upward branches, or NULL */
1556 SCIP_Bool* lperror /**< pointer to store whether an unresolved LP error occurred or the
1557 * solving process should be stopped (e.g., due to a time limit) */
1558 );
1559
1560/** get LP solution status of last strong branching call (currently only works for strong branching with propagation) */
1561SCIP_EXPORT
1563 SCIP* scip, /**< SCIP data structure */
1564 SCIP_BRANCHDIR branchdir /**< branching direction for which LP solution status is requested */
1565 );
1566
1567/** gets strong branching information on COLUMN variable of the last SCIPgetVarStrongbranch() call;
1568 * returns values of SCIP_INVALID, if strong branching was not yet called on the given variable;
1569 * keep in mind, that the returned old values may have nothing to do with the current LP solution
1570 *
1571 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1572 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1573 *
1574 * @pre This method can be called if @p scip is in one of the following stages:
1575 * - \ref SCIP_STAGE_SOLVING
1576 * - \ref SCIP_STAGE_SOLVED
1577 */
1578SCIP_EXPORT
1580 SCIP* scip, /**< SCIP data structure */
1581 SCIP_VAR* var, /**< variable to get last strong branching values for */
1582 SCIP_Real* down, /**< stores dual bound after branching column down, or NULL */
1583 SCIP_Real* up, /**< stores dual bound after branching column up, or NULL */
1584 SCIP_Bool* downvalid, /**< stores whether the returned down value is a valid dual bound, or NULL;
1585 * otherwise, it can only be used as an estimate value */
1586 SCIP_Bool* upvalid, /**< stores whether the returned up value is a valid dual bound, or NULL;
1587 * otherwise, it can only be used as an estimate value */
1588 SCIP_Real* solval, /**< stores LP solution value of variable at last strong branching call, or NULL */
1589 SCIP_Real* lpobjval /**< stores LP objective value at last strong branching call, or NULL */
1590 );
1591
1592/** sets strong branching information for a column variable
1593 *
1594 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1595 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1596 *
1597 * @pre This method can be called if @p scip is in one of the following stages:
1598 * - \ref SCIP_STAGE_SOLVING
1599 */
1600SCIP_EXPORT
1602 SCIP* scip, /**< SCIP data structure */
1603 SCIP_VAR* var, /**< variable to set last strong branching values for */
1604 SCIP_Real lpobjval, /**< objective value of the current LP */
1605 SCIP_Real primsol, /**< primal solution value of the column in the current LP */
1606 SCIP_Real down, /**< dual bound after branching column down */
1607 SCIP_Real up, /**< dual bound after branching column up */
1608 SCIP_Bool downvalid, /**< is the returned down value a valid dual bound? */
1609 SCIP_Bool upvalid, /**< is the returned up value a valid dual bound? */
1610 SCIP_Longint iter, /**< total number of strong branching iterations */
1611 int itlim /**< iteration limit applied to the strong branching call */
1612 );
1613
1614/** rounds the current solution and tries it afterwards; if feasible, adds it to storage
1615 *
1616 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1617 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1618 *
1619 * @pre This method can be called if @p scip is in one of the following stages:
1620 * - \ref SCIP_STAGE_SOLVING
1621 */
1622SCIP_EXPORT
1624 SCIP* scip, /**< SCIP data structure */
1625 SCIP_Bool* foundsol, /**< stores whether solution was feasible and good enough to keep */
1626 SCIP_Bool* cutoff /**< stores whether solution was cutoff due to exceeding the cutoffbound */
1627 );
1628
1629/** gets node number of the last node in current branch and bound run, where strong branching was used on the
1630 * given variable, or -1 if strong branching was never applied to the variable in current run
1631 *
1632 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1633 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1634 *
1635 * @pre This method can be called if @p scip is in one of the following stages:
1636 * - \ref SCIP_STAGE_TRANSFORMING
1637 * - \ref SCIP_STAGE_TRANSFORMED
1638 * - \ref SCIP_STAGE_INITPRESOLVE
1639 * - \ref SCIP_STAGE_PRESOLVING
1640 * - \ref SCIP_STAGE_EXITPRESOLVE
1641 * - \ref SCIP_STAGE_PRESOLVED
1642 * - \ref SCIP_STAGE_INITSOLVE
1643 * - \ref SCIP_STAGE_SOLVING
1644 * - \ref SCIP_STAGE_SOLVED
1645 * - \ref SCIP_STAGE_EXITSOLVE
1646 */
1647SCIP_EXPORT
1649 SCIP* scip, /**< SCIP data structure */
1650 SCIP_VAR* var /**< variable to get last strong branching node for */
1651 );
1652
1653/** if strong branching was already applied on the variable at the current node, returns the number of LPs solved after
1654 * the LP where the strong branching on this variable was applied;
1655 * if strong branching was not yet applied on the variable at the current node, returns INT_MAX
1656 *
1657 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1658 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1659 *
1660 * @pre This method can be called if @p scip is in one of the following stages:
1661 * - \ref SCIP_STAGE_TRANSFORMING
1662 * - \ref SCIP_STAGE_TRANSFORMED
1663 * - \ref SCIP_STAGE_INITPRESOLVE
1664 * - \ref SCIP_STAGE_PRESOLVING
1665 * - \ref SCIP_STAGE_EXITPRESOLVE
1666 * - \ref SCIP_STAGE_PRESOLVED
1667 * - \ref SCIP_STAGE_INITSOLVE
1668 * - \ref SCIP_STAGE_SOLVING
1669 * - \ref SCIP_STAGE_SOLVED
1670 * - \ref SCIP_STAGE_EXITSOLVE
1671 */
1672SCIP_EXPORT
1674 SCIP* scip, /**< SCIP data structure */
1675 SCIP_VAR* var /**< variable to get strong branching LP age for */
1676 );
1677
1678/** gets number of times, strong branching was applied in current run on the given variable
1679 *
1680 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1681 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1682 *
1683 * @pre This method can be called if @p scip is in one of the following stages:
1684 * - \ref SCIP_STAGE_TRANSFORMING
1685 * - \ref SCIP_STAGE_TRANSFORMED
1686 * - \ref SCIP_STAGE_INITPRESOLVE
1687 * - \ref SCIP_STAGE_PRESOLVING
1688 * - \ref SCIP_STAGE_EXITPRESOLVE
1689 * - \ref SCIP_STAGE_PRESOLVED
1690 * - \ref SCIP_STAGE_INITSOLVE
1691 * - \ref SCIP_STAGE_SOLVING
1692 * - \ref SCIP_STAGE_SOLVED
1693 * - \ref SCIP_STAGE_EXITSOLVE
1694 */
1695SCIP_EXPORT
1697 SCIP* scip, /**< SCIP data structure */
1698 SCIP_VAR* var /**< variable to get last strong branching node for */
1699 );
1700
1701/** adds given values to lock numbers of type @p locktype of variable for rounding
1702 *
1703 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1704 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1705 *
1706 * @pre This method can be called if @p scip is in one of the following stages:
1707 * - \ref SCIP_STAGE_PROBLEM
1708 * - \ref SCIP_STAGE_TRANSFORMING
1709 * - \ref SCIP_STAGE_TRANSFORMED
1710 * - \ref SCIP_STAGE_INITPRESOLVE
1711 * - \ref SCIP_STAGE_PRESOLVING
1712 * - \ref SCIP_STAGE_EXITPRESOLVE
1713 * - \ref SCIP_STAGE_PRESOLVED
1714 * - \ref SCIP_STAGE_INITSOLVE
1715 * - \ref SCIP_STAGE_SOLVING
1716 * - \ref SCIP_STAGE_EXITSOLVE
1717 * - \ref SCIP_STAGE_FREETRANS
1718 */
1719SCIP_EXPORT
1721 SCIP* scip, /**< SCIP data structure */
1722 SCIP_VAR* var, /**< problem variable */
1723 SCIP_LOCKTYPE locktype, /**< type of the variable locks */
1724 int nlocksdown, /**< modification in number of rounding down locks */
1725 int nlocksup /**< modification in number of rounding up locks */
1726 );
1727
1728
1729/** adds given values to lock numbers of variable for rounding
1730 *
1731 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1732 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1733 *
1734 * @pre This method can be called if @p scip is in one of the following stages:
1735 * - \ref SCIP_STAGE_PROBLEM
1736 * - \ref SCIP_STAGE_TRANSFORMING
1737 * - \ref SCIP_STAGE_TRANSFORMED
1738 * - \ref SCIP_STAGE_INITPRESOLVE
1739 * - \ref SCIP_STAGE_PRESOLVING
1740 * - \ref SCIP_STAGE_EXITPRESOLVE
1741 * - \ref SCIP_STAGE_PRESOLVED
1742 * - \ref SCIP_STAGE_INITSOLVE
1743 * - \ref SCIP_STAGE_SOLVING
1744 * - \ref SCIP_STAGE_EXITSOLVE
1745 * - \ref SCIP_STAGE_FREETRANS
1746 *
1747 * @note This method will always add variable locks of type model
1748 */
1749SCIP_EXPORT
1751 SCIP* scip, /**< SCIP data structure */
1752 SCIP_VAR* var, /**< problem variable */
1753 int nlocksdown, /**< modification in number of rounding down locks */
1754 int nlocksup /**< modification in number of rounding up locks */
1755 );
1756
1757
1758/** add locks of type @p locktype of variable with respect to the lock status of the constraint and its negation;
1759 * this method should be called whenever the lock status of a variable in a constraint changes, for example if
1760 * the coefficient of the variable changed its sign or if the left or right hand sides of the constraint were
1761 * added or removed
1762 *
1763 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1764 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1765 *
1766 * @pre This method can be called if @p scip is in one of the following stages:
1767 * - \ref SCIP_STAGE_PROBLEM
1768 * - \ref SCIP_STAGE_TRANSFORMING
1769 * - \ref SCIP_STAGE_INITPRESOLVE
1770 * - \ref SCIP_STAGE_PRESOLVING
1771 * - \ref SCIP_STAGE_EXITPRESOLVE
1772 * - \ref SCIP_STAGE_INITSOLVE
1773 * - \ref SCIP_STAGE_SOLVING
1774 * - \ref SCIP_STAGE_EXITSOLVE
1775 * - \ref SCIP_STAGE_FREETRANS
1776 */
1777SCIP_EXPORT
1779 SCIP* scip, /**< SCIP data structure */
1780 SCIP_VAR* var, /**< problem variable */
1781 SCIP_CONS* cons, /**< constraint */
1782 SCIP_Bool lockdown, /**< should the rounding be locked in downwards direction? */
1783 SCIP_Bool lockup /**< should the rounding be locked in upwards direction? */
1784 );
1785
1786/** remove locks of type @p locktype of variable with respect to the lock status of the constraint and its negation;
1787 * this method should be called whenever the lock status of a variable in a constraint changes, for example if
1788 * the coefficient of the variable changed its sign or if the left or right hand sides of the constraint were
1789 * added or removed
1790 *
1791 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1792 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1793 *
1794 * @pre This method can be called if @p scip is in one of the following stages:
1795 * - \ref SCIP_STAGE_PROBLEM
1796 * - \ref SCIP_STAGE_TRANSFORMING
1797 * - \ref SCIP_STAGE_INITPRESOLVE
1798 * - \ref SCIP_STAGE_PRESOLVING
1799 * - \ref SCIP_STAGE_EXITPRESOLVE
1800 * - \ref SCIP_STAGE_INITSOLVE
1801 * - \ref SCIP_STAGE_SOLVING
1802 * - \ref SCIP_STAGE_EXITSOLVE
1803 * - \ref SCIP_STAGE_FREETRANS
1804 */
1805SCIP_EXPORT
1807 SCIP* scip, /**< SCIP data structure */
1808 SCIP_VAR* var, /**< problem variable */
1809 SCIP_CONS* cons, /**< constraint */
1810 SCIP_Bool lockdown, /**< should the rounding be unlocked in downwards direction? */
1811 SCIP_Bool lockup /**< should the rounding be unlocked in upwards direction? */
1812 );
1813
1814/** changes variable's objective value
1815 *
1816 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1817 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1818 *
1819 * @pre This method can be called if @p scip is in one of the following stages:
1820 * - \ref SCIP_STAGE_PROBLEM
1821 * - \ref SCIP_STAGE_TRANSFORMING
1822 * - \ref SCIP_STAGE_PRESOLVING
1823 */
1824SCIP_EXPORT
1826 SCIP* scip, /**< SCIP data structure */
1827 SCIP_VAR* var, /**< variable to change the objective value for */
1828 SCIP_Real newobj /**< new objective value */
1829 );
1830
1831/** adds value to variable's objective value
1832 *
1833 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1834 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1835 *
1836 * @pre This method can be called if @p scip is in one of the following stages:
1837 * - \ref SCIP_STAGE_PROBLEM
1838 * - \ref SCIP_STAGE_TRANSFORMING
1839 * - \ref SCIP_STAGE_PRESOLVING
1840 * - \ref SCIP_STAGE_EXITPRESOLVE
1841 * - \ref SCIP_STAGE_PRESOLVED
1842 */
1843SCIP_EXPORT
1845 SCIP* scip, /**< SCIP data structure */
1846 SCIP_VAR* var, /**< variable to change the objective value for */
1847 SCIP_Real addobj /**< additional objective value */
1848 );
1849
1850/** returns the adjusted (i.e. rounded, if the given variable is of integral type) lower bound value;
1851 * does not change the bounds of the variable
1852 *
1853 * @return adjusted lower bound for the given variable; the bound of the variable is not changed
1854 *
1855 * @pre This method can be called if @p scip is in one of the following stages:
1856 * - \ref SCIP_STAGE_PROBLEM
1857 * - \ref SCIP_STAGE_TRANSFORMING
1858 * - \ref SCIP_STAGE_TRANSFORMED
1859 * - \ref SCIP_STAGE_INITPRESOLVE
1860 * - \ref SCIP_STAGE_PRESOLVING
1861 * - \ref SCIP_STAGE_EXITPRESOLVE
1862 * - \ref SCIP_STAGE_PRESOLVED
1863 * - \ref SCIP_STAGE_INITSOLVE
1864 * - \ref SCIP_STAGE_SOLVING
1865 * - \ref SCIP_STAGE_SOLVED
1866 * - \ref SCIP_STAGE_EXITSOLVE
1867 * - \ref SCIP_STAGE_FREETRANS
1868 */
1869SCIP_EXPORT
1871 SCIP* scip, /**< SCIP data structure */
1872 SCIP_VAR* var, /**< variable to adjust the bound for */
1873 SCIP_Real lb /**< lower bound value to adjust */
1874 );
1875
1876/** returns the adjusted (i.e. rounded, if the given variable is of integral type) lower bound value;
1877 * does not change the bounds of the variable
1878 *
1879 * @return adjusted lower bound for the given variable; the bound of the variable is not changed
1880 *
1881 * @pre This method can be called if @p scip is in one of the following stages:
1882 * - \ref SCIP_STAGE_PROBLEM
1883 * - \ref SCIP_STAGE_TRANSFORMING
1884 * - \ref SCIP_STAGE_TRANSFORMED
1885 * - \ref SCIP_STAGE_INITPRESOLVE
1886 * - \ref SCIP_STAGE_PRESOLVING
1887 * - \ref SCIP_STAGE_EXITPRESOLVE
1888 * - \ref SCIP_STAGE_PRESOLVED
1889 * - \ref SCIP_STAGE_INITSOLVE
1890 * - \ref SCIP_STAGE_SOLVING
1891 * - \ref SCIP_STAGE_SOLVED
1892 * - \ref SCIP_STAGE_EXITSOLVE
1893 * - \ref SCIP_STAGE_FREETRANS
1894 */
1895SCIP_EXPORT
1897 SCIP* scip, /**< SCIP data structure */
1898 SCIP_VAR* var, /**< variable to adjust the bound for */
1899 SCIP_Real lb /**< lower bound value to adjust */
1900 );
1901
1902/** returns the adjusted (i.e. rounded, if the given variable is of integral type) upper bound value;
1903 * does not change the bounds of the variable
1904 *
1905 * @return adjusted upper bound for the given variable; the bound of the variable is not changed
1906 *
1907 * @pre This method can be called if @p scip is in one of the following stages:
1908 * - \ref SCIP_STAGE_PROBLEM
1909 * - \ref SCIP_STAGE_TRANSFORMING
1910 * - \ref SCIP_STAGE_TRANSFORMED
1911 * - \ref SCIP_STAGE_INITPRESOLVE
1912 * - \ref SCIP_STAGE_PRESOLVING
1913 * - \ref SCIP_STAGE_EXITPRESOLVE
1914 * - \ref SCIP_STAGE_PRESOLVED
1915 * - \ref SCIP_STAGE_INITSOLVE
1916 * - \ref SCIP_STAGE_SOLVING
1917 * - \ref SCIP_STAGE_SOLVED
1918 * - \ref SCIP_STAGE_EXITSOLVE
1919 * - \ref SCIP_STAGE_FREETRANS
1920 */
1921SCIP_EXPORT
1923 SCIP* scip, /**< SCIP data structure */
1924 SCIP_VAR* var, /**< variable to adjust the bound for */
1925 SCIP_Real ub /**< upper bound value to adjust */
1926 );
1927
1928/** returns the adjusted (i.e. rounded, if the given variable is of integral type) upper bound value;
1929 * does not change the bounds of the variable
1930 *
1931 * @return adjusted upper bound for the given variable; the bound of the variable is not changed
1932 *
1933 * @pre This method can be called if @p scip is in one of the following stages:
1934 * - \ref SCIP_STAGE_PROBLEM
1935 * - \ref SCIP_STAGE_TRANSFORMING
1936 * - \ref SCIP_STAGE_TRANSFORMED
1937 * - \ref SCIP_STAGE_INITPRESOLVE
1938 * - \ref SCIP_STAGE_PRESOLVING
1939 * - \ref SCIP_STAGE_EXITPRESOLVE
1940 * - \ref SCIP_STAGE_PRESOLVED
1941 * - \ref SCIP_STAGE_INITSOLVE
1942 * - \ref SCIP_STAGE_SOLVING
1943 * - \ref SCIP_STAGE_SOLVED
1944 * - \ref SCIP_STAGE_EXITSOLVE
1945 * - \ref SCIP_STAGE_FREETRANS
1946 */
1947SCIP_EXPORT
1949 SCIP* scip, /**< SCIP data structure */
1950 SCIP_VAR* var, /**< variable to adjust the bound for */
1951 SCIP_Real ub /**< upper bound value to adjust */
1952 );
1953
1954/** depending on SCIP's stage, changes lower bound of variable in the problem, in preprocessing, or in current node;
1955 * if possible, adjusts bound to integral value; doesn't store any inference information in the bound change, such
1956 * that in conflict analysis, this change is treated like a branching decision
1957 *
1958 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
1959 * SCIPgetVars()) gets re-sorted.
1960 *
1961 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1962 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1963 *
1964 * @pre This method can be called if @p scip is in one of the following stages:
1965 * - \ref SCIP_STAGE_PROBLEM
1966 * - \ref SCIP_STAGE_TRANSFORMING
1967 * - \ref SCIP_STAGE_PRESOLVING
1968 * - \ref SCIP_STAGE_SOLVING
1969 *
1970 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
1971 */
1972SCIP_EXPORT
1974 SCIP* scip, /**< SCIP data structure */
1975 SCIP_VAR* var, /**< variable to change the bound for */
1976 SCIP_Real newbound /**< new value for bound */
1977 );
1978
1979/** depending on SCIP's stage, changes exact lower bound of variable in the problem, in preprocessing, or in current node;
1980 * if possible, adjusts bound to integral value; doesn't store any inference information in the bound change, such
1981 * that in conflict analysis, this change is treated like a branching decision
1982 *
1983 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
1984 * SCIPgetVars()) gets resorted.
1985 *
1986 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1987 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1988 *
1989 * @pre This method can be called if @p scip is in one of the following stages:
1990 * - \ref SCIP_STAGE_PROBLEM
1991 * - \ref SCIP_STAGE_TRANSFORMING
1992 * - \ref SCIP_STAGE_PRESOLVING
1993 * - \ref SCIP_STAGE_SOLVING
1994 *
1995 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
1996 */
1997SCIP_EXPORT
1999 SCIP* scip, /**< SCIP data structure */
2000 SCIP_VAR* var, /**< variable to change the bound for */
2001 SCIP_RATIONAL* newbound /**< new value for bound */
2002 );
2003
2004/** depending on SCIP's stage, changes upper bound of variable in the problem, in preprocessing, or in current node;
2005 * if possible, adjusts bound to integral value; doesn't store any inference information in the bound change, such
2006 * that in conflict analysis, this change is treated like a branching decision
2007 *
2008 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2009 * SCIPgetVars()) gets re-sorted.
2010 *
2011 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2012 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2013 *
2014 * @pre This method can be called if @p scip is in one of the following stages:
2015 * - \ref SCIP_STAGE_PROBLEM
2016 * - \ref SCIP_STAGE_TRANSFORMING
2017 * - \ref SCIP_STAGE_PRESOLVING
2018 * - \ref SCIP_STAGE_SOLVING
2019 *
2020 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2021 */
2022SCIP_EXPORT
2024 SCIP* scip, /**< SCIP data structure */
2025 SCIP_VAR* var, /**< variable to change the bound for */
2026 SCIP_Real newbound /**< new value for bound */
2027 );
2028
2029/** depending on SCIP's stage, changes exact upper bound of variable in the problem, in preprocessing, or in current node;
2030 * if possible, adjusts bound to integral value; doesn't store any inference information in the bound change, such
2031 * that in conflict analysis, this change is treated like a branching decision
2032 *
2033 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2034 * SCIPgetVars()) gets resorted.
2035 *
2036 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2037 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2038 *
2039 * @pre This method can be called if @p scip is in one of the following stages:
2040 * - \ref SCIP_STAGE_PROBLEM
2041 * - \ref SCIP_STAGE_TRANSFORMING
2042 * - \ref SCIP_STAGE_PRESOLVING
2043 * - \ref SCIP_STAGE_SOLVING
2044 *
2045 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2046 */
2047SCIP_EXPORT
2049 SCIP* scip, /**< SCIP data structure */
2050 SCIP_VAR* var, /**< variable to change the bound for */
2051 SCIP_RATIONAL* newbound /**< new value for bound */
2052 );
2053
2054/** changes lower bound of variable in the given node; if possible, adjust bound to integral value; doesn't store any
2055 * inference information in the bound change, such that in conflict analysis, this change is treated like a branching
2056 * decision
2057 *
2058 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2059 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2060 *
2061 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_SOLVING
2062 */
2063SCIP_EXPORT
2065 SCIP* scip, /**< SCIP data structure */
2066 SCIP_NODE* node, /**< node to change bound at, or NULL for current node */
2067 SCIP_VAR* var, /**< variable to change the bound for */
2068 SCIP_Real newbound /**< new value for bound */
2069 );
2070
2071/** changes upper bound of variable in the given node; if possible, adjust bound to integral value; doesn't store any
2072 * inference information in the bound change, such that in conflict analysis, this change is treated like a branching
2073 * decision
2074 *
2075 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2076 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2077 *
2078 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_SOLVING
2079 */
2080SCIP_EXPORT
2082 SCIP* scip, /**< SCIP data structure */
2083 SCIP_NODE* node, /**< node to change bound at, or NULL for current node */
2084 SCIP_VAR* var, /**< variable to change the bound for */
2085 SCIP_Real newbound /**< new value for bound */
2086 );
2087
2088/** changes global lower bound of variable; if possible, adjust bound to integral value; also tightens the local bound,
2089 * if the global bound is better than the local bound
2090 *
2091 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2092 * SCIPgetVars()) gets re-sorted.
2093 *
2094 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2095 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2096 *
2097 * @pre This method can be called if @p scip is in one of the following stages:
2098 * - \ref SCIP_STAGE_PROBLEM
2099 * - \ref SCIP_STAGE_TRANSFORMING
2100 * - \ref SCIP_STAGE_TRANSFORMED
2101 * - \ref SCIP_STAGE_PRESOLVING
2102 * - \ref SCIP_STAGE_SOLVING
2103 *
2104 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2105 */
2106SCIP_EXPORT
2108 SCIP* scip, /**< SCIP data structure */
2109 SCIP_VAR* var, /**< variable to change the bound for */
2110 SCIP_Real newbound /**< new value for bound */
2111 );
2112
2113/** changes global upper bound of variable; if possible, adjust bound to integral value; also tightens the local bound,
2114 * if the global bound is better than the local bound
2115 *
2116 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2117 * SCIPgetVars()) gets re-sorted.
2118 *
2119 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2120 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2121 *
2122 * @pre This method can be called if @p scip is in one of the following stages:
2123 * - \ref SCIP_STAGE_PROBLEM
2124 * - \ref SCIP_STAGE_TRANSFORMING
2125 * - \ref SCIP_STAGE_TRANSFORMED
2126 * - \ref SCIP_STAGE_PRESOLVING
2127 * - \ref SCIP_STAGE_SOLVING
2128 *
2129 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2130 */
2131SCIP_EXPORT
2133 SCIP* scip, /**< SCIP data structure */
2134 SCIP_VAR* var, /**< variable to change the bound for */
2135 SCIP_Real newbound /**< new value for bound */
2136 );
2137
2138/** changes lazy lower bound of the variable, this is only possible if the variable is not in the LP yet
2139 *
2140 * Lazy bounds are bounds that are already enforced by constraints and the objective function.
2141 * Setting a lazy lower bound has the consequence that for variables which lower bound equals the lazy lower bound,
2142 * the lower bound does not need to be passed on to the LP solver.
2143 * This is especially useful in a column generation (branch-and-price) setting.
2144 *
2145 * @attention If the variable has a global lower bound below lazylb, then the global lower bound is tightened to
2146 * lazylb by a call to SCIPchgVarLbGlobal().
2147 *
2148 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2149 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2150 *
2151 * @pre This method can be called if @p scip is in one of the following stages:
2152 * - \ref SCIP_STAGE_PROBLEM
2153 * - \ref SCIP_STAGE_TRANSFORMING
2154 * - \ref SCIP_STAGE_TRANSFORMED
2155 * - \ref SCIP_STAGE_PRESOLVING
2156 * - \ref SCIP_STAGE_SOLVING
2157 */
2158SCIP_EXPORT
2160 SCIP* scip, /**< SCIP data structure */
2161 SCIP_VAR* var, /**< problem variable */
2162 SCIP_Real lazylb /**< the lazy lower bound to be set */
2163 );
2164
2165/** changes lazy upper bound of the variable, this is only possible if the variable is not in the LP yet
2166 *
2167 * Lazy bounds are bounds that are already enforced by constraints and the objective function.
2168 * Setting a lazy upper bound has the consequence that for variables which upper bound equals the lazy upper bound,
2169 * the upper bound does not need to be passed on to the LP solver.
2170 * This is especially useful in a column generation (branch-and-price) setting.
2171 *
2172 * @attention If the variable has a global upper bound above lazyub, then the global upper bound is tightened to
2173 * lazyub by a call to SCIPchgVarUbGlobal().
2174 *
2175 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2176 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2177 *
2178 * @pre This method can be called if @p scip is in one of the following stages:
2179 * - \ref SCIP_STAGE_PROBLEM
2180 * - \ref SCIP_STAGE_TRANSFORMING
2181 * - \ref SCIP_STAGE_TRANSFORMED
2182 * - \ref SCIP_STAGE_PRESOLVING
2183 * - \ref SCIP_STAGE_SOLVING
2184 */
2185SCIP_EXPORT
2187 SCIP* scip, /**< SCIP data structure */
2188 SCIP_VAR* var, /**< problem variable */
2189 SCIP_Real lazyub /**< the lazy lower bound to be set */
2190 );
2191
2192/** changes lower bound of variable in preprocessing or in the current node, if the new bound is tighter
2193 * (w.r.t. bound strengthening epsilon) than the current bound; if possible, adjusts bound to integral value;
2194 * doesn't store any inference information in the bound change, such that in conflict analysis, this change
2195 * is treated like a branching decision
2196 *
2197 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2198 * SCIPgetVars()) gets re-sorted.
2199 *
2200 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2201 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2202 *
2203 * @pre This method can be called if @p scip is in one of the following stages:
2204 * - \ref SCIP_STAGE_PROBLEM
2205 * - \ref SCIP_STAGE_PRESOLVING
2206 * - \ref SCIP_STAGE_SOLVING
2207 *
2208 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2209 */
2210SCIP_EXPORT
2212 SCIP* scip, /**< SCIP data structure */
2213 SCIP_VAR* var, /**< variable to change the bound for */
2214 SCIP_Real newbound, /**< new value for bound */
2215 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2216 SCIP_Bool* infeasible, /**< pointer to store whether the new domain is empty */
2217 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2218 );
2219
2220/** changes exact lower bound of variable in preprocessing or in the current node, if the new bound is tighter
2221 * (w.r.t. bound strengthening epsilon) than the current bound; if possible, adjusts bound to integral value;
2222 * doesn't store any inference information in the bound change, such that in conflict analysis, this change
2223 * is treated like a branching decision
2224 *
2225 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2226 * SCIPgetVars()) gets resorted.
2227 *
2228 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2229 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2230 *
2231 * @pre This method can be called if @p scip is in one of the following stages:
2232 * - \ref SCIP_STAGE_PROBLEM
2233 * - \ref SCIP_STAGE_PRESOLVING
2234 * - \ref SCIP_STAGE_SOLVING
2235 *
2236 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2237 */
2238SCIP_EXPORT
2240 SCIP* scip, /**< SCIP data structure */
2241 SCIP_VAR* var, /**< variable to change the bound for */
2242 SCIP_RATIONAL* newbound, /**< new value for bound */
2243 SCIP_Bool* infeasible, /**< pointer to store whether the new domain is empty */
2244 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2245 );
2246
2247/** changes upper bound of variable in preprocessing or in the current node, if the new bound is tighter
2248 * (w.r.t. bound strengthening epsilon) than the current bound; if possible, adjusts bound to integral value;
2249 * doesn't store any inference information in the bound change, such that in conflict analysis, this change
2250 * is treated like a branching decision
2251 *
2252 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2253 * SCIPgetVars()) gets re-sorted.
2254 *
2255 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2256 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2257 *
2258 * @pre This method can be called if @p scip is in one of the following stages:
2259 * - \ref SCIP_STAGE_PROBLEM
2260 * - \ref SCIP_STAGE_PRESOLVING
2261 * - \ref SCIP_STAGE_SOLVING
2262 *
2263 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2264 */
2265SCIP_EXPORT
2267 SCIP* scip, /**< SCIP data structure */
2268 SCIP_VAR* var, /**< variable to change the bound for */
2269 SCIP_Real newbound, /**< new value for bound */
2270 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2271 SCIP_Bool* infeasible, /**< pointer to store whether the new domain is empty */
2272 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2273 );
2274
2275/** changes exact upper bound of variable in preprocessing or in the current node, if the new bound is tighter
2276 * (w.r.t. bound strengthening epsilon) than the current bound; if possible, adjusts bound to integral value;
2277 * doesn't store any inference information in the bound change, such that in conflict analysis, this change
2278 * is treated like a branching decision
2279 *
2280 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2281 * SCIPgetVars()) gets resorted.
2282 *
2283 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2284 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2285 *
2286 * @pre This method can be called if @p scip is in one of the following stages:
2287 * - \ref SCIP_STAGE_PROBLEM
2288 * - \ref SCIP_STAGE_PRESOLVING
2289 * - \ref SCIP_STAGE_SOLVING
2290 *
2291 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2292 */
2293SCIP_EXPORT
2295 SCIP* scip, /**< SCIP data structure */
2296 SCIP_VAR* var, /**< variable to change the bound for */
2297 SCIP_RATIONAL* newbound, /**< new value for bound */
2298 SCIP_Bool* infeasible, /**< pointer to store whether the new domain is empty */
2299 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2300 );
2301
2302/** fixes variable in preprocessing or in the current node, if the new bound is tighter (w.r.t. bound strengthening
2303 * epsilon) than the current bound; if possible, adjusts bound to integral value; the given inference constraint is
2304 * stored, such that the conflict analysis is able to find out the reason for the deduction of the bound change
2305 *
2306 * @note In presolving stage when not in probing mode the variable will be fixed directly, otherwise this method
2307 * changes first the lowerbound by calling SCIPinferVarLbCons and second the upperbound by calling
2308 * SCIPinferVarUbCons
2309 *
2310 * @note If SCIP is in presolving stage, it can happen that the internal variable array (which get be accessed via
2311 * SCIPgetVars()) gets re-sorted.
2312 *
2313 * @note During presolving, an integer variable which bound changes to {0,1} is upgraded to a binary variable.
2314 */
2315SCIP_EXPORT
2317 SCIP* scip, /**< SCIP data structure */
2318 SCIP_VAR* var, /**< variable to change the bound for */
2319 SCIP_Real fixedval, /**< new value for fixation */
2320 SCIP_CONS* infercons, /**< constraint that deduced the bound change */
2321 int inferinfo, /**< user information for inference to help resolving the conflict */
2322 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2323 SCIP_Bool* infeasible, /**< pointer to store whether the bound change is infeasible */
2324 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2325 );
2326
2327/** changes lower bound of variable in preprocessing or in the current node, if the new bound is tighter
2328 * (w.r.t. bound strengthening epsilon) than the current bound; if possible, adjusts bound to integral value;
2329 * the given inference constraint is stored, such that the conflict analysis is able to find out the reason
2330 * for the deduction of the bound change
2331 *
2332 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2333 * SCIPgetVars()) gets re-sorted.
2334 *
2335 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2336 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2337 *
2338 * @pre This method can be called if @p scip is in one of the following stages:
2339 * - \ref SCIP_STAGE_PROBLEM
2340 * - \ref SCIP_STAGE_PRESOLVING
2341 * - \ref SCIP_STAGE_SOLVING
2342 *
2343 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2344 */
2345SCIP_EXPORT
2347 SCIP* scip, /**< SCIP data structure */
2348 SCIP_VAR* var, /**< variable to change the bound for */
2349 SCIP_Real newbound, /**< new value for bound */
2350 SCIP_CONS* infercons, /**< constraint that deduced the bound change, or NULL */
2351 int inferinfo, /**< user information for inference to help resolving the conflict */
2352 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2353 SCIP_Bool* infeasible, /**< pointer to store whether the bound change is infeasible */
2354 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2355 );
2356
2357/** changes upper bound of variable in preprocessing or in the current node, if the new bound is tighter
2358 * (w.r.t. bound strengthening epsilon) than the current bound; if possible, adjusts bound to integral value;
2359 * the given inference constraint is stored, such that the conflict analysis is able to find out the reason
2360 * for the deduction of the bound change
2361 *
2362 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2363 * SCIPgetVars()) gets re-sorted.
2364 *
2365 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2366 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2367 *
2368 * @pre This method can be called if @p scip is in one of the following stages:
2369 * - \ref SCIP_STAGE_PROBLEM
2370 * - \ref SCIP_STAGE_PRESOLVING
2371 * - \ref SCIP_STAGE_SOLVING
2372 *
2373 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2374 */
2375SCIP_EXPORT
2377 SCIP* scip, /**< SCIP data structure */
2378 SCIP_VAR* var, /**< variable to change the bound for */
2379 SCIP_Real newbound, /**< new value for bound */
2380 SCIP_CONS* infercons, /**< constraint that deduced the bound change */
2381 int inferinfo, /**< user information for inference to help resolving the conflict */
2382 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2383 SCIP_Bool* infeasible, /**< pointer to store whether the bound change is infeasible */
2384 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2385 );
2386
2387/** depending on SCIP's stage, fixes binary variable in the problem, in preprocessing, or in current node;
2388 * the given inference constraint is stored, such that the conflict analysis is able to find out the reason for the
2389 * deduction of the fixing
2390 *
2391 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2392 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2393 *
2394 * @pre This method can be called if @p scip is in one of the following stages:
2395 * - \ref SCIP_STAGE_PROBLEM
2396 * - \ref SCIP_STAGE_PRESOLVING
2397 * - \ref SCIP_STAGE_SOLVING
2398 */
2399SCIP_EXPORT
2401 SCIP* scip, /**< SCIP data structure */
2402 SCIP_VAR* var, /**< binary variable to fix */
2403 SCIP_Bool fixedval, /**< value to fix binary variable to */
2404 SCIP_CONS* infercons, /**< constraint that deduced the fixing */
2405 int inferinfo, /**< user information for inference to help resolving the conflict */
2406 SCIP_Bool* infeasible, /**< pointer to store whether the fixing is infeasible */
2407 SCIP_Bool* tightened /**< pointer to store whether the fixing tightened the local bounds, or NULL */
2408 );
2409
2410/** changes upper bound of variable in preprocessing or in the current node, if the new bound is tighter
2411 * than the current bound; if possible, adjusts bound to integral value;
2412 * the given inference constraint is stored, such that the conflict analysis is able to find out the reason
2413 * for the deduction of the bound change
2414 *
2415 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2416 * SCIPgetVars()) gets resorted.
2417 *
2418 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2419 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2420 *
2421 * @pre This method can be called if @p scip is in one of the following stages:
2422 * - \ref SCIP_STAGE_PROBLEM
2423 * - \ref SCIP_STAGE_PRESOLVING
2424 * - \ref SCIP_STAGE_SOLVING
2425 *
2426 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2427 */
2428SCIP_EXPORT
2430 SCIP* scip, /**< SCIP data structure */
2431 SCIP_VAR* var, /**< variable to change the bound for */
2432 SCIP_RATIONAL* newbound, /**< new value for bound */
2433 SCIP_CONS* infercons, /**< constraint that deduced the bound change */
2434 int inferinfo, /**< user information for inference to help resolving the conflict */
2435 SCIP_Bool* infeasible, /**< pointer to store whether the bound change is infeasible */
2436 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2437 );
2438
2439/** changes lower bound of variable in preprocessing or in the current node, if the new bound is tighter
2440 * than the current bound; if possible, adjusts bound to integral value;
2441 * the given inference constraint is stored, such that the conflict analysis is able to find out the reason
2442 * for the deduction of the bound change
2443 *
2444 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2445 * SCIPgetVars()) gets resorted.
2446 *
2447 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2448 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2449 *
2450 * @pre This method can be called if @p scip is in one of the following stages:
2451 * - \ref SCIP_STAGE_PROBLEM
2452 * - \ref SCIP_STAGE_PRESOLVING
2453 * - \ref SCIP_STAGE_SOLVING
2454 *
2455 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2456 */
2457SCIP_EXPORT
2459 SCIP* scip, /**< SCIP data structure */
2460 SCIP_VAR* var, /**< variable to change the bound for */
2461 SCIP_RATIONAL* newbound, /**< new value for bound */
2462 SCIP_CONS* infercons, /**< constraint that deduced the bound change */
2463 int inferinfo, /**< user information for inference to help resolving the conflict */
2464 SCIP_Bool* infeasible, /**< pointer to store whether the bound change is infeasible */
2465 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2466 );
2467
2468/** fixes variable in preprocessing or in the current node, if the new bound is tighter (w.r.t. bound strengthening
2469 * epsilon) than the current bound; if possible, adjusts bound to integral value; the given inference constraint is
2470 * stored, such that the conflict analysis is able to find out the reason for the deduction of the bound change
2471 *
2472 * @note In presolving stage when not in probing mode the variable will be fixed directly, otherwise this method
2473 * changes first the lowerbound by calling SCIPinferVarLbProp and second the upperbound by calling
2474 * SCIPinferVarUbProp
2475 *
2476 * @note If SCIP is in presolving stage, it can happen that the internal variable array (which get be accessed via
2477 * SCIPgetVars()) gets re-sorted.
2478 *
2479 * @note During presolving, an integer variable which bound changes to {0,1} is upgraded to a binary variable.
2480 */
2481SCIP_EXPORT
2483 SCIP* scip, /**< SCIP data structure */
2484 SCIP_VAR* var, /**< variable to change the bound for */
2485 SCIP_Real fixedval, /**< new value for fixation */
2486 SCIP_PROP* inferprop, /**< propagator that deduced the bound change */
2487 int inferinfo, /**< user information for inference to help resolving the conflict */
2488 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2489 SCIP_Bool* infeasible, /**< pointer to store whether the bound change is infeasible */
2490 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2491 );
2492
2493/** changes lower bound of variable in preprocessing or in the current node, if the new bound is tighter
2494 * (w.r.t. bound strengthening epsilon) than the current bound; if possible, adjusts bound to integral value;
2495 * the given inference propagator is stored, such that the conflict analysis is able to find out the reason
2496 * for the deduction of the bound change
2497 *
2498 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2499 * SCIPgetVars()) gets re-sorted.
2500 *
2501 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2502 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2503 *
2504 * @pre This method can be called if @p scip is in one of the following stages:
2505 * - \ref SCIP_STAGE_PROBLEM
2506 * - \ref SCIP_STAGE_PRESOLVING
2507 * - \ref SCIP_STAGE_SOLVING
2508 *
2509 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2510 */
2511SCIP_EXPORT
2513 SCIP* scip, /**< SCIP data structure */
2514 SCIP_VAR* var, /**< variable to change the bound for */
2515 SCIP_Real newbound, /**< new value for bound */
2516 SCIP_PROP* inferprop, /**< propagator that deduced the bound change, or NULL */
2517 int inferinfo, /**< user information for inference to help resolving the conflict */
2518 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2519 SCIP_Bool* infeasible, /**< pointer to store whether the bound change is infeasible */
2520 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2521 );
2522
2523/** changes upper bound of variable in preprocessing or in the current node, if the new bound is tighter
2524 * (w.r.t. bound strengthening epsilon) than the current bound; if possible, adjusts bound to integral value;
2525 * the given inference propagator is stored, such that the conflict analysis is able to find out the reason
2526 * for the deduction of the bound change
2527 *
2528 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2529 * SCIPgetVars()) gets re-sorted.
2530 *
2531 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2532 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2533 *
2534 * @pre This method can be called if @p scip is in one of the following stages:
2535 * - \ref SCIP_STAGE_PROBLEM
2536 * - \ref SCIP_STAGE_PRESOLVING
2537 * - \ref SCIP_STAGE_SOLVING
2538 *
2539 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2540 */
2541SCIP_EXPORT
2543 SCIP* scip, /**< SCIP data structure */
2544 SCIP_VAR* var, /**< variable to change the bound for */
2545 SCIP_Real newbound, /**< new value for bound */
2546 SCIP_PROP* inferprop, /**< propagator that deduced the bound change */
2547 int inferinfo, /**< user information for inference to help resolving the conflict */
2548 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2549 SCIP_Bool* infeasible, /**< pointer to store whether the bound change is infeasible */
2550 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2551 );
2552
2553/** depending on SCIP's stage, fixes binary variable in the problem, in preprocessing, or in current node;
2554 * the given inference propagator is stored, such that the conflict analysis is able to find out the reason for the
2555 * deduction of the fixing
2556 *
2557 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2558 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2559 *
2560 * @pre This method can be called if @p scip is in one of the following stages:
2561 * - \ref SCIP_STAGE_PROBLEM
2562 * - \ref SCIP_STAGE_PRESOLVING
2563 * - \ref SCIP_STAGE_PRESOLVED
2564 * - \ref SCIP_STAGE_SOLVING
2565 */
2566SCIP_EXPORT
2568 SCIP* scip, /**< SCIP data structure */
2569 SCIP_VAR* var, /**< binary variable to fix */
2570 SCIP_Bool fixedval, /**< value to fix binary variable to */
2571 SCIP_PROP* inferprop, /**< propagator that deduced the fixing */
2572 int inferinfo, /**< user information for inference to help resolving the conflict */
2573 SCIP_Bool* infeasible, /**< pointer to store whether the fixing is infeasible */
2574 SCIP_Bool* tightened /**< pointer to store whether the fixing tightened the local bounds, or NULL */
2575 );
2576
2577/** changes global lower bound of variable in preprocessing or in the current node, if the new bound is tighter
2578 * (w.r.t. bound strengthening epsilon) than the current global bound; if possible, adjusts bound to integral value;
2579 * also tightens the local bound, if the global bound is better than the local bound
2580 *
2581 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2582 * SCIPgetVars()) gets re-sorted.
2583 *
2584 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2585 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2586 *
2587 * @pre This method can be called if @p scip is in one of the following stages:
2588 * - \ref SCIP_STAGE_PROBLEM
2589 * - \ref SCIP_STAGE_TRANSFORMING
2590 * - \ref SCIP_STAGE_PRESOLVING
2591 * - \ref SCIP_STAGE_SOLVING
2592 *
2593 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2594 */
2595SCIP_EXPORT
2597 SCIP* scip, /**< SCIP data structure */
2598 SCIP_VAR* var, /**< variable to change the bound for */
2599 SCIP_Real newbound, /**< new value for bound */
2600 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2601 SCIP_Bool* infeasible, /**< pointer to store whether the new domain is empty */
2602 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2603 );
2604
2605/** changes global upper bound of variable in preprocessing or in the current node, if the new bound is tighter
2606 * (w.r.t. bound strengthening epsilon) than the current global bound; if possible, adjusts bound to integral value;
2607 * also tightens the local bound, if the global bound is better than the local bound
2608 *
2609 * @warning If SCIP is in presolving stage, it can happen that the internal variable array (which can be accessed via
2610 * SCIPgetVars()) gets re-sorted.
2611 *
2612 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2613 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2614 *
2615 * @pre This method can be called if @p scip is in one of the following stages:
2616 * - \ref SCIP_STAGE_PROBLEM
2617 * - \ref SCIP_STAGE_TRANSFORMING
2618 * - \ref SCIP_STAGE_PRESOLVING
2619 * - \ref SCIP_STAGE_SOLVING
2620 *
2621 * @note During presolving, an integer variable whose bound changes to {0,1} is upgraded to a binary variable.
2622 */
2623SCIP_EXPORT
2625 SCIP* scip, /**< SCIP data structure */
2626 SCIP_VAR* var, /**< variable to change the bound for */
2627 SCIP_Real newbound, /**< new value for bound */
2628 SCIP_Bool force, /**< force tightening even if below bound strengthening tolerance */
2629 SCIP_Bool* infeasible, /**< pointer to store whether the new domain is empty */
2630 SCIP_Bool* tightened /**< pointer to store whether the bound was tightened, or NULL */
2631 );
2632
2633/** for a multi-aggregated variable, returns the global lower bound computed by adding the global bounds from all aggregation variables
2634 *
2635 * 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
2636 * calling this function for a non-multi-aggregated variable results in a call to SCIPvarGetLbGlobal.
2637 *
2638 * @return the global lower bound computed by adding the global bounds from all aggregation variables
2639 */
2640SCIP_EXPORT
2642 SCIP* scip, /**< SCIP data structure */
2643 SCIP_VAR* var /**< variable to compute the bound for */
2644 );
2645
2646/** for a multi-aggregated variable, returns the global upper bound computed by adding the global bounds from all aggregation variables
2647 *
2648 * This global bound may be tighter than the one given by SCIPvarGetUbGlobal, since the latter is not updated if bounds of aggregation variables are changing
2649 * calling this function for a non-multi-aggregated variable results in a call to SCIPvarGetUbGlobal.
2650 *
2651 * @return the global upper bound computed by adding the global bounds from all aggregation variables
2652 */
2653SCIP_EXPORT
2655 SCIP* scip, /**< SCIP data structure */
2656 SCIP_VAR* var /**< variable to compute the bound for */
2657 );
2658
2659/** for a multi-aggregated variable, returns the local lower bound computed by adding the local bounds from all aggregation variables
2660 *
2661 * This local bound may be tighter than the one given by SCIPvarGetLbLocal, since the latter is not updated if bounds of aggregation variables are changing
2662 * calling this function for a non-multi-aggregated variable results in a call to SCIPvarGetLbLocal.
2663 *
2664 * @return the local lower bound computed by adding the global bounds from all aggregation variables
2665 */
2666SCIP_EXPORT
2668 SCIP* scip, /**< SCIP data structure */
2669 SCIP_VAR* var /**< variable to compute the bound for */
2670 );
2671
2672/** for a multi-aggregated variable, returns the local lower bound computed by adding the local bounds from all aggregation variables
2673 *
2674 * This local bound may be tighter than the one given by SCIPvarGetLbLocal, since the latter is not updated if bounds of aggregation variables are changing
2675 * calling this function for a non-multi-aggregated variable results in a call to SCIPvarGetLbLocal.
2676 *
2677 * @return the local lower bound computed by adding the global bounds from all aggregation variables
2678 */
2679SCIP_EXPORT
2681 SCIP* scip, /**< SCIP data structure */
2682 SCIP_VAR* var, /**< variable to compute the bound for */
2683 SCIP_RATIONAL* result /**< rational to store the resulting bound */
2684 );
2685
2686/** for a multi-aggregated variable, returns the local upper bound computed by adding the local bounds from all aggregation variables
2687 *
2688 * This local bound may be tighter than the one given by SCIPvarGetUbLocal, since the latter is not updated if bounds of aggregation variables are changing
2689 * calling this function for a non-multi-aggregated variable results in a call to SCIPvarGetUbLocal.
2690 *
2691 * @return the local upper bound computed by adding the global bounds from all aggregation variables
2692 */
2693SCIP_EXPORT
2695 SCIP* scip, /**< SCIP data structure */
2696 SCIP_VAR* var /**< variable to compute the bound for */
2697 );
2698
2699/** for a multi-aggregated variable, returns the local upper bound computed by adding the local bounds from all aggregation variables
2700 *
2701 * This local bound may be tighter than the one given by SCIPvarGetUbLocal, since the latter is not updated if bounds of aggregation variables are changing
2702 * calling this function for a non-multi-aggregated variable results in a call to SCIPvarGetUbLocal.
2703 *
2704 * @return the local upper bound computed by adding the global bounds from all aggregation variables
2705 */
2706SCIP_EXPORT
2708 SCIP* scip, /**< SCIP data structure */
2709 SCIP_VAR* var, /**< variable to compute the bound for */
2710 SCIP_RATIONAL* result /**< rational to store the resulting bound */
2711 );
2712
2713/** for a multi-aggregated variable, gives the global lower bound computed by adding the global bounds from all
2714 * aggregation variables, this global bound may be tighter than the one given by SCIPvarGetLbGlobal, since the latter is
2715 * not updated if bounds of aggregation variables are changing
2716 *
2717 * calling this function for a non-multi-aggregated variable is not allowed
2718 */
2719SCIP_EXPORT
2721 SCIP* scip, /**< SCIP data structure */
2722 SCIP_VAR* var /**< variable to compute the bound for */
2723 );
2724
2725/** for a multi-aggregated variable, gives the global upper bound computed by adding the global bounds from all
2726 * aggregation variables, this upper bound may be tighter than the one given by SCIPvarGetUbGlobal, since the latter is
2727 * not updated if bounds of aggregation variables are changing
2728 *
2729 * calling this function for a non-multi-aggregated variable is not allowed
2730 */
2731SCIP_EXPORT
2733 SCIP* scip, /**< SCIP data structure */
2734 SCIP_VAR* var /**< variable to compute the bound for */
2735 );
2736
2737/** for a multi-aggregated variable, gives the local lower bound computed by adding the local bounds from all
2738 * aggregation variables, this lower bound may be tighter than the one given by SCIPvarGetLbLocal, since the latter is
2739 * not updated if bounds of aggregation variables are changing
2740 *
2741 * calling this function for a non-multi-aggregated variable is not allowed
2742 */
2743SCIP_EXPORT
2745 SCIP* scip, /**< SCIP data structure */
2746 SCIP_VAR* var /**< variable to compute the bound for */
2747 );
2748
2749/** for a multi-aggregated variable, gives the local upper bound computed by adding the local bounds from all
2750 * aggregation variables, this upper bound may be tighter than the one given by SCIPvarGetUbLocal, since the latter is
2751 * not updated if bounds of aggregation variables are changing
2752 *
2753 * calling this function for a non-multi-aggregated variable is not allowed
2754 */
2755SCIP_EXPORT
2757 SCIP* scip, /**< SCIP data structure */
2758 SCIP_VAR* var /**< variable to compute the bound for */
2759 );
2760
2761#ifdef NDEBUG
2762
2763/* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and
2764 * speed up the algorithms.
2765 */
2766
2767#define SCIPcomputeVarLbGlobal(scip, var) (SCIPvarGetStatus(var) == SCIP_VARSTATUS_MULTAGGR ? SCIPgetVarMultaggrLbGlobal(scip, var) : SCIPvarGetLbGlobal(var))
2768#define SCIPcomputeVarUbGlobal(scip, var) (SCIPvarGetStatus(var) == SCIP_VARSTATUS_MULTAGGR ? SCIPgetVarMultaggrUbGlobal(scip, var) : SCIPvarGetUbGlobal(var))
2769#define SCIPcomputeVarLbLocal(scip, var) (SCIPvarGetStatus(var) == SCIP_VARSTATUS_MULTAGGR ? SCIPgetVarMultaggrLbLocal(scip, var) : SCIPvarGetLbLocal(var))
2770#define SCIPcomputeVarUbLocal(scip, var) (SCIPvarGetStatus(var) == SCIP_VARSTATUS_MULTAGGR ? SCIPgetVarMultaggrUbLocal(scip, var) : SCIPvarGetUbLocal(var))
2771
2772#endif
2773
2774/** returns solution value and index of variable lower bound that is closest to the variable's value in the given primal
2775 * solution or current LP solution if no primal solution is given; returns an index of -1 if no variable lower bound is
2776 * available
2777 *
2778 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2779 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2780 *
2781 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_SOLVING
2782 */
2783SCIP_EXPORT
2785 SCIP* scip, /**< SCIP data structure */
2786 SCIP_VAR* var, /**< active problem variable */
2787 SCIP_SOL* sol, /**< primal solution, or NULL for LP solution */
2788 SCIP_Real* closestvlb, /**< pointer to store the value of the closest variable lower bound */
2789 int* closestvlbidx /**< pointer to store the index of the closest variable lower bound */
2790 );
2791
2792/** returns solution value and index of variable upper bound that is closest to the variable's value in the given primal solution;
2793 * or current LP solution if no primal solution is given; returns an index of -1 if no variable upper bound is available
2794 *
2795 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2796 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2797 *
2798 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_SOLVING
2799 */
2800SCIP_EXPORT
2802 SCIP* scip, /**< SCIP data structure */
2803 SCIP_VAR* var, /**< active problem variable */
2804 SCIP_SOL* sol, /**< primal solution, or NULL for LP solution */
2805 SCIP_Real* closestvub, /**< pointer to store the value of the closest variable lower bound */
2806 int* closestvubidx /**< pointer to store the index of the closest variable lower bound */
2807 );
2808
2809/** informs variable x about a globally valid variable lower bound x >= b*z + d with integer variable z;
2810 * if z is binary, the corresponding valid implication for z is also added;
2811 * if z is non-continuous and 1/b not too small, the corresponding valid upper/lower bound
2812 * z <= (x-d)/b or z >= (x-d)/b (depending on the sign of of b) is added, too;
2813 * improves the global bounds of the variable and the vlb variable if possible
2814 *
2815 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2816 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2817 *
2818 * @pre This method can be called if @p scip is in one of the following stages:
2819 * - \ref SCIP_STAGE_PRESOLVING
2820 * - \ref SCIP_STAGE_PRESOLVED
2821 * - \ref SCIP_STAGE_SOLVING
2822 */
2823SCIP_EXPORT
2825 SCIP* scip, /**< SCIP data structure */
2826 SCIP_VAR* var, /**< problem variable */
2827 SCIP_VAR* vlbvar, /**< variable z in x >= b*z + d */
2828 SCIP_Real vlbcoef, /**< coefficient b in x >= b*z + d */
2829 SCIP_Real vlbconstant, /**< constant d in x >= b*z + d */
2830 SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
2831 int* nbdchgs /**< pointer to store the number of performed bound changes, or NULL */
2832 );
2833
2834
2835/** informs variable x about a globally valid variable upper bound x <= b*z + d with integer variable z;
2836 * if z is binary, the corresponding valid implication for z is also added;
2837 * if z is non-continuous and 1/b not too small, the corresponding valid lower/upper bound
2838 * z >= (x-d)/b or z <= (x-d)/b (depending on the sign of of b) is added, too;
2839 * improves the global bounds of the variable and the vlb variable if possible
2840 *
2841 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2842 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2843 *
2844 * @pre This method can be called if @p scip is in one of the following stages:
2845 * - \ref SCIP_STAGE_PRESOLVING
2846 * - \ref SCIP_STAGE_PRESOLVED
2847 * - \ref SCIP_STAGE_SOLVING
2848 */
2849SCIP_EXPORT
2851 SCIP* scip, /**< SCIP data structure */
2852 SCIP_VAR* var, /**< problem variable */
2853 SCIP_VAR* vubvar, /**< variable z in x <= b*z + d */
2854 SCIP_Real vubcoef, /**< coefficient b in x <= b*z + d */
2855 SCIP_Real vubconstant, /**< constant d in x <= b*z + d */
2856 SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
2857 int* nbdchgs /**< pointer to store the number of performed bound changes, or NULL */
2858 );
2859
2860/** informs binary variable x about a globally valid implication: x == 0 or x == 1 ==> y <= b or y >= b;
2861 * also adds the corresponding implication or variable bound to the implied variable;
2862 * if the implication is conflicting, the variable is fixed to the opposite value;
2863 * if the variable is already fixed to the given value, the implication is performed immediately;
2864 * if the implication is redundant with respect to the variables' global bounds, it is ignored
2865 *
2866 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2867 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2868 *
2869 * @pre This method can be called if @p scip is in one of the following stages:
2870 * - \ref SCIP_STAGE_TRANSFORMED
2871 * - \ref SCIP_STAGE_PRESOLVING
2872 * - \ref SCIP_STAGE_PRESOLVED
2873 * - \ref SCIP_STAGE_SOLVING
2874 */
2875SCIP_EXPORT
2877 SCIP* scip, /**< SCIP data structure */
2878 SCIP_VAR* var, /**< problem variable */
2879 SCIP_Bool varfixing, /**< FALSE if y should be added in implications for x == 0, TRUE for x == 1 */
2880 SCIP_VAR* implvar, /**< variable y in implication y <= b or y >= b */
2881 SCIP_BOUNDTYPE impltype, /**< type of implication y <= b (SCIP_BOUNDTYPE_UPPER)
2882 * or y >= b (SCIP_BOUNDTYPE_LOWER) */
2883 SCIP_Real implbound, /**< bound b in implication y <= b or y >= b */
2884 SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
2885 int* nbdchgs /**< pointer to store the number of performed bound changes, or NULL */
2886 );
2887
2888/** adds a clique information to SCIP, stating that at most one of the given binary variables can be set to 1;
2889 * if a variable appears twice in the same clique, the corresponding implications are performed
2890 *
2891 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2892 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2893 *
2894 * @pre This method can be called if @p scip is in one of the following stages:
2895 * - \ref SCIP_STAGE_TRANSFORMED
2896 * - \ref SCIP_STAGE_PRESOLVING
2897 * - \ref SCIP_STAGE_PRESOLVED
2898 * - \ref SCIP_STAGE_SOLVING
2899 */
2900SCIP_EXPORT
2902 SCIP* scip, /**< SCIP data structure */
2903 SCIP_VAR** vars, /**< binary variables in the clique from which at most one can be set to 1 */
2904 SCIP_Bool* values, /**< values of the variables in the clique; NULL to use TRUE for all vars */
2905 int nvars, /**< number of variables in the clique */
2906 SCIP_Bool isequation, /**< is the clique an equation or an inequality? */
2907 SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
2908 int* nbdchgs /**< pointer to store the number of performed bound changes, or NULL */
2909 );
2910
2911/** calculates a partition of the given set of binary variables into cliques; takes into account independent clique components
2912 *
2913 * The algorithm performs the following steps:
2914 * - recomputes connected components of the clique table, if necessary
2915 * - computes a clique partition for every connected component greedily.
2916 * - relabels the resulting clique partition such that it satisfies the description below
2917 *
2918 * afterwards the output array contains one value for each variable, such that two variables got the same value iff they
2919 * were assigned to the same clique;
2920 * the first variable is always assigned to clique 0, and a variable can only be assigned to clique i if at least one of
2921 * the preceding variables was assigned to clique i-1;
2922 * for each clique at most 1 variables can be set to TRUE in a feasible solution;
2923 *
2924 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2925 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2926 *
2927 * @pre This method can be called if @p scip is in one of the following stages:
2928 * - \ref SCIP_STAGE_INITPRESOLVE
2929 * - \ref SCIP_STAGE_PRESOLVING
2930 * - \ref SCIP_STAGE_EXITPRESOLVE
2931 * - \ref SCIP_STAGE_PRESOLVED
2932 * - \ref SCIP_STAGE_SOLVING
2933 */
2934SCIP_EXPORT
2936 SCIP* scip, /**< SCIP data structure */
2937 SCIP_VAR** vars, /**< binary variables in the clique from which at most one can be set to 1 */
2938 int nvars, /**< number of variables in the clique */
2939 int** probtoidxmap, /**< cleared memory array with default values -1 */
2940 int* probtoidxmapsize, /**< returns size of probtoidxmap */
2941 int* cliquepartition, /**< array of length nvars to store the clique partition */
2942 int* ncliques /**< pointer to store the number of cliques actually contained in the partition */
2943 );
2944
2945/** calculates a partition of the given set of binary variables into negated cliques;
2946 * afterwards the output array contains one value for each variable, such that two variables got the same value iff they
2947 * were assigned to the same negated clique;
2948 * the first variable is always assigned to clique 0 and a variable can only be assigned to clique i if at least one of
2949 * the preceding variables was assigned to clique i-1;
2950 * for each clique with n_c variables at least n_c-1 variables can be set to TRUE in a feasible solution;
2951 *
2952 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
2953 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
2954 *
2955 * @pre This method can be called if @p scip is in one of the following stages:
2956 * - \ref SCIP_STAGE_INITPRESOLVE
2957 * - \ref SCIP_STAGE_PRESOLVING
2958 * - \ref SCIP_STAGE_EXITPRESOLVE
2959 * - \ref SCIP_STAGE_PRESOLVED
2960 * - \ref SCIP_STAGE_SOLVING
2961 */
2962SCIP_EXPORT
2964 SCIP* scip, /**< SCIP data structure */
2965 SCIP_VAR** vars, /**< binary variables in the clique from which at most one can be set to 1 */
2966 int nvars, /**< number of variables in the clique */
2967 int** probtoidxmap, /**< cleared memory array with default values -1 */
2968 int* probtoidxmapsize, /**< returns size of probtoidxmap */
2969 int* cliquepartition, /**< array of length nvars to store the clique partition */
2970 int* ncliques /**< pointer to store the number of cliques actually contained in the partition */
2971 );
2972
2973/** force SCIP to clean up all cliques; cliques do not get automatically cleaned up after presolving. Use
2974 * this method to prevent inactive variables in cliques when retrieved via SCIPgetCliques()
2975 *
2976 * @return SCIP_OKAY if everything worked, otherwise a suitable error code is passed
2977 *
2978 * @pre This method can be called if @p scip is in one of the following stages:
2979 * - \ref SCIP_STAGE_TRANSFORMED
2980 * - \ref SCIP_STAGE_INITPRESOLVE
2981 * - \ref SCIP_STAGE_PRESOLVING
2982 * - \ref SCIP_STAGE_EXITPRESOLVE
2983 * - \ref SCIP_STAGE_PRESOLVED
2984 * - \ref SCIP_STAGE_INITSOLVE
2985 * - \ref SCIP_STAGE_SOLVING
2986 * - \ref SCIP_STAGE_SOLVED
2987 * - \ref SCIP_STAGE_EXITSOLVE
2988 */
2989SCIP_EXPORT
2991 SCIP* scip, /**< SCIP data structure */
2992 SCIP_Bool* infeasible /**< pointer to store if cleanup detected infeasibility */
2993 );
2994
2995/** gets the number of cliques in the clique table
2996 *
2997 * @return number of cliques in the clique table
2998 *
2999 * @pre This method can be called if @p scip is in one of the following stages:
3000 * - \ref SCIP_STAGE_TRANSFORMED
3001 * - \ref SCIP_STAGE_INITPRESOLVE
3002 * - \ref SCIP_STAGE_PRESOLVING
3003 * - \ref SCIP_STAGE_EXITPRESOLVE
3004 * - \ref SCIP_STAGE_PRESOLVED
3005 * - \ref SCIP_STAGE_INITSOLVE
3006 * - \ref SCIP_STAGE_SOLVING
3007 * - \ref SCIP_STAGE_SOLVED
3008 * - \ref SCIP_STAGE_EXITSOLVE
3009 */
3010SCIP_EXPORT
3011int SCIPgetNCliques(
3012 SCIP* scip /**< SCIP data structure */
3013 );
3014
3015/** gets the number of cliques created so far by the cliquetable
3016 *
3017 * @return number of cliques created so far by the cliquetable
3018 *
3019 * @pre This method can be called if @p scip is in one of the following stages:
3020 * - \ref SCIP_STAGE_TRANSFORMED
3021 * - \ref SCIP_STAGE_INITPRESOLVE
3022 * - \ref SCIP_STAGE_PRESOLVING
3023 * - \ref SCIP_STAGE_EXITPRESOLVE
3024 * - \ref SCIP_STAGE_PRESOLVED
3025 * - \ref SCIP_STAGE_INITSOLVE
3026 * - \ref SCIP_STAGE_SOLVING
3027 * - \ref SCIP_STAGE_SOLVED
3028 * - \ref SCIP_STAGE_EXITSOLVE
3029 */
3030SCIP_EXPORT
3032 SCIP* scip /**< SCIP data structure */
3033 );
3034
3035/** gets the array of cliques in the clique table
3036 *
3037 * @return array of cliques in the clique table
3038 *
3039 * @pre This method can be called if @p scip is in one of the following stages:
3040 * - \ref SCIP_STAGE_TRANSFORMED
3041 * - \ref SCIP_STAGE_INITPRESOLVE
3042 * - \ref SCIP_STAGE_PRESOLVING
3043 * - \ref SCIP_STAGE_EXITPRESOLVE
3044 * - \ref SCIP_STAGE_PRESOLVED
3045 * - \ref SCIP_STAGE_INITSOLVE
3046 * - \ref SCIP_STAGE_SOLVING
3047 * - \ref SCIP_STAGE_SOLVED
3048 * - \ref SCIP_STAGE_EXITSOLVE
3049 */
3050SCIP_EXPORT
3052 SCIP* scip /**< SCIP data structure */
3053 );
3054
3055/** returns whether there is a clique that contains both given variable/value pairs;
3056 * the variables must be active binary variables;
3057 * if regardimplics is FALSE, only the cliques in the clique table are looked at;
3058 * if regardimplics is TRUE, both the cliques and the implications of the implication graph are regarded
3059 *
3060 * @return TRUE, if there is a clique that contains both variable/clique pairs; FALSE, otherwise
3061 *
3062 * @pre This method can be called if @p scip is in one of the following stages:
3063 * - \ref SCIP_STAGE_TRANSFORMED
3064 * - \ref SCIP_STAGE_INITPRESOLVE
3065 * - \ref SCIP_STAGE_PRESOLVING
3066 * - \ref SCIP_STAGE_EXITPRESOLVE
3067 * - \ref SCIP_STAGE_PRESOLVED
3068 * - \ref SCIP_STAGE_INITSOLVE
3069 * - \ref SCIP_STAGE_SOLVING
3070 * - \ref SCIP_STAGE_SOLVED
3071 * - \ref SCIP_STAGE_EXITSOLVE
3072 *
3073 * @note a variable with it's negated variable are NOT! in a clique
3074 * @note a variable with itself are in a clique
3075 */
3076SCIP_EXPORT
3078 SCIP* scip, /**< SCIP data structure */
3079 SCIP_VAR* var1, /**< first variable */
3080 SCIP_Bool value1, /**< value of first variable */
3081 SCIP_VAR* var2, /**< second variable */
3082 SCIP_Bool value2, /**< value of second variable */
3083 SCIP_Bool regardimplics /**< should the implication graph also be searched for a clique? */
3084 );
3085
3086/** writes the clique graph to a gml file
3087 *
3088 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3089 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3090 *
3091 * @pre This method can be called if @p scip is in one of the following stages:
3092 * - \ref SCIP_STAGE_TRANSFORMED
3093 * - \ref SCIP_STAGE_INITPRESOLVE
3094 * - \ref SCIP_STAGE_PRESOLVING
3095 * - \ref SCIP_STAGE_EXITPRESOLVE
3096 * - \ref SCIP_STAGE_PRESOLVED
3097 * - \ref SCIP_STAGE_INITSOLVE
3098 * - \ref SCIP_STAGE_SOLVING
3099 * - \ref SCIP_STAGE_SOLVED
3100 * - \ref SCIP_STAGE_EXITSOLVE
3101 *
3102 * @note there can be duplicated arcs in the output file
3103 *
3104 * If @p writenodeweights is true, only nodes corresponding to variables that have a fractional value and only edges
3105 * between such nodes are written.
3106 */
3107SCIP_EXPORT
3109 SCIP* scip, /**< SCIP data structure */
3110 const char* fname, /**< name of file */
3111 SCIP_Bool writenodeweights /**< should we write weights of nodes? */
3112 );
3113
3114/** Removes (irrelevant) variable from all its global structures, i.e. cliques, implications and variable bounds.
3115 * This is an advanced method which should be used with care.
3116 *
3117 * @return SCIP_OKAY if everything worked, otherwise a suitable error code is passed
3118 *
3119 * @pre This method can be called if @p scip is in one of the following stages:
3120 * - \ref SCIP_STAGE_TRANSFORMED
3121 * - \ref SCIP_STAGE_INITPRESOLVE
3122 * - \ref SCIP_STAGE_PRESOLVING
3123 * - \ref SCIP_STAGE_EXITPRESOLVE
3124 * - \ref SCIP_STAGE_PRESOLVED
3125 * - \ref SCIP_STAGE_INITSOLVE
3126 * - \ref SCIP_STAGE_SOLVING
3127 * - \ref SCIP_STAGE_SOLVED
3128 * - \ref SCIP_STAGE_EXITSOLVE
3129 */
3130SCIP_EXPORT
3132 SCIP* scip, /**< SCIP data structure */
3133 SCIP_VAR* var /**< variable to remove from global structures */
3134 );
3135
3136/** sets the branch factor of the variable; this value can be used in the branching methods to scale the score
3137 * values of the variables; higher factor leads to a higher probability that this variable is chosen for branching
3138 *
3139 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3140 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3141 *
3142 * @pre This method can be called if @p scip is in one of the following stages:
3143 * - \ref SCIP_STAGE_PROBLEM
3144 * - \ref SCIP_STAGE_TRANSFORMING
3145 * - \ref SCIP_STAGE_TRANSFORMED
3146 * - \ref SCIP_STAGE_INITPRESOLVE
3147 * - \ref SCIP_STAGE_PRESOLVING
3148 * - \ref SCIP_STAGE_EXITPRESOLVE
3149 * - \ref SCIP_STAGE_PRESOLVED
3150 * - \ref SCIP_STAGE_SOLVING
3151 */
3152SCIP_EXPORT
3154 SCIP* scip, /**< SCIP data structure */
3155 SCIP_VAR* var, /**< problem variable */
3156 SCIP_Real branchfactor /**< factor to weigh variable's branching score with */
3157 );
3158
3159/** scales the branch factor of the variable with the given value
3160 *
3161 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3162 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3163 *
3164 * @pre This method can be called if @p scip is in one of the following stages:
3165 * - \ref SCIP_STAGE_PROBLEM
3166 * - \ref SCIP_STAGE_TRANSFORMING
3167 * - \ref SCIP_STAGE_TRANSFORMED
3168 * - \ref SCIP_STAGE_INITPRESOLVE
3169 * - \ref SCIP_STAGE_PRESOLVING
3170 * - \ref SCIP_STAGE_EXITPRESOLVE
3171 * - \ref SCIP_STAGE_PRESOLVED
3172 * - \ref SCIP_STAGE_SOLVING
3173 */
3174SCIP_EXPORT
3176 SCIP* scip, /**< SCIP data structure */
3177 SCIP_VAR* var, /**< problem variable */
3178 SCIP_Real scale /**< factor to scale variable's branching factor with */
3179 );
3180
3181/** adds the given value to the branch factor of the variable
3182 *
3183 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3184 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3185 *
3186 * @pre This method can be called if @p scip is in one of the following stages:
3187 * - \ref SCIP_STAGE_PROBLEM
3188 * - \ref SCIP_STAGE_TRANSFORMING
3189 * - \ref SCIP_STAGE_TRANSFORMED
3190 * - \ref SCIP_STAGE_INITPRESOLVE
3191 * - \ref SCIP_STAGE_PRESOLVING
3192 * - \ref SCIP_STAGE_EXITPRESOLVE
3193 * - \ref SCIP_STAGE_PRESOLVED
3194 * - \ref SCIP_STAGE_SOLVING
3195 */
3196SCIP_EXPORT
3198 SCIP* scip, /**< SCIP data structure */
3199 SCIP_VAR* var, /**< problem variable */
3200 SCIP_Real addfactor /**< value to add to the branch factor of the variable */
3201 );
3202
3203/** sets the branch priority of the variable; variables with higher branch priority are always preferred to variables
3204 * with lower priority in selection of branching variable
3205 *
3206 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3207 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3208 *
3209 * @pre This method can be called if @p scip is in one of the following stages:
3210 * - \ref SCIP_STAGE_PROBLEM
3211 * - \ref SCIP_STAGE_TRANSFORMING
3212 * - \ref SCIP_STAGE_TRANSFORMED
3213 * - \ref SCIP_STAGE_INITPRESOLVE
3214 * - \ref SCIP_STAGE_PRESOLVING
3215 * - \ref SCIP_STAGE_EXITPRESOLVE
3216 * - \ref SCIP_STAGE_PRESOLVED
3217 * - \ref SCIP_STAGE_SOLVING
3218 *
3219 * @note the default branching priority is 0
3220 */
3221SCIP_EXPORT
3223 SCIP* scip, /**< SCIP data structure */
3224 SCIP_VAR* var, /**< problem variable */
3225 int branchpriority /**< branch priority of the variable */
3226 );
3227
3228/** changes the branch priority of the variable to the given value, if it is larger than the current priority
3229 *
3230 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3231 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3232 *
3233 * @pre This method can be called if @p scip is in one of the following stages:
3234 * - \ref SCIP_STAGE_PROBLEM
3235 * - \ref SCIP_STAGE_TRANSFORMING
3236 * - \ref SCIP_STAGE_TRANSFORMED
3237 * - \ref SCIP_STAGE_INITPRESOLVE
3238 * - \ref SCIP_STAGE_PRESOLVING
3239 * - \ref SCIP_STAGE_EXITPRESOLVE
3240 * - \ref SCIP_STAGE_PRESOLVED
3241 * - \ref SCIP_STAGE_SOLVING
3242 */
3243SCIP_EXPORT
3245 SCIP* scip, /**< SCIP data structure */
3246 SCIP_VAR* var, /**< problem variable */
3247 int branchpriority /**< new branch priority of the variable, if it is larger than current priority */
3248 );
3249
3250/** adds the given value to the branch priority of the variable
3251 *
3252 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3253 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3254 *
3255 * @pre This method can be called if @p scip is in one of the following stages:
3256 * - \ref SCIP_STAGE_PROBLEM
3257 * - \ref SCIP_STAGE_TRANSFORMING
3258 * - \ref SCIP_STAGE_TRANSFORMED
3259 * - \ref SCIP_STAGE_INITPRESOLVE
3260 * - \ref SCIP_STAGE_PRESOLVING
3261 * - \ref SCIP_STAGE_EXITPRESOLVE
3262 * - \ref SCIP_STAGE_PRESOLVED
3263 * - \ref SCIP_STAGE_SOLVING
3264 */
3265SCIP_EXPORT
3267 SCIP* scip, /**< SCIP data structure */
3268 SCIP_VAR* var, /**< problem variable */
3269 int addpriority /**< value to add to the branch priority of the variable */
3270 );
3271
3272/** sets the branch direction of the variable (-1: prefer downwards branch, 0: automatic selection, +1: prefer upwards
3273 * branch)
3274 *
3275 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3276 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3277 *
3278 * @pre This method can be called if @p scip is in one of the following stages:
3279 * - \ref SCIP_STAGE_PROBLEM
3280 * - \ref SCIP_STAGE_TRANSFORMING
3281 * - \ref SCIP_STAGE_TRANSFORMED
3282 * - \ref SCIP_STAGE_INITPRESOLVE
3283 * - \ref SCIP_STAGE_PRESOLVING
3284 * - \ref SCIP_STAGE_EXITPRESOLVE
3285 * - \ref SCIP_STAGE_PRESOLVED
3286 * - \ref SCIP_STAGE_SOLVING
3287 */
3288SCIP_EXPORT
3290 SCIP* scip, /**< SCIP data structure */
3291 SCIP_VAR* var, /**< problem variable */
3292 SCIP_BRANCHDIR branchdirection /**< preferred branch direction of the variable (downwards, upwards, auto) */
3293 );
3294
3295/** changes type of variable in the problem;
3296 *
3297 * @warning This type change might change the variable array returned from SCIPgetVars() and SCIPgetVarsData();
3298 *
3299 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3300 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3301 *
3302 * @pre This method can be called if @p scip is in one of the following stages:
3303 * - \ref SCIP_STAGE_PROBLEM
3304 * - \ref SCIP_STAGE_TRANSFORMING
3305 * - \ref SCIP_STAGE_PRESOLVING
3306 *
3307 * @note If SCIP is already beyond the SCIP_STAGE_PROBLEM and a original variable is passed, the variable type of the
3308 * corresponding transformed variable is changed; the type of the original variable does not change
3309 *
3310 * @note If the type changes from a continuous variable to a non-continuous variable the bounds of the variable get
3311 * adjusted w.r.t. to integrality information
3312 */
3313SCIP_EXPORT
3315 SCIP* scip, /**< SCIP data structure */
3316 SCIP_VAR* var, /**< variable to change the type for */
3317 SCIP_VARTYPE vartype, /**< new type of variable */
3318 SCIP_Bool* infeasible /**< pointer to store whether an infeasibility was detected (, due to
3319 * integrality condition of the new variable type) */
3320 );
3321
3322/** changes implied integral type of variable in the problem
3323 *
3324 * @warning This type change might change the variable array returned from SCIPgetVars() and SCIPgetVarsData();
3325 *
3326 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3327 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3328 *
3329 * @pre This method can be called if @p scip is in one of the following stages:
3330 * - \ref SCIP_STAGE_PROBLEM
3331 * - \ref SCIP_STAGE_TRANSFORMING
3332 * - \ref SCIP_STAGE_PRESOLVING
3333 *
3334 * @note If SCIP is already beyond the SCIP_STAGE_PROBLEM and a original variable is passed, the implied integral type of the
3335 * corresponding transformed variable is changed; the type of the original variable does not change
3336 *
3337 * @note If the implied integral type is adjusted to weak or strong for a continuous variable, the bounds of the variable get
3338 * adjusted w.r.t. to integrality information
3339 */
3340SCIP_EXPORT
3342 SCIP* scip, /**< SCIP data structure */
3343 SCIP_VAR* var, /**< variable to change the type for */
3344 SCIP_IMPLINTTYPE impltype, /**< New implied integral type of the variable */
3345 SCIP_Bool* infeasible /**< pointer to store whether an infeasibility was detected (due to
3346 * integrality condition for the new variable type) */
3347 );
3348
3349/** in problem creation and solving stage, both bounds of the variable are set to the given value;
3350 * in presolving stage, the variable is converted into a fixed variable, and bounds are changed respectively;
3351 * conversion into a fixed variable changes the vars array returned from SCIPgetVars() and SCIPgetVarsData(),
3352 * and also renders arrays returned from the SCIPvarGetImpl...() methods invalid
3353 *
3354 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3355 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3356 *
3357 * @pre This method can be called if @p scip is in one of the following stages:
3358 * - \ref SCIP_STAGE_PROBLEM
3359 * - \ref SCIP_STAGE_PRESOLVING
3360 * - \ref SCIP_STAGE_SOLVING
3361 */
3362SCIP_EXPORT
3364 SCIP* scip, /**< SCIP data structure */
3365 SCIP_VAR* var, /**< variable to fix */
3366 SCIP_Real fixedval, /**< value to fix variable to */
3367 SCIP_Bool* infeasible, /**< pointer to store whether the fixing is infeasible */
3368 SCIP_Bool* fixed /**< pointer to store whether the fixing was performed (variable was unfixed) */
3369 );
3370
3371/** in problem creation and solving stage, both bounds of the variable are set to the given value;
3372 * in presolving stage, the variable is converted into a fixed variable, and bounds are changed respectively;
3373 * conversion into a fixed variable changes the vars array returned from SCIPgetVars() and SCIPgetVarsData(),
3374 * and also renders arrays returned from the SCIPvarGetImpl...() methods invalid
3375 *
3376 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3377 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3378 *
3379 * @pre This method can be called if @p scip is in one of the following stages:
3380 * - \ref SCIP_STAGE_PROBLEM
3381 * - \ref SCIP_STAGE_PRESOLVING
3382 * - \ref SCIP_STAGE_SOLVING
3383 */
3384SCIP_EXPORT
3386 SCIP* scip, /**< SCIP data structure */
3387 SCIP_VAR* var, /**< variable to fix */
3388 SCIP_RATIONAL* fixedval, /**< value to fix variable to */
3389 SCIP_Bool* infeasible, /**< pointer to store whether the fixing is infeasible */
3390 SCIP_Bool* fixed /**< pointer to store whether the fixing was performed (variable was unfixed) */
3391 );
3392
3393/** From a given equality a*x + b*y == c, aggregates one of the variables and removes it from the set of
3394 * active problem variables. This changes the vars array returned from SCIPgetVars() and SCIPgetVarsData(),
3395 * and also renders the arrays returned from the SCIPvarGetImpl...() methods for the two variables invalid.
3396 * In the first step, the equality is transformed into an equality with active problem variables
3397 * a'*x' + b'*y' == c'. If x' == y', this leads to the detection of redundancy if a' == -b' and c' == 0,
3398 * of infeasibility, if a' == -b' and c' != 0, or to a variable fixing x' == c'/(a'+b') (and possible
3399 * infeasibility) otherwise.
3400 * In the second step, the variable to be aggregated is chosen among x' and y', prefering a less strict variable
3401 * type as aggregation variable (i.e. continuous variables are preferred over implicit integers, implicit integers
3402 * over integers, and integers over binaries). If none of the variables is continuous, it is tried to find an integer
3403 * aggregation (i.e. integral coefficients a'' and b'', such that a''*x' + b''*y' == c''). This can lead to
3404 * the detection of infeasibility (e.g. if c'' is fractional), or to a rejection of the aggregation (denoted by
3405 * aggregated == FALSE), if the resulting integer coefficients are too large and thus numerically instable.
3406 *
3407 * The output flags have the following meaning:
3408 * - infeasible: the problem is infeasible
3409 * - redundant: the equality can be deleted from the constraint set
3410 * - aggregated: the aggregation was successfully performed (the variables were not aggregated before)
3411 *
3412 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3413 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3414 *
3415 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_PRESOLVING
3416 */
3417SCIP_EXPORT
3419 SCIP* scip, /**< SCIP data structure */
3420 SCIP_VAR* varx, /**< variable x in equality a*x + b*y == c */
3421 SCIP_VAR* vary, /**< variable y in equality a*x + b*y == c */
3422 SCIP_Real scalarx, /**< multiplier a in equality a*x + b*y == c */
3423 SCIP_Real scalary, /**< multiplier b in equality a*x + b*y == c */
3424 SCIP_Real rhs, /**< right hand side c in equality a*x + b*y == c */
3425 SCIP_Bool* infeasible, /**< pointer to store whether the aggregation is infeasible */
3426 SCIP_Bool* redundant, /**< pointer to store whether the equality is (now) redundant */
3427 SCIP_Bool* aggregated /**< pointer to store whether the aggregation was successful */
3428 );
3429
3430/** From a given equality a*x + b*y == c, aggregates one of the variables and removes it from the set of
3431 * active problem variables. This changes the vars array returned from SCIPgetVars() and SCIPgetVarsData(),
3432 * and also renders the arrays returned from the SCIPvarGetImpl...() methods for the two variables invalid.
3433 * In the first step, the equality is transformed into an equality with active problem variables
3434 * a'*x' + b'*y' == c'. If x' == y', this leads to the detection of redundancy if a' == -b' and c' == 0,
3435 * of infeasibility, if a' == -b' and c' != 0, or to a variable fixing x' == c'/(a'+b') (and possible
3436 * infeasibility) otherwise.
3437 * In the second step, the variable to be aggregated is chosen among x' and y', prefering a less strict variable
3438 * type as aggregation variable (i.e. continuous variables are preferred over implicit integers, implicit integers
3439 * over integers, and integers over binaries). If none of the variables is continuous, it is tried to find an integer
3440 * aggregation (i.e. integral coefficients a'' and b'', such that a''*x' + b''*y' == c''). This can lead to
3441 * the detection of infeasibility (e.g. if c'' is fractional), or to a rejection of the aggregation (denoted by
3442 * aggregated == FALSE), if the resulting integer coefficients are too large and thus numerically instable.
3443 *
3444 * The output flags have the following meaning:
3445 * - infeasible: the problem is infeasible
3446 * - redundant: the equality can be deleted from the constraint set
3447 * - aggregated: the aggregation was successfully performed (the variables were not aggregated before)
3448 *
3449 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3450 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3451 *
3452 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_PRESOLVING
3453 */
3454SCIP_EXPORT
3456 SCIP* scip, /**< SCIP data structure */
3457 SCIP_VAR* varx, /**< variable x in equality a*x + b*y == c */
3458 SCIP_VAR* vary, /**< variable y in equality a*x + b*y == c */
3459 SCIP_RATIONAL* scalarx, /**< multiplier a in equality a*x + b*y == c */
3460 SCIP_RATIONAL* scalary, /**< multiplier b in equality a*x + b*y == c */
3461 SCIP_RATIONAL* rhs, /**< right hand side c in equality a*x + b*y == c */
3462 SCIP_Bool* infeasible, /**< pointer to store whether the aggregation is infeasible */
3463 SCIP_Bool* redundant, /**< pointer to store whether the equality is (now) redundant */
3464 SCIP_Bool* aggregated /**< pointer to store whether the aggregation was successful */
3465 );
3466
3467/** converts variable into multi-aggregated variable; this changes the variable array returned from
3468 * SCIPgetVars() and SCIPgetVarsData();
3469 *
3470 * @warning The integrality condition is not checked anymore on the multi-aggregated variable. You must not
3471 * multi-aggregate an integer variable without being sure, that integrality on the aggregation variables
3472 * implies integrality on the aggregated variable.
3473 *
3474 * The output flags have the following meaning:
3475 * - infeasible: the problem is infeasible
3476 * - aggregated: the aggregation was successfully performed (the variables were not aggregated before)
3477 *
3478 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3479 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3480 *
3481 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_PRESOLVING
3482 */
3483SCIP_EXPORT
3485 SCIP* scip, /**< SCIP data structure */
3486 SCIP_VAR* var, /**< variable x to aggregate */
3487 int naggvars, /**< number n of variables in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
3488 SCIP_VAR** aggvars, /**< variables y_i in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
3489 SCIP_Real* scalars, /**< multipliers a_i in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
3490 SCIP_Real constant, /**< constant shift c in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
3491 SCIP_Bool* infeasible, /**< pointer to store whether the aggregation is infeasible */
3492 SCIP_Bool* aggregated /**< pointer to store whether the aggregation was successful */
3493 );
3494
3495/** converts variable into exact multi-aggregated variable; this changes the variable array returned from
3496 * SCIPgetVars() and SCIPgetVarsData();
3497 *
3498 * @warning The integrality condition is not checked anymore on the multi-aggregated variable. You must not
3499 * multi-aggregate an integer variable without being sure, that integrality on the aggregation variables
3500 * implies integrality on the aggregated variable.
3501 *
3502 * The output flags have the following meaning:
3503 * - infeasible: the problem is infeasible
3504 * - aggregated: the aggregation was successfully performed (the variables were not aggregated before)
3505 *
3506 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3507 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3508 *
3509 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_PRESOLVING
3510 */
3511SCIP_EXPORT
3513 SCIP* scip, /**< SCIP data structure */
3514 SCIP_VAR* var, /**< variable x to aggregate */
3515 int naggvars, /**< number n of variables in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
3516 SCIP_VAR** aggvars, /**< variables y_i in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
3517 SCIP_RATIONAL** scalars, /**< multipliers a_i in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
3518 SCIP_RATIONAL* constant, /**< constant shift c in aggregation x = a_1*y_1 + ... + a_n*y_n + c */
3519 SCIP_Bool* infeasible, /**< pointer to store whether the aggregation is infeasible */
3520 SCIP_Bool* aggregated /**< pointer to store whether the aggregation was successful */
3521 );
3522
3523/** returns whether aggregation of variables is not allowed */
3524SCIP_EXPORT
3526 SCIP* scip /**< SCIP data structure */
3527 );
3528
3529/** returns whether multi-aggregation is disabled */
3530SCIP_EXPORT
3532 SCIP* scip /**< SCIP data structure */
3533 );
3534
3535/** returns whether variable is not allowed to be aggregated */
3536SCIP_EXPORT
3538 SCIP* scip, /**< SCIP data structure */
3539 SCIP_VAR* var /**< variable x to aggregate */
3540 );
3541
3542/** returns whether variable is not allowed to be multi-aggregated */
3543SCIP_EXPORT
3545 SCIP* scip, /**< SCIP data structure */
3546 SCIP_VAR* var /**< variable x to aggregate */
3547 );
3548
3549/** checks whether a loose variable can be used in a new aggregation with given coefficient
3550 *
3551 * Checks whether multiplying the bounds on the coefficient with which the variable appears in aggregations
3552 * (SCIPvarGetMinAggrCoef(), SCIPvarGetMaxAggrCoef()) by the given scalar would exceed acceptable values
3553 * (numerics/sumepsilon and 1.0 / numerics/sumepsilon).
3554 *
3555 * @pre This method can only be called if @p scip is in stage \ref SCIP_STAGE_PRESOLVING
3556 */
3557SCIP_EXPORT
3559 SCIP* scip, /**< SCIP data structure */
3560 SCIP_VAR* var, /**< problem variable */
3561 SCIP_Real scalar /**< aggregation scalar */
3562 );
3563
3564/** returns whether strong dual reductions are allowed during propagation and presolving
3565 *
3566 * @note A reduction is called strong dual, if it may discard feasible/optimal solutions, but leaves at least one
3567 * optimal solution intact. Often such reductions are based on analyzing the objective function and variable
3568 * locks.
3569 */
3570SCIP_EXPORT
3572 SCIP* scip /**< SCIP data structure */
3573 );
3574
3575/** returns whether weak dual reductions are allowed during propagation and presolving
3576 *
3577 * @note A reduction is called weak dual, if it may discard feasible solutions, but leaves at all optimal solutions
3578 * intact. Often such reductions are based on analyzing the objective function, reduced costs, and/or dual LPs.
3579 */
3580SCIP_EXPORT
3582 SCIP* scip /**< SCIP data structure */
3583 );
3584
3585/** marks the variable that it must not be aggregated
3586 *
3587 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3588 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3589 *
3590 * @pre This method can be called if @p scip is in one of the following stages:
3591 * - \ref SCIP_STAGE_INIT
3592 * - \ref SCIP_STAGE_PROBLEM
3593 * - \ref SCIP_STAGE_TRANSFORMING
3594 * - \ref SCIP_STAGE_TRANSFORMED
3595 * - \ref SCIP_STAGE_INITPRESOLVE
3596 * - \ref SCIP_STAGE_PRESOLVING
3597 * - \ref SCIP_STAGE_EXITPRESOLVE
3598 *
3599 * @note There exists no "unmark" method since it has to be ensured that if a plugin requires that a variable is not
3600 * aggregated that this is will be the case.
3601 */
3602SCIP_EXPORT
3604 SCIP* scip, /**< SCIP data structure */
3605 SCIP_VAR* var /**< variable to delete */
3606 );
3607
3608/** marks the variable that it must not be multi-aggregated
3609 *
3610 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3611 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3612 *
3613 * @pre This method can be called if @p scip is in one of the following stages:
3614 * - \ref SCIP_STAGE_INIT
3615 * - \ref SCIP_STAGE_PROBLEM
3616 * - \ref SCIP_STAGE_TRANSFORMING
3617 * - \ref SCIP_STAGE_TRANSFORMED
3618 * - \ref SCIP_STAGE_INITPRESOLVE
3619 * - \ref SCIP_STAGE_PRESOLVING
3620 * - \ref SCIP_STAGE_EXITPRESOLVE
3621 *
3622 * @note There exists no "unmark" method since it has to be ensured that if a plugin requires that a variable is not
3623 * multi-aggregated that this is will be the case.
3624 */
3625SCIP_EXPORT
3627 SCIP* scip, /**< SCIP data structure */
3628 SCIP_VAR* var /**< variable to delete */
3629 );
3630
3631/** enables the collection of statistics for a variable
3632 *
3633 * @pre This method can be called if @p scip is in one of the following stages:
3634 * - \ref SCIP_STAGE_PROBLEM
3635 * - \ref SCIP_STAGE_INITPRESOLVE
3636 * - \ref SCIP_STAGE_PRESOLVING
3637 * - \ref SCIP_STAGE_EXITPRESOLVE
3638 * - \ref SCIP_STAGE_SOLVING
3639 * - \ref SCIP_STAGE_SOLVED
3640 */
3641SCIP_EXPORT
3643 SCIP* scip /**< SCIP data structure */
3644 );
3645
3646/** disables the collection of any statistic for a variable
3647 *
3648 * @pre This method can be called if @p scip is in one of the following stages:
3649 * - \ref SCIP_STAGE_PROBLEM
3650 * - \ref SCIP_STAGE_INITPRESOLVE
3651 * - \ref SCIP_STAGE_PRESOLVING
3652 * - \ref SCIP_STAGE_EXITPRESOLVE
3653 * - \ref SCIP_STAGE_SOLVING
3654 * - \ref SCIP_STAGE_SOLVED
3655 */
3656SCIP_EXPORT
3658 SCIP* scip /**< SCIP data structure */
3659 );
3660
3661/** updates the pseudo costs of the given variable and the global pseudo costs after a change of "solvaldelta" in the
3662 * variable's solution value and resulting change of "objdelta" in the in the LP's objective value;
3663 * the update is ignored, if the objective value difference is infinite
3664 *
3665 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3666 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3667 *
3668 * @pre This method can be called if @p scip is in one of the following stages:
3669 * - \ref SCIP_STAGE_SOLVING
3670 * - \ref SCIP_STAGE_SOLVED
3671 */
3672SCIP_EXPORT
3674 SCIP* scip, /**< SCIP data structure */
3675 SCIP_VAR* var, /**< problem variable */
3676 SCIP_Real solvaldelta, /**< difference of variable's new LP value - old LP value */
3677 SCIP_Real objdelta, /**< difference of new LP's objective value - old LP's objective value */
3678 SCIP_Real weight /**< weight in (0,1] of this update in pseudo cost sum */
3679 );
3680
3681/** updates the ancestor pseudo costs of the given variable and the global ancestor pseudo costs after a change of "solvaldelta" in the
3682 * variable's solution value and resulting change of "objdelta" in the in the LP's objective value;
3683 * the update is ignored, if the objective value difference is infinite
3684 *
3685 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
3686 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
3687 *
3688 * @pre This method can be called if @p scip is in one of the following stages:
3689 * - \ref SCIP_STAGE_SOLVING
3690 * - \ref SCIP_STAGE_SOLVED
3691 */
3692SCIP_EXPORT
3694 SCIP* scip, /**< SCIP data structure */
3695 SCIP_VAR* var, /**< problem variable */
3696 SCIP_Real solvaldelta, /**< difference of variable's new LP value - old LP value */
3697 SCIP_Real objdelta, /**< difference of new LP's objective value - old LP's objective value */
3698 SCIP_Real weight /**< weight in (0,1] of this update in pseudo cost sum */
3699 );
3700
3701/** gets the variable's pseudo cost value for the given change of the variable's LP value
3702 *
3703 * @return the variable's pseudo cost value for the given change of the variable's LP value
3704 *
3705 * @pre This method can be called if @p scip is in one of the following stages:
3706 * - \ref SCIP_STAGE_INITPRESOLVE
3707 * - \ref SCIP_STAGE_PRESOLVING
3708 * - \ref SCIP_STAGE_EXITPRESOLVE
3709 * - \ref SCIP_STAGE_PRESOLVED
3710 * - \ref SCIP_STAGE_INITSOLVE
3711 * - \ref SCIP_STAGE_SOLVING
3712 * - \ref SCIP_STAGE_SOLVED
3713 */
3714SCIP_EXPORT
3716 SCIP* scip, /**< SCIP data structure */
3717 SCIP_VAR* var, /**< problem variable */
3718 SCIP_Real solvaldelta /**< difference of variable's new LP value - old LP value */
3719 );
3720
3721/** gets the variable's ancestral pseudo cost value for the given change of the variable's LP value
3722 *
3723 * @return the variable's ancestral pseudo cost value for the given change of the variable's LP value
3724 *
3725 * @pre This method can be called if @p scip is in one of the following stages:
3726 * - \ref SCIP_STAGE_INITPRESOLVE
3727 * - \ref SCIP_STAGE_PRESOLVING
3728 * - \ref SCIP_STAGE_EXITPRESOLVE
3729 * - \ref SCIP_STAGE_PRESOLVED
3730 * - \ref SCIP_STAGE_INITSOLVE
3731 * - \ref SCIP_STAGE_SOLVING
3732 * - \ref SCIP_STAGE_SOLVED
3733 */
3734SCIP_EXPORT
3736 SCIP* scip, /**< SCIP data structure */
3737 SCIP_VAR* var, /**< problem variable */
3738 SCIP_Real solvaldelta /**< difference of variable's new LP value - old LP value */
3739 );
3740
3741/** gets the variable's pseudo cost value for the given change of the variable's LP value,
3742 * only using the pseudo cost information of the current run
3743 *
3744 * @return the variable's pseudo cost value for the given change of the variable's LP value,
3745 * only using the pseudo cost information of the current run
3746 *
3747 * @pre This method can be called if @p scip is in one of the following stages:
3748 * - \ref SCIP_STAGE_INITPRESOLVE
3749 * - \ref SCIP_STAGE_PRESOLVING
3750 * - \ref SCIP_STAGE_EXITPRESOLVE
3751 * - \ref SCIP_STAGE_PRESOLVED
3752 * - \ref SCIP_STAGE_INITSOLVE
3753 * - \ref SCIP_STAGE_SOLVING
3754 * - \ref SCIP_STAGE_SOLVED
3755 */
3756SCIP_EXPORT
3758 SCIP* scip, /**< SCIP data structure */
3759 SCIP_VAR* var, /**< problem variable */
3760 SCIP_Real solvaldelta /**< difference of variable's new LP value - old LP value */
3761 );
3762
3763/** gets the variable's pseudo cost value for the given direction
3764 *
3765 * @return the variable's pseudo cost value for the given direction
3766 *
3767 * @pre This method can be called if @p scip is in one of the following stages:
3768 * - \ref SCIP_STAGE_INITPRESOLVE
3769 * - \ref SCIP_STAGE_PRESOLVING
3770 * - \ref SCIP_STAGE_EXITPRESOLVE
3771 * - \ref SCIP_STAGE_PRESOLVED
3772 * - \ref SCIP_STAGE_INITSOLVE
3773 * - \ref SCIP_STAGE_SOLVING
3774 * - \ref SCIP_STAGE_SOLVED
3775 */
3776SCIP_EXPORT
3778 SCIP* scip, /**< SCIP data structure */
3779 SCIP_VAR* var, /**< problem variable */
3780 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
3781 );
3782
3783/** gets the variable's pseudo cost value for the given direction,
3784 * only using the pseudo cost information of the current run
3785 *
3786 * @return the variable's pseudo cost value for the given direction,
3787 * only using the pseudo cost information of the current run
3788 *
3789 * @pre This method can be called if @p scip is in one of the following stages:
3790 * - \ref SCIP_STAGE_INITPRESOLVE
3791 * - \ref SCIP_STAGE_PRESOLVING
3792 * - \ref SCIP_STAGE_EXITPRESOLVE
3793 * - \ref SCIP_STAGE_PRESOLVED
3794 * - \ref SCIP_STAGE_INITSOLVE
3795 * - \ref SCIP_STAGE_SOLVING
3796 * - \ref SCIP_STAGE_SOLVED
3797 */
3798SCIP_EXPORT
3800 SCIP* scip, /**< SCIP data structure */
3801 SCIP_VAR* var, /**< problem variable */
3802 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
3803 );
3804
3805/** gets the variable's (possible fractional) number of pseudo cost updates for the given direction
3806 *
3807 * @return the variable's (possible fractional) number of pseudo cost updates for the given direction
3808 *
3809 * @pre This method can be called if @p scip is in one of the following stages:
3810 * - \ref SCIP_STAGE_INITPRESOLVE
3811 * - \ref SCIP_STAGE_PRESOLVING
3812 * - \ref SCIP_STAGE_EXITPRESOLVE
3813 * - \ref SCIP_STAGE_PRESOLVED
3814 * - \ref SCIP_STAGE_INITSOLVE
3815 * - \ref SCIP_STAGE_SOLVING
3816 * - \ref SCIP_STAGE_SOLVED
3817 */
3818SCIP_EXPORT
3820 SCIP* scip, /**< SCIP data structure */
3821 SCIP_VAR* var, /**< problem variable */
3822 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
3823 );
3824
3825/** gets the variable's (possible fractional) number of pseudo cost updates for the given direction,
3826 * only using the pseudo cost information of the current run
3827 *
3828 * @return the variable's (possible fractional) number of pseudo cost updates for the given direction,
3829 * only using the pseudo cost information of the current run
3830 *
3831 * @pre This method can be called if @p scip is in one of the following stages:
3832 * - \ref SCIP_STAGE_INITPRESOLVE
3833 * - \ref SCIP_STAGE_PRESOLVING
3834 * - \ref SCIP_STAGE_EXITPRESOLVE
3835 * - \ref SCIP_STAGE_PRESOLVED
3836 * - \ref SCIP_STAGE_INITSOLVE
3837 * - \ref SCIP_STAGE_SOLVING
3838 * - \ref SCIP_STAGE_SOLVED
3839 */
3840SCIP_EXPORT
3842 SCIP* scip, /**< SCIP data structure */
3843 SCIP_VAR* var, /**< problem variable */
3844 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
3845 );
3846
3847/** gets the variable's (possible fractional) number of ancestor pseudo cost updates for the given direction,
3848 * only using the pseudo cost information of the current run
3849 *
3850 * @return the variable's (possible fractional) number of ancestor pseudo cost updates for the given direction,
3851 * only using the pseudo cost information of the current run
3852 *
3853 * @pre This method can be called if @p scip is in one of the following stages:
3854 * - \ref SCIP_STAGE_INITPRESOLVE
3855 * - \ref SCIP_STAGE_PRESOLVING
3856 * - \ref SCIP_STAGE_EXITPRESOLVE
3857 * - \ref SCIP_STAGE_PRESOLVED
3858 * - \ref SCIP_STAGE_INITSOLVE
3859 * - \ref SCIP_STAGE_SOLVING
3860 * - \ref SCIP_STAGE_SOLVED
3861 */
3862SCIP_EXPORT
3864 SCIP* scip, /**< SCIP data structure */
3865 SCIP_VAR* var, /**< problem variable */
3866 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
3867 );
3868
3869/** get pseudo cost variance of the variable, either for entire solve or only for current branch and bound run
3870 *
3871 * @return returns the (corrected) variance of pseudo code information collected so far.
3872 *
3873 * @pre This method can be called if @p scip is in one of the following stages:
3874 * - \ref SCIP_STAGE_INITPRESOLVE
3875 * - \ref SCIP_STAGE_PRESOLVING
3876 * - \ref SCIP_STAGE_EXITPRESOLVE
3877 * - \ref SCIP_STAGE_PRESOLVED
3878 * - \ref SCIP_STAGE_INITSOLVE
3879 * - \ref SCIP_STAGE_SOLVING
3880 * - \ref SCIP_STAGE_SOLVED
3881 */
3882SCIP_EXPORT
3884 SCIP* scip, /**< SCIP data structure */
3885 SCIP_VAR* var, /**< problem variable */
3886 SCIP_BRANCHDIR dir, /**< branching direction (downwards, or upwards) */
3887 SCIP_Bool onlycurrentrun /**< only for pseudo costs of current branch and bound run */
3888 );
3889
3890/** calculates a confidence bound for this variable under the assumption of normally distributed pseudo costs
3891 *
3892 * The confidence bound \f$ \theta \geq 0\f$ denotes the interval borders \f$ [X - \theta, \ X + \theta]\f$, which contains
3893 * the true pseudo costs of the variable, i.e., the expected value of the normal distribution, with a probability
3894 * of 2 * clevel - 1.
3895 *
3896 * @return value of confidence bound for this variable
3897 */
3898SCIP_EXPORT
3900 SCIP* scip, /**< SCIP data structure */
3901 SCIP_VAR* var, /**< variable in question */
3902 SCIP_BRANCHDIR dir, /**< the branching direction for the confidence bound */
3903 SCIP_Bool onlycurrentrun, /**< should only the current run be taken into account */
3904 SCIP_CONFIDENCELEVEL clevel /**< confidence level for the interval */
3905 );
3906
3907/** check if variable pseudo-costs have a significant difference in location. The significance depends on
3908 * the choice of \p clevel and on the kind of tested hypothesis. The one-sided hypothesis, which
3909 * should be rejected, is that fracy * mu_y >= fracx * mu_x, where mu_y and mu_x denote the
3910 * unknown location means of the underlying pseudo-cost distributions of x and y.
3911 *
3912 * This method is applied best if variable x has a better pseudo-cost score than y. The method hypothesizes that y were actually
3913 * better than x (despite the current information), meaning that y can be expected to yield branching
3914 * decisions as least as good as x in the long run. If the method returns TRUE, the current history information is
3915 * sufficient to safely rely on the alternative hypothesis that x yields indeed a better branching score (on average)
3916 * than y.
3917 *
3918 * @note The order of x and y matters for the one-sided hypothesis
3919 *
3920 * @note set \p onesided to FALSE if you are not sure which variable is better. The hypothesis tested then reads
3921 * fracy * mu_y == fracx * mu_x vs the alternative hypothesis fracy * mu_y != fracx * mu_x.
3922 *
3923 * @return TRUE if the hypothesis can be safely rejected at the given confidence level
3924 */
3925SCIP_EXPORT
3927 SCIP* scip, /**< SCIP data structure */
3928 SCIP_VAR* varx, /**< variable x */
3929 SCIP_Real fracx, /**< the fractionality of variable x */
3930 SCIP_VAR* vary, /**< variable y */
3931 SCIP_Real fracy, /**< the fractionality of variable y */
3932 SCIP_BRANCHDIR dir, /**< branching direction */
3933 SCIP_CONFIDENCELEVEL clevel, /**< confidence level for rejecting hypothesis */
3934 SCIP_Bool onesided /**< should a one-sided hypothesis y >= x be tested? */
3935 );
3936
3937/** tests at a given confidence level whether the variable pseudo-costs only have a small probability to
3938 * exceed a \p threshold. This is useful to determine if past observations provide enough evidence
3939 * to skip an expensive strong-branching step if there is already a candidate that has been proven to yield an improvement
3940 * of at least \p threshold.
3941 *
3942 * @note use \p clevel to adjust the level of confidence. For SCIP_CONFIDENCELEVEL_MIN, the method returns TRUE if
3943 * the estimated probability to exceed \p threshold is less than 25 %.
3944 *
3945 * @see SCIP_Confidencelevel for a list of available levels. The used probability limits refer to the one-sided levels
3946 * of confidence.
3947 *
3948 * @return TRUE if the variable pseudo-cost probabilistic model is likely to be smaller than \p threshold
3949 * at the given confidence level \p clevel.
3950 */
3951SCIP_EXPORT
3953 SCIP* scip, /**< SCIP data structure */
3954 SCIP_VAR* var, /**< variable x */
3955 SCIP_Real frac, /**< the fractionality of variable x */
3956 SCIP_Real threshold, /**< the threshold to test against */
3957 SCIP_BRANCHDIR dir, /**< branching direction */
3958 SCIP_CONFIDENCELEVEL clevel /**< confidence level for rejecting hypothesis */
3959 );
3960
3961/** check if the current pseudo cost relative error in a direction violates the given threshold. The Relative
3962 * Error is calculated at a specific confidence level
3963 *
3964 * @return TRUE if relative error in variable pseudo costs is smaller than \p threshold
3965 */
3966SCIP_EXPORT
3968 SCIP* scip, /**< SCIP data structure */
3969 SCIP_VAR* var, /**< variable in question */
3970 SCIP_Real threshold, /**< threshold for relative errors to be considered reliable (enough) */
3971 SCIP_CONFIDENCELEVEL clevel /**< a given confidence level */
3972 );
3973
3974/** gets the variable's pseudo cost score value for the given LP solution value
3975 *
3976 * @return the variable's pseudo cost score value for the given LP solution value
3977 *
3978 * @pre This method can be called if @p scip is in one of the following stages:
3979 * - \ref SCIP_STAGE_INITPRESOLVE
3980 * - \ref SCIP_STAGE_PRESOLVING
3981 * - \ref SCIP_STAGE_EXITPRESOLVE
3982 * - \ref SCIP_STAGE_PRESOLVED
3983 * - \ref SCIP_STAGE_INITSOLVE
3984 * - \ref SCIP_STAGE_SOLVING
3985 * - \ref SCIP_STAGE_SOLVED
3986 */
3987SCIP_EXPORT
3989 SCIP* scip, /**< SCIP data structure */
3990 SCIP_VAR* var, /**< problem variable */
3991 SCIP_Real solval /**< variable's LP solution value */
3992 );
3993
3994/** gets the variable's discounted pseudo cost score value for the given LP solution value.
3995 *
3996 * This combines both pscost and ancpscost fields.
3997 *
3998 * @return the variable's discounted pseudo cost score value for the given LP solution value,
3999 * combining both pscost and ancpscost fields.
4000 *
4001 * @pre This method can be called if @p scip is in one of the following stages:
4002 * - \ref SCIP_STAGE_INITPRESOLVE
4003 * - \ref SCIP_STAGE_PRESOLVING
4004 * - \ref SCIP_STAGE_EXITPRESOLVE
4005 * - \ref SCIP_STAGE_PRESOLVED
4006 * - \ref SCIP_STAGE_INITSOLVE
4007 * - \ref SCIP_STAGE_SOLVING
4008 * - \ref SCIP_STAGE_SOLVED
4009 */
4010SCIP_EXPORT
4012 SCIP* scip, /**< SCIP data structure */
4013 SCIP_VAR* var, /**< problem variable */
4014 SCIP_Real solval, /**< variable's LP solution value */
4015 SCIP_Real discountfac /**< discount factor for discounted pseudocost */
4016 );
4017
4018/** gets the variable's pseudo cost score value for the given LP solution value,
4019 * only using the pseudo cost information of the current run
4020 *
4021 * @return the variable's pseudo cost score value for the given LP solution value,
4022 * only using the pseudo cost information of the current run
4023 *
4024 * @pre This method can be called if @p scip is in one of the following stages:
4025 * - \ref SCIP_STAGE_INITPRESOLVE
4026 * - \ref SCIP_STAGE_PRESOLVING
4027 * - \ref SCIP_STAGE_EXITPRESOLVE
4028 * - \ref SCIP_STAGE_PRESOLVED
4029 * - \ref SCIP_STAGE_INITSOLVE
4030 * - \ref SCIP_STAGE_SOLVING
4031 * - \ref SCIP_STAGE_SOLVED
4032 */
4033SCIP_EXPORT
4035 SCIP* scip, /**< SCIP data structure */
4036 SCIP_VAR* var, /**< problem variable */
4037 SCIP_Real solval /**< variable's LP solution value */
4038 );
4039
4040/** returns the variable's VSIDS value
4041 *
4042 * @return the variable's VSIDS value
4043 *
4044 * @pre This method can be called if @p scip is in one of the following stages:
4045 * - \ref SCIP_STAGE_INITPRESOLVE
4046 * - \ref SCIP_STAGE_PRESOLVING
4047 * - \ref SCIP_STAGE_EXITPRESOLVE
4048 * - \ref SCIP_STAGE_PRESOLVED
4049 * - \ref SCIP_STAGE_INITSOLVE
4050 * - \ref SCIP_STAGE_SOLVING
4051 * - \ref SCIP_STAGE_SOLVED
4052 */
4053SCIP_EXPORT
4055 SCIP* scip, /**< SCIP data structure */
4056 SCIP_VAR* var, /**< problem variable */
4057 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
4058 );
4059
4060/** returns the variable's VSIDS value only using conflicts of the current run
4061 *
4062 * @return the variable's VSIDS value only using conflicts of the current run
4063 *
4064 * @pre This method can be called if @p scip is in one of the following stages:
4065 * - \ref SCIP_STAGE_INITPRESOLVE
4066 * - \ref SCIP_STAGE_PRESOLVING
4067 * - \ref SCIP_STAGE_EXITPRESOLVE
4068 * - \ref SCIP_STAGE_PRESOLVED
4069 * - \ref SCIP_STAGE_INITSOLVE
4070 * - \ref SCIP_STAGE_SOLVING
4071 * - \ref SCIP_STAGE_SOLVED
4072 */
4073SCIP_EXPORT
4075 SCIP* scip, /**< SCIP data structure */
4076 SCIP_VAR* var, /**< problem variable */
4077 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
4078 );
4079
4080/** returns the variable's conflict score value
4081 *
4082 * @return the variable's conflict score value
4083 *
4084 * @pre This method can be called if @p scip is in one of the following stages:
4085 * - \ref SCIP_STAGE_INITPRESOLVE
4086 * - \ref SCIP_STAGE_PRESOLVING
4087 * - \ref SCIP_STAGE_EXITPRESOLVE
4088 * - \ref SCIP_STAGE_PRESOLVED
4089 * - \ref SCIP_STAGE_INITSOLVE
4090 * - \ref SCIP_STAGE_SOLVING
4091 * - \ref SCIP_STAGE_SOLVED
4092 */
4093SCIP_EXPORT
4095 SCIP* scip, /**< SCIP data structure */
4096 SCIP_VAR* var /**< problem variable */
4097 );
4098
4099/** returns the variable's conflict score value only using conflicts of the current run
4100 *
4101 * @return the variable's conflict score value only using conflicts of the current run
4102 *
4103 * @pre This method can be called if @p scip is in one of the following stages:
4104 * - \ref SCIP_STAGE_INITPRESOLVE
4105 * - \ref SCIP_STAGE_PRESOLVING
4106 * - \ref SCIP_STAGE_EXITPRESOLVE
4107 * - \ref SCIP_STAGE_PRESOLVED
4108 * - \ref SCIP_STAGE_INITSOLVE
4109 * - \ref SCIP_STAGE_SOLVING
4110 * - \ref SCIP_STAGE_SOLVED
4111 */
4112SCIP_EXPORT
4114 SCIP* scip, /**< SCIP data structure */
4115 SCIP_VAR* var /**< problem variable */
4116 );
4117
4118/** returns the variable's conflict length score
4119 *
4120 * @return the variable's conflict length score
4121 *
4122 * @pre This method can be called if @p scip is in one of the following stages:
4123 * - \ref SCIP_STAGE_INITPRESOLVE
4124 * - \ref SCIP_STAGE_PRESOLVING
4125 * - \ref SCIP_STAGE_EXITPRESOLVE
4126 * - \ref SCIP_STAGE_PRESOLVED
4127 * - \ref SCIP_STAGE_INITSOLVE
4128 * - \ref SCIP_STAGE_SOLVING
4129 * - \ref SCIP_STAGE_SOLVED
4130 */
4131SCIP_EXPORT
4133 SCIP* scip, /**< SCIP data structure */
4134 SCIP_VAR* var /**< problem variable */
4135 );
4136
4137/** returns the variable's conflict length score only using conflicts of the current run
4138 *
4139 * @return the variable's conflict length score only using conflicts of the current run
4140 *
4141 * @pre This method can be called if @p scip is in one of the following stages:
4142 * - \ref SCIP_STAGE_INITPRESOLVE
4143 * - \ref SCIP_STAGE_PRESOLVING
4144 * - \ref SCIP_STAGE_EXITPRESOLVE
4145 * - \ref SCIP_STAGE_PRESOLVED
4146 * - \ref SCIP_STAGE_INITSOLVE
4147 * - \ref SCIP_STAGE_SOLVING
4148 * - \ref SCIP_STAGE_SOLVED
4149 */
4150SCIP_EXPORT
4152 SCIP* scip, /**< SCIP data structure */
4153 SCIP_VAR* var /**< problem variable */
4154 );
4155
4156/** returns the variable's average conflict length
4157 *
4158 * @return the variable's average conflict length
4159 *
4160 * @pre This method can be called if @p scip is in one of the following stages:
4161 * - \ref SCIP_STAGE_INITPRESOLVE
4162 * - \ref SCIP_STAGE_PRESOLVING
4163 * - \ref SCIP_STAGE_EXITPRESOLVE
4164 * - \ref SCIP_STAGE_PRESOLVED
4165 * - \ref SCIP_STAGE_INITSOLVE
4166 * - \ref SCIP_STAGE_SOLVING
4167 * - \ref SCIP_STAGE_SOLVED
4168 */
4169SCIP_EXPORT
4171 SCIP* scip, /**< SCIP data structure */
4172 SCIP_VAR* var, /**< problem variable */
4173 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
4174 );
4175
4176/** returns the variable's average conflict length only using conflicts of the current run
4177 *
4178 * @return the variable's average conflict length only using conflicts of the current run
4179 *
4180 * @pre This method can be called if @p scip is in one of the following stages:
4181 * - \ref SCIP_STAGE_INITPRESOLVE
4182 * - \ref SCIP_STAGE_PRESOLVING
4183 * - \ref SCIP_STAGE_EXITPRESOLVE
4184 * - \ref SCIP_STAGE_PRESOLVED
4185 * - \ref SCIP_STAGE_INITSOLVE
4186 * - \ref SCIP_STAGE_SOLVING
4187 * - \ref SCIP_STAGE_SOLVED
4188 */
4189SCIP_EXPORT
4191 SCIP* scip, /**< SCIP data structure */
4192 SCIP_VAR* var, /**< problem variable */
4193 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
4194 );
4195
4196/** returns the average number of inferences found after branching on the variable in given direction;
4197 * if branching on the variable in the given direction was yet evaluated, the average number of inferences
4198 * over all variables for branching in the given direction is returned
4199 *
4200 * @return the average number of inferences found after branching on the variable in given direction
4201 *
4202 * @pre This method can be called if @p scip is in one of the following stages:
4203 * - \ref SCIP_STAGE_INITPRESOLVE
4204 * - \ref SCIP_STAGE_PRESOLVING
4205 * - \ref SCIP_STAGE_EXITPRESOLVE
4206 * - \ref SCIP_STAGE_PRESOLVED
4207 * - \ref SCIP_STAGE_INITSOLVE
4208 * - \ref SCIP_STAGE_SOLVING
4209 * - \ref SCIP_STAGE_SOLVED
4210 */
4211SCIP_EXPORT
4213 SCIP* scip, /**< SCIP data structure */
4214 SCIP_VAR* var, /**< problem variable */
4215 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
4216 );
4217
4218/** returns the average number of inferences found after branching on the variable in given direction in the current run;
4219 * if branching on the variable in the given direction was yet evaluated, the average number of inferences
4220 * over all variables for branching in the given direction is returned
4221 *
4222 * @return the average number of inferences found after branching on the variable in given direction in the current run
4223 *
4224 * @pre This method can be called if @p scip is in one of the following stages:
4225 * - \ref SCIP_STAGE_INITPRESOLVE
4226 * - \ref SCIP_STAGE_PRESOLVING
4227 * - \ref SCIP_STAGE_EXITPRESOLVE
4228 * - \ref SCIP_STAGE_PRESOLVED
4229 * - \ref SCIP_STAGE_INITSOLVE
4230 * - \ref SCIP_STAGE_SOLVING
4231 * - \ref SCIP_STAGE_SOLVED
4232 */
4233SCIP_EXPORT
4235 SCIP* scip, /**< SCIP data structure */
4236 SCIP_VAR* var, /**< problem variable */
4237 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
4238 );
4239
4240/** returns the variable's average inference score value
4241 *
4242 * @return the variable's average inference score value
4243 *
4244 * @pre This method can be called if @p scip is in one of the following stages:
4245 * - \ref SCIP_STAGE_INITPRESOLVE
4246 * - \ref SCIP_STAGE_PRESOLVING
4247 * - \ref SCIP_STAGE_EXITPRESOLVE
4248 * - \ref SCIP_STAGE_PRESOLVED
4249 * - \ref SCIP_STAGE_INITSOLVE
4250 * - \ref SCIP_STAGE_SOLVING
4251 * - \ref SCIP_STAGE_SOLVED
4252 */
4253SCIP_EXPORT
4255 SCIP* scip, /**< SCIP data structure */
4256 SCIP_VAR* var /**< problem variable */
4257 );
4258
4259/** returns the variable's average inference score value only using inferences of the current run
4260 *
4261 * @return the variable's average inference score value only using inferences of the current run
4262 *
4263 * @pre This method can be called if @p scip is in one of the following stages:
4264 * - \ref SCIP_STAGE_INITPRESOLVE
4265 * - \ref SCIP_STAGE_PRESOLVING
4266 * - \ref SCIP_STAGE_EXITPRESOLVE
4267 * - \ref SCIP_STAGE_PRESOLVED
4268 * - \ref SCIP_STAGE_INITSOLVE
4269 * - \ref SCIP_STAGE_SOLVING
4270 * - \ref SCIP_STAGE_SOLVED
4271 */
4272SCIP_EXPORT
4274 SCIP* scip, /**< SCIP data structure */
4275 SCIP_VAR* var /**< problem variable */
4276 );
4277
4278/** initializes the upwards and downwards pseudocosts, conflict scores, conflict lengths, inference scores, cutoff scores
4279 * of a variable to the given values
4280 *
4281 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4282 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4283 *
4284 * @pre This method can be called if @p scip is in one of the following stages:
4285 * - \ref SCIP_STAGE_TRANSFORMED
4286 * - \ref SCIP_STAGE_INITPRESOLVE
4287 * - \ref SCIP_STAGE_PRESOLVING
4288 * - \ref SCIP_STAGE_EXITPRESOLVE
4289 * - \ref SCIP_STAGE_PRESOLVED
4290 * - \ref SCIP_STAGE_INITSOLVE
4291 * - \ref SCIP_STAGE_SOLVING
4292 */
4293SCIP_EXPORT
4295 SCIP* scip, /**< SCIP data structure */
4296 SCIP_VAR* var, /**< variable which should be initialized */
4297 SCIP_Real downpscost, /**< value to which pseudocosts for downwards branching should be initialized */
4298 SCIP_Real uppscost, /**< value to which pseudocosts for upwards branching should be initialized */
4299 SCIP_Real downvsids, /**< value to which VSIDS score for downwards branching should be initialized */
4300 SCIP_Real upvsids, /**< value to which VSIDS score for upwards branching should be initialized */
4301 SCIP_Real downconflen, /**< value to which conflict length score for downwards branching should be initialized */
4302 SCIP_Real upconflen, /**< value to which conflict length score for upwards branching should be initialized */
4303 SCIP_Real downinfer, /**< value to which inference counter for downwards branching should be initialized */
4304 SCIP_Real upinfer, /**< value to which inference counter for upwards branching should be initialized */
4305 SCIP_Real downcutoff, /**< value to which cutoff counter for downwards branching should be initialized */
4306 SCIP_Real upcutoff /**< value to which cutoff counter for upwards branching should be initialized */
4307 );
4308
4309/** initializes the upwards and downwards conflict scores, conflict lengths, inference scores, cutoff scores of a
4310 * variable w.r.t. a value by the given values (SCIP_VALUEHISTORY)
4311 *
4312 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4313 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4314 *
4315 * @pre This method can be called if @p scip is in one of the following stages:
4316 * - \ref SCIP_STAGE_TRANSFORMED
4317 * - \ref SCIP_STAGE_INITPRESOLVE
4318 * - \ref SCIP_STAGE_PRESOLVING
4319 * - \ref SCIP_STAGE_EXITPRESOLVE
4320 * - \ref SCIP_STAGE_PRESOLVED
4321 * - \ref SCIP_STAGE_INITSOLVE
4322 * - \ref SCIP_STAGE_SOLVING
4323 */
4324SCIP_EXPORT
4326 SCIP* scip, /**< SCIP data structure */
4327 SCIP_VAR* var, /**< variable which should be initialized */
4328 SCIP_Real value, /**< domain value, or SCIP_UNKNOWN */
4329 SCIP_Real downvsids, /**< value to which VSIDS score for downwards branching should be initialized */
4330 SCIP_Real upvsids, /**< value to which VSIDS score for upwards branching should be initialized */
4331 SCIP_Real downconflen, /**< value to which conflict length score for downwards branching should be initialized */
4332 SCIP_Real upconflen, /**< value to which conflict length score for upwards branching should be initialized */
4333 SCIP_Real downinfer, /**< value to which inference counter for downwards branching should be initialized */
4334 SCIP_Real upinfer, /**< value to which inference counter for upwards branching should be initialized */
4335 SCIP_Real downcutoff, /**< value to which cutoff counter for downwards branching should be initialized */
4336 SCIP_Real upcutoff /**< value to which cutoff counter for upwards branching should be initialized */
4337 );
4338
4339/** returns the average number of cutoffs found after branching on the variable in given direction;
4340 * if branching on the variable in the given direction was yet evaluated, the average number of cutoffs
4341 * over all variables for branching in the given direction is returned
4342 *
4343 * @return the average number of cutoffs found after branching on the variable in given direction
4344 *
4345 * @pre This method can be called if @p scip is in one of the following stages:
4346 * - \ref SCIP_STAGE_INITPRESOLVE
4347 * - \ref SCIP_STAGE_PRESOLVING
4348 * - \ref SCIP_STAGE_EXITPRESOLVE
4349 * - \ref SCIP_STAGE_PRESOLVED
4350 * - \ref SCIP_STAGE_INITSOLVE
4351 * - \ref SCIP_STAGE_SOLVING
4352 * - \ref SCIP_STAGE_SOLVED
4353 */
4354SCIP_EXPORT
4356 SCIP* scip, /**< SCIP data structure */
4357 SCIP_VAR* var, /**< problem variable */
4358 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
4359 );
4360
4361/** returns the average number of cutoffs found after branching on the variable in given direction in the current run;
4362 * if branching on the variable in the given direction was yet evaluated, the average number of cutoffs
4363 * over all variables for branching in the given direction is returned
4364 *
4365 * @return the average number of cutoffs found after branching on the variable in given direction in the current run
4366 *
4367 * @pre This method can be called if @p scip is in one of the following stages:
4368 * - \ref SCIP_STAGE_INITPRESOLVE
4369 * - \ref SCIP_STAGE_PRESOLVING
4370 * - \ref SCIP_STAGE_EXITPRESOLVE
4371 * - \ref SCIP_STAGE_PRESOLVED
4372 * - \ref SCIP_STAGE_INITSOLVE
4373 * - \ref SCIP_STAGE_SOLVING
4374 * - \ref SCIP_STAGE_SOLVED
4375 */
4376SCIP_EXPORT
4378 SCIP* scip, /**< SCIP data structure */
4379 SCIP_VAR* var, /**< problem variable */
4380 SCIP_BRANCHDIR dir /**< branching direction (downwards, or upwards) */
4381 );
4382
4383/** returns the variable's average cutoff score value
4384 *
4385 * @return the variable's average cutoff score value
4386 *
4387 * @pre This method can be called if @p scip is in one of the following stages:
4388 * - \ref SCIP_STAGE_INITPRESOLVE
4389 * - \ref SCIP_STAGE_PRESOLVING
4390 * - \ref SCIP_STAGE_EXITPRESOLVE
4391 * - \ref SCIP_STAGE_PRESOLVED
4392 * - \ref SCIP_STAGE_INITSOLVE
4393 * - \ref SCIP_STAGE_SOLVING
4394 * - \ref SCIP_STAGE_SOLVED
4395 */
4396SCIP_EXPORT
4398 SCIP* scip, /**< SCIP data structure */
4399 SCIP_VAR* var /**< problem variable */
4400 );
4401
4402/** returns the variable's average cutoff score value, only using cutoffs of the current run
4403 *
4404 * @return the variable's average cutoff score value, only using cutoffs of the current run
4405 *
4406 * @pre This method can be called if @p scip is in one of the following stages:
4407 * - \ref SCIP_STAGE_INITPRESOLVE
4408 * - \ref SCIP_STAGE_PRESOLVING
4409 * - \ref SCIP_STAGE_EXITPRESOLVE
4410 * - \ref SCIP_STAGE_PRESOLVED
4411 * - \ref SCIP_STAGE_INITSOLVE
4412 * - \ref SCIP_STAGE_SOLVING
4413 * - \ref SCIP_STAGE_SOLVED
4414 */
4415SCIP_EXPORT
4417 SCIP* scip, /**< SCIP data structure */
4418 SCIP_VAR* var /**< problem variable */
4419 );
4420
4421/** returns the variable's average inference/cutoff score value, weighting the cutoffs of the variable with the given
4422 * factor
4423 *
4424 * @return the variable's average inference/cutoff score value
4425 *
4426 * @pre This method can be called if @p scip is in one of the following stages:
4427 * - \ref SCIP_STAGE_INITPRESOLVE
4428 * - \ref SCIP_STAGE_PRESOLVING
4429 * - \ref SCIP_STAGE_EXITPRESOLVE
4430 * - \ref SCIP_STAGE_PRESOLVED
4431 * - \ref SCIP_STAGE_INITSOLVE
4432 * - \ref SCIP_STAGE_SOLVING
4433 * - \ref SCIP_STAGE_SOLVED
4434 */
4435SCIP_EXPORT
4437 SCIP* scip, /**< SCIP data structure */
4438 SCIP_VAR* var, /**< problem variable */
4439 SCIP_Real cutoffweight /**< factor to weigh average number of cutoffs in branching score */
4440 );
4441
4442/** returns the variable's average inference/cutoff score value, weighting the cutoffs of the variable with the given
4443 * factor, only using inferences and cutoffs of the current run
4444 *
4445 * @return the variable's average inference/cutoff score value, only using inferences and cutoffs of the current run
4446 *
4447 * @pre This method can be called if @p scip is in one of the following stages:
4448 * - \ref SCIP_STAGE_INITPRESOLVE
4449 * - \ref SCIP_STAGE_PRESOLVING
4450 * - \ref SCIP_STAGE_EXITPRESOLVE
4451 * - \ref SCIP_STAGE_PRESOLVED
4452 * - \ref SCIP_STAGE_INITSOLVE
4453 * - \ref SCIP_STAGE_SOLVING
4454 * - \ref SCIP_STAGE_SOLVED
4455 */
4456SCIP_EXPORT
4458 SCIP* scip, /**< SCIP data structure */
4459 SCIP_VAR* var, /**< problem variable */
4460 SCIP_Real cutoffweight /**< factor to weigh average number of cutoffs in branching score */
4461 );
4462
4463/** returns the variable's average GMI efficacy score value
4464 *
4465 * @return the variable's average GMI efficacy score value (for when it was fractional and basic in the LP)
4466 *
4467 * @pre This method can be called if @p scip is in one of the following stages:
4468 * - \ref SCIP_STAGE_INITPRESOLVE
4469 * - \ref SCIP_STAGE_PRESOLVING
4470 * - \ref SCIP_STAGE_EXITPRESOLVE
4471 * - \ref SCIP_STAGE_PRESOLVED
4472 * - \ref SCIP_STAGE_INITSOLVE
4473 * - \ref SCIP_STAGE_SOLVING
4474 * - \ref SCIP_STAGE_SOLVED
4475 */
4476SCIP_EXPORT
4478 SCIP* scip, /**< SCIP data structure */
4479 SCIP_VAR* var /**< problem variable */
4480 );
4481
4482/** sets the variable's avg GMI efficacy score value
4483 *
4484 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4485 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4486 *
4487 * @pre This method can be called if @p scip is in one of the following stages:
4488 * - \ref SCIP_STAGE_INITPRESOLVE
4489 * - \ref SCIP_STAGE_PRESOLVING
4490 * - \ref SCIP_STAGE_EXITPRESOLVE
4491 * - \ref SCIP_STAGE_PRESOLVED
4492 * - \ref SCIP_STAGE_INITSOLVE
4493 * - \ref SCIP_STAGE_SOLVING
4494 * - \ref SCIP_STAGE_SOLVED
4495 */
4496SCIP_EXPORT
4498 SCIP* scip, /**< SCIP data structure */
4499 SCIP_VAR* var, /**< problem variable */
4500 SCIP_Real gmieff /**< Efficacy of last GMI cut generated from when var was basic /frac */
4501 );
4502
4503/** returns the variable's last GMI efficacy score value
4504 *
4505 * @return the variable's last GMI efficacy score value (for when it was fractional and basic in the LP)
4506 *
4507 * @pre This method can be called if @p scip is in one of the following stages:
4508 * - \ref SCIP_STAGE_INITPRESOLVE
4509 * - \ref SCIP_STAGE_PRESOLVING
4510 * - \ref SCIP_STAGE_EXITPRESOLVE
4511 * - \ref SCIP_STAGE_PRESOLVED
4512 * - \ref SCIP_STAGE_INITSOLVE
4513 * - \ref SCIP_STAGE_SOLVING
4514 * - \ref SCIP_STAGE_SOLVED
4515 */
4516SCIP_EXPORT
4518 SCIP* scip, /**< SCIP data structure */
4519 SCIP_VAR* var /**< problem variable */
4520 );
4521
4522/** sets the variable's last GMI efficacy score value
4523 *
4524 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4525 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4526 *
4527 * @pre This method can be called if @p scip is in one of the following stages:
4528 * - \ref SCIP_STAGE_INITPRESOLVE
4529 * - \ref SCIP_STAGE_PRESOLVING
4530 * - \ref SCIP_STAGE_EXITPRESOLVE
4531 * - \ref SCIP_STAGE_PRESOLVED
4532 * - \ref SCIP_STAGE_INITSOLVE
4533 * - \ref SCIP_STAGE_SOLVING
4534 * - \ref SCIP_STAGE_SOLVED
4535 */
4536SCIP_EXPORT
4538 SCIP* scip, /**< SCIP data structure */
4539 SCIP_VAR* var, /**< problem variable */
4540 SCIP_Real gmieff /**< Efficacy of last GMI cut generated from when var was basic /frac */
4541 );
4542
4543/** outputs variable information to file stream via the message system
4544 *
4545 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4546 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4547 *
4548 * @pre This method can be called if @p scip is in one of the following stages:
4549 * - \ref SCIP_STAGE_PROBLEM
4550 * - \ref SCIP_STAGE_TRANSFORMING
4551 * - \ref SCIP_STAGE_TRANSFORMED
4552 * - \ref SCIP_STAGE_INITPRESOLVE
4553 * - \ref SCIP_STAGE_PRESOLVING
4554 * - \ref SCIP_STAGE_EXITPRESOLVE
4555 * - \ref SCIP_STAGE_PRESOLVED
4556 * - \ref SCIP_STAGE_INITSOLVE
4557 * - \ref SCIP_STAGE_SOLVING
4558 * - \ref SCIP_STAGE_SOLVED
4559 * - \ref SCIP_STAGE_EXITSOLVE
4560 * - \ref SCIP_STAGE_FREETRANS
4561 *
4562 * @note If the message handler is set to a NULL pointer nothing will be printed
4563 */
4564SCIP_EXPORT
4566 SCIP* scip, /**< SCIP data structure */
4567 SCIP_VAR* var, /**< problem variable */
4568 FILE* file /**< output file (or NULL for standard output) */
4569 );
4570
4571/** changes variable's exact objective value
4572 *
4573 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4574 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4575 *
4576 * @pre This method can be called if @p scip is in one of the following stages:
4577 * - \ref SCIP_STAGE_PROBLEM
4578 * - \ref SCIP_STAGE_TRANSFORMING
4579 * - \ref SCIP_STAGE_PRESOLVING
4580 * - \ref SCIP_STAGE_PRESOLVED
4581 */
4582SCIP_EXPORT
4584 SCIP* scip, /**< SCIP data structure */
4585 SCIP_VAR* var, /**< variable to change the objective value for */
4586 SCIP_RATIONAL* newobj /**< new objective value */
4587 );
4588
4589/** changes exact global upper bound of variable;
4590 *
4591 *
4592 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4593 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4594 *
4595 * @pre This method can be called if @p scip is in one of the following stages:
4596 * - \ref SCIP_STAGE_PROBLEM
4597 *
4598 */
4599SCIP_EXPORT
4601 SCIP* scip, /**< SCIP data structure */
4602 SCIP_VAR* var, /**< variable to change the bound for */
4603 SCIP_RATIONAL* newbound /**< new value for bound */
4604 );
4605
4606/** changes exact global lower bound of variable;
4607 *
4608 *
4609 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4610 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4611 *
4612 * @pre This method can be called if @p scip is in one of the following stages:
4613 * - \ref SCIP_STAGE_PROBLEM
4614 *
4615 */
4616SCIP_EXPORT
4618 SCIP* scip, /**< SCIP data structure */
4619 SCIP_VAR* var, /**< variable to change the bound for */
4620 SCIP_RATIONAL* newbound /**< new value for bound */
4621 );
4622
4623/** print the given variables and rational coefficients as linear sum in the following form
4624 * c1 <x1> + c2 <x2> ... + cn <xn>
4625 *
4626 * This string can be parsed by the method SCIPparseVarsLinearsum().
4627 *
4628 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4629 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4630 *
4631 * @pre This method can be called if @p scip is in one of the following stages:
4632 * - \ref SCIP_STAGE_PROBLEM
4633 * - \ref SCIP_STAGE_TRANSFORMING
4634 * - \ref SCIP_STAGE_TRANSFORMED
4635 * - \ref SCIP_STAGE_INITPRESOLVE
4636 * - \ref SCIP_STAGE_PRESOLVING
4637 * - \ref SCIP_STAGE_EXITPRESOLVE
4638 * - \ref SCIP_STAGE_PRESOLVED
4639 * - \ref SCIP_STAGE_INITSOLVE
4640 * - \ref SCIP_STAGE_SOLVING
4641 * - \ref SCIP_STAGE_SOLVED
4642 * - \ref SCIP_STAGE_EXITSOLVE
4643 * - \ref SCIP_STAGE_FREETRANS
4644 *
4645 * @note The printing process is done via the message handler system.
4646 */
4647SCIP_EXPORT
4649 SCIP* scip, /**< SCIP data structure */
4650 FILE* file, /**< output file, or NULL for stdout */
4651 SCIP_VAR** vars, /**< variable array to output */
4652 SCIP_RATIONAL** vals, /**< array of coefficients or NULL if all coefficients are 1.0 */
4653 int nvars, /**< number of variables */
4654 SCIP_Bool type /**< should the variable type be also posted */
4655 );
4656
4657/** Transforms a given linear sum of variables, that is a_1*x_1 + ... + a_n*x_n + c into a corresponding linear sum of
4658 * active variables, that is b_1*y_1 + ... + b_m*y_m + d.
4659 *
4660 * If the number of needed active variables is greater than the available slots in the variable array, nothing happens
4661 * except that the required size is stored in the corresponding variable (requiredsize). Otherwise, the active variable
4662 * representation is stored in the variable array, scalar array and constant.
4663 *
4664 * The reason for this approach is that we cannot reallocate memory, since we do not know how the memory has been
4665 * allocated (e.g., by a C++ 'new' or SCIP functions).
4666 *
4667 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
4668 * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
4669 *
4670 * @pre This method can be called if @p scip is in one of the following stages:
4671 * - \ref SCIP_STAGE_TRANSFORMED
4672 * - \ref SCIP_STAGE_INITPRESOLVE
4673 * - \ref SCIP_STAGE_PRESOLVING
4674 * - \ref SCIP_STAGE_EXITPRESOLVE
4675 * - \ref SCIP_STAGE_PRESOLVED
4676 * - \ref SCIP_STAGE_INITSOLVE
4677 * - \ref SCIP_STAGE_SOLVING
4678 * - \ref SCIP_STAGE_SOLVED
4679 * - \ref SCIP_STAGE_EXITSOLVE
4680 * - \ref SCIP_STAGE_FREETRANS
4681 *
4682 * @note The resulting linear sum is stored into the given variable array, scalar array, and constant. That means the
4683 * given entries are overwritten.
4684 *
4685 * @note That method can be used to convert a single variables into variable space of active variables. Therefore call
4686 * the method with the linear sum 1.0*x + 0.0.
4687 */
4688SCIP_EXPORT
4690 SCIP* scip, /**< SCIP data structure */
4691 SCIP_VAR** vars, /**< variable array x_1, ..., x_n in the linear sum which will be
4692 * overwritten by the variable array y_1, ..., y_m in the linear sum
4693 * w.r.t. active variables */
4694 SCIP_RATIONAL** scalars, /**< scalars a_1, ..., a_n in linear sum which will be overwritten to the
4695 * scalars b_1, ..., b_m in the linear sum of the active variables */
4696 int* nvars, /**< pointer to number of variables in the linear sum which will be
4697 * overwritten by the number of variables in the linear sum corresponding
4698 * to the active variables */
4699 int varssize, /**< available slots in vars and scalars array which is needed to check if
4700 * the array are large enough for the linear sum w.r.t. active
4701 * variables */
4702 SCIP_RATIONAL* constant, /**< pointer to constant c in linear sum a_1*x_1 + ... + a_n*x_n + c which
4703 * will chnage to constant d in the linear sum b_1*y_1 + ... + b_m*y_m +
4704 * d w.r.t. the active variables */
4705 int* requiredsize, /**< pointer to store the required array size for the linear sum w.r.t. the
4706 * active variables */
4707 SCIP_Bool mergemultiples /**< should multiple occurrences of a var be replaced by a single coeff? */
4708 );
4709
4710/**@} */
4711
4712#ifdef __cplusplus
4713}
4714#endif
4715
4716#endif
common defines and data types used in all packages of SCIP
#define SCIP_Longint
Definition def.h:148
#define SCIP_Bool
Definition def.h:98
#define SCIP_Real
Definition def.h:163
SCIP_RETCODE SCIPgetVarStrongbranchFrac(SCIP *scip, SCIP_VAR *var, int itlim, SCIP_Bool idempotent, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Bool *downinf, SCIP_Bool *upinf, SCIP_Bool *downconflict, SCIP_Bool *upconflict, SCIP_Bool *lperror)
Definition scip_var.c:3664
SCIP_Real SCIPgetRelaxSolObj(SCIP *scip)
Definition scip_var.c:3376
SCIP_RETCODE SCIPinitVarBranchStats(SCIP *scip, SCIP_VAR *var, SCIP_Real downpscost, SCIP_Real uppscost, SCIP_Real downvsids, SCIP_Real upvsids, SCIP_Real downconflen, SCIP_Real upconflen, SCIP_Real downinfer, SCIP_Real upinfer, SCIP_Real downcutoff, SCIP_Real upcutoff)
Definition scip_var.c:12009
SCIP_Real SCIPgetVarAncPseudocostCountCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11378
SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:6401
SCIP_Real SCIPgetVarBdAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
Definition scip_var.c:3008
SCIP_RETCODE SCIPinitVarValueBranchStats(SCIP *scip, SCIP_VAR *var, SCIP_Real value, SCIP_Real downvsids, SCIP_Real upvsids, SCIP_Real downconflen, SCIP_Real upconflen, SCIP_Real downinfer, SCIP_Real upinfer, SCIP_Real downcutoff, SCIP_Real upcutoff)
Definition scip_var.c:12080
SCIP_RETCODE SCIPaddVarLocks(SCIP *scip, SCIP_VAR *var, int nlocksdown, int nlocksup)
Definition scip_var.c:5176
SCIP_Real SCIPgetVarMultaggrLbGlobal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:8506
SCIP_Bool SCIPpscostThresholdProbabilityTest(SCIP *scip, SCIP_VAR *var, SCIP_Real frac, SCIP_Real threshold, SCIP_BRANCHDIR dir, SCIP_CONFIDENCELEVEL clevel)
Definition scip_var.c:11487
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
Definition scip_var.c:5210
SCIP_RETCODE SCIPremoveVarFromGlobalStructures(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:9796
SCIP_RETCODE SCIPtightenVarUbExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:6768
SCIP_Bool SCIPdoNotAggrVar(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:10929
void SCIPdisableVarHistory(SCIP *scip)
Definition scip_var.c:11102
SCIP_Bool SCIPgetVarWasFixedAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
Definition scip_var.c:3026
SCIP_RETCODE SCIPincVarGMISumScore(SCIP *scip, SCIP_VAR *var, SCIP_Real gmieff)
Definition scip_var.c:12375
SCIP_RETCODE SCIPinferVarFixProp(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:7515
SCIP_RETCODE SCIPchgVarUbExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound)
Definition scip_var.c:5964
SCIP_Real SCIPgetVarMultaggrLbLocal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:8536
SCIP_RETCODE SCIPinferVarUbProp(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:7699
SCIP_RETCODE SCIPaddClique(SCIP *scip, SCIP_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool isequation, SCIP_Bool *infeasible, int *nbdchgs)
Definition scip_var.c:8882
SCIP_RETCODE SCIPsetRelaxSolVal(SCIP *scip, SCIP_RELAX *relax, SCIP_VAR *var, SCIP_Real val)
Definition scip_var.c:3158
SCIP_RETCODE SCIPtightenVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:8257
SCIP_Real SCIPgetVarAvgInferenceScoreCurrentRun(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:11976
SCIP_RETCODE SCIPgetVarStrongbranchInt(SCIP *scip, SCIP_VAR *var, int itlim, SCIP_Bool idempotent, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Bool *downinf, SCIP_Bool *upinf, SCIP_Bool *downconflict, SCIP_Bool *upconflict, SCIP_Bool *lperror)
Definition scip_var.c:4478
SCIP_Real SCIPgetVarPseudocostCountCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11350
SCIP_Real SCIPgetVarAvgInferenceScore(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:11945
SCIP_RETCODE SCIPscaleVarBranchFactor(SCIP *scip, SCIP_VAR *var, SCIP_Real scale)
Definition scip_var.c:9858
SCIP_RETCODE SCIPendStrongbranch(SCIP *scip)
Definition scip_var.c:3488
SCIP_RETCODE SCIPchgVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
Definition scip_var.c:5697
SCIP_Real SCIPgetVarMultaggrUbGlobal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:8521
SCIP_RETCODE SCIPgetTransformedVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **transvars)
Definition scip_var.c:2119
SCIP_Real SCIPgetVarPseudocostCount(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11322
SCIP_Real SCIPadjustedVarLbExactFloat(SCIP *scip, SCIP_VAR *var, SCIP_Real lb)
Definition scip_var.c:5602
SCIP_Real SCIPgetVarPseudocostCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11296
SCIP_RETCODE SCIPwriteCliqueGraph(SCIP *scip, const char *fname, SCIP_Bool writenodeweights)
Definition scip_var.c:9647
SCIP_RETCODE SCIPchgVarName(SCIP *scip, SCIP_VAR *var, const char *name)
Definition scip_var.c:1938
SCIP_RETCODE SCIPcalcNegatedCliquePartition(SCIP *scip, SCIP_VAR **vars, int nvars, int **probtoidxmap, int *probtoidxmapsize, int *cliquepartition, int *ncliques)
Definition scip_var.c:9410
SCIP_Bool SCIPdoNotAggr(SCIP *scip)
Definition scip_var.c:10909
SCIP_Real SCIPgetVarMultaggrUbLocal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:8551
SCIP_RETCODE SCIPaggregateVarsExact(SCIP *scip, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_RATIONAL *scalarx, SCIP_RATIONAL *scalary, SCIP_RATIONAL *rhs, SCIP_Bool *infeasible, SCIP_Bool *redundant, SCIP_Bool *aggregated)
Definition scip_var.c:10692
SCIP_RETCODE SCIPupdateVarBranchPriority(SCIP *scip, SCIP_VAR *var, int branchpriority)
Definition scip_var.c:9958
SCIP_Real SCIPgetVarAvgConflictlength(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11837
SCIP_Bool SCIPisVarPscostRelerrorReliable(SCIP *scip, SCIP_VAR *var, SCIP_Real threshold, SCIP_CONFIDENCELEVEL clevel)
Definition scip_var.c:11506
SCIP_RETCODE SCIPgetBinvarRepresentatives(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **repvars, SCIP_Bool *negated)
Definition scip_var.c:2283
SCIP_Bool SCIPdoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:10942
SCIP_Real SCIPgetVarPseudocost(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11268
SCIP_RETCODE SCIPparseVarsList(SCIP *scip, const char *str, SCIP_VAR **vars, int *nvars, int varssize, int *requiredsize, char **endptr, char delimiter, SCIP_Bool *success)
Definition scip_var.c:805
SCIP_Real SCIPgetVarAvgCutoffScoreCurrentRun(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:12230
SCIP_RETCODE SCIPaggregateVars(SCIP *scip, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_Real scalarx, SCIP_Real scalary, SCIP_Real rhs, SCIP_Bool *infeasible, SCIP_Bool *redundant, SCIP_Bool *aggregated)
Definition scip_var.c:10550
SCIP_RETCODE SCIPinferVarUbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:7069
SCIP_RETCODE SCIPparseVarsPolynomialExact(SCIP *scip, char *str, SCIP_VAR ****monomialvars, SCIP_RATIONAL ***monomialcoefs, int *nmonomials, char **endptr, SCIP_Bool *success)
Definition scip_var.c:1453
SCIP_RETCODE SCIPaddVarExactData(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *lb, SCIP_RATIONAL *ub, SCIP_RATIONAL *obj)
Definition scip_var.c:299
SCIP_RETCODE SCIPchgVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
Definition scip_var.c:5875
SCIP_RETCODE SCIPchgVarUbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound)
Definition scip_var.c:6088
SCIP_Real SCIPgetVarAvgInferencesCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11919
SCIP_RETCODE SCIPchgVarImplType(SCIP *scip, SCIP_VAR *var, SCIP_IMPLINTTYPE impltype, SCIP_Bool *infeasible)
Definition scip_var.c:10218
SCIP_CLIQUE ** SCIPgetCliques(SCIP *scip)
Definition scip_var.c:9566
SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:6651
SCIP_RETCODE SCIPparseVarName(SCIP *scip, const char *str, SCIP_VAR **var, char **endptr)
Definition scip_var.c:728
SCIP_RETCODE SCIPparseVar(SCIP *scip, SCIP_VAR **var, 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 scip_var.c:669
SCIP_RETCODE SCIPgetProbvarSum(SCIP *scip, SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
Definition scip_var.c:2499
SCIP_RETCODE SCIPchgVarBranchDirection(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR branchdirection)
Definition scip_var.c:10022
SCIP_RETCODE SCIPaddVarVub(SCIP *scip, SCIP_VAR *var, SCIP_VAR *vubvar, SCIP_Real vubcoef, SCIP_Real vubconstant, SCIP_Bool *infeasible, int *nbdchgs)
Definition scip_var.c:8680
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
Definition scip_var.c:5118
SCIP_RETCODE SCIPchgVarLbGlobalExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound)
Definition scip_var.c:5492
SCIP_RETCODE SCIPaddVarVlb(SCIP *scip, SCIP_VAR *var, SCIP_VAR *vlbvar, SCIP_Real vlbcoef, SCIP_Real vlbconstant, SCIP_Bool *infeasible, int *nbdchgs)
Definition scip_var.c:8621
SCIP_RETCODE SCIPchgVarBranchPriority(SCIP *scip, SCIP_VAR *var, int branchpriority)
Definition scip_var.c:9917
SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
Definition scip_var.c:5296
SCIP_RETCODE SCIPchgVarUbGlobalExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound)
Definition scip_var.c:5467
SCIP_RETCODE SCIPinferVarLbConsExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:7296
SCIP_Real SCIPgetVarFarkasCoef(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:2698
SCIP_RETCODE SCIPgetVarClosestVub(SCIP *scip, SCIP_VAR *var, SCIP_SOL *sol, SCIP_Real *closestvub, int *closestvubidx)
Definition scip_var.c:8592
SCIP_Real SCIPgetVarAvgCutoffsCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:12173
SCIP_RETCODE SCIPcreateVarImpl(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_IMPLINTTYPE impltype, 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 scip_var.c:225
SCIP_RETCODE SCIPchgVarLbLazy(SCIP *scip, SCIP_VAR *var, SCIP_Real lazylb)
Definition scip_var.c:6321
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
Definition scip_var.c:2872
SCIP_Longint SCIPgetVarStrongbranchNode(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:5019
SCIP_RETCODE SCIPtransformVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **transvars)
Definition scip_var.c:2028
SCIP_RETCODE SCIPcalcCliquePartition(SCIP *scip, SCIP_VAR **vars, int nvars, int **probtoidxmap, int *probtoidxmapsize, int *cliquepartition, int *ncliques)
Definition scip_var.c:9330
SCIP_Real SCIPgetVarDPseudocostScore(SCIP *scip, SCIP_VAR *var, SCIP_Real solval, SCIP_Real discountfac)
Definition scip_var.c:11570
SCIP_RETCODE SCIPmultiaggregateVar(SCIP *scip, SCIP_VAR *var, int naggvars, SCIP_VAR **aggvars, SCIP_Real *scalars, SCIP_Real constant, SCIP_Bool *infeasible, SCIP_Bool *aggregated)
Definition scip_var.c:10834
void SCIPfreeParseVarsPolynomialData(SCIP *scip, SCIP_VAR ****monomialvars, SCIP_Real ***monomialexps, SCIP_Real **monomialcoefs, int **monomialnvars, int nmonomials)
Definition scip_var.c:1755
SCIP_LPSOLSTAT SCIPgetLastStrongbranchLPSolStat(SCIP *scip, SCIP_BRANCHDIR branchdir)
Definition scip_var.c:4847
SCIP_RETCODE SCIPaddVarBranchFactor(SCIP *scip, SCIP_VAR *var, SCIP_Real addfactor)
Definition scip_var.c:9886
int SCIPgetNCliquesCreated(SCIP *scip)
Definition scip_var.c:9539
SCIP_RETCODE SCIPcleanupCliques(SCIP *scip, SCIP_Bool *infeasible)
Definition scip_var.c:9469
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
Definition scip_var.c:1887
SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
Definition scip_var.c:5634
SCIP_Longint SCIPgetVarStrongbranchLPAge(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:5053
SCIP_RETCODE SCIPchgVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
Definition scip_var.c:6141
SCIP_RETCODE SCIPgetProbvarLinearSumExact(SCIP *scip, SCIP_VAR **vars, SCIP_RATIONAL **scalars, int *nvars, int varssize, SCIP_RATIONAL *constant, int *requiredsize, SCIP_Bool mergemultiples)
Definition scip_var.c:2443
SCIP_RETCODE SCIPmarkRelaxSolValid(SCIP *scip, SCIP_RELAX *relax, SCIP_Bool includeslp)
Definition scip_var.c:3301
SCIP_RETCODE SCIPgetVarsStrongbranchesFrac(SCIP *scip, SCIP_VAR **vars, int nvars, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Bool *downinf, SCIP_Bool *upinf, SCIP_Bool *downconflict, SCIP_Bool *upconflict, SCIP_Bool *lperror)
Definition scip_var.c:4632
SCIP_RETCODE SCIPsetVarStrongbranchData(SCIP *scip, SCIP_VAR *var, SCIP_Real lpobjval, SCIP_Real primsol, SCIP_Real down, SCIP_Real up, SCIP_Bool downvalid, SCIP_Bool upvalid, SCIP_Longint iter, int itlim)
Definition scip_var.c:4903
SCIP_Bool SCIPdoNotMultaggr(SCIP *scip)
Definition scip_var.c:10919
SCIP_Real SCIPgetVarPseudocostVal(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta)
Definition scip_var.c:11188
SCIP_RETCODE SCIPparseVarsLinearsum(SCIP *scip, const char *str, SCIP_VAR **vars, SCIP_Real *vals, int *nvars, int varssize, int *requiredsize, char **endptr, SCIP_Bool *success)
Definition scip_var.c:899
SCIP_Real SCIPgetVarConflictlengthScore(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:11775
SCIP_Bool SCIPsignificantVarPscostDifference(SCIP *scip, SCIP_VAR *varx, SCIP_Real fracx, SCIP_VAR *vary, SCIP_Real fracy, SCIP_BRANCHDIR dir, SCIP_CONFIDENCELEVEL clevel, SCIP_Bool onesided)
Definition scip_var.c:11457
SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize)
Definition scip_var.c:2378
SCIP_Real SCIPgetRelaxSolVal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:3347
SCIP_RETCODE SCIPgetVarStrongbranchWithPropagation(SCIP *scip, SCIP_VAR *var, SCIP_Real solval, SCIP_Real lpobjval, int itlim, int maxproprounds, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Longint *ndomredsdown, SCIP_Longint *ndomredsup, SCIP_Bool *downinf, SCIP_Bool *upinf, SCIP_Bool *downconflict, SCIP_Bool *upconflict, SCIP_Bool *lperror, SCIP_Real *newlbs, SCIP_Real *newubs)
Definition scip_var.c:4138
SCIP_Real SCIPadjustedVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real lb)
Definition scip_var.c:5570
SCIP_Real SCIPgetVarAvgCutoffs(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:12145
SCIP_Real SCIPgetVarAncPseudocostVal(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta)
Definition scip_var.c:11214
SCIP_Bool SCIPisRelaxSolValid(SCIP *scip)
Definition scip_var.c:3281
SCIP_RETCODE SCIPgetVarClosestVlb(SCIP *scip, SCIP_VAR *var, SCIP_SOL *sol, SCIP_Real *closestvlb, int *closestvlbidx)
Definition scip_var.c:8569
SCIP_RETCODE SCIPparseVarsLinearsumExact(SCIP *scip, char *str, SCIP_VAR **vars, SCIP_RATIONAL **vals, int *nvars, int varssize, int *requiredsize, char **endptr, SCIP_Bool *success)
Definition scip_var.c:1007
SCIP_RETCODE SCIPchgVarType(SCIP *scip, SCIP_VAR *var, SCIP_VARTYPE vartype, SCIP_Bool *infeasible)
Definition scip_var.c:10113
SCIP_RETCODE SCIPflattenVarAggregationGraph(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:2332
SCIP_Real SCIPcomputeVarLbGlobal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:8375
SCIP_Real SCIPgetVarSol(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:3051
SCIP_RETCODE SCIPgetNegatedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **negvar)
Definition scip_var.c:2166
SCIP_Real SCIPgetVarPseudocostScoreCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_Real solval)
Definition scip_var.c:11613
SCIP_RETCODE SCIPinferVarUbConsExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:7174
SCIP_Bool SCIPhaveVarsCommonClique(SCIP *scip, SCIP_VAR *var1, SCIP_Bool value1, SCIP_VAR *var2, SCIP_Bool value2, SCIP_Bool regardimplics)
Definition scip_var.c:9596
SCIP_RETCODE SCIPaddVarImplication(SCIP *scip, SCIP_VAR *var, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool *infeasible, int *nbdchgs)
Definition scip_var.c:8740
SCIP_RETCODE SCIPsetRelaxSolVals(SCIP *scip, SCIP_RELAX *relax, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Bool includeslp)
Definition scip_var.c:3191
SCIP_Real SCIPcalculatePscostConfidenceBound(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Bool onlycurrentrun, SCIP_CONFIDENCELEVEL clevel)
Definition scip_var.c:11426
SCIP_RETCODE SCIPchgVarUbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
Definition scip_var.c:6230
SCIP_Real SCIPcomputeVarLbLocal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:8417
SCIP_RETCODE SCIPwriteVarsPolynomial(SCIP *scip, FILE *file, SCIP_VAR ***monomialvars, SCIP_Real **monomialexps, SCIP_Real *monomialcoefs, int *monomialnvars, int nmonomials, SCIP_Bool type)
Definition scip_var.c:599
SCIP_Real SCIPgetVarPseudocostValCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta)
Definition scip_var.c:11242
SCIP_RETCODE SCIPupdateVarPseudocost(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta, SCIP_Real objdelta, SCIP_Real weight)
Definition scip_var.c:11122
int SCIPgetNCliques(SCIP *scip)
Definition scip_var.c:9512
SCIP_Real SCIPgetVarAvgGMIScore(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:12349
SCIP_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, 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 scip_var.c:120
SCIP_Real SCIPadjustedVarUbExactFloat(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
Definition scip_var.c:5666
SCIP_RETCODE SCIPaddVarBranchPriority(SCIP *scip, SCIP_VAR *var, int addpriority)
Definition scip_var.c:9991
SCIP_RETCODE SCIPtransformVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
Definition scip_var.c:1988
SCIP_Real SCIPgetVarRedcost(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:2608
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:11057
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
Definition scip_var.c:10318
SCIP_RETCODE SCIPmarkRelaxSolInvalid(SCIP *scip)
Definition scip_var.c:3326
SCIP_Real SCIPgetVarAvgInferenceCutoffScoreCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_Real cutoffweight)
Definition scip_var.c:12306
SCIP_RETCODE SCIPinferVarLbCons(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:6964
SCIP_RETCODE SCIPgetVarsStrongbranchesInt(SCIP *scip, SCIP_VAR **vars, int nvars, int itlim, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Bool *downinf, SCIP_Bool *upinf, SCIP_Bool *downconflict, SCIP_Bool *upconflict, SCIP_Bool *lperror)
Definition scip_var.c:4743
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
Definition scip_var.c:2736
SCIP_RETCODE SCIPparseVarsPolynomial(SCIP *scip, const char *str, SCIP_VAR ****monomialvars, SCIP_Real ***monomialexps, SCIP_Real **monomialcoefs, int **monomialnvars, int *nmonomials, char **endptr, SCIP_Bool *success)
Definition scip_var.c:1100
SCIP_Real SCIPgetVarLastGMIScore(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:12403
SCIP_Real SCIPgetVarConflictScore(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:11713
SCIP_RETCODE SCIPprintVar(SCIP *scip, SCIP_VAR *var, FILE *file)
Definition scip_var.c:12465
SCIP_Real SCIPgetVarAvgCutoffScore(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:12199
SCIP_RETCODE SCIPchgVarLbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound)
Definition scip_var.c:6044
SCIP_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype)
Definition scip_var.c:184
SCIP_RETCODE SCIPsetVarLastGMIScore(SCIP *scip, SCIP_VAR *var, SCIP_Real gmieff)
Definition scip_var.c:12429
SCIP_RETCODE SCIPchgVarUbLazy(SCIP *scip, SCIP_VAR *var, SCIP_Real lazyub)
Definition scip_var.c:6362
SCIP_RETCODE SCIPinferBinvarCons(SCIP *scip, SCIP_VAR *var, SCIP_Bool fixedval, SCIP_CONS *infercons, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:7412
SCIP_RETCODE SCIPtryStrongbranchLPSol(SCIP *scip, SCIP_Bool *foundsol, SCIP_Bool *cutoff)
Definition scip_var.c:4938
SCIP_RETCODE SCIPchgVarObjExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newobj)
Definition scip_var.c:5420
SCIP_RETCODE SCIPwriteVarName(SCIP *scip, FILE *file, SCIP_VAR *var, SCIP_Bool type)
Definition scip_var.c:361
SCIP_RETCODE SCIPgetVarSols(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_Real *vals)
Definition scip_var.c:3071
SCIP_RETCODE SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
Definition scip_var.c:5372
SCIP_RETCODE SCIPupdateVarAncPseudocost(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta, SCIP_Real objdelta, SCIP_Real weight)
Definition scip_var.c:11154
SCIP_RETCODE SCIPchgVarLbExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound)
Definition scip_var.c:5786
SCIP_RETCODE SCIPgetBinvarRepresentative(SCIP *scip, SCIP_VAR *var, SCIP_VAR **repvar, SCIP_Bool *negated)
Definition scip_var.c:2236
SCIP_Real SCIPgetVarAvgInferenceCutoffScore(SCIP *scip, SCIP_VAR *var, SCIP_Real cutoffweight)
Definition scip_var.c:12262
SCIP_RETCODE SCIPwriteVarsList(SCIP *scip, FILE *file, SCIP_VAR **vars, int nvars, SCIP_Bool type, char delimiter)
Definition scip_var.c:423
SCIP_Real SCIPcomputeVarUbGlobal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:8396
SCIP_Real SCIPcomputeVarUbLocal(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:8462
SCIP_RETCODE SCIPgetActiveVars(SCIP *scip, SCIP_VAR **vars, int *nvars, int varssize, int *requiredsize)
Definition scip_var.c:2574
int SCIPgetVarNStrongbranchs(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:5085
SCIP_RETCODE SCIPwriteVarsLinearsum(SCIP *scip, FILE *file, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Bool type)
Definition scip_var.c:474
SCIP_RETCODE SCIPgetProbvarSumExact(SCIP *scip, SCIP_VAR **var, SCIP_RATIONAL *scalar, SCIP_RATIONAL *constant)
Definition scip_var.c:2538
SCIP_RETCODE SCIPgetVarStrongbranchLast(SCIP *scip, SCIP_VAR *var, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Real *solval, SCIP_Real *lpobjval)
Definition scip_var.c:4869
SCIP_Real SCIPgetVarVSIDS(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11649
SCIP_Real SCIPgetVarConflictlengthScoreCurrentRun(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:11806
SCIP_Bool SCIPisVarAggrCoefAcceptable(SCIP *scip, SCIP_VAR *var, SCIP_Real scalar)
Definition scip_var.c:10962
SCIP_Real SCIPgetVarVSIDSCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11681
SCIP_Bool SCIPisStrongbranchDownFirst(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:3399
void SCIPenableVarHistory(SCIP *scip)
Definition scip_var.c:11083
SCIP_Real SCIPgetVarImplRedcost(SCIP *scip, SCIP_VAR *var, SCIP_Bool varfixing)
Definition scip_var.c:2653
SCIP_Bool SCIPallowWeakDualReds(SCIP *scip)
Definition scip_var.c:10998
SCIP_Real SCIPgetVarPseudocostVariance(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Bool onlycurrentrun)
Definition scip_var.c:11404
SCIP_RETCODE SCIPgetNegatedVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **negvars)
Definition scip_var.c:2199
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
Definition scip_var.c:2078
SCIP_RETCODE SCIPmultiaggregateVarExact(SCIP *scip, SCIP_VAR *var, int naggvars, SCIP_VAR **aggvars, SCIP_RATIONAL **scalars, SCIP_RATIONAL *constant, SCIP_Bool *infeasible, SCIP_Bool *aggregated)
Definition scip_var.c:10879
SCIP_Real SCIPgetVarConflictScoreCurrentRun(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:11744
SCIP_RETCODE SCIPtightenVarLbExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *newbound, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:6518
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:1853
SCIP_Real SCIPgetVarPseudocostScore(SCIP *scip, SCIP_VAR *var, SCIP_Real solval)
Definition scip_var.c:11531
SCIP_RETCODE SCIPstartStrongbranch(SCIP *scip, SCIP_Bool enablepropagation)
Definition scip_var.c:3430
SCIP_RETCODE SCIPclearRelaxSolVals(SCIP *scip, SCIP_RELAX *relax)
Definition scip_var.c:3108
SCIP_RETCODE SCIPmarkDoNotAggrVar(SCIP *scip, SCIP_VAR *var)
Definition scip_var.c:11024
SCIP_Real SCIPgetVarAvgInferences(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11891
SCIP_Bool SCIPallowStrongDualReds(SCIP *scip)
Definition scip_var.c:10984
SCIP_RETCODE SCIPinferBinvarProp(SCIP *scip, SCIP_VAR *var, SCIP_Bool fixedval, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:7809
SCIP_RETCODE SCIPwriteVarsLinearsumExact(SCIP *scip, FILE *file, SCIP_VAR **vars, SCIP_RATIONAL **vals, int nvars, SCIP_Bool type)
Definition scip_var.c:533
SCIP_RETCODE SCIPinferVarFixCons(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_CONS *infercons, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:6895
SCIP_Real SCIPgetVarAvgConflictlengthCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
Definition scip_var.c:11863
void SCIPfreeParseVarsPolynomialDataExact(SCIP *scip, SCIP_VAR ****monomialvars, SCIP_RATIONAL ***monomialcoefs, int nmonomials)
Definition scip_var.c:1806
SCIP_RETCODE SCIPsetRelaxSolValsSol(SCIP *scip, SCIP_RELAX *relax, SCIP_SOL *sol, SCIP_Bool includeslp)
Definition scip_var.c:3233
SCIP_RETCODE SCIPchgVarBranchFactor(SCIP *scip, SCIP_VAR *var, SCIP_Real branchfactor)
Definition scip_var.c:9830
SCIP_RETCODE SCIPtightenVarLbGlobal(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:8026
SCIP_RETCODE SCIPcomputeVarLbLocalExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *result)
Definition scip_var.c:8438
SCIP_RETCODE SCIPfixVarExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
Definition scip_var.c:10420
SCIP_RETCODE SCIPinferVarLbProp(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_PROP *inferprop, int inferinfo, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
Definition scip_var.c:7584
SCIP_RETCODE SCIPaddVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real addobj)
Definition scip_var.c:5519
SCIP_RETCODE SCIPcomputeVarUbLocalExact(SCIP *scip, SCIP_VAR *var, SCIP_RATIONAL *result)
Definition scip_var.c:8483
SCIP_Bool lperror
SCIP_Bool cutoff
static SCIP_SOL * sol
SCIP_Real obj
int nvars
SCIP_VAR * var
SCIP_Real primsol
SCIP_Real frac
SCIP_Real newobj
static SCIP_VAR ** vars
static const SCIP_Real scalars[]
Definition lp.c:5959
public methods for problem variables
type definitions for constraints and constraint handlers
struct SCIP_Cons SCIP_CONS
Definition type_cons.h:63
type definitions for branching and inference history
enum SCIP_BranchDir SCIP_BRANCHDIR
type definitions for implications, variable bounds, and cliques
struct SCIP_Clique SCIP_CLIQUE
type definitions for LP management
enum SCIP_LPSolStat SCIP_LPSOLSTAT
Definition type_lp.h:52
enum SCIP_BoundType SCIP_BOUNDTYPE
Definition type_lp.h:60
type definitions for miscellaneous datastructures
enum SCIP_Confidencelevel SCIP_CONFIDENCELEVEL
Definition type_misc.h:53
type definitions for propagators
struct SCIP_Prop SCIP_PROP
Definition type_prop.h:51
struct SCIP_Rational SCIP_RATIONAL
type definitions for relaxators
struct SCIP_Relax SCIP_RELAX
Definition type_relax.h:50
result codes for SCIP callback methods
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
type definitions for SCIP's main datastructure
struct Scip SCIP
Definition type_scip.h:39
type definitions for storing primal CIP solutions
struct SCIP_Sol SCIP_SOL
Definition type_sol.h:57
type definitions for branch and bound tree
struct SCIP_Node SCIP_NODE
Definition type_tree.h:63
type definitions for problem variables
struct SCIP_VarData SCIP_VARDATA
Definition type_var.h:167
struct SCIP_Var SCIP_VAR
Definition type_var.h:166
enum SCIP_ImplintType SCIP_IMPLINTTYPE
Definition type_var.h:117
#define SCIP_DECL_VARDELORIG(x)
Definition type_var.h:180
struct SCIP_BdChgIdx SCIP_BDCHGIDX
Definition type_var.h:151
#define SCIP_DECL_VARTRANS(x)
Definition type_var.h:200
#define SCIP_DECL_VARCOPY(x)
Definition type_var.h:243
#define SCIP_DECL_VARDELTRANS(x)
Definition type_var.h:213
enum SCIP_LockType SCIP_LOCKTYPE
Definition type_var.h:144
enum SCIP_Vartype SCIP_VARTYPE
Definition type_var.h:73