SCIP Doxygen Documentation
Loading...
Searching...
No Matches
prob.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 prob.h
26 * @ingroup INTERNALAPI
27 * @brief internal methods for storing and manipulating the main problem
28 * @author Tobias Achterberg
29 */
30
31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32
33#ifndef __SCIP_PROB_H__
34#define __SCIP_PROB_H__
35
36
37#include "scip/def.h"
39#include "scip/type_retcode.h"
40#include "scip/type_set.h"
41#include "scip/type_stat.h"
42#include "scip/type_event.h"
43#include "scip/type_lp.h"
44#include "scip/type_var.h"
45#include "scip/type_implics.h"
46#include "scip/type_prob.h"
47#include "scip/type_primal.h"
48#include "scip/type_tree.h"
49#include "scip/type_rational.h"
50#include "scip/type_reopt.h"
51#include "scip/type_branch.h"
52#include "scip/type_cons.h"
54#include "scip/type_message.h"
55#include "scip/type_misc.h"
56#include "scip/type_datatree.h"
57
58#ifdef NDEBUG
59#include "scip/struct_prob.h"
60#endif
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66/*
67 * problem creation
68 */
69
70/** creates problem data structure by copying the source problem;
71 * If the problem type requires the use of variable pricers, these pricers should be activated with calls
72 * to SCIPactivatePricer(). These pricers are automatically deactivated, when the problem is freed.
73 */
75 SCIP_PROB** prob, /**< pointer to problem data structure */
76 BMS_BLKMEM* blkmem, /**< block memory */
77 SCIP_SET* set, /**< global SCIP settings */
78 const char* name, /**< problem name */
79 SCIP* sourcescip, /**< source SCIP data structure */
80 SCIP_PROB* sourceprob, /**< source problem structure */
81 SCIP_HASHMAP* varmap, /**< a hashmap to store the mapping of source variables corresponding
82 * target variables, or NULL */
83 SCIP_HASHMAP* consmap, /**< a hashmap to store the mapping of source constraints to the corresponding
84 * target constraints, or NULL */
85 SCIP_Bool original, /**< copy original or transformed problem? */
86 SCIP_Bool global /**< create a global or a local copy? */
87 );
88
89/** creates problem data structure
90 * If the problem type requires the use of variable pricers, these pricers should be activated with calls
91 * to SCIPactivatePricer(). These pricers are automatically deactivated, when the problem is freed.
92 */
94 SCIP_PROB** prob, /**< pointer to problem data structure */
95 BMS_BLKMEM* blkmem, /**< block memory */
96 SCIP_SET* set, /**< global SCIP settings */
97 const char* name, /**< problem name */
98 SCIP_DECL_PROBDELORIG ((*probdelorig)), /**< frees user data of original problem */
99 SCIP_DECL_PROBTRANS ((*probtrans)), /**< creates user data of transformed problem by transforming original user data */
100 SCIP_DECL_PROBDELTRANS((*probdeltrans)), /**< frees user data of transformed problem */
101 SCIP_DECL_PROBINITSOL ((*probinitsol)), /**< solving process initialization method of transformed data */
102 SCIP_DECL_PROBEXITSOL ((*probexitsol)), /**< solving process deinitialization method of transformed data */
103 SCIP_DECL_PROBCOPY ((*probcopy)), /**< copies user data if you want to copy it to a subscip, or NULL */
104 SCIP_PROBDATA* probdata, /**< user problem data set by the reader */
105 SCIP_Bool transformed /**< is this the transformed problem? */
106 );
107
108/** sets callback to free user data of original problem */
110 SCIP_PROB* prob, /**< problem */
111 SCIP_DECL_PROBDELORIG ((*probdelorig)) /**< frees user data of original problem */
112 );
113
114/** sets callback to create user data of transformed problem by transforming original user data */
116 SCIP_PROB* prob, /**< problem */
117 SCIP_DECL_PROBTRANS ((*probtrans)) /**< creates user data of transformed problem by transforming original user data */
118 );
119
120/** sets callback to free user data of transformed problem */
122 SCIP_PROB* prob, /**< problem */
123 SCIP_DECL_PROBDELTRANS((*probdeltrans)) /**< frees user data of transformed problem */
124 );
125
126/** sets solving process initialization callback of transformed data */
128 SCIP_PROB* prob, /**< problem */
129 SCIP_DECL_PROBINITSOL ((*probinitsol)) /**< solving process initialization callback of transformed data */
130 );
131
132/** sets solving process deinitialization callback of transformed data */
134 SCIP_PROB* prob, /**< problem */
135 SCIP_DECL_PROBEXITSOL ((*probexitsol)) /**< solving process deinitialization callback of transformed data */
136 );
137
138/** sets callback to copy user data to copy it to a subscip, or NULL */
139void SCIPprobSetCopy(
140 SCIP_PROB* prob, /**< problem */
141 SCIP_DECL_PROBCOPY ((*probcopy)) /**< copies user data if you want to copy it to a subscip, or NULL */
142 );
143
144/** frees problem data structure */
146 SCIP_PROB** prob, /**< pointer to problem data structure */
147 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
148 BMS_BLKMEM* blkmem, /**< block memory buffer */
149 SCIP_SET* set, /**< global SCIP settings */
150 SCIP_STAT* stat, /**< dynamic problem statistics */
151 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
152 SCIP_LP* lp /**< current LP data (or NULL, if it's the original problem) */
153 );
154
155/** transform problem data into normalized form */
157 SCIP_PROB* source, /**< problem to transform */
158 BMS_BLKMEM* blkmem, /**< block memory buffer */
159 SCIP_SET* set, /**< global SCIP settings */
160 SCIP_STAT* stat, /**< problem statistics */
161 SCIP_PRIMAL* primal, /**< primal data */
162 SCIP_TREE* tree, /**< branch and bound tree */
163 SCIP_REOPT* reopt, /**< reoptimization data structure */
164 SCIP_LP* lp, /**< current LP data */
165 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
166 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
167 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
168 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
169 SCIP_PROB** target /**< pointer to target problem data structure */
170 );
171
172/** resets the global and local bounds of original variables in original problem to their original values */
174 SCIP_PROB* prob, /**< original problem data */
175 BMS_BLKMEM* blkmem, /**< block memory */
176 SCIP_SET* set, /**< global SCIP settings */
177 SCIP_STAT* stat /**< problem statistics */
178 );
179
180/** (Re)Sort the variables, which appear in the four categories (binary, integer, implicit, continuous) after presolve
181 * with respect to their original index (within their categories). Adjust the problem index afterwards which is
182 * supposed to reflect the position in the variable array. This additional (re)sorting is supposed to get more robust
183 * against the order presolving fixed variables. (We also reobtain a possible block structure induced by the user
184 * model)
185 */
187 SCIP_PROB* prob /**< problem data */
188 );
189
190/** possibly create and sort the constraints according to check priorties */
192 SCIP_PROB* prob /**< problem data */
193 );
194
195/*
196 * problem modification
197 */
198
199/** sets user problem data */
200void SCIPprobSetData(
201 SCIP_PROB* prob, /**< problem */
202 SCIP_PROBDATA* probdata /**< user problem data to use */
203 );
204
205/** adds variable's name to the namespace */
207 SCIP_PROB* prob, /**< problem data */
208 SCIP_VAR* var /**< variable */
209 );
210
211/** removes variable's name from the namespace */
213 SCIP_PROB* prob, /**< problem data */
214 SCIP_VAR* var /**< variable */
215 );
216
217/** adds variable to the problem and captures it */
219 SCIP_PROB* prob, /**< problem data */
220 BMS_BLKMEM* blkmem, /**< block memory buffers */
221 SCIP_SET* set, /**< global SCIP settings */
222 SCIP_LP* lp, /**< current LP data */
223 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
224 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
225 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
226 SCIP_VAR* var /**< variable to add */
227 );
228
229/** marks variable to be removed from the problem; however, the variable is NOT removed from the constraints */
231 SCIP_PROB* prob, /**< problem data */
232 BMS_BLKMEM* blkmem, /**< block memory */
233 SCIP_SET* set, /**< global SCIP settings */
234 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
235 SCIP_VAR* var, /**< problem variable */
236 SCIP_Bool* deleted /**< pointer to store whether marking variable to be deleted was successful */
237 );
238
239/** actually removes the deleted variables from the problem and releases them */
241 SCIP_PROB* prob, /**< problem data */
242 BMS_BLKMEM* blkmem, /**< block memory */
243 SCIP_SET* set, /**< global SCIP settings */
244 SCIP_STAT* stat, /**< dynamic problem statistics */
245 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
246 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
247 SCIP_LP* lp, /**< current LP data (may be NULL) */
248 SCIP_BRANCHCAND* branchcand /**< branching candidate storage */
249 );
250
251/** changes the type of a variable in the problem */
253 SCIP_PROB* prob, /**< problem data */
254 BMS_BLKMEM* blkmem, /**< block memory */
255 SCIP_SET* set, /**< global SCIP settings */
256 SCIP_PRIMAL* primal, /**< primal data */
257 SCIP_LP* lp, /**< current LP data */
258 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
259 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
260 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
261 SCIP_VAR* var, /**< variable to change type of */
262 SCIP_VARTYPE vartype /**< new type of variable */
263 );
264
265/** changes the implied integral type of a variable in the problem */
267 SCIP_PROB* prob, /**< problem data */
268 BMS_BLKMEM* blkmem, /**< block memory */
269 SCIP_SET* set, /**< global SCIP settings */
270 SCIP_PRIMAL* primal, /**< primal data */
271 SCIP_LP* lp, /**< current LP data */
272 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
273 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
274 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
275 SCIP_VAR* var, /**< variable to change implied integral type of */
276 SCIP_IMPLINTTYPE impltype /**< new implied integral type of variable */
277 );
278
279/** informs problem, that the given loose problem variable changed its status */
281 SCIP_PROB* prob, /**< problem data */
282 BMS_BLKMEM* blkmem, /**< block memory */
283 SCIP_SET* set, /**< global SCIP settings */
284 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
285 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
286 SCIP_VAR* var /**< problem variable */
287 );
288
289/** adds constraint's name to the namespace */
291 SCIP_PROB* prob, /**< problem data */
292 SCIP_CONS* cons /**< constraint */
293 );
294
295/** remove constraint's name from the namespace */
297 SCIP_PROB* prob, /**< problem data */
298 SCIP_CONS* cons /**< constraint */
299 );
300
301/** adds constraint to the problem and captures it;
302 * a local constraint is automatically upgraded into a global constraint
303 */
305 SCIP_PROB* prob, /**< problem data */
306 SCIP_SET* set, /**< global SCIP settings */
307 SCIP_STAT* stat, /**< dynamic problem statistics */
308 SCIP_CONS* cons /**< constraint to add */
309 );
310
311/** releases and removes constraint from the problem; if the user has not captured the constraint for his own use, the
312 * constraint may be invalid after the call
313 */
315 SCIP_PROB* prob, /**< problem data */
316 BMS_BLKMEM* blkmem, /**< block memory */
317 SCIP_SET* set, /**< global SCIP settings */
318 SCIP_STAT* stat, /**< dynamic problem statistics */
319 SCIP_CONS* cons /**< constraint to remove */
320 );
321
322/** remembers the current number of constraints in the problem's internal data structure
323 * - resets maximum number of constraints to current number of constraints
324 * - remembers current number of constraints as starting number of constraints
325 */
327 SCIP_PROB* prob /**< problem data */
328 );
329
330/** sets objective sense: minimization or maximization */
332 SCIP_PROB* prob, /**< problem data */
333 SCIP_OBJSENSE objsense /**< new objective sense */
334 );
335
336/** adds value to objective offset */
338 SCIP_PROB* prob, /**< problem data */
339 SCIP_Real addval /**< value to add to objective offset */
340 );
341
342/** adds value to objective offset */
344 SCIP_PROB* prob, /**< problem data */
345 SCIP_RATIONAL* addval /**< value to add to objective offset */
346 );
347
348/** sets the dual bound on objective function */
350 SCIP_PROB* prob, /**< problem data */
351 SCIP_Real dualbound /**< external dual bound */
352 );
353
354/** sets limit on objective function, such that only solutions better than this limit are accepted */
356 SCIP_PROB* prob, /**< problem data */
357 SCIP_Real objlim /**< external objective limit */
358 );
359
360/** informs the problem, that its objective value is always integral in every feasible solution */
362 SCIP_PROB* prob /**< problem data */
363 );
364
365/** sets integral objective value flag, if all variables with non-zero objective values are integral and have
366 * integral objective value and also updates the cutoff bound if primal solution is already known
367 */
369 SCIP_PROB* transprob, /**< tranformed problem data */
370 SCIP_PROB* origprob, /**< original problem data */
371 BMS_BLKMEM* blkmem, /**< block memory */
372 SCIP_SET* set, /**< global SCIP settings */
373 SCIP_STAT* stat, /**< problem statistics data */
374 SCIP_PRIMAL* primal, /**< primal data */
375 SCIP_TREE* tree, /**< branch and bound tree */
376 SCIP_REOPT* reopt, /**< reoptimization data structure */
377 SCIP_LP* lp, /**< current LP data */
378 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
379 SCIP_EVENTFILTER* eventfilter /**< global event filter */
380 );
381
382/** if possible, scales objective function such that it is integral with gcd = 1 */
384 SCIP_PROB* transprob, /**< tranformed problem data */
385 SCIP_PROB* origprob, /**< original problem data */
386 BMS_BLKMEM* blkmem, /**< block memory */
387 SCIP_SET* set, /**< global SCIP settings */
388 SCIP_STAT* stat, /**< problem statistics data */
389 SCIP_PRIMAL* primal, /**< primal data */
390 SCIP_TREE* tree, /**< branch and bound tree */
391 SCIP_REOPT* reopt, /**< reoptimization data structure */
392 SCIP_LP* lp, /**< current LP data */
393 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
394 SCIP_EVENTFILTER* eventfilter /**< global event filter */
395 );
396
397/** remembers the current solution as root solution in the problem variables */
399 SCIP_PROB* prob, /**< problem data */
400 SCIP_SET* set, /**< global SCIP settings */
401 SCIP_STAT* stat, /**< SCIP statistics */
402 SCIP_LP* lp, /**< current LP data */
403 SCIP_Bool roothaslp /**< is the root solution from LP? */
404 );
405
406/** remembers the best solution w.r.t. root reduced cost propagation as root solution in the problem variables */
408 SCIP_PROB* prob, /**< problem data */
409 SCIP_SET* set, /**< global SCIP settings */
410 SCIP_STAT* stat, /**< problem statistics */
411 SCIP_LP* lp /**< current LP data */
412 );
413
414/** informs problem, that the presolving process was finished, and updates all internal data structures */
416 SCIP_PROB* prob, /**< problem data */
417 SCIP_SET* set /**< global SCIP settings */
418 );
419
420/** initializes problem for branch and bound process */
422 SCIP_PROB* prob, /**< problem data */
423 SCIP_SET* set /**< global SCIP settings */
424 );
425
426/** deinitializes problem after branch and bound process, and converts all COLUMN variables back into LOOSE variables */
428 SCIP_PROB* prob, /**< problem data */
429 BMS_BLKMEM* blkmem, /**< block memory */
430 SCIP_SET* set, /**< global SCIP settings */
431 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
432 SCIP_LP* lp, /**< current LP data */
433 SCIP_Bool restart /**< was this exit solve call triggered by a restart? */
434 );
435
436
437
438
439/*
440 * problem information
441 */
442
443/** sets problem name */
445 SCIP_PROB* prob, /**< problem data */
446 const char* name /**< name to be set */
447 );
448
449/** returns the number of variables with non-zero objective coefficient */
451 SCIP_PROB* prob, /**< problem data */
452 SCIP_SET* set /**< global SCIP settings */
453 );
454
455/** returns the minimal absolute non-zero objective coefficient
456 *
457 * @note currently, this is only used for statistics and printed after the solving process. if this information is
458 * needed during the (pre)solving process this should be implemented more efficiently, e.g., updating the minimal
459 * absolute non-zero coefficient every time an objective coefficient has changed.
460 */
462 SCIP_PROB* prob, /**< problem data */
463 SCIP_SET* set /**< global SCIP settings */
464 );
465
466/** returns the maximal absolute non-zero objective coefficient
467 *
468 * @note currently, this is only used for statistics and printed after the solving process. if this information is
469 * needed during the (pre)solving process this should be implemented more efficiently, e.g., updating the maximal
470 * absolute non-zero coefficient every time an objective coefficient has changed.
471 */
473 SCIP_PROB* prob, /**< problem data */
474 SCIP_SET* set /**< global SCIP settings */
475 );
476
477/** update the number of variables with non-zero objective coefficient */
479 SCIP_PROB* prob, /**< problem data */
480 SCIP_SET* set, /**< global SCIP settings */
481 SCIP_Real oldobj, /**< old objective value for variable */
482 SCIP_Real newobj /**< new objective value for variable */
483 );
484
485/** update the dual bound if its better as the current one */
487 SCIP_PROB* prob, /**< problem data */
488 SCIP_Real newbound /**< new dual bound for the node (if it's tighter than the old one) */
489 );
490
491/** invalidates the dual bound */
493 SCIP_PROB* prob /**< problem data */
494 );
495
496/** returns the external value of the given internal objective value */
498 SCIP_PROB* transprob, /**< tranformed problem data */
499 SCIP_PROB* origprob, /**< original problem data */
500 SCIP_SET* set, /**< global SCIP settings */
501 SCIP_Real objval /**< internal objective value */
502 );
503
504/** computes the exact external value of the given internal objective value */
506 SCIP_PROB* transprob, /**< tranformed problem data */
507 SCIP_PROB* origprob, /**< original problem data */
508 SCIP_SET* set, /**< global SCIP settings */
509 SCIP_RATIONAL* objval, /**< internal objective value */
510 SCIP_RATIONAL* objvalext /**< store external objective value */
511 );
512
513/** returns the internal value of the given external objective value */
515 SCIP_PROB* transprob, /**< tranformed problem data */
516 SCIP_PROB* origprob, /**< original problem data */
517 SCIP_SET* set, /**< global SCIP settings */
518 SCIP_Real objval /**< external objective value */
519 );
520
521/** returns the internal value of the given external objective value */
523 SCIP_PROB* transprob, /**< tranformed problem data */
524 SCIP_PROB* origprob, /**< original problem data */
525 SCIP_SET* set, /**< global SCIP settings */
526 SCIP_RATIONAL* objval, /**< internal objective value */
527 SCIP_RATIONAL* objvalint /**< store internal objective value */
528 );
529
530/** returns variable of the problem with given name */
532 SCIP_PROB* prob, /**< problem data */
533 const char* name /**< name of variable to find */
534 );
535
536/** returns constraint of the problem with given name */
538 SCIP_PROB* prob, /**< problem data */
539 const char* name /**< name of variable to find */
540 );
541
542/** displays current pseudo solution */
544 SCIP_PROB* prob, /**< problem data */
545 SCIP_SET* set, /**< global SCIP settings */
546 SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
547 );
548
549/** outputs problem statistics */
551 SCIP_PROB* prob, /**< problem data */
552 SCIP_SET* set, /**< global SCIP settings */
553 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
554 FILE* file /**< output file (or NULL for standard output) */
555 );
556
557
558/** collects problem statistics in a SCIP_DATATREE object */
560 SCIP_PROB* prob, /**< problem data */
561 BMS_BLKMEM* blkmem, /**< block memory */
562 SCIP_SET* set, /**< global SCIP settings */
563 SCIP_DATATREE* datatree /**< data tree */
564 );
565
566#ifndef NDEBUG
567
568/* In debug mode, the following methods are implemented as function calls to ensure
569 * type validity.
570 */
571
572/** is the problem permuted */
574 SCIP_PROB* prob
575 );
576
577/** mark the problem as permuted */
579 SCIP_PROB* prob
580 );
581
582/** is the problem data transformed */
584 SCIP_PROB* prob /**< problem data */
585 );
586
587/** returns whether the objective value is known to be integral in every feasible solution */
589 SCIP_PROB* prob /**< problem data */
590 );
591
592/** returns TRUE iff all columns, i.e. every variable with non-empty column w.r.t. all ever created rows, are present
593 * in the LP, and FALSE, if there are additional already existing columns, that may be added to the LP in pricing
594 */
596 SCIP_PROB* prob, /**< problem data */
597 SCIP_SET* set, /**< global SCIP settings */
598 SCIP_LP* lp /**< current LP data */
599 );
600
601/** gets limit on objective function in external space */
603 SCIP_PROB* prob, /**< problem data */
604 SCIP_SET* set /**< global SCIP settings */
605 );
606
607/** gets user problem data */
609 SCIP_PROB* prob /**< problem */
610 );
611
612/** gets problem name */
613const char* SCIPprobGetName(
614 SCIP_PROB* prob /**< problem data */
615 );
616
617/** gets number of problem variables */
619 SCIP_PROB* prob /**< problem data */
620 );
621
622/** gets number of binary problem variables */
624 SCIP_PROB* prob /**< problem data */
625 );
626
627/** gets number of integer problem variables */
629 SCIP_PROB* prob /**< problem data */
630 );
631
632/** gets number of implied integral problem variables of any type */
634 SCIP_PROB* prob /**< problem data */
635 );
636
637/** gets number of continuous problem variables */
639 SCIP_PROB* prob /**< problem data */
640 );
641
642/** gets problem variables */
644 SCIP_PROB* prob /**< problem data */
645 );
646
647/** gets number of fixed variables */
649 SCIP_PROB* prob /**< problem data */
650 );
651
652/** gets fixed variables */
654 SCIP_PROB* prob /**< problem data */
655 );
656
657/** gets number of variables existing when problem solving started */
659 SCIP_PROB* prob /**< problem data */
660 );
661
662/** gets number of problem constraints */
664 SCIP_PROB* prob /**< problem data */
665 );
666
667/** gets problem constraints */
669 SCIP_PROB* prob /**< problem data */
670 );
671
672/** gets maximum number of constraints existing at the same time */
674 SCIP_PROB* prob /**< problem data */
675 );
676
677/** gets number of constraints existing when problem solving started */
679 SCIP_PROB* prob /**< problem data */
680 );
681
682/** gets the objective sense */
684 SCIP_PROB* prob /**< problem data */
685 );
686
687/** gets the objective offset */
689 SCIP_PROB* prob /**< problem data */
690 );
691
692/** gets the objective scalar */
694 SCIP_PROB* prob /**< problem data */
695 );
696
697/** gets the exact objective offset */
699 SCIP_PROB* prob /**< problem data */
700 );
701
702/** gets the exact objective scalar */
704 SCIP_PROB* prob /**< problem data */
705 );
706
707/** is constraint compression enabled for this problem? */
709 SCIP_PROB* prob /**< problem data */
710 );
711
712/** enable problem compression, i.e., constraints can reduce memory size by removing fixed variables during creation */
714 SCIP_PROB* prob /**< problem data */
715 );
716
717#else
718
719/* In optimized mode, the methods are implemented as defines to reduce the number of function calls and
720 * speed up the algorithms.
721 */
722
723#define SCIPprobIsPermuted(prob) ((prob)->permuted)
724#define SCIPprobMarkPermuted(prob) ((prob)->permuted = TRUE)
725#define SCIPprobIsTransformed(prob) ((prob)->transformed)
726#define SCIPprobIsObjIntegral(prob) ((prob)->objisintegral)
727#define SCIPprobAllColsInLP(prob,set,lp) (SCIPlpGetNCols(lp) == (prob)->ncolvars && (set)->nactivepricers == 0)
728#define SCIPprobGetObjlim(prob,set) \
729 ((prob)->objlim >= SCIP_INVALID ? (SCIP_Real)((prob)->objsense) * SCIPsetInfinity(set) : (prob)->objlim)
730#define SCIPprobGetData(prob) ((prob)->probdata)
731#define SCIPprobGetName(prob) ((prob)->name)
732#define SCIPprobGetName(prob) ((prob)->name)
733#define SCIPprobGetNVars(prob) ((prob)->nvars)
734#define SCIPprobGetNBinVars(prob) ((prob)->nbinvars)
735#define SCIPprobGetNIntVars(prob) ((prob)->nintvars)
736#define SCIPprobGetNImplVars(prob) ((prob)->nbinimplvars + (prob)->nintimplvars + (prob)->ncontimplvars)
737#define SCIPprobGetNContVars(prob) ((prob)->ncontvars)
738#define SCIPprobGetVars(prob) ((prob)->vars)
739#define SCIPprobGetNFixedVars(prob) ((prob)->nfixedvars)
740#define SCIPprobGetFixedVars(prob) ((prob)->fixedvars)
741#define SCIPprobGetStartNVars(prob) ((prob)->startnvars)
742#define SCIPprobGetNConss(prob) ((prob)->nconss)
743#define SCIPprobGetConss(prob) ((prob)->conss)
744#define SCIPprobGetMaxNConss(prob) ((prob)->maxnconss)
745#define SCIPprobGetStartNConss(prob) ((prob)->startnconss)
746#define SCIPprobGetObjsense(prob) ((prob)->objsense)
747#define SCIPprobGetObjoffset(prob) ((prob)->objoffset)
748#define SCIPprobGetObjscale(prob) ((prob)->objscale)
749#define SCIPprobGetObjoffsetExact(prob) ((prob)->objoffsetexact)
750#define SCIPprobGetObjscaleExact(prob) ((prob)->objscaleexact)
751#define SCIPprobIsConsCompressionEnabled(prob) ((prob)->conscompression)
752#define SCIPprobEnableConsCompression(prob) ((prob)->conscompression = TRUE)
753#endif
754
755#ifdef __cplusplus
756}
757#endif
758
759#endif
common defines and data types used in all packages of SCIP
#define SCIP_Bool
Definition def.h:98
#define SCIP_Real
Definition def.h:163
SCIP_Real objval
SCIP_VAR * var
SCIP_Real newobj
SCIP_Real oldobj
memory allocation routines
struct BMS_BlkMem BMS_BLKMEM
Definition memory.h:437
void SCIPprobSetDelorig(SCIP_PROB *prob,)
Definition prob.c:368
void SCIPprobSetExitsol(SCIP_PROB *prob,)
Definition prob.c:412
void SCIPprobPrintStatistics(SCIP_PROB *prob, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
Definition prob.c:2686
void SCIPprobSetCopy(SCIP_PROB *prob,)
Definition prob.c:423
SCIP_RETCODE SCIPprobCollectStatistics(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_DATATREE *datatree)
Definition prob.c:2708
SCIP_Bool SCIPprobIsPermuted(SCIP_PROB *prob)
Definition prob.c:2783
SCIP_RETCODE SCIPprobExitPresolve(SCIP_PROB *prob, SCIP_SET *set)
Definition prob.c:2290
void SCIPprobUpdateNObjVars(SCIP_PROB *prob, SCIP_SET *set, SCIP_Real oldobj, SCIP_Real newobj)
Definition prob.c:1874
int SCIPprobGetNContVars(SCIP_PROB *prob)
Definition prob.c:2904
SCIP_RETCODE SCIPprobAddConsName(SCIP_PROB *prob, SCIP_CONS *cons)
Definition prob.c:1470
SCIP_RETCODE SCIPprobTransform(SCIP_PROB *source, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CONFLICTSTORE *conflictstore, SCIP_PROB **target)
Definition prob.c:553
SCIP_CONS ** SCIPprobGetConss(SCIP_PROB *prob)
Definition prob.c:2958
int SCIPprobGetNFixedVars(SCIP_PROB *prob)
Definition prob.c:2922
void SCIPprobInvalidateDualbound(SCIP_PROB *prob)
Definition prob.c:1918
SCIP_RETCODE SCIPprobAddVarName(SCIP_PROB *prob, SCIP_VAR *var)
Definition prob.c:1065
void SCIPprobInternObjvalExact(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_RATIONAL *objval, SCIP_RATIONAL *objvalint)
Definition prob.c:2599
void SCIPprobSetObjIntegral(SCIP_PROB *prob)
Definition prob.c:1724
SCIP_RETCODE SCIPprobVarChangedStatus(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BRANCHCAND *branchcand, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var)
Definition prob.c:1412
const char * SCIPprobGetName(SCIP_PROB *prob)
Definition prob.c:2859
SCIP_Real SCIPprobGetObjoffset(SCIP_PROB *prob)
Definition prob.c:2994
int SCIPprobGetNConss(SCIP_PROB *prob)
Definition prob.c:2949
int SCIPprobGetNObjVars(SCIP_PROB *prob, SCIP_SET *set)
Definition prob.c:2423
SCIP_Real SCIPprobGetAbsMinObjCoef(SCIP_PROB *prob, SCIP_SET *set)
Definition prob.c:2470
SCIP_RETCODE SCIPprobPerformVarDeletions(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand)
Definition prob.c:1233
void SCIPprobSetTrans(SCIP_PROB *prob,)
Definition prob.c:379
SCIP_Real SCIPprobGetAbsMaxObjCoef(SCIP_PROB *prob, SCIP_SET *set)
Definition prob.c:2497
SCIP_RETCODE SCIPprobRemoveVarName(SCIP_PROB *prob, SCIP_VAR *var)
Definition prob.c:1081
int SCIPprobGetStartNConss(SCIP_PROB *prob)
Definition prob.c:2976
SCIP_Real SCIPprobGetObjlim(SCIP_PROB *prob, SCIP_SET *set)
Definition prob.c:2837
void SCIPprobUpdateDualbound(SCIP_PROB *prob, SCIP_Real newbound)
Definition prob.c:1891
SCIP_RETCODE SCIPprobInitSolve(SCIP_PROB *prob, SCIP_SET *set)
Definition prob.c:2299
void SCIPprobMarkNConss(SCIP_PROB *prob)
Definition prob.c:1643
SCIP_RATIONAL * SCIPprobGetObjoffsetExact(SCIP_PROB *prob)
Definition prob.c:3014
SCIP_OBJSENSE SCIPprobGetObjsense(SCIP_PROB *prob)
Definition prob.c:2985
void SCIPprobPrintPseudoSol(SCIP_PROB *prob, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition prob.c:2664
int SCIPprobGetStartNVars(SCIP_PROB *prob)
Definition prob.c:2940
SCIP_RETCODE SCIPprobSetName(SCIP_PROB *prob, const char *name)
Definition prob.c:2409
void SCIPprobSetData(SCIP_PROB *prob, SCIP_PROBDATA *probdata)
Definition prob.c:778
SCIP_Real SCIPprobGetObjscale(SCIP_PROB *prob)
Definition prob.c:3004
void SCIPprobAddObjoffset(SCIP_PROB *prob, SCIP_Real addval)
Definition prob.c:1669
SCIP_RETCODE SCIPprobChgVarImplType(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_IMPLINTTYPE impltype)
Definition prob.c:1358
SCIP_VAR * SCIPprobFindVar(SCIP_PROB *prob, const char *name)
Definition prob.c:2626
int SCIPprobGetNImplVars(SCIP_PROB *prob)
Definition prob.c:2895
SCIP_RETCODE SCIPprobExitSolve(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Bool restart)
Definition prob.c:2334
SCIP_RETCODE SCIPprobCreate(SCIP_PROB **prob, BMS_BLKMEM *blkmem, SCIP_SET *set, const char *name, SCIP_DECL_PROBDELORIG((*probdelorig)), SCIP_DECL_PROBTRANS((*probtrans)), SCIP_DECL_PROBDELTRANS((*probdeltrans)), SCIP_DECL_PROBINITSOL((*probinitsol)), SCIP_DECL_PROBEXITSOL((*probexitsol)), SCIP_DECL_PROBCOPY((*probcopy)), SCIP_PROBDATA *probdata, SCIP_Bool transformed)
Definition prob.c:272
void SCIPprobSetObjlim(SCIP_PROB *prob, SCIP_Real objlim)
Definition prob.c:1713
SCIP_VAR ** SCIPprobGetFixedVars(SCIP_PROB *prob)
Definition prob.c:2931
SCIP_RETCODE SCIPprobDelVar(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Bool *deleted)
Definition prob.c:1171
SCIP_Bool SCIPprobIsObjIntegral(SCIP_PROB *prob)
Definition prob.c:2813
SCIP_RETCODE SCIPprobAddVar(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_VAR *var)
Definition prob.c:1096
void SCIPprobEnableConsCompression(SCIP_PROB *prob)
Definition prob.c:3046
SCIP_CONS * SCIPprobFindCons(SCIP_PROB *prob, const char *name)
Definition prob.c:2645
void SCIPprobMarkPermuted(SCIP_PROB *prob)
Definition prob.c:2793
SCIP_RETCODE SCIPprobRemoveConsName(SCIP_PROB *prob, SCIP_CONS *cons)
Definition prob.c:1485
int SCIPprobGetNIntVars(SCIP_PROB *prob)
Definition prob.c:2886
SCIP_RETCODE SCIPprobDelCons(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
Definition prob.c:1578
int SCIPprobGetNVars(SCIP_PROB *prob)
Definition prob.c:2868
SCIP_PROBDATA * SCIPprobGetData(SCIP_PROB *prob)
Definition prob.c:2849
void SCIPprobSetInitsol(SCIP_PROB *prob,)
Definition prob.c:401
SCIP_RETCODE SCIPprobChgVarType(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_VARTYPE vartype)
Definition prob.c:1304
SCIP_Real SCIPprobExternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
Definition prob.c:2520
void SCIPprobResortVars(SCIP_PROB *prob)
Definition prob.c:684
SCIP_RETCODE SCIPprobFree(SCIP_PROB **prob, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
Definition prob.c:434
SCIP_RETCODE SCIPprobCopy(SCIP_PROB **prob, BMS_BLKMEM *blkmem, SCIP_SET *set, const char *name, SCIP *sourcescip, SCIP_PROB *sourceprob, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool original, SCIP_Bool global)
Definition prob.c:208
SCIP_RETCODE SCIPprobScaleObj(SCIP_PROB *transprob, SCIP_PROB *origprob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
Definition prob.c:2026
SCIP_RETCODE SCIPprobAddCons(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
Definition prob.c:1507
SCIP_RETCODE SCIPprobCheckObjIntegral(SCIP_PROB *transprob, SCIP_PROB *origprob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
Definition prob.c:1804
int SCIPprobGetMaxNConss(SCIP_PROB *prob)
Definition prob.c:2967
SCIP_RETCODE SCIPprobResetBounds(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
Definition prob.c:658
void SCIPprobSetDualbound(SCIP_PROB *prob, SCIP_Real dualbound)
Definition prob.c:1702
void SCIPprobStoreRootSol(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Bool roothaslp)
Definition prob.c:2165
int SCIPprobGetNBinVars(SCIP_PROB *prob)
Definition prob.c:2877
SCIP_RATIONAL * SCIPprobGetObjscaleExact(SCIP_PROB *prob)
Definition prob.c:3025
SCIP_VAR ** SCIPprobGetVars(SCIP_PROB *prob)
Definition prob.c:2913
void SCIPprobSetDeltrans(SCIP_PROB *prob,)
Definition prob.c:390
SCIP_Bool SCIPprobAllColsInLP(SCIP_PROB *prob, SCIP_SET *set, SCIP_LP *lp)
Definition prob.c:2825
void SCIPprobUpdateBestRootSol(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
Definition prob.c:2192
SCIP_Bool SCIPprobIsTransformed(SCIP_PROB *prob)
Definition prob.c:2803
void SCIPprobExternObjvalExact(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_RATIONAL *objval, SCIP_RATIONAL *objvalext)
Definition prob.c:2546
SCIP_Bool SCIPprobIsConsCompressionEnabled(SCIP_PROB *prob)
Definition prob.c:3036
void SCIPprobAddObjoffsetExact(SCIP_PROB *prob, SCIP_RATIONAL *addval)
Definition prob.c:1685
void SCIPprobSetObjsense(SCIP_PROB *prob, SCIP_OBJSENSE objsense)
Definition prob.c:1656
SCIP_Real SCIPprobInternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
Definition prob.c:2573
SCIP_RETCODE SCIPprobSortConssCheck(SCIP_PROB *prob)
Definition prob.c:748
datastructures for storing and manipulating the main problem
type definitions for branching rules
struct SCIP_BranchCand SCIP_BRANCHCAND
Definition type_branch.h:55
type definitions for conflict store
struct SCIP_ConflictStore SCIP_CONFLICTSTORE
type definitions for constraints and constraint handlers
struct SCIP_Cons SCIP_CONS
Definition type_cons.h:63
type definitions for data tree
struct SCIP_Datatree SCIP_DATATREE
type definitions for managing events
struct SCIP_EventFilter SCIP_EVENTFILTER
Definition type_event.h:180
struct SCIP_EventQueue SCIP_EVENTQUEUE
Definition type_event.h:181
type definitions for implications, variable bounds, and cliques
struct SCIP_CliqueTable SCIP_CLIQUETABLE
type definitions for LP management
struct SCIP_Lp SCIP_LP
Definition type_lp.h:111
type definitions for message output methods
struct SCIP_Messagehdlr SCIP_MESSAGEHDLR
type definitions for miscellaneous datastructures
struct SCIP_HashMap SCIP_HASHMAP
Definition type_misc.h:106
type definitions for collecting primal CIP solutions and primal informations
struct SCIP_Primal SCIP_PRIMAL
Definition type_primal.h:39
type definitions for storing and manipulating the main problem
#define SCIP_DECL_PROBCOPY(x)
Definition type_prob.h:150
#define SCIP_DECL_PROBDELTRANS(x)
Definition type_prob.h:95
#define SCIP_DECL_PROBEXITSOL(x)
Definition type_prob.h:119
struct SCIP_ProbData SCIP_PROBDATA
Definition type_prob.h:53
struct SCIP_Prob SCIP_PROB
Definition type_prob.h:52
#define SCIP_DECL_PROBDELORIG(x)
Definition type_prob.h:64
#define SCIP_DECL_PROBTRANS(x)
Definition type_prob.h:83
#define SCIP_DECL_PROBINITSOL(x)
Definition type_prob.h:106
enum SCIP_Objsense SCIP_OBJSENSE
Definition type_prob.h:50
type definitions for rational numbers
struct SCIP_Rational SCIP_RATIONAL
type definitions for collecting reoptimization information
struct SCIP_Reopt SCIP_REOPT
Definition type_reopt.h:39
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
struct Scip SCIP
Definition type_scip.h:39
type definitions for global SCIP settings
struct SCIP_Set SCIP_SET
Definition type_set.h:71
type definitions for problem statistics
struct SCIP_Stat SCIP_STAT
Definition type_stat.h:66
type definitions for branch and bound tree
struct SCIP_Tree SCIP_TREE
Definition type_tree.h:65
type definitions for problem variables
struct SCIP_Var SCIP_VAR
Definition type_var.h:166
enum SCIP_ImplintType SCIP_IMPLINTTYPE
Definition type_var.h:117
enum SCIP_Vartype SCIP_VARTYPE
Definition type_var.h:73