Scippy

SCIP

Solving Constraint Integer Programs

xternal.c
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-2017 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 email to scip@zib.de. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file xternal.c
17  * @brief main document page
18  * @author Tobias Achterberg
19  * @author Timo Berthold
20  * @author Tristan Gally
21  * @author Gerald Gamrath
22  * @author Stefan Heinz
23  * @author Gregor Hendel
24  * @author Mathias Kinder
25  * @author Marc Pfetsch
26  * @author Stefan Vigerske
27  * @author Robert Waniek
28  * @author Kati Wolter
29  * @author Michael Winkler
30  */
31 
32 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
33 
34 /**@mainpage Overview
35  *
36  *
37  * @section WHATISSCIP What is SCIP?
38  *
39  * \SCIP is a framework to solve constraint integer programs (CIPs) and mixed-integer nonlinear programs. In particular,
40  *
41  * - \SCIP incorporates a mixed-integer programming (MIP) solver as well as
42  * - an LP based mixed-integer nonlinear programming (MINLP) solver, and
43  * - is a framework for branch-and-cut-and-price.
44  *
45  * \SCIP is developed together with
46  * <a href="http://www3.mathematik.tu-darmstadt.de/ags/optimierung/research/discrete-optimization.html">TU Darmstadt</a> and
47  * <a href="http://www.am.uni-erlangen.de/wima/">University of Erlangen-N&uuml;rnberg (Chair of EDOM)</a>
48  * and has more than 500,000 lines of C code.
49  *
50  * See the web site of <a href="http://scip.zib.de">\SCIP</a> for more information about licensing and to download \SCIP.
51  *
52  * @section GETTINGSTARTED Getting started
53  *
54  * - \ref WHATPROBLEMS "What types of optimization problems does SCIP solve?"
55  * - \ref CMAKE "Installation information using CMake"
56  * - \ref MAKE "Installation information using Makefiles"
57  * - \ref LICENSE "License"
58  *
59  * - \ref SHELL "Tutorial: the interactive shell"
60  * - \ref FILEREADERS "Readable file formats"
61  * - \ref START "How to start a new project"
62  * - \ref EXAMPLES "Examples"
63  * - \ref APPLICATIONS "Extensions of SCIP for specific applications"
64  * - \ref LPI "Available LP solver interfaces"
65  * - \ref NLPISOLVERS "Available implementations of the NLP solver interface"
66  *
67  * @section FURTHERINFORMATION References
68  *
69  * - \ref PUBLICAPI "List of callable functions"
70  * - \ref PARAMETERS "List of all SCIP parameters"
71  *
72  * - \ref DOC "How to search the documentation for interface methods"
73  * - \ref FAQ "Frequently asked questions (FAQ)"
74  *
75  *
76  * @section PROGRAMMING Programming with SCIP
77  *
78  * @subsection CODINGBASICS Coding basics for SCIP
79  *
80  * - \ref CODE "Coding style guidelines"
81  * - \ref OBJ "Creating, capturing, releasing, and adding data objects"
82  * - \ref MEMORY "Using the memory functions of SCIP"
83  * - \ref DEBUG "Debugging"
84  *
85  * @subsection HOWTOADD How to add ...
86  *
87  * Below you find for most plugin types a detailed description of how to implement and add them to \SCIP.
88  *
89  * - \ref CONS "Constraint handlers"
90  * - \ref PRICER "Variable pricers"
91  * - \ref PRESOL "Presolvers"
92  * - \ref SEPA "Separators"
93  * - \ref PROP "Propagators"
94  * - \ref BRANCH "Branching rules"
95  * - \ref NODESEL "Node selectors"
96  * - \ref HEUR "Primal heuristics"
97  * + \ref DIVINGHEUR "Diving heuristics"
98  * - \ref RELAX "Relaxation handlers"
99  * - \ref READER "File readers"
100  * - \ref DIALOG "Dialogs"
101  * - \ref DISP "Display columns"
102  * - \ref EVENT "Event handler"
103  * - \ref NLPI "Interface to NLP solvers"
104  * - \ref EXPRINT "Interfaces to expression interpreters"
105  * - \ref PARAM "additional user parameters"
106  * - \ref TABLE "Statistics tables"
107  *
108  * @subsection HOWTOUSESECTION How to use ...
109  *
110  * - \ref CONF "Conflict analysis"
111  * - \ref TEST "How to run automated tests with SCIP"
112  * - \ref COUNTER "How to use SCIP to count feasible solutions"
113  * - \ref REOPT "How to use reoptimization in SCIP"
114  * - \ref CONCSCIP "How to use the concurrent solving mode in SCIP"
115  *
116  *
117  * @section FURTHERINFO Further information
118  *
119  * @subsection CHG Changes between different versions of SCIP
120  * - \ref CHANGELOG "Change log"
121  * - \ref RELEASENOTES "Release notes"
122  * - \ref CHG10 "Interface changes between version 4.0 and 5.0"
123  * - \ref CHG9 "Interface changes between version 3.2 and 4.0"
124  * - \ref CHG8 "Interface changes between version 3.1 and 3.2"
125  * - \ref CHG7 "Interface changes between version 3.0 and 3.1"
126  * - \ref CHG6 "Interface changes between version 2.1 and 3.0"
127  * - \ref CHG5 "Interface changes between version 2.0 and 2.1"
128  * - \ref CHG4 "Interface changes between version 1.2 and 2.0"
129  * - \ref CHG3 "Interface changes between version 1.1 and 1.2"
130  * - \ref CHG2 "Interface changes between version 1.0 and 1.1"
131  * - \ref CHG1 "Interface changes between version 0.9 and 1.0"
132  *
133  * @subsection AUTHORS SCIP Authors
134  * - <a class="el" href="http://scip.zib.de/#developers">Developers</a>
135  *
136  * @version 5.0.0
137  *
138  * \image html scippy.png
139  *
140  */
141 
142 /** @page EXAMPLES Example projects
143  *
144  * \SCIP contains several examples that demonstrate its usage. They are contained in the &quot;examples&quot; directory
145  * in the source code distribution.
146  *
147  * @section BRANCHANDPRICE Branch-and-price
148  *
149  * <table>
150  * <tr>
151  * <td>
152  * \ref BINPACKING_MAIN "Binpacking"
153  * </td>
154  * <td>
155  * An implementation of the column generation approach for the binpacking problem. It includes a customized reader,
156  * Ryan/Foster branching rule, (global) problem data, variable data, and constraint handler.
157  * </td>
158  * </tr>
159  * <tr>
160  * <td>
161  * <a href="http://scip.zib.de/doc/examples/VRP"><b>VRP</b></a>
162  * </td>
163  * <td>
164  * A solver for a simple capacity-constrained vehicle routing problem, which is based on pricing tours via a dynamic
165  * programming algorithm.
166  * </td>
167  * </tr>
168  * </table>
169  *
170  * @section BRANCHANDCUT Branch-and-cut
171  *
172  * <table>
173  * <tr>
174  * <td>
175  * \ref LOP_MAIN "Linear Ordering"
176  * </td>
177  * <td>
178  * An example for implementing a constraint handler.
179  * </td>
180  * </tr>
181  * <tr>
182  * <td>
183  * \ref TSP_MAIN "The TSP example"
184  * </td>
185  * <td>
186  * A short implementations of a constraint handler, two easy combinatorial heuristics, a file reader, etc. which
187  * demonstrate the usage of \SCIP as a branch-and-cut-framework for solving traveling salesman problem instances.
188  * </td>
189  * </tr>
190  * </table>
191  *
192  * @section CALLABLELIBRARY Callable library
193  *
194  * <table>
195  * <tr>
196  * <td>
197  * \ref CALLABLELIBRARY_MAIN "Callable Library Example"
198  * </td>
199  * <td>
200  * An example showing how to setup constraints (esp. nonlinear ones) when using \SCIP as callable library.
201  * </td>
202  * </tr>
203  * <tr>
204  * <td>
205  * \ref MIPSOLVER_MAIN "MIP solver"
206  * </td>
207  * <td>
208  * A minimal implementation for using \SCIP included into another source code
209  * </td>
210  * </tr>
211  * <tr>
212  * <td>
213  * <a href="http://scip.zib.de/download/files/scip_intro_01.pdf"><b>Queens</b></a>
214  * </td>
215  * <td>
216  * An example showing the use of \SCIP as callable library.
217  * </td>
218  * </tr>
219  * </table>
220  *
221  *
222  * @section OTHERPLUGINS Other plugins
223  *
224  * <table>
225  * <tr>
226  * <td>
227  * \ref EVENTHDLR_MAIN "Event handler"
228  * </td>
229  * <td>
230  * A small example illustrating the use of an event handler.
231  * </td>
232  * </tr>
233  * <tr>
234  * <td>
235  * \ref GMI_MAIN "Gomory mixed integer cut example"
236  * </td>
237  * <td>
238  * An example about Gomory mixed-integer cuts.
239  * </td>
240  * </tr>
241  * <tr>
242  * <td>
243  * \ref RELAXATOR_MAIN "Relaxator example"
244  * </td>
245  * <td>
246  * An example about using custom relaxators.
247  * </td>
248  * </tr>
249  * </table>
250  *
251  */
252 
253 /** @page APPLICATIONS Application projects
254  *
255  * There are several extensions of \SCIP for particular applications included in the release. They are contained in the &quot;applications&quot; directory
256  * in the source code distribution.
257  *
258  * <table>
259  * <tr>
260  * <td>
261  * <a href="http://scip.zib.de/doc/applications/Coloring"><b>Coloring</b></a>
262  * </td>
263  * <td>
264  * An implementation of the column generation approach for graph coloring of Mehrotra and Trick.
265  * </td>
266  * </tr>
267  * <tr>
268  * <td>
269  * <a href="http://scip.zib.de/doc/applications/MinIISC"><b>MinIISC</b></a>
270  * </td>
271  * <td>
272  * A solver that computes irreducible infeasible subsystems using Benders decomposition
273  * </td>
274  * </tr>
275  * <tr>
276  * <td>
277  * <a href="http://scip.zib.de/doc/applications/Scheduler"><b>Scheduler</b></a>
278  * </td>
279  * <td>
280  * A solver for scheduling problems.
281  * </td>
282  * </tr>
283  * <tr>
284  * <td>
285  * <a href="http://scip.zib.de/doc/applications/STP"><b>Steiner Tree Problem</b></a>
286  * </td>
287  * <td>
288  * A solver for Steiner Tree Problems in graphs, based on a branch-and-cut approach.
289  * </td>
290  * </tr>
291  * <tr>
292  * <td>
293  * <a href="http://scip.zib.de/doc/applications/PolySCIP"><b>PolySCIP</b></a>
294  * </td>
295  * <td>
296  * A solver for multi-objective optimization problems.
297  * </td>
298  * </tr>
299  * <tr>
300  * <td>
301  * <a href="http://scip.zib.de/doc/applications/Cycleclustering"><b>Cycle Clustering</b></a>
302  * </td>
303  * <td>
304  * Branch-and-cut implementation of a graph partitioning problem used for Markov state models.
305  * </td>
306  * </tr>
307  * </table>
308  *
309  */
310 
311 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
312 
313 /** @page LPI Available LP solver interfaces
314  *
315  * SCIP provides a range of different interfaces to LP solvers:
316  *
317  * LPI name | LP solver
318  * ---------|----------
319  * `spx` | SoPlex
320  * `cpx` | IBM ILOG CPLEX
321  * `xprs` | FICO XPress
322  * `grb` | Gurobi (interface is in beta stage, version at least 7.0.2 required)
323  * `clp` | CoinOR CLP (interface currently sometimes produces wrong results)
324  * `glop` | Google Glop (experimental, LPI is contained in Glop package/Google OR tools)
325  * `msk` | Mosek (experimental)
326  * `qsopt` | QSopt (experimental)
327  * `none` | disables LP solving entirely (not recommended; only for technical reasons)
328  *
329  * There are two different interfaces for SoPlex. The default one (`spx`) uses an updated interface that is provided
330  * by SoPlex itself (since version 2.0), resulting in a slimmer LPI that is similiar to those for CPLEX or XPRESS.
331  * The other one - `spx1` - is the older LPI that directly interfaces the internal simplex solver of SoPlex and
332  * therefore needs to duplicate some features in the LPI that are already available in SoPlex itself. It lacks some
333  * features like persistent scaling which are only available in the modern interface. Upcoming features may not be
334  * supported. Old compilers might have difficulties with the new interface because some C++11 features are required
335  * that may not be supported.
336  *
337  * To use the old interface, set the Makefile option `LPS=spx1` or configure your CMake build with `LEGACY=ON`.
338  *
339  */
340 
341 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
342 
343 /** @page NLPISOLVERS Available implementations of the NLP solver interface
344  *
345  * SCIP implements the NLP solver interface for the solvers <a href="https://projects.coin-or.org/Ipopt">IPOPT</a>, <a
346  * href="https://worhp.de/">WORHP</a>, and <a href=" http://www.mcs.anl.gov/~leyffer/solvers.html">FilterSQP</a>. In
347  * contrast to the implementations of the LP solver interface, SCIP can be compiled with multiple NLP solvers and selects
348  * the solver with the highest priority at the beginning of the solving process.
349  * Currently, the priorities are, in descending order: Ipopt, WORHP/IP, FilterSQP, WORHP/SQP.
350  *
351  * If more than one solver is available, then it is possible to solve all NLPs during the solving process with all
352  * available NLP solvers by setting the parameter `nlpi/all/priority` to the highest value.
353  * In this case, SCIP uses the solution from a solver that provides the best objective value. Other possible use
354  * cases for the availability of multiple solvers have not been implemented yet.
355  *
356  * In the @ref MAKE "GNU make" based build system, building the implementations of the interface for FilterSQP, IPOPT, and
357  * WORHP can be enabled by specifying `FILTERSQP=true`, `IPOPT=true`, and `WORHP=true`, respectively, as argument to the
358  * `make` call.
359  * In the @ref CMAKE "CMAKE" based build system, building the implementation of the interface for IPOPT and WORHP can be
360  * enabled by specifying `IPOPT=on` and `WORHP=on`, respectively, as argument to the `cmake` call.
361  *
362  * @section NLPISOLVERS_IPOPT IPOPT
363  *
364  * <b>IPOPT</b> implements a primal-dual interior point method and uses line searches based on filter methods. It has
365  * been developed by Andreas W&auml;chter and Carl Laird and is available under the Eclipse Public License on <a
366  * href="https://www.coin-or.org/">COIN-OR</a>.
367  *
368  * @section NLPISOLVERS_WORHP WORHP
369  *
370  * <b>WORHP</b> implements a sequential quadratic programming method and a penalty-interior point algorithm. It is
371  * developed at the <a href="http://www.uni-bremen.de/en.html">University of Bremen</a> and is free for academic
372  * purposes.
373  *
374  * @section NLPISOLVERS_FILTERSQP FilterSQP
375  *
376  * <b>FilterSQP</b> implements a sequential quadratic programming method. It has been developed by Roger Fletcher
377  * and Sven Leyffer. It is not publicly available, but may be obtained from Sven Leyffer on request.
378  */
379 
380 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
381 
382 /**@page WHATPROBLEMS What types of optimization problems does SCIP solve?
383  *
384  * As a stand-alone solver, \SCIP can solve mixed-integer nonlinear programs \b (MINLPs), to which it applies
385  * an LP based spatial branch-and-cut algorithm. This method is guaranteed to solve bounded MINLPs
386  * within a given numerical tolerance in a finite amount of time. In particular, \SCIP is a stand-alone
387  * solver for mixed-integer linear programs \b (MIPs).
388  *
389  * As a framework, \SCIP also provides the tools to solve constraint optimization problems defined over
390  * integer and continuous variables. Therefore, the design of \SCIP
391  * supports the easy integration of constraints of arbitrary type into the solver.
392  * More precisely, \SCIP can handle the class of constraint integer programs \b (CIPs), which are constraint optimization problems
393  * that become linear programs (LPs) after the integer variables are fixed.
394  *
395  * @section PROBLEMCLASSES Some important subclasses of CIP and MINLP
396  *
397  * The following table gives a non-exhaustive list of common types of mathematical optimization problems that can be solved
398  * through \SCIP itself or one of its extensions. Some recommendations are given on how to compile \SCIP for a
399  * certain problem class and how make best use of \SCIP. The file format column gives some common file
400  * formats for every class. Note that since some of the mentioned problem classes are more general than others (like
401  * every LP is a MIP is an MINLP), the formats for the superclass should always work just as fine, although they
402  * may be less common for the class at hand.
403  *
404  * Please see also the pages on \ref EXAMPLES "SCIP Examples" and \ref APPLICATIONS "SCIP Applications" to learn more on how
405  * to extend \SCIP for a particular MIP, MINLP, or CIP application.
406  * All examples and applications use the C or C++ APIs of \SCIP. Please have a look at \ref INTERFACES "SCIP interfaces"
407  * to see how to use \SCIP from within other programming languages.
408  *
409  * <table class="types">
410  * <caption align="top">Some problem classes that can be solved by \SCIP</caption>
411  * <tr style="border-bottom: medium solid black;">
412  * <th>Problem class</th>
413  * <th>Mathematical problem description</th>
414  * <th>Supported file formats</th>
415  * <th>Recommendations</th>
416  * </tr>
417  * <tr>
418  * <td>Mixed-integer linear program (MIP)</td>
419  * <td>\f{align*}{
420  * \text{min} \quad& c^T x \\
421  * \text{s.t.} \quad& Ax \geq b \\
422  * &l_{j} \leq x_{j} \leq u_{j} && \forall j \in \mathcal{N} \\
423  * &x_{j} \in \mathbb{Z} && \forall j \in \mathcal{I}
424  * \f}
425  * </td>
426  * <td>
427  * <ul>
428  * <li>\ref reader_cip.h "CIP"</li>
429  * <li>\ref reader_mps.h "MPS"</li>
430  * <li>\ref reader_lp.h "LP"</li>
431  * <li>\ref reader_zpl.h "ZPL"</li>
432  * </ul>
433  * </td>
434  * <td>
435  * <ul>
436  * <li>\SCIP requires an external LP solver to solve LP relaxations, which needs to be specified
437  * at compilation time. By default, it uses SoPlex (<code>LPS=spx</code>). See \ref MAKE for a
438  * list of available LP solver interfaces and how to use them inside \SCIP.</li>
439  * <li>Compile with Zimpl support (<code>ZIMPL=true</code>) to read in Zimpl models directly.</li>
440  * <li>\SCIP comes with many different parameters. Use the provided emphasis settings (see \ref SHELL "this tutorial")
441  * to change many parameters at once and boost the performance.</li>
442  * <li>Test instances are available at <code>check/instances/MIP/</code>.</li>
443  * </ul>
444  * </td>
445  * </tr>
446  * <tr>
447  * <td>Mixed-integer nonlinear program (MINLP)</td>
448  * <td>\f{align*}{
449  * \text{min} \quad& f(x) \\
450  * \text{s.t.} \quad& g_{i}(x) \leq 0 && \forall i \in \mathcal{M} \\
451  * &l_{j} \leq x_{j} \leq u_{j} && \forall j \in \mathcal{N} \\
452  * &x_{j} \in \mathbb{Z} && \forall j \in \mathcal{I}
453  * \f}
454  * </td>
455  * <td>
456  * <ul>
457  * <li>\ref reader_cip.h "CIP"</li>
458  * <li>\ref reader_gms.h "GMS"</li>
459  * <li>\ref reader_osil.h "OSiL"</li>
460  * <li>\ref reader_pip.h "PIP"</li>
461  * <li>\ref reader_zpl.h "ZPL"</li>
462  * <li>For MIQCPS:
463  * <ul>
464  * <li>\ref reader_lp.h "LP"</li>
465  * <li>\ref reader_mps.h "MPS"</li>
466  * </ul>
467  * </li>
468  * </ul>
469  * </td>
470  * <td>
471  * <ul>
472  * <li>Compile with <code>IPOPT=true</code> for better performance.</li>
473  * <li>Compile with <code>WORHP=true</code> for better performance.</li>
474  * <li>Compile with <code>FILTERSQP=true</code> for better performance.</li>
475  * <li>Compile with <code>GAMS=true</code> to read gms-files.</li>
476  * <li>See <a href="FAQ\FILEEXT#minlptypes"> Which kind of MINLPs are supported by \SCIP? </a> in the FAQ.</li>
477  * <li>There is an interface for the modelling language AMPL, see \ref INTERFACES.</li>
478  * <li>Mixed-integer quadratically constrained programs (MIQCP) can also be formulated in the file formats
479  * <ul>
480  * <li>\ref reader_lp.h "LP", and</li>
481  * <li>\ref reader_mps.h "MPS".</li>
482  * </ul>
483  * </li>
484  * <li>Test instances are available at <code>check/instances/MINLP/</code>.</li>
485  * </ul>
486  * </td>
487  * </td>
488  * <tr>
489  * <td>Constraint Integer Program (CIP)</td>
490  * <td>\f{align*}{
491  * \text{min} \quad& c^T x + d^T y \\
492  * \text{s.t.} \quad& C_i(x,y) = \text{true} && \forall i \in \mathcal{M} \\
493  * & x \in \mathbb{Z}^{p}, y \in \mathbb{R}^{n - p}
494  * \f}
495  * where \f$\forall i \in\mathcal{M}, \forall x^* \in \mathbb{Z}^{p},\f$ \f$ \{ y : C_i(x^*, y) = \text{true} \} \f$ is a polyhedron.
496  * </td>
497  * <td>
498  * <ul>
499  * <li>\ref reader_cip.h "CIP"</li>
500  * <li>\ref reader_fzn.h "FlatZinc"</li>
501  * </ul>
502  * </td>
503  * <td>
504  * <ul>
505  * <li>\SCIP supports a limited number of general constraints; see \ref CONS "How to add constraint handlers"
506  * to learn how to extend the \SCIP framework to a given CIP.</li>
507  * <li>Use the emphasis setting <code>set emphasis cpsolver</code> to completely disable LP solves and
508  * use depth-first search with periodic restarts, see also
509  * <a href="FAQ\FILEEXT#scipascpsolver"> Can I use \SCIP as a pure CP solver? </a> in the FAQ.</li>
510  * <li>Test instances are available at <code>check/instances/CP</code>.</li>
511  * </ul>
512  * </td>
513  * <tr>
514  * <td>Convex MINLP</td>
515  * <td>Like MINLP, \f$f\f$ and all \f$g_i\f$ are \b convex.</td>
516  * <td>see MINLP formats</td>
517  * <td>
518  * <ul>
519  * <li>See the comments for MINLP.</li>
520  * <li>In addition, use <code>constraints/nonlinear/assumeconvex = TRUE</code> to inform \SCIP about a convex
521  * problem in cases where the automated detection is not strong enough.</li>
522  * <li>Test instances are available at <code>check/instances/MINLP/circle.cip</code>.</li>
523  * </ul>
524  * </td>
525  * </td>
526  * <tr>
527  * <td>Linear program (LP)</td>
528  * <td>\f{align*}{
529  * \text{min} \quad& c^T x \\
530  * \text{s.t.} \quad& Ax \geq b \\
531  * & x_{j} \geq 0 && \forall j \in \mathcal{N}
532  * \f}
533  * </td>
534  * <td>see MIP formats</td>
535  * <td>See <a href="FAQ\FILEEXT#scipaslpsolver">Can I use \SCIP as a pure LP solver</a> in the FAQ.</td>
536  * </td>
537  * <tr>
538  * <td>Pseudoboolean optimization</td>
539  * <td>\f{align*}{
540  * \text{min} \quad& c^T x \\
541  * \text{s.t.} \quad& \sum_{k=0}^p a_{ik} \cdot \prod_{j \in \mathcal{N}_{ik}} x_j \leq b_i && \forall i \in \mathcal{M} \\
542  * &x_{j} \in \{0,1\} && \forall j \in \mathcal{N}
543  * \f}
544  * </td>
545  * <td>
546  * <ul>
547  * <li>\ref reader_wbo.h "WBO"</li>
548  * <li>\ref reader_opb.h "OPB"</li>
549  * </ul>
550  * </td>
551  * <td>
552  * <ul>
553  * <li>Test instances are available at <code>check/instances/PseudoBoolean/</code>.</li>
554  * </ul>
555  * </td>
556  * </tr>
557  * <tr>
558  * <td>Satisfiability (SAT) and variants</td>
559  * <td>\f{align*}{
560  * \text{min} \quad& 0 \\
561  * \text{s.t.} \quad&\bigvee\limits_{j \in B_i} x_j \vee \bigvee\limits_{j \in \bar{B}_i} \neg x_j = \text{true} && \forall i \in \mathcal{M}\\
562  * &x_{j} \in \{\text{false},\text{true}\} && \forall j \in \mathcal{N}
563  * \f}
564  * </td>
565  * <td>
566  * <ul>
567  * <li>\ref reader_cnf.h "CNF"</li>
568  * </ul>
569  * </td>
570  * <td>
571  * <ul>
572  * <li>Use the emphasis setting <code>set emphasis cpsolver</code> to completely disable LP solves and
573  * use depth-first search with periodic restarts, see also
574  * <a href="FAQ\FILEEXT#scipascpsolver"> Can I use \SCIP as a pure CP/SAT solver? </a> in the FAQ.</li>
575  * <li>Test instances are available at <code>check/instances/SAT/</code>.</li>
576  * </ul>
577  * </td>
578  * </tr>
579  * <tr>
580  * <td>Multicriteria optimization</td>
581  * <td>\f{align*}{
582  * \text{min} \quad &(c_1^T x,\ldots,c_k^T x) \\
583  * \text{s.t. } \quad& Ax \geq b \\
584  * &x \in \mathbb{K}^n
585  * \f}
586  * where \f$\mathbb{K}\f$ is either \f$\mathbb{Z}\f$ or \f$\mathbb{R}\f$.
587  * </td>
588  * <td colspan="3"> see the <a href="http://polyscip.zib.de/">PolySCIP web page</a></td>
589  * </tr>
590  * </table>
591  *
592  *
593  */
594 
595 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
596 
597 /**@page CODE Coding style guidelines
598  *
599  * We follow the following coding style guidelines and recommend them for all developers.
600  *
601  * - Indentation is 3 spaces. No tabs anywhere in the code.
602  * - Always only one declaration in a line.
603  * - Braces are on a new line and not indented.
604  * - Spaces around all operators.
605  * - No spaces between control structure keywords like "if", "for", "while", "switch" and the corresponding brackets.
606  * - No spaces between a function name and the parenthesis in both the definition and function calls.
607  * - Use assert() to show preconditions for the parameters, invariants and postconditions.
608  * - All global functions start with "SCIP". In the usual naming scheme this is followed by the object and a method name
609  * like in SCIPlpAddRow(). Functions return TRUE or FALSE should be named like SCIPisFeasEQ().
610  * - Make all functions that are not used outside the module 'static'. Naming should start with a lower case letter.
611  * - Variable names should be all lower case.
612  * - For each structure there is a typedef with the name in all upper case.
613  * - Defines should be named all upper case.
614  * - Document functions, parameters, and variables in a doxygen conformed way.
615  *
616  * As an example, have a look at tree.c and see the examples below. We also provide settings for
617  * \ref XEMACS "(x)emacs" and \ref ECLIPSE "eclipse".
618  *
619  *
620  * @section CODEEXAMPLES Examples
621  *
622  * In this section we state a few examples illustrating the \SCIP code style.
623  *
624  * @refsnippet{src/scip/type_set.h,SnippetCodeStyleExample}
625  *
626  *
627  * @section XEMACS Customize (x)emacs
628  *
629  * If you are using (x)emacs, you can use the following customization for the c++-mode. These settings satisfy the
630  * coding guidelines of \SCIP.
631  *
632  * \include codestyle/emacs_scip_codestyle.el
633  *
634  *
635  * @section ECLIPSE Customize eclipse
636  *
637  * Eclipse user can use the profile below. This profile does not match the \SCIP coding guideline completely.
638  *
639  * \include codestyle/eclipse_scip_codestyle.xml
640  */
641 
642 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
643 
644 /**@page CMAKE Building SCIP with CMake
645  *
646  * <a href=https://cmake.org/>CMake</a> is a build system generator that can create, e.g., Makefiles for UNIX and Mac
647  * or Visual Studio project files for Windows.
648  *
649  * CMake provides an <a href="https://cmake.org/cmake/help/latest/manual/cmake.1.html">extensive documentation</a>
650  * explaining available features and use cases as well as an <a href="https://cmake.org/Wiki/CMake_FAQ">FAQ section</a>.
651  * It's recommended to use the latest stable CMake version available. `cmake --help` is also a good first step to see
652  * available options and usage information.
653  *
654  * ```
655  * cd scip
656  * mkdir build
657  * cd build
658  * cmake .. [-DSOPLEX_DIR=/path/to/soplex]
659  * make
660  *
661  * # optional: run a quick check on some instances
662  *
663  * make check
664  *
665  * # optional: install scip executable, library, and headers
666  *
667  * make install
668  *
669  * ```
670  *
671  * CMake uses an out-of-source build, i.e., compiled binaries and object files are separated from the source tree and
672  * located in another directory. Usually this directory is called `build` or `debug` or whatever you prefer. From within
673  * this directory, run `cmake <path/to/SCIP>` to configure your build, followed by `make` to compile the code according
674  * to the current configuration (this assumes that you chose Linux Makefiles as CMake Generator). By default, SCIP
675  * searches for Soplex as LP solver. If SoPlex is not installed systemwide, the path to a CMake build directory
676  * of SoPlex must be specified (ie one that contains "soplex-config.cmake"). Alternatively, a different LP solver
677  * can be specified with the `LPS` variable, see \ref CMAKE_CONFIG and \ref LPI.
678  *
679  * Afterwards,
680  * successive calls to `make` are going to recompile modified source code,
681  * without requiring another call to `cmake`. The initial configuration step checks your environment for available
682  * third-party libraries and packages and sets up the configuration accordingly, e.g., disabling support for GMP if not
683  * installed.
684  *
685  * The generated executable and libraries are put in directories `bin` and `lib` respectively and will simply be named
686  * `scip` or `libscip.so`. This is different from the naming convention of the previous Makefile setup that
687  * appended the configuration details like OS and third party dependencies directly to the name of the binary or library.
688  * The CMake setup tries to follow the established Linux/UNIX compilation conventions to facilitate the use of the
689  * libraries in other applications. The previously generated sub-libraries like `liblpi.so` or `libobjscip.so` are not
690  * created by default anymore. They can be built using the respective targets `liblpi`, `libobjscip`, etc. The main
691  * library `libscip.so` will contain all SCIP sources and won't have dependencies to the other sub-libs.
692  *
693  * @section CMAKE_CONFIG Modifying a CMake configuration
694  *
695  * There are several options that can be passed to the `cmake <path/to/SCIP>` call to modify how the code is built.
696  * For all of these options and parameters you have to use `-D<Parameter_name>=<value>`. Following a list of available
697  * options, for the full list run
698  *
699  * ```
700  * cmake <path/to/SCIP> -LH
701  * ```
702  *
703  * CMake option | Available values | Makefile equivalent | Remarks |
704  * ---------------------|--------------------------------|------------------------|--------------------------------------------|
705  * CMAKE_BUILD_TYPE | Release, Debug, ... | OPT=[opt, dbg] | |
706  * LPS | spx, cpx, grb, xprs, ... | LPS=... | See \ref LPI for a complete list |
707  * GMP | on, off | GMP=[true, false] | |
708  * READLINE | on, off | READLINE=[true, false] | |
709  * ZIMPL | on, off | ZIMPL=[true, false] | |
710  * SYM | bliss, none | -- | |
711  * CMAKE_INSTALL_PREFIX | <path> | INSTALLDIR=<path> | |
712  * SHARED | on, off | SHARED=[true, false] | |
713  * SOPLEX_DIR | <path/to/SoPlex/installation> | -- | |
714  * GMP_DIR | <path/to/GMP/installation> | -- | |
715  * ..._DIR | <custom/path/to/.../package> | -- | |
716  * COVERAGE | on, off | -- | use with gcc, lcov, gcov in **debug** mode |
717  * COVERAGE_CTEST_ARGS | ctest argument string | -- | see `ctest --help` for arguments |
718  * DEBUGSOL | on, off | DEBUGSOL=[true,false] | specify a debugging solution by setting the "misc/debugsol" parameter of SCIP |
719  * CXXONLY | on, off | -- | use a C++ compiler for all source files |
720  * IPOPT | on, off | IPOPT=[true,false] | requires IPOPT version >= 3.12.0 |
721  * WORHP | on, off | WORHP=[true,false] | should worhp be linked |
722  * LPSCHECK | on, off | LPSCHECK=[true,false] | double check SoPlex results with CPLEX |
723  * NOBLKMEM | on, off | NOBLKMEM=[true,false] | |
724  * NOBUFMEM | on, off | NOBUFMEM=[true,false] | |
725  * NOBLKBUFMEM | on, off | NOBLKBUFMEM=[true,false] | |
726  * MT | on, off | | use static runtime libraries for Visual Studio compiler on Windows |
727  * PARASCIP | on, off | PARASCIP=[true,false] | thread safe compilation |
728  * SANITIZE_... | on, off | -- | enable sanitizer in debug mode if available |
729  *
730  * Parameters can be set all at once or in subsequent calls to `cmake` - extending or modifying the existing
731  * configuration.
732  *
733  * @section CTEST Testing with CTest
734  *
735  * There is an extensive test suite written for <a href="https://cmake.org/cmake/help/latest/manual/ctest.1.html">CTest</a>,
736  * that may take a while to complete. To perform a quick test to see whether the compilation was really successful you may
737  * run `make check`. To see all available tests, run
738  *
739  * ```
740  * ctest -N
741  * ```
742  *
743  * and to perform a memory check, run
744  *
745  * ```
746  * ctest -T MemCheck
747  * ```
748  *
749  * If <a href="https://criterion.readthedocs.io/en/master/">Criterion</a> is installed (set
750  * custom path with `-DCRITERION_DIR=<path>`) the target `unittests` can be used to compile and run the available unit tests.
751  *
752  * A coverage report for the entire test suite can be generated. This requires a modification of the
753  * compilation process. Two variables govern the report generation, `COVERAGE` and `COVERAGE_CTEST_ARGS`.
754  * It is recommended to use the Debug build type.
755  *
756  * ```
757  * cmake .. -DCOVERAGE=on -DCOVERAGE_CTEST_ARGS="-R MIP -E stein -j4" -DCMAKE_BUILD_TYPE=Debug
758  * ```
759  *
760  * In this example, coverage is enabled in combination with the build type Debug. In addition, only the coverage
761  * for tests with "MIP" in the name are run, excluding those that have "stein" in the name.
762  * The tests are performed in parallel using 4 cores.
763  *
764  * Use the `coverage` target, e.g., `make coverage`, to build the coverage report. The generated report can be found
765  * under "coverage/index.html".
766  *
767  * @section CMAKE_INSTALL Installation
768  *
769  * CMake uses a default directory for installation, e.g., /usr/local on Linux. This can be modified by either changing
770  * the configuration using `-DCMAKE_INSTALL_PREFIX` as explained in \ref CMAKE_CONFIG or by setting the environment
771  * variable `DESTDIR` during or before the install command, e.g., `DESTDIR=<custom/install/dir> make install`.
772  *
773  * @section CMAKE_TARGETS Additional targets
774  *
775  * There are several further targets available, which can be listed using `make help`. For instance, there are some
776  * examples that can be built with `make examples` or by specifying a certain one: `make <example-name>`.
777  *
778  * | CMake target | Description | Requirements |
779  * |-----------------|-------------------------------------------------------|---------------------------------------|
780  * | scip | build SCIP executable | |
781  * | applications | build executables for all applications | |
782  * | examples | build executables for all examples | |
783  * | unittests | build unit tests | the Criterion package, see \ref CTEST |
784  * | all_executables | build all of the above | |
785  * | libscip | build the SCIP library | |
786  * | install | install SCIP, see \ref CMAKE_INSTALL | |
787  * | coverage | run the test suite and create a coverage report | build flag `-DCOVERAGE=on` |
788  * | liblpi | build the LPI library | |
789  * | libnlpi | build the NLPI library | |
790  * | libobjscip | build the ObjSCIP library for the C++ wrapper classes | |
791  */
792 
793 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
794 
795 /**@page MAKE Makefiles / Installation information
796  *
797  *
798  * In most cases (LINUX and MAC) it is quite easy to compile and install \SCIP. Therefore, reading the section
799  * \ref BRIEFINSTALL "Brief installation description" should usually be enough. If this is not the case you find
800  * \ref DETAILEDINSTALL "Detailed installation description" below as well as \ref EXAMPLE1 "Examples".
801 *
802  * @section BRIEFINSTALL Brief installation description
803  *
804  * The easiest way to install \SCIP is to use the \SCIP Optimization Suite which contains \SCIP, SoPlex, and ZIMPL. For
805  * that we refer to the INSTALL file of the \SCIP Optimization Suite (main advantage: there is no need
806  * to specify any directories, the compiling process is fully automated).
807  *
808  * Compiling \SCIP directly can be done as follows:
809  *
810  * -# unpack the tarball <code>tar xvf scip-x.y.z.tgz</code>
811  * -# change to the directory <code>cd scip-x.y.z</code>
812  * -# start compiling \SCIP by typing <code>make</code>
813  * -# (optional) install the header, libraries, and binary <code>make install INSTALLDIR="/usr/local/</code>
814  *
815  * During your first compilation you will be asked for some soft-link targets,
816  * depending on the LP solver you want to use. Usually, \SCIP needs the
817  * following information
818  * -# the directory where the include files of the LP solver lie
819  * -# the library file(s) "lib*.a" or/and "lib*.so"
820  *
821  * Besides that, \SCIP needs some soft-link targets, for ZIMPL
822  * -# the directory where the include files of ZIMPL lie
823  * -# the library file(s) "lib*.a" or/and "lib*.so"
824  *
825  * You will need either the .a or the .so files and can skip the others by
826  * just pressing return.
827  *
828  * The most common compiling issue is that some libraries are missing
829  * on your system or that they are outdated. \SCIP per default requires
830  * zlib, gmp and readline. Try compiling with: <code> make ZLIB=false
831  * READLINE=false ZIMPL=false</code> or, better, install them. Note
832  * that under Linux-based systems, you need to install the
833  * developer-versions of gmp/zlib/readline, in order to also have the
834  * header-files available.
835  *
836  @section DETAILEDINSTALL Detailed installation description
837  *
838  * In this section we describe the use, and a few features, of the \SCIP Makefile. We also give two examples for how to install
839  * \SCIP. The \ref EXAMPLE1 "first example" illustrates the default installation. This means, with SoPleX and ZIMPL. The
840  * \ref EXAMPLE2 "second example" shows how to get CPLEX linked to \SCIP without ZIMPL. This is followed by a section which
841  * gives some hints on what to do if the \ref COMPILERPROBLEMS "compilation throws an error". We give some comments on
842  * how to install \SCIP under \ref WINDOWS "WINDOWS" and show \ref RUN "how to start \SCIP".
843  *
844  * If you experience any problems during the installation, you will find help in the \ref INSTALL "INSTALL" file.
845  *
846  * \SCIP contains a makefile system, which allows the individual setting of several parameters. A detailed list of parameter settings
847  * obtained by <code>make help</code>. For instance, the following settings are supported:
848  *
849  * - <code>OPT=<dbg|opt|opt-gccold></code> Here <code>dbg</code> turns on the debug mode of \SCIP. This enables asserts
850  * and avoids macros for several function in order to ease debugging. The default is <code>opt</code>, which enables
851  * the optimized mode. The third option <code>opt-gccold</code> will work with older GCC compilers before version
852  * 4.2. We recommend using newer GCC versions.
853  *
854  * - <code>LPS=<clp|cpx|grb|msk|qso|spx|xprs|none></code> This determines the LP-solver, which should be
855  * installed separately from \SCIP. The options are the following:
856  * - <code>clp</code>: COIN-OR Clp LP-solver
857  * - <code>cpx</code>: CPLEX LP-solver
858  * - <code>grb</code>: Gurobi LP-solver (interface is in beta stage)
859  * - <code>msk</code>: Mosek LP-solver
860  * - <code>qso</code>: QSopt LP-solver
861  * - <code>spx</code>: old SoPlex LP-solver (for versions < 2)
862  * - <code>spx2</code>: new SoPlex LP-solver (default) (from version 2)
863  * - <code>xprs</code>: XPress LP-solver
864  * - <code>none</code>: no LP-solver (you should set the parameter <lp/solvefreq> to <-1> to avoid solving LPs)
865  *
866  * - <code>LPSOPT=<dbg|opt|opt-gccold></code> Chooses the debug or optimized version (or old GCC optimized) version of
867  * the LP-solver (currently only available for SoPlex and CLP).
868  *
869  * - <code>ZIMPL=<true|false></code> Turns direct support of ZIMPL in \SCIP on (default) or off, respectively.\n
870  * If the ZIMPL-support is disabled, the GMP-library is no longer needed for \SCIP and therefore not linked to \SCIP.
871  *
872  * - <code>ZIMPLOPT=<dbg|opt|opt-gccold></code> Chooses the debug or optimized (default) (or old GCC optimized)
873  * version of ZIMPL, if ZIMPL support is enabled.
874  *
875  * - <code>READLINE=<true|false></code> Turns support via the readline library on (default) or off, respectively.
876  *
877  * - <code>FILTERSQP=<true|false></code> Enable or disable (default) FilterSQP interface.
878  *
879  * - <code>IPOPT=<true|false></code> Enable or disable (default) IPOPT interface (needs IPOPT >= 3.12).
880  *
881  * - <code>WORHP=<true|false></code> Enable or disable (default) WORHP interface (needs WORHP >= 2.0).
882  *
883  * - <code>EXPRINT=<cppad|none></code> Use CppAD as expressions interpreter (default) or no expressions interpreter.
884  *
885  * - <code>GAMS=<true|false></code> Enable or disable (default) reading functionality in GAMS reader (needs GAMS).
886  *
887  * - <code>NOBLKBUFMEM=<true|false></code> Turns the internal \SCIP block and buffer memory off or on (default).
888  * This way the code can be checked by valgrind or similar tools. (The individual options <code>NOBLKMEM=<true|false></code>
889  * and <code>NOBUFMEM=<true|false></code> to turn off the \SCIP block and buffer memory, respectively, exist as well).
890  *
891  * - <code>TPI=<tny|omp|none></code> This determines the threading library that is used for the concurrent solver.
892  * The options are the following:
893  * - <code>none</code>: use no threading library and therefore disable the concurrent solver feature
894  * - <code>tny</code>: use the tinycthread's library which is bundled with SCIP. This
895  * is a wrapper around the plattform specific threading library ad should work
896  * for Linux, Mac OS X and Windows.
897  * - <code>omp</code>: use the OpenMP. This will not work with microsoft compilers, since they do not support
898  * the required OpenMP version.
899  *
900  * - <code>SYM=<bliss|none></code> This determines the graph automorphism code used to compute symmetries of mixed
901  * integer programs if symmetry handling is enabled. The options are the following:
902  * - <code>none</code>: do not use a graph automorphism code, i.e., symmetries cannot be handled
903  * - <code>bliss</code>: use bliss to compute symmetries.
904  *
905  * You can use other compilers - depending on the system:
906  *
907  * - <code>COMP=<clang|gnu|intel></code> Use Clang, Gnu (default) or Intel compiler.
908  *
909  * There are additional parameters for Linux/Gnu compilers:
910  *
911  * - <code>SHARED=<true></code> generates a shared object of the \SCIP libraries. (The binary uses these shared
912  * libraries as well.)
913  * - <code>OPT=prf</code> generates a profiling version of \SCIP providing a detailed statistic of the time usage of
914  * every method of \SCIP.
915  *
916  * There is the possibility to watch the compilation more precisely:
917  *
918  * - <code>VERBOSE=<true|false></code> Turns the extensive output on or off (default).
919  *
920  * The \SCIP makefile supports several targets (used via <code>make ... "target"</code>):
921  *
922  * - <code>all (or no target)</code> Build \SCIP library and binary.
923  * - <code>links</code> Reconfigures the links in the "lib" directory.
924  * - <code>doc</code> Creates documentation in the "doc" directory.
925  * - <code>clean</code> Removes all object files.
926  * - <code>depend</code> Creates dependencies files. This is only needed if you add files to \SCIP.
927  * - <code>check or test</code> Runs the check script, see \ref TEST.
928  *
929  * The \SCIP makefiles are structured as follows.
930  *
931  * - <code>Makefile</code> This is the basic makefile in the \SCIP root directory. It loads
932  * additional makefile information depending on the parameters set.
933  * - <code>make/make.project</code> This file contains definitions that are useful for all codes
934  * that use \SCIP, for instance, the examples.
935  * - <code>make.<sys>.<machine>.<compiler>.<dbg|opt|prf|opt-gccold></code> These file contain system/compiler specific
936  * definitions. If you have an unsupported compiler, you can copy one of these and modify it
937  * accordingly.
938  *
939  * If your platform or compiler is not supported by \SCIP you might try and copy one of the existing
940  * makefiles in the <code>make</code> directory and modify it. If you succeed, we are always
941  * interested in including more Makefiles into the system.
942  *
943  *
944  * @section EXAMPLE1 Example 1 (defaults: SoPlex, with ZIMPL support):
945  *
946  * Typing <code>make</code> uses SoPlex as LP solver and includes support for the modeling language ZIMPL. You will be asked the
947  * following questions on the first call to "make" (example answers are already given):
948  *
949  * \verbinclude makeexamples/example1.txt
950  *
951  * @section EXAMPLE2 Example 2 (CPLEX, with no ZIMPL support):
952  *
953  * Typing <code>make LPS=cpx ZIMPL=false</code> uses CPLEX as LP solver. You will be asked the following questions on
954  * the first call to "make" (example answers are already given):
955  *
956  * \verbinclude makeexamples/example2.txt
957  *
958  *
959  * @section COMPILERPROBLEMS Compilation problems:
960  *
961  * - If the soft-link query script does not work on your machine, read step 2 in the \ref INSTALL "INSTALL" file for
962  * instructions on manually creating the soft-links.
963  *
964  * - If you get an error message of the type\n
965  * <code>make: *** No rule to make target `lib/???', needed by `obj/O.linux.x86.gnu.opt/lib/scip/???.o'. Stop.</code>\n
966  * the corresponding soft-link was not created or points to a wrong location. Check the soft-link targets in the "lib/"
967  * subdirectory. Try to delete all soft-links from the "lib/" directory\n and call "make links" to generate them
968  * again. If this still fails, read step 2 for instructions on manually\n creating the soft-links.
969  *
970  * - If you get an error message of the type\n
971  * <code>make: *** No rule to make target `make/make.?.?.?.?.?'. Stop.</code>,\n
972  * the corresponding machine dependent makefile for your architecture and compiler is missing.\n Create one of the given
973  * name in the "make/" subdirectory. You may take\n "make/make.linux.x86.gnu.opt" or any other file in the make
974  * subdirectory as example.\n
975  *
976  * - The readline library seems to differ slightly on different OS distributions. Some versions do
977  * not support the <code>remove_history()</code> call. In this case, you have to either add
978  * <code>-DNO_REMOVE_HISTORY</code> to the FLAGS in the appropriate "make/make.*" file, or to
979  * compile with <code>make USRFLAGS=-DNO_REMOVE_HISTORY</code>. Make sure, the file
980  * "src/scip/dialog.c" is recompiled. If this doesn't work either, disable the readline library
981  * with <code>make READLINE=false</code>.
982  *
983  * - On some systems, the <code>sigaction()</code> method is not available. In this case, you have
984  * to either add <code>-DNO_SIGACTION</code> to the FLAGS in the appropriate "make/make.*" file, or
985  * to compile with <code>make USRFLAGS=-DNO_SIGACTION</code>. Make sure, the file
986  * "src/scip/interrupt.c" is recompiled.
987  *
988  * - On some systems, the <code>rand_r()</code> method is not available. In this case, you have to either add
989  * <code>-DNO_RAND_R</code> to the FLAGS in the appropriate "make/make.*" file, or to compile with
990  * <code>make USRFLAGS=-DNO_RAND_R</code>. Make sure, the file "src/scip/misc.c" is recompiled.
991  *
992  * - On some systems, the <code>strtok_r()</code> method is not available. In this case, you have
993  * to either add <code>-DNO_STRTOK_R</code> to the FLAGS in the appropriate make/make.* file, or to
994  * compile with <code>make USRFLAGS=-DNO_STRTOK_R</code>. Make sure, the file "src/scip/misc.c" is
995  * recompiled.
996  *
997  * - On some systems, the <code>strerror_r()</code> method is not available. In this case, you have
998  * to either add <code>-DNO_STRERROR_R</code> to the FLAGS in the appropriate "make/make.*" file, or
999  * to compile with <code>make USRFLAGS=-DNO_STRERROR_R</code>. Make sure, the file
1000  * "src/scip/misc.c" is recompiled.
1001  *
1002  * - On some systems, the option [-e] is not available for the read command. You have to compile with READ=read.
1003  *
1004  * - If you encounter other compiler or linker errors, you should recompile with <code>make
1005  * VERBOSE=true ...</code> in order to get the full compiler invocation. This might help to fix the
1006  * corresponding machine dependent makefile in the make subdirectory.
1007  *
1008  * @section WINDOWS Remarks on Installing under Windows using MinGW
1009  *
1010  * To build your own windows binaries under windows we recommend using the MinGW-Compiler with MSYS
1011  * from <a href="http://www.mingw.org">www.mingw.org</a> .
1012  *
1013  * First install MSYS, then MinGW to the mingw folder inside the msys folder.
1014  * Now you need to install the following packages to the mingw folder:
1015  * - zlib (or use ZLIB=false)
1016  * - pcre (here suffices the pcre7.0-lib.zip (or equivalent) to be extracted into the mingw-folder)
1017  *
1018  * After calling <code>make clean</code> in the ZIMPL folder you will also need flex and bison to
1019  * remake ZIMPL. We recommend NOT to use <code>"make clean"</code> inside the ZIMPL-folder if you do
1020  * not have these packages installed.
1021  *
1022  * You can download these additional packages from <a href="http://gnuwin32.sourceforge.net/packages.html">here</a>
1023  * or compile the source on your own from their homepages.
1024  *
1025  * Second you need to copy the file <code>sh.exe</code> to <code>bash.exe</code> otherwise various
1026  * scripts (including makefiles) will not work. Normally <code>unistd.h</code> covers also the
1027  * getopt-options, but for mingw you need to add the entry <code>\#include <getopt.h></code> into
1028  * "/mingw/include/unistd.h" after the other include-entries (if not present).
1029  *
1030  * Finally, there is one package you need to compile if you want to use ZIMPL and ZIMPL-support in
1031  * \SCIP (otherwise use <code>ZIMPL=false</code> as parameter with the make-call): the
1032  * <code>gmplib</code> from <a href="http://www.gmplib.org">gmplib.org</a>. The command
1033  * <code>./configure --prefix=/mingw ; make ; make install</code> should succeed without problems
1034  * and installs the gmplib to the mingw folder.
1035  *
1036  * Now <code>make READLINE=false</code> should be compiling without errors. Please note that we
1037  * do NOT support creating the doxygen documentation and readline-usage under windows.
1038  *
1039  *
1040  * @section RUN How to run SCIP after a successful compilation
1041  *
1042  * To run the program, enter <code>bin/scip</code> for the last compiled version. If you have more than one compiled
1043  * binary (i. e., one in debug and one in optimized mode) and wish to specify the binary, type
1044  * <code>bin/scip.\$(OSTYPE).\$(ARCH).\$(COMP).\$(OPT).\$(LPS)</code>
1045  * (e.g. <code>bin/scip.linux.x86_64.gnu.opt.spx</code>).
1046  *
1047  */
1048 
1049 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
1050 
1051 /**@page START How to start a new project
1052  *
1053  * Once you succeeded installing \SCIP together with an LP-solver on your system,
1054  * you have a powerful tool for solving MIPs, MIQCPs,
1055  * MINLPs, etc... at hand. \SCIP can also be customized to the type of problems you
1056  * are working on by additional plugins.
1057  * Instructions on how to write a new plugin and include it in \SCIP can be found in the corresponding
1058  * \ref HOWTOADD "How to add ... pages".
1059  *
1060  * \SCIP can also be used for writing your own branch-and-cut or branch-and-cut-and-price code. \SCIP already
1061  * provides a number of existing code examples which we suggest as both reference and starting point
1062  * for these kinds of projects.
1063  * Below, you find some hints of how to start such a project.
1064  *
1065  * - The example should be chosen
1066  * depending on the programming language (<b>C</b> or <b>C++</b>) and the purpose
1067  * (<b>branch-and-cut</b> or <b>branch-and-cut-and-price</b>) of your project.
1068  * <br>
1069  * We suggest the use one of the following examples:
1070  * - The <a href="http://scip.zib.de/doc/examples/VRP"><b>VRP</b></a>-example is a <b>branch-and-cut-and-price</b> (column generation)-code
1071  * in <b>C++</b>.
1072  * - The <a href="http://scip.zib.de/doc/examples/Binpacking"><b>Binpacking</b></a>-example
1073  * and the <a href="http://scip.zib.de/doc/applications/Coloring"><b>Coloring</b></a> application are
1074  * <b>branch-and-cut-and-price</b> (column generation)-codes in <b>C</b>.
1075  * - The \ref TSP_MAIN "TSP example"
1076  * is a <b>branch-and-cut</b>-code in <b>C++</b>.
1077  * - The \ref LOP_MAIN LOP-example
1078  * is a <b>branch-and-cut</b>-code in <b>C</b>.
1079  * .
1080  * - Copy one of the examples in the <code>examples</code> directory (in the \SCIP root
1081  * directory). For instance, type
1082  * \verbatim
1083  > cp -r examples/Binpacking/ ../SCIPProject/ ; cd ../SCIPProject
1084  \endverbatim
1085  * from the \SCIP root directory for copying the content of the <code>Binpacking</code>-example into a fresh
1086  * directory named SCIPProject in the parent directory of the \SCIP root directory and jumping to
1087  * the new SCIPProject directory rightafter.
1088  * - Open the <code>Makefile</code> via
1089  * \verbatim
1090  > kate Makefile
1091  \endverbatim
1092  * and edit the following variables at the top to have a compilable code:
1093  *
1094  * - specify a correct path to the \SCIP root (<code>SCIPDIR</code>)
1095  * - rename the targets name (<code>MAINNAME</code>)
1096  * - adjust the source file names (<code>MAINOBJ</code>).
1097  * .
1098  * - Once you have edited the makefile, you can use all the flags that can be used in \SCIP to
1099  * compile your code, see \ref MAKE.
1100  * Note that you need to update the dependency files before compiling your project via <code>make depend</code>.
1101  *
1102  *
1103  *
1104  *
1105  */
1106 
1107 /**@page SHELL Tutorial: the interactive shell
1108  *
1109  * If you are using \SCIP as a black box solver, here you will find some tips and tricks what you can do.
1110  *
1111  * @section TUTORIAL_OPTIMIZE Read and optimize a problem instance
1112  *
1113  * First of all, we need a \SCIP binary and an example problem file to work with. Therefore, you can either download the
1114  * \SCIP standard distribution (which includes problem files) and compile it on your own or you can download a
1115  * precompiled binary and an example problem separately. \SCIP can read files in LP, MPS, ZPL, WBO, FZN, PIP, OSiL, and
1116  * other formats (see \ref FILEREADERS).
1117  *
1118  * If you want to download the source code of the \SCIP standard distribution, we recommend to go to the <a
1119  * href="http://scip.zib.de/#download">SCIP download section</a>, download the latest release (version 4.0.0 as
1120  * of this writing), inflate the tarball (e.g., with "tar xzf scipoptsuite-[version].tgz"), and follow the instructions
1121  * in the INSTALL file. The instance stein27, which will serve as an example in this tutorial, can be found under
1122  * scipoptsuite-[version]/scip-[version]/check/instances/MIP/stein27.fzn.
1123  *
1124  * If you want to download a precompiled binary, go to the <a href="http://scip.zib.de/#download">SCIP download
1125  * section</a> and download an appropriate binary for your operating system. The \SCIP source code distribution already comes with
1126  * the example instance used throughout this tutorial. To follow this tutorial with a precompiled binary, we recommend downloading the instance
1127  * <a href="http://miplib.zib.de/miplib3/miplib3/stein27.mps.gz">stein27</a> from
1128  * the <a href="http://miplib.zib.de/miplib3/miplib.html">MIPLIB 3.0</a> homepage.
1129  *
1130  * Now start your binary, without any arguments. This opens the interactive shell, which should look somehow like this:
1131  *
1132  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetVersion
1133  *
1134  * First of all "help" shows you a list of all available shell commands. Brackets indicate a submenu with further options.
1135  *
1136  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetHelp
1137  *
1138  * Okay, let's solve the example instance... use "read check/instances/MIP/stein27.fzn" to parse the instance file, "optimize" to solve it and "display
1139  * solution" to show the nonzero variables of the best found solution.
1140  *
1141  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetOpt1
1142  *
1143  * What do we see here? After "optimize", SCIP first goes into presolving. Not much is happening for this instance, just
1144  * the linear constraints get upgraded to more specific types. Each round of presolving will be displayed in a single
1145  * line, with a short summary at the end. Then, we see the actual solving process. The table output of the branch-and-cut
1146  * solving process is very detailed during the root node. Afterwards, a new line is displayed every 100th node.
1147  * Furthermore, every new incumbent solution triggers a new table row, starting with a character to indicate the
1148  * heuristic that found the solution. Which letter represents which heuristic can be seen with the
1149  * "display heuristics" command, see \ref TUTORIAL_STATISTICS for an example.
1150  *
1151  * After some lines the root node processing is finished. From now on, we will see an output line every hundredth node or
1152  * whenever a new incumbent is found. After some more nodes, the "dualbound" starts
1153  * moving, too. At one point, both will be the same, and the solving process terminates, showing us some wrap-up
1154  * information.
1155  *
1156  * The exact performance may of course vary among different architectures and operating systems. Do not be worried if
1157  * your installation needs more or less time or nodes to solve. Also, this instance has more than 2000 different optimal
1158  * solutions. The optimal objective value always has to be 18, but the solution vector may differ. If you are interested
1159  * in this behavior, which is called "performance variability", you may have a look at the MIPLIB2010 paper.
1160  *
1161  * @section TUTORIAL_FILEIO Writing problems and solutions to a file
1162 
1163  * \SCIP can also write information to files. E.g., we could store the incumbent solution to a file, or output the
1164  * problem instance in another file format (the LP format is much more human readable than the MPS format, for example).
1165  *
1166  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetWriteSolutions
1167  *
1168  * Passing starting solutions can increase the solving performance so that \SCIP does not need to construct an initial feasible solution
1169  * by itself. After reading the problem instance, use the "read" command again, this time with a file containing solution information.
1170  * Solutions can be specified in a raw or xml-format and must have the file extension ".sol", see the documentation of the
1171  * <a href="http://scip.zib.de/doc/html/reader__sol_8h.php">solution reader of \SCIP</a> for further information.
1172  *
1173  * Customized settings are not written or read with the "write" and "read" commands, but with the three commands
1174  *
1175  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetSaveSettingsOverview
1176  *
1177  * See the section on parameters \ref TUTORIAL_PARAMETERS for more information.
1178  *
1179  * @section TUTORIAL_STATISTICS Displaying detailed solving statistics
1180  *
1181  * We might want to have some more information now. Which of the heuristics found solutions? Which plugins
1182  * were called during the solutions process and how much time did they spend?
1183  * Information on certain plugin types (e.g., heuristics, branching rules, separators) is displayed via
1184  * "display <plugin-type>", information on the solution process via "display statistics", and "display problem"
1185  * shows the current instance.
1186  *
1187  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetDisplayStatistics
1188  *
1189  * The statistics obtained via "display statistics" are quite comprehensive,
1190  * thus, we just explain a few lines here. Information is grouped by the plugin type. For the primal heuristics,
1191  * the execution time in seconds is shown as well as the number of calls to the heuristic, and its success regarding
1192  * the number of (best) solutions found by that heuristic. Appropriate statistics are also shown for presolvers, constraint handlers,
1193  * separators, propagators, the search tree, etc. User-written plugins will appear automatically in these statistics,
1194  * after they were included into \SCIP.
1195  *
1196  * @section TUTORIAL_PARAMETERS Changing parameters from the interactive shell
1197  *
1198  * Now, we can start playing around with parameters. The primal heuristics Rounding and shifting seem to be quite successful on this instance,
1199  * wondering what happens if we disable them? Or what happens, if we are even more rigorous and disable all heuristics?
1200  * Or if we do the opposite and use aggressive heuristics?
1201  *
1202  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetSetSettings
1203  *
1204  * We can navigate through the menus step-by-step and get a list of available options and submenus. Therefore, we select
1205  * "set" to change settings, "heuristics" to change settings of primal heuristics, and "shifting" for that particular
1206  * heuristic. Then we see a list of parameters (and yet another submenu for advanced parameters), and disable this
1207  * heuristic by setting its calling frequency to -1. If we already know the path to a certain setting, we can directly
1208  * type it (as for the rounding heuristic in the above example). Note that we do not have to use the full names, but we
1209  * may use short versions, as long as they are unique.
1210  *
1211  * To solve a problem a second time, we have to read it in again before starting the optimization process.
1212  *
1213  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetOpt2
1214  *
1215  * Okay, what happened here? First, we reset all parameters to their default values, using "set default". Next, we
1216  * loaded some meta-parameter settings (also see <a href="http://scip.zib.de/#faq">the FAQ</a>), to apply primal heuristics
1217  * more aggressively. \SCIP shows us, which single parameters it changed therefore. Additionally, for pedagogical purposes,
1218  * we set the node limit to 200. Now, the optimal solution is already found at the root node, by a heuristic which is
1219  * deactivated by default. Then, after node 200, the user defined node limit is reached which interrupts the solving
1220  * process, We see that now in the short status report, primal and dual bound are different, thus, the problem is not solved
1221  * yet. Nevertheless, we could access statistics, see the current incumbent solution, change parameters and so on.
1222  * Entering "optimize" we continue the solving process from the point on at which it has been interrupted.
1223  *
1224  * Once you found a non-default parameter setting that you wish to save and use in the future, use either the command
1225  *
1226  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetSaveSettingsFull
1227  *
1228  * to save <b>all</b> parameter values to the specified file, or
1229  *
1230  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetSaveSettingsDiff
1231  *
1232  * in order to save only the nondefault parameters. The latter has several advantages, you can, e.g., combine parameter
1233  * settings from multiple settings files stored by the latter command, as long as they only affect mutually exclusive
1234  * parameter values.
1235  *
1236  * For loading a previously stored settings file, use the "load" command:
1237  *
1238  * @snippet shelltutorial/shelltutorialannotated.tmp SnippetLoadSettings
1239  *
1240  * Special attention should be drawn to the reserved settings file name "scip.set"; whenever the \SCIP interactive shell
1241  * is started from a working directory that contains a settings file with the name "scip.set", it will be automatically
1242  * replace the default settings.
1243  *
1244  * For using special settings for automated tests as described in \ref TEST, save your custom settings in a subdirectory
1245  * "SCIP_HOME/settings".
1246  *
1247  *
1248  * We hope this tutorial gave you an overview of what is possible using the \SCIP interactive shell. Please also read our
1249  * \ref FAQ, in particular the section <a href="http://scip.zib.de/#faq">Using \SCIP as a standalone MIP/MINLP-Solver</a>.
1250  *
1251  */
1252 
1253 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
1254 
1255 /**@page DOC How to search the documentation for interface methods
1256  *
1257  * If you are looking for a method in order to perform a specific task, there are usually two places to look at:
1258  * - The file "scip.h" in the file list.
1259  * In this main header file, you find all methods that perform "complex" operations that affect or need data from
1260  * different components of \SCIP.
1261  * For these methods, you always have to provide the \SCIP pointer that is created by SCIPcreate().
1262  * The documentation of "scip.h" is grouped into several blocks, each dealing with methods for a specific kind of
1263  * object.
1264  * For example, all methods operating on variables are grouped together.
1265 
1266  * - The files \ref PUBLICCOREAPI "pub_<...>.h" contain methods that perform "easy" operations that only
1267  * affect the corresponding objects.
1268  * Usually, with these methods you can access the data of the object.
1269  * For example, in "pub_var.h" you find methods to get information about a variable.
1270  *
1271  * The file "pub_misc.h" contains methods for data structures like priority queues, hash tables, and hash maps,
1272  * as well as methods for sorting, numerics, random numbers, string operations, and file operations.
1273  *
1274  * If you are looking for a description of a callback method of a plugin that you want to implement, you have to
1275  * look at the corresponding \ref TYPEDEFINITIONS "type_<...>.h".
1276  */
1277 
1278 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
1279 
1280 /**@page CONS How to add constraint handlers
1281  *
1282  * A constraint handler defines the semantics and the algorithms to process constraints of a certain class. A single
1283  * constraint handler is responsible for all constraints belonging to its constraint class. For example, there is
1284  * one \ref cons_knapsack.h "knapsack constraint handler" that ensures solutions are only accepted if they satisfy all
1285  * knapsack constraints in the model. \n A complete list of all constraint handlers contained in this release can be
1286  * found \ref CONSHDLRS "here".
1287  *
1288  * We now explain how users can add their own constraint handlers.
1289  * For an example, look into the subtour constraint handler (examples/TSP/src/ConshdlrSubtour.cpp) of the
1290  * \ref TSP_MAIN project.
1291  * The example is written in C++ and uses the C++ wrapper classes.
1292  * However, we will explain the implementation of a constraint handler using the C interface.
1293  * It is very easy to transfer the C explanation to C++; whenever a method should be implemented using the
1294  * SCIP_DECL_CONS... notion, reimplement the corresponding virtual member function of the abstract scip::ObjConshdlr
1295  * base class.
1296  *
1297  * Additional documentation for the callback methods of a constraint handler can be found in the file
1298  * type_cons.h.
1299  *
1300  * Here is what you have to do (assuming your constraint handler should be named "subtour"):
1301  * -# Copy the template files src/scip/cons_xyz.c and src/scip/cons_xyz.h into files "cons_subtour.c"
1302  * and "cons_subtour.h".
1303  * \n
1304  * Make sure to <b>adjust your Makefile</b> such that these files are compiled and linked to your project.
1305  * -# Use SCIPincludeConsSubtour() in order to include the constraint handler into your SCIP instance,
1306  * e.g., in the main file of your project (see, e.g., src/cppmain.cpp in the TSP example).
1307  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "subtour".
1308  * -# Adjust the \ref CONS_PROPERTIES "properties of the constraint handler".
1309  * -# Define the \ref CONS_DATA "constraint data and the constraint handler data". This is optional.
1310  * -# Implement the \ref CONS_INTERFACE "interface methods".
1311  * -# Implement the \ref CONS_FUNDAMENTALCALLBACKS "fundamental callback methods".
1312  * -# Implement the \ref CONS_ADDITIONALCALLBACKS "additional callback methods". This is optional.
1313  *
1314  *
1315  * @section CONS_PROPERTIES Properties of a Constraint Handler
1316  *
1317  * At the top of the new file "cons_subtour.c" you can find the constraint handler properties.
1318  * These are given as compiler defines. Some of them are optional, as, e.g., separation-related properties,
1319  * which only have to be defined if the constraint handler supports the related callbacks.
1320  * In the C++ wrapper class, you have to provide the constraint handler properties by calling the constructor
1321  * of the abstract base class scip::ObjConshdlr from within your constructor (see the TSP example).
1322  * The properties you have to set have the following meaning:
1323  *
1324  * @subsection CONS_FUNDAMENTALPROPERTIES Fundamental Constraint Handler properties
1325  *
1326  * \par CONSHDLR_NAME: the name of the constraint handler.
1327  * This name is used in the interactive shell to address the constraint handler.
1328  * Additionally, if you are searching for a constraint handler with SCIPfindConshdlr(), this name is looked up.
1329  * Names have to be unique: no two constraint handlers may have the same name.
1330  *
1331  * \par CONSHDLR_DESC: the description of the constraint handler.
1332  * This string is printed as a description of the constraint handler in the interactive shell of SCIP.
1333  *
1334  * \par CONSHDLR_ENFOPRIORITY: the priority of the constraint handler for constraint enforcing.
1335  * Like the separation priority, the enforcement priorities define the order in which the different constraint handlers
1336  * are called in the constraint enforcement step of the subproblem processing.
1337  * The constraint enforcement is called after the price-and-cut loop is executed (in the case that the LP is solved
1338  * at the current subproblem).
1339  * \n
1340  * The integrality constraint handler has an enforcement priority of 0.
1341  * That means, if a constraint handler has negative enforcement priority, it only has to deal with integral solutions
1342  * in its enforcement methods, because for fractional solutions, the integrality constraint handler would have
1343  * created a branching, thereby aborting the enforcement step.
1344  * If you want to implement a constraint-depending branching rule (for example, SOS branching on special ordered
1345  * set constraints), you have to assign a positive enforcement priority to your constraint handler.
1346  * In this case, you have to be able to deal with fractional solutions.
1347  * \n
1348  * See \ref CONSENFOLP and \ref CONSENFOPS for further details of the separation callback.
1349  *
1350  * \par CONSHDLR_CHECKPRIORITY: the priority of the constraint handler for checking feasibility.
1351  * Like the separation priority, the checking priorities define the order in which the different constraint handlers
1352  * are called to check the feasibility of a given primal solution candidate.
1353  * The integrality constraint handler has a checking priority of 0.
1354  * That means, constraint handlers with negative checking priorities only have to deal with integral solutions.
1355  *
1356  * \par CONSHDLR_EAGERFREQ: the default frequency for using all instead of only the useful constraints in separation, propagation and enforcement.
1357  * If \em constraint \em aging is activated, some constraints that were not useful in the past for propagation or
1358  * separation are marked to be \em obsolete.
1359  * Usually, the obsolete constraints are not presented to the separation and propagation methods of the constraint
1360  * handlers, such that the constraint handlers only process the non-obsolete constraints.
1361  * However, every n'th call, with n being the EAGERFREQ of the constraint handler, all constraints are presented to the
1362  * separation and propagation methods of the constraint handler.
1363  * This gives obsolete constraints the chance of becoming non-obsolete again.
1364  * \n
1365  * If the eager evaluation frequency is set to -1, obsolete constraints are never presented to the separation and
1366  * propagation methods.
1367  * A frequency of 0 means, that obsolete constraints are only used in the first call of each method.
1368  *
1369  * \par CONSHDLR_NEEDSCONS: indicates whether the constraint handler should be skipped, if no constraints are available.
1370  * Usually, a constraint handler is only executed if there are constraints of its corresponding class in the model.
1371  * For those constraint handlers, the NEEDSCONS flag should be set to TRUE.
1372  * However, some constraint handlers must be called without having a constraint of the class in the model, because
1373  * the constraint is only implicitly available.
1374  * For example, the integrality constraint handler has the NEEDSCONS flag set to FALSE, because there is no explicit
1375  * integrality constraint in the model.
1376  * The integrality conditions are attached to the variables, and the integrality constraint handler has to check
1377  * all variables that are marked to be integer for integral values.
1378  *
1379  * @subsection CONS_ADDITIONALPROPERTIES Optional Constraint Handler properties
1380  *
1381  * The following properties are optional and only need to be defined if the constraint handlers support
1382  * separation, presolving, propagation, and/or upgrade functionality.
1383  *
1384  * \par LINCONSUPGD_PRIORITY: priority of the constraint handler for upgrading of linear constraints
1385  * This property is only needed if a certain linear constraint can be upgraded to a more specific one. In one of
1386  * the first presolving rounds SCIP tries to upgrade linear constraints to more specialized constraints, such as
1387  * knapsack constraints. The upgrading calls are processed in the order of decreasing priority.
1388  *
1389  * \par NONLINCONSUPGD_PRIORITY: priority of the constraint handler for upgrading of nonlinear constraints
1390  * This property has the same effect as the LINCONSUPGD_PRIORITY parameter, see above, and should be set whenever
1391  * an upgrade functionality from a general nonlinear constraint to the more specific one is defined.
1392  *
1393  * \par CONSHDLR_SEPAFREQ: the default frequency for separating cuts.
1394  * The separation frequency defines the depth levels at which the constraint handler's separation methods \ref CONSSEPALP
1395  * and \ref CONSSEPASOL are called.
1396  * For example, a separation frequency of 7 means, that the separation callback is executed for subproblems that are
1397  * in depth 0, 7, 14, ... of the branching tree.
1398  * A separation frequency of 0 means, that the separation method is only called at the root node.
1399  * A separation frequency of -1 disables the separation method of the constraint handler.
1400  * \n
1401  * The separation frequency can be adjusted by the user.
1402  * This property of the constraint handler only defines the default value of the frequency.
1403  * If you want to have a more flexible control of when to execute the separation algorithm, you have to assign
1404  * a separation frequency of 1 and implement a check at the beginning of your separation algorithm whether you really
1405  * want to execute the separator or not.
1406  * If you do not want to execute the method, set the result code to SCIP_DIDNOTRUN.
1407  *
1408  * \par CONSHDLR_SEPAPRIORITY: the priority of the constraint handler for separation. (optional: to be set only if the constraint handler supports separation)
1409  * In each separation round during the price-and-cut loop of the subproblem processing or during the separation loop
1410  * of the primal solution separation, the separators and separation methods of the constraint handlers are called in
1411  * a predefined order, which is given by the priorities of the separators and the separation priorities of the
1412  * constraint handlers.
1413  * First, the separators with non-negative priority are called in the order of decreasing priority.
1414  * Next, the separation methods of the different constraint handlers are called in the order of decreasing separation
1415  * priority.
1416  * Finally, the separators with negative priority are called in the order of decreasing priority.
1417  * \n
1418  * The separation priority of the constraint handler should be set according to the complexity of the cut separation
1419  * algorithm and the impact of the resulting cuts:
1420  * Constraint handlers that provide fast algorithms that usually have a high impact (i.e., cut off a large portion of
1421  * the LP relaxation) should have a high priority.
1422  * See \ref CONSSEPALP and \ref CONSSEPASOL for further details of the separation callbacks.
1423  *
1424  * \par CONSHDLR_DELAYSEPA: the default for whether the separation method should be delayed, if other separators found cuts.
1425  * If the constraint handler's separation method is marked to be delayed, it is only executed after no other separator
1426  * or constraint handler found a cut during the price-and-cut loop.
1427  * If the separation method of the constraint handler is very expensive, you may want to mark it to be delayed until all
1428  * cheap separation methods have been executed.
1429  *
1430  * \par CONSHDLR_PROPFREQ: the default frequency for propagating domains.
1431  * This default frequency has the same meaning as the CONSHDLR_SEPAFREQ with respect to the domain propagation
1432  * callback of the constraint handler.
1433  * A propagation frequency of 0 means that propagation is only applied in preprocessing and at the root node.
1434  * A propagation frequency of -1 disables the propagation method of the constraint handler.
1435  *
1436  * \par CONSHDLR_DELAYPROP: the default for whether the propagation method should be delayed, if other propagators found reductions.
1437  * This property is analogous to the DELAYSEPA flag, but deals with the propagation method of the constraint handler.
1438  *
1439  * \par CONSHDLR_PROP_TIMING: the propagation timing mask of the constraint handler.
1440  * SCIP calls the domain propagation routines at different places in the node processing loop.
1441  * This property indicates at which places the propagation routine of the constraint handler is called.
1442  * Possible values are defined in type_timing.h and can be concatenated, e.g., as in SCIP_PROPTIMING_ALWAYS.
1443  *
1444  * \par CONSHDLR_PRESOLTIMING: the timing of the constraint handler's presolving method (FAST, MEDIUM, or EXHAUSTIVE).
1445  * Every presolving round starts with the FAST presolving methods. MEDIUM presolvers are only called, if FAST presolvers did not find
1446  * enough reductions in this round so far, and EXHAUSTIVE presolving steps are only performed if all presolvers called before
1447  * in this round were unsuccessful.
1448  * Presolving methods should be assigned a timing based on how expensive they are, e.g., presolvers that provide fast algorithms that
1449  * usually have a high impact (i.e., remove lots of variables or tighten bounds of many variables) should have a timing FAST.
1450  * If a presolving method implements different algorithms of different complexity, it may also get multiple timings and check the timing
1451  * internally in the \ref CONSPRESOL callback to decide which algorithms to run.
1452  *
1453  * \par CONSHDLR_MAXPREROUNDS: the default maximal number of presolving rounds the constraint handler participates in.
1454  * The preprocessing is executed in rounds.
1455  * If enough changes have been applied to the model, an additional preprocessing round is performed.
1456  * The MAXPREROUNDS parameter of a constraint handler denotes the maximal number of preprocessing rounds the constraint
1457  * handler participates in.
1458  * A value of -1 means that there is no limit on the number of rounds.
1459  * A value of 0 means the preprocessing callback of the constraint handler is disabled.
1460  *
1461  *
1462  *
1463  * @section CONS_DATA Constraint Data and Constraint Handler Data
1464  *
1465  * Below the header "Data structures" you can find two structs called "struct SCIP_ConsData" and
1466  * "struct SCIP_ConshdlrData".
1467  * If you are using C++, you only need to define the "struct SCIP_ConsData".
1468  * The constraint handler data must be implemented as member variables of your constraint handler class.
1469  * \n
1470  * The constraint data are the information that is needed to define a single constraint of the constraint handler's
1471  * constraint class.
1472  * For example, the data of a knapsack constraint would consist of a list of variables, a list of weights, and
1473  * the capacity of the knapsack.
1474  * The data of a subtour constraint consists of the graph on which the problem is defined.
1475  * In the graph, each edge should be linked to the corresponding binary problem variable.
1476  * \n
1477  * The constraint handler data are additional variables, that belong to the constraint handler itself and which are
1478  * not specific to a single constraint.
1479  * For example, you can use these data to store parameters of the constraint handler or statistical information.
1480  * The constraint handler data are optional.
1481  * You can leave the struct empty.
1482  *
1483  *
1484  * @section CONS_INTERFACE Interface Methods
1485  *
1486  * At the bottom of "cons_subtour.c" you can find three interface methods, that also appear in "cons_subtour.h".
1487  * These are SCIPincludeConshdlrSubtour(), SCIPcreateConsSubtour(), and SCIPcreateConsSubtourBasic().
1488  * \n
1489  * The method SCIPincludeConshdlrSubtour() only has to be adjusted slightly.
1490  * It is responsible for notifying SCIP of the presence of the constraint handler by calling the method
1491  * SCIPincludeConshdlr().
1492  * It is called by the user, if (s)he wants to include the constraint handler, i.e., if (s)he wants to make
1493  * the constraint handler available to the model, and looks like this:
1494  * \dontinclude src/scip/cons_knapsack.c
1495  * -# If you are using constraint handler data, you have to <b>allocate the memory for the data</b> at this point.
1496  * You also have to initialize the fields in struct SCIP_ConshdlrData afterwards.
1497  *
1498  * \skip SCIP_RETCODE SCIPincludeConshdlrKnapsack(
1499  * \until SCIPallocBlockMemory
1500  *
1501  * -# Now, <b>SCIP gets notified</b> of the presence of the constraint handler together with its \ref CONS_FUNDAMENTALCALLBACKS "basic callbacks".
1502  *
1503  * \skip SCIPincludeConshdlrBasic
1504  * \until assert
1505  *
1506  * -# All \ref CONS_ADDITIONALCALLBACKS "additional callbacks" are added via their setter functions.
1507  *
1508  * \skip SCIPsetConshdlrCopy
1509  * \until SCIPsetConshdlrExit
1510  *
1511  * -# If the constraint handler is a specialization of a general linear or nonlinear constraint, we want to include an
1512  * <b>automatic upgrading mechanism</b> by calling the interface method
1513  *
1514  * \skip SCIPfindConshdlr
1515  * \until SCIPincludeLinconsUpgrade
1516  * or
1517  * \code
1518  * SCIP_CALL( SCIPincludeNonlinconsUpgrade(scip, nonlinconsUpgdSubtour, NULL, NONLINCONSUPGD_PRIORITY, TRUE, CONSHDLR_NAME) );
1519  * \endcode
1520  *
1521  * in the nonlinear case. See also cons_nonlinear.h for further information about the general upgrade procedure in the nonlinear case.
1522  * -# You may also add <b>user parameters</b> for your constraint handler.
1523  * Some parameters which are important to play with are added to every constraint automatically, as, e.g.,
1524  * propagation or separation frequency.
1525  * \skip SCIPaddIntParam
1526  * \until DEFAULT_SEPACARDFREQ
1527  * \skip SCIP_OKAY
1528  * \until }
1529  *
1530  *
1531  * The methods SCIPcreateConsSubtour() and SCIPcreateConsSubtourBasic() are called to create a single constraint of the constraint
1532  * handler's constraint class.
1533  * It should allocate and fill the constraint data, and call SCIPcreateCons().
1534  * Take a look at the following example from the \ref cons_knapsack.h "knapsack constraint handler":
1535  *
1536  * @refsnippet{src/scip/cons_knapsack.c,SnippetConsCreationKnapsack}
1537  *
1538  * In this example, consdataCreate() is a local method that allocates memory for the given consdata
1539  * and fills the data with the given <code>vars</code> array. For allocating memory for the constraint data, you
1540  * can use SCIP memory allocation:
1541  * \code
1542  * SCIP_CALL( SCIPallocBlockMemory(scip, consdata) );
1543  * \endcode
1544  *
1545  *
1546  * @section CONS_CALLBACKS Callback methods of Constraint handlers
1547  *
1548  * Besides the various functions which you will implement inside your constraint handler there exists a number
1549  * of <b> callback methods </b> associated with your constraint handler. Callback methods can be regarded as
1550  * tasks which your constraint handler is able to provide to the solver. They are grouped into two
1551  * categories:
1552  *
1553  * \ref CONS_FUNDAMENTALCALLBACKS "Fundamental Callback methods" are mandatory to implement
1554  * such that your code will work. For example, every constraint handler has to provide the
1555  * functionality to state whether all of its constraints are
1556  * fulfilled by a given variable assignment. Hence, the \ref CONSCHECK "CONSCHECK" callback is
1557  * one of the fundamental (or \a basic) callbacks of a constraint handler.
1558  *
1559  * Callbacks which are not necessarily implemented are grouped together as
1560  * \ref CONS_ADDITIONALCALLBACKS "additional callbacks". Such callbacks can be used to allocate and free memory
1561  * at different stages of the solving process. Although not mandatory, it might be useful to implement
1562  * some of these callbacks, e.g., to extend your constraint handler by a
1563  * \ref CONSSEPALP "separation" or \ref CONSPRESOL "presolving" functionality.
1564  *
1565  * All callbacks should be passed to SCIP during the SCIPinclude<PLUGINTYPE><PLUGINNAME> method
1566  * (e.g., SCIPincludeConshdlrKnapsack() for the \ref cons_knapsack.h "knapsack constraint handler").
1567  * Since SCIP version 3.0, two ways of setting callbacks can be used, either via SCIPincludeConshdlr()
1568  * (all at once, as it always was), or via SCIPincludeConshdlrBasic() and setter functions for additional callbacks.
1569  * Since the basic inclusion methods are very unlikely to change and will thus
1570  * make your code more stable towards future versions of SCIP with more callbacks,
1571  * we recommend the latter choice, as explained in the \ref CONS_INTERFACE "interface" section.
1572  *
1573  * @section CONS_FUNDAMENTALCALLBACKS Fundamental Callback Methods
1574  *
1575  * By implementing the fundamental callbacks, you define the semantics of the constraint class the constraint handler
1576  * deals with.
1577  * If these methods are implemented, the resulting code is already correct and finds the optimal solution to the
1578  * given problem instance.
1579  * However, it might be very slow because the additional features, like cut separation and domain propagation, are
1580  * missing.
1581  * In the C++ wrapper class scip::ObjConshdlr, the fundamental callback methods are virtual abstract member functions.
1582  * You have to implement them in order to be able to construct an object of your constraint handler class.
1583  *
1584  * There are three fundamental callback methods that are all dealing with the feasibility of a given solution.
1585  * They are called at different places in the algorithm and have slightly different meaning.
1586  * However, it is usually reasonable to implement a single local method that is called by all of the three callback
1587  * methods with slightly modified parameters.
1588  * The fourth method provides dual information that is used for example in preprocessing.
1589  *
1590  * Additional documentation for the callback methods can be found in type_cons.h.
1591  *
1592  * @subsection CONSCHECK
1593  *
1594  * The CONSCHECK callback gets a primal solution candidate in a SCIP_SOL* data structure
1595  * and has to check this solution for global feasibility.
1596  * It has to return a result SCIP_FEASIBLE, if the solution satisfies all the constraints of the constraint handler,
1597  * and a result SCIP_INFEASIBLE if there is at least one constraint that is violated.
1598  *
1599  * If the solution is not NULL, SCIP should also be informed about the constraint violation with a call to
1600  * SCIPupdateSolConsViolation() and additionally SCIPupdateSolLPRowViolation() for every row of the constraint's current
1601  * representation in the LP relaxation, if any such rows exist.
1602  * As a convenience method, SCIPupdateSolLPConsViolation() can be used if the constraint
1603  * is represented completely by a set of LP rows, meaning that the current constraint violation is equal to the maximum
1604  * of the contraint violations of the corresponding LP rows.
1605  *
1606  * The callback is used by primal heuristics to check a constructed solution for feasibility.
1607  * That means, the constraint handler has to deal with arbitrary solutions that do not necessarily satisfy the bounds
1608  * and constraints of the local subproblem.
1609  *
1610  * The value of a variable \em var in the given solution \em sol can be accessed by calling
1611  * \code
1612  * SCIPgetSolVal(scip, sol, var)
1613  * \endcode
1614  *
1615  * For example, the \ref cons_knapsack.h "knapsack constraint handler" loops over its constraints and
1616  * calculates the scalar product \f$w^T x\f$ of weights \f$w\f$ with the solution vector \f$x\f$.
1617  * This scalar product is compared with the capacity of the knapsack constraint.
1618  * If it exceeds the capacity, the CONSCHECK method is immediately aborted with the result SCIP_INFEASIBLE.
1619  * If all knapsack constraints are satisfied, a result SCIP_FEASIBLE is returned.
1620  *
1621  * @subsection CONSENFOLP
1622  *
1623  * The CONSENFOLP method is called after the price-and-cut loop was finished and an LP solution is available.
1624  * Like the CHECK call, the ENFOLP method should return a result SCIP_FEASIBLE, if the solution satisfies all the
1625  * constraints.
1626  * However, the behavior should be different, if the solution violates some of the associated constraints.
1627  * The constraint handler may return a result SCIP_INFEASIBLE in this situation, but this is not the best what
1628  * one can do.
1629  * The ENFOLP method has the possibility of \em resolving the infeasibility by
1630  * - stating that the current subproblem is infeasible (result SCIP_CUTOFF),
1631  * - adding an additional constraint that resolves the infeasibility (result SCIP_CONSADDED),
1632  * - reducing the domain of a variable (result SCIP_REDUCEDDOM),
1633  * - adding a cutting plane (result SCIP_SEPARATED),
1634  * - performing a branching (result SCIP_BRANCHED).
1635  *
1636  * However, the solution is not given as a SCIP_SOL* data structure.
1637  *
1638  * The value of a variable <code>var</code> in the LP solution can be accessed by calling
1639  * \code
1640  * SCIPgetVarSol(scip, var)
1641  * \endcode
1642  * or by
1643  * \code
1644  * SCIPgetSolVal(scip, NULL, var)
1645  * \endcode
1646  * By using the latter method, you can have a single local method to check a solution for feasibility by passing
1647  * the given <code>sol</code> to the CONSCHECK call and by passing a NULL pointer as <code>sol</code> to
1648  * the CONSENFOLP and CONSENFOPS calls.
1649  *
1650  *
1651  * @subsection CONSENFOPS
1652  *
1653  * The CONSENFOPS callback is similar to the CONSENFOLP callback, but deals with \em pseudo \em solutions instead
1654  * of LP solutions.
1655  *
1656  * If the LP was not solved at the current subproblem (either because the user did not want to solve it, or because
1657  * numerical difficulties in the LP solving process were detected) no LP solution is available.
1658  * In this situation, the pseudo solution is used instead.
1659  * In this solution, the variables are set to the local bound which is best with respect to the objective function.
1660  * You can think of the pseudo solution as solution to the LP relaxation with all constraints except the bounds
1661  * being removed.
1662  *
1663  * Like the ENFOLP callback, the ENFOPS callback has to check whether the pseudo solution satisfies all the constraints
1664  * of the constraint handler.
1665  * The pseudo solution can be accessed by the same methods as the LP solution (SCIP knows, if the LP was solved at the
1666  * current subproblem, and returns either the LP solution or the pseudo solution).
1667  *
1668  * Unlike the ENFOLP callback, the ENFOPS callback must not add cuts and cannot return the result SCIP_SEPARATED.
1669  * It is, however, possible to force the solving of the LP by returning the result SCIP_SOLVELP.
1670  * For example, the infeasibility of a linear constraint that contains continuous variables cannot be resolved,
1671  * if all integer variables in the constraint are already fixed.
1672  * In this case, the LP has to be solved in order to get a solution that satisfies the linear constraint.
1673  *
1674  * @subsection CONSLOCK
1675  *
1676  * The CONSLOCK callback provides dual information for a single constraint.
1677  * It has to tell SCIP, which variables are existing in the given constraint, and in which way modifications of these
1678  * variables may affect the feasibility of the constraint.
1679  *
1680  * For each variable that is affected by the constraint, the callback should call SCIPaddVarLocks():
1681  * - If the constraint may become violated by decreasing the value of a variable, it should call
1682  * SCIPaddVarLocks(scip, var, nlockspos, nlocksneg), saying that rounding down is potentially rendering the
1683  * (positive) constraint infeasible and rounding up is potentially rendering the negation of the constraint
1684  * infeasible.
1685  * - If the constraint may become violated by increasing the value of a variable, it should call
1686  * SCIPaddVarLocks(scip, var, nlocksneg, nlockspos), saying that rounding up is potentially rendering the
1687  * constraint's negation infeasible and rounding down is potentially rendering the constraint itself
1688  * infeasible.
1689  * - If the constraint may become violated by changing the variable in any direction, it should call
1690  * SCIPaddVarLocks(scip, var, nlockspos + nlocksneg, nlockspos + nlocksneg).
1691  *
1692  * <b>Note:</b> You do not have to worry about nlockspos and nlocksneg. These integer values are given as
1693  * parameter of the CONSLOCK callback (see type_cons.h). Just use these variables in the above described
1694  * fashion <b>without</b> adding or subtracting anything to them. In case of the knapsack constraints this
1695  * method looks like this.
1696  *
1697  * @refsnippet{src/scip/cons_knapsack.c,SnippetConsLockKnapsack}
1698  *
1699  * To give same more intuition, consider the linear constraint \f$3x -5y +2z \leq 7\f$ as an example.
1700  * The CONSLOCK callback method of the linear constraint handler should call
1701  * SCIPaddVarLocks(scip, x, nlocksneg, nlockspos), SCIPaddVarLocks(scip, y, nlockspos, nlocksneg),
1702  * and SCIPaddVarLocks(scip, z, nlocksneg, nlockspos) to tell SCIP, that rounding up of \f$x\f$
1703  * and \f$z\f$ and rounding down of \f$y\f$ can destroy the feasibility of the constraint, while rounding
1704  * down of \f$x\f$ and \f$z\f$ and rounding up of \f$y\f$ can destroy the feasibility of the
1705  * constraint's negation \f$3x -5y +2z > 7\f$.
1706  * \n
1707  * A linear constraint \f$2 \leq 3x -5y +2z \leq 7\f$ should call
1708  * SCIPaddVarLocks(scip, ..., nlockspos + nlocksneg, nlockspos + nlocksneg) on all variables,
1709  * since rounding in both directions of each variable can destroy both the feasibility of the
1710  * constraint and it's negation \f$3x -5y +2z < 2\f$ or \f$3x -5y +2z > 7\f$.
1711  *
1712  *
1713  * @section CONS_ADDITIONALCALLBACKS Additional Callback Methods
1714  *
1715  * The additional callback methods do not need to be implemented in every case, but provide useful functionality
1716  * for many applications. They can be added to your constraint handler via setter functions, see
1717  * \ref CONS_INTERFACE "here".
1718  *
1719  * @subsection CONSFREE
1720  *
1721  * If you are using constraint handler data, you have to implement this method in order to free the
1722  * constraint handler data. This can be done by the following procedure (which is taken from the
1723  * \ref cons_knapsack.h "knapsack constraint handler"):
1724  *
1725  * @refsnippet{src/scip/cons_knapsack.c,SnippetConsFreeKnapsack}
1726  *
1727  * If you have allocated memory for fields in your constraint handler data, remember to free this memory
1728  * before freeing the constraint handler data itself.
1729  * If you are using the C++ wrapper class, this method is not available.
1730  * Instead, just use the destructor of your class to free the member variables of your class.
1731  *
1732  * @subsection CONSHDLRCOPY
1733  *
1734  * The CONSHDLRCOPY callback is executed when the SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
1735  * callback as <code>NULL</code> the user disables the inclusion of the specified constraint handler into all copied SCIP
1736  * instances. This may deteriorate the performance of primal heuristics solving sub-SCIPs, since these constitute only
1737  * relaxations of the original problem if constraint handlers are missing.
1738  *
1739  * A usual implementation just
1740  * calls the interface method which includes the constraint handler to the model. For example, this callback is
1741  * implemented for the \ref cons_knapsack.c "knapsack constraint handler" as follows:
1742  *
1743  * @refsnippet{src/scip/cons_knapsack.c,SnippetConsCopyKnapsack}
1744  *
1745  * <b>Note:</b> If you implement this callback, take care when setting the valid pointer.
1746  *
1747  * A problem copy is called valid if it is valid in both the primal and the dual sense, i.e., if
1748  *
1749  * - it is a relaxation of the source problem
1750  * - it does not enlarge the feasible region.
1751  *
1752  * A constraint handler may choose to not copy a constraint and still declare the resulting copy as valid. It must ensure
1753  * the feasibility of any solution to the problem copy in the original (source) space.
1754  *
1755  * <b>Note:</b> If you implement this callback and the constraint handler needs constraints (see CONSHDLR_NEEDSCONS),
1756  * then you also need to implement the callback \ref CONSCOPY.
1757  *
1758  * @subsection CONSINIT
1759  *
1760  * The CONSINIT callback is executed after the problem is transformed.
1761  * The constraint handler may, e.g., use this call to replace the original variables in its constraints by transformed
1762  * variables, or to initialize its statistical constraint handler data.
1763  *
1764  * @subsection CONSEXIT
1765  *
1766  * The CONSEXIT callback is executed before the transformed problem is freed.
1767  * In this method, the constraint handler should free all resources that were allocated for the solving process.
1768  *
1769  * @subsection CONSINITPRE
1770  *
1771  * The CONSINITPRE callback is executed before the preprocessing is started, even if presolving is turned off.
1772  * The constraint handler may use this call to initialize its presolving data, or to modify its constraints
1773  * before the presolving process begins.
1774  * Necessary constraint modifications that have to be performed even if presolving is turned off should be done here
1775  * or in the presolving deinitialization call.
1776  *
1777  * @subsection CONSEXITPRE
1778  *
1779  * The CONSEXITPRE callback is executed after the preprocessing has been finished, even if presolving is turned off.
1780  * The constraint handler may use this call e.g. to clean up its presolving data, or to finally modify its constraints
1781  * before the branch-and-bound process begins.
1782  * Necessary constraint modifications that have to be performed even if presolving is turned off should be done here
1783  * or in the presolving initialization call.
1784  * Besides necessary modifications and clean up, no time consuming operations should be done.
1785  *
1786  * @subsection CONSINITSOL
1787  *
1788  * The CONSINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
1789  * begin.
1790  * The constraint handler may use this call to initialize its branch-and-bound specific data.
1791  *
1792  * @subsection CONSEXITSOL
1793  *
1794  * The CONSEXITSOL callback is executed before the branch-and-bound process is freed.
1795  * The constraint handler should use this call to clean up its branch-and-bound data, in particular to release
1796  * all LP rows that it has created or captured.
1797  *
1798  * @subsection CONSDELETE
1799  *
1800  * The CONSDELETE callback is executed if a constraint should be freed.
1801  * You can think of it as the destructor of a single constraint.
1802  * In the callback, you have to free the given constraint data.
1803  * The CONSDELETE callback is therefore the counterpart of the SCIPcreateCons...() interface method and the CONSTRANS
1804  * method.
1805  *
1806  * @subsection CONSTRANS
1807  *
1808  * The CONSTRANS method is called for each constraint of the constraint handler, when the user starts the solving
1809  * process.
1810  * It has to copy the original constraint data of the constraint to the memory for the transformed problem.
1811  * You can think of it as a copy constructor for a single constraint.
1812  *
1813  * The original model is copied in order to protect it from transformations that are applied during the solving process,
1814  * in particular during preprocessing.
1815  * Preprocessing and solving always operates on the transformed problem.
1816  * If the solving process data are freed, the original data still exist and the user can, e.g., modify the problem and
1817  * restart the solving process.
1818  *
1819  * If you do not implement the CONSTRANS method, a transformed constraint is created with the same flags and the
1820  * same constraint data pointer.
1821  * That means, the transformed constraint points to the original constraint data.
1822  * This is okay, as long as the constraint data is not changed during the solving process.
1823  * If you want to implement preprocessing methods or other methods that modify the constraint data, you have to
1824  * implement the CONSTRANS method and create a copy of the constraint data.
1825  *
1826  * Here is an example, which is taken from the \ref cons_knapsack.h "knapsack constraint handler":
1827  *
1828  * @refsnippet{src/scip/cons_knapsack.c,SnippetConsTransKnapsack}
1829  *
1830  * @subsection CONSINITLP
1831  *
1832  * The CONSINITLP callback is executed before the first LP relaxation is solved.
1833  * It should add the LP relaxations of all "initial" constraints to the LP. The method should scan the constraints
1834  * array for constraints that are marked initial via calls to SCIPconsIsInitial() and put the LP relaxation
1835  * of all initial constraints to the LP with calls to SCIPaddCut().
1836  *
1837  * @subsection CONSSEPALP
1838  *
1839  * The CONSSEPALP callback is executed during the price-and-cut loop of the subproblem processing.
1840  * It should try to generate cutting planes for the constraints of the constraint handler in order to separate
1841  * the current LP solution.
1842  * The method is called in the LP solution loop, which means that a valid LP solution exists.
1843  *
1844  * Usually, a separation callback searches and produces cuts, that are added with a call to SCIPaddCut().
1845  * If the cut should be remembered in the global cut pool, it may also call SCIPaddPoolCut().
1846  * However, the callback may also produce domain reductions or add other constraints.
1847  *
1848  * The CONSSEPALP callback has the following options:
1849  * - detecting that the node is infeasible in the variables' bounds and can be cut off (result SCIP_CUTOFF)
1850  * - adding an additional constraint (result SCIP_CONSADDED)
1851  * - reducing a variable's domain (result SCIP_REDUCEDDOM)
1852  * - adding a cutting plane to the LP (result SCIP_SEPARATED)
1853  * - stating that the separator searched, but did not find domain reductions, cutting planes, or cut constraints
1854  * (result SCIP_DIDNOTFIND)
1855  * - stating that the separator was skipped (result SCIP_DIDNOTRUN)
1856  * - stating that the separator was skipped, but should be called again (result SCIP_DELAYED)
1857  * - stating that a new separation round should be started without calling the remaining separator methods (result SCIP_NEWROUND)
1858  *
1859  * Please see also the @ref CONS_ADDITIONALPROPERTIES section to learn about the properties
1860  * CONSHDLR_SEPAFREQ, CONSHDLR_SEPAPRIORITY, and CONSHDLR_DELAYSEPA, which influence the behaviour of SCIP
1861  * calling CONSSEPALP.
1862  *
1863  * @subsection CONSSEPASOL
1864  *
1865  * The CONSSEPASOL callback is executed during separation loop on arbitrary primal solutions.
1866  * It should try to generate cutting planes for the constraints of the constraint handler in order to separate
1867  * the given primal solution.
1868  * The method is not called in the LP solution loop, which means that there is no valid LP solution.
1869  *
1870  * Usually, a separation callback searches and produces cuts, that are added with a call to SCIPaddCut().
1871  * If the cut should be remembered in the global cut pool, it may also call SCIPaddPoolCut().
1872  * However, the callback may also produce domain reductions or add other constraints.
1873  *
1874  * The CONSSEPASOL callback has the following options:
1875  * - detecting that the node is infeasible in the variables' bounds and can be cut off (result SCIP_CUTOFF)
1876  * - adding an additional constraint (result SCIP_CONSADDED)
1877  * - reducing a variable's domain (result SCIP_REDUCEDDOM)
1878  * - adding a cutting plane to the LP (result SCIP_SEPARATED)
1879  * - stating that the separator searched, but did not find domain reductions, cutting planes, or cut constraints
1880  * (result SCIP_DIDNOTFIND)
1881  * - stating that the separator was skipped (result SCIP_DIDNOTRUN)
1882  * - stating that the separator was skipped, but should be called again (result SCIP_DELAYED)
1883  * - stating that a new separation round should be started without calling the remaining separator methods (result SCIP_NEWROUND)
1884  *
1885  * Please see also the @ref CONS_ADDITIONALPROPERTIES section to learn about the properties
1886  * CONSHDLR_SEPAFREQ, CONSHDLR_SEPAPRIORITY, and CONSHDLR_DELAYSEPA, which influence the behaviour of SCIP
1887  * calling CONSSEPASOL.
1888  *
1889  * @subsection CONSENFORELAX
1890  *
1891  * The CONSENFORELAX callback is similar to the CONSENFOLP and CONSENFOPS callbacks, but deals with relaxation solutions.
1892  *
1893  * If the best bound computed by a relaxator that includes the whole LP is strictly better than the bound of the LP itself,
1894  * the corresponding relaxation solution will get enforced. Therefore the CONSENFORELAX callback will only be called for
1895  * solutions that satisfy all active LP-constraints.
1896  *
1897  * Like the ENFOLP and ENFOPS callbacks, the ENFORELAX callback has to check whether the solution given in sol satisfies
1898  * all the constraints of the constraint handler. Since the callback is only called for relaxators including the whole LP,
1899  * cuts may be added with a result of SCIP_SEPARATED, like in the ENFOLP callback. It is also possible to return
1900  * SCIP_SOLVELP if the relaxation solution is invalid for some reason and the LP should be solved instead.
1901  *
1902  * Note that the CONSENFORELAX callback is only relevant if relaxators are used. Since the basic distribution of the
1903  * SCIP Optimization Suite does not contain any relaxators, this callback can be ignored unless any relaxators are added
1904  * via user-plugins.
1905  *
1906  * @subsection CONSPROP
1907  *
1908  * The CONSPROP callback is called during the subproblem processing.
1909  * It should propagate the constraints, which means that it should infer reductions in the variables' local bounds
1910  * from the current local bounds.
1911  * This technique, which is the main workhorse of constraint programming, is called "node preprocessing" in the
1912  * Integer Programming community.
1913  *
1914  * The CONSPROP callback has the following options:
1915  * - detecting that the node is infeasible in the variables' bounds and can be cut off (result SCIP_CUTOFF)
1916  * - reducing a variable's domain (result SCIP_REDUCEDDOM)
1917  * - stating that the propagator searched, but did not find domain reductions, cutting planes, or cut constraints
1918  * (result SCIP_DIDNOTFIND)
1919  * - stating that the propagator was skipped (result SCIP_DIDNOTRUN)
1920  * - stating that the propagator was skipped, but should be called again (result SCIP_DELAYED)
1921  *
1922  * Please see also the @ref CONS_ADDITIONALPROPERTIES section to learn about the properties
1923  * CONSHDLR_PROPFREQ, CONSHDLR_DELAYPROP, and CONSHDLR_PROP_TIMING, which influence the behaviour of SCIP
1924  * calling CONSPROP.
1925  *
1926  * @subsection CONSRESPROP
1927  *
1928  * If the constraint handler should support \ref CONF "conflict analysis", it has to supply a CONSRESPROP method.
1929  * It also should call SCIPinferVarLbCons() or SCIPinferVarUbCons() in domain propagation instead of SCIPchgVarLb() or
1930  * SCIPchgVarUb() in order to deduce bound changes on variables.
1931  * In the SCIPinferVarLbCons() and SCIPinferVarUbCons() calls, the handler provides the constraint that deduced the
1932  * variable's bound change, and an integer value <code>inferinfo</code> that can be arbitrarily chosen.
1933  *
1934  * The propagation conflict resolving method CONSRESPROP must then be implemented to provide the "reasons" for the bound
1935  * changes, i.e., the bounds of variables at the time of the propagation, which forced the constraint to set the
1936  * conflict variable's bound to its current value. It can use the <code>inferinfo</code> tag to identify its own propagation rule
1937  * and thus identify the "reason" bounds. The bounds that form the reason of the assignment must then be provided by
1938  * calls to SCIPaddConflictLb() and SCIPaddConflictUb() in the propagation conflict resolving method.
1939  *
1940  * <b>Note:</b> The fact that <code>inferinfo</code> is an integer, as opposed to an arbitrary data object, is a compromise between space and speed. Sometimes a propagator would
1941  * need more information to efficiently infer the original propagation steps that lead to the conflict. This would,
1942  * however, require too much space. In the extreme, the original propagation steps have to be repeated.
1943  *
1944  * For example, the \ref cons_logicor.h "logicor constraint" \f$c = x \vee y \vee z\f$ fixes variable \f$z\f$ to TRUE (i.e., changes the lower
1945  * bound of \f$z\f$ to 1.0), if both, \f$x\f$ and \f$y\f$, are assigned to FALSE (i.e., if the upper bounds of these
1946  * variables are 0.0). It uses <code>SCIPinferVarLbCons(scip, z, 1.0, c, 0)</code> to apply this assignment (an
1947  * inference information tag is not needed by the constraint handler and is set to 0). In the conflict analysis, the
1948  * constraint handler may be asked to resolve the lower bound change on \f$z\f$ with constraint \f$c\f$, that was
1949  * applied at a time given by a bound change index "bdchgidx". With a call to <code>SCIPvarGetLbAtIndex(z,
1950  * bdchgidx)</code>, the handler can find out, that the lower bound of variable \f$z\f$ was set to 1.0 at the given
1951  * point of time, and should call <code>SCIPaddConflictUb(scip, x, bdchgidx)</code> and <code>SCIPaddConflictUb(scip, y,
1952  * bdchgidx)</code> to tell SCIP, that the upper bounds of \f$x\f$ and \f$y\f$ at this point of time were the reason for
1953  * the deduction of the lower bound of \f$z\f$.
1954  *
1955  * If conflict analysis should not be supported, the method has to set the result code to SCIP_DIDNOTFIND. Although
1956  * this is a viable approach to circumvent the implementation of the usually rather complex conflict resolving method, it
1957  * will make the conflict analysis less effective. We suggest to first omit the conflict resolving method and check how
1958  * effective the \ref CONSPROP "propagation method" is. If it produces a lot of propagations for your application, you definitely should
1959  * consider implementing the conflict resolving method.
1960  *
1961  * @subsection CONSPRESOL
1962  *
1963  * The CONSPRESOL callback is called during preprocessing.
1964  * It should try to tighten the domains of the variables, tighten the coefficients of the constraints of the constraint
1965  * handler, delete redundant constraints, aggregate and fix variables if possible, and upgrade constraints to more
1966  * specific types.
1967  *
1968  * If the CONSPRESOL callback applies changes to the constraint data, you also have to implement the \ref CONSTRANS callback
1969  * in order to copy the constraint data to the transformed problem space and protect the original problem from the
1970  * preprocessing changes.
1971  *
1972  * To inform SCIP that the presolving method found a reduction the result pointer has to be set in a proper way.
1973  * The following options are possible:
1974  *
1975  * - SCIP_UNBOUNDED : at least one variable is not bounded by any constraint in objective direction
1976  * - SCIP_CUTOFF : at least one constraint is infeasible in the variable's bounds
1977  * - SCIP_SUCCESS : the presolver found a reduction
1978  * - SCIP_DIDNOTFIND : the presolver searched, but did not find a presolving change
1979  * - SCIP_DIDNOTRUN : the presolver was skipped
1980  * - SCIP_DELAYED : the presolver was skipped, but should be called again
1981  *
1982  * Please see also the @ref CONS_ADDITIONALPROPERTIES section to learn about the properties
1983  * CONSHDLR_PRESOLTIMING and CONSHDLR_MAXPREROUNDS, which influence the behaviour of SCIP
1984  * calling CONSPRESOL.
1985  *
1986  * @subsection CONSACTIVE
1987  *
1988  * The CONSACTIVE callback method is called each time a constraint of the constraint handler is activated.
1989  * For example, if a constraint is added locally to a subproblem, the CONSACTIVE callback is called whenever the
1990  * search enters the subtree where the constraint exists.
1991  *
1992  * @subsection CONSDEACTIVE
1993  *
1994  * The CONSDEACTIVE callback method is called each time a constraint of the constraint handler is deactivated.
1995  * For example, if a constraint is added locally to a subproblem, the CONSDEACTIVE callback is called whenever the
1996  * search leaves the subtree where the constraint exists.
1997  *
1998  * @subsection CONSENABLE
1999  *
2000  * The CONSENABLE callback method is called each time a constraint of the constraint handler is enabled.
2001  * Constraints might be active without being enabled. In this case, only the feasibility checks are executed,
2002  * but domain propagation and separation is skipped.
2003  *
2004  * @subsection CONSDISABLE
2005  *
2006  * The CONSDISABLE callback method is called each time a constraint of the constraint handler is disabled.
2007  *
2008  * @subsection CONSPRINT
2009  *
2010  * The CONSPRINT callback method is called, when the user asks SCIP to display the problem to the screen
2011  * or save the problem into a file. This is, however, only the case if the user requested the CIP format.
2012  * For more details about reading and writing with SCIP we refer to the \ref READER "file readers". In this
2013  * callback method the constraint handler should display the data of the constraint in an appropriate form.
2014  * The output format that is defined by the CONSPRINT callbacks is called CIP format.
2015  * In later versions of SCIP, the constraint handlers should also be able to parse (i.e., read) constraints
2016  * which are given in CIP format.
2017  *
2018  * @subsection CONSCOPY
2019  *
2020  * The CONSCOPY callback method is used whenever constraints should be copied from one SCIP instance into another SCIP
2021  * instance. This method comes with the necessary parameters to do so, most importantly with a mapping of the variables of the
2022  * source SCIP instance to the corresponding variables of the target SCIP instance, and a mapping for the constraints
2023  * in the same way. For a complete list of all arguments of this callback method see type_cons.h.
2024  *
2025  * To get the corresponding target variable of a given source variable, you can use the variable map directly:
2026  *
2027  * \code
2028  * targetvar = (SCIP_VAR*) SCIPhashmapGetImage(varmap, sourcevar);
2029  * \endcode
2030  *
2031  * We recommend, however, to use the method SCIPgetVarCopy() which gets besides others the variable map and the constraint map as input
2032  * and returns the requested target variable. The advantage of using SCIPgetVarCopy() is that in the case
2033  * the required variable does not yet exist, it is created and added to the copy automatically:
2034  *
2035  * \code
2036  * SCIP_CALL( SCIPgetVarCopy(sourcescip, scip, sourcevar, &targetvar, varmap, consmap, global) );
2037  * \endcode
2038  *
2039  * Finally, the result pointer <code>valid</code> has to be set to TRUE if (and only if!) the copy process was successful.
2040  *
2041  * <b>Note:</b> Be careful when setting the valid pointer.
2042  * A problem copy is called valid if it is valid in both the primal and the dual sense, i.e., if
2043  *
2044  * - it is a relaxation of the source problem
2045  * - it does not enlarge the feasible region.
2046  *
2047  * A constraint handler may choose to not copy a constraint and still declare the resulting copy as valid. Therefore, it must ensure
2048  * the feasibility of any solution to the problem copy in the original (source) space.
2049  *
2050  * For an example implementation we refer to cons_linear.h. Additional documentation and the complete list of all
2051  * parameters can be found in the file in type_cons.h.
2052  *
2053  * @subsection CONSPARSE
2054  *
2055  * This method is the counter part to CONSPRINT. The ideal idea is that a constraint handler is able to parse the output
2056  * which it generated via the CONSPRINT method and creates the corresponding constraint. If the parsing was successfully
2057  * the result pointer success should be set to TRUE. An example implementation can be found in the \ref cons_linear.h
2058  * "linear constraint handler".
2059  *
2060  * @subsection CONSDELVARS
2061  *
2062  * This method should iterate over the given constraints and delete all variables that were marked for deletion by SCIPdelVar().
2063  * Variable deletion is especially interesting for branch-cut-and-price applications. If your constraint handler allows
2064  * the addition of variables during the solving process (see "modifiable" attribute of constraints), then you might also want to
2065  * implement this callback. This would allow you to not only create variables during solving, but also remove them dynamically
2066  * from the problem to reduce memory consumption in case they are no longer necessary.
2067  * During presolving, SCIP may also find that some variables are not needed anymore and then try
2068  * to delete them. Thus, if you do not implement this callback, the constraint handler should capture its variables via
2069  * SCIPcaptureVar() to prevent SCIP from erroneously deleting them.
2070  *
2071  * Additional documentation and the complete list of all parameters can be found in the file type_cons.h.
2072  *
2073  * @subsection CONSGETVARS
2074  *
2075  * The CONSGETVARS callback of a constraint handler can be implemented to give access to the constraint variables
2076  * as array, independently from the internal data structure of the constraint. The buffer array
2077  * is already passed, together with its length. Consider implementing @ref CONSGETNVARS, too, to have
2078  * information about the number of variables in this constraint.
2079  *
2080  * @subsection CONSGETNVARS
2081  *
2082  * This callback can be implemented to return the number of variables involved into a particular constraint.
2083  * In order to have access to the variable pointers, consider implementing @ref CONSGETVARS.
2084  *
2085  * @refsnippet{src/scip/cons_linear.c,Callback for the number of variables}
2086  *
2087  * @subsection CONSGETDIVEBDCHGS
2088  *
2089  * This callback is used inside the various diving heuristics of SCIP and does not affect the normal branching
2090  * of the actual search.
2091  * The constraint handler can provide this callback to render a current working solution (even more) infeasible by
2092  * suggesting one or several variable bound changes.
2093  *
2094  * @section CONS_FURTHERINFO Further documentation
2095  *
2096  * Further documentation can be found in @ref type_cons.h for callback descriptions and a complete
2097  * list of all callback parameters, or in @ref scip.h
2098  * for globally available functions.
2099  */
2100 
2101 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
2102 
2103 /**@page PRICER How to add variable pricers
2104  *
2105  * A pricer performs the dynamic generation of new variables in a column generation algorithm.
2106  * It is an algorithmic representation of a (usually exponential) number of variables.
2107  * The \ref PRICERREDCOST and \ref PRICERFARKAS methods are called after each LP solve to generate additional
2108  * variables which may improve the objective value or decrease the LP infeasibility, respectively.
2109  * \n
2110  * A complete list of all pricers contained in this release can be found \ref PRICERS "here".
2111  *
2112  * If the pricer finds one or more variables with negative reduced costs or negative Farkas value, it should
2113  * call SCIPcreateVar() and SCIPaddPricedVar() to create and add the variable to the problem. Additionally,
2114  * the pricer has to add the variable to all constraints in which it appears. Therefore, a pricer needs to
2115  * know the constraints of the model and their meaning. Note that all constraints for which additional variables
2116  * are generated by a pricer have to be flagged as "modifiable" in the SCIPcreateCons() call.
2117  *
2118  * We now explain how users can add their own pricers.
2119  * For example, look into the variable pricer for the binpacking problem (examples/Binpacking/src/pricer_binpacking.c) of the
2120  * Binpacking example project.
2121  * The example is written in C. C++ users can easily adapt the code by using the scip::scip::ObjPricer wrapper base class and
2122  * implement the scip_...() virtual methods instead of the SCIP_DECL_PRICER... callback methods.
2123  *
2124  * Additional documentation for the callback methods of a pricer can be found in the file
2125  * type_pricer.h.
2126  *
2127  * Notice that if your pricer cannot cope with variable bounds other than 0 and infinity, you have to mark
2128  * all constraints containing priced variables as modifiable, and you may have to disable reduced cost
2129  * strengthening by setting propagating/rootredcost/freq to -1.
2130  *
2131  * Here is what you have to do to implement a pricer:
2132  * -# Copy the template files src/scip/pricer_xyz.c and src/scip/pricer_xyz.h into files "pricer_mypricer.c"
2133  * and "pricer_mypricer.h".
2134  * \n
2135  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
2136  * -# Use SCIPincludePricerMypricer() in order to include the pricer into your SCIP instance,
2137  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
2138  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mypricer".
2139  * -# Adjust the properties of the pricer (see \ref PRICER_PROPERTIES).
2140  * -# Define the pricer data (see \ref PRICER_DATA). This is optional.
2141  * -# Implement the interface methods (see \ref PRICER_INTERFACE).
2142  * -# Implement the fundamental callback methods (see \ref PRICER_FUNDAMENTALCALLBACKS).
2143  * -# Implement the additional callback methods (see \ref PRICER_ADDITIONALCALLBACKS). This is optional.
2144  *
2145  *
2146  * @section PRICER_PROPERTIES Properties of a Pricer
2147  *
2148  * At the top of the new file "pricer_mypricer.c" you can find the pricer properties.
2149  * These are given as compiler defines.
2150  * In the C++ wrapper class, you have to provide the pricer properties by calling the constructor
2151  * of the abstract base class scip::ObjPricer from within your constructor.
2152  * The properties you have to set have the following meaning:
2153  *
2154  * \par PRICER_NAME: the name of the pricer.
2155  * This name is used in the interactive shell to address the pricer.
2156  * Additionally, if you are searching for a pricer with SCIPfindPricer(), this name is looked up.
2157  * Names have to be unique: no two pricers may have the same name.
2158  *
2159  * \par PRICER_DESC: the description of the pricer.
2160  * This string is printed as a description of the pricer in the interactive shell.
2161  *
2162  * \par PRICER_PRIORITY: the priority of the pricer.
2163  * In each pricing round during the price-and-cut loop of the subproblem processing, the included pricers are
2164  * called in a predefined order, which is given by the priorities of the pricers.
2165  * The higher the priority, the earlier the pricer is called.
2166  * Usually, you will have only one pricer in your application and the priority is therefore irrelevant.
2167  *
2168  * \par PRICER_DELAY: the default for whether the pricer should be delayed, if other variables with negative reduced
2169  * costs have already been found in the current pricing round.
2170  * Variables may be declared to be "removable" in the SCIPcreateVar() call. This means that SCIP may remove the variable
2171  * from the LP if it was inactive (i.e., sitting at zero) for a number of LP solves. Nevertheless, after the removal of the
2172  * column from the LP, the variable still exists, and SCIP can calculate reduced costs and add it to the LP again if
2173  * necessary.
2174  * \n
2175  * If the PRICER_DELAY flag is set to TRUE (which is the common setting), all those existing variables with negative reduced costs
2176  * are added to the LP, and the LP is resolved before the pricer is called. Thus, the pricer can assume that all existing variables
2177  * have non-negative reduced costs if the \ref PRICERREDCOST method is called or non-positive Farkas value if the \ref PRICERFARKAS
2178  * method is called.
2179  * \n
2180  * In some applications, this inner pricing loop on the already existing variables can significantly slow down the solving process,
2181  * since it may lead to the addition of only very few variables in each pricing round. If this is an issue in your application,
2182  * you should consider setting the PRICER_DELAY flag to FALSE. You must, however, be aware of the fact that there may be already
2183  * existing variables with negative reduced costs. For example, this may lead to the issue that your pricer generates the same
2184  * variable twice. In some models, this is not critical because an optimal solution would choose only one of the two identical
2185  * variables anyway, but for other models this can lead to wrong results because the duplication of a variable essentially doubles
2186  * the upper bound of the variable.
2187  *
2188  *
2189  * @section PRICER_DATA Pricer Data
2190  *
2191  * Below the header "Data structures" you can find a struct which is called "struct SCIP_PricerData".
2192  * In this data structure, you can store the data of your pricer. For example, it may be convenient to store pointers to the
2193  * constraints of the problem instance here, because the pricer has to add variables to those constraints.
2194  * If you are using C++, you can add pricer data, as usual, as object variables to your class.
2195  * \n
2196  * Defining pricer data is optional. You can leave the struct empty.
2197  *
2198  *
2199  * @section PRICER_INTERFACE Interface Methods
2200  *
2201  * At the bottom of "pricer_mypricer.c" you can find the interface method SCIPincludePricerMypricer(), which also appears in "pricer_mypricer.h".
2202  * It is called by the user, if (s)he wants to include the pricer, i.e., if (s)he wants to solve a model for which variables should
2203  * be generated by this pricer.
2204  *
2205  * This method only has to be adjusted slightly.
2206  * It is responsible for notifying SCIP of the presence of the pricer. For this, you can either call SCIPincludePricer(),
2207  * or SCIPincludePricerBasic() since SCIP version 3.0. In the latter variant, \ref PRICER_ADDITIONALCALLBACKS "additional callbacks"
2208  * must be added via setter functions as, e.g., SCIPsetPricerCopy(). We recommend this latter variant because
2209  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
2210  * variant must be manually adjusted with every SCIP release containing new callbacks for pricers in order to compile.
2211  *
2212  *
2213  * In addition, the pricer has to be activated before the solution process starts, like it is done
2214  * in the pricer of the Coloring application (applications/Coloring/src/reader_col.c) by calling
2215  * \code
2216  * SCIP_CALL( SCIPactivatePricer(scip, SCIPfindPricer(scip, "coloring")) );
2217  * \endcode
2218  *
2219  * If you are using pricer data, you have to allocate the memory for the data at this point.
2220  * You can do this by calling:
2221  * \code
2222  * SCIP_CALL( SCIPallocBlockMemory(scip, &pricerdata) );
2223  * \endcode
2224  * You also have to initialize the fields in struct SCIP_PricerData afterwards.
2225  *
2226  * You may also add user parameters for your pricer, see the method SCIPincludePricerColoring() in the pricer of the Coloring application
2227  * for an example of how to add user parameters.
2228  *
2229  *
2230  * @section PRICER_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Pricer
2231  *
2232  * The fundamental callback methods have to be implemented in order to obtain an operational algorithm.
2233  * They are passed together with the pricer itself to SCIP using SCIPincludePricer() or SCIPincludePricerBasic(),
2234  * see @ref PRICER_INTERFACE.
2235  *
2236  * In the case of a pricer, there are two fundamental callback methods, namely the @ref PRICERREDCOST and the
2237  * @ref PRICERFARKAS callbacks, which both search for new variables and add them to the problem.
2238  * These methods have to be implemented for every pricer; the other callback methods are optional.
2239  * In the C++ wrapper class scip::ObjPricer, the scip_redcost() method (which corresponds to the PRICERREDCOST callback)
2240  * is a virtual abstract member function. You have to implement it in order to be able to construct an object of your
2241  * pricer class.
2242  *
2243  * Additional documentation for the callback methods can be found in type_pricer.h.
2244  *
2245  * @subsection PRICERREDCOST
2246  *
2247  * The PRICERREDCOST callback is called inside the price-and-cut loop of the subproblem solving process if the current LP relaxation
2248  * is feasible.
2249  * It should search for additional variables that can contribute to improve the current LP's solution value.
2250  * In standard branch-and-price, these are variables with negative dual feasibility, that is negative
2251  * reduced costs for non-negative variables, positive reduced costs for non-positive variables,
2252  * and non-zero reduced costs for variables that can be negative and positive.
2253  *
2254  * Whenever the pricer finds a variable with negative dual feasibility, it should call SCIPcreateVar()
2255  * and SCIPaddPricedVar() to add the variable to the problem. Furthermore, it should call the appropriate
2256  * methods of the constraint handlers to add the necessary variable entries to the constraints, see pub_cons.h.
2257  *
2258  * In the usual case that the pricer either adds a new variable or ensures that there are no further variables with negative dual feasibility,
2259  * the result pointer should be set to SCIP_SUCCESS. Only if the pricer aborts pricing without creating a new variable, but
2260  * there might exist additional variables with negative dual feasibility, the result pointer should be set to SCIP_DIDNOTRUN.
2261  * In this case, which sometimes is referred to as "early branching", the LP solution will not be used as a lower bound.
2262  * The pricer can, however, store a valid lower bound in the <code>lowerbound</code> pointer.
2263  *
2264  * Pricers usually need the dual LP solution as input for the pricing algorithm.
2265  * Since SCIP does not know the semantics of the individual constraints in the problem, the dual solution
2266  * has to be provided by the constraint handlers.
2267  * For example, the \ref cons_setppc.h "setppc constraint handler", which deals with set partitioning, packing, and covering constraints, provides
2268  * the method SCIPgetDualsolSetppc() to access the dual solution value for a single constraint.
2269  * Similarly, the dual solution of a linear constraint can be queried with the method SCIPgetDualsolLinear() of cons_linear.h.
2270  * The reduced costs of the existing variables can be accessed with the method SCIPgetVarRedcost().
2271  *
2272  * @subsection PRICERFARKAS
2273  *
2274  * If the current LP relaxation is infeasible, it is the task of the pricer to generate additional variables that can
2275  * potentially render the LP feasible again. In standard branch-and-price, these are variables with positive Farkas values,
2276  * and the PRICERFARKAS method should identify those variables.
2277  *
2278  * If the LP was proven to be infeasible, we have an infeasibility proof by the dual Farkas multipliers \f$y\f$.
2279  * With the values of \f$y\f$, an implicit inequality \f$y^T A x \ge y^T b\f$ is associated, with \f$b\f$ given
2280  * by the sides of the LP rows and the sign of \f$y\f$:
2281  * - if \f$y_i\f$ is positive, \f$b_i\f$ is the left hand side of the row,
2282  * - if \f$y_i\f$ is negative, \f$b_i\f$ is the right hand side of the row.
2283  *
2284  * \f$y\f$ is chosen in a way, such that the valid inequality \f$y^T A x \ge y^T b\f$ is violated by all \f$x\f$,
2285  * especially by the (for this inequality least infeasible solution) \f$x'\f$ defined by
2286  * - \f$x'_i := ub_i\f$, if \f$y^T A_i \ge 0\f$
2287  * - \f$x'_i := lb_i\f$, if \f$y^T A_i < 0\f$.
2288  * Pricing in this case means to add variables \f$i\f$ with positive Farkas value, i.e., \f$y^T A_i x'_i > 0\f$.
2289  *
2290  * To apply Farkas pricing, the pricer needs to know the Farkas values of the constraints. Like the dual solution values for
2291  * feasible LP solutions, the dual Farkas values for infeasible solutions can be obtained by constraint handler interface
2292  * methods such as the SCIPgetDualfarkasLinear() method of the linear constraint handler.
2293  * The Farkas values for the bounds of the variables are just the regular reduced costs and can be accessed with SCIPgetVarRedcost().
2294  *
2295  * It is useful to note that Farkas pricing is the same as the regular pricing with a zero objective function.
2296  * Therefore, a typical implementation of a pricer would consist of a generic pricing algorithm that gets a dual solution and an
2297  * objective function vector as input and generates variables by calling SCIPcreateVar() and SCIPaddPricedVar().
2298  * The PRICERREDCOST callback would call this function with the regular objective function and the regular dual solution vector,
2299  * while the PRICERFARKAS callback would call this function with a zero objective function and the Farkas vector.
2300  * From a practical point of view, it is usually the simplest approach to provide just one Boolean flag to the generic pricing
2301  * algorithm in order to identify whether it is reduced cost or Farkas pricing. Then, the algorithm would just call the appropriate
2302  * methods to access the dual solution or objective function, depending on the Boolean flag.
2303  *
2304  * @section PRICER_ADDITIONALCALLBACKS Additional Callback Methods of a Pricer
2305  *
2306  * The additional callback methods do not need to be implemented in every case.
2307  * However, some of them have to be implemented for most applications. They can either be passed directly with
2308  * SCIPincludePricer() to SCIP or via specific <b>setter functions</b> after a call of SCIPincludePricerBasic(),
2309  * see also @ref PRICER_INTERFACE.
2310  *
2311  * @subsection PRICERFREE
2312  *
2313  * If you are using pricer data, you have to implement this method in order to free the pricer data.
2314  * This can be done by the following procedure:
2315  *
2316  * @refsnippet{applications/STP/src/pricer_stp.c,SnippetPricerFreeSTP}
2317  *
2318  * If you have allocated memory for fields in your pricer data, remember to free this memory
2319  * before freeing the pricer data itself.
2320  * If you are using the C++ wrapper class, this method is not available.
2321  * Instead, just use the destructor of your class to free the member variables of your class.
2322  *
2323  * @subsection PRICERCOPY
2324  *
2325  * The PRICERCOPY callback is executed when the SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
2326  * callback as <code>NULL</code> the user disables the inclusion of the pricer into all copied SCIP
2327  * instances. This means that primal heuristics will work on a sub-SCIP that contains only a part of the variables
2328  * and no variables are priced in during the solving process of the sub-SCIP. Therefore, primal solutions found in the
2329  * copied problem are typically still valid for the original problem and used for its solving process,
2330  * but dual reductions cannot be transferred to the original problem.
2331  *
2332  * <b>Note:</b> If you implement this callback, be careful when setting the valid pointer. The valid pointer should be
2333  * set to TRUE if (and only if!) you can make sure that all necessary data of the pricer are copied
2334  * correctly. If the complete problem is validly copied, i.e. if the copy methods of all problem defining plugins
2335  * (constraint handlers and pricers) return <code>*valid = TRUE</code>, then dual reductions found for the copied problem can be
2336  * transferred to the original SCIP instance. Thus, if the valid pointer is wrongly set to TRUE, it might happen that
2337  * optimal solutions are cut off.
2338  *
2339  * @subsection PRICERINIT
2340  *
2341  * The PRICERINIT callback is executed after the problem is transformed.
2342  * The pricer may, e.g., use this call to replace the original constraints stored in its pricer data by transformed
2343  * constraints, or to initialize other elements of its pricer data.
2344  *
2345  * @subsection PRICEREXIT
2346  *
2347  * The PRICEREXIT callback is executed before the transformed problem is freed.
2348  * In this method, the pricer should free all resources that have been allocated for the solving process in PRICERINIT.
2349  *
2350  * @subsection PRICERINITSOL
2351  *
2352  * The PRICERINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to begin.
2353  * The pricer may use this call to initialize its branch-and-bound specific data.
2354  *
2355  * @subsection PRICEREXITSOL
2356  *
2357  * The PRICEREXITSOL callback is executed before the branch-and-bound process is freed.
2358  * The pricer should use this call to clean up its branch-and-bound data, which was allocated in PRICERINITSOL.
2359  *
2360  * @section PRICER_REMARKS Further remarks
2361  *
2362  * If you use your own branching rule (e.g., to branch on constraints), make sure that it is able to branch on \a "pseudo solutions".
2363  * Otherwise, SCIP will use its default branching rules, if necessary (which all branch on variables). This
2364  * could disturb the pricing problem or branching might not even be possible, e.g., if all variables created thus far have already been fixed.
2365  *
2366  * Note that if the original problem is a maximization problem, SCIP will transform the problem into a minimization
2367  * problem by multiplying the objective function by -1. The pricer has to take care of this by multiplying
2368  * the original objective function value of all variables created during the solving process by -1.
2369  *
2370  * In some cases, bounds on variables are implicitly enforced by constraints of the problem and the objective function.
2371  * Therefore, these bounds do not need to be added to the LP explicitly, which has the advantage that the pricing routine does not need to
2372  * care about the corresponding dual values.
2373  * We call these bounds lazy bounds, they may be set by SCIPchgVarLbLazy() and SCIPchgVarUbLazy() for upper or lower bounds, respectively.
2374  * If the lazy bound is tighter than the local bound, the corresponding bound is not put into the LP.
2375  * In diving mode, lazy bounds are explicitly put into the LP, because changing the objective (which is only possible in diving)
2376  * might reverse the implicitly given bounds. When diving is finished, the bounds are again removed from the LP.
2377  */
2378 
2379 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
2380 
2381 /**@page PRESOL How to add presolvers
2382  *
2383  * Presolvers are used to reduce the size of the model by removing irrelevant information like redundant constraints,
2384  * to strengthen the LP relaxation by exploiting integrality information, and to extract useful information in the
2385  * presolving step.
2386  * Constraint based presolving is done in the CONSPRESOL callback methods of the constraint handlers, see \ref CONSPRESOL.
2387  * Some propagation steps can already be applied in presolving via the PROPRESOL callback methods of propagators, see \ref PROPPRESOL.
2388  * The presolver plugins complement these by additional, usually optimality based, presolving reductions.
2389  * \n
2390  * A complete list of all presolvers contained in this release can be found \ref PRESOLVERS "here".
2391  *
2392  * We now explain how users can add their own presolvers.
2393  * Take the trivial presolver (src/scip/presol_trivial.c) as an example.
2394  * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjPresol wrapper
2395  * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_PRESOL... callback methods.
2396  *
2397  * Additional documentation for the callback methods of a presolver, in particular for their input parameters,
2398  * can be found in the file type_presol.h.
2399  *
2400  * Here is what you have to do to implement a presolver:
2401  * -# Copy the template files src/scip/presol_xyz.c and src/scip/presol_xyz.h into files named "presol_mypresolver.c"
2402  * and "presol_mypresolver.h".
2403  * \n
2404  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
2405  * -# Use SCIPincludePresolMypresolver() in order to include the presolver into your SCIP instance,
2406  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
2407  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mypresolver".
2408  * -# Adjust the properties of the presolver (see \ref PRESOL_PROPERTIES).
2409  * -# Define the presolver data (see \ref PRESOL_DATA). This is optional.
2410  * -# Implement the interface methods (see \ref PRESOL_INTERFACE).
2411  * -# Implement the fundamental callback methods (see \ref PRESOL_FUNDAMENTALCALLBACKS).
2412  * -# Implement the additional callback methods (see \ref PRESOL_ADDITIONALCALLBACKS). This is optional.
2413  *
2414  *
2415  * @section PRESOL_PROPERTIES Properties of a Presolver
2416  *
2417  * At the top of the new file "presol_mypresolver.c", you can find the presolver properties.
2418  * These are given as compiler defines.
2419  * In the C++ wrapper class, you have to provide the presolver properties by calling the constructor
2420  * of the abstract base class scip::ObjPresol from within your constructor.
2421  * The properties you have to set have the following meaning:
2422  *
2423  * \par PRESOL_NAME: the name of the presolver.
2424  * This name is used in the interactive shell to address the presolver.
2425  * Additionally, if you are searching for a presolver with SCIPfindPresol(), this name is looked up.
2426  * Names have to be <b>unique</b>: no two presolvers may have the same name.
2427  *
2428  * \par PRESOL_DESC: the description of the presolver.
2429  * This string is printed as a description of the presolver in the interactive shell.
2430  *
2431  * \par PRESOL_TIMING: the default timing of the presolver.
2432  * There are three presolving timings: FAST, MEDIUM, and EXHAUSTIVE.
2433  * Every presolving round starts with the FAST presolvers. MEDIUM presolvers are only called, if FAST presolvers did not find
2434  * enough reductions in this round so far, and EXHAUSTIVE presolving steps are only performed if all presolvers called before
2435  * in this round were unsuccessful.
2436  * Presolvers should be assigned a timing based on how expensive they are, e.g., presolvers that provide fast algorithms that
2437  * usually have a high impact (i.e., remove lots of variables or tighten bounds of many variables) should have a timing FAST.
2438  * If a presolver implements different algorithms of different complexity, it may also get multiple timings and check the timing
2439  * internally in the \ref PRESOLEXEC callback to decide which algorithms to run.
2440  *
2441  * \par PRESOL_PRIORITY: the priority of the presolver.
2442  * Within a presolving round, when calling all presolvers and presolving methods of propagators and constraint handlers
2443  * with a given timing, those are called in
2444  * a predefined order, which is given by the priorities of the presolvers and the check priorities of the
2445  * constraint handlers, see \ref CONS_PROPERTIES.
2446  * First, the presolvers with non-negative priority are called in the order of decreasing priority.
2447  * Next, the presolving methods of the different constraint handlers are called in the order of decreasing check
2448  * priority.
2449  * Finally, the presolvers with negative priority are called in the order of decreasing priority.
2450  * \n
2451  * Again, presolvers that provide fast algorithms that usually have a high impact (i.e., remove lots of variables or tighten
2452  * bounds of many variables) should have a high priority.
2453  * An easy way to list the timings and
2454  * priorities of all presolvers, propagators, and constraint handlers is to type "display presolvers", "display propagators",
2455  * and "display conshdlrs" in the interactive shell of SCIP.
2456  *
2457  * \par PRESOL_MAXROUNDS: the default maximal number of rounds the presolver participates in.
2458  * The presolving is conducted in rounds: the presolvers and presolving methods of the constraint handlers
2459  * are called iteratively until no more reductions have been found or some other abort criterion applies.
2460  * The "maxrounds" parameter of a presolver imposes a limit on the number of presolving rounds in which the
2461  * presolver is called. The PRESOL_MAXROUNDS property specifies the default value for this parameter.
2462  * A value of -1 represents an unlimited number of rounds.
2463  *
2464  *
2465  * @section PRESOL_DATA Presolver Data
2466  *
2467  * Below the header "Data structures" you can find a struct which is called "struct SCIP_PresolData".
2468  * In this data structure, you can store the data of your presolver. For example, you should store the adjustable parameters
2469  * of the presolver in this data structure.
2470  * If you are using C++, you can add presolver data as usual as object variables to your class.
2471  * \n
2472  * Defining presolver data is optional. You can leave this struct empty.
2473  *
2474  *
2475  * @section PRESOL_INTERFACE Interface Methods
2476  *
2477  * At the bottom of "presol_mypresolver.c", you can find the interface method SCIPincludePresolMypresolver(),
2478  * which also appears in "presol_mypresolver.h"
2479  * SCIPincludePresolMypresolver() is called by the user, if (s)he wants to include the presolver,
2480  * i.e., if (s)he wants to use the presolver in his/her application.
2481  *
2482  * This method only has to be adjusted slightly.
2483  * It is responsible for notifying SCIP of the presence of the presolver. For this, you can either call SCIPincludePresol(),
2484  * or SCIPincludePresolBasic() since SCIP version 3.0. In the latter variant, \ref PRESOL_ADDITIONALCALLBACKS "additional callbacks"
2485  * must be added via setter functions as, e.g., SCIPsetPresolCopy(). We recommend this latter variant because
2486  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
2487  * variant must be manually adjusted with every SCIP release containing new callbacks for presolvers in order to compile.
2488  *
2489  * If you are using presolver data, you have to allocate the memory for the data at this point.
2490  * You can do this by calling:
2491  * \code
2492  * SCIP_CALL( SCIPallocBlockMemory(scip, &presoldata) );
2493  * \endcode
2494  * You also have to initialize the fields in struct SCIP_PresolData afterwards. For freeing the
2495  * presolver data, see \ref PRESOLFREE.
2496  *
2497  * You may also add user parameters for your presolver, see \ref PARAM for how to add user parameters and
2498  * the method SCIPincludePresolTrivial() in src/scip/presol_trivial.c for an example.
2499  *
2500  *
2501  * @section PRESOL_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Presolver
2502  *
2503  * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
2504  * an operational algorithm.
2505  * They are passed together with the presolver itself to SCIP using SCIPincludePresol() or SCIPincludePresolBasic(),
2506  * see @ref PRESOL_INTERFACE.
2507  *
2508  * Presolver plugins have only one fundamental callback method, namely the @ref PRESOLEXEC method.
2509  * This method has to be implemented for every presolver; the other callback methods are optional.
2510  * In the C++ wrapper class scip::ObjPresol, the scip_exec() method (which corresponds to the PRESOLEXEC callback) is a virtual
2511  * abstract member function.
2512  * You have to implement it in order to be able to construct an object of your presolver class.
2513  *
2514  * Additional documentation for the callback methods, in particular to their input parameters,
2515  * can be found in type_presol.h.
2516  *
2517  * @subsection PRESOLEXEC
2518  *
2519  * The PRESOLEXEC callback is called inside the presolving loop and should perform the actual presolving reductions.
2520  * It should inspect the problem instance at hand and simplify it by tightening bounds of variables, aggregating or fixing
2521  * variables, changing the type of variables, modifying the graph that represents the instance of your application, and
2522  * the like.
2523  *
2524  * Typical methods called by a presolver are, for example, SCIPchgVarType(), SCIPfixVar(), SCIPaggregateVars(), SCIPtightenVarLb(),
2525  * and SCIPtightenVarUb().
2526  *
2527  *
2528  * @section PRESOL_ADDITIONALCALLBACKS Additional Callback Methods of a Presolver
2529  *
2530  * The additional callback methods do not need to be implemented in every case. However, some of them have to be
2531  * implemented for most applications, they can be used, for example, to initialize and free private data.
2532  * Additional callbacks can either be passed directly with SCIPincludePresol() to SCIP or via specific
2533  * <b>setter functions</b> after a call of SCIPincludePresolBasic(), see also @ref PRESOL_INTERFACE.
2534  *
2535  * @subsection PRESOLFREE
2536  *
2537  * If you are using presolver data (see \ref PRESOL_DATA and \ref PRESOL_INTERFACE), you have to implement this method in order to free the presolver data.
2538  * This can be done by the following procedure:
2539  *
2540  * @refsnippet{src/scip/presol_boundshift.c,SnippetPresolFreeBoundshift}
2541  *
2542  * If you have allocated memory for fields in your presolver data, remember to free this memory
2543  * before freeing the presolver data itself.
2544  * If you are using the C++ wrapper class, this method is not available.
2545  * Instead, just use the destructor of your class to free the member variables of your class.
2546  *
2547  * @subsection PRESOLINIT
2548  *
2549  * The PRESOLINIT callback is executed after the problem is transformed.
2550  * The presolver may, e.g., use this call to initialize its presolver data.
2551  * The difference between the original and the transformed problem is explained in
2552  * "What is this thing with the original and the transformed problem about?" on \ref FAQ.
2553  *
2554  * @subsection PRESOLCOPY
2555  *
2556  * The PRESOLCOPY callback is executed when a SCIP instance is copied, e.g. to
2557  * solve a sub-SCIP. By
2558  * defining this callback as
2559  * <code>NULL</code> the user disables the execution of the specified
2560  * presolver for all copied SCIP instances. This may deteriorate the performance
2561  * of primal heuristics using sub-SCIPs.
2562  *
2563  * @subsection PRESOLEXIT
2564  *
2565  * The PRESOLEXIT callback is executed before the transformed problem is freed.
2566  * In this method, the presolver should free all resources that have been allocated for the solving process in PRESOLINIT.
2567  *
2568  * @subsection PRESOLINITPRE
2569  *
2570  * The PRESOLINITPRE callback is executed when the presolving is about to begin.
2571  * The presolver may use this call to initialize its presolving data which only need to exist during the presolving stage.
2572  *
2573  * @subsection PRESOLEXITPRE
2574  *
2575  * The PRESOLEXITPRE callback is executed after presolving finishes and before the branch-and-bound process begins.
2576  * The presolver should use this call to clean up its presolving data, which was allocated in PRESOLINITPRE.
2577  */
2578 
2579 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
2580 
2581 /**@page SEPA How to add separators
2582  *
2583  * Separators are used to generate general purpose cutting planes.
2584  * Constraint based cutting planes, the second type of cutting planes in SCIP, are separated in the CONSSEPALP and
2585  * CONSSEPASOL callback methods of the constraint handlers, see \ref CONSSEPALP and \ref CONSSEPASOL. These cuts are
2586  * valid inequalities or even facets of the polyhedron described by a single constraint or a subset of the constraints of
2587  * a single constraint class. In contrast, general purpose cuts do not require or exploit any knowledge about the
2588  * underlying problem structure but use only the current LP relaxation and the integrality conditions. See also
2589  * "When should I implement a constraint handler, when should I implement a separator?" on \ref FAQ.
2590  * \n
2591  * A complete list of all separators contained in this release can be found \ref SEPARATORS "here".
2592  *
2593  * We now explain how users can add their own separators.
2594  * Take the separator for the class of Gomory mixed integer inequalities (src/scip/sepa_gomory.c) as an example.
2595  * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjSepa wrapper
2596  * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_SEPA... callback methods.
2597  *
2598  * Additional documentation for the callback methods of a separator, in particular for the input parameters,
2599  * can be found in the file type_sepa.h.
2600  *
2601  * Here is what you have to do to implement a separator:
2602  * -# Copy the template files src/scip/sepa_xyz.c and src/scip/sepa_xyz.h into files "sepa_myseparator.c"
2603  * and "sepa_myseparator.h".
2604  \n
2605  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
2606  * -# Use SCIPincludeSepaMyseparator() in order to include the separator into your SCIP instance,
2607  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
2608  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "myseparator".
2609  * -# Adjust the properties of the separator (see \ref SEPA_PROPERTIES).
2610  * -# Define the separator data (see \ref SEPA_DATA). This is optional.
2611  * -# Implement the interface methods (see \ref SEPA_INTERFACE).
2612  * -# Implement the fundamental callback methods (see \ref SEPA_FUNDAMENTALCALLBACKS).
2613  * -# Implement the additional callback methods (see \ref SEPA_ADDITIONALCALLBACKS). This is optional.
2614  *
2615  *
2616  * @section SEPA_PROPERTIES Properties of a Separator
2617  *
2618  * At the top of the new file "sepa_myseparator.c", you can find the separator properties.
2619  * These are given as compiler defines.
2620  * In the C++ wrapper class, you have to provide the separator properties by calling the constructor
2621  * of the abstract base class scip::ObjSepa from within your constructor.
2622  * The properties you have to set have the following meaning:
2623  *
2624  * \par SEPA_NAME: the name of the separator.
2625  * This name is used in the interactive shell to address the separator.
2626  * Additionally, if you are searching for a separator with SCIPfindSepa(), this name is looked up.
2627  * Names have to be unique: no two separators may have the same name.
2628  *
2629  * \par SEPA_DESC: the description of the separator.
2630  * This string is printed as a description of the separator in the interactive shell.
2631  *
2632  * \par SEPA_PRIORITY: the priority of the separator.
2633  * In each separation round during the price-and-cut loop of the subproblem processing or the separation loop
2634  * of the primal solution separation, the separators and separation methods of the constraint handlers are called in
2635  * a predefined order, which is given by the priorities of the separators and the separation priorities
2636  * of the constraint handlers (see \ref CONS_PROPERTIES).
2637  * First, the separators with non-negative priority are called in the order of decreasing priority.
2638  * Next, the separation methods of the constraint handlers are called in the order of decreasing separation
2639  * priority.
2640  * Finally, the separators with negative priority are called in the order of decreasing priority. An easy way to list the
2641  * priorities of all separators and constraint handlers is to type "display separators" and "display conshdlrs" in
2642  * the interactive shell.
2643  * \n
2644  * The priority of the separator should be set according to the complexity of the cut separation algorithm and the
2645  * impact of the resulting cuts: separators that provide fast algorithms that usually have a high impact (i.e., cut off
2646  * a large portion of the LP relaxation) should have a high priority.
2647  * See \ref SEPAEXECLP and \ref SEPAEXECSOL for further details of the separation callbacks.
2648  *
2649  * \par SEPA_FREQ: the default frequency for separating cuts.
2650  * The frequency defines the depth levels at which the separation methods \ref SEPAEXECLP and \ref SEPAEXECSOL are called.
2651  * For example, a frequency of 7 means, that the separation callback is executed for subproblems that are in depth
2652  * 0, 7, 14, ... of the branching tree. A frequency of 0 means, that the separation method is only called at the root node.
2653  * A frequency of -1 disables the separator.
2654  * \n
2655  * The frequency can be adjusted by the user. This property of the separator only defines the default value of the frequency.
2656  * If you want to have a more flexible control of when to execute the separation algorithm, you have to assign
2657  * a frequency of 1 and implement a check at the beginning of your separation methods whether you really want to execute
2658  * the separation or not. If you do not want to execute it, set the result code of
2659  * \ref SEPAEXECLP and \ref SEPAEXECSOL to SCIP_DIDNOTRUN.
2660  *
2661  * \par SEPA_MAXBOUNDDIST: the default maximal relative distance from the current node's dual bound to primal bound compared to best node's dual bound for applying separation.
2662  * At the current branch-and-bound node, the relative distance from its dual bound (local dual bound)
2663  * to the primal bound compared to the best node's dual bound (global dual bound) is considered. The separation method
2664  * of the separator will only be applied at the current node if this relative distance does not exceed SEPA_MAXBOUNDDIST.
2665  * \n
2666  * For example, if the global dual bound is 50 and the primal bound is 60, SEPA_MAXBOUNDDIST = 0.25 means that separation
2667  * is only applied if the current node's dual bound is in the first quarter of the interval [50,60], i.e., if it is less
2668  * than or equal to 52.5.
2669  * \n
2670  * In particular, the values 0.0 and 1.0 mean that separation is applied at the current best node only or at all
2671  * nodes, respectively. Since separation seems to be most important to apply at nodes that define to the global
2672  * dual bound, 0.0 is probably a good choice for SEPA_MAXBOUNDDIST.
2673  * Note that separators with a frequency of SEPA_FREQ = 0 are only applied at the root node.
2674  * Obviously, at the root node the local dual bound is equal to the global dual bound and thus, the separator is called
2675  * for any value of SEPA_MAXBOUNDDIST.
2676  *
2677  * \par SEPA_USESSUBSCIP: Does the separator use a secondary SCIP instance?
2678  * Some heuristics and separators solve MIPs or SAT problems and use a secondary SCIP instance. Examples are
2679  * Large Neighborhood Search heuristics such as RINS and Local Branching or the CGMIP separator. To avoid recursion,
2680  * these plugins usually deactivate all other plugins that solve MIPs. If a separator uses a secondary SCIP instance,
2681  * this parameter has to be TRUE and it is recommended to call SCIPsetSubscipsOff() for the secondary SCIP instance.
2682  *
2683  * \par SEPA_DELAY: the default for whether the separation method should be delayed, if other separators or constraint handlers found cuts.
2684  * If the separator's separation method is marked to be delayed, it is only executed after no other separator
2685  * or constraint handler found a cut during the price-and-cut loop.
2686  * If the separation method of the separator is very expensive, you may want to mark it to be delayed until all cheap
2687  * separation methods have been executed.
2688  *
2689  * @section SEPA_DATA Separator Data
2690  *
2691  * Below the header "Data structures" you can find a struct which is called "struct SCIP_SepaData".
2692  * In this data structure, you can store the data of your separator. For example, you should store the adjustable
2693  * parameters of the separator in this data structure. In a separator, user parameters for the maximal number of
2694  * separation rounds per node and for the maximal number of cuts separated per separation round might be useful.
2695  * If you are using C++, you can add separator data as usual as object variables to your class.
2696  * \n
2697  * Defining separator data is optional. You can leave the struct empty.
2698  *
2699  * @section SEPA_INTERFACE Interface Methods
2700  *
2701  * At the bottom of "sepa_myseparator.c", you can find the interface method SCIPincludeSepaMyseparator(),
2702  * which also appears in "sepa_myseparator.h"
2703  * SCIPincludeSepaMyseparator() is called by the user, if (s)he wants to include the separator,
2704  * i.e., if (s)he wants to use the separator in his/her application.
2705  *
2706  * This method only has to be adjusted slightly.
2707  * It is responsible for notifying SCIP of the presence of the separator. For this, you can either call SCIPincludeSepa(),
2708  * or SCIPincludeSepaBasic() since SCIP version 3.0. In the latter variant, \ref SEPA_ADDITIONALCALLBACKS "additional callbacks"
2709  * must be added via setter functions as, e.g., SCIPsetSepaCopy(). We recommend this latter variant because
2710  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
2711  * variant must be manually adjusted with every SCIP release containing new callbacks for separators in order to compile.
2712  *
2713  * If you are using separator data, you have to allocate the memory
2714  * for the data at this point. You can do this by calling:
2715  * \code
2716  * SCIP_CALL( SCIPallocBlockMemory(scip, &sepadata) );
2717  * \endcode
2718  * You also have to initialize the fields in "struct SCIP_SepaData" afterwards. For freeing the
2719  * separator data, see \ref SEPAFREE.
2720  *
2721  * You may also add user parameters for your separator, see \ref PARAM for how to add user parameters and
2722  * the method SCIPincludeSepaGomory() in src/scip/sepa_gomory.c for an example.
2723  *
2724  *
2725  * @section SEPA_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Separator
2726  *
2727  * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
2728  * an operational algorithm.
2729  * They are passed together with the separator itself to SCIP using SCIPincludeSepa() or SCIPincludeSepaBasic(),
2730  * see @ref SEPA_INTERFACE.
2731  *
2732  * Separator plugins have two callbacks, @ref SEPAEXECLP and @ref SEPAEXECSOL, of which at least one must be implemented.
2733  *
2734  * Additional documentation for the callback methods, in particular to their input parameters,
2735  * can be found in type_sepa.h.
2736  *
2737  * @subsection SEPAEXECLP
2738  *
2739  * The SEPAEXECLP callback is executed during the price-and-cut loop of the subproblem processing.
2740  * It should try to generate general purpose cutting planes in order to separate the current LP solution.
2741  * The method is called in the LP solution loop, which means that a valid LP solution exists.
2742  *
2743  * Usually, the callback searches and produces cuts, that are added with a call to SCIPaddCut().
2744  * If the cut should be added to the global cut pool, it calls SCIPaddPoolCut().
2745  * In addition to LP rows, the callback may also produce domain reductions or add additional constraints.
2746  *
2747  * Overall, the SEPAEXECLP callback has the following options, which is indicated by the possible return values of
2748  * the 'result' variable (see type_sepa.h):
2749  * - detecting that the node is infeasible in the variable's bounds and can be cut off (result SCIP_CUTOFF)
2750  * - adding an additional constraint (result SCIP_CONSADDED)
2751  * - reducing a variable's domain (result SCIP_REDUCEDDOM)
2752  * - adding a cutting plane to the LP (result SCIP_SEPARATED)
2753  * - stating that the separator searched, but did not find domain reductions, cutting planes, or cut constraints
2754  * (result SCIP_DIDNOTFIND)
2755  * - stating that the separator was skipped (result SCIP_DIDNOTRUN)
2756  * - stating that the separator was skipped, but should be called again (result SCIP_DELAYED)
2757  * - stating that a new separation round should be started without calling the remaining separator methods (result SCIP_NEWROUND)
2758  *
2759  * @subsection SEPAEXECSOL
2760  *
2761  * The SEPAEXECSOL callback is executed during the separation loop on arbitrary primal solutions.
2762  * It should try to generate general purpose cutting planes in order to separate the given primal solution.
2763  * The method is not called in the LP solution loop, which means that there is no valid LP solution.
2764  *
2765  * In the standard SCIP environment, the SEPAEXECSOL callback is not used because only LP solutions are
2766  * separated. The SEPAEXECSOL callback provides means to support external relaxation handlers like semidefinite
2767  * relaxations that want to separate an intermediate primal solution vector. Thus, if you do not want to support
2768  * such external plugins, you do not need to implement this callback method.
2769  *
2770  * Usually, the callback searches and produces cuts, that are added with a call to SCIPaddCut().
2771  * If the cut should be added to the global cut pool, it calls SCIPaddPoolCut().
2772  * In addition to LP rows, the callback may also produce domain reductions or add other constraints.
2773  *
2774  * Overall, the SEPAEXECSOL callback has the following options, which is indicated by the possible return values of
2775  * the 'result' variable (see type_sepa.h):
2776  * - detecting that the node is infeasible in the variable's bounds and can be cut off (result SCIP_CUTOFF)
2777  * - adding an additional constraint (result SCIP_CONSADDED)
2778  * - reducing a variable's domain (result SCIP_REDUCEDDOM)
2779  * - adding a cutting plane to the LP (result SCIP_SEPARATED)
2780  * - stating that the separator searched, but did not find domain reductions, cutting planes, or cut constraints
2781  * (result SCIP_DIDNOTFIND)
2782  * - stating that the separator was skipped (result SCIP_DIDNOTRUN)
2783  * - stating that the separator was skipped, but should be called again (result SCIP_DELAYED)
2784  * - stating that a new separation round should be started without calling the remaining separator methods (result SCIP_NEWROUND)
2785  *
2786  *
2787  * @section SEPA_ADDITIONALCALLBACKS Additional Callback Methods of a Separator
2788  *
2789  * The additional callback methods do not need to be implemented in every case. However, some of them have to be
2790  * implemented for most applications, they can be used, for example, to initialize and free private data.
2791  * Additional callbacks can either be passed directly with SCIPincludeSepa() to SCIP or via specific
2792  * <b>setter functions</b> after a call of SCIPincludeSepaBasic(), see also @ref SEPA_INTERFACE.
2793  *
2794  * @subsection SEPAFREE
2795  *
2796  * If you are using separator data (see \ref SEPA_DATA and \ref SEPA_INTERFACE), you have to implement this method
2797  * in order to free the separator data. This can be done by the following procedure:
2798  *
2799  * @refsnippet{src/scip/sepa_gomory.c,SnippetSepaFreeGomory}
2800  *
2801  * If you have allocated memory for fields in your separator data, remember to free this memory
2802  * before freeing the separator data itself.
2803  * If you are using the C++ wrapper class, this method is not available.
2804  * Instead, just use the destructor of your class to free the member variables of your class.
2805  *
2806  * @subsection SEPACOPY
2807  *
2808  * The SEPACOPY callback is executed when a SCIP instance is copied, e.g. to
2809  * solve a sub-SCIP. By
2810  * defining this callback as
2811  * <code>NULL</code> the user disables the execution of the specified
2812  * separator for all copied SCIP instances. This may deteriorate the performance
2813  * of primal heuristics using sub-SCIPs.
2814  *
2815  * @subsection SEPAINIT
2816  *
2817  * The SEPAINIT callback is executed after the problem is transformed.
2818  * The separator may, e.g., use this call to initialize its separator data.
2819  * The difference between the original and the transformed problem is explained in
2820  * "What is this thing with the original and the transformed problem about?" on \ref FAQ.
2821  *
2822  * @subsection SEPAEXIT
2823  *
2824  * The SEPAEXIT callback is executed before the transformed problem is freed.
2825  * In this method, the separator should free all resources that have been allocated for the solving process in SEPAINIT.
2826  *
2827  * @subsection SEPAINITSOL
2828  *
2829  * The SEPAINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
2830  * begin. The separator may use this call to initialize its branch-and-bound specific data.
2831  *
2832  * @subsection SEPAEXITSOL
2833  *
2834  * The SEPAEXITSOL callback is executed before the branch-and-bound process is freed. The separator should use this call
2835  * to clean up its branch-and-bound data, in particular to release all LP rows that it has created or captured.
2836  */
2837 
2838 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
2839 
2840 /**@page PROP How to add propagators
2841  *
2842  * Propagators are used to tighten the domains of the variables. Like for cutting planes, there are two different types
2843  * of domain propagations. Constraint based (primal) domain propagation algorithms are part of the corresponding
2844  * constraint handlers, see \ref CONSPROP. In contrast, domain propagators usually provide dual propagations, i.e.,
2845  * propagations that can be applied using the objective function and the current best known primal solution. This
2846  * section deals with such propagators.
2847  *
2848  * A complete list of all propagators contained in this release can be found \ref PROPAGATORS "here".
2849  *
2850  * We now explain how users can add their own propagators. Take the pseudo objective function propagator
2851  * (src/scip/prop_pseudoobj.c) as an example. As all other default plugins, it is written in C. C++ users can easily
2852  * adapt the code by using the scip::ObjProp wrapper base class and implement the @c scip_...() virtual methods instead
2853  * of the @c SCIP_DECL_PROP... callback methods.
2854  *
2855  * Additional documentation for the callback methods of a propagator can be found in the file type_prop.h.
2856  *
2857  * Here is what you have to do to implement a propagator:
2858  * -# Copy the template files src/scip/prop_xyz.c and src/scip/prop_xyz.h into files named "prop_mypropagator.c"
2859  * and "prop_mypropagator.h".
2860  * \n
2861  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
2862  * -# Use SCIPincludePropMypropagator() in order to include the propagator into your SCIP instance,
2863  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
2864  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mypropagator".
2865  * -# Adjust the properties of the propagator (see \ref PROP_PROPERTIES).
2866  * -# Define the propagator data (see \ref PROP_DATA). This is optional.
2867  * -# Implement the interface methods (see \ref PROP_INTERFACE).
2868  * -# Implement the fundamental callback methods (see \ref PROP_FUNDAMENTALCALLBACKS).
2869  * -# Implement the additional callback methods (see \ref PROP_ADDITIONALCALLBACKS). This is optional.
2870  *
2871  * @section PROP_PROPERTIES Properties of a Propagator
2872  *
2873  * At the top of the new file "prop_mypropagator.c" you can find the propagator properties. These are given as compiler
2874  * defines. The presolving-related properties are optional,
2875  * they only have to be defined if the propagator supports presolving routines.
2876  * In the C++ wrapper class, you have to provide the propagator properties by calling the constructor of the
2877  * abstract base class scip::ObjProp from within your constructor. The properties you have the following meaning:
2878  *
2879  * @subsection PROP_FUNDAMENTALPROPERTIES Fundamental properties of a propagator
2880  *
2881  * \par PROP_NAME: the name of the propagator.
2882  * This name is used in the interactive shell to address the propagator. Additionally, if you are searching for a
2883  * propagator with SCIPfindProp(), this name is searched for. Names have to be unique: no two propagators may have the
2884  * same name.
2885  *
2886  * \par PROP_DESC: the description of the propagator.
2887  * This string is printed as a description of the propagator in the interactive shell.
2888  *
2889  * \par PROP_PRIORITY: the priority of the propagator.
2890  * In each propagation round, the propagators and propagation methods of the constraint handlers are called in a
2891  * predefined order, which is given by the priorities of the propagators and the check priorities of the constraint
2892  * handlers. First, the propagators with non-negative priority are called in order of decreasing priority. Next, the
2893  * propagation methods of the different constraint handlers are called in order of decreasing check priority. Finally,
2894  * the propagators with negative priority are called in order of decreasing priority. \n The priority of the
2895  * propagators should be set according to the complexity of the propagation algorithm and the impact of the domain
2896  * propagations: propagators providing fast algorithms that usually have a high impact (i.e., tighten many bounds)
2897  * should have a high priority.
2898  *
2899  * \par PROP_FREQ: the default frequency for propagating domains.
2900  * The frequency defines the depth levels at which the propagation method \ref PROPEXEC is called. For example, a
2901  * frequency of 7 means, that the propagation callback is executed for subproblems that are in depth 0, 7, 14, ... of
2902  * the branching tree. A frequency of 0 means that propagation is only applied in preprocessing and at the root node. A
2903  * frequency of -1 disables the propagator.
2904  * \n
2905  * The frequency can be adjusted by the user. This property of the propagator only defines the default value of the
2906  * frequency.\n
2907  * <b>Note:</b> If you want to have a more flexible control of when to execute the propagation algorithm, you have to
2908  * assign a frequency of 1 and implement a check at the beginning of your propagation algorithm whether you really want
2909  * to execute the domain propagation or not. If you do not want to execute it, set the result code to SCIP_DIDNOTRUN.
2910  *
2911  * \par PROP_DELAY: the default for whether the propagation method should be delayed, if other propagators or constraint handlers found domain reductions.
2912  * If the propagator's propagation method is marked to be delayed, it is only executed after no other propagator or
2913  * constraint handler found a domain reduction in the current iteration of the domain propagation loop. If the
2914  * propagation method of the propagator is very expensive, you may want to mark it to be delayed until all cheap
2915  * propagation methods have been executed.
2916  *
2917  * \par PROP_TIMING: the timing mask of the propagator.
2918  * SCIP calls the domain propagation routines at different places in the node processing loop.
2919  * This property indicates at which places the propagator is called.
2920  * Possible values are defined in type_timing.h and can be concatenated, e.g., as in SCIP_PROPTIMING_ALWAYS.
2921  *
2922  * @subsection PROP_ADDITIONALPROPERTIES Optional propagator properties
2923  *
2924  * The following properties are optional and only need to be defined if the propagator supports
2925  * presolving, that is, if the \ref PROPPRESOL "presolving callback" is implemented.
2926 
2927  * \par PROP_PRESOLTIMING: the timing of the presolving method (FAST, MEDIUM, or EXHAUSTIVE).
2928  * Every presolving round starts with the FAST presolving methods. MEDIUM presolvers are only called, if FAST presolvers did not find
2929  * enough reductions in this round so far, and EXHAUSTIVE presolving steps are only performed if all presolvers called before
2930  * in this round were unsuccessful.
2931  * Presolving methods should be assigned a timing based on how expensive they are, e.g., presolvers that provide fast algorithms that
2932  * usually have a high impact (i.e., remove lots of variables or tighten bounds of many variables) should have a timing FAST.
2933  * If a presolving method implements different algorithms of different complexity, it may also get multiple timings and check the timing
2934  * internally in the \ref PROPPRESOL callback to decide which algorithms to run.
2935  *
2936  * \par PROP_PRESOL_PRIORITY: the priority of the presolving method.
2937  * This attribute is analogous to the PROP_PRIORITY flag, but deals with the preprocessing method of the presolver.
2938  *
2939  * \par PROP_PRESOL_MAXROUNDS: the default maximal number of presolving rounds the propagator participates in.
2940  * The preprocessing is executed in rounds.
2941  * If enough changes have been applied to the model, an additional preprocessing round is performed.
2942  * The MAXROUNDS parameter of a propagator denotes the maximal number of preprocessing rounds, the propagator
2943  * participates in.
2944  * A value of -1 means, that there is no limit on the number of rounds.
2945  * A value of 0 means, the preprocessing callback of the propagator is disabled.
2946  *
2947  * @section PROP_DATA Propagator Data
2948  *
2949  * Below the title "Data structures" you can find a struct called <code>struct SCIP_PropData</code>. In this data
2950  * structure, you can store the data of your propagator. For example, you should store the adjustable parameters of the
2951  * propagator in this data structure. If you are using C++, you can add propagator data as object variables to your
2952  * class as usual .
2953  * \n
2954  * Defining propagator data is optional. You can leave the struct empty.
2955  *
2956  *
2957  * @section PROP_INTERFACE Interface Methods
2958  *
2959  * At the bottom of "prop_mypropagator.c", you can find the interface method SCIPincludeSepaMypropagator(),
2960  * which also appears in "prop_mypropagator.h"
2961  * SCIPincludePropMypropagator() is called by the user, if (s)he wants to include the propagator,
2962  * i.e., if (s)he wants to use the propagator in his/her application.
2963  *
2964  * This method only has to be adjusted slightly.
2965  * It is responsible for notifying SCIP of the presence of the propagator. For this, you can either call SCIPincludeProp(),
2966  * or SCIPincludePropBasic() since SCIP version 3.0. In the latter variant, \ref PROP_ADDITIONALCALLBACKS "additional callbacks"
2967  * must be added via setter functions as, e.g., SCIPsetPropCopy(). We recommend this latter variant because
2968  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
2969  * variant must be manually adjusted with every SCIP release containing new callbacks for separators in order to compile.
2970  *
2971  *
2972  * If you are using propagator data, you have to allocate the memory for the data at this point. You can do this by
2973  * calling
2974  * \code
2975  * SCIP_CALL( SCIPallocBlockMemory(scip, &propdata) );
2976  * \endcode
2977  * You also have to initialize the fields in <code>struct SCIP_PropData</code> afterwards.
2978  *
2979  * You may also add user parameters for your propagator, see the method SCIPincludePropPseudoobj() in
2980  * src/scip/prop_pseudoobj.c for an example.
2981  *
2982  *
2983  * @section PROP_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Propagator
2984  *
2985  * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
2986  * an operational algorithm.
2987  * They are passed together with the propagator itself to SCIP using SCIPincludeProp() or SCIPincludePropBasic(),
2988  * see @ref PROP_INTERFACE.
2989  *
2990  * Propagator plugins have one fundamental callback method, namely the \ref PROPEXEC method
2991  * method. This method has to be implemented for every propagator; the other callback methods are optional. In the
2992  * C++ wrapper class scip::ObjProp, the scip_exec() method (which corresponds to the \ref PROPEXEC
2993  * callback) is a virtual abstract member function. You have to
2994  * implement it in order to be able to construct an object of your propagator class.
2995  *
2996  * Additional documentation for the callback methods can be found in type_prop.h.
2997  *
2998  * @subsection PROPEXEC
2999  *
3000  * The PROPEXEC callback is called during presolving and during the subproblem processing. It should perform the actual
3001  * domain propagation, which means that it should tighten the variables' bounds. The technique of domain propagation,
3002  * which is the main workhorse of constraint programming, is called "node preprocessing" in the Integer Programming
3003  * community.
3004  *
3005  * The PROPEXEC callback has the following options:
3006  * - detecting that the node is infeasible in the variables' bounds and can be cut off (result SCIP_CUTOFF)
3007  * - reducing (i.e, tightening) the domains of some variables (result SCIP_REDUCEDDOM)
3008  * - stating that the propagator searched, but did not find domain reductions, cutting planes, or cut constraints
3009  * (result SCIP_DIDNOTFIND)
3010  * - stating that the propagator was skipped (result SCIP_DIDNOTRUN)
3011  * - stating that the propagator was skipped, but should be called again (result SCIP_DELAYED)
3012  *
3013  *
3014  *
3015  * @section PROP_ADDITIONALCALLBACKS Additional Callback Methods of a Propagator
3016  *
3017  * The additional callback methods do not need to be implemented in every case. However, some of them have to be
3018  * implemented for most applications, they can be used, for example, to initialize and free private data.
3019  * Additional callbacks can either be passed directly with SCIPincludeProp() to SCIP or via specific
3020  * <b>setter functions</b> after a call of SCIPincludePropBasic(), see also @ref PROP_INTERFACE.
3021  *
3022  * @subsection PROPRESPROP
3023  *
3024  * If the propagator wants to support \ref CONF "conflict analysis", it has to supply the PROPRESPROP method. It also should call
3025  * SCIPinferVarLbProp() or SCIPinferVarUbProp() in the domain propagation instead of SCIPchgVarLb() or SCIPchgVarUb() in
3026  * order to deduce bound changes on variables. In the SCIPinferVarLbProp() and SCIPinferVarUbProp() calls, the
3027  * propagator provides a pointer to itself and an integer value "inferinfo" that can be arbitrarily chosen.
3028  *
3029  * The propagation conflict resolving method PROPRESPROP must then be implemented to provide the "reasons" for the bound
3030  * changes, i.e., the bounds of variables at the time of the propagation, which forced the propagator to set the
3031  * conflict variable's bound to its current value. It can use the "inferinfo" tag to identify its own propagation rule
3032  * and thus identify the "reason" bounds. The bounds that form the reason of the assignment must then be provided by
3033  * calls to SCIPaddConflictLb() and SCIPaddConflictUb() in the propagation conflict resolving method.
3034  *
3035  * See the description of the propagation conflict resolving method \ref CONSRESPROP of constraint handlers for
3036  * further details.
3037  *
3038  * Omitting the PROPRESPROP callback circumvents the implementation of the usually rather complex conflict resolving method.
3039  * Yet, it
3040  * will make the conflict analysis less effective. We suggest to first omit the conflict resolving method and check how
3041  * effective the propagation method is. If it produces a lot of propagations for your application, you definitely should
3042  * consider implementing the conflict resolving method.
3043  *
3044  *
3045  * @subsection PROPFREE
3046  *
3047  * If you are using propagator data, you have to implement this method in order to free the propagator data.
3048  * This can be done by the following procedure:
3049  *
3050  * @refsnippet{src/scip/prop_redcost.c,SnippetPropFreeRedcost}
3051  *
3052  * If you have allocated memory for fields in your propagator data, remember to free this memory
3053  * before freeing the propagator data itself.
3054  * If you are using the C++ wrapper class, this method is not available.
3055  * Instead, just use the destructor of your class to free the member variables of your class.
3056  *
3057  * @subsection PROPINIT
3058  *
3059  * The PROPINIT callback is executed after the problem is transformed. The propagator may, e.g., use this call to
3060  * initialize its propagator data.
3061  *
3062  * @subsection PROPCOPY
3063  *
3064  * The PROPCOPY callback is executed when a SCIP instance is copied, e.g. to
3065  * solve a sub-SCIP. By
3066  * defining this callback as
3067  * <code>NULL</code> the user disables the execution of the specified
3068  * propagator for all copied SCIP instances. This may deteriorate the performance
3069  * of primal heuristics using sub-SCIPs.
3070  *
3071  * @subsection PROPEXIT
3072  *
3073  * The PROPEXIT callback is executed before the transformed problem is freed.
3074  * In this method, the propagator should free all resources that have been allocated for the solving process in PROPINIT.
3075  *
3076  * @subsection PROPINITPRE
3077  *
3078  * The PROPINITPRE callback is executed before the preprocessing is started, even if presolving is turned off.
3079  * The propagator may use this call to initialize its presolving data before the presolving process begins.
3080  *
3081  * @subsection PROPEXITPRE
3082  *
3083  * The PROPEXITPRE callback is executed after the preprocessing has been finished, even if presolving is turned off.
3084  * The propagator may use this call, e.g., to clean up its presolving data.
3085  * Besides clean up, no time consuming operations should be done.
3086  *
3087  * @subsection PROPINITSOL
3088  *
3089  * The PROPINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
3090  * begin.
3091  * The propagator may use this call to initialize its branch-and-bound specific data.
3092  *
3093  * @subsection PROPEXITSOL
3094  *
3095  * The PROPEXITSOL callback is executed before the branch-and-bound process is freed.
3096  * The propagator should use this call to clean up its branch-and-bound data.
3097  *
3098  * @subsection PROPPRESOL
3099  *
3100  * Seaches for domain propagations, analogous to the \ref PROPEXEC callback.
3101  * However, this callback is called during preprocessing.
3102  *
3103  * To inform SCIP that the presolving method found a reduction the result pointer has to be set in a proper way.
3104  * The following options are possible:
3105  *
3106  * - SCIP_UNBOUNDED : at least one variable is not bounded by any constraint in objective direction
3107  * - SCIP_CUTOFF : at least one domain reduction that renders the problem infeasible has been found
3108  * - SCIP_SUCCESS : the presolver found a domain reduction
3109  * - SCIP_DIDNOTFIND : the presolver searched, but did not find a presolving change
3110  * - SCIP_DIDNOTRUN : the presolver was skipped
3111  * - SCIP_DELAYED : the presolver was skipped, but should be called again
3112  *
3113  *
3114  * Please see also the @ref PROP_ADDITIONALPROPERTIES section to learn about the properties
3115  * PROP_PRESOLTIMING and PROP_PRESOL_MAXROUNDS, which influence the behaviour of SCIP
3116  * calling PROPPRESOL.
3117  *
3118  */
3119 
3120 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
3121 
3122 /**@page BRANCH How to add branching rules
3123  *
3124  * Branching rules are used to split the problem at the current node into smaller subproblems. Branching rules can be called at three
3125  * different occasions, which is why they have three different execution methods (see \ref
3126  * BRANCHRULE_ADDITIONALCALLBACKS). Branching is performed if:
3127  * - the LP solution of the current problem is fractional. In this case, the integrality constraint handler calls the
3128  * \ref BRANCHEXECLP methods of the branching rules.
3129  * - the list of external branching candidates is not empty. This will only be the case if branching candidates were added
3130  * by a user's \ref RELAX "relaxation handler" or \ref CONS "constraint handler" plugin, calling SCIPaddExternBranchCand().
3131  * These branching candidates should be processed by the \ref BRANCHEXECEXT method.
3132  * - if an integral solution violates one or more constraints and this infeasibility could not be resolved in the callback methods
3133  * \ref CONSENFOLP and \ref CONSENFOPS of the corresponding constraint handlers. In this case, the \ref BRANCHEXECPS method will be called. This is the
3134  * standard case, if you use SCIP as a pure CP or SAT solver. If the LP or any other type of relaxation is used, then
3135  * branching on pseudo solutions works as a last resort.
3136  *
3137  * The idea of branching rules is to take a global view on the problem. In contrast, branching paradigms which are
3138  * specific to one type of constraint are best implemented within the enforcement callbacks of your constraint handler.
3139  * See, e.g., the constraint specific branching rules provided by the constraint handlers for special ordered sets
3140  * (src/scip/cons_sos{1,2}.c)).
3141  * \n
3142  * All branching rules that come with the default distribution of SCIP create two subproblems by splitting a single
3143  * variable's domain. It is, however, fully supported to implement much more general branching schemes, for example by
3144  * creating more than two subproblems, or by adding additional constraints to the subproblems instead of tightening the
3145  * domains of the variables.
3146  * \n
3147  * A complete list of all branching rules contained in this release can be found \ref BRANCHINGRULES "here".
3148  *
3149  * We now explain how users can add their own branching rules. Take the most infeasible LP branching rule
3150  * (src/scip/branch_mostinf.c) as an example. As all other default plugins, it is written in C. C++ users can easily
3151  * adapt the code by using the scip::ObjBranchrule wrapper base class and implement the scip_...() virtual methods instead of
3152  * the SCIP_DECL_BRANCH... callback methods.
3153  *
3154  * Additional documentation for the callback methods of a branching rule can be found in the file type_branch.h.
3155  *
3156  * Here is what you have to do to implement a branching rule:
3157  * -# Copy the template files src/scip/branch_xyz.c and src/scip/branch_xyz.h into files named
3158  * "branch_mybranchingrule.c" and "branch_mybranchingrule.h".
3159  * \n
3160  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
3161  * -# Use SCIPincludeBranchruleMybranchingrule() in order to include the branching rule into your SCIP instance,
3162  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
3163  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mybranchingrule".
3164  * -# Adjust the properties of the branching rule (see \ref BRANCHRULE_PROPERTIES).
3165  * -# Define the branching rule data (see \ref BRANCHRULE_DATA). This is optional.
3166  * -# Implement the interface methods (see \ref BRANCHRULE_INTERFACE).
3167  * -# Implement the fundamental callback methods (see \ref BRANCHRULE_FUNDAMENTALCALLBACKS).
3168  * -# Implement the additional callback methods (see \ref BRANCHRULE_ADDITIONALCALLBACKS). This is optional.
3169  *
3170  *
3171  * @section BRANCHRULE_PROPERTIES Properties of a Branching Rule
3172  *
3173  * At the top of the new file "branch_mybranchingrule.c" you can find the branching rule properties.
3174  * These are given as compiler defines.
3175  * In the C++ wrapper class, you have to provide the branching rule properties by calling the constructor
3176  * of the abstract base class scip::ObjBranchrule from within your constructor.
3177  * The properties you have to set have the following meaning:
3178  *
3179  * \par BRANCHRULE_NAME: the name of the branching rule.
3180  * This name is used in the interactive shell to address the branching rule.
3181  * Additionally, if you are searching for a branching rule with SCIPfindBranchrule(), this name is looked up.
3182  * Names have to be unique: no two branching rules may have the same name.
3183  *
3184  * \par BRANCHRULE_DESC: the description of the branching rule.
3185  * This string is printed as a description of the branching rule in the interactive shell.
3186  *
3187  * \par BRANCHRULE_PRIORITY: the default value for the priority of the branching rule.
3188  * In the subproblem processing, the branching rules are called in decreasing order of their priority until
3189  * one succeeded to branch. Since most branching rules are able to generate a branching in all situations,
3190  * only the rule of highest priority is used. In combination with the BRANCHRULE_MAXDEPTH and
3191  * BRANCHRULE_MAXBOUNDDIST settings, however, interesting strategies can be easily employed. For example,
3192  * the user can set the priority of the "full strong branching" strategy to the highest value and assign the
3193  * second highest value to the "reliable pseudo cost" rule. If (s)he also sets the maximal depth for the
3194  * "full strong branching" to 5, in the top 5 depth levels of the search tree the "full strong branching" is
3195  * applied, while in the deeper levels "reliable pseudo cost branching" is used.
3196  * \n
3197  * Note that the BRANCHRULE_PRIORITY property only specifies the default value of the priority. The user can
3198  * change this value arbitrarily.
3199  *
3200  * \par BRANCHRULE_MAXDEPTH: the default value for the maximal depth level of the branching rule.
3201  * This parameter denotes the maximal depth level in the branch-and-bound tree up to which the branching method of the
3202  * branching rule will be applied. Use -1 for no limit.
3203  * \n
3204  * Note that this property only specifies the default value. The user can change this value arbitrarily.
3205  *
3206  * \par BRANCHRULE_MAXBOUNDDIST: the default value for the maximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for applying branching.
3207  * At the current branch-and-bound node, the relative distance from its dual bound (local dual bound)
3208  * to the primal bound compared to the best node's dual bound (global dual bound) is considered. The branching method of
3209  * the branching rule will only be applied at the node if this relative distance does not exceed BRANCHRULE_MAXBOUNDDIST.
3210  * \n
3211  * For example, if the global dual bound is 50 and the primal bound is 60, BRANCHRULE_MAXBOUNDDIST = 0.25 means that
3212  * branching is only applied if the current node's dual bound is in the first quarter of the interval [50,60], i.e., if it
3213  * is less than or equal to 52.5. In particular, the values 0.0 and 1.0 mean that the branching rule is applied at the
3214  * current best node only or at all nodes, respectively.
3215  * \n
3216  * Note that the BRANCHRULE_MAXBOUNDDIST property only specifies the default value of the maximal bound distance.
3217  * The user can change this value arbitrarily.
3218  *
3219  *
3220  * @section BRANCHRULE_DATA Branching Rule Data
3221  *
3222  * Below the header "Data structures" you can find a struct which is called "struct SCIP_BranchruleData".
3223  * In this data structure, you can store the data of your branching rule. For example, you should store the adjustable
3224  * parameters of the branching rule in this data structure.
3225  * If you are using C++, you can add branching rule data as usual as object variables to your class.
3226  * \n
3227  * Defining branching rule data is optional. You can leave the struct empty.
3228  *
3229  *
3230  * @section BRANCHRULE_INTERFACE Interface Methods
3231  *
3232  * At the bottom of "branch_mybranchingrule.c", you can find the interface method SCIPincludeBranchruleMybranchingrule(),
3233  * which also appears in "branch_mybranchingrule.h"
3234  * SCIPincludeBranchruleMybranchingrule() is called by the user, if (s)he wants to include the branching rule,
3235  * i.e., if (s)he wants to use the branching rule in his/her application.
3236  *
3237  * This method only has to be adjusted slightly.
3238  * It is responsible for notifying SCIP of the presence of the branching rule. For this, you can either call
3239  * SCIPincludeBranchrule(),
3240  * or SCIPincludeBranchruleBasic() since SCIP version 3.0. In the latter variant, \ref BRANCHRULE_ADDITIONALCALLBACKS "additional callbacks"
3241  * must be added via setter functions as, e.g., SCIPsetBranchruleCopy(). We recommend this latter variant because
3242  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
3243  * variant must be manually adjusted with every SCIP release containing new callbacks for branchrule in order to compile.
3244  *
3245  *
3246  * If you are using branching rule data, you have to allocate the memory for the data at this point.
3247  * You can do this by calling:
3248  * \code
3249  * SCIP_CALL( SCIPallocBlockMemory(scip, &branchruledata) );
3250  * \endcode
3251  * You also have to initialize the fields in struct SCIP_BranchruleData afterwards.
3252  *
3253  * You may also add user parameters for your branching rule, see the method SCIPincludeBranchruleRelpscost() in
3254  * src/scip/branch_relpscost.c for an example.
3255  *
3256  *
3257  * @section BRANCHRULE_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Branching Rule
3258  *
3259  * Branching rules do not have any fundamental callback methods, i.e., all callback methods are optional.
3260  * In most cases, however, you want to implement the \ref BRANCHEXECLP method and sometimes the \ref BRANCHEXECPS method.
3261  *
3262  *
3263  * @section BRANCHRULE_ADDITIONALCALLBACKS Additional Callback Methods of a Branching Rule
3264  *
3265  * The additional callback methods do not need to be implemented in every case. However, some of them have to be
3266  * implemented for most applications, they can be used, for example, to initialize and free private data.
3267  * Additional callbacks can either be passed directly with SCIPincludeBranchrule() to SCIP or via specific
3268  * <b>setter functions</b> after a call of SCIPincludeBranchruleBasic(), see also @ref BRANCHRULE_INTERFACE.
3269  *
3270  * The most important callback methods are the \ref BRANCHEXECLP, \ref BRANCHEXECEXT,
3271  * and \ref BRANCHEXECPS methods, which perform the actual task of generating a branching.
3272  *
3273  * Additional documentation for the callback methods can be found in type_branch.h.
3274  *
3275  * @subsection BRANCHEXECLP
3276  *
3277  * The BRANCHEXECLP callback is executed during node processing if a fractional LP solution is available. It should
3278  * split the current problem into smaller subproblems. Usually, the branching is done in a way such that the current
3279  * fractional LP solution is no longer feasible in the relaxation of the subproblems. It is, however, possible to
3280  * create a child node for which the fractional LP solution is still feasible in the relaxation, for example, by
3281  * branching on a variable with integral LP value. In every case, you have to make sure that each subproblem is a
3282  * proper restriction of the current problem. Otherwise, you risk to produce an infinite path in the search tree.
3283  *
3284  * The user gains access to the branching candidates, i.e., to the fractional variables, and their LP solution values by
3285  * calling the method SCIPgetLPBranchCands(). Furthermore, SCIP provides two methods for performing the actual
3286  * branching, namely SCIPbranchVar() and SCIPcreateChild().
3287  *
3288  * Given an integral variable \f$x\f$ with fractional LP solution value \f$x^*\f$, the method SCIPbranchVar() creates
3289  * two child nodes; one contains the bound \f$x \le \lfloor x^* \rfloor\f$ and the other one contains the bound \f$x \ge
3290  * \lceil x^* \rceil\f$, see the BRANCHEXECLP callback in src/scip/branch_mostinf.c for an example. In addition, if a
3291  * proven lower objective bound of a created child node is known, like after strong branching has been applied, the user
3292  * may call the method SCIPupdateNodeLowerbound() in order to update the child node's lower bound.
3293  *
3294  * Please also see the \ref BRANCHEXEC "further information for the three execution methods".
3295  *
3296  * @subsection BRANCHEXECEXT
3297  *
3298  * The BRANCHEXECEXT callback is executed during node processing if no LP solution is available and the list of
3299  * external branching candidates is not empty. It should split the current problem into smaller subproblems. If you
3300  * do not use relaxation handlers or constraints handlers that provide external branching candidates, you do not need to
3301  * implement this callback.
3302  *
3303  * In contrast to the LP branching candidates and the pseudo branching candidates, the list of external branching
3304  * candidates will not be generated automatically. The user has to add all variables to the list by calling
3305  * SCIPaddExternBranchCand() for each of them. Usually, this will happen in the execution method of a relaxation handler or in the
3306  * enforcement methods of a constraint handler.
3307  *
3308  * The user gains access to these branching candidates by calling the method SCIPgetExternBranchCands(). Furthermore,
3309  * SCIP provides two methods for performing the actual branching with a given solution value, namely SCIPbranchVarVal()
3310  * and SCIPcreateChild(). SCIPbranchVarVal() allows users to specify the branching point for a variable in contrast to
3311  * SCIPbranchVar(), which will always use the current LP or pseudo solution.
3312  *
3313  * This paragraph contains additional information regarding how the method SCIPbranchVarVal() works. For external branching candidates,
3314  * there are three principle possibilities:
3315  * - Given a continuous variable \f$x\f$ with solution value \f$x^*\f$, the method SCIPbranchVarVal() creates
3316  * two child nodes; one contains the bound \f$x \le x^* \f$ and the other one contains the bound \f$x \ge x^* \f$.
3317  * - Given an integer variable \f$x\f$ with fractional solution value \f$x^*\f$, the method
3318  * SCIPbranchVarVal() creates two child nodes; one contains the bound \f$x \le \lfloor x^* \rfloor\f$ and the other
3319  * one contains the bound \f$x \ge \lceil x^* \rceil\f$.
3320  * - Given an integer variable \f$x\f$ with integral solution value \f$x^*\f$, the method SCIPbranchVarVal()
3321  * creates three child nodes; one contains the bound \f$x \le x^* -1\f$, one contains the bound \f$x \ge x^* +1\f$,
3322  * one contains the fixing \f$x = x^*\f$.
3323  *
3324  * See the BRANCHEXECEXT callback in src/scip/branch_random.c for an example. In addition, if a proven lower bound of a
3325  * created child node is known the user may call the method SCIPupdateNodeLowerbound() in order to update the child
3326  * node's lower bound.
3327  *
3328  * Please also see the \ref BRANCHEXEC "further information for the three execution methods".
3329  *
3330  * @subsection BRANCHEXECPS
3331  *
3332  * The BRANCHEXECPS callback is executed during node processing if no LP solution is available and at least one of the
3333  * integer variables is not yet fixed. It should split the current problem into smaller subproblems. PS stands for
3334  * pseudo solution which is the vector of all variables set to their locally best (w.r.t. the objective function)
3335  * bounds.
3336  *
3337  * The user gains access to the branching candidates, i.e., to the non-fixed integer variables, by calling the method
3338  * SCIPgetPseudoBranchCands(). Furthermore, SCIP provides two methods for performing the actual branching, namely
3339  * SCIPbranchVar() and SCIPcreateChild().
3340  *
3341  * Given an integer variable \f$x\f$ with bounds \f$[l,u]\f$ and not having solved the LP, the method SCIPbranchVar()
3342  * creates two child nodes:
3343  * - If both bounds are finite, then the two children will contain the domain reductions \f$x \le x^*\f$, and \f$x \ge
3344  * x^*+1\f$ with \f$x^* = \lfloor \frac{l + u}{2}\rfloor\f$. The current pseudo solution will remain feasible in one
3345  * of the branches, but the hope is that halving the domain's size leads to good propagations.
3346  * - If only one of the bounds is finite, the variable will be fixed to that bound in one of the child nodes. In the
3347  * other child node, the bound will be shifted by one.
3348  * - If both bounds are infinite, three children will be created: \f$x \le 1\f$, \f$x \ge 1\f$, and \f$x = 0\f$.
3349 
3350  *
3351  * See the BRANCHEXECPS callback in src/scip/branch_random.c for an example. In addition, if a proven lower bound of a
3352  * created child node is known, the user may call the method SCIPupdateNodeLowerbound() in order to update the child
3353  * node's lower bound.
3354  *
3355  * Please also see the \ref BRANCHEXEC "further information for the three execution methods".
3356  *
3357  * @subsection BRANCHEXEC Further information for the three execution methods
3358  *
3359  * In order to apply more general branching schemes, one should use the method SCIPcreateChild().
3360  * After having created a child node, the additional restrictions of the child node have to be added with calls to
3361  * SCIPaddConsNode(), SCIPchgVarLbNode(), or SCIPchgVarUbNode().
3362  * \n
3363  * In the method SCIPcreateChild(), the branching rule has to assign two values to the new nodes: a node selection
3364  * priority for each node and an estimate for the objective value of the best feasible solution contained in the subtree
3365  * after applying the branching. If the method SCIPbranchVar() is used, these values are automatically assigned. For
3366  * variable based branching schemes, one might use the methods SCIPcalcNodeselPriority() and the method
3367  * SCIPcalcChildEstimate().
3368  *
3369  * In some cases, the branching rule can tighten the current subproblem instead of producing a branching. For example,
3370  * strong branching might have proven that rounding up a variable would lead to an infeasible LP relaxation and thus,
3371  * the variable must be rounded down. Therefore, the BRANCHEXECLP, BRANCHEXECPS and BRANCHEXECREL callbacks may also
3372  * produce domain reductions or add additional constraints to the current subproblem.
3373  *
3374  * The execution callbacks have the following options:
3375  * - detecting that the node is infeasible and can be cut off (result SCIP_CUTOFF)
3376  * - adding an additional constraint (e.g. a conflict constraint) (result SCIP_CONSADDED; note that this action
3377  * must not be performed if the input "allowaddcons" is FALSE)
3378  * - reducing the domain of a variable such that the current LP solution becomes infeasible (result SCIP_REDUCEDDOM)
3379  * - applying a branching (result SCIP_BRANCHED)
3380  * - stating that the branching rule was skipped (result SCIP_DIDNOTRUN).
3381  *
3382  * Only the BRANCHEXECLP callback has the possibility to add a cutting plane to the LP (result SCIP_SEPARATED).
3383  *
3384  * @subsection BRANCHFREE
3385  *
3386  * If you are using branching rule data, you have to implement this method in order to free the branching rule data.
3387  * This can be done by the following procedure:
3388  *
3389  * @refsnippet{src/scip/branch_random.c,SnippetBranchFreeRandom}
3390  *
3391  * If you have allocated memory for fields in your branching rule data, remember to free this memory
3392  * before freeing the branching rule data itself.
3393  * If you are using the C++ wrapper class, this method is not available.
3394  * Instead, just use the destructor of your class to free the member variables of your class.
3395  *
3396  * @subsection BRANCHINIT
3397  *
3398  * The BRANCHINIT callback is executed after the problem is transformed.
3399  * The branching rule may, e.g., use this call to initialize its branching rule data.
3400  *
3401  * @subsection BRANCHCOPY
3402  *
3403  * The BRANCHCOPY callback is executed when a SCIP instance is copied, e.g. to
3404  * solve a sub-SCIP. By
3405  * defining this callback as
3406  * <code>NULL</code> the user disables the execution of the specified
3407  * branching rule for all copied SCIP instances. This may deteriorate the performance
3408  * of primal heuristics using sub-SCIPs.
3409  *
3410  * @subsection BRANCHEXIT
3411  *
3412  * The BRANCHEXIT callback is executed before the transformed problem is freed.
3413  * In this method, the branching rule should free all resources that have been allocated for the solving process in
3414  * BRANCHINIT.
3415  *
3416  * @subsection BRANCHINITSOL
3417  *
3418  * The BRANCHINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
3419  * begin.
3420  * The branching rule may use this call to initialize its branch-and-bound specific data.
3421  *
3422  * @subsection BRANCHEXITSOL
3423  *
3424  * The BRANCHEXITSOL callback is executed before the branch-and-bound process is freed.
3425  * The branching rule should use this call to clean up its branch-and-bound data.
3426  */
3427 
3428 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
3429 
3430 /**@page NODESEL How to add node selectors
3431  *
3432  * Node selectors are used to decide which of the leaves in the current branching tree is selected as next subproblem
3433  * to be processed. The ordering relation of the tree's leaves for storing them in the leaf priority queue is also
3434  * defined by the node selectors.
3435  * \n
3436  * A complete list of all node selectors contained in this release can be found \ref NODESELECTORS "here".
3437  *
3438  * We now explain how users can add their own node selectors.
3439  * Take the node selector for depth first search (src/scip/nodesel_dfs.c) as an example.
3440  * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjNodesel wrapper
3441  * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_NODESEL... callback methods.
3442  *
3443  * Additional documentation for the callback methods of a node selector can be found in the file type_nodesel.h.
3444  *
3445  * Here is what you have to do to implement a node selector:
3446  * -# Copy the template files src/scip/nodesel_xyz.c and src/scip/nodesel_xyz.h into files named "nodesel_mynodeselector.c"
3447  * and "nodesel_mynodeselector.h".
3448  * \n
3449  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
3450  * -# Use SCIPincludeNodeselMynodeselector() in oder to include the node selector into your SCIP instance,
3451  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
3452  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mynodeselector".
3453  * -# Adjust the properties of the node selector (see \ref NODESEL_PROPERTIES).
3454  * -# Define the node selector data (see \ref NODESEL_DATA). This is optional.
3455  * -# Implement the interface methods (see \ref NODESEL_INTERFACE).
3456  * -# Implement the fundamental callback methods (see \ref NODESEL_FUNDAMENTALCALLBACKS).
3457  * -# Implement the additional callback methods (see \ref NODESEL_ADDITIONALCALLBACKS). This is optional.
3458  *
3459  *
3460  * @section NODESEL_PROPERTIES Properties of a Node Selector
3461  *
3462  * At the top of the new file "nodesel_mynodeselector.c" you can find the node selector properties.
3463  * These are given as compiler defines.
3464  * In the C++ wrapper class, you have to provide the node selector properties by calling the constructor
3465  * of the abstract base class scip::ObjNodesel from within your constructor.
3466  * The properties you have to set have the following meaning:
3467  *
3468  * \par NODESEL_NAME: the name of the node selector.
3469  * This name is used in the interactive shell to address the node selector.
3470  * Additionally, if you are searching for a node selector with SCIPfindNodesel(), this name is looked up.
3471  * Names have to be unique: no two node selectors may have the same name.
3472  *
3473  * \par NODESEL_DESC: the description of the node selector.
3474  * This string is printed as a description of the node selector in the interactive shell.
3475  *
3476  * \par NODESEL_STDPRIORITY: the default priority of the node selector in the standard mode.
3477  * The first step of each iteration of the main solving loop is the selection of the next subproblem to be processed.
3478  * The node selector of highest priority (the active node selector) is called to do this selection.
3479  * In particular, if you implemented your own node selector plugin which you want to be applied, you should choose a priority
3480  * which is greater then all priorities of the SCIP default node selectors.
3481  * Note that SCIP has two different operation modes: the standard mode and the memory saving mode. If the memory
3482  * limit - given as a parameter by the user - is almost reached, SCIP switches from the standard mode to the memory saving
3483  * mode in which different priorities for the node selectors are applied. NODESEL_STDPRIORITY is the priority of the
3484  * node selector used in the standard mode.
3485  * \n
3486  * Note that this property only defines the default value of the priority. The user may change this value arbitrarily by
3487  * adjusting the corresponding parameter setting.
3488  *
3489  * \par NODESEL_MEMSAVEPRIORITY: the default priority of the node selector in the memory saving mode.
3490  * The priority NODESEL_MEMSAVEPRIORITY of the node selector has the same meaning as the priority NODESEL_STDPRIORITY, but
3491  * is used in the memory saving mode.
3492  * Usually, you want the best performing node selector, for example best estimate search, to have maximal
3493  * standard priority, while you want a node selector which tends to keep the growth of the search tree limited, for example
3494  * depth first search, to have maximal memory saving priority.
3495  * \n
3496  * Note that this property only defines the default value of the priority. The user may change this value arbitrarily by
3497  * adjusting the corresponding parameter setting.
3498  *
3499  *
3500  * @section NODESEL_DATA Node Selector Data
3501  *
3502  * Below the header "Data structures" you can find a struct which is called "struct SCIP_NodeselData".
3503  * In this data structure, you can store the data of your node selector. For example, you should store the adjustable
3504  * parameters of the node selector in this data structure.
3505  * If you are using C++, you can add node selector data as usual as object variables to your class.
3506  * \n
3507  * Defining node selector data is optional. You can leave the struct empty.
3508  *
3509  *
3510  * @section NODESEL_INTERFACE Interface Methods
3511  *
3512  * At the bottom of "nodesel_mynodeselector.c", you can find the interface method SCIPincludeNodeselMynodeselector(),
3513  * which also appears in "nodesel_mynodeselector.h"
3514  * SCIPincludeNodeselMynodeselector() is called by the user, if (s)he wants to include the node selector,
3515  * i.e., if (s)he wants to use the node selector in his/her application.
3516  *
3517  * This method only has to be adjusted slightly.
3518  * It is responsible for notifying SCIP of the presence of the node selector. For this, you can either call
3519  * SCIPincludeNodesel(),
3520  * or SCIPincludeNodeselBasic() since SCIP version 3.0. In the latter variant, \ref NODESEL_ADDITIONALCALLBACKS "additional callbacks"
3521  * must be added via setter functions as, e.g., SCIPsetNodeselCopy(). We recommend this latter variant because
3522  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
3523  * variant must be manually adjusted with every SCIP release containing new callbacks for node selectors in order to compile.
3524  *
3525  *
3526  * If you are using node selector data, you have to allocate the memory for the data at this point.
3527  * You can do this by calling:
3528  * \code
3529  * SCIP_CALL( SCIPallocBlockMemory(scip, &nodeseldata) );
3530  * \endcode
3531  * You also have to initialize the fields in struct SCIP_NodeselData afterwards.
3532  *
3533  * You may also add user parameters for your node selector, see the method SCIPincludeNodeselRestartdfs() in
3534  * src/scip/nodesel_restartdfs.c for an example.
3535  *
3536  *
3537  * @section NODESEL_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Node Selector
3538  *
3539  * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
3540  * an operational algorithm.
3541  * They are passed together with the node selector itself to SCIP using SCIPincludeNodesel() or SCIPincludeNodeselBasic(),
3542  * see @ref NODESEL_INTERFACE.
3543  *
3544  * Node selector plugins have two fundamental callback methods, namely the NODESELSELECT method and the NODESELCOMP method.
3545  * These methods have to be implemented for every node selector; the other callback methods are optional.
3546  * They implement the two requirements every node selector has to fulfill: Selecting a node from the queue to be processed
3547  * next and, given two nodes, deciding which of both is favored by the node selector's selection rule. The first
3548  * task is implemented in the NODESELSELECT callback, the second one in the NODESELCOMP callback.
3549  * In the C++ wrapper class scip::ObjNodesel, the scip_select() method and the scip_comp() method (which correspond to the
3550  * NODESELSELECT callback and the NODESELCOMP callback, respectively) are virtual abstract member functions.
3551  * You have to implement them in order to be able to construct an object of your node selector class.
3552  *
3553  * Additional documentation for the callback methods can be found in type_nodesel.h.
3554  *
3555  * @subsection NODESELSELECT
3556  *
3557  * The NODESELSELECT callback is the first method called in each iteration in the main solving loop. It should decide
3558  * which of the leaves in the current branching tree is selected as the next subproblem to be processed.
3559  * It can arbitrarily decide between all leaves stored in the tree, but for performance reasons,
3560  * the current node's children and siblings are often treated different from the remaining leaves.
3561  * This is mainly due to the warm start capabilities of the simplex algorithm and the expectation that the bases of
3562  * neighboring vertices in the branching tree very similar.
3563  * The node selector's choice of the next node to process can
3564  * have a large impact on the solver's performance, because it influences the finding of feasible solutions and the
3565  * development of the global dual bound.
3566  *
3567  * Besides the ranking of the node selector, every node gets assigned a node selection priority by the branching rule
3568  * that created the node. See the \ref BRANCHEXECLP and \ref BRANCHEXECPS callbacks of the branching rules for details.
3569  * For example, the node where the branching went in the same way as the deviation from the branching variable's
3570  * root solution could be assigned a higher priority than the node where the branching went in the opposite direction.
3571  *
3572  * The following methods provide access to the various types of leaf nodes:
3573  * - SCIPgetPrioChild() returns the child of the current node with the largest node selection priority, as assigned by the
3574  * branching rule.
3575  * If no child is available (for example, because the current node was pruned), a NULL pointer is returned.
3576  * - SCIPgetBestChild() returns the best child of the current node with respect to the node selector's ordering relation as
3577  * defined by the \ref NODESELCOMP callback. If no child is available, a NULL pointer is returned.
3578  * - SCIPgetPrioSibling() returns the sibling of the current node with the largest node selection priority.
3579  * If no sibling is available (for example, because all siblings of the current node have already been processed), a NULL
3580  * pointer is returned.
3581  * Note that in binary branching every node has at most one sibling, but since SCIP supports arbitrary branching rules,
3582  * this might not always be the case.
3583  * - SCIPgetBestSibling() returns the best sibling of the current node with respect to the node selector's ordering relation
3584  * as defined by the \ref NODESELCOMP callback. If no sibling is available, a NULL pointer is returned.
3585  * - SCIPgetBestNode() returns the best leaf from the tree (children, siblings, or other leaves) with respect to the node
3586  * selector's ordering relation as defined by the \ref NODESELCOMP callback. If no open leaf exists, a NULL pointer is
3587  * returned. In this case, the optimization is finished, and the node selector should return a NULL pointer as 'selnode'.
3588  * - SCIPgetBestboundNode() returns a leaf from the tree (children, siblings, or other leaves) with the smallest lower (dual)
3589  * objective bound. If the queue is empty, a NULL pointer is returned. In this case, the optimization is finished, and the
3590  * node selector should return a NULL pointer as 'selnode'.
3591  *
3592  *
3593  * @subsection NODESELCOMP
3594  *
3595  * The NODESELCOMP callback is called to compare two leaves of the current branching tree (say node 1 and node 2)
3596  * regarding their ordering relation.
3597  *
3598  * The NODESELCOMP should return the following values:
3599  * - value < 0, if node 1 comes before (is better than) node 2
3600  * - value = 0, if both nodes are equally good
3601  * - value > 0, if node 1 comes after (is worse than) node 2.
3602  *
3603  * @section NODESEL_ADDITIONALCALLBACKS Additional Callback Methods of a Node Selector
3604  *
3605  * The additional callback methods do not need to be implemented in every case. However, some of them have to be
3606  * implemented for most applications, they can be used, for example, to initialize and free private data.
3607  * Additional callbacks can either be passed directly with SCIPincludeNodesel() to SCIP or via specific
3608  * <b>setter functions</b> after a call of SCIPincludeNodeselBasic(), see also @ref NODESEL_INTERFACE.
3609  *
3610  * @subsection NODESELFREE
3611  *
3612  * If you are using node selector data, you have to implement this method in order to free the node selector data.
3613  * This can be done by the following procedure:
3614  *
3615  * @refsnippet{src/scip/nodesel_bfs.c,SnippetNodeselFreeBfs}
3616  *
3617  * If you have allocated memory for fields in your node selector data, remember to free this memory
3618  * before freeing the node selector data itself.
3619  * If you are using the C++ wrapper class, this method is not available.
3620  * Instead, just use the destructor of your class to free the member variables of your class.
3621  *
3622  * @subsection NODESELINIT
3623  *
3624  * The NODESELINIT callback is executed after the problem is transformed.
3625  * The node selector may, e.g., use this call to initialize its node selector data.
3626  *
3627  * @subsection NODESELCOPY
3628  *
3629  * The NODESELCOPY callback is executed when a SCIP instance is copied, e.g. to
3630  * solve a sub-SCIP. By
3631  * defining this callback as
3632  * <code>NULL</code> the user disables the execution of the specified
3633  * node selector for all copied SCIP instances. This may deteriorate the performance
3634  * of primal heuristics using sub-SCIPs.
3635  *
3636  * @subsection NODESELEXIT
3637  *
3638  * The NODESELEXIT callback is executed before the transformed problem is freed.
3639  * In this method, the node selector should free all resources that have been allocated for the solving process
3640  * in NODESELINIT.
3641  *
3642  * @subsection NODESELINITSOL
3643  *
3644  * The NODESELINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
3645  * begin.
3646  * The node selector may use this call to initialize its branch-and-bound specific data.
3647  *
3648  * @subsection NODESELEXITSOL
3649  *
3650  * The NODESELEXITSOL callback is executed before the branch-and-bound process is freed.
3651  * The node selector should use this call to clean up its branch-and-bound data.
3652  */
3653 
3654 
3655 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
3656 
3657 /**@page HEUR How to add primal heuristics
3658  *
3659  * Feasible solutions can be found in two different ways during the traversal of the branch-and-bound tree. On one
3660  * hand, the solution of a node's relaxation may be feasible with respect to the constraints (including the integrality).
3661  * On the other hand, feasible solutions can be discovered by primal heuristics.
3662  * \n
3663  * A complete list of all primal heuristics contained in this release can be found \ref PRIMALHEURISTICS "here".
3664  * \n
3665  * Diving heuristics are primal heuristics that explore an auxiliary search tree in a depth-first manner. Since SCIP
3666  * version 3.2, it is easy to integrate further diving heuristics by using a special controller for the scoring,
3667  * see \ref DIVINGHEUR "here" for information on how to implement a diving heuristic.
3668  * \n
3669  * We now explain how users can add their own primal heuristics.
3670  * Take the simple and fast LP rounding heuristic (src/scip/heur_simplerounding.c) as an example.
3671  * The idea of simple rounding is to iterate over all fractional variables of an LP solution and round them down,
3672  * if the variables appears only with nonnegative coefficients in the system Ax <= b and round them up if
3673  * the variables appears only with nonpositive coefficients.
3674  * If one of both conditions applies for each of the fractional variables, this will give a feasible solution.
3675  * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjHeur wrapper
3676  * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_HEUR... callback methods.
3677  *
3678  * Additional documentation for the callback methods of a primal heuristic can be found in the file type_heur.h.
3679  *
3680  * Here is what you have to do to implement a primal heuristic:
3681  * -# Copy the template files src/scip/heur_xyz.c and src/scip/heur_xyz.h into files named "heur_myheuristic.c"
3682  * and "heur_myheuristic.h".
3683  * \n
3684  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
3685  * -# Use SCIPincludeHeurMyheuristic() in order to include the heuristic into your SCIP instance,
3686  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
3687  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "myheuristic".
3688  * -# Adjust the properties of the primal heuristic (see \ref HEUR_PROPERTIES).
3689  * -# Define the primal heuristic data (see \ref HEUR_DATA). This is optional.
3690  * -# Implement the interface methods (see \ref HEUR_INTERFACE).
3691  * -# Implement the fundamental callback methods (see \ref HEUR_FUNDAMENTALCALLBACKS).
3692  * -# Implement the additional callback methods (see \ref HEUR_ADDITIONALCALLBACKS). This is optional.
3693  *
3694  *
3695  * @section HEUR_PROPERTIES Properties of a Primal Heuristic
3696  *
3697  * At the top of the new file "heur_myheuristic.c" you can find the primal heuristic properties.
3698  * These are given as compiler defines.
3699  * In the C++ wrapper class, you have to provide the primal heuristic properties by calling the constructor
3700  * of the abstract base class scip::ObjHeur from within your constructor.
3701  * Of course, all of them are of relevant, but the most important ones for controlling the performance
3702  * are usually HEUR_FREQ and HEUR_TIMING.
3703  * The properties you have to set have the following meaning:
3704  *
3705  * \par HEUR_NAME: the name of the primal heuristic.
3706  * This name is used in the interactive shell to address the primal heuristic.
3707  * Additionally, if you are searching for a primal heuristic with SCIPfindHeur(), this name is looked up.
3708  * Names have to be unique: no two primal heuristics may have the same name.
3709  *
3710  * \par HEUR_DESC: the description of the primal heuristic.
3711  * This string is printed as a description of the primal heuristic in the interactive shell when you call "display heuristics".
3712  *
3713  * \par HEUR_DISPCHAR: the display character of the primal heuristic.
3714  * In the interactive shell, this character is printed in the first column of a status information row, if the primal
3715  * heuristic found the feasible solution belonging to the primal bound. Note that a star '*' stands for an integral
3716  * LP-relaxation.
3717  * In order to avoid confusion, display characters should be unique: no two primal heuristics should have the same display character.
3718  * You can get a list of all primal heuristics along with their display characters by entering "display heuristics" in the
3719  * SCIP interactive shell.
3720  *
3721  * \par HEUR_PRIORITY: the priority of the primal heuristic.
3722  * At each of the different entry points of the primal heuristics during the solving process (see HEUR_TIMING), they are
3723  * called in decreasing order of their priority.
3724  * \n
3725  * The priority of a primal heuristic should be set according to the complexity of the heuristic and the likelihood to find
3726  * feasible solutions: primal heuristics that provide fast algorithms that often succeed in finding a feasible solution should have
3727  * a high priority (like simple rounding). In addition, the interaction between different types of primal heuristics should be taken into account.
3728  * For example, improvement heuristics, which try to generate improved solutions by inspecting one or more of the feasible
3729  * solutions that have already been found, should have a low priority (like Crossover which by default needs at least 3 feasible solutions).
3730  *
3731  * \par HEUR_FREQ: the default frequency for executing the primal heuristic.
3732  * The frequency together with the frequency offset (see HEUR_FREQOFS) defines the depth levels at which the execution
3733  * method of the primal heuristic \ref HEUREXEC is called. For example, a frequency of 7 together with a frequency offset
3734  * of 5 means, that the \ref HEUREXEC callback is executed for subproblems that are in depth 5, 12, 19, ... of the branching tree. A
3735  * frequency of 0 together with a frequency offset of 3 means, that the execution method is only called at those nodes that are in
3736  * depth level 3 (i.e., at most for \f$2^3 = 8\f$ nodes if binary branching is applied).
3737  * Typical cases are: A frequency of 0 and an offset of 0 which means that
3738  * the heuristic is only called at the root node and a frequency of -1 which disables the heuristic.
3739  * \n
3740  * The frequency can be adjusted by the user. This property of the primal heuristic only defines the default value of the
3741  * frequency. If you want to have a more flexible control of when to execute the primal heuristic, you have to assign
3742  * a frequency of 1 and implement a check at the beginning of your execution method whether you really want to search for feasible
3743  * solutions or not. If you do not want to execute the method, set the result code to SCIP_DIDNOTRUN.
3744  *
3745  * \par HEUR_FREQOFS: the frequency offset for executing the primal heuristic.
3746  * The frequency offset defines the depth of the branching tree at which the primal heuristic is executed for the first
3747  * time. For example, a frequency of 7 (see HEUR_FREQ) together with a frequency offset of 10 means, that the
3748  * callback is executed for subproblems that are in depth 10, 17, 24, ... of the branching tree. In particular, assigning
3749  * different offset values to heuristics of the same type, like diving heuristics, can be useful for evenly spreading the
3750  * application of these heuristics across the branch-and-bound tree.
3751  * Note that if the frequency is equal to 1, the heuristic is applied for all nodes with depth level larger or equal to
3752  * the frequency offset.
3753  *
3754  * \par HEUR_MAXDEPTH: the maximal depth level for executing the primal heuristic.
3755  * This parameter denotes the maximal depth level in the branching tree up to which the execution method of the primal
3756  * heuristic is called. Use -1 for no limit (a usual case).
3757  *
3758  * \par HEUR_TIMING: the execution timing of the primal heuristic.
3759  * Primal heuristics have different entry points during the solving process and the execution timing parameter defines the
3760  * entry point at which the primal heuristic is executed first.
3761  * \n
3762  * The primal heuristic can be called first:
3763  * - before the processing of the node starts (SCIP_HEURTIMING_BEFORENODE)
3764  * - after each LP solve during the cut-and-price loop (SCIP_HEURTIMING_DURINGLPLOOP)
3765  * - after the cut-and-price loop was finished (SCIP_HEURTIMING_AFTERLPLOOP)
3766  * - after the processing of a node <em>with solved LP</em> was finished (SCIP_HEURTIMING_AFTERLPNODE)
3767  * - after the processing of a node <em>without solved LP</em> was finished (SCIP_HEURTIMING_AFTERPSEUDONODE)
3768  * - after the processing of the last node in the current plunge was finished, <em>and only if the LP was solved for
3769  * this node</em> (SCIP_HEURTIMING_AFTERLPPLUNGE)
3770  * - after the processing of the last node in the current plunge was finished, <em>and only if the LP was not solved
3771  * for this node</em> (SCIP_HEURTIMING_AFTERPSEUDOPLUNGE).
3772  * \par
3773  * A plunge is the successive solving of child and sibling nodes in the search tree.
3774  * The flags listed above can be combined to call the heuristic at multiple times by concatenating them with a bitwise OR.
3775  * Two useful combinations are already predefined:
3776  * - after the processing of a node was finished (SCIP_HEURTIMING_AFTERNODE; combines SCIP_HEURTIMING_AFTERLPNODE and
3777  * SCIP_HEURTIMING_AFTERPSEUDONODE)
3778  * - after the processing of the last node in the current plunge was finished (SCIP_HEURTIMING_AFTERPLUNGE; combines
3779  * SCIP_HEURTIMING_AFTERLPPLUNGE and SCIP_HEURTIMING_AFTERPSEUDOPLUNGE)
3780  * \par
3781  * Calling a primal heuristic "before the processing of the node starts" is particularly useful for heuristics
3782  * that do not need to access the LP solution of the current node. If such a heuristic finds a feasible solution, the
3783  * leaves of the branching tree exceeding the new primal bound are pruned. It may happen that even the current node can
3784  * be cut off without solving the LP relaxation. Combinatorial heuristics, like the farthest insert heuristic for the TSP
3785  * (see examples/TSP/src/HeurFarthestInsert.cpp), are often applicable at this point.
3786  * \n
3787  * Very fast primal heuristics that require an LP solution can also be called "after each LP solve during the
3788  * cut-and-price loop". Rounding heuristics, like the simple and fast LP rounding heuristic
3789  * (src/scip/heur_simplerounding.c), belong to this group of primal heuristics.
3790  * \n
3791  * Most heuristics, however, are called either after a node was completely processed
3792  * (e.g. expensive rounding heuristics like RENS), or even only after a full plunge was finished (e.g., diving heuristics).
3793  *
3794  * \par HEUR_USESSUBSCIP: Does the heuristic use a secondary SCIP instance?
3795  * Some heuristics and separators solve MIPs or SAT problems using a secondary SCIP instance. Examples are
3796  * Large Neighborhood Search heuristics such as RINS and Local Branching or the CGMIP separator. To avoid recursion,
3797  * these plugins usually deactivate all other plugins that solve MIPs. If a heuristic uses a secondary SCIP instance,
3798  * this parameter has to be TRUE and it is recommended to call SCIPsetSubscipsOff() for the secondary SCIP instance.
3799  *
3800  * Computational experiments indicate that for the overall performance of a MIP solver, it is important to evenly
3801  * spread the application of the heuristics across the branch-and-bound tree. Thus, the assignment of the parameters
3802  * HEUR_FREQ, HEUR_FREQOFS, and HEUR_TIMING should contribute to this aim.
3803  *
3804  * Note that all diving heuristics in the SCIP distribution (see, e.g., src/scip/heur_guideddiving.c) check whether other diving
3805  * heuristics have already been called at the current node. This can be done by comparing SCIPgetLastDivenode(scip) and
3806  * SCIPgetNNodes(scip). If the two are equal, and if the current node is not the root node (SCIPgetDepth(scip) > 0), diving
3807  * heuristics should be delayed by returning the result code 'SCIP_DELAYED'. This is an additional contribution to the goal of
3808  * not calling multiple similar heuristics at the same node.
3809  *
3810  *
3811  * @section HEUR_DATA Primal Heuristic Data
3812  *
3813  * Below the header "Data structures" you can find a struct which is called "struct SCIP_HeurData".
3814  * In this data structure, you can store the data of your primal heuristic. For example, you should store the adjustable
3815  * parameters of the primal heuristic or a working solution in this data structure.
3816  * If you are using C++, you can add primal heuristic data as usual as object variables to your class.
3817  * \n
3818  * Defining primal heuristic data is optional. You can leave the struct empty.
3819  *
3820  *
3821  * @section HEUR_INTERFACE Interface Methods
3822  *
3823  * At the bottom of "heur_myheuristic.c", you can find the interface method SCIPincludeHeurMyheuristic(),
3824  * which also appears in "heur_myheuristic.h"
3825  * SCIPincludeHeurMyheuristic() is called by the user, if (s)he wants to include the heuristic,
3826  * i.e., if (s)he wants to use the heuristic in his/her application.
3827  *
3828  * This method only has to be adjusted slightly.
3829  * It is responsible for notifying SCIP of the presence of the heuristic. For this, you can either call
3830  * SCIPincludeHeur(),
3831  * or SCIPincludeHeurBasic() since SCIP version 3.0. In the latter variant, \ref HEUR_ADDITIONALCALLBACKS "additional callbacks"
3832  * must be added via setter functions as, e.g., SCIPsetHeurCopy(). We recommend this latter variant because
3833  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
3834  * variant must be manually adjusted with every SCIP release containing new callbacks for heuristics in order to compile.
3835  *
3836  * If you are using primal heuristic data, you have to allocate the memory for the data at this point.
3837  * You can do this by calling:
3838  * \code
3839  * SCIP_CALL( SCIPallocBlockMemory(scip, &heurdata) );
3840  * \endcode
3841  * You also have to initialize the fields in struct SCIP_HeurData afterwards.
3842  *
3843  * You may also add user parameters for your primal heuristic, see the method SCIPincludeHeurFeaspump() in
3844  * src/scip/heur_oneopt.c for an example where a single Boolean parameter is added.
3845  *
3846  *
3847  * @section HEUR_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Primal Heuristic
3848  *
3849  * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
3850  * an operational algorithm.
3851  * They are passed together with the primal heuristic itself to SCIP using SCIPincludeHeur() or SCIPincludeHeurBasic(),
3852  * see @ref HEUR_INTERFACE.
3853  *
3854  *
3855  * Primal heuristic plugins have only one fundamental callback method, namely the HEUREXEC method.
3856  * This method has to be implemented for every primal heuristic; the other callback methods are optional.
3857  * In the C++ wrapper class scip::ObjHeur, the scip_exec() method (which corresponds to the HEUREXEC callback) is a virtual
3858  * abstract member function. You have to implement it in order to be able to construct an object of your primal heuristic
3859  * class.
3860  *
3861  * Additional documentation for the callback methods can be found in type_heur.h.
3862  *
3863  * @subsection HEUREXEC
3864  *
3865  * The HEUREXEC callback is called at different positions during the node processing loop, see HEUR_TIMING. It should
3866  * search for feasible solutions and add them to the solution pool. For creating a new feasible solution, the
3867  * methods SCIPcreateSol() and SCIPsetSolVal() can be used. Afterwards, the solution can be added to the storage by
3868  * calling the method SCIPtrySolFree() (or SCIPtrySol() and SCIPfreeSol()).
3869  *
3870  * The HEUREXEC callback gets a SCIP pointer, a pointer to the heuristic itself, the current point in the
3871  * solve loop and a result pointer as input (see type_heur.h).
3872  *
3873  * The heuristic has to set the result pointer appropriately!
3874  * Therefore it has the following options:
3875  * - finding at least one feasible solution (result SCIP_FOUNDSOL)
3876  * - stating that the primal heuristic searched, but did not find a feasible solution (result SCIP_DIDNOTFIND)
3877  * - stating that the primal heuristic was skipped (result SCIP_DIDNOTRUN)
3878  * - stating that the primal heuristic was skipped, but should be called again (result SCIP_DELAYED).
3879  *
3880  *
3881  * @section HEUR_ADDITIONALCALLBACKS Additional Callback Methods of a Primal Heuristic
3882  *
3883  * The additional callback methods do not need to be implemented in every case. However, some of them have to be
3884  * implemented for most applications, they can be used, for example, to initialize and free private data.
3885  * Additional callbacks can either be passed directly with SCIPincludeHeur() to SCIP or via specific
3886  * <b>setter functions</b> after a call of SCIPincludeHeurBasic(), see also @ref HEUR_INTERFACE.
3887  *
3888  * @subsection HEURFREE
3889  *
3890  * If you are using primal heuristic data, you have to implement this method in order to free the primal heuristic data.
3891  * This can be done by the following procedure:
3892  *
3893  * @refsnippet{applications/Coloring/src/heur_init.c,SnippetHeurFreeInit}
3894  *
3895  * If you have allocated memory for fields in your primal heuristic data, remember to free this memory
3896  * before freeing the primal heuristic data itself.
3897  * If you are using the C++ wrapper class, this method is not available.
3898  * Instead, just use the destructor of your class to free the member variables of your class.
3899  *
3900  * @subsection HEURINIT
3901  *
3902  * The HEURINIT callback is executed after the problem is transformed.
3903  * The primal heuristic may, e.g., use this call to initialize its primal heuristic data.
3904  *
3905  * @subsection HEURCOPY
3906  *
3907  * The HEURCOPY callback is executed when a SCIP instance is copied, e.g. to
3908  * solve a sub-SCIP. By
3909  * defining this callback as
3910  * <code>NULL</code> the user disables the execution of the specified
3911  * heuristic for all copied SCIP instances. This may deteriorate the performance
3912  * of primal heuristics using sub-SCIPs.
3913  *
3914  * @subsection HEUREXIT
3915  *
3916  * The HEUREXIT callback is executed before the tDIVINGHEURransformed problem is freed.
3917  * In this method, the primal heuristic should free all resources that have been allocated for the solving process in
3918  * HEURINIT.
3919  *
3920  * @subsection HEURINITSOL
3921  *
3922  * The HEURINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
3923  * begin. The primal heuristic may use this call to initialize its branch-and-bound specific data.
3924  *
3925  * @subsection HEUREXITSOL
3926  *
3927  * The HEUREXITSOL callback is executed before the branch-and-bound process is freed. The primal heuristic should use this
3928  * call to clean up its branch-and-bound data, which was allocated in HEURINITSOL.
3929  */
3930 
3931 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
3932 
3933 /**@page DIVINGHEUR How to implement a diving heuristic
3934  *
3935  * Diving heuristics are an important addon to the branch-and-cut search. A diving heuristic explores a single probing
3936  * path down the search tree. In contrast to the regular search guided by branching rule(s) and the selected
3937  * node selector, the diving is performed in an auxiliary tree originating from the focus node of the main
3938  * search tree where the heuristic was called. The advantage of this approach is that many different scoring mechanisms
3939  * can be safely tried as diving heuristic and may probably lead to better solutions. SCIP has a lot of diving heuristics
3940  * included in its default plugin set.
3941  * \n
3942  *
3943  * Since SCIP version 3.2, the diving heuristics have been redesigned to contain mainly the scoring function used by the
3944  * heuristic. In order to implement a user-defined diving heuristic, it is possible to create one (or several)
3945  * divesets that control the scoring mechanism and add them to the primal heuristic. This has the advantage that
3946  * less code is necessary to create a working diving heuristic. The SCIP statistics now also display some interesting statistics
3947  * about every diveset together in the section 'Diving Statistics'.
3948  * \n
3949  *
3950  * This page contains the necessary steps to understand and include a diveset into ones primal diving heuristic plugin. As
3951  * a prerequisite, you should understand the basic implementation steps for a primal heuristic, see \ref HEUR.
3952  * In order to make use of divesets, they must be included _after_ the primal heuristic to which they should belong
3953  * has been included, by using SCIPincludeDiveset(). This will create the data structure for the diveset and
3954  * append it to the list of divesets belonging to the heuristic, which can be retrieved later together with their number
3955  * by using SCIPheurGetDivesets() and SCIPheurGetNDivesets(), respectively. No further memory allocation or deletion is needed;
3956  * As a member of the heuristic, SCIP automatically takes care of freeing the diveset when it is exiting.
3957  * \n
3958  *
3959  * Before the inclusion, one may think of adjusting the various properties that a diveset offers to control
3960  * the behavior of the algorithm. These are subject to the following section.
3961  * \n
3962  *
3963  * It is mandatory to implement the fundamental scoring callback of the diveset, which is explained in more detail
3964  * in Section \ref DIVING_FUNDAMENTALCALLBACKS.
3965  * \n
3966  *
3967  * Once the properties have been carefully adjusted and the scoring
3968  * has been defined, use the method SCIPperformGenericDivingAlgorithm() inside the execution callback (\ref HEUREXEC) of the primal
3969  * heuristic to which the diveset belongs, after checking possible preliminaries that may not be met at all times of the search.
3970  * \n
3971  *
3972  * For a code example, we refer to \ref heur_guideddiving.h, which guides the diving into the direction of the current incumbent solution.
3973  * Before it calls SCIPperformGenericDivingAlgorithm(), it checks whether an incumbent is available, and returns if there is none.
3974  *
3975  *
3976  * @section DIVING_PARAMETERS User parameters and properties for every diveset
3977  *
3978  * Every diveset controls the diving behavior through a set of user-defined parameters, which are explained in the following:
3979  *
3980  * \par MINRELDEPTH
3981  * the minimal relative depth (to the maximum depth explored during regular search) of the current focus node to start diving
3982  *
3983  * \par MAXRELDEPTH
3984  * the maximal relative depth (to the maximum depth explored during regular search) of the current focus node to start diving
3985  *
3986  * \par MAXLPITERQUOT
3987  * maximal fraction of diving LP iterations compared to node LP iterations that this dive controller may consume
3988  *
3989  * \par MAXLPITEROFS
3990  * an additional number of allowed LP iterations
3991  *
3992  * \par MAXDIVEUBQUOT
3993  * maximal quotient (curlowerbound - lowerbound)/(cutoffbound - lowerbound)
3994  * where diving is performed (0.0: no limit)
3995  *
3996  * \par MAXDIVEAVGQUOT
3997  * maximal quotient (curlowerbound - lowerbound)/(avglowerbound - lowerbound)
3998  * where diving is performed (0.0: no limit)
3999  *
4000  * \par MAXDIVEUBQUOTNOSOL
4001  * maximal UBQUOT when no solution was found yet (0.0: no limit)
4002  *
4003  * \par MAXDIVEAVGQUOTNOSOL
4004  * maximal AVGQUOT when no solution was found yet (0.0: no limit)
4005  *
4006  * \par BACKTRACK
4007  * use one level of backtracking if infeasibility is encountered?
4008  *
4009  * \par LPRESOLVEDOMCHGQUOT
4010  * parameter to control LP resolve dynamically based on this percentage of observed bound changes relative to all variables or
4011  * the LP branching candidates (integer variables with fractional solution values) from the last node where an LP has been solved.
4012  * This property has no effect when the LPSOLVEFREQ is set to 1.
4013  *
4014  * \par LPSOLVEFREQ
4015  * LP solve frequency for diveset, use a positive integer k to solve an LP at every k'th depth of the diving search (ie. 1 causes the
4016  * diveset to solve _all_ intermediate LPs) or 0 to only resolve the LP relaxation after propagation found at least a certain percentage
4017  * domain changes, see also the previous LPRESOLVEDOMCHGQUOT parameter.
4018  *
4019  * \par ONLYLPBRANCHCANDS
4020  * Set this property to TRUE if only LP branching candidates be considered for the execution of the diving algorithm instead of the slower but
4021  * more general constraint handler diving variable selection.
4022  *
4023  * \par DIVETYPES
4024  * bit mask that represents all supported dive types. Irrelevant if only LP branching candidates should be scored, otherwise, different
4025  * constraint handlers may ask the diveset if it supports their preferred divetype. See \ref type_heur.h for a list of
4026  * available dive types.
4027  *
4028  * @section DIVING_FUNDAMENTALCALLBACKS Fundamental callbacks of a diveset
4029  *
4030  * Only one callback is necessary to complete a diveset to guide the diving search performed:
4031  *
4032  * @subsection DIVESETGETSCORE
4033  *
4034  * The scoring callback expects a candidate variable and calculates a score value and a preferred direction. The selected
4035  * variable for diving will be one that _maximizes_ the score function provided by the diveset.
4036  * If the diveset should support more than one possible type of diving, it may use the divetype argument as a hint how
4037  * the caller of the score function (could be the diving algorithm itself or one of the constraint handlers that
4038  * implement diving variable selection) intends to perform the search.
4039  *
4040  * @section DIVING_FURTHERINFO Further information
4041  *
4042  * This is all there is to extend the SCIP set of diving heuristics by a new one. For further information, please see
4043  * diveset related methods in \ref type_heur.h, \ref pub_heur.h, \ref heuristics.h, and \ref heur_guideddiving.h or
4044  * other diving heuristics that implement diving through a diveset.
4045  */
4046 
4047 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4048 
4049 /**@page RELAX How to add relaxation handlers
4050  *
4051  * SCIP provides specific support for LP relaxations of constraint integer programs. In addition, relaxation handlers,
4052  * also called relaxators, can be used to include other relaxations, e.g. Lagrange relaxations or semidefinite
4053  * relaxations. The relaxation handler manages the necessary data structures and calls the relaxation solver to generate dual
4054  * bounds and primal solution candidates.
4055  * \n
4056  * However, the data to define a single relaxation must either be extracted by the relaxation handler itself (e.g., from
4057  * the user defined problem data, the LP information, or the integrality conditions), or be provided by the constraint
4058  * handlers. In the latter case, the constraint handlers have to be extended to support this specific relaxation.
4059  * \n
4060  *
4061  * We now explain how users can add their own relaxation handlers using the C interface. As an example, look into the NLP
4062  * relaxation handler of the \ref RELAXATOR_MAIN "Relaxator example" (examples/Relaxator/src/relax_nlp.c). It is very easy to
4063  * transfer the C explanation to C++: whenever a method should be implemented using the SCIP_DECL_RELAX... notion,
4064  * reimplement the corresponding virtual member function of the abstract scip::ObjRelax wrapper base class.
4065  *
4066  * Additional documentation for the callback methods of a relaxation handler can be found in the file type_relax.h.
4067  *
4068  * Here is what you have to do to implement a relaxation handler:
4069  * -# Copy the template files src/scip/relax_xyz.c and src/scip/relax_xyz.h into files named "relax_myrelaxator.c"
4070  * and "relax_myrelaxator.h".
4071  * \n
4072  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4073  * -# Use SCIPincludeRelaxMyrelaxator() in order to include the relaxation handler into your SCIP instance,
4074  * e.g, in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
4075  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "myrelaxator".
4076  * -# Adjust the properties of the relaxation handler (see \ref RELAX_PROPERTIES).
4077  * -# Define the relaxation handler data (see \ref RELAX_DATA). This is optional.
4078  * -# Implement the interface methods (see \ref RELAX_INTERFACE).
4079  * -# Implement the fundamental callback methods (see \ref RELAX_FUNDAMENTALCALLBACKS).
4080  * -# Implement the additional callback methods (see \ref RELAX_ADDITIONALCALLBACKS). This is optional.
4081  *
4082  *
4083  * @section RELAX_PROPERTIES Properties of a Relaxation Handler
4084  *
4085  * At the top of the new file "relax_myrelaxator.c" you can find the relaxation handler properties.
4086  * These are given as compiler defines.
4087  * In the C++ wrapper class, you have to provide the relaxation handler properties by calling the constructor
4088  * of the abstract base class scip::ObjRelax from within your constructor.
4089  * The properties you have to set have the following meaning:
4090  *
4091  * \par RELAX_NAME: the name of the relaxation handler.
4092  * This name is used in the interactive shell to address the relaxation handler.
4093  * Additionally, if you are searching for a relaxation handler with SCIPfindRelax(), this name is looked up.
4094  * Names have to be unique: no two relaxation handlers may have the same name.
4095  *
4096  * \par RELAX_DESC: the description of the relaxation handler.
4097  * This string is printed as a description of the relaxation handler in the interactive shell.
4098  *
4099  * \par RELAX_PRIORITY: the priority of the relaxation handler.
4100  * During each relaxation solving round, the included relaxation handlers and the
4101  * price-and-cut loop for solving the LP relaxation are called in a predefined order, which is given by the priorities
4102  * of the relaxation handlers.
4103  * First, the relaxation handlers with non-negative priority are called in the order of decreasing priority.
4104  * Next, the price-and-cut loop for solving the LP relaxation is executed.
4105  * Finally, the relaxation handlers with negative priority are called in the order of decreasing priority.
4106  * \n
4107  * Usually, you will have only one relaxation handler in your application and thus only have to decide whether it should
4108  * be called before or after solving the LP relaxation. For this decision you should consider the complexity of
4109  * the relaxation solving algorithm and the impact of the resulting solution: if your relaxation handler provides a fast
4110  * algorithm that usually has a high impact (i.e. the relaxation is a good approximation of the
4111  * feasible region of the subproblem and the solution severely improves the dual bound), it should have a non-negative
4112  * priority.
4113  * \n
4114  * Note that for certain applications, it is useful to disable the LP relaxation and only use your custom relaxation.
4115  * This can easily be achieved by setting the "lp/solvefreq" parameter to -1.
4116  *
4117  * \par RELAX_FREQ: the default frequency for solving the relaxation.
4118  * The frequency defines the depth levels at which the relaxation solving method \ref RELAXEXEC is called.
4119  * For example, a frequency of 7 means, that the relaxation solving callback is executed for subproblems that are in depth
4120  * 0, 7, 14, ... of the branching tree. A frequency of 0 means that the callback is only executed at the root node, i.e.,
4121  * only the relaxation of the root problem is solved. A frequency of -1 disables the relaxation handler.
4122  *
4123  *
4124  *
4125  * @section RELAX_DATA Relaxation Handler Data
4126  *
4127  * Below the header "Data structures" you can find a struct which is called "struct SCIP_RelaxData".
4128  * In this data structure, you can store the data of your relaxation handler. For example, you should store the adjustable
4129  * parameters of the relaxation handler in this data structure.
4130  * If you are using C++, you can add relaxation handler data as usual as object variables to your class.
4131  * \n
4132  * Defining relaxation handler data is optional. You can leave the struct empty.
4133  *
4134  *
4135  * @section RELAX_INTERFACE Interface Methods
4136  *
4137  * At the bottom of "relax_myrelaxator.c", you can find the interface method SCIPincludeRelaxMyrelaxator(),
4138  * which also appears in "relax_myrelaxator.h".
4139  * SCIPincludeRelaxMyrelaxator() is called by the user, if (s)he wants to include the relaxation handler,
4140  * i.e., if (s)he wants to use the relaxation handler in his/her application.
4141  *
4142  * This method only has to be adjusted slightly.
4143  * It is responsible for notifying SCIP of the presence of the relaxation handler. For this, you can either call
4144  * SCIPincludeRelax(),
4145  * or SCIPincludeRelaxBasic() since SCIP version 3.0. In the latter variant, \ref RELAX_ADDITIONALCALLBACKS "additional callbacks"
4146  * must be added via setter functions as, e.g., SCIPsetRelaxCopy(). We recommend this latter variant because
4147  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
4148  * variant must be manually adjusted with every SCIP release containing new callbacks for relaxation handlers in order to compile.
4149  *
4150  * If you are using relaxation handler data, you have to allocate the memory for the data at this point.
4151  * You can do this by calling:
4152  * \code
4153  * SCIP_CALL( SCIPallocBlockMemory(scip, &relaxdata) );
4154  * \endcode
4155  * You also have to initialize the fields in struct SCIP_RelaxData afterwards.
4156  *
4157  * You may also add user parameters for your relaxation handler, see the method SCIPincludeConshdlrKnapsack() in
4158  * the \ref cons_knapsack.h "knapsack constraint handler" for an example of how to add user parameters.
4159  *
4160  *
4161  * @section RELAX_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Relaxation Handler
4162  *
4163  * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
4164  * an operational algorithm.
4165  * They are passed together with the relaxation handler itself to SCIP using SCIPincludeRelax() or SCIPincludeRelaxBasic(),
4166  * see @ref RELAX_INTERFACE.
4167  *
4168  *
4169  * Relaxation handler plugins have only one fundamental callback method, namely the \ref RELAXEXEC method.
4170  * This method has to be implemented for every relaxation handler; the other callback methods are optional.
4171  * In the C++ wrapper class scip::ObjRelax, the scip_exec() method (which corresponds to the \ref RELAXEXEC callback) is a virtual
4172  * abstract member function.
4173  * You have to implement it in order to be able to construct an object of your relaxation handler class.
4174  *
4175  * Additional documentation for the callback methods can be found in type_relax.h.
4176  *
4177  * @subsection RELAXEXEC
4178  * The RELAXEXEC is called in each relaxation solving round. It should solve the current
4179  * subproblem's relaxation.
4180  *
4181  * Note that, like the LP relaxation, the relaxation handler should only operate on variables for which the corresponding
4182  * column exists in the transformed problem. Typical methods called by a relaxation handler are SCIPconstructLP() and SCIPflushLP() to
4183  * make sure that the LP of the current node is constructed and its data can be accessed via calls to SCIPgetLPRowsData()
4184  * and SCIPgetLPColsData(), and SCIPseparateSol() to call the cutting plane separators for a given primal solution.
4185  *
4186  * The lowerbound computed by the relaxation should be returned in the lowerbound pointer. If the relaxation improves on the best
4187  * relaxation already computed (either <code>SCIPisRelaxSolValid()</code> returns FALSE, meaning that no relaxation solution
4188  * is available so far, or the lowerbound is larger than the value returned by <code>SCIPgetRelaxSolObj()</code>), then the primal
4189  * solution of the relaxation should be stored inside the data structures of SCIP with <code>SCIPsetRelaxSolVal()</code>,
4190  * <code>SCIPsetRelaxSolVals()</code> or <code>SCIPsetRelaxSolValsSol()</code>. If you set the values one by one, you will need to call
4191  * <code>SCIPmarkRelaxSolValid()</code> to inform SCIP that the solution is complete and valid. With the "includeslp" argument of
4192  * <code>SCIPsetRelaxSolVals()</code>, <code>SCIPsetRelaxSolValsSol()</code> and <code>SCIPmarkRelaxSolValid()</code> you need to tell SCIP
4193  * whether the relaxation included all lp rows. In this case, the solution will be enforced and, if feasible, added to the solution storage if the
4194  * lowerbound of this relaxator is larger than the LP's. You may also call SCIPtrySolFree() directly from the
4195  * relaxation handler to make sure that a solution is added to the solution storage if it is feasible, even if the relaxator does not
4196  * include the LP or another relaxator produced a stronger bound. Also note that when setting the values of the relaxation solution one by one,
4197  * the objective value of the relaxation solution will be updated incrementally. If the whole solution should be updated, using SCIPsetRelaxSolVals()
4198  * instead or calling SCIPclearRelaxSolVals() before setting the first value to reset the solution and the objective value to 0 may help the numerics.
4199  * Furthermore, there is a list of external branching candidates, that can be filled by relaxation handlers and constraint handlers,
4200  * allowing branching rules to take these candidates as a guide on how to split the problem into subproblems. If the relaxation
4201  * solution is enforced, the integrality constraint handler will add external branching candidates for the relaxation solution
4202  * automatically, but the relaxation handler can also directly call <code>SCIPaddExternBranchCand()</code>.
4203  *
4204  * Usually, the RELAXEXEC callback only solves the relaxation and provides a lower (dual) bound through the corresponding pointer and
4205  * possibly a solution through <code>SCIPsetRelaxSolVal()</code> calls.
4206  * However, it may also produce domain reductions, add additional constraints or generate cutting planes. It has the
4207  * following options:
4208  * - detecting that the node is infeasible in the variable's bounds and can be cut off (result SCIP_CUTOFF)
4209  * - adding an additional constraint and stating that the relaxation handler should not be called again on the same
4210  * relaxation (result SCIP_CONSADDED)
4211  * - reducing a variable's domain and stating that the relaxation handler should not be called again on the same
4212  * relaxation (result SCIP_REDUCEDDOM)
4213  * - adding a cutting plane to the LP and stating that the relaxation handler should not be called again on the same
4214  * relaxation (result SCIP_SEPARATED)
4215  * - stating that the relaxation handler solved the relaxation and should not be called again on the same relaxation
4216  * (result SCIP_SUCCESS)
4217  * - interrupting the solving process to wait for additional input, e.g., cutting planes (result SCIP_SUSPENDED)
4218  * - stating that the separator was skipped (result SCIP_DIDNOTRUN).
4219  *
4220  * In the above criteria, "the same relaxation" means that the LP relaxation stayed unmodified. This means in particular
4221  * that no row has been added and no bounds have been modified. For example, changing the bounds of a variable will, as
4222  * long as it was a COLUMN variable, lead to a modification in the LP such that the relaxation handler is called again
4223  * after it returned with the result code SCIP_REDUCEDDOM. If the relaxation solution should be enforced, the relaxation
4224  * handler has to produce a new solution in this case which satisfies the updated LP. If a relaxation handler should only run
4225  * once per node to compute a lower bound, it should store the node of the last relaxation call itself and return
4226  * SCIP_DIDNOTRUN for subsequent calls in the same node.
4227  *
4228  *
4229  * @section RELAX_ADDITIONALCALLBACKS Additional Callback Methods of a Relaxation Handler
4230  *
4231  * The additional callback methods do not need to be implemented in every case. However, some of them have to be
4232  * implemented for most applications, they can be used, for example, to initialize and free private data.
4233  * Additional callbacks can either be passed directly with SCIPincludeRelax() to SCIP or via specific
4234  * <b>setter functions</b> after a call of SCIPincludeRelaxBasic(), see also @ref RELAX_INTERFACE.
4235  *
4236  * @subsection RELAXFREE
4237  *
4238  * If you are using relaxation handler data, you have to implement this method in order to free the relaxation handler
4239  * data. This can be done by the following procedure:
4240  *
4241  * @refsnippet{tests/src/relax/relax.c,SnippetRelaxFreeUnittest}
4242  *
4243  * If you have allocated memory for fields in your relaxation handler data, remember to free this memory
4244  * before freeing the relaxation handler data itself.
4245  * If you are using the C++ wrapper class, this method is not available.
4246  * Instead, just use the destructor of your class to free the member variables of your class.
4247  *
4248  * @subsection RELAXINIT
4249  *
4250  * The RELAXINIT callback is executed after the problem is transformed.
4251  * The relaxation handler may, e.g., use this call to initialize its relaxation handler data.
4252  *
4253  * @subsection RELAXCOPY
4254  *
4255  * The RELAXCOPY callback is executed when a SCIP instance is copied, e.g. to
4256  * solve a sub-SCIP. By
4257  * defining this callback as
4258  * <code>NULL</code> the user disables the execution of the specified
4259  * relaxation handler for all copied SCIP instances. This may deteriorate the performance
4260  * of primal heuristics using sub-SCIPs.
4261  *
4262  * @subsection RELAXEXIT
4263  *
4264  * The RELAXEXIT callback is executed before the transformed problem is freed.
4265  * In this method, the relaxation handler should free all resources that have been allocated for the solving process in
4266  * RELAXINIT.
4267  *
4268  * @subsection RELAXINITSOL
4269  *
4270  * The RELAXINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
4271  * begin. The relaxation handler may use this call to initialize its branch-and-bound specific data.
4272  *
4273  * @subsection REALXEXITSOL
4274  *
4275  * The RELAXEXITSOL callback is executed before the branch-and-bound process is freed.
4276  * The relaxation handler should use this call to clean up its branch-and-bound data.
4277  */
4278 
4279 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4280 
4281 /**@page READER How to add file readers
4282  *
4283  * Mainly, file readers are called to parse an input file and generate a constraint integer programming model. They
4284  * create constraints and variables and activate variable pricers if necessary. However, they can also be called, for
4285  * example, to parse an input file containing information about a primal solution or fixing of variables. Besides that
4286  * it is possible to use some of them for writing (exporting) the problem in a specific format. \n A complete list of
4287  * all file readers contained in this release can be found \ref FILEREADERS "here".
4288  *
4289  * Since a file reader is also responsible for writing a file, the user may
4290  * ask why the readers have not the name "filehandler". This name would
4291  * represent this plugin much better than the used one.
4292  * \n
4293  * The used name "readers" is historically grown. In the beginning of SCIP
4294  * there was no need to write/export problems. Therefore, the the plugin
4295  * name "readers" was best fitting for this plugin since only reading was essential.
4296  * It turned out, however, that it is quite nice to write/export certain subproblem during
4297  * the solving process mainly for debugging. Therefore, a writing callback
4298  * was added to the "readers" plugin.
4299  *
4300  * We now explain how users can add their own file readers.
4301  * Take the file reader for MIPs in IBM's Mathematical Programming System format (src/scip/reader_mps.c) as an example.
4302  * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjReader wrapper
4303  * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_READER... callback methods.
4304  *
4305  * Additional documentation for the callback methods of a file reader can be found in the file type_reader.h.
4306  *
4307  * Here is what you have to do to implement a file reader named "myreader" in C:
4308  * -# Copy the template files src/scip/reader_xyz.c and src/scip/reader_xyz.h into files named
4309  * "reader_myreader.c" and "reader_myreader.h".
4310  * \n
4311  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4312  * -# Use SCIPincludeReaderMyreader() in order to include the file reader into your SCIP instance,
4313  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
4314  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "myreader".
4315  * -# Adjust the \ref READER_PROPERTIES "properties of the file reader".
4316  * -# Define the \ref READER_DATA "file reader data". This is optional.
4317  * -# Implement the \ref READER_INTERFACE "interface methods".
4318  * -# Implement the \ref READER_FUNDAMENTALCALLBACKS "fundamental callback methods".
4319  * -# Implement the \ref READER_ADDITIONALCALLBACKS "additional callback methods". This is optional.
4320  *
4321  *
4322  * @section READER_PROPERTIES Properties of a File Reader
4323  *
4324  * At the top of the new file "reader_myreader.c" you can find the file reader properties.
4325  * These are given as compiler defines.
4326  * In the C++ wrapper class, you have to provide the file reader properties by calling the constructor
4327  * of the abstract base class scip::ObjReader from within your constructor.
4328  * The properties you have to set have the following meaning:
4329  *
4330  * \par READER_NAME: the name of the file reader.
4331  * This name is used in the interactive shell to address the file reader.
4332  * Additionally, if you are searching for a file reader with SCIPfindReader(), this name is looked up.
4333  * Names have to be unique: no two file readers may have the same name.
4334  *
4335  * \par READER_DESC: the description of the file reader.
4336  * This string is printed as a description of the file reader in the interactive shell.
4337  *
4338  * \par READER_EXTENSION: the file name extension of the file reader.
4339  * Each file reader is hooked to a single file name extension. It is automatically called if the user wants to read in a
4340  * file of corresponding name. The extensions of the different file readers have to be unique.
4341  * Note that the additional extension '.gz', '.z', or '.Z' (indicating a gzip compressed file) are ignored for assigning
4342  * an input file to a reader.
4343  * \n
4344  * It is not possible to hook up a (single) file reader with more than one file extension.
4345  * It is, however, not necessary to implement the same (parsing/writing) methods more than once, if you want to
4346  * support several file extension with the same parser. To do so look at the files reader_lp.c
4347  * and reader_rlp.c. Both support the LP format.
4348  *
4349  *
4350  * @section READER_DATA File Reader Data
4351  *
4352  * Below the header "Data structures" you can find a struct which is called "struct SCIP_ReaderData".
4353  * In this data structure, you can store the data of your file reader. For example, you should store the adjustable
4354  * parameters of the file reader in this data structure.
4355  * If you are using C++, you can add file reader data as usual as object variables to your class.
4356  * \n
4357  * Defining file reader data is optional. You can leave the struct empty.
4358  *
4359  *
4360  * @section READER_INTERFACE Interface Methods
4361  *
4362  * At the bottom of "reader_myreader.c", you can find the interface method SCIPincludeReaderMyreader(),
4363  * which also appears in "reader_myreader.h".
4364  * SCIPincludeReaderMyreader() is called by the user, if (s)he wants to include the reader,
4365  * i.e., if (s)he wants to use the reader in his/her application.
4366  *
4367  * This method only has to be adjusted slightly.
4368  * It is responsible for notifying SCIP of the presence of the reader. For this, you can either call
4369  * SCIPincludeReader(),
4370  * or SCIPincludeReaderBasic() since SCIP version 3.0. In the latter variant, \ref READER_ADDITIONALCALLBACKS "additional callbacks"
4371  * must be added via setter functions as, e.g., SCIPsetReaderCopy(). We recommend this latter variant because
4372  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
4373  * variant must be manually adjusted with every SCIP release containing new callbacks for readers in order to compile.
4374  *
4375  * If you are using file reader data, you have to allocate the memory for the data at this point.
4376  * You can do this by calling:
4377  * \code
4378  * SCIP_CALL( SCIPallocBlockMemory(scip, &readerdata) );
4379  * \endcode
4380  * You also have to initialize the fields in struct SCIP_ReaderData afterwards.
4381  *
4382  * You may also add user parameters for your file reader, see the method SCIPincludeReaderLp() in
4383  * src/scip/reader_lp.c for an example.
4384  *
4385  *
4386  * @section READER_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a File Reader
4387  *
4388  * File reader plugins have no fundamental callback methods. This is due to
4389  * the fact that a file reader can be used for reading and/or writing a
4390  * file. A file reader is only useful if the reader method \ref READERREAD
4391  * and/or the writing method \ref READERWRITE is implemented. One of these
4392  * methods should be implemented for every file reader; the other callback
4393  * methods \ref READERCOPY and \ref READERFREE are optional. In the C++ wrapper class scip::ObjReader, the
4394  * scip_read() and scip_write() methods (which corresponds to the \ref
4395  * READERREAD and \ref READERWRITE callback) are virtual member
4396  * functions. At least one of them should be implemented.
4397  *
4398  * Additional documentation for the callback methods can be found in type_reader.h.
4399  *
4400  *
4401  * @section READER_ADDITIONALCALLBACKS Additional Callback Methods of a File Reader
4402  *
4403  * Additional callbacks can either be passed directly with SCIPincludeReader() to SCIP or via specific
4404  * <b>setter functions</b> after a call of SCIPincludeReaderBasic(), see also @ref READER_INTERFACE.
4405  *
4406  *
4407  * File reader plugins contain only additional callback methods, namely the methods \ref READERREAD,
4408  * \ref READERWRITE, \ref READERFREE, and \ref READERCOPY. Therefore, these are not needed to be implemented. However,
4409  * at least \ref READERREAD and/or \ref READERWRITE should be implemented (see notes
4410  * \ref READER_FUNDAMENTALCALLBACKS "above").
4411  *
4412  *
4413  * @subsection READERREAD
4414  *
4415  * The READERREAD callback is called when the user invokes SCIP to read in a file with file name extension
4416  * corresponding to the READER_EXTENSION property of the file reader. This is usually triggered by a call to the method
4417  * SCIPreadProb() or by an interactive shell command.
4418  * The READERREAD callback should parse the input file and perform the desired action, which usually means
4419  * generating a constraint integer programming model, adding a primal solution, fixing variables
4420  * in an existing model.
4421  * \n
4422  * Typical methods called by a file reader that is used to read/generate constraint
4423  * integer programming models are, for example,
4424  *
4425  * - creating an empty problem: SCIPcreateProb()
4426  * - creating the variables: SCIPcreateVar(), SCIPchgVarType(), SCIPchgVarLb(), SCIPchgVarUb(), SCIPaddVar(), and
4427  * SCIPreleaseVar()
4428  * - modifying the objective function: SCIPchgVarObj() and SCIPsetObjsense().
4429  * - creating the constraints: SCIPcreateConsLinear(), SCIPaddCoefLinear(), SCIPchgLhsLinear(), SCIPchgRhsLinear(),
4430  * SCIPaddCons(), and SCIPreleaseCons()
4431  *
4432  * Primal solutions can only be created for the transformed problem. Therefore, the user has to call SCIPtransformProb()
4433  * before (s)he reads in the file containing the solution and adds it to the solution pool via the method SCIPreadSol().
4434  *
4435  *
4436  * @subsection READERWRITE
4437  *
4438  * The READERWRITE callback is called when the user invokes SCIP to write a problem (original or transformed)
4439  * in the format the reader supports. This is only possible if this callback is implemented. To write the problem
4440  * all necessary information is given through the parameters of this callback method (see type_reader.h). This
4441  * information should be used to output the problem in the requested format. This callback method is usually
4442  * triggered by the call of the methods SCIPwriteOrigProblem(), SCIPwriteTransProblem(), SCIPprintOrigProblem(),
4443  * or SCIPprintTransProblem().
4444  * \n
4445  * A typical method called by a file reader which is used to write/export a constraint
4446  * integer programming model is SCIPinfoMessage(). This method outputs a given string into a file
4447  * or into stdout.
4448  * \n
4449  * For an example we refer to the writing method of the MPS reader (see reader_mps.c).
4450  *
4451  *
4452  * @subsection READERCOPY
4453  *
4454  * The READERCOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
4455  * callback as <code>NULL</code> the user disables the execution of the specified reader for all copied SCIP
4456  * instances. The question might arise why to copy that plugin. In case of debugging it is nice to be able to
4457  * write/display the copied instances. Since the reader is in charge of that, you might want to copy the plugin. Below
4458  * you see a standard implementation.
4459  *
4460  * @refsnippet{src/scip/reader_mps.c,SnippetReaderCopyMps}
4461  *
4462  * @subsection READERFREE
4463  *
4464  * If you are using file reader data, you have to implement this method in order to free the file reader data.
4465  * This can be done by the following procedure:
4466  *
4467  * @refsnippet{src/scip/reader_mps.c,SnippetReaderFreeMps}
4468  *
4469  * If you have allocated memory for fields in your file reader data, remember to free this memory
4470  * before freeing the file reader data itself.
4471  * If you are using the C++ wrapper class, this method is not available.
4472  * Instead, just use the destructor of your class to free the member variables of your class.
4473  *
4474  */
4475 
4476 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4477 
4478 /**@page DIALOG How to add dialogs
4479  *
4480  * SCIP comes with a command line shell which allows the user to read in problem instances, modify the solver's
4481  * parameters, initiate the optimization and display certain statistics and solution information. This shell consists
4482  * of dialogs, which are organized as a tree in SCIP. A node of this tree which is not a leaf represents a menu in
4483  * the shell and the children of this node correspond to the entries of this menu (which can again be menus). All
4484  * different dialogs are managed by a dialog handler, which, in particular, is responsible for executing the dialog
4485  * corresponding to the user's command in the shell. The concept of a dialog handler is different to that
4486  * of a constraint handler, which is used to manage objects of the same structure, see \ref CONS. In particular, SCIP
4487  * features only one dialog handler (dialog_default.h), whereas there may exist different constraint handlers.
4488  * \n
4489  * A complete list of all dialogs contained in this release can be found \ref DIALOGS "here".
4490  *
4491  * We now explain how users can extend the interactive shell by adding their own dialog.
4492  * We give the explanation for creating your own source file for each additional dialog. Of course, you can collect
4493  * different dialogs in one source file. Take src/scip/dialog_default.c, where all default dialog plugins are collected, as an
4494  * example.
4495  * As all other default plugins, the default dialog plugin and the template dialog are written in C. C++ users can easily
4496  * adapt the code by using the scip::ObjDialog wrapper base class and implement the scip_...() virtual methods instead of the
4497  * SCIP_DECL_DIALOG... callback methods.
4498  *
4499  * Additional documentation for the callback methods of a dialog can be found in the file type_dialog.h.
4500  *
4501  * Here is what you have to do to add a dialog (assuming your dialog is named "mydialog"):
4502  * -# Copy the template files src/scip/dialog_xyz.c and src/scip/dialog_xyz.h into files named "dialog_mydialog.c"
4503  * and "dialog_mydialog.h".
4504  * \n
4505  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4506  * -# Use SCIPincludeDialogMydialog() in order to include the dialog handler into your SCIP instance,
4507  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
4508  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mydialog".
4509  * -# Adjust the \ref DIALOG_PROPERTIES "properties of the dialog".
4510  * -# Define the \ref DIALOG_DATA "dialog data". This is optional.
4511  * -# Implement the \ref DIALOG_INTERFACE "interface methods".
4512  * -# Implement the \ref DIALOG_FUNDAMENTALCALLBACKS "fundamental callback methods".
4513  * -# Implement the \ref DIALOG_ADDITIONALCALLBACKS "additional callback methods". This is optional.
4514  *
4515  *
4516  * @section DIALOG_PROPERTIES Properties of a Dialog
4517  *
4518  * At the top of the new file "dialog_mydialog.c" you can find the dialog properties.
4519  * These are given as compiler defines.
4520  * In the C++ wrapper class, you have to provide the dialog properties by calling the constructor
4521  * of the abstract base class scip::ObjDialog from within your constructor.
4522  * The properties you have to set have the following meaning:
4523  *
4524  * \par DIALOG_NAME: the name of the dialog.
4525  * In the interactive shell, this name appears as the command name of the dialog in the parent dialog.
4526  * Additionally, if you are searching an entry in a menu with SCIPdialogFindEntry(), this name is looked up.
4527  * Names within one menu have to be unique: no two dialogs in the same menu may have the same name.
4528  *
4529  * \par DIALOG_DESC: the description of the dialog.
4530  * This string is printed as a description of the dialog in the interactive shell if the additional
4531  * callback method \ref DIALOGDESC is not implemented.
4532  *
4533  * \par DIALOG_ISSUBMENU: whether the dialog is a (sub)menu.
4534  * This parameter states whether the dialog is a menu in the interactive shell, i.e., is the parent of further
4535  * dialogs.
4536  *
4537  *
4538  * @section DIALOG_DATA Dialog Data
4539  *
4540  * Below the header "Data structures" you can find a struct which is called "struct SCIP_DialogData".
4541  * In this data structure, you can store the data of your dialog.
4542  * If you are using C++, you can add dialog data as usual as object variables to your class.
4543  * \n
4544  * Defining dialog data is optional. You can leave the struct empty.
4545  *
4546  *
4547  * @section DIALOG_INTERFACE Interface Methods
4548  *
4549  * At the bottom of "dialog_mydialog.c" you can find the interface method SCIPincludeDialogMydialog(), which also appears
4550  * in "dialog_mydialog.h".
4551  * \n
4552  * This method only has to be adjusted slightly.
4553  * It is responsible for notifying SCIP of the presence of the dialog, which can be done by the following lines of code:
4554  *
4555  * @refsnippet{src/scip/dialog_xyz.c,SnippetDialogAddXyz}
4556  *
4557  * Here "parentdialog" has to be an existing dialog which is defined to be a menu (see DIALOG_ISSUBMENU), e.g.,
4558  * the default root dialog. The method SCIPgetRootDialog() returns the root dialog.
4559  *
4560  * The interface method is called by the user, if (s)he wants to include the dialog, i.e., if (s)he wants to use the dialog in
4561  * his/her application.
4562  * Note that in order to be able to link the new dialog to an existing default dialog
4563  * (except the root dialog) it has to be included <b>after the
4564  * default dialogs plugin</b>, i.e., the SCIPincludeDialogMydialog() call has to occur after the
4565  * SCIPincludeDialogDefault() call. The SCIPincludeDialogDefault() method is called from within the SCIPincludeDefaultPlugins()
4566  * method. Therefore, it suffices to include your dialog plugins after you have called SCIPincludeDefaultPlugins().
4567  * In case you want to add a dialog to the <b>root dialog</b>, you just use the following
4568  * lines of code to get/create the root dialog.
4569  *
4570  * \code
4571  * SCIP_DIALOG* root;
4572  *
4573  * root = SCIPgetRootDialog(scip);
4574  * if( root == NULL )
4575  * {
4576  * SCIP_CALL( SCIPcreateRootDialog(scip, &root) );
4577  * }
4578  * assert( root != NULL );
4579  * \endcode
4580  *
4581  * Therefore, in this case you do not have to worry about the calls of
4582  * SCIPincludeDialogDefault() and SCIPincludeDefaultPlugins() .
4583  *
4584  * If you are using dialog data, you have to allocate the memory for the data at this point.
4585  * You can do this by calling:
4586  * \code
4587  * SCIP_CALL( SCIPallocBlockMemory(scip, &dialogdata) );
4588  * \endcode
4589  * You also have to initialize the fields in struct SCIP_DialogData afterwards.
4590  *
4591  * Consider the following example. The user wants to add a "drawgraph" command to the root menu of SCIP.
4592  * (S)he copies the "dialog_xyz.c" and "dialog_xyz.h" files into files "dialog_drawgraph.c" and "dialog_drawgraph.h", respectively.
4593  * Then, (s)he puts the following code into the SCIPincludeDialogDrawgraph() method, compare SCIPincludeDialogDefault() in
4594  * src/scip/dialog_default.c:
4595  * \code
4596  * SCIP_RETCODE SCIPincludeDialogDrawgraph(
4597  * SCIP* scip
4598  * )
4599  * {
4600  * SCIP_DIALOG* root;
4601  * SCIP_DIALOG* dialog;
4602  *
4603  * root = SCIPgetRootDialog(scip);
4604  * if( root == NULL )
4605  * {
4606  * SCIP_CALL( SCIPcreateRootDialog(scip, &root) );
4607  * }
4608  * assert( root != NULL );
4609  *
4610  * if( !SCIPdialogHasEntry(root, "drawgraph") )
4611  * {
4612  * SCIP_CALL( SCIPcreateDialog(scip, &dialog, SCIPdialogExecDrawgraph, NULL, NULL,
4613  * "drawgraph", "draws the graph for the current problem instance", FALSE, NULL) );
4614  * SCIP_CALL( SCIPaddDialogEntry(scip, root, dialog) );
4615  * SCIP_CALL( SCIPreleaseDialog(scip, &dialog) );
4616  * }
4617  *
4618  * return SCIP_OKAY;
4619  * }
4620  * \endcode
4621  *
4622  * Using this code, it is even possible to call SCIPincludeDialogDrawgraph() before including the default dialog plugins,
4623  * and you can also call it multiple times without causing inconsistencies in the dialog structure.
4624  *
4625  *
4626  * @section DIALOG_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Dialog
4627  *
4628  * Dialogs have only one fundamental callback method, namely the \ref DIALOGEXEC method.
4629  * This method has to be implemented for every dialog; the other callback methods are optional.
4630  * In the C++ wrapper class scip::ObjDialog, the scip_exec() method (which corresponds to the \ref DIALOGEXEC callback) is a virtual
4631  * abstract member function.
4632  * You have to implement it in order to be able to construct an object of your dialog class.
4633  *
4634  * Additional documentation for the callback methods can be found in type_dialog.h.
4635  *
4636  * @subsection DIALOGEXEC
4637  *
4638  * The DIALOGEXEC method is invoked, if the user selected the dialog's command name in the parent's menu. It should
4639  * execute what is stated in DIALOG_DESC, e.g., the display constraint handlers dialog should display information about
4640  * the constraint handlers included in SCIP, see src/scip/dialog_default.c.
4641  *
4642  * For typical methods called by the execution method, have a look at src/scip/dialog_default.c.
4643  *
4644  * The callback has to return which dialog should be processed next. This can be, for example, the root dialog
4645  * (SCIPdialoghdlrGetRoot()), the parent dialog (SCIPdialogGetParent()) or NULL, which stands for closing the interactive
4646  * shell.
4647  *
4648  *
4649  * @section DIALOG_ADDITIONALCALLBACKS Additional Callback Methods of a Dialog
4650  *
4651  * The additional callback methods do not need to be implemented in every case.
4652  * They can be used, for example, to free private data.
4653  *
4654  * @subsection DIALOGFREE
4655  *
4656  * If you are using dialog data, you have to implement this method in order to free the dialog data.
4657  * This can be done by the following procedure:
4658  * \code
4659  * static
4660  * SCIP_DECL_DIALOGFREE(dialogFreeMydialog)
4661  * {
4662  * SCIP_DIALOGDATA* dialogdata;
4663  *
4664  * dialogdata = SCIPdialogGetData(dialog);
4665  * assert(dialogdata != NULL);
4666  *
4667  * SCIPfreeMemory(scip, &dialogdata);
4668  *
4669  * SCIPdialogSetData(dialog, NULL);
4670  *
4671  * return SCIP_OKAY;
4672  * }
4673  * \endcode
4674  * If you have allocated memory for fields in your dialog data, remember to free this memory
4675  * before freeing the dialog data itself.
4676  * If you are using the C++ wrapper class, this method is not available.
4677  * Instead, just use the destructor of your class to free the member variables of your class.
4678  *
4679  * @subsection DIALOGDESC
4680  *
4681  * This method is called when the help menu of the parent is displayed. It should output (usually a single line of)
4682  * information describing the meaning of the dialog.
4683  * \n
4684  * If this callback is not implemented, the description string of the dialog (DIALOG_DESC) is displayed instead.
4685  *
4686  * @subsection DIALOGCOPY
4687  *
4688  * The DIALOGCOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
4689  * callback as <code>NULL</code> the user disables the execution of this dialog for all copied SCIP instances. In
4690  * general there is no need to copy any dialog since it is most unlikely to start the interactive shell of the copied
4691  * instances.
4692  *
4693  */
4694 
4695 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4696 
4697 /**@page DISP How to add display columns
4698  *
4699  * While solving a constraint integer program, SCIP displays status information in a column-like fashion. The current
4700  * number of processed branching tree nodes, the solving time, and the relative gap between primal and dual bound are
4701  * examples of such display columns. There already exists a wide variety of display columns which can be activated or
4702  * deactivated on demand, see src/scip/disp_default.c. Additionally, the user can implement his/her own display columns
4703  * in order to track problem or algorithm specific values.
4704  * \n
4705  * A complete list of all displays contained in this release can be found \ref DISPLAYS "here".
4706  *
4707  * We now explain how users can add their own display columns.
4708  * We give the explanation for creating your own source file for each additional display column. Of course, you can collect
4709  * different additional display columns in one source file.
4710  * Take src/scip/disp_default.c, where all default display columns are collected, as an example.
4711  * As all other default plugins, the default display column plugins and the display column template are written in C.
4712  * C++ users can easily adapt the code by using the scip::ObjDisp wrapper base class and implement the scip_...() virtual methods
4713  * instead of the SCIP_DECL_DISP... callback methods.
4714  *
4715  *
4716  * Additional documentation for the callback methods of a display column can be found in the file type_disp.h.
4717  *
4718  * Here is what you have to do to implement a display column (assuming your display column is named "mydisplaycolumn"):
4719  * -# Copy the template files src/scip/disp_xyz.c and src/scip/disp_xyz.h into files named "disp_mydisplaycolumn.c"
4720  * and "disp_mydisplaycolumn.h".
4721  \n
4722  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4723  * -# Use SCIPincludeDispMydisplaycolumn() in order to include the display column into your SCIP instance,
4724  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
4725  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mydisplaycolumn".
4726  * -# Adjust the \ref DISP_PROPERTIES "properties of the display column".
4727  * -# Define the \ref DISP_DATA "display column data". This is optional.
4728  * -# Implement the \ref DISP_INTERFACE "interface methods".
4729  * -# Implement the \ref DISP_FUNDAMENTALCALLBACKS "fundamental callback methods".
4730  * -# Implement the \ref DISP_ADDITIONALCALLBACKS "additional callback methods". This is optional.
4731  *
4732  *
4733  * @section DISP_PROPERTIES Properties of a Display Column
4734  *
4735  * At the top of the new file "disp_mydisplaycolumn.c" you can find the display column properties.
4736  * These are given as compiler defines.
4737  * In the C++ wrapper class, you have to provide the display column properties by calling the constructor
4738  * of the abstract base class scip::ObjDisp from within your constructor.
4739  * The properties you have to set have the following meaning:
4740  *
4741  * \par DISP_NAME: the name of the display column.
4742  * This name is used in the interactive shell to address the display column.
4743  * Additionally, if you are searching for a display column with SCIPfindDisp(), this name is looked up.
4744  * Names have to be unique: no two display columns may have the same name.
4745  *
4746  * \par DISP_DESC: the description of the display column.
4747  * This string is printed as a description of the display column in the interactive shell.
4748  *
4749  * \par DISP_HEADER: the header of the display column.
4750  * This string is printed as the header of the display column in the status information display.
4751  *
4752  * \par DISP_WIDTH: the width of the display column.
4753  * This parameter defines the width (number of characters) of the display column. The value of the parameter has to be
4754  * greater than or equal to the number of characters in the header string.
4755  *
4756  * \par DISP_PRIORITY: the priority of the display column.
4757  * The total width of status information lines is bounded by the parameter "display width". The display columns actually contained
4758  * in the status information display are selected in decreasing order of their priority. Furthermore, the user can force
4759  * columns to be displayed or not to be displayed in the status information display. For that, (s)he has to switch the value
4760  * of the display column's parameter "active" from "auto" (its default value) to "on" or "off", respectively.
4761  *
4762  * \par DISP_POSITION: the relative position of the display column.
4763  * In the status information display, the display columns are arranged from left to right in increasing order of their
4764  * relative position.
4765  *
4766  * \par DISP_STRIPLINE: the default for whether the display column should be separated with a line from its right neighbor.
4767  * This parameter states whether the display column should be separated with the string "|" from its right neighbor. In so
4768  * doing, the clearness of the status information display may improve.
4769  *
4770  * @section DISP_DATA Display Column Data
4771  *
4772  * Below the header "Data structures" you can find a struct which is called "struct SCIP_DispData".
4773  * In this data structure, you can store the data of your display column. For example, you should store the adjustable
4774  * parameters of the display column in this data structure.
4775  * If you are using C++, you can add display column data as usual as object variables to your class.
4776  * \n
4777  * Defining display column data is optional. You can leave the struct empty.
4778  *
4779  *
4780  * @section DISP_INTERFACE Interface Methods
4781  *
4782  * At the bottom of "disp_mydisplaycolumn.c" you can find the interface method SCIPincludeDispMydisplaycolumn(), which also
4783  * appears in "disp_mydisplaycolumn.h".
4784  * \n
4785  * This method only has to be adjusted slightly.
4786  * It is responsible for notifying SCIP of the presence of the display column by calling the method
4787  * SCIPincludeDisp().
4788  *
4789  * The interface method is called by the user, if (s)he wants to include the display column, i.e., if (s)he wants to use the display column in his
4790  * application.
4791  *
4792  * If you are using display column data, you have to allocate the memory for the data at this point.
4793  * You can do this by calling:
4794  * \code
4795  * SCIP_CALL( SCIPallocBlockMemory(scip, &dispdata) );
4796  * \endcode
4797  * You also have to initialize the fields in struct SCIP_DispData afterwards.
4798  *
4799  * Although this is very uncommon, you may also add user parameters for your display column, see the method
4800  * SCIPincludeConshdlrKnapsack() in the \ref cons_knapsack.h "knapsack constraint handler" for an example.
4801  *
4802  *
4803  * @section DISP_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Display Column
4804  *
4805  * Display column plugins have only one fundamental callback method, namely the \ref DISPOUTPUT method.
4806  * This method has to be implemented for every display column; the other callback methods are optional.
4807  * In the C++ wrapper class scip::ObjDisp, the scip_output() method (which corresponds to the \ref DISPOUTPUT callback) is a virtual
4808  * abstract member function.
4809  * You have to implement it in order to be able to construct an object of your display column class.
4810  *
4811  * Additional documentation for the callback methods can be found in type_disp.h.
4812  *
4813  * @subsection DISPOUTPUT
4814  *
4815  * The DISPOUTPUT callback is called after each pricing loop during node processing and after a node has been processed.
4816  * In addition, at the root node, the callback is executed after each iteration of the price-and-cut loop.
4817  * It should write the display column information for the current node to a given output file stream.
4818  *
4819  * Typical methods called by a display column are, for example, SCIPdispLongint(), SCIPdispInt(), SCIPdispTime(), and
4820  * SCIPinfoMessage().
4821  *
4822  *
4823  * @section DISP_ADDITIONALCALLBACKS Additional Callback Methods of a Display Column
4824  *
4825  * The additional callback methods do not need to be implemented in every case.
4826  * They can be used, for example, to initialize and free private data.
4827  *
4828  * @subsection DISPCOPY
4829  *
4830  * The DISPCOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this callback
4831  * as <code>NULL</code> the user disables the execution of the specified column. In general it is probably not needed to
4832  * implement that callback since the output of the copied instance is usually suppressed. In the other case or for
4833  * debugging the callback should be implement.
4834  *
4835  *
4836  * @subsection DISPFREE
4837  *
4838  * If you are using display column data, you have to implement this method in order to free the display column data.
4839  * This can be done by the following procedure:
4840  * \code
4841  * static
4842  * SCIP_DECL_DISPFREE(dispFreeMydisplaycolumn)
4843  * {
4844  * SCIP_DISPDATA* dispdata;
4845  *
4846  * dispdata = SCIPdispGetData(disp);
4847  * assert(dispdata != NULL);
4848  *
4849  * SCIPfreeMemory(scip, &dispdata);
4850  *
4851  * SCIPdispSetData(disp, NULL);
4852  *
4853  * return SCIP_OKAY;
4854  * }
4855  * \endcode
4856  * If you have allocated memory for fields in your display column data, remember to free this memory
4857  * before freeing the display column data itself.
4858  * If you are using the C++ wrapper class, this method is not available.
4859  * Instead, just use the destructor of your class to free the member variables of your class.
4860  *
4861  * @subsection DISPINIT
4862  *
4863  * The DISPINIT callback is executed after the problem is transformed.
4864  * The display column may, e.g., use this call to initialize its display column data.
4865  *
4866  * @subsection DISPEXIT
4867  *
4868  * The DISPEXIT callback is executed before the transformed problem is freed.
4869  * In this method, the display column should free all resources that have been allocated for the solving process in
4870  * \ref DISPINIT.
4871  *
4872  * @subsection DISPINITSOL
4873  *
4874  * The DISPINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
4875  * begin. The display column may use this call to initialize its branch-and-bound specific data.
4876  *
4877  * @subsection DISPEXITSOL
4878  *
4879  * The DISPEXITSOL callback is executed before the branch-and-bound process is freed. The display column should use this
4880  * call to clean up its branch-and-bound specific data.
4881  */
4882 
4883 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4884 
4885 /**@page EVENT How to add event handler
4886  *
4887  * While solving a constraint integer program, SCIP drops thousands of events such as SCIP_EVENTTYPE_VARFIXED (a
4888  * complete list of all events is given in type_event.h). These events can be caught and used to do something after a
4889  * certain event happens. Events can be used to speed up the solution process. For example, the set partitioning
4890  * constraint is only worth propagating if one of the involved variables is fixed. This can be detected by
4891  * catching the event SCIP_EVENTTYPE_VARFIXED. To be able to catch an event it is necessary to write an event handler
4892  * which defines what to do after a certain event was caught.
4893  *
4894  * We now explain how users can add their own event handlers. We give the explanation for creating your own
4895  * source file for each additional event handler. Of course, you can collect different event handlers in one source file
4896  * or you can put the event handler directly into the constraint handler. In a \ref EVENTUSAGE "second step" we discuss
4897  * the usage of an event handler. This means how to catch and drop events. \ref EVENTTYPES "Finally", we give some notes on the existing
4898  * types of events.
4899  *
4900  * Take src/scip/cons_logior.c, where the event handler is directly included into the constraint handler. As all other
4901  * default plugins, the event handlers are written in C. C++ users can easily adapt the code by using the scip::ObjEventhdlr
4902  * wrapper base class and implement the scip_...() virtual methods instead of the SCIP_DECL_EVENT... callback methods.
4903  *
4904  * Additional documentation for the callback methods of an event handler can be found in the file type_event.h. There is
4905  * also an example written in C which deals with an event handler. You find this example in the directory
4906  * "examples/Eventhdlr/". An C++ example can be found within the TSP project (examples/TSP/src/EventhdlrNewSol.cpp).
4907  *
4908  * Here is what you have to do to implement an event handler (assuming your event handler is named "bestsol"):
4909  * -# Copy the template files src/scip/event_xyz.c and src/scip/event_xyz.h into files named "event_bestsol.c"
4910  * and "event_bestsol.h".
4911  \n
4912  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4913  * -# Use SCIPincludeEventBestsol() in order to include the event handler into your SCIP instance,
4914  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Eventhdlr example).
4915  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "bestsol".
4916  * -# Adjust the \ref EVENTHDLR_PROPERTIES "properties of the event handler".
4917  * -# Implement the \ref EVENT_INTERFACE "interface methods".
4918  * -# Implement the \ref EVENT_FUNDAMENTALCALLBACKS "fundamental callback methods".
4919  * -# Implement the \ref EVENT_ADDITIONALCALLBACKS "additional callback methods". This is optional.
4920  *
4921  *
4922  * @section EVENTHDLR_PROPERTIES Properties of a Event Handler
4923  *
4924  * At the top of the new file "event_bestsol.c" you can find the event handler properties.
4925  * These are given as compiler defines.
4926  * In the C++ wrapper class, you have to provide the event handler properties by calling the constructor
4927  * of the abstract base class scip::ObjEventhdlr from within your constructor.
4928  * The properties you have to set have the following meaning:
4929  *
4930  * \par EVENT_NAME: the name of the event handler.
4931  * This name has to be unique with respect to all other event handlers. If you are searching for an event handler with
4932  * SCIPfindEventhdlr(), this name is looked up.
4933  *
4934  * \par EVENT_DESC: the description of the event handler.
4935  * This string is printed as a description of the event handler.
4936  *
4937  * @section EVENTHDLR_DATA Event Handler Data
4938  *
4939  * Below the header "Data structures" you can find a struct which is called "struct SCIP_EventhdlrData".
4940  * In this data structure, you can store the data of your event handler. For example, you should store the adjustable
4941  * parameters of the event handler in this data structure.
4942  * If you are using C++, you can add event handler data as usual as object variables to your class.
4943  * \n
4944  * Defining event handler data is optional. You can leave the struct empty.
4945  *
4946  *
4947  * @section EVENT_INTERFACE Interface Methods
4948  *
4949  * At the bottom of "event_bestsol.c", you can find the interface method SCIPincludeEventBestsol(),
4950  * which also appears in "event_bestsol.h".
4951  * SCIPincludeEventBestsol() is called by the user, if (s)he wants to include the event handler,
4952  * i.e., if (s)he wants to use the event handler in his/her application.
4953  *
4954  * This method only has to be adjusted slightly.
4955  * It is responsible for notifying SCIP of the presence of the event handler. For this, you can either call
4956  * SCIPincludeEventhdlr(),
4957  * or SCIPincludeEventhdlrBasic() since SCIP version 3.0. In the latter variant, \ref EVENT_ADDITIONALCALLBACKS "additional callbacks"
4958  * must be added via setter functions as, e.g., SCIPsetReaderCopy(). We recommend this latter variant because
4959  * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
4960  * variant must be manually adjusted with every SCIP release containing new callbacks for event handlers in order to compile.
4961  *
4962  * If you are using event handler data, you have to allocate the memory for the data at this point.
4963  * You can do this by calling:
4964  * \code
4965  * SCIP_CALL( SCIPallocBlockMemory(scip, &eventhdlrdata) );
4966  * \endcode
4967  * You also have to initialize the fields in struct SCIP_EventhdlrData afterwards.
4968  *
4969  * Although this is very uncommon, you may also add user parameters for your event handler, see the method
4970  * SCIPincludeConshdlrKnapsack() in the \ref cons_knapsack.h "knapsack constraint handler" for an example.
4971  *
4972  *
4973  * @section EVENT_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Event Handler
4974  *
4975  * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
4976  * an operational algorithm.
4977  * They are passed together with the event handler itself to SCIP using SCIPincludeEventhdlr() or SCIPincludeEventhdlrBasic(),
4978  * see @ref EVENT_INTERFACE.
4979  *
4980  *
4981  * Event handler plugins have only one fundamental callback method, namely the \ref EVENTEXEC method. This method has
4982  * to be implemented for every event handler; the other callback methods are optional. In the C++ wrapper class
4983  * scip::ObjEventhdlr, the scip_exec() method (which corresponds to the \ref EVENTEXEC callback) is a virtual abstract member
4984  * function. You have to implement it in order to be able to construct an object of your event handler class.
4985  *
4986  * Additional documentation for the callback methods can be found in type_event.h.
4987  *
4988  * @subsection EVENTEXEC
4989  *
4990  * The EVENTEXEC callback is called after the requested event happened. Then the event handler can do some action in
4991  * reaction to the event.
4992  *
4993  * Typical the execution method sets a parameter to TRUE to indicate later in solving process that something happened
4994  * which should be analyzed further. In the \ref cons_knapsack.h "knapsack constraint handler" you find such a typical
4995  * example.
4996  *
4997  * @section EVENT_ADDITIONALCALLBACKS Additional Callback Methods of a Event Handler
4998  *
4999  * The additional callback methods do not need to be implemented in every case. However, some of them have to be
5000  * implemented for most applications, they can be used, for example, to initialize and free private data.
5001  * Additional callbacks can either be passed directly with SCIPincludeEventhdlr() to SCIP or via specific
5002  * <b>setter functions</b> after a call of SCIPincludeEventhdlrBasic(), see also @ref EVENT_INTERFACE.
5003  *
5004  * @subsection EVENTCOPY
5005  *
5006  * The EVENTCOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
5007  * callback as <code>NULL</code> the user disables the execution of the specified event handler for all copied SCIP
5008  * instances. Note that in most cases the event handler in the copied instance will be initialize by those objects (such
5009  * as constraint handlers or propagators) which need this event handler (see \ref cons_knapsack.h). In these cases the copy
5010  * callback can be ignored. In case of general events, such as a new best solution being found
5011  * (SCIP_EVENTTYPE_BESTSOLFOUND), you might want to implement that callback. The event handler example which you find
5012  * in the directory "examples/Eventhdlr/" uses that callback.
5013  *
5014  * @refsnippet{src/scip/event_softtimelimit.c,SnippetEventCopySofttimelimit}
5015  *
5016  * @subsection EVENTFREE
5017  *
5018  * If you are using event handler data, you have to implement this method in order to free the event handler data.
5019  * This can be done by the following procedure:
5020  *
5021  * @refsnippet{src/scip/event_softtimelimit.c,SnippetEventFreeSofttimelimit}
5022  *
5023  * If you have allocated memory for fields in your event handler data, remember to free this memory
5024  * before freeing the event handler data itself.
5025  * If you are using the C++ wrapper class, this method is not available.
5026  * Instead, just use the destructor of your class to free the member variables of your class.
5027  *
5028  *
5029  * @subsection EVENTINIT
5030  *
5031  * The EVENTINIT callback is executed after the problem is transformed.
5032  * The event handler may, e.g., use this call to initialize its event handler data.
5033  *
5034  * @subsection EVENTEXIT
5035  *
5036  * The EVENTEXIT callback is executed before the transformed problem is freed.
5037  * In this method, the event handler should free all resources that have been allocated for the solving process in
5038  * \ref EVENTINIT.
5039  *
5040  * @subsection EVENTINITSOL
5041  *
5042  * The EVENTINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
5043  * begin. The event handler may use this call to initialize its branch-and-bound specific data.
5044  *
5045  * @subsection EVENTEXITSOL
5046  *
5047  * The EVENTEXITSOL callback is executed before the branch-and-bound process is freed. The event handler should use this
5048  * call to clean up its branch-and-bound specific data.
5049  *
5050  * @section EVENTUSAGE Catching and Dropping Events
5051  *
5052  * After you have implemented the event handler, you have to tell SCIP for which events this event handler should be
5053  * used. This can be a general events, such as <code>SCIP_EVENTTYPE_BESTSOLFOUND</code>, or a variable event which is the most common
5054  * way.
5055  *
5056  * In case of a general (not variable) event you use the function SCIPcatchEvent() to attach to an event and
5057  * SCIPdropEvent() to release this event later.
5058  *
5059  * \code
5060  * SCIP_CALL( SCIPcatchEvent( scip, SCIP_EVENTTYPE_BESTSOLFOUND, eventhdlr, NULL, NULL) );
5061  * \endcode
5062  *
5063  * \code
5064  * SCIP_CALL( SCIPdropEvent( scip, SCIP_EVENTTYPE_BESTSOLFOUND, eventhdlr, NULL, NULL) );
5065  * \endcode
5066  *
5067  * If you want trigger some variable event, you use the method SCIPcatchVarEvent() to attach the variable event and
5068  * SCIPdropVarEvent() to drop it later.
5069  *
5070  * \code
5071  * SCIP_CALL( SCIPcatchVarEvent( scip, var, SCIP_EVENTTYPE_VARFIXED, eventhdlr, NULL, NULL) );
5072  * \endcode
5073  *
5074  * \code
5075  * SCIP_CALL( SCIPdropVarEvent( scip, var, SCIP_EVENTTYPE_VARFIXED, eventhdlr, NULL, NULL) );
5076  * \endcode
5077  *
5078  * @section EVENTTYPES Event types
5079  *
5080  * All available events are listed in type_event.h. There are atomic events such as <code>SCIP_EVENTTYPE_VARFIXED</code>
5081  * and combined events such as <code>SCIP_EVENTTYPE_VARCHANGED</code>. The events are encoded via bit masks. Each atomic
5082  * event has a unique power of two. This enables combination of the atomic events.
5083  *
5084  * SCIP only throws atomic events. However, an event handler might be interested in bunch of events. Through the
5085  * underlying bit masks it is possible to combine the atomic events. For example, <code>SCIP_EVENTTYPE_VARCHANGED</code>
5086  * is an event which combines the events <code>SCIP_EVENTTYPE_VARFIXED</code>, <code>SCIP_EVENTTYPE_VARUNLOCKED</code>,
5087  * <code>SCIP_EVENTTYPE_OBJCHANGED</code>, <code>SCIP_EVENTTYPE_GBDCHANGED</code>,
5088  * <code>SCIP_EVENTTYPE_DOMCHANGED</code>, and <code>SCIP_EVENTTYPE_IMPLADDED</code>.
5089  *
5090  * \code
5091  * #define SCIP_EVENTTYPE_VARCHANGED (SCIP_EVENTTYPE_VARFIXED | SCIP_EVENTTYPE_VARUNLOCKED | SCIP_EVENTTYPE_OBJCHANGED
5092  * | SCIP_EVENTTYPE_GBDCHANGED | SCIP_EVENTTYPE_DOMCHANGED | SCIP_EVENTTYPE_IMPLADDED)
5093  * \endcode
5094  *
5095  * Depending on the event type, the event offers different information. The methods which can be used to gain
5096  * access to this information are given in pub_event.h.
5097  *
5098  */
5099 
5100 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5101 
5102 /**@page NLPI How to add interfaces to nonlinear programming solvers
5103  *
5104  * NLPIs are used to interface a solver for nonlinear programs (NLP).
5105  * It is used, e.g., to solve convex relaxations of the problem or to find locally optimal solutions of
5106  * nonlinear relaxations or subproblems.
5107  * The NLPI has been designed such that it can be used independently from SCIP.
5108  *
5109  * While the NLPI itself corresponds to the solver interface, the NLPIPROBLEM corresponds to the
5110  * (solver specific) representation of a concrete nonlinear program.
5111  * An NLP is specified as a set of indexed variables with variable bounds, an objective function,
5112  * and a set of constraints, where each constraint is specified as a function which is restricted to lie
5113  * between given left and right hand sides (possibly infinite).
5114  * A function consists of a linear, quadratic, and general nonlinear part.
5115  * The linear and quadratic parts are specified via variable indices and coefficients, while the
5116  * general nonlinear part is specified via an expression tree.
5117  * That is, the user of the NLPI does not provide function evaluation callbacks but an algebraic representation of the NLP.
5118  * Interfaces for solvers that require function evaluations can make use of the NLPIORACLE, which
5119  * provides a set of methods to compute functions values, gradients, Jacobians, and Hessians for a given NLP.
5120  * See the interface to Ipopt for an example on how to use the NLPIORACLE.
5121  *
5122  * A complete list of all NLPIs contained in this release can be found \ref NLPIS "here".
5123  *
5124  * We now explain how users can add their own NLP solver interface.
5125  * Take the interface to Ipopt (src/nlpi/nlpi_ipopt.cpp) as an example.
5126  * Unlike most other plugins, it is written in C++.
5127  * Additional documentation for the callback methods of an NLPI, in particular for their input parameters,
5128  * can be found in the file type_nlpi.h.
5129  *
5130  * Here is what you have to do to implement an NLPI:
5131  * -# Copy the template files src/nlpi/nlpi_xyz.c and src/nlpi/nlpi_xyz.h into files named "nlpi_mynlpi.c"
5132  * and "nlpi_mynlpi.h".
5133  * \n
5134  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
5135  * -# Use SCIPcreateNlpSolverMynlpi() in order to include the NLPI into your SCIP instance,
5136  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
5137  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mynlpi".
5138  * -# Adjust the properties of the nlpi (see \ref NLPI_PROPERTIES).
5139  * -# Define the NLPI and NLPIPROBLEM data (see \ref NLPI_DATA).
5140  * -# Implement the interface methods (see \ref NLPI_INTERFACE).
5141  * -# Implement the fundamental callback methods (see \ref NLPI_FUNDAMENTALCALLBACKS).
5142  *
5143  *
5144  * @section NLPI_PROPERTIES Properties of an NLPI
5145  *
5146  * At the top of the new file "nlpi_mynlpi.c", you can find the NLPI properties.
5147  * These are given as compiler defines.
5148  * The properties you have to set have the following meaning:
5149  *
5150  * \par NLPI_NAME: the name of the NLP solver interface.
5151  * This name is used in the interactive shell to address the NLPI.
5152  * Additionally, if you are searching for an NLPI with SCIPfindNLPI(), this name is looked up.
5153  * Names have to be unique: no two NLPIs may have the same name.
5154  *
5155  * \par NLPI_DESC: the description of the NLPI.
5156  * This string is printed as a description of the NLPI in the interactive shell.
5157  *
5158  * \par NLPI_PRIORITY: the priority of the NLPI.
5159  * If an NLP has to be solved, an NLP solver has to be selected.
5160  * By default, the solver with the NLPI with highest priority is selected.
5161  * The priority of an NLPI should be set according to performance of the solver:
5162  * solvers that provide fast algorithms that are usually successful on a wide range of problems should have a high priority.
5163  * An easy way to list the priorities of all NLPIs is to type "display nlpis" in the interactive shell of SCIP.
5164  *
5165  * @section NLPI_DATA NLPI Data
5166  *
5167  * Below the header "Data structures" you can find structs which are called "struct SCIP_NlpiData" and "struct SCIP_NlpiProblem".
5168  * In this data structure, you can store the data of your solver interface and of a specific NLP problem.
5169  * For example, you could store a pointer to the block memory data structure in the SCIP_NlpiData data structure
5170  * and store a pointer to an NLPIoracle in the SCIP_NlpiProblem data structure.
5171  *
5172  * @section NLPI_INTERFACE Interface Methods
5173  *
5174  * At the bottom of "nlpi_mynlpi.c", you can find the interface method SCIPcreateNlpSolverXyz(),
5175  * which also appears in "nlpi_mynlpi.h".
5176  * \n
5177  * This method only has to be adjusted slightly.
5178  * It is responsible for creating an NLPI that contains all properties and callback methods of your
5179  * solver interface by calling the method SCIPnlpiCreate().
5180  * SCIPcreateNlpSolverXyz() is called by the user (e.g., SCIP), if (s)he wants to use this solver interface in his/her application.
5181  *
5182  * If you are using NLPI data, you have to allocate the memory for the data at this point.
5183  * You can do this by calling:
5184  * \code
5185  * SCIP_CALL( SCIPallocBlockMemory(scip, &nlpidata) );
5186  * \endcode
5187  * You also have to initialize the fields in struct SCIP_NlpiData afterwards. For freeing the
5188  * NLPI data, see \ref NLPIFREE.
5189  *
5190  *
5191  * @section NLPI_FUNDAMENTALCALLBACKS Fundamental Callback Methods of an NLPI
5192  *
5193  * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
5194  * an operational algorithm. Currently, all NLPI callbacks are fundamental.
5195  *
5196  * Additional documentation of the callback methods, in particular to their input parameters,
5197  * can be found in type_nlpi.h.
5198  *
5199  * @subsection NLPICOPY
5200  *
5201  * The NLPICOPY callback is executed if the plugin should be copied, e.g., when a SCIP instance is copied.
5202  *
5203  * @subsection NLPIFREE
5204  *
5205  * The NLPIFREE callback is executed if the NLP solver interface data structure should be freed, e.g., when a SCIP instance is freed.
5206  *
5207  * @subsection NLPIGETSOLVERPOINTER
5208  *
5209  * The NLPIGETSOLVERPOINTER callback can be used to pass a pointer to a solver specific data structure to the user.
5210  *
5211  * @subsection NLPICREATEPROBLEM
5212  *
5213  * The NLPICREATEPROBLEM callback is executed if a particular NLP problem is to be created.
5214  * The callback method should initialize a SCIP_NlpiProblem struct here that corresponds to an empty NLP.
5215  *
5216  * @subsection NLPIFREEPROBLEM
5217  *
5218  * The NLPIFREEPROBLEMPOINTER callback is executed if a particular NLP problem is to be freed.
5219  * The callback method should free a SCIP_NlpiProblem struct here.
5220  *
5221  * @subsection NLPIGETPROBLEMPOINTER
5222  *
5223  * The NLPIGETPROBLEMPOINTER callback can be used to pass a pointer to a solver specific data structure of the NLP to the user.
5224  *
5225  * @subsection NLPIADDVARS
5226  *
5227  * The NLPIADDVARS callback is executed if a set of variables with lower and upper bounds and names should be added to a particular NLP.
5228  * The callback method must add the new variables behind the previously added variables, if any.
5229  * If NULL is given for the lower bounds arguments, -infinity is assumed as lower bound for each new variable.
5230  * If NULL is given for the upper bounds arguments, +infinity is assumed as upper bound for each new variable.
5231  * It is also permitted to use NULL for the names argument.
5232  *
5233  * @subsection NLPIADDCONSTRAINTS
5234  *
5235  * The NLPIADDCONSTRAINTS callback is executed if a set of constraints should be added to a particular NLP.
5236  * Constraints are specified by providing left and right hand sides, linear and quadratic coefficients, expression trees, and constraint names.
5237  * All of these arguments are optional, giving NULL for left hand sides corresponds to -infinity, giving NULL for right hand sides corresponds to +infinity.
5238  *
5239  * @subsection NLPISETOBJECTIVE
5240  *
5241  * The NLPISETOBJECTIVE callback is executed to set the objective function of a particular NLP.
5242  *
5243  * @subsection NLPICHGVARBOUNDS
5244  *
5245  * The NLPICHGVARBOUNDS callback is executed to change the bounds on a set of variables of an NLP.
5246  *
5247  * @subsection NLPICHGCONSSIDES
5248  *
5249  * The NLPICHGCONSSIDES callback is executed to change the sides on a set of constraints of an NLP.
5250  *
5251  * @subsection NLPIDELVARSET
5252  *
5253  * The NLPIDELVARSET callback is executed to delete a set of variables from an NLP.
5254  * The caller provides an array in which for each variable it is marked whether it should be deleted.
5255  * In the same array, the method should return the new position of each variable in the NLP, or -1 if it was deleted.
5256  *
5257  * @subsection NLPIDELCONSSET
5258  *
5259  * The NLPIDELCONSSET callback is executed to delete a set of constraints from an NLP.
5260  * The caller provides an array in which for each constraint it is marked whether it should be deleted.
5261  * In the same array, the method should return the new position of each constraint in the NLP, or -1 if it was deleted.
5262  *
5263  * @subsection NLPICHGLINEARCOEFS
5264  *
5265  * The NLPICHGLINEARCOEFS callback is executed to change the coefficients in the linear part of the objective function or a constraint of an NLP.
5266  *
5267  * @subsection NLPICHGQUADCOEFS
5268  *
5269  * The NLPICHGQUADCOEFS callback is executed to change the coefficients in the quadratic part of the objective function or a constraint of an NLP.
5270  *
5271  * @subsection NLPICHGEXPRTREE
5272  *
5273  * The NLPICHGEXPRTREE callback is executed to replace the expression tree of the objective function or a constraint of an NLP.
5274  *
5275  * @subsection NLPICHGNONLINCOEF
5276  *
5277  * The NLPICHGNONLINCOEF callback is executed to change a single parameter in the (parametrized) expression tree of the objective function or a constraint of an NLP.
5278  *
5279  * @subsection NLPICHGOBJCONSTANT
5280  *
5281  * The NLPICHGOBJCONSTANT callback is executed to change the constant offset of the objective function of an NLP.
5282  *
5283  * @subsection NLPISETINITIALGUESS
5284  *
5285  * The NLPISETINITIALGUESS callback is executed to provide primal and dual initial values for the variables and constraints of an NLP.
5286  * For a local solver, these values can be used as a starting point for the search.
5287  * It is possible to pass a NULL pointer for any of the arguments (primal values of variables, dual values of variable bounds, dual values of constraints).
5288  * In this case, the solver should clear previously set starting values and setup its own starting point.
5289  *
5290  * @subsection NLPISOLVE
5291  *
5292  * The NLPISOLVE callback is executed when an NLP should be solved.
5293  * The solver may use the initial guess provided by \ref NLPISETINITIALGUESS as starting point.
5294  * The status of the solving process and solution can be requested by
5295  * \ref NLPIGETSOLSTAT, \ref NLPIGETTERMSTAT, \ref NLPIGETSOLUTION, and \ref NLPIGETSTATISTICS.
5296  *
5297  * @subsection NLPIGETSOLSTAT
5298  *
5299  * The NLPIGETSOLSTAT callback can be used to request the solution status (solved, infeasible, ...) after an NLP has been solved.
5300  *
5301  * @subsection NLPIGETTERMSTAT
5302  *
5303  * The NLPIGETTERMSTAT callback can be used to request the termination reason (normal, iteration limit, ...) after an NLP has been solved.
5304  *
5305  * @subsection NLPIGETSOLUTION
5306  *
5307  * The NLPIGETSOLUTION callback can be used to request the primal and dual solution values after an NLP solve.
5308  * The method should pass pointers to arrays of variable values to the caller.
5309  * It is possible to return only primal values for the variables, but no values for the dual variables, e.g., if a solver does not compute such values.
5310  *
5311  * @subsection NLPIGETSTATISTICS
5312  *
5313  * The NLPIGETSTATISTICS callback can be used to request the statistical values (number of iterations, time, ...) after an NLP solve.
5314  * The method should fill the provided NLPSTATISTICS data structure.
5315  *
5316  * <!-- NLPIGETWARMSTARTSIZE, NLPIGETWARMSTARTMEMO, NLPISETWARMSTARTMEMO are not documented,
5317  since they are currently not used, not implemented, and likely to change with a next version. -->
5318  *
5319  * @subsection NLPIGETINTPAR
5320  *
5321  * The NLPIGETINTPAR callback can be used to request the value of an integer valued NLP parameter.
5322  *
5323  * @subsection NLPISETINTPAR
5324  *
5325  * The NLPISETINTPAR callback is executed to set the value of an integer valued NLP parameter.
5326  *
5327  * @subsection NLPIGETREALPAR
5328  *
5329  * The NLPIGETREALPAR callback can be used to request the value of a real valued NLP parameter.
5330  *
5331  * @subsection NLPISETREALPAR
5332  *
5333  * The NLPISETREALPAR callback is executed to set the value of a real valued NLP parameter.
5334  *
5335  * @subsection NLPIGETSTRINGPAR
5336  *
5337  * The NLPIGETSTRINGPAR callback can be used to request the value of a string valued NLP parameter.
5338  *
5339  * @subsection NLPISETSTRINGPAR
5340  *
5341  * The NLPISETSTRINGPAR callback is executed to set the value of a string valued NLP parameter.
5342  */
5343 
5344 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5345 
5346 /**@page EXPRINT How to add interfaces to expression interpreters
5347  *
5348  * An expression interpreter is a tool to compute point-wise and interval-wise the function values, gradients, and
5349  * derivatives of algebraic expressions which are given in the form of an expression tree.
5350  * It is used, e.g., by an NLP solver interface to compute Jacobians and Hessians for the solver.
5351  *
5352  * The expression interpreter interface in SCIP has been implemented similar to those of the LP solver interface (LPI).
5353  * For one binary, exactly one expression interpreter has to be linked.
5354  * The expression interpreter API has been designed such that it can be used independently from SCIP.
5355  *
5356  * A complete list of all expression interpreters contained in this release can be found \ref EXPRINTS "here".
5357  *
5358  * We now explain how users can add their own expression interpreters.
5359  * Take the interface to CppAD (\ref exprinterpret_cppad.cpp) as an example.
5360  * Unlike most other plugins, it is written in C++.
5361  *
5362  * Additional documentation for the callback methods of an expression interpreter, in particular for their input parameters,
5363  * can be found in the file \ref exprinterpret.h
5364  *
5365  * Here is what you have to do to implement an expression interpreter:
5366  * -# Copy the file \ref exprinterpret_none.c into a file named "exprinterpreti_myexprinterpret.c".
5367  * \n
5368  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
5369  * -# Open the new files with a text editor.
5370  * -# Define the expression interpreter data (see \ref EXPRINT_DATA).
5371  * -# Implement the interface methods (see \ref EXPRINT_INTERFACE).
5372  *
5373  *
5374  * @section EXPRINT_DATA Expression Interpreter Data
5375  *
5376  * In "struct SCIP_ExprInt", you can store the general data of your expression interpreter.
5377  * For example, you could store a pointer to the block memory data structure.
5378  *
5379  * @section EXPRINT_INTERFACE Interface Methods
5380  *
5381  * The expression interpreter has to implement a set of interface method.
5382  * In your "exprinterpret_myexprinterpret.c", these methods are mostly dummy methods that return error codes.
5383  *
5384  * @subsection SCIPexprintGetName
5385  *
5386  * The SCIPexprintGetName method should return the name of the expression interpreter.
5387  *
5388  * @subsection SCIPexprintGetDesc
5389  *
5390  * The SCIPexprintGetDesc method should return a short description of the expression interpreter, e.g., the name of the developer of the code.
5391  *
5392  * @subsection SCIPexprintGetCapability
5393  *
5394  * The SCIPexprintGetCapability method should return a bitmask that indicates the capabilities of the expression interpreter,
5395  * i.e., whether it can evaluate gradients, Hessians, or do interval arithmetic.
5396  *
5397  * @subsection SCIPexprintCreate
5398  *
5399  * The SCIPexprintCreate method is called to create an expression interpreter data structure.
5400  * The method should initialize a "struct SCIP_ExprInt" here.
5401  *
5402  * @subsection SCIPexprintFree
5403  *
5404  * The SCIPexprintFree method is called to free an expression interpreter data structure.
5405  * The method should free a "struct SCIP_ExprInt" here.
5406  *
5407  * @subsection SCIPexprintCompile
5408  *
5409  * The SCIPexprintCompile method is called to initialize the data structures that are required to evaluate
5410  * a particular expression tree.
5411  * The expression interpreter can store data that is particular to a given expression tree in the tree by using
5412  * SCIPexprtreeSetInterpreterData().
5413  *
5414  * @subsection SCIPexprintFreeData
5415  *
5416  * The SCIPexprintFreeData method is called when an expression tree is freed.
5417  * The expression interpreter should free the given data structure.
5418  *
5419  * @subsection SCIPexprintNewParametrization
5420  *
5421  * The SCIPexprintNewParametrization method is called when the values of the parameters in a parametrized expression tree have changed.
5422  *
5423  * @subsection SCIPexprintEval
5424  *
5425  * The SCIPexprintEval method is called when the value of an expression represented by an expression tree should be computed for a point.
5426  *
5427  * @subsection SCIPexprintEvalInt
5428  *
5429  * The SCIPexprintEvalInt method is called when an interval that contains the range of an expression represented by an expression tree with respect to intervals for the variables should be computed.
5430  *
5431  * @subsection SCIPexprintGrad
5432  *
5433  * The SCIPexprintGrad method is called when the gradient of an expression represented by an expression tree should be computed for a point.
5434  *
5435  * @subsection SCIPexprintGradInt
5436  *
5437  * The SCIPexprintGradInt method is called when an interval vector that contains the range of the gradients of an expression represented by an expression tree with respect to intervals for the variables should be computed.
5438  *
5439  * @subsection SCIPexprintHessianSparsityDense
5440  *
5441  * The SCIPexprintHessianSparsityDense method is called when the sparsity structure of the Hessian matrix should be computed and returned in dense form.
5442  *
5443  * @subsection SCIPexprintHessianDense
5444  *
5445  * The SCIPexprintHessianDense method is called when the Hessian of an expression represented by an expression tree should be computed for a point.
5446  */
5447 
5448 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5449 
5450 /**@page TABLE How to add statistics tables
5451  *
5452  * After solving a constraint integer program, SCIP can display statistics tables with information about, e.g., the solving time,
5453  * number of nodes, LP iterations or the number of calls and successes of different plugins via "display statistics" in the shell
5454  * or via SCIPprintStatistics() in the C-interface. There already exists a wide variety of statistics tables which can be activated
5455  * or deactivated on demand, see src/scip/table_default.c. Additionally, the user can implement his/her own statistics tables
5456  * in order to display problem or algorithm specific values.
5457  * \n
5458  * A complete list of all statistics tables contained in this release can be found \ref TABLES "here".
5459  *
5460  * We now explain how users can add their own statistics tables.
5461  * We give the explanation for creating your own source file for each additional statistics table. Of course, you can collect
5462  * different additional statistics tables in one source file.
5463  * Take src/scip/table_default.c, where all default statistics tables are collected, as an example.
5464  * As all other default plugins, the default statistics table plugins and the statistics table template are written in C.
5465  * C++ users can easily adapt the code by using the scip::ObjTable wrapper base class and implement the scip_...() virtual methods
5466  * instead of the SCIP_DECL_TABLE... callback methods.
5467  *
5468  *
5469  * Additional documentation for the callback methods of a statistics table can be found in the file type_table.h.
5470  *
5471  * Here is what you have to do to implement a statistics table (assuming your statistics table is named "mystatisticstable"):
5472  * -# Copy the template files src/scip/table_xyz.c and src/scip/table_xyz.h into files named "table_mystatisticstable.c"
5473  * and "table_mystatisticstable.h".
5474  * \n
5475  * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
5476  * -# Use SCIPincludeTableMystatisticstable() in order to include the statistics table into your SCIP instance,
5477  * e.g., in the main file of your project (see, e.g., src/cmain.c in the Binpacking example).
5478  * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mystatisticstable".
5479  * -# Adjust the \ref TABLE_PROPERTIES "properties of the statistics table".
5480  * -# Define the \ref TABLE_DATA "statistics table data". This is optional.
5481  * -# Implement the \ref TABLE_INTERFACE "interface methods".
5482  * -# Implement the \ref TABLE_FUNDAMENTALCALLBACKS "fundamental callback methods".
5483  * -# Implement the \ref TABLE_ADDITIONALCALLBACKS "additional callback methods". This is optional.
5484  *
5485  *
5486  * @section TABLE_PROPERTIES Properties of a Statistics Table
5487  *
5488  * At the top of the new file "table_mystatisticstable.c" you can find the statistics table properties.
5489  * These are given as compiler defines.
5490  * In the C++ wrapper class, you have to provide the statistics table properties by calling the constructor
5491  * of the abstract base class scip::ObjTable from within your constructor.
5492  * The properties you have to set have the following meaning:
5493  *
5494  * \par TABLE_NAME: the name of the statistics table.
5495  * This name is used in the interactive shell to address the statistics table.
5496  * Additionally, if you are searching for a statistics table with SCIPfindTable(), this name is looked up.
5497  * Names have to be unique: no two statistic tables may have the same name.
5498  *
5499  * \par TABLE_DESC: the description of the statistics table.
5500  * This string is printed as a description of the statistics table in the interactive shell.
5501  *
5502  * \par TABLE_POSITION: the position of the statistics table.
5503  * In the statistics output, the statistics tables will be ordered by increasing position. Compare with the
5504  * default statistics tables in "table_default.c" to find a value which will give you the desired position
5505  * between the default statistics tables. If you give your table a negative position value, it will appear
5506  * before all SCIP statistcs, with a value larger than 20000 it will appear after all default statistics.
5507  *
5508  * \par TABLE_EARLIEST_STAGE: output of the statistics table is only printed from this stage onwards
5509  * The output routine of your statistics table will only be called if SCIP has reached this stage. For
5510  * example, the default table "tree" will only output information starting from SCIP_STAGE_SOLVING, because
5511  * there is no meaningful information available before, while the "presolver" table can already be called
5512  * in SCIP_STAGE_TRANSFORMED.
5513  *
5514  * @section TABLE_DATA Statistics Table Data
5515  *
5516  * Below the header "Data structures" you can find a struct which is called "struct SCIP_TableData".
5517  * In this data structure, you can store the data of your statistics table. For example, you should store the adjustable
5518  * parameters of the statistics table in this data structure.
5519  * If you are using C++, you can add statistics table data as usual as object variables to your class.
5520  * \n
5521  * Defining statistics table data is optional. You can leave the struct empty.
5522  *
5523  *
5524  * @section TABLE_INTERFACE Interface Methods
5525  *
5526  * At the bottom of "table_mystatisticstable.c" you can find the interface method SCIPincludeTableMystatisticstable(), which also
5527  * appears in "table_mystatisticstable.h".
5528  * \n
5529  * This method only has to be adjusted slightly.
5530  * It is responsible for notifying SCIP of the presence of the statistics table by calling the method
5531  * SCIPincludeTable().
5532  *
5533  * The interface method is called by the user, if (s)he wants to include the statistics table, i.e., if (s)he wants to use the statistics table in an
5534  * application.
5535  *
5536  * If you are using statistics table data, you have to allocate the memory for the data at this point.
5537  * You can do this by calling:
5538  * \code
5539  * SCIP_CALL( SCIPallocBlockMemory(scip, &tabledata) );
5540  * \endcode
5541  * You also have to initialize the fields in struct SCIP_TableData afterwards.
5542  *
5543  * Although this is very uncommon, you may also add user parameters for your statistics table, see the method
5544  * SCIPincludeConshdlrKnapsack() in the \ref cons_knapsack.h "knapsack constraint handler" for an example.
5545  *
5546  *
5547  * @section TABLE_FUNDAMENTALCALLBACKS Fundamental Callback Methods of a Statistics Table
5548  *
5549  * Statistics table plugins have only one fundamental callback method, namely the \ref TABLEOUTPUT method.
5550  * This method has to be implemented for every display column; the other callback methods are optional.
5551  * In the C++ wrapper class scip::ObjTable, the scip_output() method (which corresponds to the \ref TABLEOUTPUT callback) is a virtual
5552  * abstract member function.
5553  * You have to implement it in order to be able to construct an object of your statistics table class.
5554  *
5555  * Additional documentation for the callback methods can be found in type_table.h.
5556  *
5557  * @subsection TABLEOUTPUT
5558  *
5559  * The TABLEOUTPUT callback is called whenever SCIP is asked to print statistics (because the user typed "display statistics"
5560  * in the shell or called SCIPprintStatistics()). In this callback, the table should print all of its information to the given file
5561  * (which may be NULL if the output should be printed to the console).
5562  *
5563  * Typical methods called by a statistics table are, for example, SCIPdispLongint(), SCIPdispInt(), SCIPdispTime(), and
5564  * SCIPinfoMessage().
5565  *
5566  *
5567  * @section TABLE_ADDITIONALCALLBACKS Additional Callback Methods of a Statistics Table
5568  *
5569  * The additional callback methods do not need to be implemented in every case.
5570  * They can be used, for example, to initialize and free private data.
5571  *
5572  * @subsection TABLECOPY
5573  *
5574  * The TABLECOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this callback
5575  * as <code>NULL</code> the user disables the execution of the specified column. In general it is probably not needed to
5576  * implement that callback since the output of the copied instance is usually suppressed. In the other case or for
5577  * debugging the callback should be implement.
5578  *
5579  *
5580  * @subsection TABLEFREE
5581  *
5582  * If you are using statistics table data, you have to implement this method in order to free the statistics table data.
5583  * This can be done by the following procedure:
5584  * \code
5585  * static
5586  * SCIP_DECL_TABLEFREE(tableFreeMystatisticstable)
5587  * {
5588  * SCIP_TABLEDATA* tabledata;
5589  *
5590  * tabledata = SCIPtableGetData(table);
5591  * assert(tabledata != NULL);
5592  *
5593  * SCIPfreeMemory(scip, &tabledata);
5594  *
5595  * SCIPtableSetData(disp, NULL);
5596  *
5597  * return SCIP_OKAY;
5598  * }
5599  * \endcode
5600  * If you have allocated memory for fields in your statistics table data, remember to free this memory
5601  * before freeing the statistics table data itself.
5602  * If you are using the C++ wrapper class, this method is not available.
5603  * Instead, just use the destructor of your class to free the member variables of your class.
5604  *
5605  * @subsection TABLEINIT
5606  *
5607  * The TABLEINIT callback is executed after the problem is transformed.
5608  * The statistics table may, e.g., use this call to initialize its statistics table data.
5609  *
5610  * @subsection TABLEEXIT
5611  *
5612  * The TABLEEXIT callback is executed before the transformed problem is freed.
5613  * In this method, the statistics table should free all resources that have been allocated for the solving process in
5614  * \ref TABLEINIT.
5615  *
5616  * @subsection TABLEINITSOL
5617  *
5618  * The TABLEINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
5619  * begin. The statistics table may use this call to initialize its branch-and-bound specific data.
5620  *
5621  * @subsection TABLEEXITSOL
5622  *
5623  * The TABLEEXITSOL callback is executed before the branch-and-bound process is freed. The statistics table should use this
5624  * call to clean up its branch-and-bound specific data.
5625  */
5626 
5627 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5628 
5629 /**@page CONF How to use conflict analysis
5630  *
5631  * Conflict analysis is a way to automatically use the information obtained from infeasible nodes
5632  * in the branch-and-bound tree.
5633  *
5634  * Once a node is declared infeasible, SCIP automatically tries to infer a constraint that explains the reason for the
5635  * infeasibility, in order to avoid similar situations later in the search. This explanation essentially consists of a
5636  * constraint stating that at least one of its variables should have a bound different from the current infeasible node,
5637  * because the current setting led to infeasibility. Clearly, all variables that are fixed in the current infeasible
5638  * node would yield such a constraint (since this leads to infeasibility). The key point rather is to infer a "small"
5639  * constraint that does the same job. SCIP handles this by several heuristics. For this, SCIP sets up a
5640  * so-called (directed) conflict graph. The nodes in this graph correspond to bound changes of variables and an arc (@a
5641  * u, @a v) means that the bound change corresponding to @a v is based on the bound change of @a u. In general, a node
5642  * will have several ingoing arcs which represent all bound changes that have been used to infer (propagate) the bound
5643  * change in question. The graph also contains source nodes for each bound that has been changed during branching and an
5644  * artificial target node representing the conflict, i.e., the infeasibility. Essentially, SCIP heuristically constructs
5645  * a cut in this graph that involves few "branching nodes". For details on the techniques that SCIP uses,
5646  * we refer to the paper @par
5647  * Tobias Achterberg, Conflict Analysis in Mixed Integer Programming@n
5648  * Discrete Optimization, 4, 4-20 (2007)
5649  *
5650  * For conflict analysis to work well, the author of a \ref CONS "Constraint Handler" or a
5651  * \ref PROP "Propagator" has to implement three kinds of functionality:
5652  *
5653  * -# If one detects infeasibility, one should initiate conflict analysis, see \ref INITCONFS "below".
5654  * -# During propagation, one should call the right functions to fix variables.
5655  * -# One should implement the <em>so-called reverse propagation</em>.
5656  *
5657  * If this functionality is not implemented, SCIP will still work correctly, but cannot use the information of the constraint
5658  * handler or the propagator for conflict analysis. In this case, each bound reduction performed by the constraint
5659  * handler/propagator will be treated as if it had been a branching decision.
5660  *
5661  * @section INITCONFS Initiating Conflict Analysis
5662  *
5663  * If one detects infeasibility within propagation, one should do the following:
5664  * -# Call SCIPinitConflictAnalysis().
5665  * -# Inform SCIP about the variable bounds that are the reason for the detection of infeasibility
5666  * via the functions SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPaddConflictBd(), or
5667  * SCIPaddConflictBinvar(). If there is more than one valid explanation of infeasibility, either one can be used.
5668  * Typically, smaller explanations tend to be better.
5669  * -# Call SCIPanalyzeConflict() from a propagator or SCIPanalyzeConflictCons() from a constraint
5670  * handler.
5671  *
5672  * This functionality allows SCIP to set up the conflict graph and perform a conflict analysis.
5673  *
5674  * @section Propagation
5675  *
5676  * When propagating variable domains, SCIP needs to be informed that the deduced variable bounds should be
5677  * used in conflict analysis. This can be done by the functions SCIPinferVarLbCons(),
5678  * SCIPinferVarUbCons(), and SCIPinferBinvarCons() for constraint handlers and SCIPinferVarLbProp(),
5679  * SCIPinferVarUbProp(), and SCIPinferBinvarProp() for propagators. You can pass one integer of
5680  * information that should indicate the reason of the propagation and can be used in reverse
5681  * propagation, see the next section.
5682  *
5683  * @section RESPROP Reverse Propagation
5684  *
5685  * Reverse Propagation is used to build up the conflict graph. Essentially, it provides an algorithm to detect the arcs
5686  * leading to a node in the conflict graph, i.e., the bound changes responsible for the new bound change deduced during
5687  * propagation. Reverse Propagation needs to be implemented in the RESPROP callback functions of
5688  * \ref CONSRESPROP "constraint handlers" or \ref PROPRESPROP "propagators".
5689  * These callbacks receive the following information: the variable which is under investigation (@p
5690  * infervar), the corresponding bound change (@p bdchgidx, @p boundtype), and the integer (@p inferinfo) that has been
5691  * supplied during propagation.
5692  *
5693  * One can use SCIPvarGetUbAtIndex() or SCIPvarGetLbAtIndex() to detect the bounds before or after the propagation that
5694  * should be investigated. Then the bounds that were involved should be passed to SCIP via SCIPaddConflictLb() and
5695  * SCIPaddConflictUb(). If there is more than one valid explanation of infeasibility, either one can be used.
5696  * Typically, smaller explanations tend to be better.
5697  *
5698  * Details and (more) examples are given in Sections @ref CONSRESPROP and @ref PROPRESPROP.
5699  *
5700  *
5701  * @section Example
5702  *
5703  * Consider the constraint handler @p cons_linearordering.c in the
5704  * \ref LOP_MAIN "linear ordering example"
5705  * (see @p example/LOP directory). This constraint handler propagates the equations \f$x_{ij} + x_{ji} =
5706  * 1\f$ and triangle inequalities \f$x_{ij} + x_{jk} + x_{ki} \leq 2\f$.
5707  *
5708  * When propagating the equation and <code>vars[i][j]</code> is fixed to 1, the constraint handler uses
5709  * \code
5710  * SCIP_CALL( SCIPinferBinvarCons(scip, vars[j][i], FALSE, cons, i*n + j, &infeasible, &tightened) );
5711  * \endcode
5712  * Thus, variable <code>vars[j][i]</code> is fixed to 0 (@p FALSE), and it passes <code>i*n + j </code> as @p inferinfo.
5713  *
5714  * When it propagates the triangle inequality and both <code>vars[i][j]</code> and <code>vars[j][k]</code>
5715  * are fixed to 1, the constraint handler uses
5716  * \code
5717  * SCIP_CALL( SCIPinferBinvarCons(scip, vars[k][i], FALSE, cons, n*n + i*n*n + j*n + k, &infeasible, &tightened) );
5718  * \endcode
5719  * Thus, in this case, variable <code>vars[k][i]</code> is fixed to 0 and <code>n*n + i*n*n + j*n + k</code> is
5720  * passed as <code>inferinfo</code>.
5721  *
5722  * In reverse propagation, the two cases can be distinguished by @p inferinfo: if it is less than @p n*n,
5723  * we deal with an equation, otherwise with a triangle inequality. The constraint handler can then extract the
5724  * indices @p i, @p j (and @p k in the second case) from inferinfo.
5725  *
5726  * In the first case, it has to distinguish whether <code>vars[i][j]</code> is fixed to 0 or 1 &ndash;
5727  * by calling SCIPaddConflictLb()
5728  * or SCIPaddConflictUb(), respectively, with variable <code>vars[j][i]</code>. In the second case, it is clear that the only
5729  * possible propagation is to fix <code>vars[i][j]</code> to 0 when both <code>vars[k][i]</code> and <code>vars[j][k]</code>
5730  * are fixed to 1. It then calls
5731  * SCIPaddConflictLb() for both <code>vars[k][i]</code> and <code>vars[j][k]</code>.
5732  */
5733 
5734 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5735 
5736 /**@page REOPT How to use reoptimization
5737  *
5738  * The reoptimization feature of SCIP can be used to solve a sequence of optimization problems \f$(P_{i})_{i \in I}\f$ with
5739  * \f[
5740  * (P_i) \quad \min \{ c_i^T x \;|\; A^ix \geq b^i,\; x_{j} \in \mathbb{Z}\;\forall j \in \mathcal{I} \}
5741  * \f]
5742  * such that between two problems \f$P_i\f$ and \f$P_{i+1}\f$ the space of solutions gets restricted and/or the objective
5743  * fuction changes. To use reoptimization the user has to change the parameter <code>reoptimization/enable</code> to
5744  * <code>TRUE</code> before the solving process of the first problem of the sequence starts, i.e., in stage
5745  * <code>SCIP_STAGE_INIT</code> or <code>SCIP_STAGE_PROBLEM</code>. This can be done via the interactive shell or by
5746  * calling SCIPenableReoptimization(). In both cases SCIP changes some parameters and fixes them:
5747  * -# disable conflict analysis based on dual information
5748  * -# set the limit <code>maxorigsol</code> of stored solutions to zero because this is handled by a special solution tree provided
5749  * by the reoptimization feature itself
5750  * -# disable restarts (<code>presolving/maxrestarts = 0</code>)
5751  * -# disable multi-aggegations (<code>presolving/donotmultaggr = TRUE</code>)
5752  * -# disable dual reductions within presolvers and propagators (<code>misc/allowdualreds = FALSE</code>)
5753  * -# disable propagation with current cutoff bound (<code>misc/allowobjprop = FALSE</code>)
5754  *
5755  * In contrast to the presolving and propagating methods that are using dual information, performing strong branching is
5756  * allowed. The bound tightenings resulting from strong branching are handeled in a special way. After changing the objective
5757  * function and solving the modified problem the feasible region that was pruned by strong branching will be reconstructed
5758  * within the tree.
5759  *
5760  * If the reoptimization feature is enabled SCIP tries to reuse the search tree, especially the search frontier at the end
5761  * of the solving process, to speed up the solving process of the following problems. Therefore, the current release
5762  * provides the branching rule <code>branch_nodereopt</code> to reconstruct the tree. SCIP triggers a restart of the
5763  * reoptimization, i.e., solving the problem from scratch, if
5764  *
5765  * -# the stored search tree is too large,
5766  * -# the objective functions changed too much, or
5767  * -# the last \f$n\f$ optimal solution are updated solution of previous runs.
5768  *
5769  * The thresholds to trigger a restart can be set by the user:
5770  *
5771  * -# <code>reoptimization/maxsavednodes</code>
5772  * -# <code>reoptimization/delay</code>
5773  * -# <code>reoptimization/forceheurrestart</code>
5774  *
5775  * Before SCIP discards all the stored information and solves the problem from scratch it tries to compress the search
5776  * tree. Therefore, the current release provides compression heuristics that try to find a good and much smaller
5777  * representation of the current search tree.
5778  *
5779  * After a problem in the sequence of optimization problems was solved, the objective function can be changed in two ways:
5780  * -# Using the provided reader <code>reader_diff</code> the objective function can be changed via using the interactive
5781  * shell
5782  * \code
5783  * SCIP> read new_obj.diff
5784  * \endcode
5785  * or by calling SCIPreadDiff().
5786  * -# The objective function can be changed within the code. Therefore, the transformed problem needs to be freed by
5787  * calling SCIPfreeReoptSolve(). Afterwards, the new objective function can be installed by calling
5788  * SCIPchgReoptObjective().
5789  *
5790  * After changing the objective function the modified problem can be solved as usal.
5791  *
5792  * \note Currently, the compression heuristics used between two successive reoptimization runs only support pure binary
5793  * and mixed binary programs.
5794  *
5795  * For more information on reoptimization we refer to@par
5796  * Jakob Witzig@n
5797  * Reoptimization Techniques in MIP Solvers@n
5798  * Master's Thesis, Technical University of Berlin, 2014.
5799  */
5800 
5801 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5802 
5803 /**@page CONCSCIP How to use the concurrent solving mode
5804  *
5805  * @section Overview
5806  *
5807  * In \SCIP 4.0 a new feature has been added that allows to run multiple \SCIP instances with different settings
5808  * on one problem in parallel. To use this feature \SCIP has to be compiled with an additional make option to
5809  * enable the threading functionality (e.g. TPI=tny, see \ref MAKE).
5810  * Then, a concurrent solve can be started by using the <code>concurrentopt</code> command instead of the <code>optimize</code> command
5811  * in the \SCIP shell, or by calling the interface function SCIPsolveParallel().
5812  * To configure the behavior of the concurrent solving mode there are new parameters in the category <code>concurrent/</code>
5813  * and <code>parallel/</code> which will be explained here shortly.
5814  *
5815  * @section CONTROLNTHREADS Controlling the number of threads
5816  *
5817  * The parameters <code>parallel/maxnthreads</code> and <code>parallel/minnthreads</code> can be used to configure the number of threads
5818  * that sould be used for solving. \SCIP will try to use the configured maximum number of threads. If the
5819  * problem that is currently read is too large \SCIP will automatically use fewer threads, but never
5820  * go below the configured minimum number of threads.
5821  *
5822  * @section USEEMPHSETTINGS Using emphasis settings
5823  *
5824  * The parameters <code>concurrent/scip.../prefprio</code> configure which concurrent solvers should be used.
5825  * The concurrent solver <code>scip</code> will use the same settings as the \SCIP instance configured by the user.
5826  * The other concurrent solvers, e.g. <code>scip-feas</code>, will load the corresponding emphasis setting.
5827  * The behavior of the prefprio parameter is as follows: If it is set to 1.0 for <code>scip-feas</code> and
5828  * <code>scip-opti</code>, and to 0.0 for every other concurrent solver, then the threads will be evenly
5829  * distributed between the two types <code>scip-feas</code> and <code>scip-opti</code>. An example: if 4 threads are used each of these concurrent
5830  * solvers will use 2 threads. If the <code>prefprio</code> for one solver is set to 0.33 and the other is set to 1.0, then the former will use 1 thread
5831  * and the latter will use 3 threads of the 4 available threads.
5832  *
5833  * @section CUSTOMCONCSOLVERS Running custom solvers
5834  *
5835  * To use custom settings for the concurrent solvers there is the parameter <code>concurrent/paramsetprefix</code>. If custom parameters
5836  * should be loaded by the concurrent solvers, then it must point to the folder where they are located (including a path separator at the end).
5837  * The parameter settings must be named after the concurrent solvers, e.g. if only the concurrent solver <code>scip</code> is used
5838  * they should be named <code>scip-1</code>, <code>scip-2</code>, <code>scip-3</code>. When different types of concurrent solvers are used the counter
5839  * starts at one for each of them, e.g. <code>scip-1</code> and <code>scip-feas-1</code>.
5840  */
5841 
5842 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5843 
5844 /**@page OBJ Creating, capturing, releasing, and adding data objects
5845  *
5846  * Data objects (variables, constraints, rows, ... ) are subject to reference counting
5847  * to avoid expensive copying operations. This concept is similar to smart pointers.
5848  * Creating such an object (e.g., by calling SCIPcreateVar()) will set the
5849  * reference counter to one. Capturing an object (e.g., by calling SCIPcaptureVar()) increases the reference counter,
5850  * releasing it (e.g., by calling SCIPreleaseVar()) decreases the counter. If the reference counter gets zero, the
5851  * object will be destroyed automatically.
5852  *
5853  * Remember that a created data object is automatically captured. If the user
5854  * doesn't need the object anymore, (s)he has to call the object's release method.
5855  *
5856  * When a data object is added to SCIP (e.g., by calling SCIPaddVar()) , it is captured again, such that a
5857  * release call does not destroy the object. If SCIP doesn't need the object
5858  * anymore, it is automatically released.
5859  *
5860  * E.g., if the user calls
5861  * \code
5862  * SCIPcreateVar(); // reference counter 1
5863  * SCIPaddVar(); // reference counter 2
5864  * SCIPreleaseVar(); // reference counter 1
5865  * \endcode
5866  * the reference counter will be 1 afterwards, and the variable will be destroyed, if SCIP frees the problem.
5867  * If the user wants to use this variable, e.g. for extracting statistics after SCIP was finished, the user must not call
5868  * SCIPreleaseVar() right after adding the variable, but before terminating the program.
5869  */
5870 
5871 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5872 
5873 /**@page PARAM How to add additional user parameters
5874  *
5875  * Users may add their own parameters to SCIP by calling SCIPaddXyzParam(). Using
5876  * this method, there are two possibilities for where to store the actual parameter value:
5877  * - If the given valueptr is NULL, SCIP stores the parameter value internally, and
5878  * the user can only access the value with the SCIPgetXyzParam() and
5879  * SCIPsetXyzParam() calls.
5880  * - If the given valueptr is not NULL, SCIP stores the parameter value at the given
5881  * address, and the user can directly manipulate the value at this address.
5882  * (S)he has to be careful with memory management in string parameters: when the
5883  * SCIPaddStringParam() method is called, the given address must hold a char*
5884  * pointer with value NULL. The default value is then copied into this pointer,
5885  * allocating memory with BMSallocMemoryArray(). If the parameter is changed, the
5886  * old string is freed with BMSfreeMemoryArray() and the new one is copied to a new
5887  * memory area allocated with BMSallocMemoryArray(). When the parameter is freed,
5888  * the memory is freed with BMSfreeMemoryArray().
5889  * The user should not interfere with this internal memory management. Accessing
5890  * the string parameter through the given valueptr is okay as long as it does not
5891  * involve reallocating memory for the string.
5892  *
5893  * In some cases, it is necessary to keep track of changes in a parameter.
5894  * If this is the case, the user can define a method by the PARAMCHGD callback and use this method as
5895  * the @c paramchgd parameter of the @c SCIPaddXyzParam() method, also giving a pointer to the data, which is
5896  * needed in this method, as @c paramdata. If this method is not NULL, it is called every time
5897  * the value of the parameter is changed.
5898  */
5899 
5900 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5901 
5902 /**@page MEMORY Using the memory functions of SCIP
5903  *
5904  * SCIP provides three ways for allocating memory:
5905  * -# <b>block memory:</b> efficient handling of memory blocks of similar small sizes
5906  * -# <b>buffer memory:</b> efficient handling of memory that needs to locally be allocated and freed
5907  * -# <b>standard memory:</b> access to standard malloc/free
5908  *
5909  * <em>Whenever possible, the first two should be used, because of reasons detailed below.</em>
5910  *
5911  * In the following, we provide a brief description of these methods. We refer the reader to the dissertation of Tobias
5912  * Achterberg for more details. We also present best practice models.
5913  *
5914  * @section MEMBACK Background
5915  *
5916  * The main goals for providing such particular methods are:
5917  * - <em>Accounting:</em> Using its own functions, SCIP knows the total size of memory allocated internally and can change its
5918  * behavior: for instance, it can change to "memory saving mode" (using depth first search (DFS) and possibly do a garbage
5919  * collection). It also allows for keeping a memory limit.
5920  * - <em>Speed:</em> SCIP often needs to allocate a very large number of small blocks of similar sizes (often powers of
5921  * two). Depending on the operating system and compiler, the methods implemented in SCIP can be faster, since blocks
5922  * of the same size are grouped together. Especially at the end of the 1990ies the standard malloc/free methods were
5923  * quite ineffective. The experiments of Tobias Achterberg in 2007 show a speed improvement of 11 % when using block
5924  * memory.
5925  * - <em>Efficiency:</em> Since blocks are groups in sizes, the blocks do not need to store their sizes within each
5926  * block. In comparison, standard malloc/free stores the size using one word for each memory chunk. The price to pay
5927  * is that one needs to pass the size to the methods that free a block. In any case, the methods in SCIP can save
5928  * memory. Moreover, buffer memory is stored in similar places and not spread out, which also might help cache.
5929  * - <em>Debugging:</em> All of the possibilities provide methods to detect memory leaks. Together with tools like
5930  * valgrind, this can be quite effective in avoiding such problems.
5931  *
5932  * @n
5933  * @section BLKMEM Block memory
5934  *
5935  * SCIP offers its own block memory handling, which allows efficient handling of smaller blocks of memory in cases in
5936  * which many blocks of the same (small) size appear. This is adequate for branch-and-cut codes in which small blocks
5937  * of the same size are allocated and freed very often (for data structures used to store rows or branch-and-bound
5938  * nodes). Actually, most blocks allocated within SCIP have small sizes like 8, 16, 30, 32, 64. The idea is simple:
5939  * There is a separate list of memory blocks for each interesting small size. When allocating memory, the list is
5940  * checked for a free spot in the list; if no such spot exists, the list is enlarged. Freeing just sets the block to be
5941  * available. Very large blocks are handled separately. See the dissertation of Tobias Achterberg for more details.
5942  *
5943  * One important comment is that freeing block memory requires the size of the block in order to find the right list.
5944  *
5945  * The most important functions are
5946  * - SCIPallocBlockMemory(), SCIPallocBlockMemoryArray() to allocate memory
5947  * - SCIPfreeBlockMemory(), SCIPfreeBlockMemoryArray() to free memory
5948  *
5949  * An example code is:
5950  * \code
5951  * SCIP_RETCODE dosomething(
5952  * SCIP* scip
5953  * )
5954  * {
5955  * int nvars;
5956  * int* array;
5957  *
5958  * nvars = SCIPgetNVars(scip);
5959  * SCIP_CALL( SCIPallocBlockMemoryArray(scip, &array, nvars) );
5960  *
5961  * do something ...
5962  *
5963  * SCIPfreeBlockMemoryArray(scip, &array, nvars);
5964  * }
5965  * \endcode
5966  * @n
5967  *
5968  * @section BUFMEM Buffer memory
5969  *
5970  * @subsection BUFMEMSTD Standard Buffer Memory
5971  *
5972  * In addition to block memory, SCIP offers buffer memory. This should be used if memory is locally used within a
5973  * function and freed within the same function. For this purpose, SCIP has a list of memory buffers that are reused for
5974  * this purpose. In this way, a very efficient allocation/freeing is possible.
5975  *
5976  * Note that the buffers are organized in a stack, i.e., freeing buffers in reverse order of allocation is faster.
5977  *
5978  * The most important functions are
5979  * - SCIPallocBuffer(), SCIPallocBufferArray() to allocate memory,
5980  * - SCIPfreeBuffer(), SCIPfreeBufferArray() to free memory.
5981  *
5982  * @subsection BUFMEMCLEAN Clean Buffer Memory
5983  *
5984  * SCIP 3.2 introduced a new type of buffer memory, the <em>clean buffer</em>. It provides memory which is initialized to zero
5985  * and requires the user to reset the memory to zero before freeing it. This can be used at performance-critical
5986  * places where only few nonzeros are added to a dense array and removing these nonzeros individually is much faster
5987  * than clearing the whole array. Similar to the normal buffer array, the clean buffer should be used for temporary memory
5988  * allocated and freed within the same function.
5989  *
5990  * The most important functions are
5991  * - SCIPallocCleanBufferArray() to allocate memory,
5992  * - SCIPfreeCleanBufferArray() to free memory.
5993  *
5994  * @n
5995  * @section STDMEM Standard memory
5996  *
5997  * SCIP provides an access to the standard C functions @c malloc and @c free with the additional feature of tracking
5998  * memory in debug mode. In this way, memory leaks can be easily detected. This feature is automatically activated in
5999  * debug mode.
6000  *
6001  * The most important functions are
6002  * - SCIPallocMemory(), SCIPallocMemoryArray() to allocate memory,
6003  * - SCIPfreeMemory(), SCIPfreeMemoryArray() to free memory.
6004  *
6005  * @n
6006  * @section MEMBESTPRACTICE Best Practice of Using Memory Functions
6007  *
6008  * Since allocating and freeing memory is very crucial for the speed and memory consumption of a program, it is
6009  * important to keep the following notes and recommendations in mind.
6010  *
6011  * @subsection GEN General Notes
6012  *
6013  * The following holds for all three types of memory functions:
6014  * - In debug mode, the arguments are checked for overly large allocations (usually arising from a bug). Note that all
6015  * arguments are converted to unsigned values of type @c size_t, such that negative sizes are converted into very
6016  * large values.
6017  * - The functions always allocate at least one byte and return non-NULL pointers if memory is available. In particular,
6018  * freeing is always possible.
6019  * - The freeing methods set the pointer to the memory to NULL.
6020  * - Debugging can be supported by using the compiler flags @p NOBLKMEM=true, @p NOBUFMEM=true, @p NOBLKBUFMEM=true
6021  * that turn off the usage of block memory, buffer memory, as well as block and buffer memory, respectively. Since,
6022  * the internal block and buffer memory is freed at the end (leaving no memory leaks), turning them off allows tools
6023  * like valgrind to find memory leaks.
6024  * - Moreover, additional checks can be turned on by defining @p CHECKMEM in memory.c.
6025  *
6026  * @n
6027  * @subsection DOS Things to do ...
6028  *
6029  * - Use buffer memory if your memory chunk can be allocated and freed within the same function.
6030  * - Use buffer and block memory wherever possible, because of the reasons explained above.
6031  * - Free memory in the reverse order in which it was allocated! For block and buffer memory this @b significantly
6032  * speeds up the code.
6033  * - Use as few memory allocations/freeing operations as possible, since these functions take a significant amount of time.
6034  *
6035  * @n
6036  * @subsection DONTS Things to avoid ...
6037  *
6038  * - Avoid the usage of standard memory, since SCIP is unaware of the size used in such blocks.
6039  * - Avoid reallocation with only slightly increased size, rather use a geometrically growing
6040  * size allocation. SCIPcalcMemGrowSize() is one way to calculate new sizes.
6041  * - Be careful with buffer memory reallocation: For single buffers, the memory is reallocated (using malloc); since
6042  * the actual space might be larger than what was needed at allocation time, reallocation sometimes comes without
6043  * extra cost. Note that reallocating block memory in most cases implies moving memory arround.
6044  */
6045 
6046 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6047 
6048 /**@page DEBUG Debugging
6049  *
6050  * If you need to debug your own code that uses SCIP, here are some tips and tricks:
6051  *
6052  * - Use <b>asserts</b> in your code to show preconditions for the parameters, invariants and postconditions.
6053  * Assertions are boolean expressions which inevitably have to evaluate to <code>TRUE</code>. Consider the
6054  * following example:
6055  *
6056  * @refsnippet{src/scip/cons_linear.c,SnippetDebugAssertions}
6057  *
6058  * As you can see, both pointers and integers are checked for valid values at the beginning of the
6059  * function <code>consdataCatchEvent()</code>. This is particularly important for, e.g., array indices like
6060  * the variable <code>pos</code> in this example, where using the <code>consdata->nvars[pos]</code>
6061  * pointer could result in unexspected behaviour
6062  * if the asserted precondition on <code>pos</code> were not matched and <pos> were an arbitrary index
6063  * outside the array range.
6064  *
6065  * - In order to activate assertions, use the <b>Debug mode</b> by compiling SCIP via
6066  * \code
6067  * make OPT=dbg
6068  * \endcode and run the code. See \ref MAKE for further information about compiler options for SCIP.
6069  *
6070  * - Spending only little extra time on
6071  * asserting preconditions saves most of the time spent on debugging!
6072  *
6073  * - Turn on <b>additional debug output</b> by adding the line
6074  * \code
6075  * #define SCIP_DEBUG
6076  * \endcode
6077  * at the top of SCIP files you want to analyze. This will output messages included in the code using
6078  * <code>SCIPdebugMsg(scip, ...)</code> (or <code>SCIPdebugMessage()</code>), see \ref EXAMPLE_1.
6079  * We recommend to also use <code>SCIPdebugMsg(scip, ...)</code> in your own code for being able to activate
6080  * debug output in the same way.
6081  * - If available on your system, we recommend to use a debugger like <code>gdb</code>
6082  * to trace all function calls on the stack,
6083  * display values of certain expressions, manually break the running code, and so forth.
6084  * - If available on your system, you can use software like <a href="http://valgrind.org">valgrind</a> to check for uninitialized
6085  * values or segmentation faults.
6086  * - For checking the usage of SCIP memory, you can use
6087  * <code>SCIPprintMemoryDiagnostic()</code>. This outputs memory that is currently in use,
6088  * which can be useful after a <code>SCIPfree()</code> call.
6089  * - If there are memory leaks for which you cannot detect the origin, you can remake your code with the option NOBLKBUFMEM=true
6090  * (do not forget to clean your code before with <code>make OPT=... LPS=... clean</code>). After that valgrind (or similar) helps
6091  * to detect leaked memory.
6092  * - If your code cuts off a feasible solution, but you do not know which component is responsible,
6093  * you can use the debugging mechanism (see \ref EXAMPLE_2). Therefore, a given solution is read and it
6094  * is checked for every reduction, whether the solution will be pruned globally.
6095  *
6096  * @section EXAMPLE_1 How to activate debug messages
6097  * For example, if we include a <code>\#define SCIP_DEBUG</code> at the top of \ref heur_oneopt.h, recompile SCIP
6098  * in DBG mode, and run the SCIP interactive shell to solve p0033.mps from the
6099  * <a href="http://miplib.zib.de/miplib3/miplib.html">MIPLIB 3.0</a> , we get some output like:
6100  *
6101  * \include debugexamples/example1.txt
6102  *
6103  * @section EXAMPLE_2 How to add a debug solution
6104  *
6105  * Continuing the example above, we finish the solving process.
6106  * The optimal solution can now be written to a file:
6107  * \include debugexamples/example2_1.txt
6108  *
6109  * If we afterwards recompile SCIP with the additional compiler flag <code>DEBUGSOL=true</code>,
6110  * set the parameter <code>misc/debugsol = check/p0033.sol</code>, and run SCIP again it will output:
6111  * \include debugexamples/example2_2.txt
6112  * Further debug output would only appear, if the solution was cut off in the solving process.
6113  */
6114 
6115 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6116 
6117 /**@page TEST How to run automated tests with SCIP
6118  *
6119  * SCIP comes along with a set of useful tools that allow to perform automated tests. The
6120  * following is a step-by-step guide from setting up the test environment for evaluation and
6121  * customization of test runs.
6122  *
6123  *
6124  * @section SETUP Setting up the test environment
6125  *
6126  * At first you should create a file listing all problem instances that should be part of the test.
6127  * This file has to be located in the the directory <code>scip/check/testset/</code>
6128  * and has to have the file extension <code>.test</code>, e.g., <code>testrun.test</code>,
6129  * in order to be found by the <code>scip/check/check.sh</code> script.
6130  * \n
6131  * All test problems can be listed in the <code>test</code>-file by a relative path,
6132  * e.g., <code>../../problems/instance1.lp</code> or absolute path, e.g., <code>/home/problems/instance2.mps</code>
6133  * in this file. Only one problem should be listed on every line (since the command <code>cat</code> is used to parse this file).
6134  * Note that these problems have to be readable for SCIP in order to solve them.
6135  * However, you can use different file formats.
6136  *
6137  * Optionally, you can provide a solution file in the <code>scip/check/testset/</code> directory containing
6138  * known information about the feasibility and the best known objective values for the test instances.
6139  * SCIP can use these values to verify the results. The file has to have the same basename as the
6140  * <code>.test</code>-file, i.e., in our case <code>testrun.solu</code>. One line can only contain
6141  * information about one test instance. A line has to start with the type of information given:
6142  *
6143  * - <code>=opt=</code> stating that a problem name with an optimal objective value follows
6144  * - <code>=best=</code> stating that a problem name with a best know objective value follows
6145  * - <code>=inf=</code> stating that a problem name follows which is infeasible
6146  *
6147  * With these information types you can encode for an instance named <code>instance1.lp</code> the following
6148  * information:
6149  * - The instance has a known optimal (objective) value of 10.
6150  * \code
6151  * =opt= instance1 10
6152  * \endcode
6153  * - The instance has a best known solution with objective value 15.
6154  * \code
6155  * =best= instance1 15
6156  * \endcode
6157  * - The instance is feasible (but has no objective function or we don't know a solution value)
6158  * \code
6159  * =feas= instance1
6160  * \endcode
6161  * - The instance is infeasible.
6162  * \code
6163  * =inf= instance1
6164  * \endcode
6165  *
6166  * If you don't know whether the instance is feasible or not (so the status is unknown),
6167  * you can omit the instance in the <code>solu</code>-file or write
6168  * \code
6169  * =unkn= instance1
6170  * \endcode
6171  *
6172  * <b>Note that in all lines the file extension of the file name is omitted.</b>
6173  * \n
6174  * See the files <code>scip/check/testset/short.test</code> and <code>scip/check/testset/short.solu</code>
6175  * for an example of a <code>test</code>-file and its corresponding <code>solu</code>-file.
6176  *
6177  *
6178  *
6179  * @section STARTING Starting a test run
6180  *
6181  *
6182  * \code
6183  * make TEST=testrun test
6184  * \endcode
6185  *
6186  * in the SCIP root directory. Note that <code>testrun</code> is exactly the basename of our
6187  * <code>test</code>-file (<code>testrun.test</code>). This will cause SCIP to solve our test instances
6188  * one after another and to create various output files (see \ref EVAL).
6189  *
6190  *
6191  * @section EVAL Evaluating a test run
6192  *
6193  * During computation, SCIP automatically creates the directory <code>scip/check/results/</code>
6194  * (if it does not already exist) and stores the following output files there.
6195  *
6196  * \arg <code>*.out</code> - output of <code>stdout</code>
6197  * \arg <code>*.err</code> - output of <code>stderr</code>
6198  * \arg <code>*.set</code> - copy of the used settings file
6199  *
6200  * \arg <code>*.res</code> - ASCII table containing a summary of the computational results
6201  * \arg <code>*.tex</code> - TeX table containing a summary of the computational results
6202  * \arg <code>*.pav</code> - <a href="http://www.gamsworld.org/performance/paver/">PAVER</a> output
6203  *
6204  * The last three files in the above list, i.e., the files containing a summary of the computational results,
6205  * can also be generated manually. Therefore the user has to call the <code>evalcheck.sh</code> script in the
6206  * @c check directory with the corresponding @c out file as argument. For example, this may be useful if the user stopped the
6207  * test before it was finished, in which case the last three files will not be automatically generated by SCIP.
6208  *
6209  * The last column of the ASCII summary table contains the solver status. We distinguish the following statuses: (in order of priority)
6210  *
6211  * \arg abort: solver broke before returning solution
6212  * \arg fail: solver cut off a known feasible solution (value of the <code>solu</code>-file is beyond the dual bound;
6213  * especially if problem is claimed to be solved but solution is not the optimal solution)
6214  * <b>or</b> if a final solution check revealed a violation of one of the original constraints.
6215  * \arg ok: solver solved problem with the value in solu-file
6216  * \arg solved: solver solved problem which has no (optimal) value in solu-file (since we here cannot detect the direction
6217  * of optimization, it is possible that a solver claims an optimal solution which contradicts a known feasible solution)
6218  * \arg better: solver found solution better than known best solution (or no solution was noted in the <code>solu</code>-file so far)
6219  * \arg gaplimit, sollimit: solver reached gaplimit or limit of number of solutions (at present: only in SCIP)
6220  * \arg timeout: solver reached any other limit (like time or nodes)
6221  * \arg unknown: otherwise
6222  *
6223  * Additionally the <code>evalcheck.sh</code> script can generate a <code>solu</code>-file by calling
6224  * \code
6225  * ./evalcheck.sh writesolufile=1 NEWSOLUFILE=<solu-file> <out-file>
6226  * \endcode
6227  * where <code><solu-file></code> denotes the filename of the new file where the solutions shall be
6228  * (and <code><out-file></code> denotes the output (<code>.out</code>) files to evaluate).
6229  *
6230  * Another feature can be enabled by calling:
6231  * \code
6232  * ./evalcheck.sh printsoltimes=1 ...
6233  * \endcode
6234  * The output has two additional columns containing the solving time until the first and the best solution was found.
6235  *
6236  *
6237  * @b Note: The @em basename of all these files is the same and has the following structure
6238  * which allows us to reconstruct the test run:
6239  *
6240  * \code
6241  * check.<test name>.<binary>.<machine name>.<setting name>
6242  * \endcode
6243  *
6244  * \arg <<code>test name</code>> indicates the name of the the test file, e.g., <code>testrun</code>
6245  * \arg <<code>binary</code>> defines the used binary, e.g., <code>scip-3.2.0.linux.x86_64.gnu.opt.spx</code>
6246  * \arg <<code>machine name</code>> tells the name of the machine, e.g., <code>mycomputer</code>
6247  * \arg <<code>setting name</code>> denotes the name of the used settings, e.g., <code>default</code>
6248  * means the (SCIP) default settings were used
6249  *
6250  * Using the examples out of the previous listing the six file names would have the name:
6251  *
6252  * \code
6253  * check.testrun.scip-1.1.0.linux.x86.gnu.opt.spx.mycomputer.default.<out,err,set,res,tex,pav>
6254  * \endcode
6255  *
6256  *
6257  * @section USING Using customized setting files
6258  *
6259  * It is possible to use customized settings files for the test run instead of testing SCIP with default settings.
6260  * These have to be placed in the directory <code>scip/settings/</code>.
6261  *
6262  * @b Note: Several common user parameters such as, e.g., the time limit and node limit parameters,
6263  * <b>cannot</b> be controlled by the settings file, whose specifications would be overwritten
6264  * by optional command line arguments to the <code>make test</code> command, see @ref ADVANCED
6265  * for a list of available advanced testing options that have to be specified from the command line.
6266  *
6267  * @b Note: Accessing settings files in subfolders of the @c settings directory is currently not supported.
6268  *
6269  * To run SCIP with a custom settings file, say for example <code>fast.set</code>, we call
6270  *
6271  * \code
6272  * make TEST=testrun SETTINGS=fast test
6273  * \endcode
6274  *
6275  * in the SCIP root directory. It is possible to enter a list of settings files as a double-quoted,
6276  * comma-separated list of settings names as <code>fast</code> above, i.e. <code>SETTINGS="fast,medium,slow"</code>
6277  * will invoke the solution process for every instance with the three settings <code>fast.set, medium.set, slow.set</code>
6278  * before continuing with the next instance from the <code>.test</code>-file. This may come in handy if the
6279  * whole test runs for a longer time and partial results are already available.
6280  *
6281  *
6282  * @section ADVANCED Advanced options
6283  *
6284  * We can further customize the test run by specifying the following options in the <code>make</code> call:
6285  *
6286  * \arg <code>CONTINUE</code> - continue the test run if it was previously aborted [default: "false"]
6287  * \arg <code>DISPFREQ</code> - display frequency of the output [default: 10000]
6288  * \arg <code>FEASTOL</code> - LP feasibility tolerance for constraints [default: "default"]
6289  * \arg <code>LOCK</code> - should the test run be locked to prevent other machines from performing the same test run [default: "false"]
6290  * \arg <code>MAXJOBS=n</code> - run tests on 'n' cores in parallel. Note that several instances are solved in parallel, but
6291  * only one thread is used per job (parallelization is not that easy) [default: 1]
6292  * \arg <code>MEM</code> - memory limit in MB [default: 6144]
6293  * \arg <code>NODES</code> - node limit [default: 2100000000]
6294  * \arg <code>TIME</code> - time limit for each test instance in seconds [default: 3600]
6295  * \arg <code>SETCUTOFF</code> - if set to '1', an optimal solution value (from the <code>.solu</code>-file) is used as objective limit [default: 0]
6296  * \arg <code>THREADS</code> - the number of threads used for solving LPs, if the linked LP solver supports multithreading [default: 1]
6297  * \arg <code>VALGRIND</code> - run valgrind on the SCIP binary; errors and memory leaks found by valgrind are reported as fails [default: "false"]
6298  *
6299  *
6300  * @section COMPARE Comparing test runs for different settings
6301  *
6302  * Often test runs are performed on the basis of different settings. In this case, it is useful to
6303  * have a performance comparison. For this purpose, we can use the <code>allcmpres.sh</code> script in
6304  * the @c check directory.
6305  *
6306  * Suppose, we performed our test run with two different settings, say <code>fast.set</code> and
6307  * <code>slow.set</code>. Assuming that all other parameters (including the SCIP binary), were the same,
6308  * we may have the following <code>res</code>-files in the directory <code>scip/check/results/</code>
6309  *
6310  * \code
6311  * check.testrun.scip-3.2.0.linux.x86_64.gnu.opt.spx.mycomputer.fast.res
6312  * check.testrun.scip-3.2.0.linux.x86_64.gnu.opt.spx.mycomputer.slow.res
6313  * \endcode
6314  *
6315  * For a comparison of both computations, we simply call
6316  *
6317  * \code
6318  * allcmpres.sh results/check.testrun.scip-3.2.0.linux.x86_64.gnu.opt.spx.mycomputer.fast.res \
6319  * results/check.testrun.scip-3.2.0.linux.x86_64.gnu.opt.spx.mycomputer.slow.res
6320  * \endcode
6321  *
6322  * in the @c check directory. This produces an ASCII table on the console that provide a detailed
6323  * performance comparison of both test runs. Note that the first <code>res</code>-file serves as reference
6324  * computation. The following list explains the output.
6325  * (The term "solver" can be considered as the combination of SCIP with a specific setting file.)
6326  *
6327  * \arg <code>Nodes</code> - Number of processed branch-and-bound nodes.
6328  * \arg <code>Time</code> - Computation time in seconds.
6329  * \arg <code>F</code> - If no feasible solution was found, then '#', empty otherwise.
6330  * \arg <code>NodQ</code> - Equals Nodes(i) / Nodes(0), where 'i' denotes the current solver and '0' stands for the reference solver.
6331  * \arg <code>TimQ</code> - Equals Time(i) / Time(0).
6332  * \arg <code>bounds check</code> - Status of the primal and dual bound check.
6333  *
6334  * \arg <code>proc</code> - Number of instances processed.
6335  * \arg <code>eval</code> - Number of instances evaluated (bounds check = "ok", i.e., solved to optimality
6336  * within the time and memory limit and result is correct). Only these instances are used in the calculation
6337  * of the mean values.
6338  * \arg <code>fail</code> - Number of instances with bounds check = "fail".
6339  * \arg <code>time</code> - Number of instances with timeout.
6340  * \arg <code>solv</code> - Number of instances correctly solved within the time limit.
6341  * \arg <code>wins</code> - Number of instances on which the solver won (i.e., the
6342  * solver was at most 10% slower than the fastest solver OR had the best
6343  * primal bound in case the instance was not solved by any solver within
6344  * the time limit).
6345  * \arg <code>bett</code> - Number of instances on which the solver was better than the
6346  * reference solver (i.e., more than 10% faster).
6347  * \arg <code>wors</code> - Number of instances on which the solver was worse than the
6348  * reference solver (i.e., more than 10% slower).
6349  * \arg <code>bobj</code> - Number of instances on which the solver had a better primal
6350  * bound than the reference solver (i.e., a difference larger than 10%).
6351  * \arg <code>wobj</code> - Number of instances on which the solver had a worse primal
6352  * bound than the reference solver (i.e., a difference larger than 10%).
6353  * \arg <code>feas</code> - Number of instances for which a feasible solution was found.
6354  * \arg <code>gnodes</code> - Geometric mean of the processed nodes over all evaluated instances.
6355  * \arg <code>shnodes</code> - Shifted geometric mean of the processed nodes over all evaluated instances.
6356  * \arg <code>gnodesQ</code> - Equals nodes(i) / nodes(0), where 'i' denotes the current
6357  * solver and '0' stands for the reference solver.
6358  * \arg <code>shnodesQ</code> - Equals shnodes(i) / shnodes(0).
6359  * \arg <code>gtime</code> - Geometric mean of the computation time over all evaluated instances.
6360  * \arg <code>shtime</code> - Shifted geometric mean of the computation time over all evaluated instances.
6361  * \arg <code>gtimeQ</code> - Equals time(i) / time(0).
6362  * \arg <code>shtimeQ</code> - Equals shtime(i) / shtime(0).
6363  * \arg <code>score</code> - N/A
6364  *
6365  * \arg <code>all</code> - All solvers.
6366  * \arg <code>optimal auto settings</code> - Theoretical result for a solver that performed 'best of all' for every instance.
6367  * \arg <code>diff</code> - Solvers with instances that differ from the reference solver in the number of
6368  * processed nodes or in the total number of simplex iterations.
6369  * \arg <code>equal</code> - Solvers with instances whose number of processed nodes and total number of
6370  * simplex iterations is equal to the reference solver (including a 10% tolerance) and where no timeout
6371  * occured.
6372  * \arg <code>all optimal</code> - Solvers with instances that could be solved to optimality by
6373  * <em>all</em> solvers; in particular, no timeout occurred.
6374  *
6375  * Since this large amount of information is not always needed, one can generate a narrower table by calling:
6376  * \code
6377  * allcmpres.sh short=1 ...
6378  * \endcode
6379  * where <code>NodQ</code>, <code>TimQ</code> and the additional comparison tables are omitted.
6380  *
6381  * If the <code>res</code>-files were generated with the parameter <code>printsoltimes=1</code>
6382  * we can enable the same feature here as well by calling:
6383  * \code
6384  * allcmpres.sh printsoltimes=1 ...
6385  * \endcode
6386  * As in the evaluation, the output contains the two additional columns of the solving time until the first and the best solution was found.
6387  *
6388  * @section STATISTICS Statistical tests
6389  *
6390  * The \c allcmpres script also performs two statistical tests for comparing different settings: For deciding whether
6391  * more feasible solutions have been found or more instances have been solved to optimality or not, we use a McNemar
6392  * test. For comparing the running time and number of nodes, we use a variant of the Wilcoxon signed rank test. A
6393  * detailed explanation can be found in the PhD thesis of Timo Berthold (Heuristic algorithms in global MINLP solvers).
6394  *
6395  * @subsection McNemar McNemar test
6396  *
6397  * Assume that we compare two settings \c S1 and \c S2 with respect to the number of instances solved to optimality
6398  * within the timelimit. The null hypothesis would be "Both settings lead to an equal number of instances being solved
6399  * to optimality", which we would like to disprove. Let \f$n_1\f$ be the number of instances solved by setting \c S1
6400  * but not by \c S2, and let \f$n_2\f$ be the number of instances solved by setting \c S2 but not by \c S1. The
6401  * McNemar test statistic is
6402  * \f[
6403  * \chi^2 = \frac{(n_1 - n_2)^2}{n_1 + n_2}.
6404  * \f]
6405  * Under the null hypothesis, \f$\chi^2\f$ is chi-squared distributed with one degree of freedom. This allows to compute
6406  * a \f$p\f$-value as the probability for obtaining a similar or even more extreme result under the null hypothesis.
6407  * More explicitly, \c allcmpres uses the following evaluation:
6408  * - \f$0.05 < p\f$: The null hypothesis is accepted (marked by "X").
6409  * - \f$0.005 < p \leq 0.05\f$: The null hypothesis might be false (marked by "!").
6410  * - \f$0.0005 < p \leq 0.005\f$: The null hypothesis can be false (marked by "!!").
6411  * - \f$p \leq 0.0005\f$: The null hypothesis is very likely false (marked by "!!!").
6412  *
6413  * As an example consider the following output:
6414  * \code
6415  * McNemar (feas) x2 0.0000, 0.05 < p X
6416  * McNemar (opt) x2 6.0000, p ~ (0.005, 0.05] !
6417  * \endcode
6418  * Here, \c x2 represents \f$\chi^2\f$.
6419  *
6420  * In this case, the test with respect to the number of found feasible solutions is irrelevant, since their number is
6421  * equal. In particular, the null hypothesis gets accepted (i.e., there is no difference in the settings - this is
6422  * marked by "X").
6423  *
6424  * With respect to the number of instances solved to optimality within the timelimit, we have that \f$0.005 < p <=
6425  * 0.05\f$ (marked by <tt>p ~ (0.005, 0.05)</tt>). Thus, there is some evidence that the null hypothesis is false, i.e., the
6426  * settings perform differently; this is marked by "!". In the concrete case, we have 230 instances, all of which are
6427  * solved by setting \c S2, but only 224 by setting \c S1.
6428  *
6429  * @subsection Wilcoxon Wilcoxon signed rank test
6430  *
6431  * Assume that we compare two settings \c S1 and \c S2 with respect to their solution times (within the time limit). We
6432  * generate a sorted list of the ratios of the run times, where ratios that are (absolutely or relatively) within 1\%
6433  * of 1.0 are discarded, and ratios between 0.0 and 0.99 are replaced with their negative inverse in order to
6434  * obtain a symmetric distribution for the ratios around the origin.
6435  * We then assign ranks 1 to \c N to the remaining \c N data points in nondecreasing
6436  * order of their absolute ratio. This yields two groups \c G1
6437  * and \c G2 depending on whether the ratios are smaller than -1.0 or larger than 1.0 (\c G1 contains the instances for which
6438  * setting \c S1 is faster). Then the sums of the ranks in groups \c G1 and \c G2 are computed, yielding values \c R1
6439  * and \c R2, respectively.
6440  *
6441  * The Wilcoxon test statistic is then
6442  * \f[
6443  * z = \frac{\min(R1, R2) - \frac{N(N+1)}{4}}{\sqrt{\frac{N(N+1)(2N+1)}{24}}},
6444  * \f]
6445  * which we assume to be (approximately) normally distributed (with zero mean) and allows to compute the probability
6446  * \f$p\f$ that one setting is faster than the other. (Note that for \f$N \leq 60\f$, we apply a correction by
6447  * subtracting 0.5 from the numerator).
6448  *
6449  * As an example consider the following output:
6450  * \code
6451  * Wilcoxon (time) z -0.1285, 0.05 <= p X
6452  * Wilcoxon (nodes) z -11.9154, p < 0.0005 !!!
6453  * \endcode
6454  * While the \f$z\f$-value is close to zero for the run time, it is extremely negative regarding the solving nodes. This latter
6455  * tendency for the number of nodes is significant on a 0.05 % level, i.e., the probability \f$p\f$ that setting \c S1 uses more
6456  * nodes than setting \c S2 is negligible (this null hypothesis is rejected - marked by "!!!").
6457  *
6458  * However, the null hypothesis is not rejected with respect to the run time. In the concrete case, setting \c S1 has a
6459  * shifted geometric mean of its run times (over 230 instances) of 248.5, for \c S2 it is 217.6. This makes a ratio of
6460  * 0.88. Still - the null hypothesis is not rejected.
6461  *
6462  * @section SOLVER Testing and Evaluating using GAMS
6463  *
6464  * Analogously to the target <code>test</code> there is another target to run automated tests with <a href="http://www.gams.com/">gams</a>
6465  * \code
6466  * make testgams GAMSSOLVER=xyz
6467  * \endcode
6468  * For this target, the option GAMSSOLVER has to be given to specify the name of a GAMS solver to run, e.g. GAMSSOLVER=SCIP.
6469  * Additional advanced options specific to this target are:
6470  * GAMS to specify the GAMS executable (default: gams),
6471  * GAP to specify a gap limit (default: 0.0),
6472  * CLIENTTMPDIR to specify a directory where GAMS should put its scratch files (default: /tmp),
6473  * CONVERTSCIP to specify a SCIP which can be used to convert non-gams files into gams format (default: bin/scip, if existing; set to "no" to disable conversion).
6474  * The following options are NOT supported (and ignored): DISPFREQ, FEASTOL, LOCK.
6475  * A memory limit (MEM option) is only passed as workspace option to GAMS, but not enforced via ulimit (it's up to the solver to regard and obey the limit).
6476  *
6477  * Note: This works only if the referred programs are installed globally on your machine.
6478  *
6479  * The above options like <code>TIME</code> are also available for gams.
6480  *
6481  * After the testrun there should be an <code>.out</code>, an <code>.err</code> and a <code>.res</code> file
6482  * with the same basename as described above.
6483  *
6484  * Furthermore you can also use the script <code>allcmpres.sh</code> for comparing results.
6485  *
6486  */
6487 
6488 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6489 
6490 /**@page CHG1 Interface changes between SCIP 0.9 and SCIP 1.0
6491  *
6492  * @section CHGPARAM New parameters
6493  *
6494  * - All functions SCIP<datatype>Param() got a new parameter "isadvanced".
6495  * \n
6496  * This does not influence the performance of SCIP, but the position of the parameter in the settings menu.
6497  * Hence, if you do not care about this, you can assign any value to it.
6498  * You should add the corresponding flag to the SCIP<datatype>Param() calls in your own source code.
6499  *
6500  */
6501 
6502 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6503 
6504 /**@page CHG2 Interface changes between SCIP 1.0 and SCIP 1.1
6505  *
6506  * - SCIPcreateChild() has a new last parameter giving an estimate for value of best feasible solution in the subtree to
6507  * be created. One possibility is to use SCIPgetLocalOrigEstimate() for this value.
6508  *
6509  * - The callback \ref CONSCHECK in the constraint handlers now has a new parameter <code>printreason</code> that tells
6510  * a constraint handler to output the reason for a possible infeasibility of the solution to be checked using
6511  * SCIPinfoMessage(). Have a look at one of the constraint handlers implemented in SCIP to see how it works. This
6512  * methodology makes it possible to output the reason of a violation in human readable form, for instance, for the check
6513  * at the end of a SCIP run, where the obtained best solution is checked against the original formulation.\n This change
6514  * often has little effect on C-implementations, since this parameter can be safely ignored with respect to the
6515  * correctness of the code. The corresponding C++ method scip::ObjConshdlr::scip_check(), however, has to be extended
6516  * and will not compile otherwise.
6517  *
6518  * - SCIPcheckSolOrig() is restructured. The last two parameters have changed. They are now bools indicating
6519  * whether the reason for the violation should be printed to the standard output and whether all violations should be
6520  * printed. This reflects the changes in the constraint handlers above, which allow the automation of the feasibility
6521  * test. The pointers to store the constraint handler or constraint are not needed anymore.
6522  *
6523  * - New parameters "extension" and "genericnames" in SCIPprintTransProblem(), SCIPprintOrigProblem(),
6524  * SCIPwriteOrigProblem(), and SCIPwriteTransProblem() defining the requested format or NULL for default CIP format
6525  * and using generic names for the variables and constraints. Examples are
6526  * - <code>SCIPprintTransProblem(scip, NULL, NULL, TRUE)</code> displays the transformed problem in CIP format with
6527  * generic variables and constraint names
6528  * - <code>SCIPprintOrigProblem(scip, NULL, "lp", FALSE)</code> displays the original problem in LP format with
6529  * original variables and constraint names.
6530  *
6531  * - New callback method SCIP_DECL_READERWRITE(x) in type_reader.h; this method is called to write a problem to file
6532  * stream in the format the reader stands for; useful for writing the transformed problem in LP or MPS format. Hence,
6533  * also SCIPincludeReader() has changed.
6534  *
6535  * - New parameter "conshdlrname" in SCIPincludeLinconsUpgrade().
6536  *
6537  * - Added user pointer to callback methods of hash table, see pub_misc.h.
6538  *
6539  * - New parameter "extension" in SCIPreadProb(), defining a desired file format or NULL if file extension should be used.
6540  */
6541 
6542 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6543 
6544 /**@page CHG3 Interface changes between SCIP 1.1 and SCIP 1.2
6545  *
6546  *
6547  * @section CHGCALLBACKS New and changed callbacks
6548  *
6549  * - The callback SCIP_DECL_PRICERREDCOST(x) in the \ref PRICER "pricers" has two new parameters:
6550  * - A <code>result</code> pointer determines whether the pricer guarantees that there exist no more variables. This allows for early branching.
6551  * - A pointer for providing a lower bound.
6552  *
6553  * - The \ref CONS "constraint handlers" have two new callback methods (see type_cons.h for more details).
6554  * - SCIP_DECL_CONSCOPY(x) - this method can be used to copy a constraint.
6555  * - SCIP_DECL_CONSPARSE(x) - this method can be used to parse a constraint in CIP format.
6556  *
6557  * @section CHGINTERFUNC New parameters in interface methods
6558  *
6559  * - SCIPcalcMIR() in scip.h has two new parameter "mksetcoefsvalid" and "sol". The parameter "mksetcoefsvalid" stores
6560  * whether the coefficients of the mixed knapsack set ("mksetcoefs") computed in SCIPlpCalcMIR() are valid. If the mixed knapsack constraint obtained after aggregating LP rows
6561  * is empty or contains too many nonzero elements the generation of the <b>c-MIR cut</b> is aborted in SCIPlpCalcMIR() and "mksetcoefs" is not valid.
6562  * The input parameter "sol" can be used to separate a solution different from the LP solution.
6563  *
6564  * - SCIPgetVarClosestVlb() and SCIPgetVarClosestVub() in scip.h have a new parameter "sol". It can be used to obtain the <b>closest variable bound</b> w.r.t. a solution different from the LP solution.
6565  *
6566  * @section MISCELLANEOUS Miscellaneous
6567  *
6568  * - A significant change for <b>C++ users</b> is that all include files of SCIP
6569  * automatically detect C++ mode, i.e., no <code>extern "C"</code> is needed anymore.
6570  *
6571  * For further release notes we refer to the \ref RELEASENOTES "Release notes".
6572  */
6573 
6574 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6575 
6576 /**@page CHG4 Interface changes between SCIP 1.2 and SCIP 2.0
6577  *
6578  *
6579  * @section CHGCALLBACKS4 New and changed callbacks
6580  *
6581  *
6582  * - <b>Copying a SCIP instance</b>:
6583  * <br>
6584  * <br>
6585  * - All plugins, like \ref BRANCH "branching rules" and \ref HEUR "primal heuristics", have a new callback method (see, e.g.,
6586  * type_branch.h and type_heur.h for more details):
6587  * - SCIP_DECL_BRANCHCOPY(x), SCIP_DECL_HEURCOPY(x) etc.
6588  * - When copying a SCIP instance, these methods are called to copy the plugins.
6589  * <br>
6590  * <br>
6591  * - Constraint handlers have two new callback methods. One for copying the constraint handler plugins
6592  * SCIP_DECL_CONSHDLRCOPY() and the other for copying a constraint itself, SCIP_DECL_CONSCOPY().
6593  * <br>
6594  * <br>
6595  * - Variables have a new callback method (see type_var.h for more details):
6596  * - SCIP_DECL_VARCOPY(x) - When copying a SCIP instance, this method is called to copy the variables' data.
6597  * <br>
6598  * <br>
6599  * - The main problem has a new callback method (see type_prob.h for more details):
6600  * - SCIP_DECL_PROBCOPY(x) - When copying a SCIP instance, this method is called to copy the problem's data.
6601  * <br>
6602  * <br>
6603  * - The argument success in SCIP_DECL_CONSCOPY has been renamed to valid.
6604  *
6605  * - <b>Branching on externally given candidates</b>:
6606  * <br>
6607  * <br>
6608  * - The \ref BRANCH "branching rules" have a second new callback method (see type_branch.h for more details):
6609  * - SCIP_DECL_BRANCHEXECEXT(x) - This method can be used to branch on external branching candidates,
6610  * which can be added by a user's "relaxation handler" or "constraint handler" plugin, calling <code>SCIPaddExternBranchCand()</code>.
6611  *
6612  * - <b>Restarts</b>:
6613  * <br>
6614  * <br>
6615  * - The callback SCIP_DECL_PROBEXITSOL(x) in the main problem has one new parameter (see type_prob.h for more details):
6616  * - The parameter <code>restart</code> is <code>TRUE</code> if the callback method was triggered by a restart.
6617  *
6618  *
6619  * <br>
6620  * @section CHGINTERFUNC4 Changed interface methods
6621  *
6622  * - <b>Copying a SCIP instance</b>:
6623  * <br>
6624  * <br>
6625  * - Every new callback method resulted in a new parameter of the include function for the corresponding plugin,
6626  * e.g., SCIPincludeBranchrule() has two new parameters <code>SCIP_DECL_BRANCHCOPY((*branchcopy))</code> and
6627  * <code>SCIP_DECL_BRANCHEXECREL((*branchexecrel))</code>. In the same fashion, the new callbacks
6628  * SCIP_DECL_VARCOPY and SCIP_DECL_PROBCOPY led to new parameters in SCIPcreateVar() and SCIPcreateProb() in
6629  * scip.c, respectively.
6630  * <br><br>
6631  * - SCIPincludeHeur() and SCIPincludeSepa() in \ref scip.h, as well as scip::ObjSepa() and scip::ObjHeur(), have a new parameter:
6632  * - <code>usessubscip</code> - It can be used to inform SCIP that the heuristic/separator to be included uses a secondary SCIP instance.
6633  * <br><br>
6634  * - SCIPapplyRens() in \ref heur_rens.h has a new parameter <code>uselprows</code>. It can be used to switch from LP rows
6635  * to constraints as basis of the sub-SCIP constructed in the RENS heuristic.
6636  * <br>
6637  * <br>
6638  * - W.r.t. to copy and the C++ wrapper classes there are two new classes. These are <code>ObjCloneable</code> and
6639  * <code>ObjProbCloneable</code>. The constraint handlers and variables pricers are derived from
6640  * <code>ObjProbCloneable</code> and all other plugin are derived from <code>ObjCloneable</code>. Both
6641  * classes implement the function <code>iscloneable()</code> which return whether a plugin is clone
6642  * able or not. Besides that
6643  * each class has a function named <code>clone()</code> which differ in their signature.
6644  * See objcloneable.h, objprobcloneable.h, and the TSP example for more details.
6645  *
6646  * - <b>Branching</b>:
6647  * <br><br>
6648  * - The method SCIPgetVarStrongbranch() has been replaced by two methods SCIPgetVarStrongbranchFrac() and
6649  * SCIPgetVarStrongbranchInt().
6650  * <br><br>
6651  * - The methods SCIPgetVarPseudocost() and SCIPgetVarPseudocostCurrentRun() in \ref scip.h now return the pseudocost value of
6652  * one branching direction, scaled to a unit interval. The former versions of SCIPgetVarPseudocost() and
6653  * SCIPgetVarPseudocostCurrentRun() are now called SCIPgetVarPseudocostVal() and SCIPgetVarPseudocostValCurrentRun(), respectively.
6654  * <br>
6655  * <br>
6656  * - The methods SCIPgetVarConflictScore() and SCIPgetVarConflictScoreCurrentRun() in \ref scip.h are now called
6657  * SCIPgetVarVSIDS() and SCIPgetVarVSIDSCurrentRun(), respectively.
6658  * <br><br>
6659  * - The methods SCIPvarGetNInferences(), SCIPvarGetNInferencesCurrentRun(), SCIPvarGetNCutoffs(), and
6660  * SCIPvarGetNCutoffsCurrentRun() are now called SCIPvarGetInferenceSum(), SCIPvarGetInferenceSumCurrentRun(),
6661  * SCIPvarGetCutoffSum(), and SCIPvarGetCutoffSumCurrentRun(), respectively. Furthermore, they now return
6662  * <code>SCIP_Real</code> instead of <code>SCIP_Longint</code> values.
6663  *
6664  * - <b>Others</b>:
6665  * <br><br>
6666  * - SCIPcutGenerationHeuristicCmir() in sepa_cmir.h has three new parameters:
6667  * - <code>maxmksetcoefs</code> - If the mixed knapsack constraint obtained after aggregating LP rows contains more
6668  * than <code>maxmksetcoefs</code> nonzero coefficients the generation of the <b>c-MIR cut</b> is aborted.
6669  * - <code>delta</code> - It can be used to obtain the scaling factor which leads to the best c-MIR cut found within
6670  * the cut generation heuristic. If a <code>NULL</code> pointer is passed, the corresponding c-MIR cut will already be
6671  * added to SCIP by SCIPcutGenerationHeuristicCmir(). Otherwise, the user can generate the cut and add it to SCIP
6672  * on demand afterwards.
6673  * - <code>deltavalid</code> - In case, the user wants to know the best scaling factor, i.e., <code>delta</code> passed is not <code>NULL</code>,
6674  * <code>deltavalid</code> will be <code>TRUE</code> if the stored scaling factor <code>delta</code> will lead to a violated c-MIR cut.
6675  * <br>
6676  * <br>
6677  * - All functions for setting <b>user parameters</b> of different types like SCIPparamSetBool(), SCIPparamSetChar(),
6678  * SCIPparamSetInt(), SCIPparamSetLongint(), and SCIPparamSetString() in pub_paramset.h have a new parameter:
6679  * - <code>quiet</code> - It prevents any output during the assign to a new value.
6680  *
6681  * <br>
6682  * @section MISCELLANEOUS4 Miscellaneous
6683  *
6684  * - The NLPI library is now a separate library that is required when linking against the SCIP library.
6685  * This requires changes to Makefiles that use SCIP, see the \ref RELEASENOTES "Release notes" for more details.
6686  *
6687  * - We do not distinguish between <b>block memory</b> for the original and the transformed problem anymore. The same
6688  * block memory is now used in both problem stages.
6689  *
6690  * - The usage of <b>strong branching</b> changed. Now, SCIPstartStrongbranch() and SCIPendStrongbranch() must be
6691  * called before and after strong branching, respectively.
6692  *
6693  * - All <b>C++</b> objects and constructors have a SCIP pointer, now.
6694  *
6695  * - The <b>predefined setting files</b> like "settings/cuts/off.set,aggressive.set,fast.set" have been replaced by
6696  * interface methods like SCIPsetHeuristics(), SCIPsetPresolving(), SCIPsetSeparating(), and SCIPsetEmphasis() in
6697  * \ref scip.h and by user dialogs in the interactive shell like
6698  * <br>
6699  * <br>
6700  * <code>SCIP&gt; set {heuristics|presolving|separating} emphasis {aggressive|fast|off}</code>
6701  * <br>
6702  * <br>
6703  * or
6704  * <br>
6705  * <br>
6706  * <code>SCIP&gt; set emphasis {counter|cpsolver|easycip|feasibility|hardlp|optimality}</code>
6707  *
6708  *
6709  * <br>
6710  * For further release notes we refer to the \ref RELEASENOTES "Release notes".
6711  */
6712 
6713 /* - SCIP now has "lazy bounds", which are useful for column generation - see @ref PRICER_REMARKS "pricer remarks" for an explanation.
6714  *
6715  * - SCIP has rudimentary support to solve quadratic nonlinear integer programs - see \ref cons_quadratic.h.
6716  *
6717  * - There are LP-interfaces to QSopt and Gurobi (rudimentary).
6718  *
6719  * - SCIP can now handle indicator constraints (reading (from LP, ZIMPL), writing, solving, ...) - see \ref cons_indicator.h.
6720  *
6721  * - One can now do "early branching" useful for column generation.
6722  *
6723  * - Can now run a black-box lexicographic dual simplex algorithm.
6724  */
6725 
6726  /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6727  /**@page CHG5 Interface changes between SCIP 2.0 and SCIP 2.1
6728  *
6729  *
6730  * @section CHGCALLBACKS5 New and changed callbacks
6731  *
6732  * - <b>Presolving</b>:
6733  * <br>
6734  * <br>
6735  * - The new parameters "nnewaddconss" and "naddconss" were added to the constraint handler callback method SCIP_DECL_CONSPRESOL()
6736  * and the presolver callback method SCIP_DECL_PRESOLEXEC(). These parameters were also added to corresponding C++ wrapper class methods.
6737  * - Propagators are now also called in during presolving, this is supported by the new callback methods SCIP_DECL_PROPINITPRE(),
6738  * SCIP_DECL_PROPEXITPRE(), and SCIP_DECL_PROPPRESOL().
6739  * - New parameters "isunbounded" and "isinfeasible" for presolving initialization (SCIP_DECL_CONSINITPRE(),
6740  * SCIP_DECL_PRESOLINITPRE(), SCIP_DECL_PROPINITPRE()) and presolving deinitialization (SCIP_DECL_CONSEXITPRE(),
6741  * SCIP_DECL_PRESOLEXITPRE(), SCIP_DECL_PROPEXITPRE()) callbacks of presolvers,
6742  * constraint handlers and propagators, telling the callback whether the problem was already declared to be
6743  * unbounded or infeasible. This allows to avoid expensive steps in these methods in case the problem is already
6744  * solved, anyway.
6745  * <br>
6746  * <br>
6747  * <DIV class="note">
6748  * Note, that the C++ methods
6749  * - scip::ObjConshdlr::scip_presol() corresponding to SCIP_DECL_CONSPRESOL()
6750  * - scip::ObjConshdlr::scip_initpre() corresponding to SCIP_DECL_CONSINITPRE()
6751  * - scip::ObjPresol::scip_initpre() corresponding to SCIP_DECL_PRESOLINITPRE()
6752  * - scip::ObjProp::scip_initpre() corresponding to SCIP_DECL_PROPINITPRE()
6753  * - scip::ObjConshdlr::scip_exitpre() corresponding to SCIP_DECL_CONSEXITPRE()
6754  * - scip::ObjPresol::scip_exitpre() corresponding to SCIP_DECL_PRESOLEXITPRE()
6755  * - scip::ObjProp::scip_exitpre() corresponding to and SCIP_DECL_PROPEXITPRE()
6756  * .
6757  * are virtual functions. That means, if you are not adding the new parameters, your code will still compile, but these methods are not executed.
6758  * </DIV>
6759  *
6760  * - <b>Constraint Handler</b>:
6761  * <br>
6762  * <br>
6763  * - The new constraint handler callback SCIP_DECL_CONSDELVARS() is called after variables were marked for deletion.
6764  * This method is optional and only of interest if you are using SCIP as a branch-and-price framework. That means,
6765  * you are generating new variables during the search. If you are not doing that just define the function pointer
6766  * to be NULL.
6767  * <br>
6768  * If this method gets implemented you should iterate over all constraints of the constraint handler and delete all
6769  * variables that were marked for deletion by SCIPdelVar().
6770  *
6771  * - <b>Problem Data</b>:
6772  * <br>
6773  * <br>
6774  * - The method SCIPcopyProb() and the callback SCIP_DECL_PROBCOPY() got a new parameter "global" to indicate whether the global problem or a local version is copied.
6775  *
6776  * - <b>Conflict Analysis</b>:
6777  * <br>
6778  * <br>
6779  * - Added parameter "separate" to conflict handler callback method SCIP_DECL_CONFLICTEXEC() that defines whether the conflict constraint should be separated or not.
6780  *
6781  * - <b>NLP Solver Interface</b>:
6782  * <br>
6783  * <br>
6784  * - The callbacks SCIP_DECL_NLPIGETSOLUTION() and SCIP_DECL_NLPISETINITIALGUESS() got new parameters to get/set values of dual variables.
6785  * - The callback SCIP_DECL_NLPICOPY() now passes the block memory of the target SCIP as an additional parameter.
6786  *
6787  * <br>
6788  * @section CHGINTERFUNC5 Changed interface methods
6789  *
6790  * - <b>Writing and Parsing constraints</b>:
6791  * <br>
6792  * <br>
6793  * - The methods SCIPwriteVarName(), SCIPwriteVarsList(), and SCIPwriteVarsLinearsum() got a new boolean parameter "type"
6794  * that indicates whether the variable type should be written or not.
6795  * - The method SCIPwriteVarsList() got additionally a new parameter "delimiter" that defines the character which is used for delimitation.
6796  * - The methods SCIPparseVarName() and SCIPparseVarsList() got a new output parameter "endptr" that is filled with the position where the parsing stopped.
6797  *
6798  * - <b>Plugin management</b>:
6799  * <br>
6800  * <br>
6801  * - SCIPincludeProp() got additional parameters to set the timing mask of the propagator and the new callbacks and parameters related to calling the propagator in presolving.
6802  * - SCIPincludeConshdlr() got additional parameters to set the variable deletion callback function and the timing mask for propagation.
6803  *
6804  * - <b>Constraint Handlers</b>:
6805  * <br>
6806  * <br>
6807  * - Method SCIPseparateRelaxedKnapsack() in knapsack constraint handler got new parameter "cutoff", which is a pointer to store whether a cutoff was found.
6808  * - Method SCIPincludeQuadconsUpgrade() of quadratic constraint handler got new parameter "active" to indicate whether the upgrading method is active by default.
6809  *
6810  * - <b>Nonlinear expressions, relaxation, and solver interface</b>:
6811  * <br>
6812  * <br>
6813  * - The methods SCIPexprtreeEvalSol(), SCIPexprtreeEvalIntLocalBounds(), and SCIPexprtreeEvalIntGlobalBounds() have been renamed to SCIPevalExprtreeSol(),
6814  * SCIPevalExprtreeLocalBounds(), and SCIPevalExprtreeGlobalBounds() and are now located in scip.h.
6815  * - Various types and functions dealing with polynomial expressions have been renamed to use the proper terms "monomial" and "polynomial".
6816  * - The methods SCIPnlpGetObjective(), SCIPnlpGetSolVals(), and SCIPnlpGetVarSolVal() have been removed, use SCIPgetNLPObjval(), SCIPvarGetNLPSol()
6817  * and SCIPcreateNLPSol() to retrieve NLP solution values instead.
6818  * - Removed methods SCIPmarkRequireNLP() and SCIPisNLPRequired(), because the NLP is now always constructed if nonlinearities are present.
6819  * - SCIPgetNLP() has been removed and NLP-methods from pub_nlp.h have been moved to scip.h, which resulted in some renamings, too.
6820  * - The functions SCIPnlpiGetSolution() and SCIPnlpiSetInitialGuess() got additional arguments to get/set dual values.
6821  * - The method SCIPgetNLPI() got a new parameter "nlpiproblem", which is a pointer to store the NLP solver interface problem.
6822  *
6823  * - <b>Others</b>:
6824  * <br>
6825  * <br>
6826  * - SCIPgetVarCopy() got a new parameter "success" that will be FALSE if method is called after problem creation stage and no hash map is given or no image for
6827  * the given variable is contained in the given hash map.
6828  * - Removed method SCIPreadSol(); call solution reading via SCIPreadProb() which calls the solution reader for .sol files.
6829  * - SCIPchgVarType() got an extra boolean parameter to store if infeasibility is recognized while upgrading a variable from continuous type to an integer type.
6830  * - SCIPdelVar() got a new parameter "deleted", which stores whether the variable was successfully marked to be deleted.
6831  * - SCIPcalcNodeselPriority() got a new parameter "branchdir", which defines the type of branching that was performed: upwards, downwards, or fixed.
6832  * - The parameters "timelimit" and "memorylimit" were removed from SCIPapplyRens().
6833  *
6834  * <br>
6835  * @section MISCELLANEOUS5 Miscellaneous
6836  *
6837  * - The result value SCIP_NEWROUND has been added, it allows a separator/constraint handler to start a new separation round
6838  * (without previous calls to other separators/conshdlrs).
6839  * - All timing flags are now defined type_timing.h.
6840  * - The variable deletion event is now a variable specific event and not global, anymore.
6841  * - The emphasis setting types now distinguish between plugin-type specific parameter settings (default, aggressive, fast, off), which are changed by
6842  * SCIPsetHeuristics/Presolving/Separating(), and global emphasis settings (default, cpsolver, easycip, feasibility, hardlp, optimality, counter),
6843  * which can be set using SCIPsetEmphasis().
6844  *
6845  * <br>
6846  * For further release notes we refer to the \ref RELEASENOTES "Release notes".
6847  */
6848 
6849  /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6850  /**@page CHG6 Interface changes between SCIP 2.1 and SCIP 3.0
6851  *
6852  *
6853  * @section CHGCALLBACKS6 New and changed callbacks
6854  *
6855  * - <b>Conflict Analysis</b>:
6856  * <br>
6857  * <br>
6858  * - Added parameter "relaxedbds" to conflict handler callback method SCIP_DECL_CONFLICTEXEC(). This array contains
6859  * bounds which are sufficient to create a valid conflict
6860  *
6861  * - <b>Constraint Handler</b>:
6862  * <br>
6863  * <br>
6864  * - New optional callback methods in constraint handlers: SCIP_DECL_CONSGETVARS and SCIP_DECL_CONSGETNVARS.
6865  * These callbacks, if implemented, should return an array of all variables and the number of all variables used
6866  * by the given constraint, respectively. (This method might, e.g., be called by a presolver)
6867  * - Added a propagation timing parameter "proptiming" to SCIP_DECL_CONSPROP(), giving the current timing at which
6868  * this method is called
6869  * - Added a parameter 'restart' to the SCIP_DECL_CONSEXITSOL() callback method, indicating whether this call was
6870  * triggered by a restart.
6871  * - Added a parameter 'relaxedbd' to SCIP_DECL_CONSRESPROP() callback method. If explaining a given bound change
6872  * (index), it is sufficient to explain the reason for reaching the 'relaxedbd' value, see above
6873  * - Removed parameters "isunbounded", "isinfeasible" and "result" from SCIP_DECL_CONSINITPRE() and
6874  * SCIP_DECL_CONSEXITPRE() callback methods. It is not allowed to determine unboundedness or infeasibility in
6875  * these callbacks, anymore.
6876  *
6877  * - <b>Message Handler</b>:
6878  * <br>
6879  * <br>
6880  * - New callback method SCIP_DECL_MESSAGEHDLRFREE() which is called when the message handler is freed.
6881  * - The old callback method SCIP_DECL_MESSAGEERROR() was replaced by the callback method SCIP_DECL_ERRORPRINTING().
6882  *
6883  * - <b>Presolving</b>:
6884  * <br>
6885  * <br>
6886  * - Removed parameters "isunbounded", "isinfeasible" and "result" from SCIP_DECL_PRESOLINITPRE() and
6887  * SCIP_DECL_PRESOLSEXITPRE(). It is not allowed to determine unboundedness or infeasibility in these
6888  * callbacks, anymore.
6889  *
6890  * - <b>Propagator</b>:
6891  * <br>
6892  * <br>
6893  * - Added a propagation timing parameter "proptiming" to SCIP_DECL_PROPEXEC(), giving the
6894  * current timing at which this method is called.
6895  * - Added a parameter 'restart' to SCIP_DECL_PROPEXITSOL() callback method, indicating whether this call was
6896  * triggered by a restart.
6897  * - Added a parameter 'relaxedbd' to SCIP_DECL_PROPRESPROP() callback method. If explaining a given bound change
6898  * (index), it is sufficient to explain the reason for reaching the 'relaxedbd' value.
6899  * - Removed parameters "isunbounded", "isinfeasible" and "result" from SCIP_DECL_PROPINITPRE() and
6900  * SCIP_DECL_PROPEXITPRE() callback methods. It is not allowed to determined unboundedness or infeasibility in
6901  * these callbacks, anymore.
6902  *
6903  * - <b>NLP Solver Interface</b>:
6904  * <br>
6905  * <br>
6906  * - New NLPI callback SCIP_DECL_NLPISETMESSAGEHDLR() to set message handler in NLP solver interfaces.
6907  *
6908  * <br>
6909  * @section CHGINTERFUNC6 Changed interface methods
6910  *
6911  * - <b>Plugin management</b>:
6912  * <br>
6913  * <br>
6914  * - Added basic include methods for almost all plugin types, e.g., SCIPincludeConshdlrBasic();
6915  * these methods should make the usage easier, sparing out optional callbacks and parameters.
6916  * - To extend the basic functionalities, there are setter method to add
6917  * optional callbacks. For example SCIPsetConshdlrParse(), SCIPsetPropCopy() or SCIPsetHeurInitsol().
6918  *
6919  * - <b>Constraint Handlers</b>:
6920  * <br>
6921  * <br>
6922  * - Added basic creation methods for all constraints types, e.g., SCIPcreateConsBasicLinear(); these methods should make the usage easier,
6923  * sparing out optional callbacks and parameters.
6924  * - New methods SCIPgetConsVars() and SCIPgetConsNVars() (corresponding callbacks need to be implemented, see above)
6925  *
6926  * - <b>Problem</b>:
6927  * <br>
6928  * <br>
6929  * - Added basic creation methods SCIPcreateVarBasic() and SCIPcreateProbBasic() and setter functions
6930  * - Added method SCIPisPresolveFinished() which returns whether the presolving process would be stopped after the
6931  * current presolving round, given no further reductions will be found.
6932  * - Forbid problem modifications in SCIP_STAGE_{INIT,EXIT}PRESOLVE (see pre-conditions for corresponding methods in scip.h).
6933  *
6934  * - <b>Variable usage</b>:
6935  * <br>
6936  * <br>
6937  * - Renamed SCIPvarGetBestBound() to SCIPvarGetBestBoundLocal(), SCIPvarGetWorstBound() to
6938  * SCIPvarGetWorstBoundLocal() and added new methods SCIPvarGetBestBoundGlobal() and SCIPvarGetWorstBoundGlobal().
6939  * - Method SCIPvarGetProbvarSum() is not public anymore, use SCIPgetProbvarSum() instead.
6940  * - Replaced method SCIPvarGetRootRedcost() by SCIPvarGetBestRootRedcost().
6941  *
6942  * - <b>Message Handler</b>:
6943  * <br>
6944  * <br>
6945  * - Changed the message handler system within SCIP heavily such that it is thread-safe. SCIPcreateMessagehdlr() in
6946  * scip.{c,h} was replaced by SCIPmessagehdlrCreate() in pub_message.h/message.c with a changed parameter list.
6947  * - Error messages (SCIPerrorMessage()) are not handled via the message handler anymore; per default the error
6948  * message is written to stderr.
6949  *
6950  * - <b>Separation</b>:
6951  * <br>
6952  * <br>
6953  * - New functions SCIPcreateEmptyRowCons(), SCIPcreateEmptyRowSepa(), SCIPcreateRowCons(), and SCIPcreateRowSepa()
6954  * that allow to set the originating constraint handler or separator of a row respectively; this is, for instance,
6955  * needed for statistics on the number of applied cuts. If rows are created outside a constraint handler or separator
6956  * use SCIPcreateRowUnspec() and SCIPcreateEmptyRowUnspec(). The use of SCIPcreateEmptyRow() and SCIPcreateRow() is
6957  * deprecated.
6958  * - New functions SCIProwGetOrigintype(), SCIProwGetOriginCons(), and SCIProwGetOriginSepa() to obtain the originator
6959  * that created a row.
6960  *
6961  * - <b>LP interface</b>:
6962  * <br>
6963  * <br>
6964  * - SCIPlpiCreate() got a new parameter 'messagehdlr'.
6965  * - SoPlex LPI supports setting of SCIP_LPPAR_DUALFEASTOL when using SoPlex version 1.6.0.5 and higher.
6966  *
6967  * - <b>Nonlinear expressions, relaxation, and solver interface</b>:
6968  * <br>
6969  * <br>
6970  * - Renamed SCIPmarkNonlinearitiesPresent() to SCIPenableNLP() and SCIPhasNonlinearitiesPresent() to
6971  * SCIPisNLPEnabled().
6972  * - Method SCIPexprtreeRemoveFixedVars() is not public anymore.
6973  *
6974  * - <b>Counting</b>:
6975  * <br>
6976  * <br>
6977  * - Changed the counting system within SCIP heavily. SPARSESOLUTION was renamed to SCIP_SPARSESOL. New method for
6978  * SCIP_SPARSESOL usage, SCIPsparseSolCreate(), SCIPsparseSolFree(), SCIPsparseSolGetVars(),
6979  * SCIPsparseSolGetNVars(), SCIPsparseSolGetLbs(), SCIPsparseSolGetUbs() in (pub_)misc.{c,h}.
6980  * - Renamed SCIPgetCountedSparseSolutions() to SCIPgetCountedSparseSols() in cons_countsols.{c,h}.
6981  *
6982  * <br>
6983  * @section MISCELLANEOUS6 Miscellaneous
6984  *
6985  * - Replaced SCIPparamSet*() by SCIPchg*Param() (where * is either Bool, Int, Longint, Real, Char, or String).
6986  * - New parameter in SCIPcopy() and SCIPcopyPlugins() to indicate whether the message handler from the source SCIP
6987  * should be passed to the target SCIP (only the pointer is copied and the usage counter of the message handler is
6988  * increased).
6989  * - SCIPprintCons() does not print termination symbol ";\n" anymore; if wanted, use SCIPinfoMessage() to print
6990  * ";\n" manually
6991  * - All objscip *.h file now use the default SCIP interface macros.
6992  * - The methods SCIPsortedvecInsert*() have an additional parameter which can be used to receive the position where
6993  * the new element was inserted.
6994  * - New macro SCIPdebugPrintCons() to print constraint only if SCIP_DEBUG flag is set.
6995  *
6996  * <br>
6997  * For further information we refer to the \ref RELEASENOTES "Release notes" and the \ref CHANGELOG "Changelog".
6998  */
6999 
7000  /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
7001  /**@page CHG7 Interface changes between SCIP 3.0 and SCIP 3.1
7002  *
7003  *
7004  * @section CHGCALLBACKS7 New and changed callbacks
7005  *
7006  * - <b>Branching Rules</b>:
7007  * <br>
7008  * <br>
7009  * - new possible return value "SCIP_DIDNOTFIND" for SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_BRANCHEXECPS(), and
7010  * SCIP_DECL_BRANCHEXECEXT() callbacks to state that the branching rule searched, but did not find a branching.
7011  *
7012  * - <b>Domain Propagation</b>:
7013  * <br>
7014  * <br>
7015  * - added parameter "nmarkedconss" to SCIP_DECL_CONSPROP() callback which gives the number of constraints marked
7016  * for propagation (these constraints are listed first in the conss array given as parameter).
7017  *
7018  * - <b>Message Handler</b>:
7019  * <br>
7020  * <br>
7021  * - New generic messagehandler output callback method SCIP_DECL_MESSAGEOUTPUTFUNC().
7022  * - Removed parameter "msglength" from callback method SCIP_DECL_ERRORPRINTING().
7023  *
7024  * - <b>Variable Pricers</b>:
7025  * <br>
7026  * <br>
7027  * - Added parameter "stopearly" to callback method SCIP_DECL_PRICERREDCOST(). This boolean pointer should be used
7028  * by the pricer to state whether early branching should be performed, even if new variables were added in the
7029  * current pricing round.
7030  *
7031  * - <b>Primal Heuristics</b>:
7032  * <br>
7033  * <br>
7034  * - Added parameter "nodeinfeasible" to SCIP_DECL_HEUREXEC() callback which states whether the current subproblem
7035  * was already detected to be infeasible. In this case, the current LP solution might not respect local bounds,
7036  * and the heuristic must not assume that it does.
7037  *
7038  *
7039  * <br>
7040  * @section CHGINTERFUNC7 Changed interface methods
7041  *
7042  * - <b>Branching Rules</b>:
7043  * <br>
7044  * <br>
7045  * - Added parameter "nfracimplvars" to SCIPgetLPBranchCands()
7046  *
7047  * - <b>Constraint Handlers</b>:
7048  * <br>
7049  * <br>
7050  * - New method SCIPconshdlrGetStrongBranchPropTime() which returns the time used for domain propagation methods
7051  * of the constraint handler during strong branching.
7052  * - New method SCIPconsIsMarkedPropagate() which returns whether a constraint is marked for propagation.
7053  * - New methods SCIPconsAddUpgradeLocks() and SCIPconsGetNUpgradeLocks() to increase or get the number of upgrade
7054  * locks of a constraint.
7055  *
7056  * - <b>Domain Propagation</b>:
7057  * <br>
7058  * <br>
7059  * - New method SCIPpropGetStrongBranchPropTime() which returns the time spent by a domain propagator during strong
7060  * branching.
7061  * - New methods SCIPmarkConsPropagate() and SCIPunmarkConsPropagate to (un)mark a constraint for propagation.
7062  *
7063  * - <b>LP and Cutting Planes</b>:
7064  * <br>
7065  * <br>
7066  * - New methods SCIProwChgRank() and SCIProwGetRank() to change and get the rank of a cutting plane, respectively.
7067  * - Added parameter "sidetypes" to SCIPcalcMIR() to specify the specify row side type to be used.
7068  * - Added parameter "cutrank" to SCIPcalcMIR() and SCIPcalcStrongCG() which stores the rank of the returned cut.
7069  * - New method SCIPisCutApplicable() which returns whether a cut is good enough to be applied.
7070  * - Added parameter "infeasible" to SCIPaddCut() which is a pointer to store whether the cut is infeasible for the
7071  * local bounds.
7072  * - delayed cutpool
7073  * - New methods SCIPchgRowLhsDive() and SCIPchgRowRhsDive() to change left and right hand side of a row during diving.
7074  * - Added parameter "cutoff" to SCIPsolveDiveLP(), SCIPsolveProbingLP(), and SCIPsolveProbingLPWithPricing()
7075  * which is a pointer to store whether the diving/probing LP was infeasible or the objective limit was reached.
7076  *
7077  * - <b>Message Handler</b>:
7078  * <br>
7079  * <br>
7080  * - New method SCIPmessageVPrintError() to print an error message.
7081  * - Removed method SCIPmessagePrintWarningHeader().
7082  *
7083  * - <b>Parameters</b>:
7084  * <br>
7085  * <br>
7086  * - New method SCIPparamGetCharAllowedValues() to get the allowed values for a char parameter.
7087  *
7088  * - <b>Variables</b>:
7089  * <br>
7090  * <br>
7091  * - New structure to store value-based branching and inference history (see pub_history.h).
7092  * - New method SCIPvarGetValuehistory() to get the value-based history of a variable.
7093  *
7094  * - <b>Data structures</b>:
7095  * <br>
7096  * <br>
7097  * - New method SCIPgmlWriteNodeWeight() to write a node section including weight to a .gml graph file.
7098  * - New methods SCIPsparseSolGetFirstSol() and SCIPsparseSolGetNextSol() to get the first sparse solution
7099  * or iterate over the sparse solutions, respectively.
7100  * - New methods in pub_misc.h to handle a (circular) queue, e.g., SCIPqueueCreate(), SCIPqueueFree(),
7101  * SCIPqueueInsert(), ...
7102  * - New methods for hash tables: SCIPhashtableRemoveAll(), SCIPhashtableGetNElements(), SCIPhashtableGetLoad()
7103  * - New methods in pub_misc.h to handle a resource activity, e.g., SCIPactivityCreate(), SCIPactivityFree(),
7104  * SCIPactivityGetVar(), SCIPactivityGetDemand() ...
7105  * - New methods for digraphs: SCIPdigraphResize() to resize the graph and SCIPdigraphSetNodeDatas() and
7106  * SCIPdigraphGetNodeDatas() to set and get the data attached to the nodes.
7107  *
7108  * - <b>Misc</b>:
7109  * <br>
7110  * <br>
7111  * - New method SCIPcopyOrig() to copy the original problem. Analoguosly, use SCIPcopyOrigProb(), SCIPcopyOrigVars(),
7112  * and SCIPcopyOrigConss() to copy original problem data, variables, or constraints, respectively.
7113  * - New method SCIPcopyImplicationsCliques() to copy implications and cliques to a copied SCIP instance.
7114  * - New method SCIPgetParam() to get the parameter with a given name.
7115  * - New method SCIPaddOrigObjoffset() to add an offset to the objective function.
7116  * - New method SCIPgetNCheckConss() which returns the number of checked constraints.
7117  * - Added parameter "endptr" to SCIPparseVar() which stores the final string position after parsing.
7118  * - Added parameter "enablepropagation" to SCIPstartStrongbranch(), which can be used to enable strong branching
7119  * with domain propagation.
7120  * - New method SCIPgetVarStrongbranchWithPropagation() which performs strong branching with propagation on a variable.
7121  * - New method SCIPwriteCliqueGraph() to write the clique graph.
7122  * - New method SCIPdoNotMultaggr() which returns whether multi-aggregation was disabled.
7123  * - Added parameter "lazyconss" to SCIPwriteMIP() to swith writing removable rows as lazy constraints.
7124  * - New method SCIPcreateFiniteSolCopy() to create a copy of a solution with infinite fixings removed.
7125  * - New method SCIPadjustImplicitSolVals() which sets implicit integer variables to an integer value in the given
7126  * solution without deteriorating its objective value.
7127  * - New method SCIPprintDualSol() which prints the dual solution for a pure LP (works only with preprocessing disabled).
7128  * - New method SCIPgetOpenNodesData() which returns all unprocessed nodes.
7129  * - New method SCIPgetFirstLPTime() and SCIPgetNRootFirstLPIterations() to return time and iterations for the first
7130  * LP solve and SCIPgetFirstLPDualboundRoot() and SCIPgetFirstLPLowerboundRoot() to return the first root LP dual and
7131  * lower bound.
7132  * - New method SCIPgetNLimSolsFound() returning the number of feasible primal solution respecting the objective limit.
7133  * - Added parameter "endline" to SCIPprintDisplayLine() to switch printing a newline symbol at the end of the line.
7134  *
7135  * <br>
7136  * @section MISCELLANEOUS7 Miscellaneous
7137  *
7138  * - Moved LP solver interfaces to subdirectory src/lpi.
7139  *
7140  * <br>
7141  * For further information we refer to the \ref RELEASENOTES "Release notes" and the \ref CHANGELOG "Changelog".
7142  */
7143 
7144 
7145  /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
7146  /**@page CHG8 Interface changes between SCIP 3.1 and SCIP 3.2
7147  *
7148  *
7149  * @section CHGCALLBACKS8 New and changed callbacks
7150  *
7151  * - <b>Branching Rules</b>:
7152  * - Added parameter "forcestrongbranch" to SCIPselectVarStrongBranching()
7153  * - Added parameter "executebranching" SCIPexecRelpscostBranching()
7154  * - Added parameter "presoltiming" to SCIPpropCumulativeCondition()
7155  *
7156  * <br>
7157  * - <b>Domain Propagation</b>:
7158  *
7159  * <br>
7160  * - <b>Message Handler</b>:
7161  *
7162  * <br>
7163  * - <b>Variable Pricers</b>:
7164  *
7165  * <br>
7166  * - <b>Primal Heuristics</b>:
7167  * - Added parameter "freesubscip" to SCIPapplyProximity()
7168  *
7169  * <br>
7170  * @section CHGINTERFUNC8 Changed interface methods
7171  *
7172  * <br>
7173  * - <b>Branching Rules</b>:
7174  *
7175  * <br>
7176  * - <b>Constraint Handlers</b>:
7177  * - Removed method SCIPconshdlrIsPresolvingDelayed()
7178  * - Removed method SCIPconshdlrWasPresolvingDelayed()
7179  * - Renamed method SCIPconshdlrGetPropTimingmask() to SCIPconshdlrGetPropTiming()
7180  *
7181  * <br>
7182  * - <b>Domain Propagation</b>:
7183  *
7184  * <br>
7185  * - <b>LP and Cutting Planes</b>:
7186  * - Added parameter "inds" to SCIPgetLPBInvRow()
7187  * - Added parameter "ninds" to SCIPgetLPBInvRow()
7188  * - Added parameter "inds" to SCIPgetLPBInvCol()
7189  * - Added parameter "ninds" to SCIPgetLPBInvCol()
7190  * - Added parameter "inds" to SCIPgetLPBInvARow()
7191  * - Added parameter "ninds" to SCIPgetLPBInvARow()
7192  * - Added parameter "inds" to SCIPgetLPBInvACol()
7193  * - Added parameter "ninds" to SCIPgetLPBInvACol()
7194  * - Added parameter "maxweight" to SCIPcalcMIR()
7195  * - Added parameter "weightinds" to SCIPcalcMIR()
7196  * - Added parameter "nweightinds" to SCIPcalcMIR()
7197  * - Added parameter "rowlensum" to SCIPcalcMIR()
7198  * - Added parameter "inds" to SCIPcalcStrongCG()
7199  * - Added parameter "ninds" to SCIPcalcStrongCG()
7200  *
7201  * <br>
7202  * - <b>Message Handler</b>:
7203  *
7204  * <br>
7205  * - <b>Parameters</b>:
7206  *
7207  * <br>
7208  * - <b>Variables</b>:
7209  * - Removed method SCIPvarGetNBinImpls()
7210  *
7211  * <br>
7212  * - <b>Data structures</b>:
7213  * - Renamed method SCIPdigraphGetNodeDatas() to SCIPdigraphGetNodeData()
7214  * - Renamed method SCIPdigraphSetNodeDatas() to SCIPdigraphSetNodeData()
7215  * - Renamed method SCIPdigraphGetSuccessorsDatas() to SCIPdigraphGetSuccessorsData()
7216  *
7217  * <br>
7218  * - <b>Misc</b>:
7219  * - Removed parameter "delaypos" from SCIPincludeConshdlr()
7220  * - Added parameter "presoltiming" to SCIPincludeConshdlr()
7221  * - Added parameter "consgetdivebdchgs" to SCIPincludeConshdlr()
7222  * - Removed parameter "delaypos" from SCIPsetConshdlrPresol()
7223  * - Added parameter "presoltiming" to SCIPsetConshdlrPresol()
7224  * - Removed parameter "delaypos" from SCIPincludePresol()
7225  * - Added parameter "presoltiming" to SCIPincludePresol()
7226  * - Removed parameter "delaypos" from SCIPincludePresolBasic()
7227  * - Added parameter "presoltiming" to SCIPincludePresolBasic()
7228  * - Removed parameter "presoldelay" from SCIPincludePresol()
7229  * - Removed parameter "presoltiming" from SCIPincludePresol()
7230  * - Removed parameter "presoldelay" from SCIPsetPropPresol()
7231  * - Removed parameter "presoltiming" from SCIPsetPropPresol()
7232  * - Added parameter "ndomredsdown" to SCIPgetVarStrongbranchWithPropagation()
7233  * - Added parameter "ndomredsup" to SCIPgetVarStrongbranchWithPropagation()
7234  * - Added parameter "isequation" to SCIPaddClique()
7235  * - Removed parameter "writeimplications" from SCIPwriteCliqueGraph()
7236  * - Removed method SCIPallocBufferSize()
7237  * - Removed method SCIPduplicateBufferSize()
7238  * - Removed method SCIPreallocBufferSize()
7239  * - Removed method SCIPfreeBufferSize()
7240  * - Removed method callback SCIPdialogExecConflictgraph()
7241  * <br>
7242  * For further information we refer to the \ref RELEASENOTES "Release notes" and the \ref CHANGELOG "Changelog".
7243  */
7244 
7245 
7246 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
7247  /**@page CHG9 Interface changes between SCIP 3.2 and SCIP 4.0
7248  *
7249  *
7250  * @section CHGCALLBACKS9 New and changed callbacks
7251  *
7252  * - <b>Constraint Handlers</b>:
7253  * - new optional callback CONSENFORELAX to enforce a relaxation solution, see \ref CONS
7254  * - added argument "infeasible" to CONSINITLP
7255  *
7256  * <br>
7257  * - <b>Concurrent SCIP</b>:
7258  * - extended interface to support concurrent solving mode
7259  *
7260  * <br>
7261  * - <b>Message Handler</b>:
7262  *
7263  * <br>
7264  * - <b>Variable Pricers</b>:
7265  *
7266  * <br>
7267  * - <b>Primal Heuristics</b>:
7268  *
7269  * <br>
7270  * @section CHGINTERFUNC9 Changed interface methods
7271  *
7272  * <br>
7273  * - <b>Copying</b>:
7274  * - added arguments "fixedvars", "fixedvals", "nfixedvars" to SCIPcopyVars()
7275  * - added arguments "fixedvars", "fixedvals", "nfixedvars" to SCIPcopyOrigVars()
7276  * - renamed argument "success" to valid in SCIPgetConsCopy()
7277  *
7278  * <br>
7279  * - <b>Parameters</b>:
7280  * - renamed method SCIPcheckBoolParam() to SCIPisBoolParamValid()
7281  * - renamed method SCIPcheckLongintParam() to SCIPisLongintParamValid()
7282  * - renamed method SCIPcheckRealParam() to SCIPisRealParamValid()
7283  * - renamed method SCIPcheckCharParam() to SCIPisCharParamValid()
7284  * - renamed method SCIPcheckStringParam() to SCIPisStringParamValid()
7285  *
7286  * <br>
7287  * - <b>Relaxators</b>:
7288  * - added argument "includeslp" to SCIPincludeRelax() and SCIPincludeRelaxBasic()
7289  *
7290  * <br>
7291  * - <b>Primal Heuristics</b>:
7292  * - introduced new type SCIP_HEURTIMING for primal heuristic timing masks
7293  * - changed type of argument "timingmask" from unsigned int to SCIP_HEURTIMING in SCIPincludeHeur(), SCIPincludeHeurBasic()
7294  * - added argument "initialseed" to SCIPcreateDiveset()
7295  * <br>
7296  * - <b>Reoptimization</b>:
7297  * - renamed function SCIPgetReopSolsRun() to SCIPgetReoptSolsRun()
7298  *
7299  * <br>
7300  * - <b>Variables</b>:
7301  * - Removed method SCIPvarGetNBinImpls()
7302  *
7303  * <br>
7304  * - <b>Conflict Analysis</b>:
7305  * - added arguments "conftype" and "iscutoffinvolved" to SCIPinitConflictAnalysis()
7306  *
7307  * <br>
7308  * - <b>Constraint Handlers</b>:
7309  * - added argument "infeasible" to SCIPinitlpCons()
7310  *
7311  * <br>
7312  * - <b>Nonlinear Relaxation</b>:
7313  * - added argument "curvature" to SCIPcreateNlRow()
7314  *
7315  * <br>
7316  * - <b>Solutions</b>:
7317  * - added argument "completely" to SCIPtrySol(), SCIPtrySolFree(), SCIPcheckSol()
7318  *
7319  * - <b>Hashmap and Hashtable</b>:
7320  * - removed function SCIPcalcHashtableSize() since not required anymore for SCIP_HASHTABLE and SCIP_HASHMAP
7321  * - based on the initial size SCIP_HASHTABLE and SCIP_HASHMAP choose an appropriate size internally to allow insertion of that many elements without resizing
7322  * - SCIP_MULTIHASH behaves like the old SCIP_HASHTABLE and SCIPcalcMultihashSize() should be used as replacement for SCIPcalcHashtableSize()
7323  *
7324  * <br>
7325  * For further information we refer to the \ref RELEASENOTES "Release notes" and the \ref CHANGELOG "Changelog".
7326  */
7327 
7328  /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
7329  /**@page CHG10 Interface changes between SCIP 4.0 and SCIP 5.0
7330  *
7331  *
7332  * @section CHGCALLBACKS10 New and changed callbacks
7333  *
7334  * - <b>New types</b>:
7335  * - added new abstract selection algorithm SCIP_BANDIT together with callbacks
7336  * - added new type SCIP_TABLE together with callbacks to output SCIP statistics
7337  * - added new types for symmetry handling
7338  *
7339  * - <b>Separation callbacks</b>:
7340  * - added parameter "allowlocal" to SCIP_DECL_SEPAEXECLP and SCIP_DECL_SEPAEXECSOL
7341  *
7342  * - <b>NLP callbacks</b>
7343  * - added parameter "dstatssize" to SCIP_DECL_NLPIDELVARSET and SCIP_DECL_NLPIDELCONSSET
7344  * - added parameter "objval" to SCIP_DECL_NLPIGETSOLUTION
7345  *
7346  *
7347  * <br>
7348  * @section CHGINTERFUNC10 Changed interface methods
7349  *
7350  * <br>
7351  * - <b>Cutting plane separation methods</b>:
7352  * - changed function signature of SCIPcalcMIR()
7353  * - changed function signature of SCIPcalcStrongCG()
7354  * - added parameter "allowlocal" to SCIPseparateSol()
7355  * - new method SCIPaddRow() to replace deprecated SCIPaddCut()
7356  * - removed parameter "scaling" from SCIPgetRowprepViolation()
7357  *
7358  * <br>
7359  * - <b>Relaxator methods</b>:
7360  * - removed parameter "includeslp" from SCIPincludeRelax()
7361  * - added parameter "includeslp" to SCIPmarkRelaxSolValid(), SCIPsetRelaxSolVals(), and SCIPsetRelaxSolValsSol()
7362  * - removed functions SCIPrelaxIncludesLp() and SCIPrelaxSetIncludesLp()
7363  * - replaced method SCIPgetRelaxFeastolFactor() by SCIPrelaxfeastol() and added SCIPchgRelaxfeastol()
7364  *
7365  * <br>
7366  * - <b>LP interface</b>:
7367  * - replaced LP parameters SCIP_LPPARAM_LOBJLIM and SCIP_LPPARAM_UOBJLIM by SCIP_LPPARAM_OBJLIM
7368  *
7369  * <br>
7370  * - <b>Branching rules</b>:
7371  * - removed parameter "allowaddcons" from SCIPselectVarPseudoStrongBranching(), SCIPselectVarStrongBranching(), and
7372  * SCIPincludeBranchruleRelpscost()
7373  *
7374  * <br>
7375  * - <b>Primal heuristics</b>:
7376  * - SCIPheurPassIndicator() has a new parameter which allows to pass the objective of the solution
7377  *
7378  * <br>
7379  * - <b>Constraint Handlers</b>:
7380  * - generalized SCIPcreateConsOrbitope() and SCIPcreateConsBasicOrbitope() method to three orbitope types (full, partitioning, packing)
7381  *
7382  * <br>
7383  * - <b>NLP interface</b>:
7384  * - added argument "dstatssize" to SCIPnlpiDelVarSet() and SCIPnlpiDelConsSet()
7385  * - added modifier const to "exprtree" argument of SCIPnlpiChgExprtree()
7386  * - added parameter "objval" to SCIPnlpiGetSolution()
7387  * - added argument "varnameslength" to SCIPexprParse()
7388  * - dropped NLP termination status "SCIP_NLPTERMSTAT_UOBJLIM"
7389  * - SCIPnlpStatisticsCreate() and SCIPnlpStatisticsFree() now require a pointer to the block memory as argument
7390  *
7391  * <br>
7392  * - <b>Data structures</b>:
7393  * - methods SCIPrandomCreate() and SCIPrandomFree() are no longer public and should be replaced
7394  * by SCIPcreateRandom() and SCIPfreeRandom(), respectively (the new methods respect
7395  * the global parameter "randomization/randomseedshift" automatically)
7396  * - methods SCIPdigraphCreate() and SCIPdigraphCopy() are no longer public and should be replaced
7397  * by SCIPcreateDigraph() and SCIPcopyDigraph(), respectively, which receive a \SCIP argument
7398  * and are more robust towards future interface changes
7399  *
7400  * <br>
7401  * - <b>Misc</b>:
7402  * - added parameter "copytables" to SCIPcopyPlugins()
7403  * - allowed SCIPgetNConss() in stage SCIP_STAGE_INITSOLVE
7404  * - SCIPsolveParallel() is deprecated; use SCIPsolveConcurrent() instead
7405  * - changed return type of SCIPcliqueGetId() from "int" to "unsigned int"
7406  * - removed SCIPvarGetCliqueComponentIdx(); the connectedness information
7407  * of the clique table is now stored as a SCIP_DISJOINTSET member of the clique table
7408  * and cannot be publicly accessed
7409  *
7410  * <br>
7411  * @section CHGPARAMS10 Changed parameters
7412  *
7413  * - fixed typo: "heuristics/completesol/maxunkownrate" has changed to "heuristics/completesol/maxunknownrate"
7414  * - removed parameters "constraints/{abspower,bivariate,nonlinear,quadratic,soc}/scaling"
7415  * - replaced "constraints/quadratic/disaggregate" by "constraints/quadratic/maxdisaggrsize" to bound
7416  * the total number of created constraints when disaggregating a quadratic constraint
7417  * - removed parameters "constraints/{abspower,bivariate,quadratic,nonlinear}/mincutefficacysepa",
7418  * "constraints/{abspower,bivariate,quadratic,nonlinear}/mincutefficacyenfofac", and "constraints/soc/minefficacy"
7419  * - removed parameters "conflict/usemir" and "conflict/prefermir"
7420  * - removed parameter "separating/feastolfac"
7421  * - removed parameter "separating/orthofac"
7422  * - parameter "separating/maxstallrounds" only applies to nodes in the tree (not the root node, anymore); use the new
7423  * parameter "separating/maxstallroundsroot" for the root node
7424  * - removed parameters "heuristics/clique/{multiplier,initseed}"
7425  * - replaced parameter "heuristics/{clique,vbounds}/minfixingrate" by "heuristics/{clique,vbounds}/minintfixingrate" and
7426  * "heuristics/{clique,vbounds}/minmipfixingrate", which check the fixing rate before LP solving and after sub-MIP presolve
7427  * - removed parameter "separating/cgmip/allowlocal" (use parameter passed to separation callback instead)
7428  * - removed parameter "separating/{gomory,strongcg}/maxweightrange"
7429  * - changed and removed several parameters for zerohalf separator
7430  * - moved parameters for flowcover and cmir separators to "separating/aggregation"
7431  *
7432  *
7433  * <br>
7434  * For further information we refer to the \ref RELEASENOTES "Release notes" and the \ref CHANGELOG "Changelog".
7435  */
7436 
7437  /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
7438 
7439 /**@page COUNTER How to use SCIP to count/enumerate feasible solutions
7440  *
7441  * SCIP is capable of computing (count or enumerate) the number of feasible solutions of a given constraint integer
7442  * program. In case continuous variables are present, the number of feasible solutions for the projection to the
7443  * integral variables is counted/enumerated. This means, an assignment to the integer variables is counted if the
7444  * remaining problem (this is the one after fixing the integer variables w.r.t. to this assignment) is feasible.
7445  *
7446  * As a first step you have to load or create your problem in the usual way. In case of using the
7447  * interactive shell, you use the <code>read</code> command:
7448  *
7449  * <code>SCIP&gt; read &lt;file name&gt;</code>
7450  *
7451  * Afterwards you can count the number of feasible solution with the command <code>count</code>.
7452  *
7453  * <code>SCIP&gt; count</code>
7454  *
7455  * That means SCIP will count the number of solution but does not store (enumerate) them. If you are interested in that see
7456  * \ref COLLECTALLFEASEBLES.
7457  *
7458  * @note Since SCIP version 2.0.0 you do not have to worry about <tt>dual</tt> reductions anymore. These are
7459  * automatically turned off. The only thing you should switch off are restarts. These restarts can lead to a wrong
7460  * counting process. We recommend using the counting settings which can be set in the interactive shell as follows:
7461  *
7462  * <code>SCIP&gt; set emphasis counter</code>
7463  *
7464  * The SCIP callable library provides an interface method SCIPcount() which allows users to count the number of feasible
7465  * solutions to their problem. The method SCIPsetParamsCountsols(), which is also located in cons_countsols.h, loads the
7466  * predefined counting settings to ensure a safe count. The complete list of all methods that can be used for counting
7467  * via the callable library can be found in cons_countsols.h.
7468  *
7469  *
7470  * @section COUNTLIMIT Limit the number of solutions which should be counted
7471  *
7472  * It is possible to give a (soft) upper bound on the number solutions that should be counted. If this upper bound is
7473  * exceeded, SCIP will be stopped. The name of this parameter is <code>constraints/countsols/sollimit</code>. In
7474  * the interactive shell this parameter can be set as follows:
7475  *
7476  * <code>SCIP&gt; set constraints countsols sollimit 1000</code>
7477  *
7478  * In case you are using the callable library, this upper bound can be assigned by calling SCIPsetLongintParam() as follows:
7479  *
7480  * \code
7481  * SCIP_CALL( SCIPsetLongintParam( scip, "constraints/countsols/sollimit", 1000) );
7482  * \endcode
7483  *
7484  *
7485  * The reason why this upper bound is soft comes from the fact that, by default, SCIP uses a technique called unrestricted
7486  * subtree detection. Using this technique it is possible to detect several solutions at once. Therefore, it can happen
7487  * that the solution limit is exceeded before SCIP is stopped.
7488  *
7489  * @section COLLECTALLFEASEBLES Collect all feasible solution
7490  *
7491  * Per default SCIP only counts all feasible solutions. This means, these solutions are not stored. If you switch the
7492  * parameter <code>constraints/countsols/collect</code> to TRUE (the default value is FALSE) the detected solutions are
7493  * stored. Changing this parameter can be done in the interactive shell
7494  *
7495  * <code>SCIP&gt; set constraints countsols collect TRUE</code>
7496  *
7497  * as well as via the callable library
7498  *
7499  * \code
7500  * SCIP_CALL( SCIPsetBoolParam( scip, "constraints/countsols/collect", TRUE) );
7501  * \endcode
7502  *
7503  * @note The solution which are collected are stored w.r.t. the active variables. These are the variables which got not
7504  * removed during presolving.
7505  *
7506  * In case you are using the interactive shell you can write all collected solutions to a file as follows
7507  *
7508  * <code>SCIP&gt; write allsolutions &lt;file name&gt;</code>
7509  *
7510  * In that case the sparse solutions are unrolled and lifted back into the original variable space.
7511  *
7512  * The callable library provides a method which gives access to all collected sparse solutions. That is,
7513  * SCIPgetCountedSparseSolutions(). The sparse solutions you get are defined w.r.t. active variables. To get solutions
7514  * w.r.t. to the original variables. You have to do two things:
7515  *
7516  * -# unroll each sparse solution
7517  * -# lift each solution into original variable space by extending the solution by those variable which got removed
7518  * during presolving
7519  *
7520  * The get the variables which got removed during presolving, you can use the methods SCIPgetFixedVars() and
7521  * SCIPgetNFixedVars(). The method SCIPgetProbvarLinearSum() transforms given variables, scalars and constant to the
7522  * corresponding active variables, scalars and constant. Using this method for a single variable gives a representation
7523  * for that variable w.r.t. the active variables which can be used to compute the value for the considered solution (which
7524  * is defined w.r.t. active variables).
7525  *
7526  * For that complete procedure you can also check the source code of
7527  * \ref SCIP_DECL_DIALOGEXEC(SCIPdialogExecWriteAllsolutions) "SCIPdialogExecWriteAllsolutions()" cons_countsols.c which
7528  * does exactly that.
7529  *
7530  *
7531  * @section COUNTOPTIMAL Count number of optimal solutions
7532  *
7533  * If you are interested in counting the number of optimal solutions, this can be done with SCIP using the
7534  * <code>count</code> command by applying the following steps:
7535  *
7536  * -# Solve the original problem to optimality and let \f$c^*\f$ be the optimal value
7537  * -# Added the objective function as constraint with left and right hand side equal to \f$c^*\f$
7538  * -# load the adjusted problem into SCIP
7539  * -# use the predefined counting settings
7540  * -# start counting the number of feasible solutions
7541  *
7542  * If you do this, SCIP will collect all optimal solutions of the original problem.
7543  *
7544  */
7545 
7546 /**@page LICENSE License
7547  *
7548  * \verbinclude COPYING
7549  */
7550 
7551 /**@page FAQ Frequently Asked Questions (FAQ)
7552  * \htmlinclude faq.inc
7553  */
7554 
7555 /**@page INSTALL Installation information
7556  * \verbinclude INSTALL
7557  */
7558 
7559 /**@page INSTALL_CMAKE Installation information (CMake)
7560  * \verbinclude INSTALL_CMAKE
7561  */
7562 
7563 
7564 /**@page RELEASENOTES Release notes
7565  *
7566  * Please consult the <a href="https://opus4.kobv.de/opus4-zib/frontdoor/index/index/docId/6629">release report</a> for version 5.0 that explains many of the new features in detail.
7567  *
7568  * \verbinclude SCIP-release-notes-5.0
7569  *
7570  * A release report with an in-depth description of many of the new features in version 4.0 is available on <a href="http://www.optimization-online.org/DB_HTML/2017/03/5895.html">Optimization Online</a>.
7571  *
7572  * \verbinclude SCIP-release-notes-4.0.1
7573  *
7574  * \verbinclude SCIP-release-notes-4.0
7575  *
7576  * Please consult the <a href="http://nbn-resolving.de/urn:nbn:de:0297-zib-57675">release report</a> for version 3.2 that explains many of the new features in detail.
7577  *
7578  * \verbinclude SCIP-release-notes-3.2.1
7579  *
7580  * \verbinclude SCIP-release-notes-3.2
7581  *
7582  * \verbinclude SCIP-release-notes-3.1
7583  *
7584  * \verbinclude SCIP-release-notes-3.0.2
7585  *
7586  * \verbinclude SCIP-release-notes-3.0.1
7587  *
7588  * \verbinclude SCIP-release-notes-3.0
7589  *
7590  * \verbinclude SCIP-release-notes-2.1.1
7591  *
7592  * \verbinclude SCIP-release-notes-2.1
7593  *
7594  * \verbinclude SCIP-release-notes-2.0.2
7595  *
7596  * \verbinclude SCIP-release-notes-2.0.1
7597  *
7598  * \verbinclude SCIP-release-notes-2.0
7599  *
7600  * \verbinclude SCIP-release-notes-1.2
7601  *
7602  * \verbinclude SCIP-release-notes-1.1
7603  */
7604 
7605 /**@page CHANGELOG CHANGELOG
7606  *
7607  * \verbinclude CHANGELOG
7608  *
7609  */
7610 
7611 
7612 
7613 /**@page PARAMETERS List of all SCIP parameters
7614  *
7615  * This page list all parameters of the current SCIP version. This list can
7616  * easily be generated by SCIP via the interactive shell using the following command:
7617  *
7618  * <code>SCIP&gt; set save &lt;file name&gt;</code>
7619  *
7620  * or via the function call:
7621  *
7622  * <code>SCIP_CALL( SCIPwriteParams(scip, &lt;file name&gt;, TRUE, FALSE) );</code>
7623  *
7624  * \verbinclude parameters.set
7625  */
7626 
7627 /**@page INTERFACES Interfaces
7628  *
7629  * There are several ways of accessing the \SCIP Optimization Suite from other software packages or programming
7630  * platforms.
7631  *
7632  *
7633  * @section FILEFORMATS File formats
7634  *
7635  * The easiest way to load a problem into SCIP is via an input file, given in a format that SCIP can parse directly,
7636  * see \ref SHELL "the tutorial on how to use the interactive shell".
7637  * \SCIP is capable of reading more than ten different file formats, including formats for nonlinear
7638  * problems and constraint programs. This gives researchers from different communities an easy, first access to the
7639  * \SCIP Optimization Suite. See also the \ref AVAILABLEFORMATS "list of readable file formats".
7640  *
7641  * @section MODELLING Modeling languages and Matlab interface
7642  *
7643  * A natural way of formulating an optimization problem is to use a modeling language. Besides ZIMPL there are several
7644  * other modeling tools with a direct interface to \SCIP. These include <a href="http://dynadec.com/">Comet</a>, a
7645  * modeling language for constraint programming, <a href="http://www.ampl.com/">AMPL</a> and <a
7646  * href="http://www.gams.com/">GAMS</a>, which are well-suited for modeling mixed-integer linear and nonlinear
7647  * optimization problems, and <a href="https://projects.coin-or.org/Cmpl">CMPL</a> for mixed-integer linear problems.
7648  * The AMPL, GAMS, and ZIMPL interfaces are included in the \SCIP distribution, the GAMS interface originated <a
7649  * href="https://projects.coin-or.org/GAMSlinks">here</a>.
7650  *
7651  * With \SCIP 3.0, a first beta version of a functional MATLAB interface has been released. It supports solving MIPs
7652  * and LPs defined by Matlab's matrix and vector types. The <a href="http://www.i2c2.aut.ac.nz/Wiki/OPTI/index.php">OPTI
7653  * project</a> by Jonathan Currie provides an external MATLAB interface for the \SCIP Optimization Suite. On top of this,
7654  * <a href="http://users.isy.liu.se/johanl/yalmip/pmwiki.php?n=Main.HomePage">YALMIP</a> by Johan L&ouml;fberg provides a
7655  * free modeling language.
7656  *
7657  *
7658  * @section CPLUSPLUS C++ wrapper classes
7659  *
7660  * Since \SCIP is written in C, its callable library can be directly accessed from C++. If a user wants to program own
7661  * plugins in C++, there are wrapper classes for all different types of plugins available in the <code>src/objscip</code>
7662  * directory of the \SCIP standard distribution. SCIP provides several examples that were written in C++, see
7663  * \ref EXAMPLES "Examples" and select an example written in C++.
7664  *
7665  *
7666  * @section OTHER Interfaces for other programming languages
7667  *
7668  * Interfaces for other programming languages are developed and maintained independently from the SCIP Optimization Suite
7669  * on <a href="https://github.com/SCIP-Interfaces">GitHub</a> in order to provide extensions and patches faster
7670  * and to collaborate on them more easily. Besides the popular interfaces for Python and Java, there is also an interface
7671  * for Julia available. Contributions to these projects are very welcome.
7672  *
7673  * There are also several third-party python interfaces to the \SCIP Optimization Suite, e.g., <a
7674  * href="http://numberjack.ucc.ie/">NUMBERJACK</a> and <a
7675  * href="http://code.google.com/p/python-zibopt/">python-zibopt</a>. <a href="http://numberjack.ucc.ie/">NUMBERJACK</a>
7676  * is a constraint programming platform implemented in python. It supports a variety of different solvers, one of them
7677  * being the \SCIP Optimization Suite. <a href="http://code.google.com/p/python-zibopt/">python-zibopt</a> was developed
7678  * by Ryan J. O'Neil and is a python extension of the \SCIP Optimization Suite. <a
7679  * href="http://picos.zib.de/">PICOS</a> is a python interface for conic optimization, provided by Guillaume Sagnol.
7680  *
7681  *
7682  */
7683 
7684  /**@defgroup PUBLICAPI Public API of SCIP
7685  * @brief methods and headers of the public C-API of \SCIP
7686  *
7687  * \PUBLICAPIDESCRIPTION
7688  *
7689  *
7690  */
7691 
7692 /**@defgroup PUBLICCOREAPI Core API
7693  * @ingroup PUBLICAPI
7694  * @brief methods and headers of the plugin-independent C-API provided by the \SCIP header file scip.h.
7695  *
7696  * This module comprises methods provided by the header file scip.h. Including this header into a user-written extension
7697  * suffices to have all plugin-independent functionality of \SCIP available. Plugin-independent
7698  * user functionality includes the
7699  *
7700  * - creation of problems that \SCIP should solve
7701  * - fine-grained access to initiate the solving process of \SCIP
7702  * - access to all sorts of solving process statistics
7703  * - commonly used data structures and algorithms
7704  * - the management of plugins
7705  * - ...
7706  *
7707  * In order facilitate the navigation through the core API of \SCIP, it is structured into different modules.
7708  */
7709 
7710 /**@defgroup TYPEDEFINITIONS Type Definitions
7711  * @ingroup PUBLICCOREAPI
7712  * @brief type definitions and callback declarations
7713  *
7714  * This page lists headers which contain type definitions of callback methods.
7715  *
7716  * All headers below include the descriptions of callback methods of
7717  * certain plugins. For more detail see the corresponding header.
7718  */
7719 
7720 /**@defgroup PublicProblemMethods Problem Creation
7721  * @ingroup PUBLICCOREAPI
7722  * @brief methods to create a problem that \SCIP should solve
7723  *
7724  * This module summarizes the main methods needed to create a problem for \SCIP, and access its most important members:
7725  * - Declaring, adding, acessing, and changing variables of the problem
7726  * - Declaring, adding, acessing, and changing constraints of the problem
7727  * - Creating, adding, acessing, changing, and checking of solutions to the problem
7728  *
7729  * @note These core methods are not sufficient to create constraints of a certain type that is provided by the default plugins of \SCIP.
7730  * An example would be the creation of a linear constraint for which the methods provided by the
7731  * \ref cons_linear.h "linear constraint handler" must be used. Such methods are provided by the default plugins of \SCIP
7732  * and can be found in the \ref PUBLICPLUGINAPI.
7733  */
7734 
7735 /**@defgroup GeneralSCIPMethods SCIP
7736  * @ingroup PublicProblemMethods
7737  * @brief methods to manipulate a SCIP object
7738  */
7739 
7740 /**@defgroup GlobalProblemMethods Global Problem
7741  * @ingroup PublicProblemMethods
7742  * @brief methods to create, read and modify a global problem together with its callbacks
7743  */
7744 
7745 /**@defgroup PublicVariableMethods Problem Variables
7746  * @ingroup PublicProblemMethods
7747  * @brief public methods for problem variables
7748  */
7749 
7750 /**@defgroup PublicConstraintMethods Problem Constraints
7751  * @ingroup PublicProblemMethods
7752  * @brief Public methods for constraints
7753  */
7754 
7755 /**@defgroup PublicSolutionMethods Primal Solution
7756  * @ingroup PublicProblemMethods
7757  * @brief methods to create and change primal solutions of \SCIP
7758  */
7759 
7760 /**@defgroup CopyMethods Problem Copies
7761  * @ingroup PublicProblemMethods
7762  * @brief methods to copy problems between a source and a target \SCIP
7763  */
7764 
7765 
7766  /**@defgroup PublicSolveMethods Solving Process
7767  * @ingroup PUBLICCOREAPI
7768  * @brief methods to control the solving process of \SCIP
7769  *
7770  * This large group of methods and modules comprises the solving process related API of \SCIP. This includes
7771  *
7772  * -# changing parameters to control the solver behavior
7773  * -# access search tree related information
7774  * -# access relaxation information
7775  * -# access various solving process statistics
7776  * -# solve auxiliary relaxations and subproblems using LP/NLP diving or probing mode
7777  */
7778 
7779 /**@defgroup PublicSolvingStatsMethods Solving Statistics
7780  * @ingroup PublicSolveMethods
7781  * @brief methods to query statistics about the solving process
7782  */
7783 
7784 /**@defgroup ParameterMethods Parameter
7785  * @ingroup PublicSolveMethods
7786  * @brief methods to create, query, and print user parameters
7787  */
7788 
7789 /**@defgroup PublicEventMethods Event Handling
7790  * @ingroup PublicSolveMethods
7791  * @brief methods to create, catch, process, and drop events during the solving process of \SCIP
7792  *
7793  * Events can only be caught during the operation on the transformed problem.
7794  * Events on variables can only be caught for transformed variables.
7795  * If you want to catch an event for an original variable, you have to get the corresponding transformed variable
7796  * with a call to SCIPgetTransformedVar() and catch the event on the transformed variable.
7797  */
7798 
7799 /**@defgroup PublicLPMethods LP Relaxation
7800  * @ingroup PublicSolveMethods
7801  * @brief methods to build and access LP relaxation information
7802  * @see methods to interact with \ref PublicColumnMethods "LP columns" and \ref PublicRowMethods "LP rows"
7803  */
7804 
7805 /**@defgroup PublicColumnMethods LP Column
7806  * @ingroup PublicLPMethods
7807  * @brief public methods for LP columns
7808  */
7809 
7810 /**@defgroup PublicRowMethods LP Row
7811  * @ingroup PublicLPMethods
7812  * @brief methods for LP rows
7813  */
7814 
7815 /**@defgroup PublicCutMethods Cuts and Cutpools
7816  * @ingroup PublicLPMethods
7817  * @brief common methods used to manipulate, generate, and strengthen cuts and to organize the cutpool
7818  */
7819 
7820 /**@defgroup PublicLPDivingMethods LP Diving
7821  * @ingroup PublicLPMethods
7822  * @brief methods to initiate and conduct LP diving
7823  */
7824 
7825 /**@defgroup PublicNLPMethods NLP Relaxation
7826  * @ingroup PublicSolveMethods
7827  * @brief methods for the nonlinear relaxation
7828  */
7829 
7830 /**@defgroup PublicExpressionTreeMethods Expression (Tree)
7831  * @ingroup PublicNLPMethods
7832  * @brief methods for expressions and expression trees
7833  */
7834 
7835 /**@defgroup PublicNLRowMethods Nonlinear Rows
7836  * @ingroup PublicNLPMethods
7837  * @brief methods for the creation and interaction with rows of the NLP relaxation
7838  */
7839 
7840 /**@defgroup PublicNLPDiveMethods NLP Diving
7841  * @ingroup PublicNLPMethods
7842  * @brief methods to initiate and conduct NLP Diving
7843  */
7844 
7845 /**@defgroup PublicBranchingMethods Branching
7846  * @ingroup PublicSolveMethods
7847  * @brief methods for branching on LP solutions, relaxation solutions, and pseudo solutions
7848  *
7849  * @see \ref PublicVariableMethods "Public Variable methods" contains some typical variable branching score functions
7850  */
7851 
7852 /**@defgroup LocalSubproblemMethods Local Subproblem
7853  * @ingroup PublicSolveMethods
7854  * @brief methods to query information about or strengthen the problem at the current local search node
7855  */
7856 
7857 /**@defgroup PublicTreeMethods Search Tree
7858  * @ingroup PublicSolveMethods
7859  * @brief methods to query search tree related information
7860  * @see \ref PublicNodeMethods "Public methods for nodes"
7861  */
7862 
7863 /**@defgroup PublicNodeMethods Nodes
7864  * @ingroup PublicTreeMethods
7865  * @brief methods for nodes of the search tree of \SCIP
7866  */
7867 
7868 /**@defgroup PublicProbingMethods Probing
7869  * @ingroup PublicSolveMethods
7870  * @brief methods to initiate and control the probing mode of \SCIP
7871  */
7872 
7873 /**@defgroup PublicReoptimizationMethods Reoptimization
7874  * @ingroup PublicSolveMethods
7875  * @brief methods for reoptimization related tasks
7876  */
7877 
7878 
7879 /** @defgroup DataStructures Data Structures
7880  * @ingroup PUBLICCOREAPI
7881  * @brief commonly used data structures
7882  *
7883  * Below you find a list of available data structures
7884  */
7885 
7886 /** @defgroup DisjointSet Disjoint Set (Union Find)
7887  * @ingroup DataStructures
7888  * @brief weighted disjoint set (union find) data structure with path compression
7889  *
7890  * Weighted Disjoint Set is a data structure to quickly update and query connectedness information
7891  * between nodes of a graph. Disjoint Set is also known as Union Find.
7892  */
7893 
7894 /**@defgroup DirectedGraph Directed Graph
7895  * @ingroup DataStructures
7896  * @brief graph structure with common algorithms for directed and undirected graphs
7897  */
7898 
7899 /**@defgroup MiscellaneousMethods Miscellaneous Methods
7900  * @ingroup PUBLICCOREAPI
7901  * @brief commonly used methods from different categories
7902  *
7903  * Below you find a list of miscellaneous methods grouped by different categories
7904  */
7905 
7906 /**@defgroup PublicMemoryMethods Memory Management
7907  * @ingroup MiscellaneousMethods
7908  * @brief methods and macros to use the \SCIP memory management
7909  *
7910  * @see \ref MEMORY "Using the memory functions of SCIP" for more information
7911  */
7912 
7913 /**@defgroup PublicNonlinearMethods Nonlinear Data
7914  * @ingroup MiscellaneousMethods
7915  * @brief methods for nonlinear data
7916  */
7917 
7918 /**@defgroup PublicTimingMethods Timing
7919  * @ingroup MiscellaneousMethods
7920  * @brief methods for timing
7921  */
7922 
7923 /**@defgroup PublicBanditMethods Bandit Algorithms
7924  * @ingroup MiscellaneousMethods
7925  * @brief methods for bandit algorithms
7926  */
7927 
7928 
7929 
7930 /**@defgroup DebugSolutionMethods Debug Solution
7931  * @ingroup PUBLICCOREAPI
7932  * @brief methods to control the SCIP debug solution mechanism, see also \ref DEBUG
7933  */
7934 
7935 /**@defgroup MessageOutputMethods Messaging
7936  * @ingroup PUBLICCOREAPI
7937  * @brief message output methods
7938  */
7939 
7940 /**@defgroup PluginManagementMethods Methods for managing plugins
7941  * @ingroup PUBLICCOREAPI
7942  * @brief Methods for the inclusion and management of SCIP plugins and callback functions
7943  *
7944  */
7945 
7946 /**@defgroup PublicBranchRuleMethods Branching Rules
7947  * @ingroup PluginManagementMethods
7948  * @brief methods for branching rule plugins
7949  */
7950 
7951 /**@defgroup PublicCompressionMethods Tree Compression
7952  * @ingroup PluginManagementMethods
7953  * @brief public methods for tree compressions
7954  */
7955 
7956 /**@defgroup PublicConflictMethods Conflict Analysis
7957  * @ingroup PluginManagementMethods
7958  * @brief public methods related to conflict analysis
7959  */
7960 
7961 /**@defgroup PublicConshdlrMethods Constraint handlers
7962  * @ingroup PluginManagementMethods
7963  * @brief methods for constraint handlers
7964  */
7965 
7966 /**@defgroup PublicDialogMethods Dialogs
7967  * @ingroup PluginManagementMethods
7968  * @brief public methods for user interface dialogs
7969  */
7970 
7971 /**@defgroup PublicDisplayMethods Displays
7972  * @ingroup PluginManagementMethods
7973  * @brief methods for the inclusion and access of display plugins
7974  */
7975 
7976 /**@defgroup PublicEventHandlerMethods Event Handler
7977  * @ingroup PluginManagementMethods
7978  * @brief methods for event handlers
7979  */
7980 
7981 /**@defgroup PublicHeuristicMethods Primal Heuristics
7982  * @ingroup PluginManagementMethods
7983  * @brief methods for primal heuristic plugins
7984  */
7985 
7986 /**@defgroup PublicDivesetMethods Dive sets
7987  * @ingroup PublicSpecialHeuristicMethods
7988  * @brief methods for dive sets to control the generic diving algorithm
7989  */
7990 
7991 /**@defgroup PublicNodeSelectorMethods Node Selector
7992  * @ingroup PluginManagementMethods
7993  * @brief methods for node selector plugin management
7994  */
7995 
7996 /**@defgroup PublicPresolverMethods Presolver
7997  * @ingroup PluginManagementMethods
7998  * @brief methods for presolver plugins
7999  */
8000 
8001 /**@defgroup PublicPricerMethods Pricer
8002  * @ingroup PluginManagementMethods
8003  * @brief methods to include and access pricer plugins of \SCIP
8004  */
8005 
8006 /**@defgroup PublicPropagatorMethods Propagators
8007  * @ingroup PluginManagementMethods
8008  * @brief methods for propagator plugins
8009  */
8010 
8011 /**@defgroup PublicReaderMethods Reader
8012  * @ingroup PluginManagementMethods
8013  * @brief methods for the inclusion and access to reader plugins of \SCIP
8014  */
8015 
8016 /**@defgroup PublicRelaxatorMethods Relaxation Handlers
8017  * @ingroup PluginManagementMethods
8018  * @brief public methods for relaxation handlers
8019  */
8020 
8021 /**@defgroup PublicSeparatorMethods Separators
8022  * @ingroup PluginManagementMethods
8023  * @brief methods for separator plugins
8024  */
8025 
8026 /**@defgroup PublicTableMethods Tables
8027  * @ingroup PluginManagementMethods
8028  * @brief methods for the inclusion and access of statistics tables
8029  */
8030 
8031 /**@defgroup PublicConcsolverTypeMethods Concurrent Solver Types
8032  * @ingroup PluginManagementMethods
8033  * @brief methods for concurrent solver type plugins
8034  */
8035 
8036 /**@defgroup PublicNLPInterfaceMethods NLP interfaces
8037  * @ingroup PluginManagementMethods
8038  * @brief methods for the management of NLP interfaces
8039  */
8040 
8041 /**@defgroup PublicExternalCodeMethods External Codes
8042  * @ingroup PluginManagementMethods
8043  * @brief methods to access information about external codes used by \SCIP
8044  */
8045 
8046 /**@defgroup PublicParallelMethods Parallel Interface
8047  * @ingroup PUBLICCOREAPI
8048  * @brief methods to construct the parallel interface of \SCIP
8049  */
8050 
8051  /**@defgroup PUBLICPLUGINAPI Plugin API of SCIP
8052  * @ingroup PUBLICAPI
8053  * @brief core API extensions provided by the default plugins of \SCIP, includable via scipdefplugins.h.
8054  *
8055  * All default plugins of \SCIP, especially the default \ref CONSHDLRS "constraint handlers", provide
8056  * valuable extensions to the \ref PUBLICCOREAPI "core API" of \SCIP. These methods are made available
8057  * by including scipdefplugins.h to user-written extensions.
8058  *
8059  * For a better overview, this page lists all default plugin headers structured into modules based on their individual
8060  * topic.
8061  *
8062  * All of the modules listed below provide functions that are allowed to be used by user-written extensions of \SCIP.
8063  */
8064  /**@defgroup INTERNALAPI Internal API of SCIP
8065  * @brief internal API methods that should only be used by the core of \SCIP
8066  *
8067  * This page lists the header files of internal API methods. In contrast to the public API, these internal methods
8068  * should not be used by user plugins and extensions of SCIP. Please consult
8069  * \ref PUBLICCOREAPI "the Core API" and \ref PUBLICPLUGINAPI "Plugin API" for the complete API available to user plugins.
8070  *
8071  */
8072 
8073 /**@defgroup BRANCHINGRULES Branching Rules
8074  * @ingroup PUBLICPLUGINAPI
8075  * @brief methods and files provided by the default branching rules of \SCIP
8076  *
8077  * A detailed description what a branching rule does and how to add a branching rule to SCIP can be found
8078  * \ref BRANCH "here".
8079  */
8080 
8081 /**@defgroup BranchingRuleIncludes Inclusion methods
8082  * @ingroup BRANCHINGRULES
8083  * @brief methods to include specific branching rules into \SCIP
8084  *
8085  * This module contains methods to include specific branching rules into \SCIP.
8086  *
8087  * @note All default plugins can be included at once (including all branching rules) using SCIPincludeDefaultPlugins()
8088  *
8089  */
8090 
8091 /**@defgroup CONSHDLRS Constraint Handler
8092  * @ingroup PUBLICPLUGINAPI
8093  * @brief methods and files provided by the default constraint handlers of \SCIP
8094  *
8095  * A detailed description what a constraint handler does and how to add a constraint handler to SCIP can be found
8096  * \ref CONS "here".
8097  */
8098 
8099 /**@defgroup ConshdlrIncludes Inclusion methods
8100  * @ingroup CONSHDLRS
8101  * @brief methods to include specific constraint handlers into \SCIP
8102  *
8103  * This module contains methods to include specific constraint handlers into \SCIP.
8104  *
8105  * @note All default plugins can be included at once (including all default constraint handlers) using SCIPincludeDefaultPlugins()
8106  *
8107  */
8108 
8109 /**@defgroup DIALOGS Dialogs
8110  * @ingroup PUBLICPLUGINAPI
8111  * @brief methods and files provided by the default dialogs of \SCIP
8112  *
8113  * A detailed description what a dialog does and how to add a dialog to SCIP can be found
8114  * \ref DIALOG "here".
8115  */
8116 
8117 /**@defgroup DialogIncludes Inclusion methods
8118  * @ingroup DIALOGS
8119  * @brief methods to include specific dialogs into \SCIP
8120  *
8121  * This module contains methods to include specific dialogs into \SCIP.
8122  *
8123  * @note All default plugins can be included at once (including all default dialogs) using SCIPincludeDefaultPlugins()
8124  *
8125  */
8126 
8127 /**@defgroup DISPLAYS Displays
8128  * @ingroup PUBLICPLUGINAPI
8129  * @brief methods and files provided by the default displays (output columns) of \SCIP
8130  *
8131  * A detailed description what a display does and how to add a display to SCIP can be found
8132  * \ref DISP "here".
8133  *
8134  */
8135 
8136 /**@defgroup DisplayIncludes Inclusion methods
8137  * @ingroup DISPLAYS
8138  * @brief methods to include specific displays into \SCIP
8139  *
8140  * This module contains methods to include specific displays into \SCIP.
8141  *
8142  * @note All default plugins can be included at once (including all default displays) using SCIPincludeDefaultPlugins()
8143  *
8144  */
8145 
8146 /**@defgroup FILEREADERS File Readers
8147  * @ingroup PUBLICPLUGINAPI
8148  * @brief This page contains a list of all file readers which are currently available.
8149  *
8150  * @section AVAILABLEFORMATS List of readable file formats
8151  *
8152  * The \ref SHELL "interactive shell" and the callable library are capable of reading/parsing several different file
8153  * formats.
8154  *
8155  * <table>
8156  * <tr><td>\ref reader_cip.h "CIP format"</td> <td>for SCIP's constraint integer programming format</td></tr>
8157  * <tr><td>\ref reader_cnf.h "CNF format"</td> <td>DIMACS CNF (conjunctive normal form) file format used for example for SAT problems</td></tr>
8158  * <tr><td>\ref reader_diff.h "DIFF format"</td> <td>for reading a new objective function for mixed-integer programs</td></tr>
8159  * <tr><td>\ref reader_fzn.h "FZN format"</td> <td>FlatZinc is a low-level solver input language that is the target language for MiniZinc</td></tr>
8160  * <tr><td>\ref reader_gms.h "GMS format"</td> <td>for mixed-integer nonlinear programs (<a href="http://www.gams.com/docs/document.htm">GAMS</a>) [reading requires compilation with GAMS=true and a working GAMS system]</td></tr>
8161  * <tr><td>\ref reader_lp.h "LP format"</td> <td>for mixed-integer (quadratically constrained quadratic) programs (CPLEX)</td></tr>
8162  * <tr><td>\ref reader_mps.h "MPS format"</td> <td>for mixed-integer (quadratically constrained quadratic) programs</td></tr>
8163  * <tr><td>\ref reader_opb.h "OPB format"</td> <td>for pseudo-Boolean optimization instances</td></tr>
8164  * <tr><td>\ref reader_osil.h "OSiL format"</td> <td>for mixed-integer nonlinear programs</td></tr>
8165  * <tr><td>\ref reader_pip.h "PIP format"</td> <td>for <a href="http://polip.zib.de/pipformat.php">mixed-integer polynomial programming problems</a></td></tr>
8166  * <tr><td>\ref reader_sol.h "SOL format"</td> <td>for solutions; XML-format (read-only) or raw SCIP format</td></tr>
8167  * <tr><td>\ref reader_wbo.h "WBO format"</td> <td>for weighted pseudo-Boolean optimization instances</td></tr>
8168  * <tr><td>\ref reader_zpl.h "ZPL format"</td> <td>for <a href="http://zimpl.zib.de">ZIMPL</a> models, i.e., mixed-integer linear and nonlinear
8169  * programming problems [read only]</td></tr>
8170  * </table>
8171  *
8172  * @section ADDREADER How to add a file reader
8173  *
8174  * A detailed description what a file reader does and how to add a file reader to SCIP can be found
8175  * \ref READER "here".
8176  *
8177  */
8178 
8179 /**@defgroup FileReaderIncludes Inclusion methods
8180  * @ingroup FILEREADERS
8181  * @brief methods to include specific file readers into \SCIP
8182  *
8183  * This module contains methods to include specific file readers into \SCIP.
8184  *
8185  * @note All default plugins can be included at once (including all default file readers) using SCIPincludeDefaultPlugins()
8186  *
8187  */
8188 
8189 /**@defgroup PARALLEL Parallel interface methods
8190  * @ingroup INTERNALAPI
8191  * @brief headers and methods for the parallel interface of \SCIP
8192  *
8193  */
8194 
8195 /**@defgroup EXPRINTS Expression Interpreter
8196  * @ingroup PUBLICPLUGINAPI
8197  * @brief methods and files provided by the default expression interpreters of \SCIP
8198  *
8199  * A detailed description what a expression interpreter does and how to add a expression interpreter to SCIP can be found
8200  * \ref EXPRINT "here".
8201  */
8202 
8203 /**@defgroup ExprintIncludes Inclusion methods
8204  * @ingroup EXPRINTS
8205  * @brief methods to include specific expression interpreters into \SCIP
8206  *
8207  * This module contains methods to include specific expression interpreters into \SCIP.
8208  *
8209  * @note All default plugins can be included at once (including all default expression interpreters) using SCIPincludeDefaultPlugins()
8210  *
8211  */
8212 
8213 /**@defgroup FileReaderIncludes Inclusion methods
8214  * @ingroup FILEREADERS
8215  * @brief methods to include specific file readers into \SCIP
8216  *
8217  * This module contains methods to include specific file readers into \SCIP.
8218  *
8219  * @note All default plugins can be included at once (including all default file readers) using SCIPincludeDefaultPlugins()
8220  *
8221  */
8222 
8223 /**@defgroup LPIS LP Solver Interface
8224  * @ingroup PUBLICPLUGINLPI
8225  * @brief methods and files provided by the LP solver interface of \SCIP
8226  *
8227  * \SCIP uses external tools to solve LP relaxations. The communication
8228  * is realized through an LP interface.
8229  *
8230  * This page lists public interface methods that every LP interface provides.
8231  * Find the concrete implementation for your LP solver
8232  * under "src/lpi/".
8233  *
8234  * @see \ref LPI for a list of available LP solver interfaces
8235  */
8236 
8237 /**@defgroup NODESELECTORS Node Selectors
8238  * @ingroup PUBLICPLUGINAPI
8239  * @brief methods and files provided by the default node selectors of \SCIP
8240  *
8241  * A detailed description what a node selector does and how to add a node selector to SCIP can be found
8242  * \ref NODESEL "here".
8243  */
8244 
8245 /**@defgroup NodeSelectorIncludes Inclusion methods
8246  * @ingroup NODESELECTORS
8247  * @brief methods to include specific node selectors into \SCIP
8248  *
8249  * This module contains methods to include specific node selectors into \SCIP.
8250  *
8251  * @note All default plugins can be included at once (including all default node selectors) using SCIPincludeDefaultPlugins()
8252  *
8253  */
8254 
8255 /**@defgroup NLPIS NLP Solver Interfaces
8256  * @ingroup PUBLICPLUGINAPI
8257  * @brief methods and files provided by the default NLP solver interfaces of \SCIP
8258  *
8259  * A detailed description what a NLP solver interface does and how to add a NLP solver interface to SCIP can be found
8260  * \ref NLPI "here".
8261  */
8262 
8263 /**@defgroup NLPIIncludes Inclusion methods
8264  * @ingroup NLPIS
8265  * @brief methods to include specific NLP solver interfaces into \SCIP
8266  *
8267  * This module contains methods to include specific NLP solver interfaces into \SCIP.
8268  *
8269  * @note All default plugins can be included at once (including all default NLP solver interfaces) using SCIPincludeDefaultPlugins()
8270  *
8271  */
8272 
8273 /**@defgroup PRESOLVERS Presolvers
8274  * @ingroup PUBLICPLUGINAPI
8275  * @brief methods and files provided by the default presolvers of \SCIP
8276  *
8277  * A detailed description what a presolver does and how to add a presolver to SCIP can be found
8278  * \ref PRESOL "here".
8279  */
8280 
8281 /**@defgroup PresolverIncludes Inclusion methods
8282  * @ingroup PRESOLVERS
8283  * @brief methods to include specific presolvers into \SCIP
8284  *
8285  * This module contains methods to include specific presolvers into \SCIP.
8286  *
8287  * @note All default plugins can be included at once (including all default presolvers) using SCIPincludeDefaultPlugins()
8288  *
8289  */
8290 
8291 /**@defgroup PRICERS Pricers
8292  * @ingroup PUBLICPLUGINAPI
8293  * @brief methods and files provided by the default pricers of \SCIP
8294  *
8295  * Per default there exist no variable pricer. A detailed description what a variable pricer does and how to add a
8296  * variable pricer to SCIP can be found \ref PRICER "here".
8297  */
8298 
8299 /**@defgroup PricerIncludes Inclusion methods
8300 * @ingroup PUBLICPLUGINAPI
8301 * @brief methods to include specific pricers into \SCIP
8302 *
8303 * This module contains methods to include specific pricers into \SCIP.
8304 *
8305 * @note All default plugins can be included at once using SCIPincludeDefaultPlugins(). There exists no pricer per default.
8306 * In order to see examples of variable pricers, please consult the \ref EXAMPLES "Coding Examples" of \SCIP.
8307 *
8308 */
8309 
8310 /**@defgroup PRIMALHEURISTICS Primal Heuristics
8311  * @ingroup PUBLICPLUGINAPI
8312  * @brief methods and files provided by the default primal heuristics of \SCIP
8313  *
8314  * A detailed description what a primal heuristic does and how to add a primal heuristic to SCIP can be found
8315  * \ref HEUR "here".
8316  */
8317 
8318 /**@defgroup PrimalHeuristicIncludes Inclusion methods
8319  * @ingroup PRIMALHEURISTICS
8320  * @brief methods to include specific primal heuristics into \SCIP
8321  *
8322  * This module contains methods to include specific primal heuristics into \SCIP.
8323  *
8324  * @note All default plugins can be included at once (including all default primal heuristics) using SCIPincludeDefaultPlugins()
8325  *
8326  */
8327 
8328 /**@defgroup PROPAGATORS Propagators
8329  * @ingroup PUBLICPLUGINAPI
8330  * @brief methods and files provided by the default propagators of \SCIP
8331  *
8332  * A detailed description what a propagator does and how to add a propagator to SCIP can be found
8333  * \ref PROP "here".
8334  */
8335 
8336 /**@defgroup PropagatorIncludes Inclusion methods
8337  * @ingroup PROPAGATORS
8338  * @brief methods to include specific propagators into \SCIP
8339  *
8340  * This module contains methods to include specific propagators into \SCIP.
8341  *
8342  * @note All default plugins can be included at once (including all default propagators) using SCIPincludeDefaultPlugins()
8343  *
8344  */
8345 
8346 /**@defgroup RELAXATORS Relaxation Handlers
8347  * @ingroup PUBLICPLUGINAPI
8348  * @brief methods and files provided by the default relaxation handlers of \SCIP
8349  *
8350  * A detailed description what a relaxation handler does and how to add a relaxation handler to SCIP can be found
8351  * \ref RELAX "here". Note that the linear programming relaxation is not implemented via the relaxation handler plugin.
8352  * Per default no relaxation handler exists in SCIP. However, there are two relaxation handlers in the
8353  * \ref RELAXATOR_MAIN "Relaxator example".
8354  */
8355 
8356 /**@defgroup SEPARATORS Separators
8357  * @ingroup PUBLICPLUGINAPI
8358  * @brief methods and files provided by the default separators of \SCIP
8359  *
8360  * A detailed description what a separator does and how to add a separator to SCIP can be found
8361  * \ref SEPA "here".
8362  */
8363 
8364 /**@defgroup SeparatorIncludes Inclusion methods
8365  * @ingroup SEPARATORS
8366  * @brief methods to include specific separators into \SCIP
8367  *
8368  * This module contains methods to include specific separators into \SCIP.
8369  *
8370  * @note All default plugins can be included at once (including all default separators) using SCIPincludeDefaultPlugins()
8371  *
8372  */
8373 
8374 /**@defgroup TABLES Tables
8375  * @ingroup PUBLICPLUGINAPI
8376  * @brief methods and files provided by the default statistics tables of \SCIP
8377  *
8378  * A detailed description what a table does and how to add a table to SCIP can be found
8379  * \ref TABLE "here".
8380  *
8381  */
8382 
8383 /**@defgroup TableIncludes Inclusion methods
8384  * @ingroup TABLES
8385  * @brief methods to include specific tables into \SCIP
8386  *
8387  * This module contains methods to include specific statistics tables into \SCIP.
8388  *
8389  * @note All default plugins can be included at once (including all default statisticstables) using SCIPincludeDefaultPlugins()
8390  *
8391  */
8392 
8393 /**@defgroup PublicToleranceMethods Computations With Tolerances
8394  * @ingroup NumericalMethods
8395  * @brief methods used by the majority of operations involving floating-point computations in \SCIP
8396  *
8397  * - query the numerical tolerances of \SCIP, as well as special values such as infinity.
8398  * - change tolerances inside relaxations
8399  * - epsilon-comparison methods for floating point numbers
8400  */