SCIP Doxygen Documentation
Loading...
Searching...
No Matches
sol.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 sol.h
26 * @ingroup INTERNALAPI
27 * @brief internal methods for storing primal CIP solutions
28 * @author Tobias Achterberg
29 */
30
31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32
33#ifndef __SCIP_SOL_H__
34#define __SCIP_SOL_H__
35
36
37#include <stdio.h>
38
39#include "scip/def.h"
41#include "scip/type_retcode.h"
42#include "scip/type_set.h"
43#include "scip/type_stat.h"
44#include "scip/type_lp.h"
45#include "scip/type_lpexact.h"
46#include "scip/type_nlp.h"
47#include "scip/type_var.h"
48#include "scip/type_prob.h"
49#include "scip/type_sol.h"
50#include "scip/type_primal.h"
51#include "scip/type_tree.h"
52#include "scip/type_heur.h"
53#include "scip/pub_sol.h"
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59/** creates primal CIP solution, initialized to zero */
61 SCIP_SOL** sol, /**< pointer to primal CIP solution */
62 BMS_BLKMEM* blkmem, /**< block memory */
63 SCIP_SET* set, /**< global SCIP settings */
64 SCIP_STAT* stat, /**< problem statistics data */
65 SCIP_PRIMAL* primal, /**< primal data */
66 SCIP_TREE* tree, /**< branch and bound tree, or NULL */
67 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
68 );
69
70/** creates primal CIP solution with exact rational values, initialized to zero */
72 SCIP_SOL** sol, /**< pointer to primal CIP solution */
73 BMS_BLKMEM* blkmem, /**< block memory */
74 SCIP_SET* set, /**< global SCIP settings */
75 SCIP_STAT* stat, /**< problem statistics data */
76 SCIP_PRIMAL* primal, /**< primal data */
77 SCIP_TREE* tree, /**< branch and bound tree */
78 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
79 );
80
81/** creates primal CIP solution in original problem space, initialized to the offset in the original problem */
83 SCIP_SOL** sol, /**< pointer to primal CIP solution */
84 BMS_BLKMEM* blkmem, /**< block memory */
85 SCIP_SET* set, /**< global SCIP settings */
86 SCIP_STAT* stat, /**< problem statistics data */
87 SCIP_PROB* origprob, /**< original problem data */
88 SCIP_PRIMAL* primal, /**< primal data */
89 SCIP_TREE* tree, /**< branch and bound tree */
90 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
91 );
92
93/** creates exact primal CIP solution in original problem space, initialized to the offset in the original problem */
95 SCIP_SOL** sol, /**< pointer to primal CIP solution */
96 BMS_BLKMEM* blkmem, /**< block memory */
97 SCIP_SET* set, /**< global SCIP settings */
98 SCIP_STAT* stat, /**< problem statistics data */
99 SCIP_PROB* origprob, /**< original problem data */
100 SCIP_PRIMAL* primal, /**< primal data */
101 SCIP_TREE* tree, /**< branch and bound tree */
102 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
103 );
104
105/** creates a copy of a primal CIP solution */
107 SCIP_SOL** sol, /**< pointer to store the copy of the primal CIP solution */
108 BMS_BLKMEM* blkmem, /**< block memory */
109 SCIP_SET* set, /**< global SCIP settings */
110 SCIP_STAT* stat, /**< problem statistics data */
111 SCIP_PRIMAL* primal, /**< primal data */
112 SCIP_SOL* sourcesol /**< primal CIP solution to copy */
113 );
114
115/** transformes given original solution to the transformed space; a corresponding transformed solution has to be given
116 * which is copied into the existing solution and freed afterwards
117 */
119 SCIP_SOL* sol, /**< primal CIP solution to change, living in original space */
120 SCIP_SOL** transsol, /**< pointer to corresponding transformed primal CIP solution */
121 BMS_BLKMEM* blkmem, /**< block memory */
122 SCIP_SET* set, /**< global SCIP settings */
123 SCIP_PRIMAL* primal /**< primal data */
124 );
125
126/** adjusts solution values of implied integral variables in handed solution, solution objective value is not
127 * deteriorated by this method
128 */
130 SCIP_SOL* sol, /**< primal CIP solution */
131 SCIP_SET* set, /**< global SCIP settings */
132 SCIP_STAT* stat, /**< problem statistics data */
133 SCIP_PROB* prob, /**< either original or transformed problem, depending on sol origin */
134 SCIP_TREE* tree, /**< branch and bound tree */
135 SCIP_Bool uselprows /**< should LP row information be considered for none-objective variables */
136 );
137
138/** creates primal CIP solution, initialized to the current LP solution */
140 SCIP_SOL** sol, /**< pointer to primal CIP solution */
141 BMS_BLKMEM* blkmem, /**< block memory */
142 SCIP_SET* set, /**< global SCIP settings */
143 SCIP_STAT* stat, /**< problem statistics data */
144 SCIP_PROB* prob, /**< transformed problem data */
145 SCIP_PRIMAL* primal, /**< primal data */
146 SCIP_TREE* tree, /**< branch and bound tree */
147 SCIP_LP* lp, /**< current LP data */
148 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
149 );
150
151/** creates primal CIP solution with exact rational values, initialized to the current LP solution */
153 SCIP_SOL** sol, /**< pointer to primal CIP solution */
154 BMS_BLKMEM* blkmem, /**< block memory */
155 SCIP_SET* set, /**< global SCIP settings */
156 SCIP_STAT* stat, /**< problem statistics data */
157 SCIP_PRIMAL* primal, /**< primal data */
158 SCIP_TREE* tree, /**< branch and bound tree */
159 SCIP_LPEXACT* lp, /**< current LP data */
160 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
161 );
162
163/** creates primal CIP solution, initialized to the current NLP solution */
165 SCIP_SOL** sol, /**< pointer to primal CIP solution */
166 BMS_BLKMEM* blkmem, /**< block memory */
167 SCIP_SET* set, /**< global SCIP settings */
168 SCIP_STAT* stat, /**< problem statistics data */
169 SCIP_PRIMAL* primal, /**< primal data */
170 SCIP_TREE* tree, /**< branch and bound tree */
171 SCIP_NLP* nlp, /**< current NLP data */
172 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
173 );
174
175/** creates primal CIP solution, initialized to the current relaxation solution */
177 SCIP_SOL** sol, /**< pointer to primal CIP solution */
178 BMS_BLKMEM* blkmem, /**< block memory */
179 SCIP_SET* set, /**< global SCIP settings */
180 SCIP_STAT* stat, /**< problem statistics data */
181 SCIP_PRIMAL* primal, /**< primal data */
182 SCIP_TREE* tree, /**< branch and bound tree */
183 SCIP_RELAXATION* relaxation, /**< global relaxation data */
184 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
185 );
186
187/** creates primal CIP solution, initialized to the current pseudo solution */
189 SCIP_SOL** sol, /**< pointer to primal CIP solution */
190 BMS_BLKMEM* blkmem, /**< block memory */
191 SCIP_SET* set, /**< global SCIP settings */
192 SCIP_STAT* stat, /**< problem statistics data */
193 SCIP_PROB* prob, /**< transformed problem data */
194 SCIP_PRIMAL* primal, /**< primal data */
195 SCIP_TREE* tree, /**< branch and bound tree, or NULL */
196 SCIP_LP* lp, /**< current LP data */
197 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
198 );
199
200/** creates primal CIP solution, initialized to the current exact pseudo solution */
202 SCIP_SOL** sol, /**< pointer to primal CIP solution */
203 BMS_BLKMEM* blkmem, /**< block memory */
204 SCIP_SET* set, /**< global SCIP settings */
205 SCIP_STAT* stat, /**< problem statistics data */
206 SCIP_PRIMAL* primal, /**< primal data */
207 SCIP_TREE* tree, /**< branch and bound tree, or NULL */
208 SCIP_LPEXACT* lp, /**< current LP data */
209 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
210 );
211
212/** creates primal CIP solution, initialized to the current solution */
214 SCIP_SOL** sol, /**< pointer to primal CIP solution */
215 BMS_BLKMEM* blkmem, /**< block memory */
216 SCIP_SET* set, /**< global SCIP settings */
217 SCIP_STAT* stat, /**< problem statistics data */
218 SCIP_PROB* prob, /**< transformed problem data */
219 SCIP_PRIMAL* primal, /**< primal data */
220 SCIP_TREE* tree, /**< branch and bound tree */
221 SCIP_LP* lp, /**< current LP data */
222 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
223 );
224
225/** creates primal CIP solution with exact rational values, initialized to the current solution */
227 SCIP_SOL** sol, /**< pointer to primal CIP solution */
228 BMS_BLKMEM* blkmem, /**< block memory */
229 SCIP_SET* set, /**< global SCIP settings */
230 SCIP_STAT* stat, /**< problem statistics data */
231 SCIP_PRIMAL* primal, /**< primal data */
232 SCIP_TREE* tree, /**< branch and bound tree */
233 SCIP_LPEXACT* lp, /**< current LP data */
234 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
235 );
236
237/** creates partial primal CIP solution, initialized to unknown values */
239 SCIP_SOL** sol, /**< pointer to primal CIP solution */
240 BMS_BLKMEM* blkmem, /**< block memory */
241 SCIP_SET* set, /**< global SCIP settings */
242 SCIP_STAT* stat, /**< problem statistics data */
243 SCIP_PRIMAL* primal, /**< primal data */
244 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
245 );
246
247/** creates primal CIP solution, initialized to unknown values */
249 SCIP_SOL** sol, /**< pointer to primal CIP solution */
250 BMS_BLKMEM* blkmem, /**< block memory */
251 SCIP_SET* set, /**< global SCIP settings */
252 SCIP_STAT* stat, /**< problem statistics data */
253 SCIP_PRIMAL* primal, /**< primal data */
254 SCIP_TREE* tree, /**< branch and bound tree */
255 SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */
256 );
257
258/** frees primal CIP solution */
260 SCIP_SOL** sol, /**< pointer to primal CIP solution */
261 BMS_BLKMEM* blkmem, /**< block memory */
262 SCIP_PRIMAL* primal /**< primal data */
263 );
264
265/** copies current LP solution into CIP solution by linking */
267 SCIP_SOL* sol, /**< primal CIP solution */
268 SCIP_SET* set, /**< global SCIP settings */
269 SCIP_STAT* stat, /**< problem statistics data */
270 SCIP_PROB* prob, /**< transformed problem data */
271 SCIP_TREE* tree, /**< branch and bound tree */
272 SCIP_LP* lp /**< current LP data */
273 );
274
275/** copies current exact LP solution into CIP solution by linking */
277 SCIP_SOL* sol, /**< primal CIP solution */
278 SCIP_SET* set, /**< global SCIP settings */
279 SCIP_LPEXACT* lp /**< current LP data */
280 );
281
282/** copies current NLP solution into CIP solution by linking */
284 SCIP_SOL* sol, /**< primal CIP solution */
285 SCIP_STAT* stat, /**< problem statistics data */
286 SCIP_TREE* tree, /**< branch and bound tree */
287 SCIP_NLP* nlp /**< current NLP data */
288 );
289
290/** copies current relaxation solution into CIP solution by linking */
292 SCIP_SOL* sol, /**< primal CIP solution */
293 SCIP_SET* set, /**< global SCIP settings */
294 SCIP_STAT* stat, /**< problem statistics data */
295 SCIP_TREE* tree, /**< branch and bound tree */
296 SCIP_RELAXATION* relaxation /**< global relaxation data */
297 );
298
299/** copies current pseudo solution into CIP solution by linking */
301 SCIP_SOL* sol, /**< primal CIP solution */
302 SCIP_SET* set, /**< global SCIP settings */
303 SCIP_STAT* stat, /**< problem statistics data */
304 SCIP_PROB* prob, /**< transformed problem data */
305 SCIP_TREE* tree, /**< branch and bound tree, or NULL */
306 SCIP_LP* lp /**< current LP data */
307 );
308
309/** copies current pseudo solution into CIP solution by linking */
311 SCIP_SOL* sol, /**< primal CIP solution */
312 SCIP_SET* set, /**< global SCIP settings */
313 SCIP_LPEXACT* lp /**< current LP data */
314 );
315
316/** copies current solution (LP or pseudo solution) into CIP solution by linking */
318 SCIP_SOL* sol, /**< primal CIP solution */
319 SCIP_SET* set, /**< global SCIP settings */
320 SCIP_STAT* stat, /**< problem statistics data */
321 SCIP_PROB* prob, /**< transformed problem data */
322 SCIP_TREE* tree, /**< branch and bound tree */
323 SCIP_LP* lp /**< current LP data */
324 );
325
326/** clears primal CIP solution */
328 SCIP_SOL* sol, /**< primal CIP solution */
329 SCIP_STAT* stat, /**< problem statistics data */
330 SCIP_TREE* tree /**< branch and bound tree */
331 );
332
333/** declares all entries in the primal CIP solution to be unknown */
335 SCIP_SOL* sol, /**< primal CIP solution */
336 SCIP_STAT* stat, /**< problem statistics data */
337 SCIP_TREE* tree /**< branch and bound tree */
338 );
339
340/** stores solution values of variables in solution's own array */
342 SCIP_SOL* sol, /**< primal CIP solution */
343 SCIP_SET* set, /**< global SCIP settings */
344 SCIP_PROB* prob /**< transformed problem data */
345 );
346
347/** stores solution values of variables in solution's own array */
349 SCIP_SOL* sol, /**< primal CIP solution */
350 SCIP_SET* set, /**< global SCIP settings */
351 SCIP_PROB* prob /**< transformed problem data */
352 );
353
354/** sets value of variable in primal CIP solution */
356 SCIP_SOL* sol, /**< primal CIP solution */
357 SCIP_SET* set, /**< global SCIP settings */
358 SCIP_STAT* stat, /**< problem statistics data */
359 SCIP_TREE* tree, /**< branch and bound tree */
360 SCIP_VAR* var, /**< variable to add to solution */
361 SCIP_Real val /**< solution value of variable */
362 );
363
364/** sets value of variable in primal CIP solution */
366 SCIP_SOL* sol, /**< primal CIP solution */
367 SCIP_SET* set, /**< global SCIP settings */
368 SCIP_STAT* stat, /**< problem statistics data */
369 SCIP_TREE* tree, /**< branch and bound tree, or NULL */
370 SCIP_VAR* var, /**< variable to add to solution */
371 SCIP_RATIONAL* val /**< solution value of variable */
372 );
373
374/** increases value of variable in primal CIP solution */
376 SCIP_SOL* sol, /**< primal CIP solution */
377 SCIP_SET* set, /**< global SCIP settings */
378 SCIP_STAT* stat, /**< problem statistics data */
379 SCIP_TREE* tree, /**< branch and bound tree */
380 SCIP_VAR* var, /**< variable to increase solution value for */
381 SCIP_Real incval /**< increment for solution value of variable */
382 );
383
384/** returns value of variable in primal CIP solution */
386 SCIP_SOL* sol, /**< primal CIP solution */
387 SCIP_SET* set, /**< global SCIP settings */
388 SCIP_STAT* stat, /**< problem statistics data */
389 SCIP_VAR* var /**< variable to get value for */
390 );
391
392/** returns value of variable in primal CIP solution */
394 SCIP_RATIONAL* res,
395 SCIP_SOL* sol, /**< primal CIP solution */
396 SCIP_SET* set, /**< global SCIP settings */
397 SCIP_STAT* stat, /**< problem statistics data */
398 SCIP_VAR* var /**< variable to get value for */
399 );
400
401/** returns value of variable in primal ray represented by primal CIP solution */
403 SCIP_SOL* sol, /**< primal CIP solution, representing a primal ray */
404 SCIP_SET* set, /**< global SCIP settings */
405 SCIP_STAT* stat, /**< problem statistics data */
406 SCIP_VAR* var /**< variable to get value for */
407 );
408
409
410/** gets objective value of primal CIP solution in transformed problem */
412 SCIP_SOL* sol, /**< primal CIP solution */
413 SCIP_SET* set, /**< global SCIP settings */
414 SCIP_PROB* transprob, /**< tranformed problem data */
415 SCIP_PROB* origprob /**< original problem data */
416 );
417
418/** gets objective value of primal CIP solution in transformed problem */
420 SCIP_SOL* sol, /**< primal CIP solution */
421 SCIP_SET* set, /**< global SCIP settings */
422 SCIP_PROB* transprob, /**< tranformed problem data */
423 SCIP_PROB* origprob, /**< original problem data */
424 SCIP_RATIONAL* objval /**< store the result here */
425 );
426
427/** updates primal solutions after a change in a variable's objective value */
429 SCIP_SOL* sol, /**< primal CIP solution */
430 SCIP_VAR* var, /**< problem variable */
431 SCIP_Real oldobj, /**< old objective value */
432 SCIP_Real newobj /**< new objective value */
433 );
434
435/* mark the given solution as partial solution */
437 SCIP_SOL* sol, /**< primal CIP solution */
438 SCIP_SET* set, /**< global SCIP settings */
439 SCIP_STAT* stat, /**< problem statistics */
440 SCIP_VAR** vars, /**< problem variables */
441 int nvars /**< number of problem variables */
442 );
443
444/** checks solution for feasibility in original problem without adding it to the solution store
445 *
446 * We first check the variable bounds. Then we loop over all constraint handlers and constraints, checking each in the
447 * order of their check priority.
448 */
450 SCIP_SOL* sol, /**< primal CIP solution */
451 SCIP_SET* set, /**< global SCIP settings */
452 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
453 BMS_BLKMEM* blkmem, /**< block memory */
454 SCIP_STAT* stat, /**< problem statistics */
455 SCIP_PROB* prob, /**< transformed problem data */
456 SCIP_PRIMAL* primal, /**< primal data */
457 SCIP_Bool printreason, /**< Should the reason for the violation be printed? */
458 SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */
459 SCIP_Bool checkbounds, /**< Should the bounds of the variables be checked? */
460 SCIP_Bool checkintegrality, /**< Has integrality to be checked? */
461 SCIP_Bool checklprows, /**< Do constraints represented by rows in the current LP have to be checked? */
462 SCIP_Bool checkmodifiable, /**< have modifiable constraint to be checked? */
463 SCIP_Bool* feasible /**< stores whether given solution is feasible */
464 );
465
466/** checks primal CIP solution for feasibility
467 *
468 * @note The difference between SCIPsolCheck() and SCIPcheckSolOrig() is that modifiable constraints are handled
469 * differently. There might be some variables which do not have an original counter part (e.g. in
470 * branch-and-price). Therefore, modifiable constraints can not be double-checked in the original space.
471 */
473 SCIP_SOL* sol, /**< primal CIP solution */
474 SCIP_SET* set, /**< global SCIP settings */
475 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
476 BMS_BLKMEM* blkmem, /**< block memory */
477 SCIP_STAT* stat, /**< problem statistics */
478 SCIP_PROB* prob, /**< transformed problem data */
479 SCIP_Bool printreason, /**< Should all reasons of violations be printed? */
480 SCIP_Bool completely, /**< Should all violations be checked? */
481 SCIP_Bool checkbounds, /**< Should the bounds of the variables be checked? */
482 SCIP_Bool checkintegrality, /**< Has integrality to be checked? */
483 SCIP_Bool checklprows, /**< Do constraints represented by rows in the current LP have to be checked? */
484 SCIP_Bool* feasible /**< stores whether solution is feasible */
485 );
486
487/** try to round given solution */
489 SCIP_SOL* sol, /**< primal solution */
490 SCIP_SET* set, /**< global SCIP settings */
491 SCIP_STAT* stat, /**< problem statistics data */
492 SCIP_PROB* prob, /**< transformed problem data */
493 SCIP_TREE* tree, /**< branch and bound tree */
494 SCIP_Bool* success /**< pointer to store whether rounding was successful */
495 );
496
497/** copies the real values to the exact arrays of the solution */
499 SCIP_SOL* sol, /**< primal solution */
500 BMS_BLKMEM* blkmem, /**< block memory */
501 SCIP_SET* set, /**< global SCIP settings */
502 SCIP_STAT* stat, /**< problem statistics data */
503 SCIP_PROB* prob /**< transformed problem data */
504 );
505
506/** approximates and copies the exact values to the real arrays of the solution and frees the exact data */
508 SCIP_SOL* sol, /**< primal solution */
509 BMS_BLKMEM* blkmem, /**< block memory */
510 SCIP_SET* set, /**< global SCIP settings */
511 SCIP_STAT* stat, /**< problem statistics data */
512 SCIP_PROB* prob /**< transformed problem data */
513 );
514
515/** updates the solution value sums in variables by adding the value in the given solution */
517 SCIP_SOL* sol, /**< primal CIP solution */
518 SCIP_SET* set, /**< global SCIP settings */
519 SCIP_STAT* stat, /**< problem statistics data */
520 SCIP_PROB* prob, /**< transformed problem data */
521 SCIP_Real weight /**< weight of solution in weighted average */
522 );
523
524/** retransforms solution to original problem space */
526 SCIP_SOL* sol, /**< primal CIP solution */
527 SCIP_SET* set, /**< global SCIP settings */
528 SCIP_STAT* stat, /**< problem statistics data */
529 SCIP_PROB* origprob, /**< original problem */
530 SCIP_PROB* transprob, /**< transformed problem */
531 SCIP_Bool* hasinfval /**< pointer to store whether the solution has infinite values */
532 );
533
534/** retransforms exact part of solution to original problem space */
536 SCIP_SOL* sol, /**< primal CIP solution */
537 SCIP_SET* set, /**< global SCIP settings */
538 SCIP_STAT* stat, /**< problem statistics data */
539 SCIP_PROB* origprob, /**< original problem */
540 SCIP_PROB* transprob, /**< transformed problem */
541 SCIP_Bool* hasinfval /**< pointer to store whether the solution has infinite values */
542 );
543
544/** recomputes the objective value of an original solution, e.g., when transferring solutions
545 * from the solution pool (objective coefficients might have changed in the meantime)
546 */
548 SCIP_SOL* sol, /**< primal CIP solution */
549 SCIP_SET* set, /**< global SCIP settings */
550 SCIP_STAT* stat, /**< problem statistics data */
551 SCIP_PROB* origprob /**< original problem */
552 );
553
554/** recomputes the objective value of an exact solution, e.g., when initialized from a real solution */
556 SCIP_SOL* sol, /**< primal CIP solution */
557 SCIP_SET* set, /**< global SCIP settings */
558 SCIP_STAT* stat, /**< problem statistics data */
559 SCIP_PROB* prob /**< scip problem */
560 );
561
562/** returns whether the given solutions in transformed space are equal */
564 SCIP_SOL* sol1, /**< first primal CIP solution */
565 SCIP_SOL* sol2, /**< second primal CIP solution */
566 SCIP_SET* set, /**< global SCIP settings */
567 SCIP_STAT* stat, /**< problem statistics data */
568 SCIP_PROB* origprob, /**< original problem */
569 SCIP_PROB* transprob /**< transformed problem after presolve */
570 );
571
572/** outputs non-zero elements of solution to file stream */
574 SCIP_SOL* sol, /**< primal CIP solution */
575 SCIP_SET* set, /**< global SCIP settings */
576 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
577 SCIP_STAT* stat, /**< problem statistics data */
578 SCIP_PROB* prob, /**< problem data (original or transformed) */
579 SCIP_PROB* transprob, /**< transformed problem data or NULL (to display priced variables) */
580 FILE* file, /**< output file (or NULL for standard output) */
581 SCIP_Bool mipstart, /**< should only discrete variables be printed? */
582 SCIP_Bool printzeros /**< should variables set to zero be printed? */
583 );
584
585/** outputs non-zero elements of solution to file stream */
587 SCIP_SOL* sol, /**< primal CIP solution */
588 SCIP_SET* set, /**< global SCIP settings */
589 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
590 SCIP_STAT* stat, /**< problem statistics data */
591 SCIP_PROB* prob, /**< problem data (original or transformed) */
592 SCIP_PROB* transprob, /**< transformed problem data or NULL (to display priced variables) */
593 FILE* file, /**< output file (or NULL for standard output) */
594 SCIP_Bool mipstart, /**< should only discrete variables be printed? */
595 SCIP_Bool printzeros /**< should variables set to zero be printed? */
596 );
597
598/** outputs non-zero elements of solution representing a ray to file stream */
600 SCIP_SOL* sol, /**< primal CIP solution */
601 SCIP_SET* set, /**< global SCIP settings */
602 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
603 SCIP_STAT* stat, /**< problem statistics data */
604 SCIP_PROB* prob, /**< problem data (original or transformed) */
605 SCIP_PROB* transprob, /**< transformed problem data or NULL (to display priced variables) */
606 FILE* file, /**< output file (or NULL for standard output) */
607 SCIP_Bool printzeros /**< should variables set to zero be printed? */
608 );
609
610/** set new origin type for a solution */
612 SCIP_SOL* sol, /**< primal CIP solution */
613 SCIP_SOLORIGIN origin /**< new origin type of the solution */
614 );
615
616/** reset violations of a solution */
618 SCIP_SOL* sol /**< primal CIP solution */
619 );
620
621/** update integrality violation of a solution */
623 SCIP_SOL* sol, /**< primal CIP solution */
624 SCIP_Real absviolintegrality /**< absolute violation of integrality */
625 );
626
627/** update bound violation of a solution */
629 SCIP_SOL* sol, /**< primal CIP solution */
630 SCIP_Real absviolbounds, /**< absolute violation of bounds */
631 SCIP_Real relviolbounds /**< relative violation of bounds */
632 );
633
634/** update LP row violation of a solution */
636 SCIP_SOL* sol, /**< primal CIP solution */
637 SCIP_Real absviollprows, /**< absolute violation of LP rows */
638 SCIP_Real relviollprows /**< relative violation of LP rows */
639 );
640
641/** update constraint violation of a solution */
643 SCIP_SOL* sol, /**< primal CIP solution */
644 SCIP_Real absviolcons, /**< absolute violation of constraint */
645 SCIP_Real relviolcons /**< relative violation of constraint */
646 );
647
648/** update violation of a constraint that is represented in the LP */
650 SCIP_SOL* sol, /**< primal CIP solution */
651 SCIP_Real absviol, /**< absolute violation of constraint */
652 SCIP_Real relviol /**< relative violation of constraint */
653 );
654
655/** gets objective value of primal CIP solution which lives in the original problem space */
657 SCIP_SOL* sol /**< primal CIP solution */
658 );
659
660/** overwrite FP solution with exact values */
662 SCIP_SOL* sol, /**< exact primal CIP solution */
663 SCIP_SET* set, /**< global SCIP settings */
664 SCIP_STAT* stat, /**< problem statistics data */
665 SCIP_PROB* origprob, /**< problem data */
666 SCIP_PROB* transprob, /**< problem data */
667 SCIP_TREE* tree /**< branch and bound tree, or NULL */
668 );
669
670/** creates a copy of a primal CIP solution */
672 SCIP_VALSEXACT** valsexact, /**< pointer to store the copy of the primal CIP solution */
673 BMS_BLKMEM* blkmem, /**< block memory */
674 SCIP_VALSEXACT* sourcevals /**< primal CIP solution to copy */
675 );
676
677/* In debug mode, the following methods are implemented as function calls to ensure
678 * type validity.
679 */
680
681/** adds value to the objective value of a given original primal CIP solution */
683 SCIP_SOL* sol, /**< primal CIP solution */
684 SCIP_Real addval /**< offset value to add */
685 );
686
687/** gets current position of solution in array of existing solutions of primal data */
689 SCIP_SOL* sol /**< primal CIP solution */
690 );
691
692/** sets current position of solution in array of existing solutions of primal data */
694 SCIP_SOL* sol, /**< primal CIP solution */
695 int primalindex /**< new primal index of solution */
696 );
697
698#ifdef NDEBUG
699
700/* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and
701 * speed up the algorithms.
702 */
703
704#define SCIPsolOrigAddObjval(sol, addval) ((sol)->obj += (addval))
705#define SCIPsolGetPrimalIndex(sol) ((sol)->primalindex)
706#define SCIPsolSetPrimalIndex(sol,idx) { (sol)->primalindex = idx; }
707
708#endif
709
710#ifdef __cplusplus
711}
712#endif
713
714#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
static SCIP_SOL * sol
int nvars
SCIP_VAR * var
SCIP_Real newobj
SCIP_Real oldobj
static SCIP_VAR ** vars
memory allocation routines
struct BMS_BlkMem BMS_BLKMEM
Definition memory.h:437
public methods for primal CIP solutions
void SCIPsolUpdateVarObj(SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
Definition sol.c:2297
SCIP_RETCODE SCIPsolCreateRelaxSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_RELAXATION *relaxation, SCIP_HEUR *heur)
Definition sol.c:914
void SCIPsolUpdateConsViolation(SCIP_SOL *sol, SCIP_Real absviolcons, SCIP_Real relviolcons)
Definition sol.c:3956
SCIP_RETCODE SCIPsolMakeReal(SCIP_SOL *sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob)
Definition sol.c:2920
SCIP_RETCODE SCIPsolLinkPseudoSol(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp)
Definition sol.c:1318
void SCIPsolSetPrimalIndex(SCIP_SOL *sol, int primalindex)
Definition sol.c:4294
SCIP_RETCODE SCIPsolCreatePartial(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_HEUR *heur)
Definition sol.c:1039
SCIP_RETCODE SCIPsolCreateUnknown(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_HEUR *heur)
Definition sol.c:1079
void SCIPsolUpdateBoundViolation(SCIP_SOL *sol, SCIP_Real absviolbounds, SCIP_Real relviolbounds)
Definition sol.c:3930
void SCIPsolGetValExact(SCIP_RATIONAL *res, SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
Definition sol.c:2043
int SCIPsolGetPrimalIndex(SCIP_SOL *sol)
Definition sol.c:4284
SCIP_RETCODE SCIPsolCreateNLPSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_NLP *nlp, SCIP_HEUR *heur)
Definition sol.c:893
SCIP_RETCODE SCIPsolMakeExact(SCIP_SOL *sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob)
Definition sol.c:2884
SCIP_RETCODE SCIPsolLinkCurrentSol(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp)
Definition sol.c:1368
SCIP_RETCODE SCIPsolCheck(SCIP_SOL *sol, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *feasible)
Definition sol.c:2681
SCIP_RETCODE SCIPsolMarkPartial(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR **vars, int nvars)
Definition sol.c:2316
void SCIPsolRecomputeInternObjExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob)
Definition sol.c:3271
SCIP_RETCODE SCIPsolCreateOriginal(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_HEUR *heur)
Definition sol.c:514
SCIP_RETCODE SCIPsolSetValExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_VAR *var, SCIP_RATIONAL *val)
Definition sol.c:1711
SCIP_RETCODE SCIPsolAdjustImplicitSolVals(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool uselprows)
Definition sol.c:712
SCIP_RETCODE SCIPsolFree(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_PRIMAL *primal)
Definition sol.c:1133
SCIP_RETCODE SCIPsolRetransformExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_Bool *hasinfval)
Definition sol.c:3117
void SCIPsolRecomputeObj(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob)
Definition sol.c:3235
SCIP_RETCODE SCIPsolOverwriteFPSolWithExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree)
Definition sol.c:4052
void SCIPsolUpdateIntegralityViolation(SCIP_SOL *sol, SCIP_Real absviolintegrality)
Definition sol.c:3919
void SCIPsolUpdateLPRowViolation(SCIP_SOL *sol, SCIP_Real absviollprows, SCIP_Real relviollprows)
Definition sol.c:3943
SCIP_RETCODE SCIPsolLinkLPSolExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_LPEXACT *lp)
Definition sol.c:1214
SCIP_RETCODE SCIPsolIncVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_VAR *var, SCIP_Real incval)
Definition sol.c:1836
SCIP_RETCODE SCIPsolLinkNLPSol(SCIP_SOL *sol, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_NLP *nlp)
Definition sol.c:1237
SCIP_RETCODE SCIPsolPrintExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PROB *transprob, FILE *file, SCIP_Bool mipstart, SCIP_Bool printzeros)
Definition sol.c:3592
SCIP_RETCODE SCIPsolRetransform(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_Bool *hasinfval)
Definition sol.c:2984
SCIP_RETCODE SCIPsolCreatePseudoSolExact(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LPEXACT *lp, SCIP_HEUR *heur)
Definition sol.c:965
SCIP_RETCODE SCIPsolCreateCurrentSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_HEUR *heur)
Definition sol.c:985
SCIP_RETCODE SCIPsolRound(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool *success)
Definition sol.c:2811
SCIP_RETCODE SCIPsolTransform(SCIP_SOL *sol, SCIP_SOL **transsol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal)
Definition sol.c:658
SCIP_RETCODE SCIPsolSetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_VAR *var, SCIP_Real val)
Definition sol.c:1490
SCIP_RETCODE SCIPvalsExactCopy(SCIP_VALSEXACT **valsexact, BMS_BLKMEM *blkmem, SCIP_VALSEXACT *sourcevals)
Definition sol.c:497
SCIP_RETCODE SCIPsolCreatePseudoSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_HEUR *heur)
Definition sol.c:940
SCIP_RETCODE SCIPsolClear(SCIP_SOL *sol, SCIP_STAT *stat, SCIP_TREE *tree)
Definition sol.c:1394
SCIP_RETCODE SCIPsolCreateLPSol(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LP *lp, SCIP_HEUR *heur)
Definition sol.c:846
SCIP_RETCODE SCIPsolSetUnknown(SCIP_SOL *sol, SCIP_STAT *stat, SCIP_TREE *tree)
Definition sol.c:1414
SCIP_RETCODE SCIPsolLinkRelaxSol(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_RELAXATION *relaxation)
Definition sol.c:1288
SCIP_RETCODE SCIPsolCreateOriginalExact(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_HEUR *heur)
Definition sol.c:555
SCIP_Real SCIPsolGetVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
Definition sol.c:1912
SCIP_RETCODE SCIPsolLinkPseudoSolExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_LPEXACT *lp)
Definition sol.c:1347
SCIP_RETCODE SCIPsolCreateExact(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_HEUR *heur)
Definition sol.c:470
SCIP_RETCODE SCIPsolCreateCurrentSolExact(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LPEXACT *lp, SCIP_HEUR *heur)
Definition sol.c:1012
SCIP_RETCODE SCIPsolUnlink(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *prob)
Definition sol.c:1431
void SCIPsolGetObjExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_RATIONAL *objval)
Definition sol.c:2278
SCIP_Real SCIPsolGetRayVal(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var)
Definition sol.c:2192
SCIP_RETCODE SCIPsolPrintRay(SCIP_SOL *sol, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PROB *transprob, FILE *file, SCIP_Bool printzeros)
Definition sol.c:3781
void SCIPsolResetViolations(SCIP_SOL *sol)
Definition sol.c:3903
void SCIPsolSetOrigin(SCIP_SOL *sol, SCIP_SOLORIGIN origin)
Definition sol.c:3889
SCIP_RETCODE SCIPsolLinkLPSol(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_LP *lp)
Definition sol.c:1156
SCIP_Bool SCIPsolsAreEqual(SCIP_SOL *sol1, SCIP_SOL *sol2, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob)
Definition sol.c:3385
SCIP_RATIONAL * SCIPsolGetOrigObjExact(SCIP_SOL *sol)
Definition sol.c:4196
SCIP_Real SCIPsolGetObj(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
Definition sol.c:2261
SCIP_RETCODE SCIPsolPrint(SCIP_SOL *sol, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PROB *transprob, FILE *file, SCIP_Bool mipstart, SCIP_Bool printzeros)
Definition sol.c:3456
void SCIPsolUpdateVarsum(SCIP_SOL *sol, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_Real weight)
Definition sol.c:2956
SCIP_RETCODE SCIPsolCopy(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_SOL *sourcesol)
Definition sol.c:583
SCIP_RETCODE SCIPsolCheckOrig(SCIP_SOL *sol, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool checkmodifiable, SCIP_Bool *feasible)
Definition sol.c:2505
SCIP_RETCODE SCIPsolCreate(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_HEUR *heur)
Definition sol.c:428
SCIP_RETCODE SCIPsolCreateLPSolExact(SCIP_SOL **sol, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_LPEXACT *lp, SCIP_HEUR *heur)
Definition sol.c:871
void SCIPsolUpdateLPConsViolation(SCIP_SOL *sol, SCIP_Real absviol, SCIP_Real relviol)
Definition sol.c:3969
SCIP_RETCODE SCIPsolUnlinkExact(SCIP_SOL *sol, SCIP_SET *set, SCIP_PROB *prob)
Definition sol.c:1460
void SCIPsolOrigAddObjval(SCIP_SOL *sol, SCIP_Real addval)
Definition sol.c:4208
type definitions for primal heuristics
struct SCIP_Heur SCIP_HEUR
Definition type_heur.h:76
type definitions for LP management
struct SCIP_Lp SCIP_LP
Definition type_lp.h:111
type definitions for exact LP management
struct SCIP_LpExact SCIP_LPEXACT
struct SCIP_Messagehdlr SCIP_MESSAGEHDLR
type definitions for NLP management
struct SCIP_Nlp SCIP_NLP
Definition type_nlp.h:42
type definitions for collecting primal CIP solutions and primal informations
struct SCIP_Primal SCIP_PRIMAL
Definition type_primal.h:39
type definitions for storing and manipulating the main problem
struct SCIP_Prob SCIP_PROB
Definition type_prob.h:52
struct SCIP_Rational SCIP_RATIONAL
struct SCIP_Relaxation SCIP_RELAXATION
Definition type_relax.h:51
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
type definitions for global SCIP settings
struct SCIP_Set SCIP_SET
Definition type_set.h:71
type definitions for storing primal CIP solutions
struct SCIP_ValsExact SCIP_VALSEXACT
Definition type_sol.h:73
struct SCIP_Sol SCIP_SOL
Definition type_sol.h:57
enum SCIP_SolOrigin SCIP_SOLORIGIN
Definition type_sol.h:55
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