1    	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2    	/*                                                                           */
3    	/*                  This file is part of the program and library             */
4    	/*         SCIP --- Solving Constraint Integer Programs                      */
5    	/*                                                                           */
6    	/*  Copyright (c) 2002-2023 Zuse Institute Berlin (ZIB)                      */
7    	/*                                                                           */
8    	/*  Licensed under the Apache License, Version 2.0 (the "License");          */
9    	/*  you may not use this file except in compliance with the License.         */
10   	/*  You may obtain a copy of the License at                                  */
11   	/*                                                                           */
12   	/*      http://www.apache.org/licenses/LICENSE-2.0                           */
13   	/*                                                                           */
14   	/*  Unless required by applicable law or agreed to in writing, software      */
15   	/*  distributed under the License is distributed on an "AS IS" BASIS,        */
16   	/*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17   	/*  See the License for the specific language governing permissions and      */
18   	/*  limitations under the License.                                           */
19   	/*                                                                           */
20   	/*  You should have received a copy of the Apache-2.0 license                */
21   	/*  along with SCIP; see the file LICENSE. If not visit scipopt.org.         */
22   	/*                                                                           */
23   	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24   	
25   	/**@file   struct_set.h
26   	 * @ingroup INTERNALAPI
27   	 * @brief  datastructures for global SCIP settings
28   	 * @author Tobias Achterberg
29   	 */
30   	
31   	/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
32   	
33   	#ifndef __SCIP_STRUCT_SET_H__
34   	#define __SCIP_STRUCT_SET_H__
35   	
36   	
37   	#include "scip/def.h"
38   	#include "scip/message.h"
39   	#include "scip/type_bandit.h"
40   	#include "scip/type_set.h"
41   	#include "scip/type_clock.h"
42   	#include "scip/type_paramset.h"
43   	#include "scip/type_event.h"
44   	#include "scip/type_scip.h"
45   	#include "scip/type_branch.h"
46   	#include "scip/type_conflict.h"
47   	#include "scip/type_cons.h"
48   	#include "scip/type_disp.h"
49   	#include "scip/type_dialog.h"
50   	#include "scip/type_heur.h"
51   	#include "scip/type_compr.h"
52   	#include "scip/type_nodesel.h"
53   	#include "scip/type_presol.h"
54   	#include "scip/type_pricer.h"
55   	#include "scip/type_reader.h"
56   	#include "scip/type_relax.h"
57   	#include "scip/type_sepa.h"
58   	#include "scip/type_cutsel.h"
59   	#include "scip/type_table.h"
60   	#include "scip/type_prop.h"
61   	#include "scip/type_nlpi.h"
62   	#include "scip/type_concsolver.h"
63   	#include "scip/type_benders.h"
64   	#include "scip/type_expr.h"
65   	#include "scip/debug.h"
66   	
67   	#ifdef __cplusplus
68   	extern "C" {
69   	#endif
70   	
71   	/** global SCIP settings */
72   	struct SCIP_Set
73   	{
74   	   SCIP_STAGE            stage;              /**< SCIP operation stage */
75   	   SCIP*                 scip;               /**< very ugly: pointer to scip main data structure for callback methods */
76   	   SCIP_PARAMSET*        paramset;           /**< set of parameters */
77   	   BMS_BUFMEM*           buffer;             /**< memory buffers for short living temporary objects */
78   	   BMS_BUFMEM*           cleanbuffer;        /**< memory buffers for short living temporary objects init. to all zero */
79   	   SCIP_READER**         readers;            /**< file readers */
80   	   SCIP_PRICER**         pricers;            /**< variable pricers */
81   	   SCIP_CONSHDLR**       conshdlrs;          /**< constraint handlers (sorted by check priority) */
82   	   SCIP_CONSHDLR**       conshdlrs_sepa;     /**< constraint handlers (sorted by separation priority) */
83   	   SCIP_CONSHDLR**       conshdlrs_enfo;     /**< constraint handlers (sorted by enforcement priority) */
84   	   SCIP_CONSHDLR**       conshdlrs_include;  /**< constraint handlers (sorted by inclusion order) */
85   	   SCIP_CONFLICTHDLR**   conflicthdlrs;      /**< conflict handlers */
86   	   SCIP_PRESOL**         presols;            /**< presolvers */
87   	   SCIP_RELAX**          relaxs;             /**< relaxators */
88   	   SCIP_SEPA**           sepas;              /**< separators */
89   	   SCIP_CUTSEL**         cutsels;            /**< cut selectors */
90   	   SCIP_PROP**           props;              /**< propagators */
91   	   SCIP_PROP**           props_presol;       /**< propagators (sorted by presol priority) */
92   	   SCIP_HEUR**           heurs;              /**< primal heuristics */
93   	   SCIP_COMPR**          comprs;             /**< tree compressions */
94   	   SCIP_EVENTHDLR**      eventhdlrs;         /**< event handlers */
95   	   SCIP_NODESEL**        nodesels;           /**< node selectors */
96   	   SCIP_NODESEL*         nodesel;            /**< currently used node selector, or NULL if invalid */
97   	   SCIP_BRANCHRULE**     branchrules;        /**< branching rules */
98   	   SCIP_DISP**           disps;              /**< display columns */
99   	   SCIP_TABLE**          tables;             /**< statistics tables */
100  	   SCIP_DIALOG**         dialogs;            /**< dialogs */
101  	   SCIP_EXPRHDLR**       exprhdlrs;          /**< expression handlers */
102  	   SCIP_EXPRHDLR*        exprhdlrvar;        /**< expression handler for variables (for quick access) */
103  	   SCIP_EXPRHDLR*        exprhdlrval;        /**< expression handler for constant values (for quick access) */
104  	   SCIP_EXPRHDLR*        exprhdlrsum;        /**< expression handler for sums (for quick access) */
105  	   SCIP_EXPRHDLR*        exprhdlrproduct;    /**< expression handler for products (for quick access) */
106  	   SCIP_EXPRHDLR*        exprhdlrpow;        /**< expression handler for power (for quick access) */
107  	   SCIP_NLPI**           nlpis;              /**< interfaces to NLP solvers */
108  	   SCIP_CONCSOLVERTYPE** concsolvertypes;    /**< concurrent solver types */
109  	   SCIP_CONCSOLVER**     concsolvers;        /**< the concurrent solvers used for solving */
110  	   SCIP_BENDERS**        benders;            /**< the data structures managing the Benders' decomposition algorithm */
111  	   SCIP_DEBUGSOLDATA*    debugsoldata;       /**< data for debug solutions */
112  	   SCIP_BANDITVTABLE**   banditvtables;      /**< virtual function tables for bandit algorithms */
113  	   char**                extcodenames;       /**< names of externals codes */
114  	   char**                extcodedescs;       /**< descriptions of external codes */
115  	   int                   nreaders;           /**< number of file readers */
116  	   int                   readerssize;        /**< size of readers array */
117  	   int                   npricers;           /**< number of variable pricers */
118  	   int                   nactivepricers;     /**< number of variable pricers used in the current problem */
119  	   int                   pricerssize;        /**< size of pricers array */
120  	   int                   nconshdlrs;         /**< number of constraint handlers */
121  	   int                   conshdlrssize;      /**< size of conshdlrs array */
122  	   int                   nconflicthdlrs;     /**< number of conflict handlers */
123  	   int                   conflicthdlrssize;  /**< size of conflicthdlrs array */
124  	   int                   npresols;           /**< number of presolvers */
125  	   int                   presolssize;        /**< size of presols array */
126  	   int                   nrelaxs;            /**< number of relaxators */
127  	   int                   relaxssize;         /**< size of relaxs array */
128  	   int                   nsepas;             /**< number of separators */
129  	   int                   sepassize;          /**< size of sepas array */
130  	   int                   ncutsels;           /**< number of cut selectors */
131  	   int                   cutselssize;        /**< size of cutsels array */
132  	   int                   nprops;             /**< number of propagators */
133  	   int                   propssize;          /**< size of props array */
134  	   int                   nheurs;             /**< number of primal heuristics */
135  	   int                   heurssize;          /**< size of heurs array */
136  	   int                   ncomprs;            /**< number of tree compressions */
137  	   int                   comprssize;         /**< size of comprs array */
138  	   int                   neventhdlrs;        /**< number of event handlers */
139  	   int                   eventhdlrssize;     /**< size of eventhdlrs array */
140  	   int                   nnodesels;          /**< number of node selectors */
141  	   int                   nodeselssize;       /**< size of nodesels array */
142  	   int                   nbranchrules;       /**< number of branching rules */
143  	   int                   branchrulessize;    /**< size of branchrules array */
144  	   int                   ndisps;             /**< number of display columns */
145  	   int                   dispssize;          /**< size of disps array */
146  	   int                   ntables;            /**< number of statistics tables */
147  	   int                   tablessize;         /**< size of tables array */
148  	   int                   ndialogs;           /**< number of dialogs */
149  	   int                   dialogssize;        /**< size of dialogs array */
150  	   int                   nexprhdlrs;         /**< number of expression handlers */
151  	   int                   exprhdlrssize;      /**< size of expression handlers array */
152  	   int                   nnlpis;             /**< number of NLPIs */
153  	   int                   nlpissize;          /**< size of NLPIs array */
154  	   int                   nconcsolvertypes;   /**< number of concurrent solver types */
155  	   int                   concsolvertypessize;/**< size of concurrent solver types array */
156  	   int                   nconcsolvers;       /**< number of concurrent solvers used for solving */
157  	   int                   concsolverssize;    /**< size of concurrent solvers array */
158  	   int                   nbenders;           /**< number of Benders' decomposition algorithms */
159  	   int                   nactivebenders;     /**< number of Benders' decomposition algorithms that are used */
160  	   int                   benderssize;        /**< size of Benders' decomposition algorithms array */
161  	   int                   nextcodes;          /**< number of external codes */
162  	   int                   extcodessize;       /**< size of external code arrays */
163  	   int                   nbanditvtables;     /**< number of bandit algorithm virtual function tables */
164  	   int                   banditvtablessize;  /**< size of banditvtables array */
165  	   SCIP_Bool             pricerssorted;      /**< are the pricers sorted by activity and priority? */
166  	   SCIP_Bool             pricersnamesorted;  /**< are the pricers sorted by name? */
167  	   SCIP_Bool             conflicthdlrssorted;/**< are the conflict handlers sorted by priority? */
168  	   SCIP_Bool             conflicthdlrsnamesorted;/**< are the conflict handlers sorted by name? */
169  	   SCIP_Bool             presolssorted;      /**< are the presolvers sorted by priority? */
170  	   SCIP_Bool             presolsnamesorted;  /**< are the presolvers sorted by name? */
171  	   SCIP_Bool             relaxssorted;       /**< are the relaxators sorted by priority? */
172  	   SCIP_Bool             relaxsnamesorted;   /**< are the relaxators sorted by name? */
173  	   SCIP_Bool             sepassorted;        /**< are the separators sorted by priority? */
174  	   SCIP_Bool             sepasnamesorted;    /**< are the separators sorted by name? */
175  	   SCIP_Bool             cutselssorted;      /**< are the cutsels sorted by priority? */
176  	   SCIP_Bool             propssorted;        /**< are the propagators sorted by priority? */
177  	   SCIP_Bool             propspresolsorted;  /**< are the propagators in prop_presol sorted? */
178  	   SCIP_Bool             propsnamesorted;    /**< are the propagators sorted by name? */
179  	   SCIP_Bool             heurssorted;        /**< are the heuristics sorted by priority? */
180  	   SCIP_Bool             heursnamesorted;    /**< are the heuristics sorted by name? */
181  	   SCIP_Bool             comprssorted;       /**< are the compressions sorted by priority? */
182  	   SCIP_Bool             comprsnamesorted;   /**< are the compressions sorted by name? */
183  	   SCIP_Bool             branchrulessorted;  /**< are the branching rules sorted by priority? */
184  	   SCIP_Bool             branchrulesnamesorted;/**< are the branching rules sorted by name? */
185  	   SCIP_Bool             tablessorted;       /**< are the tables sorted by position? */
186  	   SCIP_Bool             exprhdlrssorted;    /**< are the expression handlers sorted by name? */
187  	   SCIP_Bool             nlpissorted;        /**< are the NLPIs sorted by priority? */
188  	   SCIP_Bool             benderssorted;      /**< are the Benders' algorithms sorted by activity and priority? */
189  	   SCIP_Bool             bendersnamesorted;  /**< are the Benders' algorithms sorted by name? */
190  	   SCIP_Bool             limitchanged;       /**< marks whether any of the limit parameters was changed */
191  	   SCIP_Bool             subscipsoff;        /**< marks whether the sub-SCIPs have been deactivated */
192  	
193  	   /* branching settings */
194  	   char                  branch_scorefunc;   /**< branching score function ('s'um, 'p'roduct, 'q'uotient) */
195  	   char                  branch_firstsbchild;/**< child node to be regarded first during strong branching (only with propagation): 'u'p child, 'd'own child, 'h'istory-based, or 'a'utomatic */
196  	   SCIP_Real             branch_scorefac;    /**< branching score factor to weigh downward and upward gain prediction
197  	                                              *   in sum score function */
198  	   SCIP_Bool             branch_preferbinary;/**< should branching on binary variables be preferred? */
199  	   SCIP_Real             branch_clamp;       /**< minimal fractional distance of branching point to a continuous variable' bounds; a value of 0.5 leads to branching always in the middle of a bounded domain */
200  	   SCIP_Real             branch_midpull;     /**< fraction by which to move branching point of a continuous variable towards the middle of the domain; a value of 1.0 leads to branching always in the middle of the domain */
201  	   SCIP_Real             branch_midpullreldomtrig; /**< multiply midpull by relative domain width if the latter is below this value */
202  	   char                  branch_lpgainnorm;  /**< strategy for normalizing LP gain when updating pseudo costs of continuous variables */
203  	   SCIP_Bool             branch_delaypscost; /**< whether to delay pseudo costs updates for continuous variables to after separation */
204  	   SCIP_Bool             branch_divingpscost;/**< should pseudo costs be updated also in diving and probing mode? */
205  	   SCIP_Bool             branch_forceall;    /**< should all strong branching children be regarded even if
206  	                                              *   one is detected to be infeasible? (only with propagation) */
207  	   SCIP_Bool             branch_checksbsol;  /**< should LP solutions during strong branching with propagation be checked for feasibility? */
208  	   SCIP_Bool             branch_roundsbsol;  /**< should LP solutions during strong branching with propagation be rounded? (only when checksbsol=TRUE) */
209  	   SCIP_Bool             branch_sumadjustscore; /**< score adjustment near zero by \b adding epsilon (TRUE) or using maximum (FALSE) */
210  	
211  	   /* conflict analysis settings */
212  	   SCIP_Real             conf_maxvarsfac;    /**< maximal fraction of variables involved in a conflict constraint */
213  	   int                   conf_minmaxvars;    /**< minimal absolute maximum of variables involved in a conflict constraint */
214  	   int                   conf_maxlploops;    /**< maximal number of LP resolving loops during conflict analysis
215  	                                              *   (-1: no limit) */
216  	   int                   conf_lpiterations;  /**< maximal number of LP iterations in each LP resolving loop
217  	                                              *   (-1: no limit) */
218  	   int                   conf_fuiplevels;    /**< number of depth levels up to which first UIP's are used in conflict
219  	                                              *   analysis (-1: use All-FirstUIP rule) */
220  	   int                   conf_interconss;    /**< maximal number of intermediate conflict constraints generated in conflict
221  	                                              *   graph (-1: use every intermediate constraint) */
222  	   int                   conf_maxconss;      /**< maximal number of conflict constraints accepted at an infeasible node
223  	                                              *   (-1: use all generated conflict constraints) */
224  	   int                   conf_maxstoresize;  /**< maximal size of conflict store */
225  	   int                   conf_reconvlevels;  /**< number of depth levels up to which UIP reconvergence constraints are
226  	                                              *   generated (-1: generate reconvergence constraints in all depth levels) */
227  	   SCIP_Bool             conf_enable;        /**< should conflict analysis be enabled? */
228  	   SCIP_Bool             conf_cleanbnddepend;/**< should conflicts related to an old cutoff bound be removed? */
229  	   SCIP_Bool             conf_useprop;       /**< should propagation conflict analysis be used? (uses conflict graph only) */
230  	   char                  conf_useinflp;      /**< should infeasible LP conflict analysis be used?
231  	                                              *   ('o'ff, 'c'onflict graph, 'd'ual ray, 'b'oth conflict graph and dual ray)
232  	                                              */
233  	   char                  conf_useboundlp;    /**< should bound exceeding LP conflict analysis be used?
234  	                                              *   ('o'ff, 'c'onflict graph, 'd'ual ray, 'b'oth conflict graph and dual ray)
235  	                                              */
236  	   SCIP_Bool             conf_usesb;         /**< should infeasible/bound exceeding strong branching conflict analysis be
237  	                                              *   used? */
238  	   SCIP_Bool             conf_usepseudo;     /**< should pseudo solution conflict analysis be used? */
239  	   SCIP_Bool             conf_prefinfproof;  /**< prefer infeasibility proof to boundexceeding proof */
240  	   SCIP_Bool             conf_preferbinary;  /**< should binary conflicts be preferred? */
241  	   SCIP_Bool             conf_allowlocal;    /**< should conflict constraints be generated that are only valid locally? */
242  	   SCIP_Bool             conf_settlelocal;   /**< should conflict constraints be attached only to the local subtree where
243  	                                              *   they can be useful? */
244  	   SCIP_Bool             conf_repropagate;   /**< should earlier nodes be repropagated in order to replace branching
245  	                                              *   decisions by deductions? */
246  	   SCIP_Bool             conf_keepreprop;    /**< should constraints be kept for repropagation even if they are too long? */
247  	   SCIP_Bool             conf_separate;      /**< should the conflict constraints be separated? */
248  	   SCIP_Bool             conf_dynamic;       /**< should the conflict constraints be subject to aging? */
249  	   SCIP_Bool             conf_removable;     /**< should the conflict's relaxations be subject to LP aging and cleanup? */
250  	   SCIP_Real             conf_depthscorefac; /**< score factor for depth level in bound relaxation heuristic */
251  	   SCIP_Real             conf_proofscorefac; /**< score factor for contribution to infeasibility proof in bound relaxation heuristic */
252  	   SCIP_Real             conf_uplockscorefac;/**< score factor for number of up locks in bound relaxation heuristic */
253  	   SCIP_Real             conf_downlockscorefac;/**< score factor for number of down locks in bound relaxation heuristic */
254  	   SCIP_Real             conf_scorefac;      /**< factor to decrease importance of variables' earlier conflict scores */
255  	   int                   conf_restartnum;    /**< number of successful conflict analysis calls that trigger a restart
256  	                                              *   (0: disable conflict restarts) */
257  	   SCIP_Real             conf_restartfac;    /**< factor to increase restartnum with after each restart */
258  	   SCIP_Bool             conf_ignorerelaxedbd;/**< should relaxed bounds be ignored? */
259  	   int                   conf_maxvarsdetectimpliedbounds;/**< maximal number of variables to try to detect global bound
260  	                                                          *   implications and shorten the whole conflict set (0:
261  	                                                          *   disabled )
262  	                                                          */
263  	   SCIP_Bool             conf_fullshortenconflict;/**< try to shorten the whole conflict set or terminate early
264  	                                                   *   (depending on the 'maxvarsdetectimpliedbounds' parameter)
265  	                                                   */
266  	   SCIP_Real             conf_conflictweight;/**< the weight the VSIDS score is weight by updating the VSIDS for a
267  	                                              *   variable if it is part of a conflict
268  	                                              */
269  	   SCIP_Real             conf_conflictgraphweight; /**< the weight the VSIDS score is weight by updating the VSIDS for a
270  	                                                    *   variable if it is part of a conflict graph
271  	                                                    */
272  	   SCIP_Real             conf_weightsize;    /**< weight of the size of a conflict used in score calculation */
273  	   SCIP_Real             conf_weightrepropdepth;/**< weight of the prepropagtion depth of a conflict used in score calculation */
274  	   SCIP_Real             conf_weightvaliddepth;/**< weight of the valid depth of a conflict used in score calculation */
275  	   SCIP_Bool             conf_sepaaltproofs;      /**< separate valid inequalities from dualray proofs */
276  	   SCIP_Real             conf_minimprove;    /**< minimal improvement of primal bound to remove conflicts depending on
277  	                                              *   a previous incumbent.
278  	                                              */
279  	   SCIP_Bool             conf_uselocalrows;  /**< use local rows to construct infeasibility proofs */
280  	
281  	   /* constraint settings */
282  	   int                   cons_agelimit;      /**< maximum age an unnecessary constraint can reach before it is deleted
283  	                                              *   (0: dynamic, -1: disable aging) */
284  	   int                   cons_obsoleteage;   /**< age of a constraint after which it is marked obsolete
285  	                                              *   (0: dynamic, -1: disable obsoletion) */
286  	   SCIP_Bool             cons_disableenfops; /**< should enforcement of pseudo solution be disabled? */
287  	
288  	   /* display settings */
289  	   SCIP_VERBLEVEL        disp_verblevel;     /**< verbosity level of output */
290  	   int                   disp_width;         /**< maximal number of characters in a node information line */
291  	   int                   disp_freq;          /**< frequency for displaying node information lines */
292  	   int                   disp_headerfreq;    /**< frequency for displaying header lines (every n'th node information line) */
293  	   SCIP_Bool             disp_lpinfo;        /**< should the LP solver display status messages? */
294  	   SCIP_Bool             disp_allviols;      /**< display all violations of the best solution after the solving process finished? */
295  	   SCIP_Bool             disp_relevantstats; /**< should the relevant statistics be displayed at the end of solving? */
296  	
297  	   /* heuristics settings */
298  	   SCIP_Bool             heur_useuctsubscip; /**< should setting of common subscip parameters include the activation of the UCT node selector? */
299  	
300  	   /* history settings */
301  	   SCIP_Bool             history_valuebased; /**< should statistics be collected for variable domain value pairs? */
302  	   SCIP_Bool             history_allowmerge; /**< should variable histories be merged from sub-SCIPs whenever possible? */
303  	   SCIP_Bool             history_allowtransfer; /**< should variable histories be transferred to initialize SCIP copies? */
304  	
305  	   /* limit settings */
306  	   SCIP_Real             limit_time;         /**< maximal time in seconds to run */
307  	   SCIP_Real             limit_memory;       /**< maximal memory usage in MB */
308  	   SCIP_Real             limit_gap;          /**< solving stops, if the given gap is reached */
309  	   SCIP_Real             limit_absgap;       /**< solving stops, if the absolute difference between primal and dual bound
310  	                                              *   reaches this value */
311  	   SCIP_Real             limit_objstop;      /**< solving stops, if solution is found that is at least as good as given value */
312  	   SCIP_Longint          limit_nodes;        /**< maximal number of nodes to process (-1: no limit) */
313  	   SCIP_Longint          limit_totalnodes;   /**< maximal number of total nodes (incl. restarts) to process (-1: no limit) */
314  	   SCIP_Longint          limit_stallnodes;   /**< solving stops, if the given number of nodes was processed since the
315  	                                              *   last improvement of the primal solution value (-1: no limit) */
316  	   int                   limit_solutions;    /**< solving stops, if the given number of solutions were found; this limit is first checked in presolving (-1: no limit) */
317  	   int                   limit_bestsol;      /**< solving stops, if the given number of solution improvements were found
318  	                                              *   (-1: no limit) */
319  	   int                   limit_maxsol;       /**< maximal number of solutions to store in the solution storage */
320  	   int                   limit_maxorigsol;   /**< maximal number of solutions candidates to store in the solution storage of the original problem */
321  	   int                   limit_restarts;     /**< solving stops, if the given number of restarts was triggered (-1: no limit) */
322  	   int                   limit_autorestartnodes;/**< nodes to trigger automatic restart */
323  	
324  	   SCIP_Bool             istimelimitfinite;  /**< is the time limit finite */
325  	
326  	   /* LP settings */
327  	   int                   lp_solvefreq;       /**< frequency for solving LP at the nodes (-1: never; 0: only root LP) */
328  	   SCIP_Longint          lp_iterlim;         /**< iteration limit for each single LP solve; -1: no limit */
329  	   SCIP_Longint          lp_rootiterlim;     /**< iteration limit for initial root LP solve; -1: no limit */
330  	   int                   lp_solvedepth;      /**< maximal depth for solving LP at the nodes (-1: no depth limit) */
331  	   char                  lp_initalgorithm;   /**< LP algorithm for solving initial LP relaxations ('s'implex, 'b'arrier,
332  	                                              *   barrier with 'c'rossover) */
333  	   char                  lp_resolvealgorithm;/**< LP algorithm for resolving LP relaxations if a starting basis exists
334  	                                              *   ('s'implex, 'b'arrier, barrier with 'c'rossover) */
335  	   char                  lp_pricing;         /**< LP pricing strategy ('a'uto, 'f'ull pricing, 's'teepest edge pricing,
336  	                                              *   'q'uickstart steepest edge pricing, 'd'evex pricing) */
337  	   SCIP_Bool             lp_clearinitialprobinglp;/**< should lp state be cleared at the end of probing mode when LP
338  	                                              *   was initially unsolved, e.g., when called right after presolving? */
339  	   SCIP_Bool             lp_resolverestore;  /**< should the LP be resolved to restore the state at start of diving (if
340  	                                              *   FALSE we buffer the solution values)? */
341  	   SCIP_Bool             lp_freesolvalbuffers; /**< should the buffers for storing LP solution values during diving be
342  	                                              *   freed at end of diving? */
343  	   int                   lp_colagelimit;     /**< maximum age a column can reach before it is deleted from the SCIP_LP
344  	                                              *   (-1: don't delete columns due to aging) */
345  	   int                   lp_rowagelimit;     /**< maximum age a row can reach before it is deleted from the LP
346  	                                              *   (-1: don't delete rows due to aging) */
347  	   SCIP_Bool             lp_cleanupcols;     /**< should new non-basic columns be removed after LP solving? */
348  	   SCIP_Bool             lp_cleanupcolsroot; /**< should new non-basic columns be removed after root LP solving? */
349  	   SCIP_Bool             lp_cleanuprows;     /**< should new basic rows be removed after LP solving? */
350  	   SCIP_Bool             lp_cleanuprowsroot; /**< should new basic rows be removed after root LP solving? */
351  	   SCIP_Bool             lp_checkstability;  /**< should LP solver's return status be checked for stability? */
352  	   SCIP_Real             lp_conditionlimit;  /**< maximum condition number of LP basis counted as stable (-1.0: no check) */
353  	   SCIP_Real             lp_markowitz;       /**< minimal Markowitz threshold to control sparsity/stability in LU factorization */
354  	   SCIP_Bool             lp_checkprimfeas;   /**< should LP solutions be checked for primal feasibility, resolving LP when numerical troubles occur? */
355  	   SCIP_Bool             lp_checkdualfeas;   /**< should LP solutions be checked for dual feasibility, resolving LP when numerical troubles occur? */
356  	   SCIP_Bool             lp_checkfarkas;     /**< should infeasibility proofs from the LP be checked? */
357  	   int                   lp_fastmip;         /**< which FASTMIP setting of LP solver should be used? 0: off, 1: medium, 2: full */
358  	   int                   lp_scaling;         /**< LP scaling (0: none, 1: normal, 2: aggressive) */
359  	   SCIP_Bool             lp_presolving;      /**< should presolving of LP solver be used? */
360  	   SCIP_Bool             lp_lexdualalgo;     /**< should the lexicographic dual algorithm be used? */
361  	   SCIP_Bool             lp_lexdualrootonly; /**< should the lexicographic dual algorithm be applied only at the root node */
362  	   int                   lp_lexdualmaxrounds;/**< maximum number of rounds in the lexicographic dual algorithm */
363  	   SCIP_Bool             lp_lexdualbasic;    /**< choose fractional basic variables in lexicographic dual algorithm */
364  	   SCIP_Bool             lp_lexdualstalling; /**< turn on the lex dual algorithm only when stalling? */
365  	   int                   lp_disablecutoff;   /**< disable the cutoff bound in the LP solver? (0: enabled, 1: disabled, 2: auto) */
366  	   SCIP_Real             lp_rowrepswitch;    /**< simplex algorithm shall use row representation of the basis
367  	                                              *   if number of rows divided by number of columns exceeds this value */
368  	   int                   lp_threads;         /**< number of threads used for solving the LP (0: automatic) */
369  	   SCIP_Real             lp_resolveiterfac;  /**< factor of average LP iterations that is used as LP iteration limit
370  	                                              *   for LP resolve (-1: unlimited) */
371  	   int                   lp_resolveitermin;  /**< minimum number of iterations that are allowed for LP resolve */
372  	   int                   lp_solutionpolishing;/**< LP solution polishing method (0: disabled, 1: only root, 2: always, 3: auto) */
373  	   int                   lp_refactorinterval;/**< LP refactorization interval (0: automatic) */
374  	   SCIP_Bool             lp_alwaysgetduals;  /**< should the dual solution always be collected for LP solutions. */
375  	
376  	   /* NLP settings */
377  	   SCIP_Bool             nlp_disable;        /**< should the NLP be disabled even if a constraint handler enabled it? */
378  	   char*                 nlp_solver;         /**< name of NLP solver to use */
379  	
380  	   /* memory settings */
381  	   SCIP_Real             mem_savefac;        /**< fraction of maximal memory usage resulting in switch to memory saving mode */
382  	   SCIP_Real             mem_arraygrowfac;   /**< memory growing factor for dynamically allocated arrays */
383  	   SCIP_Real             mem_treegrowfac;    /**< memory growing factor for tree array */
384  	   SCIP_Real             mem_pathgrowfac;    /**< memory growing factor for path array */
385  	   int                   mem_arraygrowinit;  /**< initial size of dynamically allocated arrays */
386  	   int                   mem_treegrowinit;   /**< initial size of tree array */
387  	   int                   mem_pathgrowinit;   /**< initial size of path array */
388  	
389  	   /* miscellaneous settings */
390  	   SCIP_Bool             misc_catchctrlc;    /**< should the CTRL-C interrupt be caught by SCIP? */
391  	   SCIP_Bool             misc_usevartable;   /**< should a hashtable be used to map from variable names to variables? */
392  	   SCIP_Bool             misc_useconstable;  /**< should a hashtable be used to map from constraint names to constraints? */
393  	   SCIP_Bool             misc_usesmalltables;/**< should smaller hashtables be used? yields better performance for small problems with about 100 variables */
394  	   SCIP_Bool             misc_exactsolve;    /**< should the problem be solved exactly (with proven dual bounds)? */
395  	   SCIP_Bool             misc_resetstat;     /**< should the statistics be reset if the transformed problem is freed
396  	                                              *   otherwise the statistics get reset after original problem is freed (in
397  	                                              *   case of bender decomposition this parameter should be set to FALSE and
398  	                                              *   therefore can be used to collect statistics over all runs) */
399  	   SCIP_Bool             misc_improvingsols; /**< should only solutions be checked which improve the primal bound */
400  	   SCIP_Bool             misc_printreason;   /**< should the reason be printed if a given start solution is infeasible? */
401  	   SCIP_Bool             misc_estimexternmem;/**< should the usage of external memory be estimated? */
402  	   SCIP_Bool             misc_avoidmemout;   /**< try to avoid running into memory limit by restricting plugins like heuristics? */
403  	   SCIP_Bool             misc_transorigsols; /**< should SCIP try to transfer original solutions to the transformed space (after presolving)? */
404  	   SCIP_Bool             misc_transsolsorig; /**< should SCIP try to transfer transformed solutions to the original space (after solving)? */
405  	   SCIP_Bool             misc_calcintegral;  /**< should SCIP calculate the primal dual integral value which may require
406  	                                              *   a large number of additional clock calls (and decrease the performance)? */
407  	   SCIP_Bool             misc_finitesolstore;/**< should SCIP try to remove infinite fixings from solutions copied to the solution store? */
408  	   SCIP_Bool             misc_outputorigsol; /**< should the best solution be transformed to the orignal space and be output in command line run? */
409  	   SCIP_Bool             misc_allowstrongdualreds; /**< should strong dual reductions be allowed in propagation and presolving? */
410  	   SCIP_Bool             misc_allowweakdualreds;  /**< should weak dual reductions be allowed in propagation and presolving? */
411  	   SCIP_Real             misc_referencevalue;/**< objective value for reference purposes */
412  	   int                   misc_usesymmetry;   /**< bitset describing used symmetry handling technique (0: off; 1: polyhedral (orbitopes and/or symresacks);
413  	                                              *   2: orbital fixing; 3: orbitopes and orbital fixing; 4: Schreier Sims cuts; 5: Schreier Sims cuts and
414  	                                              *   symresacks) */
415  	   char*                 misc_debugsol;      /**< path to a debug solution */
416  	   SCIP_Bool             misc_scaleobj;      /**< should the objective function be scaled? */
417  	   SCIP_Bool             misc_showdivingstats;/**< should detailed statistics for diving heuristics be shown? */
418  	
419  	   /* randomization parameters */
420  	   int                   random_randomseedshift;/**< global shift of all random seeds in the plugins, this will have no impact on the permutation and LP seeds */
421  	   int                   random_permutationseed;/**< seed value for permuting the problem after reading/transformation
422  	                                                 *   (0: no permutation) */
423  	   int                   random_randomseed;     /**< random seed for LP solver, e.g. for perturbations in the simplex (0: LP default) */
424  	   SCIP_Bool             random_permuteconss;   /**< should order of constraints be permuted (depends on permutationseed)? */
425  	   SCIP_Bool             random_permutevars;    /**< should order of variables be permuted (depends on permutationseed)? */
426  	
427  	   /* node selection settings */
428  	   char                  nodesel_childsel;   /**< child selection rule ('d'own, 'u'p, 'p'seudo costs, 'i'nference, 'l'p value,
429  	                                              *   'r'oot LP value difference, 'h'brid inference/root LP value difference) */
430  	
431  	   /* numerical settings */
432  	   SCIP_Real             num_infinity;       /**< values larger than this are considered infinity */
433  	   SCIP_Real             num_epsilon;        /**< absolute values smaller than this are considered zero */
434  	   SCIP_Real             num_sumepsilon;     /**< absolute values of sums smaller than this are considered zero */
435  	   SCIP_Real             num_feastol;        /**< feasibility tolerance for constraints */
436  	   SCIP_Real             num_checkfeastolfac;/**< factor to change the feasibility tolerance when testing the best
437  	                                              *   solution for feasibility (after solving process) */
438  	   SCIP_Real             num_lpfeastolfactor;/**< factor w.r.t. primal feasibility tolerance that determines default (and maximal) primal feasibility tolerance of LP solver (user parameter, see also num_relaxfeastol) */
439  	   SCIP_Real             num_dualfeastol;    /**< feasibility tolerance for reduced costs */
440  	   SCIP_Real             num_barrierconvtol; /**< convergence tolerance used in barrier algorithm */
441  	   SCIP_Real             num_boundstreps;    /**< minimal improve for strengthening bounds */
442  	   SCIP_Real             num_pseudocosteps;  /**< minimal variable distance value to use for pseudo cost updates */
443  	   SCIP_Real             num_pseudocostdelta;/**< minimal objective distance value to use for pseudo cost updates */
444  	   SCIP_Real             num_recompfac;      /**< minimal decrease factor that causes the recomputation of a value
445  	                                              *   (e.g., pseudo objective) instead of an update */
446  	   SCIP_Real             num_hugeval;        /**< values larger than this are considered huge and should be handled
447  	                                              *   separately (e.g., in activity computation) */
448  	   SCIP_Real             num_relaxfeastol;   /**< primal feasibility tolerance for relaxations (set by core or plugins, not a parameter) */
449  	
450  	   /* presolving settings */
451  	   SCIP_Real             presol_abortfac;    /**< abort presolve, if l.t. this frac of the problem was changed in last round */
452  	   int                   presol_maxrounds;   /**< maximal number of presolving rounds (-1: unlimited) */
453  	   int                   presol_maxrestarts; /**< maximal number of restarts (-1: unlimited) */
454  	   SCIP_Real             presol_clqtablefac; /**< limit on number of entries in clique table relative to number of problem nonzeros */
455  	   SCIP_Real             presol_restartfac;  /**< fraction of integer variables that were fixed in the root node
456  	                                              *   triggering a restart with preprocessing after root node evaluation */
457  	   SCIP_Real             presol_immrestartfac;/**< fraction of integer variables that were fixed in the root node triggering an
458  	                                               *   immediate restart with preprocessing */
459  	   SCIP_Real             presol_subrestartfac;/**< fraction of integer variables that were globally fixed during the
460  	                                               *   solving process triggering a restart with preprocessing */
461  	   SCIP_Real             presol_restartminred;/**< minimal fraction of integer variables removed after restart to allow for
462  	                                               *   an additional restart */
463  	   SCIP_Bool             presol_donotmultaggr;/**< should multi-aggregation of variables be forbidden? */
464  	   SCIP_Bool             presol_donotaggr;    /**< should aggregation of variables be forbidden? */
465  	
466  	   /* pricing settings */
467  	   SCIP_Real             price_abortfac;     /**< pricing is aborted, if fac * maxpricevars pricing candidates were found */
468  	   int                   price_maxvars;      /**< maximal number of variables priced in per pricing round */
469  	   int                   price_maxvarsroot;  /**< maximal number of priced variables at the root node */
470  	   SCIP_Bool             price_delvars;      /**< should variables created at the current node be deleted when the node is solved
471  	                                              *   in case they are not present in the LP anymore? */
472  	   SCIP_Bool             price_delvarsroot;  /**< should variables created at the root node be deleted when the root is solved
473  	                                              *   in case they are not present in the LP anymore? */
474  	
475  	   /* Decomposition settings */
476  	   SCIP_Bool             decomp_benderslabels; /**< should the variables be labeled for the application of Benders'
477  	                                                *   decomposition */
478  	   SCIP_Bool             decomp_applybenders;  /**< if a decomposition exists, should Benders' decomposition be applied*/
479  	   int                   decomp_maxgraphedge;  /**< maximum number of edges in block graph computation (-1: no limit, 0: disable block graph computation) */
480  	   SCIP_Bool             decomp_disablemeasures; /**< disable expensive measures */
481  	
482  	   /* Benders' decomposition settings */
483  	   SCIP_Real             benders_soltol;     /**< the tolerance for checking optimality in Benders' decomposition */
484  	   SCIP_Bool             benders_cutlpsol;   /**< should cuts be generated from the solution to the LP relaxation? */
485  	   SCIP_Bool             benders_copybenders;/**< should Benders' decomposition be copied for sub-SCIPs? */
486  	
487  	   /* propagation settings */
488  	   int                   prop_maxrounds;     /**< maximal number of propagation rounds per node (-1: unlimited) */
489  	   int                   prop_maxroundsroot; /**< maximal number of propagation rounds in the root node (-1: unlimited) */
490  	   SCIP_Bool             prop_abortoncutoff; /**< should propagation be aborted immediately? setting this to FALSE could
491  	                                              *   help conflict analysis to produce more conflict constraints */
492  	
493  	   /* reoptimization settings */
494  	   SCIP_Real             reopt_objsimsol;    /**< similarity of two objective functions to reuse stored solutions. */
495  	   SCIP_Real             reopt_objsimrootlp; /**< similarity of two sequential objective function to disable solving the
496  	                                              *   root LP.
497  	                                              */
498  	   SCIP_Real             reopt_objsimdelay;  /**< minimum similarity for using reoptimization of the search tree. */
499  	   char                  reopt_varorderinterdiction; /** use the 'd'efault or a 'r'andom variable order for interdiction
500  	                                                      *  branching when applying the reoptimization
501  	                                                      */
502  	   int                   reopt_forceheurrestart; /**< force a restart if the last n optimal solutions were found by
503  	                                                  *   heuristic reoptsols
504  	                                                  */
505  	   int                   reopt_maxcutage;    /**< maximal age of cuts to use them in reoptimization */
506  	   int                   reopt_maxdiffofnodes;/**< maximal number of bound changes between two stored nodes on one path */
507  	   int                   reopt_maxsavednodes;/**< maximal number of saved nodes */
508  	   int                   reopt_solvelp;      /**< strategy for solving the LP at nodes from reoptimization */
509  	   int                   reopt_solvelpdiff;  /**< maximal number of bound changes at node to skip solving the LP */
510  	   int                   reopt_savesols;     /**< number of best solutions which should be saved for the following runs.
511  	                                              *   (-1: save all)
512  	                                              */
513  	   SCIP_Bool             reopt_commontimelimit;/**< time limit over all reoptimization rounds? */
514  	   SCIP_Bool             reopt_enable;       /**< enable reoptimization */
515  	   SCIP_Bool             reopt_reducetofrontier; /**< delete stored nodes which were not reoptimized */
516  	   SCIP_Bool             reopt_saveconsprop; /**< save constraint propagations */
517  	   SCIP_Bool             reopt_sbinit;       /**< try to fix variables before reoptimizing by probing like strong
518  	                                              *   branching
519  	                                              */
520  	   SCIP_Bool             reopt_shrinkinner;  /**< replace branched inner nodes by their child nodes, if the number of
521  	                                              *   bound changes is not to large
522  	                                              */
523  	   SCIP_Bool             reopt_sepaglbinfsubtrees;/**< save global constraints to separate infeasible subtrees */
524  	   SCIP_Bool             reopt_sepabestsol;  /**< separate only the best solution, i.e., for constrained shortest path */
525  	   SCIP_Bool             reopt_storevarhistory;/**< use variable history of the previous solve if the objective function
526  	                                                *   has changed only slightly
527  	                                                */
528  	   SCIP_Bool             reopt_usepscost;    /**< reuse pseudo costs if the objective function changed only slightly */
529  	   SCIP_Bool             reopt_usecuts;      /**< reoptimize cuts found at the root node */
530  	   SCIP_Bool             reopt_usesplitcons; /**< use constraints to reconstruct the subtree pruned be dual reduction
531  	                                              *   when reactivating the node
532  	                                              */
533  	
534  	   /* separation settings */
535  	   SCIP_Real             sepa_maxbounddist;  /**< maximal relative distance from current node's dual bound to primal bound
536  	                                              *   compared to best node's dual bound for applying separation
537  	                                              *   (0.0: only on current best node, 1.0: on all nodes) */
538  	   SCIP_Real             sepa_maxlocalbounddist;/**< maximal relative distance from current node's dual bound to primal bound
539  	                                              *   compared to best node's dual bound for applying local separation
540  	                                              *   (0.0: only on current best node, 1.0: on all nodes) */
541  	   SCIP_Real             sepa_maxcoefratio;  /**< maximal ratio between coefficients in strongcg, cmir, and flowcover cuts */
542  	   SCIP_Real             sepa_maxcoefratiofacrowprep; /**< maximal ratio between coefficients (as factor of 1/feastol) to ensure in rowprep cleanup */
543  	   SCIP_Real             sepa_minefficacy;   /**< minimal efficacy for a cut to enter the LP */
544  	   SCIP_Real             sepa_minefficacyroot; /**< minimal efficacy for a cut to enter the LP in the root node */
545  	   SCIP_Real             sepa_minortho;      /**< minimal orthogonality for a cut to enter the LP */
546  	   SCIP_Real             sepa_minorthoroot;  /**< minimal orthogonality for a cut to enter the LP in the root node */
547  	   SCIP_Real             sepa_minactivityquot; /**< minimum cut activity quotient to convert cuts into constraints
548  	                                                *   during a restart (0.0: all cuts are converted) */
549  	   char                  sepa_orthofunc;     /**< function used for calc. scalar prod. in orthogonality test ('e'uclidean, 'd'iscrete) */
550  	   char                  sepa_efficacynorm;  /**< row norm to use for efficacy calculation ('e'uclidean, 'm'aximum, 's'um,
551  	                                              *   'd'iscrete) */
552  	   char                  sepa_cutselrestart; /**< cut selection during restart ('a'ge, activity 'q'uotient) */
553  	   char                  sepa_cutselsubscip; /**< cut selection for sub SCIPs  ('a'ge, activity 'q'uotient) */
554  	   SCIP_Bool             sepa_filtercutpoolrel; /**< should cutpool separate only cuts with high relative efficacy? */
555  	   int                   sepa_maxruns;       /**< maximal number of runs for which separation is enabled (-1: unlimited) */
556  	   int                   sepa_maxrounds;     /**< maximal number of separation rounds per node (-1: unlimited) */
557  	   int                   sepa_maxroundsroot; /**< maximal number of separation rounds in the root node (-1: unlimited) */
558  	   int                   sepa_maxroundsrootsubrun; /**< maximal number of separation rounds in the root node of a subsequent run (-1: unlimited) */
559  	   int                   sepa_maxaddrounds;  /**< maximal additional number of separation rounds in subsequent price-and-cut
560  	                                              *   loops (-1: no additional restriction) */
561  	   int                   sepa_maxstallrounds;/**< maximal number of consecutive separation rounds without objective
562  	                                              *   or integrality improvement (-1: no additional restriction) */
563  	   int                   sepa_maxstallroundsroot;/**< maximal number of consecutive separation rounds without objective
564  	                                              *   or integrality improvement (-1: no additional restriction) */
565  	   SCIP_Real             sepa_maxcutsgenfactor; /**< factor w.r.t. maxcuts for maximal number of cuts generated per
566  	                                                 * separation round (-1.0: no limit, >= 0.0: valid finite limit) */
567  	   SCIP_Real             sepa_maxcutsrootgenfactor; /**< factor w.r.t. maxcutsroot for maximal number of generated cuts
568  	                                                     * at the root node (-1.0: no limit, >= 0.0: valid finite limit) */
569  	   int                   sepa_maxcuts;       /**< maximal number of cuts separated per separation round */
570  	   int                   sepa_maxcutsroot;   /**< maximal number of separated cuts at the root node */
571  	   int                   sepa_cutagelimit;   /**< maximum age a cut can reach before it is deleted from the global cut pool */
572  	   int                   sepa_poolfreq;      /**< separation frequency for the global cut pool */
573  	
574  	   /* parallel settings */
575  	   int                   parallel_mode;      /**< the mode for the parallel implementation. 0: opportunistic or
576  	                                              *   1: deterministic */
577  	   int                   parallel_minnthreads;/**< the minimum number of threads used for parallel code */
578  	   int                   parallel_maxnthreads;/**< the maximum number of threads used for parallel code */
579  	
580  	   /* concurrent solver settings */
581  	   SCIP_Bool             concurrent_changeseeds;    /**< change the seeds in the different solvers? */
582  	   SCIP_Bool             concurrent_changechildsel; /**< change the child selection rule in different solvers? */
583  	   SCIP_Bool             concurrent_commvarbnds;    /**< should the concurrent solvers communicate global variable bound changes? */
584  	   SCIP_Bool             concurrent_presolvebefore; /**< should the problem be presolved before it is copied to the concurrent solvers? */
585  	   int                   concurrent_initseed;       /**< the seed for computing the concurrent solver seeds */
586  	   SCIP_Real             concurrent_freqinit;       /**< initial frequency of synchronization */
587  	   SCIP_Real             concurrent_freqmax;        /**< maximal frequency of synchronization */
588  	   SCIP_Real             concurrent_freqfactor;     /**< factor by which the frequency of synchronization changes */
589  	   SCIP_Real             concurrent_targetprogress; /**< when adapting the synchronization frequency this value is the targeted
590  	                                                     *   relative difference by which the absolute gap decreases per synchronization */
591  	   int                   concurrent_maxnsols;       /**< maximum number of solutions that will get stored in one synchronization */
592  	   int                   concurrent_nbestsols;      /**< number of best solutions that should be considered for synchronization */
593  	   int                   concurrent_maxnsyncdelay;  /**< max number of synchronizations before data is used */
594  	   SCIP_Real             concurrent_minsyncdelay;   /**< min offset before synchronization data is used */
595  	   char*                 concurrent_paramsetprefix; /**< path prefix for parameter setting files of concurrent solver scip-custom */
596  	
597  	   /* timing settings */
598  	   SCIP_CLOCKTYPE        time_clocktype;     /**< default clock type to use */
599  	   SCIP_Bool             time_enabled;       /**< is timing enabled? */
600  	   SCIP_Bool             time_reading;       /**< belongs reading time to solving time? */
601  	   SCIP_Bool             time_rareclockcheck;/**< should clock checks of solving time be performed less frequently (might exceed time limit slightly) */
602  	   SCIP_Bool             time_statistictiming;  /**< should timing for statistic output be enabled? */
603  	   SCIP_Bool             time_nlpieval;      /**< should time for evaluation in NLP solves be measured? */
604  	
605  	   /* tree compression parameters (for reoptimization) */
606  	   SCIP_Bool             compr_enable;       /**< should automatic tree compression after presolving be enabled? (only for reoptimization) */
607  	   SCIP_Real             compr_time;         /**< maximum time to run tree compression heuristics */
608  	
609  	   /* visualization settings */
610  	   char*                 visual_vbcfilename; /**< name of the VBC tool output file, or - if no VBC output should be created */
611  	   char*                 visual_bakfilename; /**< name of the BAK tool output file, or - if no BAK output should be created */
612  	   SCIP_Bool             visual_realtime;    /**< should the real solving time be used instead of time step counter in visualization? */
613  	   SCIP_Bool             visual_dispsols;    /**< should the node where solutions are found be visualized? */
614  	   SCIP_Bool             visual_displb;      /**< should lower bound information be visualized? */
615  	   SCIP_Bool             visual_objextern;   /**< should be output the external value of the objective? */
616  	
617  	   /* Reading */
618  	   SCIP_Bool             read_initialconss;  /**< should model constraints be marked as initial? */
619  	   SCIP_Bool             read_dynamicconss;  /**< should model constraints be subject to aging? */
620  	   SCIP_Bool             read_dynamiccols;   /**< should columns be added and removed dynamically to the LP? */
621  	   SCIP_Bool             read_dynamicrows;   /**< should rows be added and removed dynamically to the LP? */
622  	
623  	   /* Writing */
624  	   SCIP_Bool             write_allconss;     /**< should all constraints be written (including the redundant constraints)? */
625  	   SCIP_Bool             write_printzeros;   /**< should variables set to zero be printed? */
626  	   int                   write_genoffset;    /**< when writing the problem with generic names, we start with index
627  	                                              *   0; using this parameter we can change the starting index to be
628  	                                              *   different */
629  	};
630  	
631  	#ifdef __cplusplus
632  	}
633  	#endif
634  	
635  	#endif
636