1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /*                                                                           */
3 /*                  This file is part of the program and library             */
4 /*         SCIP --- Solving Constraint Integer Programs                      */
5 /*                                                                           */
6 /*    Copyright (C) 2002-2021 Konrad-Zuse-Zentrum                            */
7 /*                            fuer Informationstechnik Berlin                */
8 /*                                                                           */
9 /*  SCIP is distributed under the terms of the ZIB Academic License.         */
10 /*                                                                           */
11 /*  You should have received a copy of the ZIB Academic License              */
12 /*  along with SCIP; see the file COPYING. If not visit scipopt.org.         */
13 /*                                                                           */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file   scip_sol.h
17  * @ingroup PUBLICCOREAPI
18  * @brief  public methods for solutions
19  * @author Tobias Achterberg
20  * @author Timo Berthold
21  * @author Thorsten Koch
22  * @author Alexander Martin
23  * @author Marc Pfetsch
24  * @author Kati Wolter
25  * @author Gregor Hendel
26  * @author Leona Gottwald
27  */
28 
29 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
30 
31 #ifndef __SCIP_SCIP_SOL_H__
32 #define __SCIP_SCIP_SOL_H__
33 
34 
35 #include "scip/def.h"
36 #include "scip/type_cons.h"
37 #include "scip/type_heur.h"
38 #include "scip/type_retcode.h"
39 #include "scip/type_scip.h"
40 #include "scip/type_sol.h"
41 #include "scip/type_var.h"
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 /**@addtogroup PublicSolutionMethods
48  *
49  * @{
50  */
51 
52 /** creates a primal solution, initialized to zero
53  *
54  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
55  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
56  *
57  *  @pre This method can be called if SCIP is in one of the following stages:
58  *       - \ref SCIP_STAGE_PROBLEM
59  *       - \ref SCIP_STAGE_TRANSFORMING
60  *       - \ref SCIP_STAGE_TRANSFORMED
61  *       - \ref SCIP_STAGE_INITPRESOLVE
62  *       - \ref SCIP_STAGE_PRESOLVING
63  *       - \ref SCIP_STAGE_EXITPRESOLVE
64  *       - \ref SCIP_STAGE_PRESOLVED
65  *       - \ref SCIP_STAGE_INITSOLVE
66  *       - \ref SCIP_STAGE_SOLVING
67  */
68 SCIP_EXPORT
69 SCIP_RETCODE SCIPcreateSol(
70    SCIP*                 scip,               /**< SCIP data structure */
71    SCIP_SOL**            sol,                /**< pointer to store the solution */
72    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
73    );
74 
75 /** creates a primal solution, initialized to the current LP solution
76  *
77  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
78  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
79  *
80  *  @pre This method can be called if SCIP is in one of the following stages:
81  *       - \ref SCIP_STAGE_SOLVING
82  */
83 SCIP_EXPORT
84 SCIP_RETCODE SCIPcreateLPSol(
85    SCIP*                 scip,               /**< SCIP data structure */
86    SCIP_SOL**            sol,                /**< pointer to store the solution */
87    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
88    );
89 
90 /** creates a primal solution, initialized to the current NLP solution
91  *
92  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
93  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
94  *
95  *  @pre This method can be called if SCIP is in one of the following stages:
96  *       - \ref SCIP_STAGE_SOLVING
97  */
98 SCIP_EXPORT
99 SCIP_RETCODE SCIPcreateNLPSol(
100    SCIP*                 scip,               /**< SCIP data structure */
101    SCIP_SOL**            sol,                /**< pointer to store the solution */
102    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
103    );
104 
105 /** creates a primal solution, initialized to the current relaxation solution
106  *
107  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
108  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
109  *
110  *  @pre This method can be called if SCIP is in one of the following stages:
111  *       - \ref SCIP_STAGE_SOLVING
112  */
113 SCIP_EXPORT
114 SCIP_RETCODE SCIPcreateRelaxSol(
115    SCIP*                 scip,               /**< SCIP data structure */
116    SCIP_SOL**            sol,                /**< pointer to store the solution */
117    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
118    );
119 
120 /** creates a primal solution, initialized to the current pseudo solution
121  *
122  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
123  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
124  *
125  *  @pre This method can be called if SCIP is in one of the following stages:
126  *       - \ref SCIP_STAGE_SOLVING
127  */
128 SCIP_EXPORT
129 SCIP_RETCODE SCIPcreatePseudoSol(
130    SCIP*                 scip,               /**< SCIP data structure */
131    SCIP_SOL**            sol,                /**< pointer to store the solution */
132    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
133    );
134 
135 /** creates a primal solution, initialized to the current LP or pseudo solution, depending on whether the LP was solved
136  *  at the current node
137  *
138  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
139  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
140  *
141  *  @pre This method can be called if SCIP is in one of the following stages:
142  *       - \ref SCIP_STAGE_SOLVING
143  */
144 SCIP_EXPORT
145 SCIP_RETCODE SCIPcreateCurrentSol(
146    SCIP*                 scip,               /**< SCIP data structure */
147    SCIP_SOL**            sol,                /**< pointer to store the solution */
148    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
149    );
150 
151 /** creates a partial primal solution, initialized to unknown values
152  *
153  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
154  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
155  *
156  *  @pre This method can be called if SCIP is in one of the following stages:
157  *       - \ref SCIP_STAGE_PROBLEM
158  */
159 SCIP_EXPORT
160 SCIP_RETCODE SCIPcreatePartialSol(
161    SCIP*                 scip,               /**< SCIP data structure */
162    SCIP_SOL**            sol,                /**< pointer to store the solution */
163    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
164    );
165 
166 /** creates a primal solution, initialized to unknown values
167  *
168  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
169  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
170  *
171  *  @pre This method can be called if SCIP is in one of the following stages:
172  *       - \ref SCIP_STAGE_TRANSFORMING
173  *       - \ref SCIP_STAGE_TRANSFORMED
174  *       - \ref SCIP_STAGE_INITPRESOLVE
175  *       - \ref SCIP_STAGE_PRESOLVING
176  *       - \ref SCIP_STAGE_EXITPRESOLVE
177  *       - \ref SCIP_STAGE_PRESOLVED
178  *       - \ref SCIP_STAGE_INITSOLVE
179  *       - \ref SCIP_STAGE_SOLVING
180  */
181 SCIP_EXPORT
182 SCIP_RETCODE SCIPcreateUnknownSol(
183    SCIP*                 scip,               /**< SCIP data structure */
184    SCIP_SOL**            sol,                /**< pointer to store the solution */
185    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
186    );
187 
188 /** creates a primal solution living in the original problem space, initialized to zero;
189  *  a solution in original space allows to set original variables to values that would be invalid in the
190  *  transformed problem due to preprocessing fixings or aggregations
191  *
192  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
193  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
194  *
195  *  @pre This method can be called if SCIP is in one of the following stages:
196  *       - \ref SCIP_STAGE_PROBLEM
197  *       - \ref SCIP_STAGE_TRANSFORMING
198  *       - \ref SCIP_STAGE_TRANSFORMED
199  *       - \ref SCIP_STAGE_INITPRESOLVE
200  *       - \ref SCIP_STAGE_PRESOLVING
201  *       - \ref SCIP_STAGE_EXITPRESOLVE
202  *       - \ref SCIP_STAGE_PRESOLVED
203  *       - \ref SCIP_STAGE_INITSOLVE
204  *       - \ref SCIP_STAGE_SOLVING
205  */
206 SCIP_EXPORT
207 SCIP_RETCODE SCIPcreateOrigSol(
208    SCIP*                 scip,               /**< SCIP data structure */
209    SCIP_SOL**            sol,                /**< pointer to store the solution */
210    SCIP_HEUR*            heur                /**< heuristic that found the solution (or NULL if it's from the tree) */
211    );
212 
213 /** creates a copy of a primal solution; note that a copy of a linked solution is also linked and needs to be unlinked
214  *  if it should stay unaffected from changes in the LP or pseudo solution
215  *
216  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
217  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
218  *
219  *  @pre This method can be called if SCIP is in one of the following stages:
220  *       - \ref SCIP_STAGE_PROBLEM
221  *       - \ref SCIP_STAGE_TRANSFORMING
222  *       - \ref SCIP_STAGE_TRANSFORMED
223  *       - \ref SCIP_STAGE_INITPRESOLVE
224  *       - \ref SCIP_STAGE_PRESOLVING
225  *       - \ref SCIP_STAGE_EXITPRESOLVE
226  *       - \ref SCIP_STAGE_PRESOLVED
227  *       - \ref SCIP_STAGE_INITSOLVE
228  *       - \ref SCIP_STAGE_SOLVING
229  */
230 SCIP_EXPORT
231 SCIP_RETCODE SCIPcreateSolCopy(
232    SCIP*                 scip,               /**< SCIP data structure */
233    SCIP_SOL**            sol,                /**< pointer to store the solution */
234    SCIP_SOL*             sourcesol           /**< primal CIP solution to copy */
235    );
236 
237 /** creates a copy of a solution in the original primal solution space
238  *
239  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
240  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
241  *
242  *  @pre This method can be called if SCIP is in one of the following stages:
243  *       - \ref SCIP_STAGE_PROBLEM
244  *       - \ref SCIP_STAGE_TRANSFORMING
245  *       - \ref SCIP_STAGE_TRANSFORMED
246  *       - \ref SCIP_STAGE_INITPRESOLVE
247  *       - \ref SCIP_STAGE_PRESOLVING
248  *       - \ref SCIP_STAGE_EXITPRESOLVE
249  *       - \ref SCIP_STAGE_PRESOLVED
250  *       - \ref SCIP_STAGE_INITSOLVE
251  *       - \ref SCIP_STAGE_SOLVING
252  *       - \ref SCIP_STAGE_SOLVED
253  *       - \ref SCIP_STAGE_EXITSOLVE
254  *       - \ref SCIP_STAGE_FREETRANS
255  */
256 SCIP_EXPORT
257 SCIP_RETCODE SCIPcreateSolCopyOrig(
258    SCIP*                 scip,               /**< SCIP data structure */
259    SCIP_SOL**            sol,                /**< pointer to store the solution */
260    SCIP_SOL*             sourcesol           /**< primal CIP solution to copy */
261    );
262 
263 /** creates a copy of a primal solution, thereby replacing infinite fixings of variables by finite values;
264  *  the copy is always defined in the original variable space;
265  *  success indicates whether the objective value of the solution was changed by removing infinite values
266  *
267  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
268  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
269  *
270  *  @pre This method can be called if SCIP is in one of the following stages:
271  *       - \ref SCIP_STAGE_PROBLEM
272  *       - \ref SCIP_STAGE_TRANSFORMING
273  *       - \ref SCIP_STAGE_TRANSFORMED
274  *       - \ref SCIP_STAGE_INITPRESOLVE
275  *       - \ref SCIP_STAGE_PRESOLVING
276  *       - \ref SCIP_STAGE_EXITPRESOLVE
277  *       - \ref SCIP_STAGE_PRESOLVED
278  *       - \ref SCIP_STAGE_INITSOLVE
279  *       - \ref SCIP_STAGE_SOLVING
280  *       - \ref SCIP_STAGE_SOLVED
281  *       - \ref SCIP_STAGE_EXITSOLVE
282  */
283 SCIP_EXPORT
284 SCIP_RETCODE SCIPcreateFiniteSolCopy(
285    SCIP*                 scip,               /**< SCIP data structure */
286    SCIP_SOL**            sol,                /**< pointer to store the solution */
287    SCIP_SOL*             sourcesol,          /**< primal CIP solution to copy */
288    SCIP_Bool*            success             /**< does the finite solution have the same objective value? */
289    );
290 
291 /** frees primal CIP solution
292  *
293  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
294  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
295  *
296  *  @pre This method can be called if SCIP is in one of the following stages:
297  *       - \ref SCIP_STAGE_PROBLEM
298  *       - \ref SCIP_STAGE_TRANSFORMING
299  *       - \ref SCIP_STAGE_TRANSFORMED
300  *       - \ref SCIP_STAGE_INITPRESOLVE
301  *       - \ref SCIP_STAGE_PRESOLVING
302  *       - \ref SCIP_STAGE_EXITPRESOLVE
303  *       - \ref SCIP_STAGE_PRESOLVED
304  *       - \ref SCIP_STAGE_INITSOLVE
305  *       - \ref SCIP_STAGE_SOLVING
306  *       - \ref SCIP_STAGE_SOLVED
307  *       - \ref SCIP_STAGE_EXITSOLVE
308  *       - \ref SCIP_STAGE_FREETRANS
309  */
310 SCIP_EXPORT
311 SCIP_RETCODE SCIPfreeSol(
312    SCIP*                 scip,               /**< SCIP data structure */
313    SCIP_SOL**            sol                 /**< pointer to the solution */
314    );
315 
316 /** links a primal solution to the current LP solution
317  *
318  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
319  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
320  *
321  *  @pre This method can be called if SCIP is in one of the following stages:
322  *       - \ref SCIP_STAGE_SOLVING
323  */
324 SCIP_EXPORT
325 SCIP_RETCODE SCIPlinkLPSol(
326    SCIP*                 scip,               /**< SCIP data structure */
327    SCIP_SOL*             sol                 /**< primal solution */
328    );
329 
330 /** links a primal solution to the current NLP solution
331  *
332  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
333  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
334  *
335  *  @pre This method can be called if SCIP is in one of the following stages:
336  *       - \ref SCIP_STAGE_SOLVING
337  */
338 SCIP_EXPORT
339 SCIP_RETCODE SCIPlinkNLPSol(
340    SCIP*                 scip,               /**< SCIP data structure */
341    SCIP_SOL*             sol                 /**< primal solution */
342    );
343 
344 /** links a primal solution to the current relaxation solution
345  *
346  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
347  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
348  *
349  *  @pre This method can be called if SCIP is in one of the following stages:
350  *       - \ref SCIP_STAGE_SOLVING
351  */
352 SCIP_EXPORT
353 SCIP_RETCODE SCIPlinkRelaxSol(
354    SCIP*                 scip,               /**< SCIP data structure */
355    SCIP_SOL*             sol                 /**< primal solution */
356    );
357 
358 /** links a primal solution to the current pseudo solution
359  *
360  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
361  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
362  *
363  *  @pre This method can be called if SCIP is in one of the following stages:
364  *       - \ref SCIP_STAGE_PRESOLVING
365  *       - \ref SCIP_STAGE_SOLVING
366  */
367 SCIP_EXPORT
368 SCIP_RETCODE SCIPlinkPseudoSol(
369    SCIP*                 scip,               /**< SCIP data structure */
370    SCIP_SOL*             sol                 /**< primal solution */
371    );
372 
373 /** links a primal solution to the current LP or pseudo solution
374  *
375  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
376  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
377  *
378  *  @pre This method can be called if SCIP is in one of the following stages:
379  *       - \ref SCIP_STAGE_SOLVING
380  */
381 SCIP_EXPORT
382 SCIP_RETCODE SCIPlinkCurrentSol(
383    SCIP*                 scip,               /**< SCIP data structure */
384    SCIP_SOL*             sol                 /**< primal solution */
385    );
386 
387 /** clears a primal solution
388  *
389  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
390  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
391  *
392  *  @pre This method can be called if SCIP is in one of the following stages:
393  *       - \ref SCIP_STAGE_PROBLEM
394  *       - \ref SCIP_STAGE_TRANSFORMING
395  *       - \ref SCIP_STAGE_TRANSFORMED
396  *       - \ref SCIP_STAGE_INITPRESOLVE
397  *       - \ref SCIP_STAGE_PRESOLVING
398  *       - \ref SCIP_STAGE_EXITPRESOLVE
399  *       - \ref SCIP_STAGE_PRESOLVED
400  *       - \ref SCIP_STAGE_INITSOLVE
401  *       - \ref SCIP_STAGE_SOLVING
402  *       - \ref SCIP_STAGE_SOLVED
403  *       - \ref SCIP_STAGE_EXITSOLVE
404  *       - \ref SCIP_STAGE_FREETRANS
405  */
406 SCIP_EXPORT
407 SCIP_RETCODE SCIPclearSol(
408    SCIP*                 scip,               /**< SCIP data structure */
409    SCIP_SOL*             sol                 /**< primal solution */
410    );
411 
412 /** stores solution values of variables in solution's own array
413  *
414  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
415  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
416  *
417  *  @pre This method can be called if SCIP is in one of the following stages:
418  *       - \ref SCIP_STAGE_TRANSFORMING
419  *       - \ref SCIP_STAGE_TRANSFORMED
420  *       - \ref SCIP_STAGE_PRESOLVING
421  *       - \ref SCIP_STAGE_PRESOLVED
422  *       - \ref SCIP_STAGE_INITSOLVE
423  *       - \ref SCIP_STAGE_SOLVING
424  *       - \ref SCIP_STAGE_SOLVED
425  *       - \ref SCIP_STAGE_EXITSOLVE
426  *       - \ref SCIP_STAGE_FREETRANS
427  */
428 SCIP_EXPORT
429 SCIP_RETCODE SCIPunlinkSol(
430    SCIP*                 scip,               /**< SCIP data structure */
431    SCIP_SOL*             sol                 /**< primal solution */
432    );
433 
434 /** sets value of variable in primal CIP solution
435  *
436  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
437  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
438  *
439  *  @pre This method can be called if SCIP is in one of the following stages:
440  *       - \ref SCIP_STAGE_PROBLEM
441  *       - \ref SCIP_STAGE_TRANSFORMING
442  *       - \ref SCIP_STAGE_TRANSFORMED
443  *       - \ref SCIP_STAGE_INITPRESOLVE
444  *       - \ref SCIP_STAGE_PRESOLVING
445  *       - \ref SCIP_STAGE_EXITPRESOLVE
446  *       - \ref SCIP_STAGE_PRESOLVED
447  *       - \ref SCIP_STAGE_INITSOLVE
448  *       - \ref SCIP_STAGE_SOLVING
449  *       - \ref SCIP_STAGE_SOLVED
450  *       - \ref SCIP_STAGE_EXITSOLVE
451  *       - \ref SCIP_STAGE_FREETRANS
452  */
453 SCIP_EXPORT
454 SCIP_RETCODE SCIPsetSolVal(
455    SCIP*                 scip,               /**< SCIP data structure */
456    SCIP_SOL*             sol,                /**< primal solution */
457    SCIP_VAR*             var,                /**< variable to add to solution */
458    SCIP_Real             val                 /**< solution value of variable */
459    );
460 
461 /** sets values of multiple variables in primal CIP solution
462  *
463  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
464  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
465  *
466  *  @pre This method can be called if SCIP is in one of the following stages:
467  *       - \ref SCIP_STAGE_PROBLEM
468  *       - \ref SCIP_STAGE_TRANSFORMING
469  *       - \ref SCIP_STAGE_TRANSFORMED
470  *       - \ref SCIP_STAGE_INITPRESOLVE
471  *       - \ref SCIP_STAGE_PRESOLVING
472  *       - \ref SCIP_STAGE_EXITPRESOLVE
473  *       - \ref SCIP_STAGE_PRESOLVED
474  *       - \ref SCIP_STAGE_INITSOLVE
475  *       - \ref SCIP_STAGE_SOLVING
476  *       - \ref SCIP_STAGE_SOLVED
477  *       - \ref SCIP_STAGE_EXITSOLVE
478  *       - \ref SCIP_STAGE_FREETRANS
479  */
480 SCIP_EXPORT
481 SCIP_RETCODE SCIPsetSolVals(
482    SCIP*                 scip,               /**< SCIP data structure */
483    SCIP_SOL*             sol,                /**< primal solution */
484    int                   nvars,              /**< number of variables to set solution value for */
485    SCIP_VAR**            vars,               /**< array with variables to add to solution */
486    SCIP_Real*            vals                /**< array with solution values of variables */
487    );
488 
489 /** increases value of variable in primal CIP solution
490  *
491  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
492  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
493  *
494  *  @pre This method can be called if SCIP is in one of the following stages:
495  *       - \ref SCIP_STAGE_PROBLEM
496  *       - \ref SCIP_STAGE_TRANSFORMING
497  *       - \ref SCIP_STAGE_TRANSFORMED
498  *       - \ref SCIP_STAGE_INITPRESOLVE
499  *       - \ref SCIP_STAGE_PRESOLVING
500  *       - \ref SCIP_STAGE_EXITPRESOLVE
501  *       - \ref SCIP_STAGE_PRESOLVED
502  *       - \ref SCIP_STAGE_INITSOLVE
503  *       - \ref SCIP_STAGE_SOLVING
504  *       - \ref SCIP_STAGE_SOLVED
505  *       - \ref SCIP_STAGE_EXITSOLVE
506  *       - \ref SCIP_STAGE_FREETRANS
507  */
508 SCIP_EXPORT
509 SCIP_RETCODE SCIPincSolVal(
510    SCIP*                 scip,               /**< SCIP data structure */
511    SCIP_SOL*             sol,                /**< primal solution */
512    SCIP_VAR*             var,                /**< variable to increase solution value for */
513    SCIP_Real             incval              /**< increment for solution value of variable */
514    );
515 
516 /** returns value of variable in primal CIP solution, or in current LP/pseudo solution
517  *
518  *  @return value of variable in primal CIP solution, or in current LP/pseudo solution
519  *
520  *  @pre In case the solution pointer @p sol is @b NULL, that means it is asked for the LP or pseudo solution, this method
521  *       can only be called if @p scip is in the solving stage \ref SCIP_STAGE_SOLVING. In any other case, this method
522  *       can be called if @p scip is in one of the following stages:
523  *       - \ref SCIP_STAGE_PROBLEM
524  *       - \ref SCIP_STAGE_TRANSFORMING
525  *       - \ref SCIP_STAGE_TRANSFORMED
526  *       - \ref SCIP_STAGE_INITPRESOLVE
527  *       - \ref SCIP_STAGE_PRESOLVING
528  *       - \ref SCIP_STAGE_EXITPRESOLVE
529  *       - \ref SCIP_STAGE_PRESOLVED
530  *       - \ref SCIP_STAGE_INITSOLVE
531  *       - \ref SCIP_STAGE_SOLVING
532  *       - \ref SCIP_STAGE_SOLVED
533  *       - \ref SCIP_STAGE_EXITSOLVE
534  *       - \ref SCIP_STAGE_FREETRANS
535  */
536 SCIP_EXPORT
537 SCIP_Real SCIPgetSolVal(
538    SCIP*                 scip,               /**< SCIP data structure */
539    SCIP_SOL*             sol,                /**< primal solution, or NULL for current LP/pseudo solution */
540    SCIP_VAR*             var                 /**< variable to get value for */
541    );
542 
543 /** gets values of multiple variables in primal CIP solution
544  *
545  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
546  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
547  *
548  *  @pre This method can be called if SCIP is in one of the following stages:
549  *       - \ref SCIP_STAGE_PROBLEM
550  *       - \ref SCIP_STAGE_TRANSFORMING
551  *       - \ref SCIP_STAGE_TRANSFORMED
552  *       - \ref SCIP_STAGE_INITPRESOLVE
553  *       - \ref SCIP_STAGE_PRESOLVING
554  *       - \ref SCIP_STAGE_EXITPRESOLVE
555  *       - \ref SCIP_STAGE_PRESOLVED
556  *       - \ref SCIP_STAGE_INITSOLVE
557  *       - \ref SCIP_STAGE_SOLVING
558  *       - \ref SCIP_STAGE_SOLVED
559  *       - \ref SCIP_STAGE_EXITSOLVE
560  *       - \ref SCIP_STAGE_FREETRANS
561  */
562 SCIP_EXPORT
563 SCIP_RETCODE SCIPgetSolVals(
564    SCIP*                 scip,               /**< SCIP data structure */
565    SCIP_SOL*             sol,                /**< primal solution, or NULL for current LP/pseudo solution */
566    int                   nvars,              /**< number of variables to get solution value for */
567    SCIP_VAR**            vars,               /**< array with variables to get value for */
568    SCIP_Real*            vals                /**< array to store solution values of variables */
569    );
570 
571 /** returns objective value of primal CIP solution w.r.t. original problem, or current LP/pseudo objective value
572  *
573  *  @return objective value of primal CIP solution w.r.t. original problem, or current LP/pseudo objective value
574  *
575  *  @pre This method can be called if SCIP is in one of the following stages:
576  *       - \ref SCIP_STAGE_PROBLEM
577  *       - \ref SCIP_STAGE_TRANSFORMING
578  *       - \ref SCIP_STAGE_TRANSFORMED
579  *       - \ref SCIP_STAGE_INITPRESOLVE
580  *       - \ref SCIP_STAGE_PRESOLVING
581  *       - \ref SCIP_STAGE_EXITPRESOLVE
582  *       - \ref SCIP_STAGE_PRESOLVED
583  *       - \ref SCIP_STAGE_INITSOLVE
584  *       - \ref SCIP_STAGE_SOLVING
585  *       - \ref SCIP_STAGE_SOLVED
586  *       - \ref SCIP_STAGE_EXITSOLVE
587  *       - \ref SCIP_STAGE_FREETRANS
588  */
589 SCIP_EXPORT
590 SCIP_Real SCIPgetSolOrigObj(
591    SCIP*                 scip,               /**< SCIP data structure */
592    SCIP_SOL*             sol                 /**< primal solution, or NULL for current LP/pseudo objective value */
593    );
594 
595 /** returns transformed objective value of primal CIP solution, or transformed current LP/pseudo objective value
596  *
597  *  @return transformed objective value of primal CIP solution, or transformed current LP/pseudo objective value
598  *
599  *  @pre This method can be called if SCIP is in one of the following stages:
600  *       - \ref SCIP_STAGE_TRANSFORMING
601  *       - \ref SCIP_STAGE_TRANSFORMED
602  *       - \ref SCIP_STAGE_INITPRESOLVE
603  *       - \ref SCIP_STAGE_PRESOLVING
604  *       - \ref SCIP_STAGE_EXITPRESOLVE
605  *       - \ref SCIP_STAGE_PRESOLVED
606  *       - \ref SCIP_STAGE_INITSOLVE
607  *       - \ref SCIP_STAGE_SOLVING
608  *       - \ref SCIP_STAGE_SOLVED
609  *       - \ref SCIP_STAGE_EXITSOLVE
610  *       - \ref SCIP_STAGE_FREETRANS
611  */
612 SCIP_EXPORT
613 SCIP_Real SCIPgetSolTransObj(
614    SCIP*                 scip,               /**< SCIP data structure */
615    SCIP_SOL*             sol                 /**< primal solution, or NULL for current LP/pseudo objective value */
616    );
617 
618 /** recomputes the objective value of an original solution, e.g., when transferring solutions
619  *  from the solution pool (objective coefficients might have changed in the meantime)
620  *
621  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
622  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
623  *
624  *  @pre This method can be called if SCIP is in one of the following stages:
625  *       - \ref SCIP_STAGE_PRESOLVING
626  *       - \ref SCIP_STAGE_SOLVING
627  *
628  */
629 SCIP_EXPORT
630 SCIP_RETCODE SCIPrecomputeSolObj(
631    SCIP*                 scip,
632    SCIP_SOL*             sol
633    );
634 
635 /** maps original space objective value into transformed objective value
636  *
637  *  @return transformed objective value
638  *
639  *  @pre This method can be called if SCIP is in one of the following stages:
640  *       - \ref SCIP_STAGE_TRANSFORMING
641  *       - \ref SCIP_STAGE_TRANSFORMED
642  *       - \ref SCIP_STAGE_INITPRESOLVE
643  *       - \ref SCIP_STAGE_PRESOLVING
644  *       - \ref SCIP_STAGE_EXITPRESOLVE
645  *       - \ref SCIP_STAGE_PRESOLVED
646  *       - \ref SCIP_STAGE_INITSOLVE
647  *       - \ref SCIP_STAGE_SOLVING
648  *       - \ref SCIP_STAGE_SOLVED
649  */
650 SCIP_EXPORT
651 SCIP_Real SCIPtransformObj(
652    SCIP*                 scip,               /**< SCIP data structure */
653    SCIP_Real             obj                 /**< original space objective value to transform */
654    );
655 
656 /** maps transformed objective value into original space
657  *
658  *  @return objective value into original space
659  *
660  *  @pre This method can be called if SCIP is in one of the following stages:
661  *       - \ref SCIP_STAGE_TRANSFORMING
662  *       - \ref SCIP_STAGE_TRANSFORMED
663  *       - \ref SCIP_STAGE_INITPRESOLVE
664  *       - \ref SCIP_STAGE_PRESOLVING
665  *       - \ref SCIP_STAGE_EXITPRESOLVE
666  *       - \ref SCIP_STAGE_PRESOLVED
667  *       - \ref SCIP_STAGE_INITSOLVE
668  *       - \ref SCIP_STAGE_SOLVING
669  *       - \ref SCIP_STAGE_SOLVED
670  */
671 SCIP_EXPORT
672 SCIP_Real SCIPretransformObj(
673    SCIP*                 scip,               /**< SCIP data structure */
674    SCIP_Real             obj                 /**< transformed objective value to retransform in original space */
675    );
676 
677 /** gets clock time, when this solution was found
678  *
679  *  @return clock time, when this solution was found
680  *
681  *  @pre This method can be called if SCIP is in one of the following stages:
682  *       - \ref SCIP_STAGE_TRANSFORMING
683  *       - \ref SCIP_STAGE_TRANSFORMED
684  *       - \ref SCIP_STAGE_INITPRESOLVE
685  *       - \ref SCIP_STAGE_PRESOLVING
686  *       - \ref SCIP_STAGE_EXITPRESOLVE
687  *       - \ref SCIP_STAGE_PRESOLVED
688  *       - \ref SCIP_STAGE_INITSOLVE
689  *       - \ref SCIP_STAGE_SOLVING
690  *       - \ref SCIP_STAGE_SOLVED
691  *       - \ref SCIP_STAGE_EXITSOLVE
692  *       - \ref SCIP_STAGE_FREETRANS
693  */
694 SCIP_EXPORT
695 SCIP_Real SCIPgetSolTime(
696    SCIP*                 scip,               /**< SCIP data structure */
697    SCIP_SOL*             sol                 /**< primal solution */
698    );
699 
700 /** gets branch and bound run number, where this solution was found
701  *
702  *  @return branch and bound run number, where this solution was found
703  *
704  *  @pre This method can be called if 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  *       - \ref SCIP_STAGE_SOLVED
714  *       - \ref SCIP_STAGE_EXITSOLVE
715  *       - \ref SCIP_STAGE_FREETRANS
716  */
717 SCIP_EXPORT
718 int SCIPgetSolRunnum(
719    SCIP*                 scip,               /**< SCIP data structure */
720    SCIP_SOL*             sol                 /**< primal solution */
721    );
722 
723 /** gets node number of the specific branch and bound run, where this solution was found
724  *
725  *  @return node number of the specific branch and bound run, where this solution was found
726  *
727  *  @pre This method can be called if SCIP is in one of the following stages:
728  *       - \ref SCIP_STAGE_TRANSFORMING
729  *       - \ref SCIP_STAGE_TRANSFORMED
730  *       - \ref SCIP_STAGE_INITPRESOLVE
731  *       - \ref SCIP_STAGE_PRESOLVING
732  *       - \ref SCIP_STAGE_EXITPRESOLVE
733  *       - \ref SCIP_STAGE_PRESOLVED
734  *       - \ref SCIP_STAGE_INITSOLVE
735  *       - \ref SCIP_STAGE_SOLVING
736  *       - \ref SCIP_STAGE_SOLVED
737  *       - \ref SCIP_STAGE_EXITSOLVE
738  *       - \ref SCIP_STAGE_FREETRANS
739  */
740 SCIP_EXPORT
741 SCIP_Longint SCIPgetSolNodenum(
742    SCIP*                 scip,               /**< SCIP data structure */
743    SCIP_SOL*             sol                 /**< primal solution */
744    );
745 
746 /** gets heuristic, that found this solution (or NULL if it's from the tree)
747  *
748  *  @return heuristic, that found this solution (or NULL if it's from the tree)
749  *
750  *  @pre This method can be called if SCIP is in one of the following stages:
751  *       - \ref SCIP_STAGE_TRANSFORMING
752  *       - \ref SCIP_STAGE_TRANSFORMED
753  *       - \ref SCIP_STAGE_INITPRESOLVE
754  *       - \ref SCIP_STAGE_PRESOLVING
755  *       - \ref SCIP_STAGE_EXITPRESOLVE
756  *       - \ref SCIP_STAGE_PRESOLVED
757  *       - \ref SCIP_STAGE_INITSOLVE
758  *       - \ref SCIP_STAGE_SOLVING
759  *       - \ref SCIP_STAGE_SOLVED
760  *       - \ref SCIP_STAGE_EXITSOLVE
761  *       - \ref SCIP_STAGE_FREETRANS
762  */
763 SCIP_EXPORT
764 SCIP_HEUR* SCIPgetSolHeur(
765    SCIP*                 scip,               /**< SCIP data structure */
766    SCIP_SOL*             sol                 /**< primal solution */
767    );
768 
769 /** returns whether two given solutions are exactly equal
770  *
771  *  @return returns whether two given solutions are exactly equal
772  *
773  *  @pre This method can be called if SCIP is in one of the following stages:
774  *       - \ref SCIP_STAGE_PROBLEM
775  *       - \ref SCIP_STAGE_TRANSFORMING
776  *       - \ref SCIP_STAGE_TRANSFORMED
777  *       - \ref SCIP_STAGE_INITPRESOLVE
778  *       - \ref SCIP_STAGE_PRESOLVING
779  *       - \ref SCIP_STAGE_EXITPRESOLVE
780  *       - \ref SCIP_STAGE_PRESOLVED
781  *       - \ref SCIP_STAGE_INITSOLVE
782  *       - \ref SCIP_STAGE_SOLVING
783  *       - \ref SCIP_STAGE_SOLVED
784  *       - \ref SCIP_STAGE_EXITSOLVE
785  *       - \ref SCIP_STAGE_FREETRANS
786  */
787 SCIP_EXPORT
788 SCIP_Bool SCIPareSolsEqual(
789    SCIP*                 scip,               /**< SCIP data structure */
790    SCIP_SOL*             sol1,               /**< first primal CIP solution */
791    SCIP_SOL*             sol2                /**< second primal CIP solution */
792    );
793 
794 /** adjusts solution values of implicit integer variables in handed solution. Solution objective value is not
795  *  deteriorated by this method.
796  *
797  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
798  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
799  *
800  *  @pre This method can be called if SCIP is in one of the following stages:
801  *       - \ref SCIP_STAGE_SOLVING
802  */
803 SCIP_EXPORT
804 SCIP_RETCODE SCIPadjustImplicitSolVals(
805    SCIP*                 scip,               /**< SCIP data structure */
806    SCIP_SOL*             sol,                /**< primal CIP solution */
807    SCIP_Bool             uselprows           /**< should LP row information be considered for none-objective variables */
808    );
809 
810 /** outputs non-zero variables of solution in original problem space to the given file stream
811  *
812  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
813  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
814  *
815  *  @pre In case the solution pointer @p sol is NULL (askinking for the current LP/pseudo solution), this method can be
816  *       called if @p scip is in one of the following stages:
817  *       - \ref SCIP_STAGE_PRESOLVING
818  *       - \ref SCIP_STAGE_EXITPRESOLVE
819  *       - \ref SCIP_STAGE_PRESOLVED
820  *       - \ref SCIP_STAGE_INITSOLVE
821  *       - \ref SCIP_STAGE_SOLVING
822  *       - \ref SCIP_STAGE_SOLVED
823  *       - \ref SCIP_STAGE_EXITSOLVE
824  *
825  *  @pre In case the solution pointer @p sol is @b not NULL, this method can be called if @p scip is in one of the
826  *       following stages:
827  *       - \ref SCIP_STAGE_PROBLEM
828  *       - \ref SCIP_STAGE_TRANSFORMED
829  *       - \ref SCIP_STAGE_INITPRESOLVE
830  *       - \ref SCIP_STAGE_PRESOLVING
831  *       - \ref SCIP_STAGE_EXITPRESOLVE
832  *       - \ref SCIP_STAGE_PRESOLVED
833  *       - \ref SCIP_STAGE_INITSOLVE
834  *       - \ref SCIP_STAGE_SOLVING
835  *       - \ref SCIP_STAGE_SOLVED
836  *       - \ref SCIP_STAGE_EXITSOLVE
837  */
838 SCIP_EXPORT
839 SCIP_RETCODE SCIPprintSol(
840    SCIP*                 scip,               /**< SCIP data structure */
841    SCIP_SOL*             sol,                /**< primal solution, or NULL for current LP/pseudo solution */
842    FILE*                 file,               /**< output file (or NULL for standard output) */
843    SCIP_Bool             printzeros          /**< should variables set to zero be printed? */
844    );
845 
846 /** outputs non-zero variables of solution in transformed problem space to file stream
847  *
848  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
849  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
850  *
851  *  @pre This method can be called if SCIP is in one of the following stages:
852  *       - \ref SCIP_STAGE_TRANSFORMED
853  *       - \ref SCIP_STAGE_INITPRESOLVE
854  *       - \ref SCIP_STAGE_PRESOLVING
855  *       - \ref SCIP_STAGE_EXITPRESOLVE
856  *       - \ref SCIP_STAGE_PRESOLVED
857  *       - \ref SCIP_STAGE_INITSOLVE
858  *       - \ref SCIP_STAGE_SOLVING
859  *       - \ref SCIP_STAGE_SOLVED
860  *       - \ref SCIP_STAGE_EXITSOLVE
861  */
862 SCIP_EXPORT
863 SCIP_RETCODE SCIPprintTransSol(
864    SCIP*                 scip,               /**< SCIP data structure */
865    SCIP_SOL*             sol,                /**< primal solution, or NULL for current LP/pseudo solution */
866    FILE*                 file,               /**< output file (or NULL for standard output) */
867    SCIP_Bool             printzeros          /**< should variables set to zero be printed? */
868    );
869 
870 /** outputs discrete variables of solution in original problem space to the given file stream
871  *
872  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
873  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
874  *
875  *  @pre This method can be called if @p scip is in one of the following stages:
876  *       - \ref SCIP_STAGE_PROBLEM
877  *       - \ref SCIP_STAGE_TRANSFORMED
878  *       - \ref SCIP_STAGE_INITPRESOLVE
879  *       - \ref SCIP_STAGE_PRESOLVING
880  *       - \ref SCIP_STAGE_EXITPRESOLVE
881  *       - \ref SCIP_STAGE_PRESOLVED
882  *       - \ref SCIP_STAGE_INITSOLVE
883  *       - \ref SCIP_STAGE_SOLVING
884  *       - \ref SCIP_STAGE_SOLVED
885  *       - \ref SCIP_STAGE_EXITSOLVE
886  */
887 SCIP_EXPORT
888 SCIP_RETCODE SCIPprintMIPStart(
889    SCIP*                 scip,               /**< SCIP data structure */
890    SCIP_SOL*             sol,                /**< primal solution */
891    FILE*                 file                /**< output file (or NULL for standard output) */
892    );
893 
894 /** returns dual solution value of a constraint */
895 SCIP_EXPORT
896 SCIP_RETCODE SCIPgetDualSolVal(
897    SCIP*                 scip,               /**< SCIP data structure */
898    SCIP_CONS*            cons,               /**< constraint for which the dual solution should be returned */
899    SCIP_Real*            dualsolval,         /**< pointer to store the dual solution value */
900    SCIP_Bool*            boundconstraint     /**< pointer to store whether the constraint is a bound constraint (or NULL) */
901    );
902 
903 /** check whether the dual solution is available
904  *
905  * @note This is used when calling \ref SCIPprintDualSol()
906  *
907  * @return is dual solution available?
908  *
909  * @pre This method can be called if SCIP is in one of the following stages:
910  *       - \ref SCIP_STAGE_SOLVED
911  */
912 SCIP_EXPORT
913 SCIP_Bool SCIPisDualSolAvailable(
914    SCIP*                 scip,               /**< SCIP data structure */
915    SCIP_Bool             printreason         /**< print warning message if dualsol is not available? */
916    );
917 
918 /** outputs dual solution from LP solver to file stream
919  *
920  *  @note This only works if no presolving has been performed, which can be checked by calling method \ref
921  *        SCIPhasPerformedPresolve().
922  *
923  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
924  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
925  *
926  *  @pre This method can be called if SCIP is in one of the following stages:
927  *       - \ref SCIP_STAGE_SOLVED
928  */
929 SCIP_EXPORT
930 SCIP_RETCODE SCIPprintDualSol(
931    SCIP*                 scip,               /**< SCIP data structure */
932    FILE*                 file,               /**< output file (or NULL for standard output) */
933    SCIP_Bool             printzeros          /**< should variables set to zero be printed? */
934    );
935 
936 
937 /** outputs non-zero variables of solution representing a ray in original problem space to file stream
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 SCIP is in one of the following stages:
943  *       - \ref SCIP_STAGE_PROBLEM
944  *       - \ref SCIP_STAGE_TRANSFORMED
945  *       - \ref SCIP_STAGE_INITPRESOLVE
946  *       - \ref SCIP_STAGE_PRESOLVING
947  *       - \ref SCIP_STAGE_EXITPRESOLVE
948  *       - \ref SCIP_STAGE_PRESOLVED
949  *       - \ref SCIP_STAGE_INITSOLVE
950  *       - \ref SCIP_STAGE_SOLVING
951  *       - \ref SCIP_STAGE_SOLVED
952  *       - \ref SCIP_STAGE_EXITSOLVE
953  */
954 SCIP_EXPORT
955 SCIP_RETCODE SCIPprintRay(
956    SCIP*                 scip,               /**< SCIP data structure */
957    SCIP_SOL*             sol,                /**< primal solution representing ray */
958    FILE*                 file,               /**< output file (or NULL for standard output) */
959    SCIP_Bool             printzeros          /**< should variables set to zero be printed? */
960    );
961 
962 /** gets number of feasible primal solutions stored in the solution storage in case the problem is transformed;
963  *  in case the problem stage is SCIP_STAGE_PROBLEM, the number of solution in the original solution candidate
964  *  storage is returned
965  *
966  *  @return number of feasible primal solutions stored in the solution storage in case the problem is transformed; or
967  *          number of solution in the original solution candidate storage if the problem stage is SCIP_STAGE_PROBLEM
968  *
969  *  @pre This method can be called if SCIP is in one of the following stages:
970  *       - \ref SCIP_STAGE_PROBLEM
971  *       - \ref SCIP_STAGE_TRANSFORMED
972  *       - \ref SCIP_STAGE_INITPRESOLVE
973  *       - \ref SCIP_STAGE_PRESOLVING
974  *       - \ref SCIP_STAGE_EXITPRESOLVE
975  *       - \ref SCIP_STAGE_PRESOLVED
976  *       - \ref SCIP_STAGE_INITSOLVE
977  *       - \ref SCIP_STAGE_SOLVING
978  *       - \ref SCIP_STAGE_SOLVED
979  *       - \ref SCIP_STAGE_EXITSOLVE
980  */
981 SCIP_EXPORT
982 int SCIPgetNSols(
983    SCIP*                 scip                /**< SCIP data structure */
984    );
985 
986 /** gets array of feasible primal solutions stored in the solution storage in case the problem is transformed; in case
987  *  if the problem stage is in SCIP_STAGE_PROBLEM, it returns the number array of solution candidate stored
988  *
989  *  @return array of feasible primal solutions
990  *
991  *  @pre This method can be called if SCIP is in one of the following stages:
992  *       - \ref SCIP_STAGE_PROBLEM
993  *       - \ref SCIP_STAGE_TRANSFORMED
994  *       - \ref SCIP_STAGE_INITPRESOLVE
995  *       - \ref SCIP_STAGE_PRESOLVING
996  *       - \ref SCIP_STAGE_EXITPRESOLVE
997  *       - \ref SCIP_STAGE_PRESOLVED
998  *       - \ref SCIP_STAGE_INITSOLVE
999  *       - \ref SCIP_STAGE_SOLVING
1000  *       - \ref SCIP_STAGE_SOLVED
1001  *       - \ref SCIP_STAGE_EXITSOLVE
1002  */
1003 SCIP_EXPORT
1004 SCIP_SOL** SCIPgetSols(
1005    SCIP*                 scip                /**< SCIP data structure */
1006    );
1007 
1008 /** gets best feasible primal solution found so far if the problem is transformed; in case the problem is in
1009  *  SCIP_STAGE_PROBLEM it returns the best solution candidate, or NULL if no solution has been found or the candidate
1010  *  store is empty;
1011  *
1012  *  @return best feasible primal solution so far
1013  *
1014  *  @pre This method can be called if SCIP is in one of the following stages:
1015  *       - \ref SCIP_STAGE_PROBLEM
1016  *       - \ref SCIP_STAGE_TRANSFORMED
1017  *       - \ref SCIP_STAGE_INITPRESOLVE
1018  *       - \ref SCIP_STAGE_PRESOLVING
1019  *       - \ref SCIP_STAGE_EXITPRESOLVE
1020  *       - \ref SCIP_STAGE_PRESOLVED
1021  *       - \ref SCIP_STAGE_INITSOLVE
1022  *       - \ref SCIP_STAGE_SOLVING
1023  *       - \ref SCIP_STAGE_SOLVED
1024  *       - \ref SCIP_STAGE_EXITSOLVE
1025  */
1026 SCIP_EXPORT
1027 SCIP_SOL* SCIPgetBestSol(
1028    SCIP*                 scip                /**< SCIP data structure */
1029    );
1030 
1031 /** outputs best feasible primal solution found so far to file stream
1032  *
1033  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1034  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1035  *
1036  *  @pre This method can be called if SCIP is in one of the following stages:
1037  *       - \ref SCIP_STAGE_INIT
1038  *       - \ref SCIP_STAGE_PROBLEM
1039  *       - \ref SCIP_STAGE_TRANSFORMING
1040  *       - \ref SCIP_STAGE_TRANSFORMED
1041  *       - \ref SCIP_STAGE_INITPRESOLVE
1042  *       - \ref SCIP_STAGE_PRESOLVING
1043  *       - \ref SCIP_STAGE_EXITPRESOLVE
1044  *       - \ref SCIP_STAGE_PRESOLVED
1045  *       - \ref SCIP_STAGE_INITSOLVE
1046  *       - \ref SCIP_STAGE_SOLVING
1047  *       - \ref SCIP_STAGE_SOLVED
1048  *       - \ref SCIP_STAGE_EXITSOLVE
1049  *       - \ref SCIP_STAGE_FREE
1050  */
1051 SCIP_EXPORT
1052 SCIP_RETCODE SCIPprintBestSol(
1053    SCIP*                 scip,               /**< SCIP data structure */
1054    FILE*                 file,               /**< output file (or NULL for standard output) */
1055    SCIP_Bool             printzeros          /**< should variables set to zero be printed? */
1056    );
1057 
1058 /** outputs best feasible primal solution found so far in transformed variables to file stream
1059  *
1060  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1061  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1062  *
1063  *  @pre This method can be called if SCIP is in one of the following stages:
1064  *       - \ref SCIP_STAGE_INIT
1065  *       - \ref SCIP_STAGE_PROBLEM
1066  *       - \ref SCIP_STAGE_TRANSFORMING
1067  *       - \ref SCIP_STAGE_TRANSFORMED
1068  *       - \ref SCIP_STAGE_INITPRESOLVE
1069  *       - \ref SCIP_STAGE_PRESOLVING
1070  *       - \ref SCIP_STAGE_EXITPRESOLVE
1071  *       - \ref SCIP_STAGE_PRESOLVED
1072  *       - \ref SCIP_STAGE_INITSOLVE
1073  *       - \ref SCIP_STAGE_SOLVING
1074  *       - \ref SCIP_STAGE_SOLVED
1075  *       - \ref SCIP_STAGE_EXITSOLVE
1076  *       - \ref SCIP_STAGE_FREE
1077  */
1078 SCIP_EXPORT
1079 SCIP_RETCODE SCIPprintBestTransSol(
1080    SCIP*                 scip,               /**< SCIP data structure */
1081    FILE*                 file,               /**< output file (or NULL for standard output) */
1082    SCIP_Bool             printzeros          /**< should variables set to zero be printed? */
1083    );
1084 
1085 /** try to round given solution
1086  *
1087  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1088  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1089  *
1090  *  @pre This method can be called if SCIP is in one of the following stages:
1091  *       - \ref SCIP_STAGE_SOLVING
1092  */
1093 SCIP_EXPORT
1094 SCIP_RETCODE SCIProundSol(
1095    SCIP*                 scip,               /**< SCIP data structure */
1096    SCIP_SOL*             sol,                /**< primal solution */
1097    SCIP_Bool*            success             /**< pointer to store whether rounding was successful */
1098    );
1099 
1100 /** retransforms solution to original problem space
1101  *
1102  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1103  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1104  *
1105  *  @pre This method can be called if SCIP is in one of the following stages:
1106  *       - \ref SCIP_STAGE_PROBLEM
1107  *       - \ref SCIP_STAGE_TRANSFORMING
1108  *       - \ref SCIP_STAGE_TRANSFORMED
1109  *       - \ref SCIP_STAGE_INITPRESOLVE
1110  *       - \ref SCIP_STAGE_PRESOLVING
1111  *       - \ref SCIP_STAGE_EXITPRESOLVE
1112  *       - \ref SCIP_STAGE_PRESOLVED
1113  *       - \ref SCIP_STAGE_INITSOLVE
1114  *       - \ref SCIP_STAGE_SOLVING
1115  *       - \ref SCIP_STAGE_SOLVED
1116  *       - \ref SCIP_STAGE_EXITSOLVE
1117  *       - \ref SCIP_STAGE_FREETRANS
1118  */
1119 SCIP_EXPORT
1120 SCIP_RETCODE SCIPretransformSol(
1121    SCIP*                 scip,               /**< SCIP data structure */
1122    SCIP_SOL*             sol                 /**< primal CIP solution */
1123    );
1124 
1125 /** reads a given solution file
1126  *
1127  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1128  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1129  *
1130  *  @pre This method can be called if SCIP is in one of the following stages:
1131  *       - \ref SCIP_STAGE_PROBLEM
1132  *       - \ref SCIP_STAGE_TRANSFORMED
1133  *       - \ref SCIP_STAGE_INITPRESOLVE
1134  *       - \ref SCIP_STAGE_PRESOLVING
1135  *       - \ref SCIP_STAGE_EXITPRESOLVE
1136  *       - \ref SCIP_STAGE_PRESOLVED
1137  *       - \ref SCIP_STAGE_INITSOLVE
1138  *       - \ref SCIP_STAGE_SOLVING
1139  */
1140 SCIP_EXPORT
1141 SCIP_RETCODE SCIPreadSol(
1142    SCIP*                 scip,               /**< SCIP data structure */
1143    const char*           filename            /**< name of the input file */
1144    );
1145 
1146 /** reads a given solution file and store the solution values in the given solution pointer
1147  *
1148  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1149  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1150  *
1151  *  @pre This method can be called if SCIP is in one of the following stages:
1152  *       - \ref SCIP_STAGE_PROBLEM
1153  *       - \ref SCIP_STAGE_TRANSFORMED
1154  *       - \ref SCIP_STAGE_INITPRESOLVE
1155  *       - \ref SCIP_STAGE_PRESOLVING
1156  *       - \ref SCIP_STAGE_EXITPRESOLVE
1157  *       - \ref SCIP_STAGE_PRESOLVED
1158  *       - \ref SCIP_STAGE_INITSOLVE
1159  *       - \ref SCIP_STAGE_SOLVING
1160  */
1161 SCIP_EXPORT
1162 SCIP_RETCODE SCIPreadSolFile(
1163    SCIP*                 scip,               /**< SCIP data structure */
1164    const char*           filename,           /**< name of the input file */
1165    SCIP_SOL*             sol,                /**< solution pointer */
1166    SCIP_Bool             xml,                /**< true, iff the given solution in written in XML */
1167    SCIP_Bool*            partial,            /**< pointer to store if the solution is partial */
1168    SCIP_Bool*            error               /**< pointer store if an error occured */
1169    );
1170 
1171 /** adds feasible primal solution to solution storage by copying it
1172  *
1173  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1174  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1175  *
1176  *  @pre This method can be called if SCIP is in one of the following stages:
1177  *       - \ref SCIP_STAGE_PROBLEM
1178  *       - \ref SCIP_STAGE_TRANSFORMED
1179  *       - \ref SCIP_STAGE_INITPRESOLVE
1180  *       - \ref SCIP_STAGE_PRESOLVING
1181  *       - \ref SCIP_STAGE_EXITPRESOLVE
1182  *       - \ref SCIP_STAGE_PRESOLVED
1183  *       - \ref SCIP_STAGE_SOLVING
1184  *       - \ref SCIP_STAGE_FREETRANS
1185  *
1186  *  @note Do not call during propagation, use heur_trysol instead.
1187  */
1188 SCIP_EXPORT
1189 SCIP_RETCODE SCIPaddSol(
1190    SCIP*                 scip,               /**< SCIP data structure */
1191    SCIP_SOL*             sol,                /**< primal CIP solution */
1192    SCIP_Bool*            stored              /**< stores whether given solution was good enough to keep */
1193    );
1194 
1195 /** adds primal solution to solution storage, frees the solution afterwards
1196  *
1197  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1198  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1199  *
1200  *  @pre This method can be called if SCIP is in one of the following stages:
1201  *       - \ref SCIP_STAGE_PROBLEM
1202  *       - \ref SCIP_STAGE_TRANSFORMED
1203  *       - \ref SCIP_STAGE_INITPRESOLVE
1204  *       - \ref SCIP_STAGE_PRESOLVING
1205  *       - \ref SCIP_STAGE_EXITPRESOLVE
1206  *       - \ref SCIP_STAGE_PRESOLVED
1207  *       - \ref SCIP_STAGE_SOLVING
1208  *       - \ref SCIP_STAGE_FREETRANS
1209  *
1210  *  @note Do not call during propagation, use heur_trysol instead.
1211  */
1212 SCIP_EXPORT
1213 SCIP_RETCODE SCIPaddSolFree(
1214    SCIP*                 scip,               /**< SCIP data structure */
1215    SCIP_SOL**            sol,                /**< pointer to primal CIP solution; is cleared in function call */
1216    SCIP_Bool*            stored              /**< stores whether given solution was good enough to keep */
1217    );
1218 
1219 /** adds current LP/pseudo solution to solution storage
1220  *
1221  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1222  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1223  *
1224  *  @pre This method can be called if SCIP is in one of the following stages:
1225  *       - \ref SCIP_STAGE_PRESOLVED
1226  *       - \ref SCIP_STAGE_SOLVING
1227  */
1228 SCIP_EXPORT
1229 SCIP_RETCODE SCIPaddCurrentSol(
1230    SCIP*                 scip,               /**< SCIP data structure */
1231    SCIP_HEUR*            heur,               /**< heuristic that found the solution */
1232    SCIP_Bool*            stored              /**< stores whether given solution was good enough to keep */
1233    );
1234 
1235 /** checks solution for feasibility; if possible, adds it to storage by copying
1236  *
1237  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1238  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1239  *
1240  *  @pre This method can be called if SCIP is in one of the following stages:
1241  *       - \ref SCIP_STAGE_TRANSFORMED
1242  *       - \ref SCIP_STAGE_INITPRESOLVE
1243  *       - \ref SCIP_STAGE_PRESOLVING
1244  *       - \ref SCIP_STAGE_EXITPRESOLVE
1245  *       - \ref SCIP_STAGE_PRESOLVED
1246  *       - \ref SCIP_STAGE_SOLVING
1247  *
1248  *  @note Do not call during propagation, use heur_trysol instead.
1249  */
1250 SCIP_EXPORT
1251 SCIP_RETCODE SCIPtrySol(
1252    SCIP*                 scip,               /**< SCIP data structure */
1253    SCIP_SOL*             sol,                /**< primal CIP solution */
1254    SCIP_Bool             printreason,        /**< Should all reasons of violations be printed? */
1255    SCIP_Bool             completely,         /**< Should all violations be checked if printreason is true? */
1256    SCIP_Bool             checkbounds,        /**< Should the bounds of the variables be checked? */
1257    SCIP_Bool             checkintegrality,   /**< Has integrality to be checked? */
1258    SCIP_Bool             checklprows,        /**< Do constraints represented by rows in the current LP have to be checked? */
1259    SCIP_Bool*            stored              /**< stores whether given solution was feasible and good enough to keep */
1260    );
1261 
1262 /** checks primal solution; if feasible, adds it to storage; solution is freed afterwards
1263  *
1264  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1265  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1266  *
1267  *  @pre This method can be called if SCIP is in one of the following stages:
1268  *       - \ref SCIP_STAGE_TRANSFORMED
1269  *       - \ref SCIP_STAGE_INITPRESOLVE
1270  *       - \ref SCIP_STAGE_PRESOLVING
1271  *       - \ref SCIP_STAGE_EXITPRESOLVE
1272  *       - \ref SCIP_STAGE_PRESOLVED
1273  *       - \ref SCIP_STAGE_SOLVING
1274  *
1275  *  @note Do not call during propagation, use heur_trysol instead.
1276  */
1277 SCIP_EXPORT
1278 SCIP_RETCODE SCIPtrySolFree(
1279    SCIP*                 scip,               /**< SCIP data structure */
1280    SCIP_SOL**            sol,                /**< pointer to primal CIP solution; is cleared in function call */
1281    SCIP_Bool             printreason,        /**< Should all reasons of violations be printed? */
1282    SCIP_Bool             completely,         /**< Should all violations be checked if printreason is true? */
1283    SCIP_Bool             checkbounds,        /**< Should the bounds of the variables be checked? */
1284    SCIP_Bool             checkintegrality,   /**< Has integrality to be checked? */
1285    SCIP_Bool             checklprows,        /**< Do constraints represented by rows in the current LP have to be checked? */
1286    SCIP_Bool*            stored              /**< stores whether solution was feasible and good enough to keep */
1287    );
1288 
1289 /** checks current LP/pseudo solution for feasibility; if possible, adds it to storage
1290  *
1291  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1292  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1293  *
1294  *  @pre This method can be called if SCIP is in one of the following stages:
1295  *       - \ref SCIP_STAGE_PRESOLVED
1296  *       - \ref SCIP_STAGE_SOLVING
1297  */
1298 SCIP_EXPORT
1299 SCIP_RETCODE SCIPtryCurrentSol(
1300    SCIP*                 scip,               /**< SCIP data structure */
1301    SCIP_HEUR*            heur,               /**< heuristic that found the solution */
1302    SCIP_Bool             printreason,        /**< Should all reasons of violations be printed? */
1303    SCIP_Bool             completely,         /**< Should all violations be checked if printreason is true? */
1304    SCIP_Bool             checkintegrality,   /**< Has integrality to be checked? */
1305    SCIP_Bool             checklprows,        /**< Do constraints represented by rows in the current LP have to be checked? */
1306    SCIP_Bool*            stored              /**< stores whether given solution was feasible and good enough to keep */
1307    );
1308 
1309 /** returns all partial solutions
1310  *
1311  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1312  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1313  *
1314  *  @pre This method can be called if SCIP is in one of the following stages:
1315  *       - \ref SCIP_STAGE_PROBLEM
1316  *       - \ref SCIP_STAGE_PRESOLVING
1317  *       - \ref SCIP_STAGE_SOLVING
1318  *       - \ref SCIP_STAGE_SOLVED
1319  */
1320 SCIP_EXPORT
1321 SCIP_SOL** SCIPgetPartialSols(
1322    SCIP*                 scip                /**< SCIP data structure */
1323    );
1324 
1325 /** returns number of partial solutions
1326  *
1327  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1328  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1329  *
1330  *  @pre This method can be called if SCIP is in one of the following stages:
1331  *       - \ref SCIP_STAGE_PROBLEM
1332  *       - \ref SCIP_STAGE_PRESOLVING
1333  *       - \ref SCIP_STAGE_SOLVING
1334  *       - \ref SCIP_STAGE_SOLVED
1335  */
1336 int SCIPgetNPartialSols(
1337    SCIP*                 scip                /**< SCIP data structure */
1338    );
1339 
1340 /** checks solution for feasibility without adding it to the solution store
1341  *
1342  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1343  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1344  *
1345  *  @pre This method can be called if SCIP is in one of the following stages:
1346  *       - \ref SCIP_STAGE_PROBLEM
1347  *       - \ref SCIP_STAGE_TRANSFORMED
1348  *       - \ref SCIP_STAGE_INITPRESOLVE
1349  *       - \ref SCIP_STAGE_PRESOLVING
1350  *       - \ref SCIP_STAGE_EXITPRESOLVE
1351  *       - \ref SCIP_STAGE_PRESOLVED
1352  *       - \ref SCIP_STAGE_INITSOLVE
1353  *       - \ref SCIP_STAGE_SOLVING
1354  *       - \ref SCIP_STAGE_SOLVED
1355  */
1356 SCIP_EXPORT
1357 SCIP_RETCODE SCIPcheckSol(
1358    SCIP*                 scip,               /**< SCIP data structure */
1359    SCIP_SOL*             sol,                /**< primal CIP solution */
1360    SCIP_Bool             printreason,        /**< Should all reasons of violations be printed? */
1361    SCIP_Bool             completely,         /**< Should all violations be checked if printreason is true? */
1362    SCIP_Bool             checkbounds,        /**< Should the bounds of the variables be checked? */
1363    SCIP_Bool             checkintegrality,   /**< Has integrality to be checked? */
1364    SCIP_Bool             checklprows,        /**< Do constraints represented by rows in the current LP have to be checked? */
1365    SCIP_Bool*            feasible            /**< stores whether given solution is feasible */
1366    );
1367 
1368 /** checks solution for feasibility in original problem without adding it to the solution store;
1369  *  this method is used to double check a solution in order to validate the presolving process
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 SCIP is in one of the following stages:
1375  *       - \ref SCIP_STAGE_PROBLEM
1376  *       - \ref SCIP_STAGE_TRANSFORMED
1377  *       - \ref SCIP_STAGE_INITPRESOLVE
1378  *       - \ref SCIP_STAGE_PRESOLVING
1379  *       - \ref SCIP_STAGE_EXITPRESOLVE
1380  *       - \ref SCIP_STAGE_PRESOLVED
1381  *       - \ref SCIP_STAGE_INITSOLVE
1382  *       - \ref SCIP_STAGE_SOLVING
1383  *       - \ref SCIP_STAGE_SOLVED
1384  */
1385 SCIP_EXPORT
1386 SCIP_RETCODE SCIPcheckSolOrig(
1387    SCIP*                 scip,               /**< SCIP data structure */
1388    SCIP_SOL*             sol,                /**< primal CIP solution */
1389    SCIP_Bool*            feasible,           /**< stores whether given solution is feasible */
1390    SCIP_Bool             printreason,        /**< should the reason for the violation be printed? */
1391    SCIP_Bool             completely          /**< Should all violations be checked if printreason is true? */
1392    );
1393 
1394 /** update integrality violation of a solution */
1395 SCIP_EXPORT
1396 void SCIPupdateSolIntegralityViolation(
1397    SCIP*                 scip,               /**< SCIP data structure */
1398    SCIP_SOL*             sol,                /**< primal CIP solution */
1399    SCIP_Real             absviol             /**< absolute violation */
1400    );
1401 
1402 /** update bound violation of a solution */
1403 SCIP_EXPORT
1404 void SCIPupdateSolBoundViolation(
1405    SCIP*                 scip,               /**< SCIP data structure */
1406    SCIP_SOL*             sol,                /**< primal CIP solution */
1407    SCIP_Real             absviol,            /**< absolute violation */
1408    SCIP_Real             relviol             /**< relative violation */
1409    );
1410 
1411 /** update LP row violation of a solution */
1412 SCIP_EXPORT
1413 void SCIPupdateSolLPRowViolation(
1414    SCIP*                 scip,               /**< SCIP data structure */
1415    SCIP_SOL*             sol,                /**< primal CIP solution */
1416    SCIP_Real             absviol,            /**< absolute violation */
1417    SCIP_Real             relviol             /**< relative violation */
1418    );
1419 
1420 /** update constraint violation of a solution */
1421 SCIP_EXPORT
1422 void SCIPupdateSolConsViolation(
1423    SCIP*                 scip,               /**< SCIP data structure */
1424    SCIP_SOL*             sol,                /**< primal CIP solution */
1425    SCIP_Real             absviol,            /**< absolute violation */
1426    SCIP_Real             relviol             /**< relative violation */
1427    );
1428 
1429 /** update LP row and constraint violations of a solution */
1430 SCIP_EXPORT
1431 void SCIPupdateSolLPConsViolation(
1432    SCIP*                 scip,               /**< SCIP data structure */
1433    SCIP_SOL*             sol,                /**< primal CIP solution */
1434    SCIP_Real             absviol,            /**< absolute violation */
1435    SCIP_Real             relviol             /**< relative violation */
1436    );
1437 
1438 /** allow violation updates */
1439 SCIP_EXPORT
1440 void SCIPactivateSolViolationUpdates(
1441    SCIP*                 scip                /**< SCIP data structure */
1442    );
1443 
1444 /** disallow violation updates */
1445 SCIP_EXPORT
1446 void SCIPdeactivateSolViolationUpdates(
1447    SCIP*                 scip                /**< SCIP data structure */
1448    );
1449 
1450 /** return whether a primal ray is stored that proves unboundedness of the LP relaxation
1451  *
1452  *  @return return whether a primal ray is stored that proves unboundedness of the LP relaxation
1453  *
1454  *  @pre This method can be called if SCIP is in one of the following stages:
1455  *       - \ref SCIP_STAGE_SOLVING
1456  *       - \ref SCIP_STAGE_SOLVED
1457  */
1458 SCIP_EXPORT
1459 SCIP_Bool SCIPhasPrimalRay(
1460    SCIP*                 scip                /**< SCIP data structure */
1461    );
1462 
1463 /** gets value of given variable in primal ray causing unboundedness of the LP relaxation;
1464  *  should only be called if such a ray is stored (check with SCIPhasPrimalRay())
1465  *
1466  *  @return value of given variable in primal ray causing unboundedness of the LP relaxation
1467  *
1468  *  @pre This method can be called if SCIP is in one of the following stages:
1469  *       - \ref SCIP_STAGE_SOLVING
1470  *       - \ref SCIP_STAGE_SOLVED
1471  */
1472 SCIP_EXPORT
1473 SCIP_Real SCIPgetPrimalRayVal(
1474    SCIP*                 scip,               /**< SCIP data structure */
1475    SCIP_VAR*             var                 /**< variable to get value for */
1476    );
1477 
1478 /** updates the primal ray thats proves unboundedness
1479  *
1480  *  @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
1481  *          SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
1482  *
1483  *  @pre This method can be called if @p scip is in one of the following stages:
1484  *       - \ref SCIP_STAGE_PRESOLVING
1485  *       - \ref SCIP_STAGE_PRESOLVED
1486  *       - \ref SCIP_STAGE_SOLVING
1487  *       - \ref SCIP_STAGE_SOLVED
1488  *
1489  *  See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages.
1490  */
1491 SCIP_EXPORT
1492 SCIP_RETCODE SCIPupdatePrimalRay(
1493    SCIP*                 scip,               /**< SCIP data structure */
1494    SCIP_SOL*             primalray           /**< the new primal ray */
1495    );
1496 
1497 /**@} */
1498 
1499 #ifdef __cplusplus
1500 }
1501 #endif
1502 
1503 #endif
1504