struct_set.h 51.5 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*                                                                           */
/*                  This file is part of the program and library             */
/*         SCIP --- Solving Constraint Integer Programs                      */
/*                                                                           */
/*    Copyright (C) 2002-2020 Konrad-Zuse-Zentrum                            */
/*                            fuer Informationstechnik Berlin                */
/*                                                                           */
/*  SCIP is distributed under the terms of the ZIB Academic License.         */
/*                                                                           */
/*  You should have received a copy of the ZIB Academic License              */
/*  along with SCIP; see the file COPYING. If not visit scipopt.org.         */
/*                                                                           */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/**@file   struct_set.h
 * @ingroup INTERNALAPI
 * @brief  datastructures for global SCIP settings
 * @author Tobias Achterberg
 */

/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/

#ifndef __SCIP_STRUCT_SET_H__
#define __SCIP_STRUCT_SET_H__


#include "scip/def.h"
#include "scip/message.h"
#include "scip/type_bandit.h"
#include "scip/type_set.h"
#include "scip/type_clock.h"
#include "scip/type_paramset.h"
#include "scip/type_event.h"
#include "scip/type_scip.h"
#include "scip/type_branch.h"
#include "scip/type_conflict.h"
#include "scip/type_cons.h"
#include "scip/type_disp.h"
#include "scip/type_dialog.h"
#include "scip/type_heur.h"
#include "scip/type_compr.h"
#include "scip/type_nodesel.h"
#include "scip/type_presol.h"
#include "scip/type_pricer.h"
#include "scip/type_reader.h"
#include "scip/type_relax.h"
#include "scip/type_sepa.h"
#include "scip/type_table.h"
#include "scip/type_prop.h"
#include "nlpi/type_nlpi.h"
#include "scip/type_concsolver.h"
#include "scip/type_benders.h"
#include "scip/debug.h"

#ifdef __cplusplus
extern "C" {
#endif

/** global SCIP settings */
struct SCIP_Set
{
   SCIP_STAGE            stage;              /**< SCIP operation stage */
   SCIP*                 scip;               /**< very ugly: pointer to scip main data structure for callback methods */
   SCIP_PARAMSET*        paramset;           /**< set of parameters */
   BMS_BUFMEM*           buffer;             /**< memory buffers for short living temporary objects */
   BMS_BUFMEM*           cleanbuffer;        /**< memory buffers for short living temporary objects init. to all zero */
   SCIP_READER**         readers;            /**< file readers */
   SCIP_PRICER**         pricers;            /**< variable pricers */
   SCIP_CONSHDLR**       conshdlrs;          /**< constraint handlers (sorted by check priority) */
   SCIP_CONSHDLR**       conshdlrs_sepa;     /**< constraint handlers (sorted by separation priority) */
   SCIP_CONSHDLR**       conshdlrs_enfo;     /**< constraint handlers (sorted by enforcement priority) */
   SCIP_CONSHDLR**       conshdlrs_include;  /**< constraint handlers (sorted by inclusion order) */
   SCIP_CONFLICTHDLR**   conflicthdlrs;      /**< conflict handlers */
   SCIP_PRESOL**         presols;            /**< presolvers */
   SCIP_RELAX**          relaxs;             /**< relaxators */
   SCIP_SEPA**           sepas;              /**< separators */
   SCIP_PROP**           props;              /**< propagators */
   SCIP_PROP**           props_presol;       /**< propagators (sorted by presol priority) */
   SCIP_HEUR**           heurs;              /**< primal heuristics */
   SCIP_COMPR**          comprs;             /**< tree compressions */
   SCIP_EVENTHDLR**      eventhdlrs;         /**< event handlers */
   SCIP_NODESEL**        nodesels;           /**< node selectors */
   SCIP_NODESEL*         nodesel;            /**< currently used node selector, or NULL if invalid */
   SCIP_BRANCHRULE**     branchrules;        /**< branching rules */
   SCIP_DISP**           disps;              /**< display columns */
   SCIP_TABLE**          tables;             /**< statistics tables */
   SCIP_DIALOG**         dialogs;            /**< dialogs */
   SCIP_NLPI**           nlpis;              /**< interfaces to NLP solvers */
   SCIP_CONCSOLVERTYPE** concsolvertypes;    /**< concurrent solver types */
   SCIP_CONCSOLVER**     concsolvers;        /**< the concurrent solvers used for solving */
   SCIP_BENDERS**        benders;            /**< the data structures managing the Benders' decomposition algorithm */
   SCIP_DEBUGSOLDATA*    debugsoldata;       /**< data for debug solutions */
   SCIP_BANDITVTABLE**   banditvtables;      /**< virtual function tables for bandit algorithms */
   char**                extcodenames;       /**< names of externals codes */
   char**                extcodedescs;       /**< descriptions of external codes */
   int                   nreaders;           /**< number of file readers */
   int                   readerssize;        /**< size of readers array */
   int                   npricers;           /**< number of variable pricers */
   int                   nactivepricers;     /**< number of variable pricers used in the current problem */
   int                   pricerssize;        /**< size of pricers array */
   int                   nconshdlrs;         /**< number of constraint handlers */
   int                   conshdlrssize;      /**< size of conshdlrs array */
   int                   nconflicthdlrs;     /**< number of conflict handlers */
   int                   conflicthdlrssize;  /**< size of conflicthdlrs array */
   int                   npresols;           /**< number of presolvers */
   int                   presolssize;        /**< size of presols array */
   int                   nrelaxs;            /**< number of relaxators */
   int                   relaxssize;         /**< size of relaxs array */
   int                   nsepas;             /**< number of separators */
   int                   sepassize;          /**< size of sepas array */
   int                   nprops;             /**< number of propagators */
   int                   propssize;          /**< size of props array */
   int                   nheurs;             /**< number of primal heuristics */
   int                   heurssize;          /**< size of heurs array */
   int                   ncomprs;            /**< number of tree compressions */
   int                   comprssize;         /**< size of comprs array */
   int                   neventhdlrs;        /**< number of event handlers */
   int                   eventhdlrssize;     /**< size of eventhdlrs array */
   int                   nnodesels;          /**< number of node selectors */
   int                   nodeselssize;       /**< size of nodesels array */
   int                   nbranchrules;       /**< number of branching rules */
   int                   branchrulessize;    /**< size of branchrules array */
   int                   ndisps;             /**< number of display columns */
   int                   dispssize;          /**< size of disps array */
   int                   ntables;            /**< number of statistics tables */
   int                   tablessize;         /**< size of tables array */
   int                   ndialogs;           /**< number of dialogs */
   int                   dialogssize;        /**< size of dialogs array */
   int                   nnlpis;             /**< number of NLPIs */
   int                   nlpissize;          /**< size of NLPIs array */
   int                   nconcsolvertypes;   /**< number of concurrent solver types */
   int                   concsolvertypessize;/**< size of concurrent solver types array */
   int                   nconcsolvers;       /**< number of concurrent solvers used for solving */
   int                   concsolverssize;    /**< size of concurrent solvers array */
   int                   nbenders;           /**< number of Benders' decomposition algorithms */
   int                   nactivebenders;     /**< number of Benders' decomposition algorithms that are used */
   int                   benderssize;        /**< size of Benders' decomposition algorithms array */
   int                   nextcodes;          /**< number of external codes */
   int                   extcodessize;       /**< size of external code arrays */
   int                   nbanditvtables;     /**< number of bandit algorithm virtual function tables */
   int                   banditvtablessize;  /**< size of banditvtables array */
   SCIP_Bool             pricerssorted;      /**< are the pricers sorted by activity and priority? */
   SCIP_Bool             pricersnamesorted;  /**< are the pricers sorted by name? */
   SCIP_Bool             conflicthdlrssorted;/**< are the conflict handlers sorted by priority? */
   SCIP_Bool             conflicthdlrsnamesorted;/**< are the conflict handlers sorted by name? */
   SCIP_Bool             presolssorted;      /**< are the presolvers sorted by priority? */
   SCIP_Bool             presolsnamesorted;  /**< are the presolvers sorted by name? */
   SCIP_Bool             relaxssorted;       /**< are the relaxators sorted by priority? */
   SCIP_Bool             relaxsnamesorted;   /**< are the relaxators sorted by name? */
   SCIP_Bool             sepassorted;        /**< are the separators sorted by priority? */
   SCIP_Bool             sepasnamesorted;    /**< are the separators sorted by name? */
   SCIP_Bool             propssorted;        /**< are the propagators sorted by priority? */
   SCIP_Bool             propspresolsorted;  /**< are the propagators in prop_presol sorted? */
   SCIP_Bool             propsnamesorted;    /**< are the propagators sorted by name? */
   SCIP_Bool             heurssorted;        /**< are the heuristics sorted by priority? */
   SCIP_Bool             heursnamesorted;    /**< are the heuristics sorted by name? */
   SCIP_Bool             comprssorted;       /**< are the compressions sorted by priority? */
   SCIP_Bool             comprsnamesorted;   /**< are the compressions sorted by name? */
   SCIP_Bool             branchrulessorted;  /**< are the branching rules sorted by priority? */
   SCIP_Bool             branchrulesnamesorted;/**< are the branching rules sorted by name? */
   SCIP_Bool             tablessorted;       /**< are the tables sorted by position? */
   SCIP_Bool             nlpissorted;        /**< are the NLPIs sorted by priority? */
   SCIP_Bool             benderssorted;      /**< are the Benders' algorithms sorted by activity and priority? */
   SCIP_Bool             bendersnamesorted;  /**< are the Benders' algorithms sorted by name? */
   SCIP_Bool             limitchanged;       /**< marks whether any of the limit parameters was changed */
   SCIP_Bool             subscipsoff;        /**< marks whether the sub-SCIPs have been deactivated */

   /* branching settings */
   char                  branch_scorefunc;   /**< branching score function ('s'um, 'p'roduct, 'q'uotient) */
   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 */
   SCIP_Real             branch_scorefac;    /**< branching score factor to weigh downward and upward gain prediction
                                              *   in sum score function */
   SCIP_Bool             branch_preferbinary;/**< should branching on binary variables be preferred? */
   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 */
   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 */
   SCIP_Real             branch_midpullreldomtrig; /**< multiply midpull by relative domain width if the latter is below this value */
   char                  branch_lpgainnorm;  /**< strategy for normalizing LP gain when updating pseudo costs of continuous variables */
   SCIP_Bool             branch_delaypscost; /**< whether to delay pseudo costs updates for continuous variables to after separation */
   SCIP_Bool             branch_divingpscost;/**< should pseudo costs be updated also in diving and probing mode? */
   SCIP_Bool             branch_forceall;    /**< should all strong branching children be regarded even if
                                              *   one is detected to be infeasible? (only with propagation) */
   SCIP_Bool             branch_checksbsol;  /**< should LP solutions during strong branching with propagation be checked for feasibility? */
   SCIP_Bool             branch_roundsbsol;  /**< should LP solutions during strong branching with propagation be rounded? (only when checksbsol=TRUE) */
   SCIP_Bool             branch_sumadjustscore; /**< score adjustment near zero by \b adding epsilon (TRUE) or using maximum (FALSE) */

   /* conflict analysis settings */
   SCIP_Real             conf_maxvarsfac;    /**< maximal fraction of variables involved in a conflict constraint */
   int                   conf_minmaxvars;    /**< minimal absolute maximum of variables involved in a conflict constraint */
   int                   conf_maxlploops;    /**< maximal number of LP resolving loops during conflict analysis
                                              *   (-1: no limit) */
   int                   conf_lpiterations;  /**< maximal number of LP iterations in each LP resolving loop
                                              *   (-1: no limit) */
   int                   conf_fuiplevels;    /**< number of depth levels up to which first UIP's are used in conflict
                                              *   analysis (-1: use All-FirstUIP rule) */
   int                   conf_interconss;    /**< maximal number of intermediate conflict constraints generated in conflict
                                              *   graph (-1: use every intermediate constraint) */
   int                   conf_maxconss;      /**< maximal number of conflict constraints accepted at an infeasible node
                                              *   (-1: use all generated conflict constraints) */
   int                   conf_maxstoresize;  /**< maximal size of conflict store */
   int                   conf_reconvlevels;  /**< number of depth levels up to which UIP reconvergence constraints are
                                              *   generated (-1: generate reconvergence constraints in all depth levels) */
   SCIP_Bool             conf_enable;        /**< should conflict analysis be enabled? */
   SCIP_Bool             conf_cleanbnddepend;/**< should conflicts related to an old cutoff bound be removed? */
   SCIP_Bool             conf_useprop;       /**< should propagation conflict analysis be used? (uses conflict graph only) */
   char                  conf_useinflp;      /**< should infeasible LP conflict analysis be used?
                                              *   ('o'ff, 'c'onflict graph, 'd'ual ray, 'b'oth conflict graph and dual ray)
                                              */
   char                  conf_useboundlp;    /**< should bound exceeding LP conflict analysis be used?
                                              *   ('o'ff, 'c'onflict graph, 'd'ual ray, 'b'oth conflict graph and dual ray)
                                              */
   SCIP_Bool             conf_usesb;         /**< should infeasible/bound exceeding strong branching conflict analysis be
                                              *   used? */
   SCIP_Bool             conf_usepseudo;     /**< should pseudo solution conflict analysis be used? */
   SCIP_Bool             conf_prefinfproof;  /**< prefer infeasibility proof to boundexceeding proof */
   SCIP_Bool             conf_preferbinary;  /**< should binary conflicts be preferred? */
   SCIP_Bool             conf_allowlocal;    /**< should conflict constraints be generated that are only valid locally? */
   SCIP_Bool             conf_settlelocal;   /**< should conflict constraints be attached only to the local subtree where
                                              *   they can be useful? */
   SCIP_Bool             conf_repropagate;   /**< should earlier nodes be repropagated in order to replace branching
                                              *   decisions by deductions? */
   SCIP_Bool             conf_keepreprop;    /**< should constraints be kept for repropagation even if they are too long? */
   SCIP_Bool             conf_separate;      /**< should the conflict constraints be separated? */
   SCIP_Bool             conf_dynamic;       /**< should the conflict constraints be subject to aging? */
   SCIP_Bool             conf_removable;     /**< should the conflict's relaxations be subject to LP aging and cleanup? */
   SCIP_Real             conf_depthscorefac; /**< score factor for depth level in bound relaxation heuristic */
   SCIP_Real             conf_proofscorefac; /**< score factor for contribution to infeasibility proof in bound relaxation heuristic */
   SCIP_Real             conf_uplockscorefac;/**< score factor for number of up locks in bound relaxation heuristic */
   SCIP_Real             conf_downlockscorefac;/**< score factor for number of down locks in bound relaxation heuristic */
   SCIP_Real             conf_scorefac;      /**< factor to decrease importance of variables' earlier conflict scores */
   int                   conf_restartnum;    /**< number of successful conflict analysis calls that trigger a restart
                                              *   (0: disable conflict restarts) */
   SCIP_Real             conf_restartfac;    /**< factor to increase restartnum with after each restart */
   SCIP_Bool             conf_ignorerelaxedbd;/**< should relaxed bounds be ignored? */
   int                   conf_maxvarsdetectimpliedbounds;/**< maximal number of variables to try to detect global bound
                                                          *   implications and shorten the whole conflict set (0:
                                                          *   disabled )
                                                          */
   SCIP_Bool             conf_fullshortenconflict;/**< try to shorten the whole conflict set or terminate early
                                                   *   (depending on the 'maxvarsdetectimpliedbounds' parameter)
                                                   */
   SCIP_Real             conf_conflictweight;/**< the weight the VSIDS score is weight by updating the VSIDS for a
                                              *   variable if it is part of a conflict
                                              */
   SCIP_Real             conf_conflictgraphweight; /**< the weight the VSIDS score is weight by updating the VSIDS for a
                                                    *   variable if it is part of a conflict graph
                                                    */
   SCIP_Real             conf_weightsize;    /**< weight of the size of a conflict used in score calculation */
   SCIP_Real             conf_weightrepropdepth;/**< weight of the prepropagtion depth of a conflict used in score calculation */
   SCIP_Real             conf_weightvaliddepth;/**< weight of the valid depth of a conflict used in score calculation */
   SCIP_Bool             conf_sepaaltproofs;      /**< separate valid inequalities from dualray proofs */
   SCIP_Real             conf_minimprove;    /**< minimal improvement of primal bound to remove conflicts depending on
                                              *   a previous incumbent.
                                              */
   SCIP_Bool             conf_uselocalrows;  /**< use local rows to construct infeasibility proofs */

   /* constraint settings */
   int                   cons_agelimit;      /**< maximum age an unnecessary constraint can reach before it is deleted
                                              *   (0: dynamic, -1: disable aging) */
   int                   cons_obsoleteage;   /**< age of a constraint after which it is marked obsolete
                                              *   (0: dynamic, -1: disable obsoletion) */
   SCIP_Bool             cons_disableenfops; /**< should enforcement of pseudo solution be disabled? */

   /* display settings */
   SCIP_VERBLEVEL        disp_verblevel;     /**< verbosity level of output */
   int                   disp_width;         /**< maximal number of characters in a node information line */
   int                   disp_freq;          /**< frequency for displaying node information lines */
   int                   disp_headerfreq;    /**< frequency for displaying header lines (every n'th node information line) */
   SCIP_Bool             disp_lpinfo;        /**< should the LP solver display status messages? */
   SCIP_Bool             disp_allviols;      /**< display all violations of the best solution after the solving process finished? */
   SCIP_Bool             disp_relevantstats; /**< should the relevant statistics be displayed at the end of solving? */

   /* heuristics settings */
   SCIP_Bool             heur_useuctsubscip; /**< should setting of common subscip parameters include the activation of the UCT node selector? */

   /* history settings */
   SCIP_Bool             history_valuebased; /**< should statistics be collected for variable domain value pairs? */
   SCIP_Bool             history_allowmerge; /**< should variable histories be merged from sub-SCIPs whenever possible? */
   SCIP_Bool             history_allowtransfer; /**< should variable histories be transferred to initialize SCIP copies? */

   /* limit settings */
   SCIP_Real             limit_time;         /**< maximal time in seconds to run */
   SCIP_Real             limit_memory;       /**< maximal memory usage in MB */
   SCIP_Real             limit_gap;          /**< solving stops, if the given gap is reached */
   SCIP_Real             limit_absgap;       /**< solving stops, if the absolute difference between primal and dual bound
                                              *   reaches this value */
   SCIP_Longint          limit_nodes;        /**< maximal number of nodes to process (-1: no limit) */
   SCIP_Longint          limit_totalnodes;   /**< maximal number of total nodes (incl. restarts) to process (-1: no limit) */
   SCIP_Longint          limit_stallnodes;   /**< solving stops, if the given number of nodes was processed since the
                                              *   last improvement of the primal solution value (-1: no limit) */
   int                   limit_solutions;    /**< solving stops, if the given number of solutions were found (-1: no limit) */
   int                   limit_bestsol;      /**< solving stops, if the given number of solution improvements were found
                                              *   (-1: no limit) */
   int                   limit_maxsol;       /**< maximal number of solutions to store in the solution storage */
   int                   limit_maxorigsol;   /**< maximal number of solutions candidates to store in the solution storage of the original problem */
   int                   limit_restarts;     /**< solving stops, if the given number of restarts was triggered (-1: no limit) */
   int                   limit_autorestartnodes;/**< nodes to trigger automatic restart */

   SCIP_Bool             istimelimitfinite;  /**< is the time limit finite */

   /* LP settings */
   int                   lp_solvefreq;       /**< frequency for solving LP at the nodes (-1: never; 0: only root LP) */
   SCIP_Longint          lp_iterlim;         /**< iteration limit for each single LP solve; -1: no limit */
   SCIP_Longint          lp_rootiterlim;     /**< iteration limit for initial root LP solve; -1: no limit */
   int                   lp_solvedepth;      /**< maximal depth for solving LP at the nodes (-1: no depth limit) */
   char                  lp_initalgorithm;   /**< LP algorithm for solving initial LP relaxations ('s'implex, 'b'arrier,
                                              *   barrier with 'c'rossover) */
   char                  lp_resolvealgorithm;/**< LP algorithm for resolving LP relaxations if a starting basis exists
                                              *   ('s'implex, 'b'arrier, barrier with 'c'rossover) */
   char                  lp_pricing;         /**< LP pricing strategy ('a'uto, 'f'ull pricing, 's'teepest edge pricing,
                                              *   'q'uickstart steepest edge pricing, 'd'evex pricing) */
   SCIP_Bool             lp_clearinitialprobinglp;/**< should lp state be cleared at the end of probing mode when LP
                                              *   was initially unsolved, e.g., when called right after presolving? */
   SCIP_Bool             lp_resolverestore;  /**< should the LP be resolved to restore the state at start of diving (if
                                              *   FALSE we buffer the solution values)? */
   SCIP_Bool             lp_freesolvalbuffers; /**< should the buffers for storing LP solution values during diving be
                                              *   freed at end of diving? */
   int                   lp_colagelimit;     /**< maximum age a column can reach before it is deleted from the SCIP_LP
                                              *   (-1: don't delete columns due to aging) */
   int                   lp_rowagelimit;     /**< maximum age a row can reach before it is deleted from the LP 
                                              *   (-1: don't delete rows due to aging) */
   SCIP_Bool             lp_cleanupcols;     /**< should new non-basic columns be removed after LP solving? */
   SCIP_Bool             lp_cleanupcolsroot; /**< should new non-basic columns be removed after root LP solving? */
   SCIP_Bool             lp_cleanuprows;     /**< should new basic rows be removed after LP solving? */
   SCIP_Bool             lp_cleanuprowsroot; /**< should new basic rows be removed after root LP solving? */
   SCIP_Bool             lp_checkstability;  /**< should LP solver's return status be checked for stability? */
   SCIP_Real             lp_conditionlimit;  /**< maximum condition number of LP basis counted as stable (-1.0: no check) */
   SCIP_Real             lp_markowitz;       /**< minimal Markowitz threshold to control sparsity/stability in LU factorization */
   SCIP_Bool             lp_checkprimfeas;   /**< should LP solutions be checked for primal feasibility, resolving LP when numerical troubles occur? */
   SCIP_Bool             lp_checkdualfeas;   /**< should LP solutions be checked for dual feasibility, resolving LP when numerical troubles occur? */
   SCIP_Bool             lp_checkfarkas;     /**< should infeasibility proofs from the LP be checked? */
   int                   lp_fastmip;         /**< which FASTMIP setting of LP solver should be used? 0: off, 1: medium, 2: full */
   int                   lp_scaling;         /**< LP scaling (0: none, 1: normal, 2: aggressive) */
   SCIP_Bool             lp_presolving;      /**< should presolving of LP solver be used? */
   SCIP_Bool             lp_lexdualalgo;     /**< should the lexicographic dual algorithm be used? */
   SCIP_Bool             lp_lexdualrootonly; /**< should the lexicographic dual algorithm be applied only at the root node */
   int                   lp_lexdualmaxrounds;/**< maximum number of rounds in the lexicographic dual algorithm */
   SCIP_Bool             lp_lexdualbasic;    /**< choose fractional basic variables in lexicographic dual algorithm */
   SCIP_Bool             lp_lexdualstalling; /**< turn on the lex dual algorithm only when stalling? */
   int                   lp_disablecutoff;   /**< disable the cutoff bound in the LP solver? (0: enabled, 1: disabled, 2: auto) */
   SCIP_Real             lp_rowrepswitch;    /**< simplex algorithm shall use row representation of the basis
                                              *   if number of rows divided by number of columns exceeds this value */
   int                   lp_threads;         /**< number of threads used for solving the LP (0: automatic) */
   SCIP_Real             lp_resolveiterfac;  /**< factor of average LP iterations that is used as LP iteration limit
                                              *   for LP resolve (-1: unlimited) */
   int                   lp_resolveitermin;  /**< minimum number of iterations that are allowed for LP resolve */
   int                   lp_solutionpolishing;/**< LP solution polishing method (0: disabled, 1: only root, 2: always, 3: auto) */
   int                   lp_refactorinterval;/**< LP refactorization interval (0: automatic) */
   SCIP_Bool             lp_alwaysgetduals;  /**< should the dual solution always be collected for LP solutions. */

   /* NLP settings */
   SCIP_Bool             nlp_disable;        /**< should the NLP be disabled even if a constraint handler enabled it? */
   char*                 nlp_solver;         /**< name of NLP solver to use */

   /* memory settings */
   SCIP_Real             mem_savefac;        /**< fraction of maximal memory usage resulting in switch to memory saving mode */
   SCIP_Real             mem_arraygrowfac;   /**< memory growing factor for dynamically allocated arrays */
   SCIP_Real             mem_treegrowfac;    /**< memory growing factor for tree array */
   SCIP_Real             mem_pathgrowfac;    /**< memory growing factor for path array */
   int                   mem_arraygrowinit;  /**< initial size of dynamically allocated arrays */
   int                   mem_treegrowinit;   /**< initial size of tree array */
   int                   mem_pathgrowinit;   /**< initial size of path array */

   /* miscellaneous settings */
   SCIP_Bool             misc_catchctrlc;    /**< should the CTRL-C interrupt be caught by SCIP? */
   SCIP_Bool             misc_usevartable;   /**< should a hashtable be used to map from variable names to variables? */
   SCIP_Bool             misc_useconstable;  /**< should a hashtable be used to map from constraint names to constraints? */
   SCIP_Bool             misc_usesmalltables;/**< should smaller hashtables be used? yields better performance for small problems with about 100 variables */
   SCIP_Bool             misc_exactsolve;    /**< should the problem be solved exactly (with proven dual bounds)? */
   SCIP_Bool             misc_resetstat;     /**< should the statistics be reset if the transformed problem is freed
                                              *   otherwise the statistics get reset after original problem is freed (in
                                              *   case of bender decomposition this parameter should be set to FALSE and
                                              *   therefore can be used to collect statistics over all runs) */
   SCIP_Bool             misc_improvingsols; /**< should only solutions be checked which improve the primal bound */
   SCIP_Bool             misc_printreason;   /**< should the reason be printed if a given start solution is infeasible? */
   SCIP_Bool             misc_estimexternmem;/**< should the usage of external memory be estimated? */
   SCIP_Bool             misc_transorigsols; /**< should SCIP try to transfer original solutions to the transformed space (after presolving)? */
   SCIP_Bool             misc_transsolsorig; /**< should SCIP try to transfer transformed solutions to the original space (after solving)? */
   SCIP_Bool             misc_calcintegral;  /**< should SCIP calculate the primal dual integral value which may require
                                              *   a large number of additional clock calls (and decrease the performance)? */
   SCIP_Bool             misc_finitesolstore;/**< should SCIP try to remove infinite fixings from solutions copied to the solution store? */
   SCIP_Bool             misc_outputorigsol; /**< should the best solution be transformed to the orignal space and be output in command line run? */
   SCIP_Bool             misc_allowstrongdualreds; /**< should strong dual reductions be allowed in propagation and presolving? */
   SCIP_Bool             misc_allowweakdualreds;  /**< should weak dual reductions be allowed in propagation and presolving? */
   SCIP_Real             misc_referencevalue;/**< objective value for reference purposes */
   int                   misc_usesymmetry;   /**< bitset describing used symmetry handling technique (0: off; 1: polyhedral (orbitopes and/or symresacks);
                                              *   2: orbital fixing; 3: orbitopes and orbital fixing) */
   char*                 misc_debugsol;      /**< path to a debug solution */
   SCIP_Bool             misc_scaleobj;      /**< should the objective function be scaled? */

   /* randomization parameters */
   int                   random_randomseedshift;/**< global shift of all random seeds in the plugins, this will have no impact on the permutation and LP seeds */
   int                   random_permutationseed;/**< seed value for permuting the problem after reading/transformation
                                                 *   (0: no permutation) */
   int                   random_randomseed;     /**< random seed for LP solver, e.g. for perturbations in the simplex (0: LP default) */
   SCIP_Bool             random_permuteconss;   /**< should order of constraints be permuted (depends on permutationseed)? */
   SCIP_Bool             random_permutevars;    /**< should order of variables be permuted (depends on permutationseed)? */

   /* node selection settings */
   char                  nodesel_childsel;   /**< child selection rule ('d'own, 'u'p, 'p'seudo costs, 'i'nference, 'l'p value,
                                              *   'r'oot LP value difference, 'h'brid inference/root LP value difference) */

   /* numerical settings */
   SCIP_Real             num_infinity;       /**< values larger than this are considered infinity */
   SCIP_Real             num_epsilon;        /**< absolute values smaller than this are considered zero */
   SCIP_Real             num_sumepsilon;     /**< absolute values of sums smaller than this are considered zero */
   SCIP_Real             num_feastol;        /**< feasibility tolerance for constraints */
   SCIP_Real             num_checkfeastolfac;/**< factor to change the feasibility tolerance when testing the best
                                              *   solution for feasibility (after solving process) */
   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) */
   SCIP_Real             num_dualfeastol;    /**< feasibility tolerance for reduced costs */
   SCIP_Real             num_barrierconvtol; /**< convergence tolerance used in barrier algorithm */
   SCIP_Real             num_boundstreps;    /**< minimal improve for strengthening bounds */
   SCIP_Real             num_pseudocosteps;  /**< minimal variable distance value to use for pseudo cost updates */
   SCIP_Real             num_pseudocostdelta;/**< minimal objective distance value to use for pseudo cost updates */
   SCIP_Real             num_recompfac;      /**< minimal decrease factor that causes the recomputation of a value
                                              *   (e.g., pseudo objective) instead of an update */
   SCIP_Real             num_hugeval;        /**< values larger than this are considered huge and should be handled
                                              *   separately (e.g., in activity computation) */
   SCIP_Real             num_relaxfeastol;   /**< primal feasibility tolerance for relaxations (set by core or plugins, not a parameter) */

   /* presolving settings */
   SCIP_Real             presol_abortfac;    /**< abort presolve, if l.t. this frac of the problem was changed in last round */
   int                   presol_maxrounds;   /**< maximal number of presolving rounds (-1: unlimited) */
   int                   presol_maxrestarts; /**< maximal number of restarts (-1: unlimited) */
   SCIP_Real             presol_clqtablefac; /**< limit on number of entries in clique table relative to number of problem nonzeros */
   SCIP_Real             presol_restartfac;  /**< fraction of integer variables that were fixed in the root node
                                              *   triggering a restart with preprocessing after root node evaluation */
   SCIP_Real             presol_immrestartfac;/**< fraction of integer variables that were fixed in the root node triggering an
                                               *   immediate restart with preprocessing */
   SCIP_Real             presol_subrestartfac;/**< fraction of integer variables that were globally fixed during the
                                               *   solving process triggering a restart with preprocessing */
   SCIP_Real             presol_restartminred;/**< minimal fraction of integer variables removed after restart to allow for
                                               *   an additional restart */
   SCIP_Bool             presol_donotmultaggr;/**< should multi-aggregation of variables be forbidden? */
   SCIP_Bool             presol_donotaggr;   /**< shouldaggregation of variables be forbidden? */

   /* pricing settings */
   SCIP_Real             price_abortfac;     /**< pricing is aborted, if fac * maxpricevars pricing candidates were found */
   int                   price_maxvars;      /**< maximal number of variables priced in per pricing round */
   int                   price_maxvarsroot;  /**< maximal number of priced variables at the root node */
   SCIP_Bool             price_delvars;      /**< should variables created at the current node be deleted when the node is solved
                                              *   in case they are not present in the LP anymore? */
   SCIP_Bool             price_delvarsroot;  /**< should variables created at the root node be deleted when the root is solved
                                              *   in case they are not present in the LP anymore? */

   /* Decomposition settings */
   SCIP_Bool             decomp_benderslabels; /**< should the variables be labeled for the application of Benders'
                                                *   decomposition */
   SCIP_Bool             decomp_applybenders;  /**< if a decomposition exists, should Benders' decomposition be applied*/
   int                   decomp_maxgraphedge;  /**< maximum number of edges in block graph computation, or -1 for no limit */

   /* Benders' decomposition settings */
   SCIP_Real             benders_soltol;     /**< the tolerance for checking optimality in Benders' decomposition */
   SCIP_Bool             benders_cutlpsol;   /**< should cuts be generated from the solution to the LP relaxation? */
   SCIP_Bool             benders_copybenders;/**< should Benders' decomposition be copied for sub-SCIPs? */

   /* propagation settings */
   int                   prop_maxrounds;     /**< maximal number of propagation rounds per node (-1: unlimited) */
   int                   prop_maxroundsroot; /**< maximal number of propagation rounds in the root node (-1: unlimited) */
   SCIP_Bool             prop_abortoncutoff; /**< should propagation be aborted immediately? setting this to FALSE could
                                              *   help conflict analysis to produce more conflict constraints */

   /* reoptimization settings */
   SCIP_Real             reopt_objsimsol;    /**< similarity of two objective functions to reuse stored solutions. */
   SCIP_Real             reopt_objsimrootlp; /**< similarity of two sequential objective function to disable solving the
                                              *   root LP.
                                              */
   SCIP_Real             reopt_objsimdelay;  /**< minimum similarity for using reoptimization of the search tree. */
   char                  reopt_varorderinterdiction; /** use the 'd'efault or a 'r'andom variable order for interdiction
                                                      *  branching when applying the reoptimization
                                                      */
   int                   reopt_forceheurrestart; /**< force a restart if the last n optimal solutions were found by
                                                  *   heuristic reoptsols
                                                  */
   int                   reopt_maxcutage;    /**< maximal age of cuts to use them in reoptimization */
   int                   reopt_maxdiffofnodes;/**< maximal number of bound changes between two stored nodes on one path */
   int                   reopt_maxsavednodes;/**< maximal number of saved nodes */
   int                   reopt_solvelp;      /**< strategy for solving the LP at nodes from reoptimization */
   int                   reopt_solvelpdiff;  /**< maximal number of bound changes at node to skip solving the LP */
   int                   reopt_savesols;     /**< number of best solutions which should be saved for the following runs.
                                              *   (-1: save all)
                                              */
   SCIP_Bool             reopt_commontimelimit;/**< time limit over all reoptimization rounds? */
   SCIP_Bool             reopt_enable;       /**< enable reoptimization */
   SCIP_Bool             reopt_reducetofrontier; /**< delete stored nodes which were not reoptimized */
   SCIP_Bool             reopt_saveconsprop; /**< save constraint propagations */
   SCIP_Bool             reopt_sbinit;       /**< try to fix variables before reoptimizing by probing like strong
                                              *   branching
                                              */
   SCIP_Bool             reopt_shrinkinner;  /**< replace branched inner nodes by their child nodes, if the number of
                                              *   bound changes is not to large
                                              */
   SCIP_Bool             reopt_sepaglbinfsubtrees;/**< save global constraints to separate infeasible subtrees */
   SCIP_Bool             reopt_sepabestsol;  /**< separate only the best solution, i.e., for constrained shortest path */
   SCIP_Bool             reopt_storevarhistory;/**< use variable history of the previous solve if the objective function
                                                *   has changed only slightly
                                                */
   SCIP_Bool             reopt_usepscost;    /**< reuse pseudo costs if the objective function changed only slightly */
   SCIP_Bool             reopt_usecuts;      /**< reoptimize cuts found at the root node */
   SCIP_Bool             reopt_usesplitcons; /**< use constraints to reconstruct the subtree pruned be dual reduction
                                              *   when reactivating the node
                                              */

   /* separation settings */
   SCIP_Real             sepa_maxbounddist;  /**< maximal relative distance from current node's dual bound to primal bound
                                              *   compared to best node's dual bound for applying separation
                                              *   (0.0: only on current best node, 1.0: on all nodes) */
   SCIP_Real             sepa_maxlocalbounddist;/**< maximal relative distance from current node's dual bound to primal bound
                                              *   compared to best node's dual bound for applying local separation
                                              *   (0.0: only on current best node, 1.0: on all nodes) */
   SCIP_Real             sepa_maxcoefratio;  /**< maximal ratio between coefficients in strongcg, cmir, and flowcover cuts */
   SCIP_Real             sepa_minefficacy;   /**< minimal efficacy for a cut to enter the LP */
   SCIP_Real             sepa_minefficacyroot; /**< minimal efficacy for a cut to enter the LP in the root node */
   SCIP_Real             sepa_minortho;      /**< minimal orthogonality for a cut to enter the LP */
   SCIP_Real             sepa_minorthoroot;  /**< minimal orthogonality for a cut to enter the LP in the root node */
   SCIP_Real             sepa_efficacyfac;   /**< factor to scale efficacy of cut in score calc. */
   SCIP_Real             sepa_dircutoffdistfac;/**< factor to scale directed cutoff distance of cut in score calc. */
   SCIP_Real             sepa_objparalfac;   /**< factor to scale objective parallelism of cut in score calc. */
   SCIP_Real             sepa_intsupportfac; /**< factor to scale integral support of cut in score calculation */
   SCIP_Real             sepa_minactivityquot; /**< minimum cut activity quotient to convert cuts into constraints
                                                *   during a restart (0.0: all cuts are converted) */
   char                  sepa_orthofunc;     /**< function used for calc. scalar prod. in orthogonality test ('e'uclidean, 'd'iscrete) */
   char                  sepa_efficacynorm;  /**< row norm to use for efficacy calculation ('e'uclidean, 'm'aximum, 's'um,
                                              *   'd'iscrete) */
   char                  sepa_cutselrestart; /**< cut selection during restart ('a'ge, activity 'q'uotient) */
   char                  sepa_cutselsubscip; /**< cut selection for sub SCIPs  ('a'ge, activity 'q'uotient) */
   int                   sepa_maxruns;       /**< maximal number of runs for which separation is enabled (-1: unlimited) */
   int                   sepa_maxrounds;     /**< maximal number of separation rounds per node (-1: unlimited) */
   int                   sepa_maxroundsroot; /**< maximal number of separation rounds in the root node (-1: unlimited) */
   int                   sepa_maxroundsrootsubrun; /**< maximal number of separation rounds in the root node of a subsequent run (-1: unlimited) */
   int                   sepa_maxaddrounds;  /**< maximal additional number of separation rounds in subsequent price-and-cut
                                              *   loops (-1: no additional restriction) */
   int                   sepa_maxstallrounds;/**< maximal number of consecutive separation rounds without objective
                                              *   or integrality improvement (-1: no additional restriction) */
   int                   sepa_maxstallroundsroot;/**< maximal number of consecutive separation rounds without objective
                                              *   or integrality improvement (-1: no additional restriction) */
   int                   sepa_maxcuts;       /**< maximal number of cuts separated per separation round */
   int                   sepa_maxcutsroot;   /**< maximal number of separated cuts at the root node */
   int                   sepa_cutagelimit;   /**< maximum age a cut can reach before it is deleted from the global cut pool */
   int                   sepa_poolfreq;      /**< separation frequency for the global cut pool */

   /* parallel settings */
   int                   parallel_mode;      /**< the mode for the parallel implementation. 0: opportunistic or
                                              *   1: deterministic */
   int                   parallel_minnthreads;/**< the minimum number of threads used for parallel code */
   int                   parallel_maxnthreads;/**< the maximum number of threads used for parallel code */

   /* concurrent solver settings */
   SCIP_Bool             concurrent_changeseeds;    /**< change the seeds in the different solvers? */
   SCIP_Bool             concurrent_changechildsel; /**< change the child selection rule in different solvers? */
   SCIP_Bool             concurrent_commvarbnds;    /**< should the concurrent solvers communicate global variable bound changes? */
   SCIP_Bool             concurrent_presolvebefore; /**< should the problem be presolved before it is copied to the concurrent solvers? */
   int                   concurrent_initseed;       /**< the seed for computing the concurrent solver seeds */
   SCIP_Real             concurrent_freqinit;       /**< initial frequency of synchronization */
   SCIP_Real             concurrent_freqmax;        /**< maximal frequency of synchronization */
   SCIP_Real             concurrent_freqfactor;     /**< factor by which the frequency of synchronization changes */
   SCIP_Real             concurrent_targetprogress; /**< when adapting the synchronization frequency this value is the targeted
                                                     *   relative difference by which the absolute gap decreases per synchronization */
   int                   concurrent_maxnsols;       /**< maximum number of solutions that will get stored in one synchronization */
   int                   concurrent_nbestsols;      /**< number of best solutions that should be considered for synchronization */
   int                   concurrent_maxnsyncdelay;  /**< max number of synchronizations before data is used */
   SCIP_Real             concurrent_minsyncdelay;   /**< min offset before synchronization data is used */
   char*                 concurrent_paramsetprefix; /**< path prefix for parameter setting files of concurrent solver scip-custom */

   /* timing settings */
   SCIP_CLOCKTYPE        time_clocktype;     /**< default clock type to use */
   SCIP_Bool             time_enabled;       /**< is timing enabled? */
   SCIP_Bool             time_reading;       /**< belongs reading time to solving time? */
   SCIP_Bool             time_rareclockcheck;/**< should clock checks of solving time be performed less frequently (might exceed time limit slightly) */
   SCIP_Bool             time_statistictiming;  /**< should timing for statistic output be enabled? */

   /* tree compression parameters (for reoptimization) */
   SCIP_Bool             compr_enable;       /**< should automatic tree compression after presolving be enabled? (only for reoptimization) */
   SCIP_Real             compr_time;         /**< maximum time to run tree compression heuristics */

   /* visualization settings */
   char*                 visual_vbcfilename; /**< name of the VBC tool output file, or - if no VBC output should be created */
   char*                 visual_bakfilename; /**< name of the BAK tool output file, or - if no BAK output should be created */
   SCIP_Bool             visual_realtime;    /**< should the real solving time be used instead of time step counter in visualization? */
   SCIP_Bool             visual_dispsols;    /**< should the node where solutions are found be visualized? */
   SCIP_Bool             visual_displb;      /**< should lower bound information be visualized? */
   SCIP_Bool             visual_objextern;   /**< should be output the external value of the objective? */

   /* Reading */
   SCIP_Bool             read_initialconss;  /**< should model constraints be marked as initial? */
   SCIP_Bool             read_dynamicconss;  /**< should model constraints be subject to aging? */
   SCIP_Bool             read_dynamiccols;   /**< should columns be added and removed dynamically to the LP? */
   SCIP_Bool             read_dynamicrows;   /**< should rows be added and removed dynamically to the LP? */

   /* Writing */
   SCIP_Bool             write_allconss;     /**< should all constraints be written (including the redundant constraints)? */
   SCIP_Bool             write_printzeros;   /**< should variables set to zero be printed? */
   int                   write_genoffset;    /**< when writing the problem with generic names, we start with index
                                              *   0; using this parameter we can change the starting index to be
                                              *   different */
};

#ifdef __cplusplus
}
#endif

#endif