1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 /* */ 3 /* This file is part of the program and library */ 4 /* SCIP --- Solving Constraint Integer Programs */ 5 /* */ 6 /* Copyright (C) 2002-2021 Konrad-Zuse-Zentrum */ 7 /* fuer Informationstechnik Berlin */ 8 /* */ 9 /* SCIP is distributed under the terms of the ZIB Academic License. */ 10 /* */ 11 /* You should have received a copy of the ZIB Academic License */ 12 /* along with SCIP; see the file COPYING. If not visit scipopt.org. */ 13 /* */ 14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 16 /**@file set.h 17 * @ingroup INTERNALAPI 18 * @brief internal methods for global SCIP settings 19 * @author Tobias Achterberg 20 * @author Timo Berthold 21 */ 22 23 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 24 25 #ifndef __SCIP_SET_H__ 26 #define __SCIP_SET_H__ 27 28 29 #include "scip/def.h" 30 #include "blockmemshell/memory.h" 31 #include "scip/type_bandit.h" 32 #include "scip/type_set.h" 33 #include "scip/type_stat.h" 34 #include "scip/type_clock.h" 35 #include "scip/type_paramset.h" 36 #include "scip/type_event.h" 37 #include "scip/type_scip.h" 38 #include "scip/type_branch.h" 39 #include "scip/type_conflict.h" 40 #include "scip/type_cons.h" 41 #include "scip/type_disp.h" 42 #include "scip/type_heur.h" 43 #include "scip/type_compr.h" 44 #include "scip/type_nodesel.h" 45 #include "scip/type_presol.h" 46 #include "scip/type_pricer.h" 47 #include "scip/type_reader.h" 48 #include "scip/type_relax.h" 49 #include "scip/type_sepa.h" 50 #include "scip/type_table.h" 51 #include "scip/type_prop.h" 52 #include "scip/type_benders.h" 53 #include "scip/struct_set.h" 54 55 56 #ifdef NDEBUG 57 #include "scip/pub_misc.h" 58 #endif 59 60 #ifdef __cplusplus 61 extern "C" { 62 #endif 63 64 /** copies plugins from sourcescip to targetscip; in case that a constraint handler which does not need constraints 65 * cannot be copied, valid will return FALSE. All plugins can declare that, if their copy process failed, the 66 * copied SCIP instance might not represent the same problem semantics as the original. 67 * Note that in this case dual reductions might be invalid. */ 68 SCIP_RETCODE SCIPsetCopyPlugins( 69 SCIP_SET* sourceset, /**< source SCIP_SET data structure */ 70 SCIP_SET* targetset, /**< target SCIP_SET data structure */ 71 SCIP_Bool copyreaders, /**< should the file readers be copied */ 72 SCIP_Bool copypricers, /**< should the variable pricers be copied */ 73 SCIP_Bool copyconshdlrs, /**< should the constraint handlers be copied */ 74 SCIP_Bool copyconflicthdlrs, /**< should the conflict handlers be copied */ 75 SCIP_Bool copypresolvers, /**< should the presolvers be copied */ 76 SCIP_Bool copyrelaxators, /**< should the relaxators be copied */ 77 SCIP_Bool copyseparators, /**< should the separators be copied */ 78 SCIP_Bool copypropagators, /**< should the propagators be copied */ 79 SCIP_Bool copyheuristics, /**< should the heuristics be copied */ 80 SCIP_Bool copyeventhdlrs, /**< should the event handlers be copied */ 81 SCIP_Bool copynodeselectors, /**< should the node selectors be copied */ 82 SCIP_Bool copybranchrules, /**< should the branchrules be copied */ 83 SCIP_Bool copydisplays, /**< should the display columns be copied */ 84 SCIP_Bool copydialogs, /**< should the dialogs be copied */ 85 SCIP_Bool copytables, /**< should the statistics tables be copied */ 86 SCIP_Bool copynlpis, /**< should the NLP interfaces be copied */ 87 SCIP_Bool* allvalid /**< pointer to store whether all plugins were validly copied */ 88 ); 89 90 /** copies parameters from sourcescip to targetscip */ 91 SCIP_RETCODE SCIPsetCopyParams( 92 SCIP_SET* sourceset, /**< source SCIP_SET data structure */ 93 SCIP_SET* targetset, /**< target SCIP_SET data structure */ 94 SCIP_MESSAGEHDLR* messagehdlr /**< message handler of target SCIP */ 95 ); 96 97 /** creates global SCIP settings */ 98 SCIP_RETCODE SCIPsetCreate( 99 SCIP_SET** set, /**< pointer to SCIP settings */ 100 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 101 BMS_BLKMEM* blkmem, /**< block memory */ 102 SCIP* scip /**< SCIP data structure */ 103 ); 104 105 /** frees global SCIP settings */ 106 SCIP_RETCODE SCIPsetFree( 107 SCIP_SET** set, /**< pointer to SCIP settings */ 108 BMS_BLKMEM* blkmem /**< block memory */ 109 ); 110 111 /** returns current stage of SCIP */ 112 SCIP_STAGE SCIPsetGetStage( 113 SCIP_SET* set /**< pointer to SCIP settings */ 114 ); 115 116 /** creates a SCIP_Bool parameter, sets it to its default value, and adds it to the parameter set */ 117 SCIP_RETCODE SCIPsetAddBoolParam( 118 SCIP_SET* set, /**< global SCIP settings */ 119 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 120 BMS_BLKMEM* blkmem, /**< block memory */ 121 const char* name, /**< name of the parameter */ 122 const char* desc, /**< description of the parameter */ 123 SCIP_Bool* valueptr, /**< pointer to store the current parameter value, or NULL */ 124 SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */ 125 SCIP_Bool defaultvalue, /**< default value of the parameter */ 126 SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */ 127 SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */ 128 ); 129 130 /** creates a int parameter, sets it to its default value, and adds it to the parameter set */ 131 SCIP_RETCODE SCIPsetAddIntParam( 132 SCIP_SET* set, /**< global SCIP settings */ 133 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 134 BMS_BLKMEM* blkmem, /**< block memory */ 135 const char* name, /**< name of the parameter */ 136 const char* desc, /**< description of the parameter */ 137 int* valueptr, /**< pointer to store the current parameter value, or NULL */ 138 SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */ 139 int defaultvalue, /**< default value of the parameter */ 140 int minvalue, /**< minimum value for parameter */ 141 int maxvalue, /**< maximum value for parameter */ 142 SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */ 143 SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */ 144 ); 145 146 /** creates a SCIP_Longint parameter, sets it to its default value, and adds it to the parameter set */ 147 SCIP_RETCODE SCIPsetAddLongintParam( 148 SCIP_SET* set, /**< global SCIP settings */ 149 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 150 BMS_BLKMEM* blkmem, /**< block memory */ 151 const char* name, /**< name of the parameter */ 152 const char* desc, /**< description of the parameter */ 153 SCIP_Longint* valueptr, /**< pointer to store the current parameter value, or NULL */ 154 SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */ 155 SCIP_Longint defaultvalue, /**< default value of the parameter */ 156 SCIP_Longint minvalue, /**< minimum value for parameter */ 157 SCIP_Longint maxvalue, /**< maximum value for parameter */ 158 SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */ 159 SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */ 160 ); 161 162 /** creates a SCIP_Real parameter, sets it to its default value, and adds it to the parameter set */ 163 SCIP_RETCODE SCIPsetAddRealParam( 164 SCIP_SET* set, /**< global SCIP settings */ 165 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 166 BMS_BLKMEM* blkmem, /**< block memory */ 167 const char* name, /**< name of the parameter */ 168 const char* desc, /**< description of the parameter */ 169 SCIP_Real* valueptr, /**< pointer to store the current parameter value, or NULL */ 170 SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */ 171 SCIP_Real defaultvalue, /**< default value of the parameter */ 172 SCIP_Real minvalue, /**< minimum value for parameter */ 173 SCIP_Real maxvalue, /**< maximum value for parameter */ 174 SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */ 175 SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */ 176 ); 177 178 /** creates a char parameter, sets it to its default value, and adds it to the parameter set */ 179 SCIP_RETCODE SCIPsetAddCharParam( 180 SCIP_SET* set, /**< global SCIP settings */ 181 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 182 BMS_BLKMEM* blkmem, /**< block memory */ 183 const char* name, /**< name of the parameter */ 184 const char* desc, /**< description of the parameter */ 185 char* valueptr, /**< pointer to store the current parameter value, or NULL */ 186 SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */ 187 char defaultvalue, /**< default value of the parameter */ 188 const char* allowedvalues, /**< array with possible parameter values, or NULL if not restricted */ 189 SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */ 190 SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */ 191 ); 192 193 /** creates a string parameter, sets it to its default value, and adds it to the parameter set */ 194 SCIP_RETCODE SCIPsetAddStringParam( 195 SCIP_SET* set, /**< global SCIP settings */ 196 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 197 BMS_BLKMEM* blkmem, /**< block memory */ 198 const char* name, /**< name of the parameter */ 199 const char* desc, /**< description of the parameter */ 200 char** valueptr, /**< pointer to store the current parameter value, or NULL */ 201 SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */ 202 const char* defaultvalue, /**< default value of the parameter */ 203 SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */ 204 SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */ 205 ); 206 207 /** gets the fixing status value of an existing parameter */ 208 SCIP_Bool SCIPsetIsParamFixed( 209 SCIP_SET* set, /**< global SCIP settings */ 210 const char* name /**< name of the parameter */ 211 ); 212 213 /** returns the pointer to the SCIP parameter with the given name */ 214 SCIP_PARAM* SCIPsetGetParam( 215 SCIP_SET* set, /**< global SCIP settings */ 216 const char* name /**< name of the parameter */ 217 ); 218 219 /** gets the value of an existing SCIP_Bool parameter */ 220 SCIP_RETCODE SCIPsetGetBoolParam( 221 SCIP_SET* set, /**< global SCIP settings */ 222 const char* name, /**< name of the parameter */ 223 SCIP_Bool* value /**< pointer to store the parameter */ 224 ); 225 226 /** gets the value of an existing Int parameter */ 227 SCIP_RETCODE SCIPsetGetIntParam( 228 SCIP_SET* set, /**< global SCIP settings */ 229 const char* name, /**< name of the parameter */ 230 int* value /**< pointer to store the parameter */ 231 ); 232 233 /** gets the value of an existing SCIP_Longint parameter */ 234 SCIP_RETCODE SCIPsetGetLongintParam( 235 SCIP_SET* set, /**< global SCIP settings */ 236 const char* name, /**< name of the parameter */ 237 SCIP_Longint* value /**< pointer to store the parameter */ 238 ); 239 240 /** gets the value of an existing SCIP_Real parameter */ 241 SCIP_RETCODE SCIPsetGetRealParam( 242 SCIP_SET* set, /**< global SCIP settings */ 243 const char* name, /**< name of the parameter */ 244 SCIP_Real* value /**< pointer to store the parameter */ 245 ); 246 247 /** gets the value of an existing Char parameter */ 248 SCIP_RETCODE SCIPsetGetCharParam( 249 SCIP_SET* set, /**< global SCIP settings */ 250 const char* name, /**< name of the parameter */ 251 char* value /**< pointer to store the parameter */ 252 ); 253 254 /** gets the value of an existing String parameter */ 255 SCIP_RETCODE SCIPsetGetStringParam( 256 SCIP_SET* set, /**< global SCIP settings */ 257 const char* name, /**< name of the parameter */ 258 char** value /**< pointer to store the parameter */ 259 ); 260 261 /** changes the fixing status of an existing parameter */ 262 SCIP_RETCODE SCIPsetChgParamFixed( 263 SCIP_SET* set, /**< global SCIP settings */ 264 const char* name, /**< name of the parameter */ 265 SCIP_Bool fixed /**< new fixing status of the parameter */ 266 ); 267 268 /** changes the value of an existing parameter */ 269 SCIP_RETCODE SCIPsetSetParam( 270 SCIP_SET* set, /**< global SCIP settings */ 271 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 272 const char* name, /**< name of the parameter */ 273 void* value /**< new value of the parameter */ 274 ); 275 276 /** changes the value of an existing SCIP_Bool parameter */ 277 SCIP_RETCODE SCIPsetChgBoolParam( 278 SCIP_SET* set, /**< global SCIP settings */ 279 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 280 SCIP_PARAM* param, /**< parameter */ 281 SCIP_Bool value /**< new value of the parameter */ 282 ); 283 284 /** changes the value of an existing SCIP_Bool parameter */ 285 SCIP_RETCODE SCIPsetSetBoolParam( 286 SCIP_SET* set, /**< global SCIP settings */ 287 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 288 const char* name, /**< name of the parameter */ 289 SCIP_Bool value /**< new value of the parameter */ 290 ); 291 292 /** changes the default value of an existing SCIP_Bool parameter */ 293 SCIP_RETCODE SCIPsetSetDefaultBoolParam( 294 SCIP_SET* set, /**< global SCIP settings */ 295 const char* name, /**< name of the parameter */ 296 SCIP_Bool defaultvalue /**< new default value of the parameter */ 297 ); 298 299 /** changes the value of an existing Int parameter */ 300 SCIP_RETCODE SCIPsetChgIntParam( 301 SCIP_SET* set, /**< global SCIP settings */ 302 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 303 SCIP_PARAM* param, /**< parameter */ 304 int value /**< new value of the parameter */ 305 ); 306 307 /** changes the value of an existing Int parameter */ 308 SCIP_RETCODE SCIPsetSetIntParam( 309 SCIP_SET* set, /**< global SCIP settings */ 310 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 311 const char* name, /**< name of the parameter */ 312 int value /**< new value of the parameter */ 313 ); 314 315 /** changes the default value of an existing Int parameter */ 316 SCIP_RETCODE SCIPsetSetDefaultIntParam( 317 SCIP_SET* set, /**< global SCIP settings */ 318 const char* name, /**< name of the parameter */ 319 int defaultvalue /**< new default value of the parameter */ 320 ); 321 322 /** changes the value of an existing SCIP_Longint parameter */ 323 SCIP_RETCODE SCIPsetChgLongintParam( 324 SCIP_SET* set, /**< global SCIP settings */ 325 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 326 SCIP_PARAM* param, /**< parameter */ 327 SCIP_Longint value /**< new value of the parameter */ 328 ); 329 330 /** changes the value of an existing SCIP_Longint parameter */ 331 SCIP_RETCODE SCIPsetSetLongintParam( 332 SCIP_SET* set, /**< global SCIP settings */ 333 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 334 const char* name, /**< name of the parameter */ 335 SCIP_Longint value /**< new value of the parameter */ 336 ); 337 338 /** changes the value of an existing SCIP_Real parameter */ 339 SCIP_RETCODE SCIPsetChgRealParam( 340 SCIP_SET* set, /**< global SCIP settings */ 341 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 342 SCIP_PARAM* param, /**< parameter */ 343 SCIP_Real value /**< new value of the parameter */ 344 ); 345 346 /** changes the value of an existing SCIP_Real parameter */ 347 SCIP_RETCODE SCIPsetSetRealParam( 348 SCIP_SET* set, /**< global SCIP settings */ 349 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 350 const char* name, /**< name of the parameter */ 351 SCIP_Real value /**< new value of the parameter */ 352 ); 353 354 /** changes the value of an existing Char parameter */ 355 SCIP_RETCODE SCIPsetChgCharParam( 356 SCIP_SET* set, /**< global SCIP settings */ 357 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 358 SCIP_PARAM* param, /**< parameter */ 359 char value /**< new value of the parameter */ 360 ); 361 362 /** changes the value of an existing Char parameter */ 363 SCIP_RETCODE SCIPsetSetCharParam( 364 SCIP_SET* set, /**< global SCIP settings */ 365 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 366 const char* name, /**< name of the parameter */ 367 char value /**< new value of the parameter */ 368 ); 369 370 /** changes the value of an existing String parameter */ 371 SCIP_RETCODE SCIPsetChgStringParam( 372 SCIP_SET* set, /**< global SCIP settings */ 373 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 374 SCIP_PARAM* param, /**< parameter */ 375 const char* value /**< new value of the parameter */ 376 ); 377 378 /** changes the value of an existing String parameter */ 379 SCIP_RETCODE SCIPsetSetStringParam( 380 SCIP_SET* set, /**< global SCIP settings */ 381 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 382 const char* name, /**< name of the parameter */ 383 const char* value /**< new value of the parameter */ 384 ); 385 386 /** reads parameters from a file */ 387 SCIP_RETCODE SCIPsetReadParams( 388 SCIP_SET* set, /**< global SCIP settings */ 389 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 390 const char* filename /**< file name */ 391 ); 392 393 /** writes all parameters in the parameter set to a file */ 394 SCIP_RETCODE SCIPsetWriteParams( 395 SCIP_SET* set, /**< global SCIP settings */ 396 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 397 const char* filename, /**< file name, or NULL for stdout */ 398 SCIP_Bool comments, /**< should parameter descriptions be written as comments? */ 399 SCIP_Bool onlychanged /**< should only the parameters been written, that are changed from default? */ 400 ); 401 402 /** resets a single parameters to its default value */ 403 SCIP_RETCODE SCIPsetResetParam( 404 SCIP_SET* set, /**< global SCIP settings */ 405 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 406 const char* name /**< name of the parameter */ 407 ); 408 409 /** resets all parameters to their default values */ 410 SCIP_RETCODE SCIPsetResetParams( 411 SCIP_SET* set, /**< global SCIP settings */ 412 SCIP_MESSAGEHDLR* messagehdlr /**< message handler */ 413 ); 414 415 /** sets parameters to 416 * 417 * - \ref SCIP_PARAMEMPHASIS_DEFAULT to use default values (see also SCIPsetResetParams()) 418 * - \ref SCIP_PARAMEMPHASIS_COUNTER to get feasible and "fast" counting process 419 * - \ref SCIP_PARAMEMPHASIS_CPSOLVER to get CP like search (e.g. no LP relaxation) 420 * - \ref SCIP_PARAMEMPHASIS_EASYCIP to solve easy problems fast 421 * - \ref SCIP_PARAMEMPHASIS_FEASIBILITY to detect feasibility fast 422 * - \ref SCIP_PARAMEMPHASIS_HARDLP to be capable to handle hard LPs 423 * - \ref SCIP_PARAMEMPHASIS_OPTIMALITY to prove optimality fast 424 * - \ref SCIP_PARAMEMPHASIS_PHASEFEAS to find feasible solutions during a 3 phase solution process 425 * - \ref SCIP_PARAMEMPHASIS_PHASEIMPROVE to find improved solutions during a 3 phase solution process 426 * - \ref SCIP_PARAMEMPHASIS_PHASEPROOF to proof optimality during a 3 phase solution process 427 */ 428 SCIP_RETCODE SCIPsetSetEmphasis( 429 SCIP_SET* set, /**< global SCIP settings */ 430 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 431 SCIP_PARAMEMPHASIS paramemphasis, /**< parameter settings */ 432 SCIP_Bool quiet /**< should the parameter be set quiet (no output) */ 433 ); 434 435 /** set parameters for reoptimization */ 436 SCIP_RETCODE SCIPsetSetReoptimizationParams( 437 SCIP_SET* set, /**< SCIP data structure */ 438 SCIP_MESSAGEHDLR* messagehdlr /**< message handler */ 439 ); 440 441 /** enable or disable all plugin timers depending on the value of the flag \p enabled */ 442 void SCIPsetEnableOrDisablePluginClocks( 443 SCIP_SET* set, /**< SCIP settings */ 444 SCIP_Bool enabled /**< should plugin clocks be enabled? */ 445 ); 446 447 /** sets parameters to deactivate separators and heuristics that use auxiliary SCIP instances; should be called for 448 * auxiliary SCIP instances to avoid recursion 449 */ 450 SCIP_RETCODE SCIPsetSetSubscipsOff( 451 SCIP_SET* set, /**< global SCIP settings */ 452 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 453 SCIP_Bool quiet /**< should the parameter be set quiet (no output) */ 454 ); 455 456 /** sets heuristic parameters values to 457 * - SCIP_PARAMSETTING_DEFAULT which are the default values of all heuristic parameters 458 * - SCIP_PARAMSETTING_FAST such that the time spend for heuristic is decreased 459 * - SCIP_PARAMSETTING_AGGRESSIVE such that the heuristic are called more aggregative 460 * - SCIP_PARAMSETTING_OFF which turn off all heuristics 461 */ 462 SCIP_RETCODE SCIPsetSetHeuristics( 463 SCIP_SET* set, /**< global SCIP settings */ 464 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 465 SCIP_PARAMSETTING paramsetting, /**< parameter settings */ 466 SCIP_Bool quiet /**< should the parameter be set quiet (no output) */ 467 ); 468 469 /** sets presolving parameters to 470 * - SCIP_PARAMSETTING_DEFAULT which are the default values of all presolving parameters 471 * - SCIP_PARAMSETTING_FAST such that the time spend for presolving is decreased 472 * - SCIP_PARAMSETTING_AGGRESSIVE such that the presolving is more aggregative 473 * - SCIP_PARAMSETTING_OFF which turn off all presolving 474 */ 475 SCIP_RETCODE SCIPsetSetPresolving( 476 SCIP_SET* set, /**< global SCIP settings */ 477 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 478 SCIP_PARAMSETTING paramsetting, /**< parameter settings */ 479 SCIP_Bool quiet /**< should the parameter be set quiet (no output) */ 480 ); 481 482 /** sets separating parameters to 483 * - SCIP_PARAMSETTING_DEFAULT which are the default values of all separating parameters 484 * - SCIP_PARAMSETTING_FAST such that the time spend for separating is decreased 485 * - SCIP_PARAMSETTING_AGGRESSIVE such that the separating is done more aggregative 486 * - SCIP_PARAMSETTING_OFF which turn off all separating 487 */ 488 SCIP_RETCODE SCIPsetSetSeparating( 489 SCIP_SET* set, /**< global SCIP settings */ 490 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */ 491 SCIP_PARAMSETTING paramsetting, /**< parameter settings */ 492 SCIP_Bool quiet /**< should the parameter be set quiet (no output) */ 493 ); 494 495 /** returns the array of all available SCIP parameters */ 496 SCIP_PARAM** SCIPsetGetParams( 497 SCIP_SET* set /**< global SCIP settings */ 498 ); 499 500 /** returns the total number of all available SCIP parameters */ 501 int SCIPsetGetNParams( 502 SCIP_SET* set /**< global SCIP settings */ 503 ); 504 505 /** inserts file reader in file reader list */ 506 SCIP_RETCODE SCIPsetIncludeReader( 507 SCIP_SET* set, /**< global SCIP settings */ 508 SCIP_READER* reader /**< file reader */ 509 ); 510 511 /** returns the file reader of the given name, or NULL if not existing */ 512 SCIP_READER* SCIPsetFindReader( 513 SCIP_SET* set, /**< global SCIP settings */ 514 const char* name /**< name of file reader */ 515 ); 516 517 /** inserts variable pricer in variable pricer list */ 518 SCIP_RETCODE SCIPsetIncludePricer( 519 SCIP_SET* set, /**< global SCIP settings */ 520 SCIP_PRICER* pricer /**< variable pricer */ 521 ); 522 523 /** returns the variable pricer of the given name, or NULL if not existing */ 524 SCIP_PRICER* SCIPsetFindPricer( 525 SCIP_SET* set, /**< global SCIP settings */ 526 const char* name /**< name of variable pricer */ 527 ); 528 529 /** sorts pricers by priorities */ 530 void SCIPsetSortPricers( 531 SCIP_SET* set /**< global SCIP settings */ 532 ); 533 534 /** sorts pricers by name */ 535 void SCIPsetSortPricersName( 536 SCIP_SET* set /**< global SCIP settings */ 537 ); 538 539 /** inserts Benders' decomposition into the Benders' decomposition list */ 540 SCIP_RETCODE SCIPsetIncludeBenders( 541 SCIP_SET* set, /**< global SCIP settings */ 542 SCIP_BENDERS* benders /**< Benders' decomposition */ 543 ); 544 545 /** returns the Benders' decomposition of the given name, or NULL if not existing */ 546 SCIP_BENDERS* SCIPsetFindBenders( 547 SCIP_SET* set, /**< global SCIP settings */ 548 const char* name /**< name of Benders' decomposition */ 549 ); 550 551 /** sorts Benders' decomposition by priorities */ 552 void SCIPsetSortBenders( 553 SCIP_SET* set /**< global SCIP settings */ 554 ); 555 556 /** sorts Benders' decomposition by name */ 557 void SCIPsetSortBendersName( 558 SCIP_SET* set /**< global SCIP settings */ 559 ); 560 561 /** inserts constraint handler in constraint handler list */ 562 SCIP_RETCODE SCIPsetIncludeConshdlr( 563 SCIP_SET* set, /**< global SCIP settings */ 564 SCIP_CONSHDLR* conshdlr /**< constraint handler */ 565 ); 566 567 /** reinserts a constraint handler with modified sepa priority into the sepa priority sorted array */ 568 void SCIPsetReinsertConshdlrSepaPrio( 569 SCIP_SET* set, /**< global SCIP settings */ 570 SCIP_CONSHDLR* conshdlr, /**< constraint handler to be reinserted */ 571 int oldpriority /**< the old separation priority of constraint handler */ 572 ); 573 574 /** returns the constraint handler of the given name, or NULL if not existing */ 575 SCIP_CONSHDLR* SCIPsetFindConshdlr( 576 SCIP_SET* set, /**< global SCIP settings */ 577 const char* name /**< name of constraint handler */ 578 ); 579 580 /** inserts conflict handler in conflict handler list */ 581 SCIP_RETCODE SCIPsetIncludeConflicthdlr( 582 SCIP_SET* set, /**< global SCIP settings */ 583 SCIP_CONFLICTHDLR* conflicthdlr /**< conflict handler */ 584 ); 585 586 /** returns the conflict handler of the given name, or NULL if not existing */ 587 SCIP_CONFLICTHDLR* SCIPsetFindConflicthdlr( 588 SCIP_SET* set, /**< global SCIP settings */ 589 const char* name /**< name of conflict handler */ 590 ); 591 592 /** sorts conflict handlers by priorities */ 593 void SCIPsetSortConflicthdlrs( 594 SCIP_SET* set /**< global SCIP settings */ 595 ); 596 597 /** sorts conflict handlers by name */ 598 void SCIPsetSortConflicthdlrsName( 599 SCIP_SET* set /**< global SCIP settings */ 600 ); 601 602 /** inserts presolver in presolver list */ 603 SCIP_RETCODE SCIPsetIncludePresol( 604 SCIP_SET* set, /**< global SCIP settings */ 605 SCIP_PRESOL* presol /**< presolver */ 606 ); 607 608 /** returns the presolver of the given name, or NULL if not existing */ 609 SCIP_PRESOL* SCIPsetFindPresol( 610 SCIP_SET* set, /**< global SCIP settings */ 611 const char* name /**< name of presolver */ 612 ); 613 614 /** sorts presolvers by priorities */ 615 void SCIPsetSortPresols( 616 SCIP_SET* set /**< global SCIP settings */ 617 ); 618 619 /** sorts presolvers by name */ 620 void SCIPsetSortPresolsName( 621 SCIP_SET* set /**< global SCIP settings */ 622 ); 623 624 /** inserts relaxator in relaxator list */ 625 SCIP_RETCODE SCIPsetIncludeRelax( 626 SCIP_SET* set, /**< global SCIP settings */ 627 SCIP_RELAX* relax /**< relaxator */ 628 ); 629 630 /** returns the relaxator of the given name, or NULL if not existing */ 631 SCIP_RELAX* SCIPsetFindRelax( 632 SCIP_SET* set, /**< global SCIP settings */ 633 const char* name /**< name of relaxator */ 634 ); 635 636 /** sorts relaxators by priorities */ 637 void SCIPsetSortRelaxs( 638 SCIP_SET* set /**< global SCIP settings */ 639 ); 640 641 /** sorts relaxators by name */ 642 void SCIPsetSortRelaxsName( 643 SCIP_SET* set /**< global SCIP settings */ 644 ); 645 646 /** inserts separator in separator list */ 647 SCIP_RETCODE SCIPsetIncludeSepa( 648 SCIP_SET* set, /**< global SCIP settings */ 649 SCIP_SEPA* sepa /**< separator */ 650 ); 651 652 /** returns the separator of the given name, or NULL if not existing */ 653 SCIP_SEPA* SCIPsetFindSepa( 654 SCIP_SET* set, /**< global SCIP settings */ 655 const char* name /**< name of separator */ 656 ); 657 658 /** sorts separators by priorities */ 659 void SCIPsetSortSepas( 660 SCIP_SET* set /**< global SCIP settings */ 661 ); 662 663 /** sorts separators by name */ 664 void SCIPsetSortSepasName( 665 SCIP_SET* set /**< global SCIP settings */ 666 ); 667 668 /** inserts propagator in propagator list */ 669 SCIP_RETCODE SCIPsetIncludeProp( 670 SCIP_SET* set, /**< global SCIP settings */ 671 SCIP_PROP* prop /**< propagator */ 672 ); 673 674 /** returns the propagator of the given name, or NULL if not existing */ 675 SCIP_PROP* SCIPsetFindProp( 676 SCIP_SET* set, /**< global SCIP settings */ 677 const char* name /**< name of propagator */ 678 ); 679 680 /** sorts propagators by priorities */ 681 void SCIPsetSortProps( 682 SCIP_SET* set /**< global SCIP settings */ 683 ); 684 685 /** sorts propagators by priorities for presolving */ 686 void SCIPsetSortPropsPresol( 687 SCIP_SET* set /**< global SCIP settings */ 688 ); 689 690 /** sorts propagators w.r.t. names */ 691 void SCIPsetSortPropsName( 692 SCIP_SET* set /**< global SCIP settings */ 693 ); 694 695 /** inserts concurrent solver type into the concurrent solver type list */ 696 SCIP_RETCODE SCIPsetIncludeConcsolverType( 697 SCIP_SET* set, /**< global SCIP settings */ 698 SCIP_CONCSOLVERTYPE* concsolvertype /**< concurrent solver type */ 699 ); 700 701 /** returns the concurrent solver type with the given name, or NULL if not existing */ 702 SCIP_CONCSOLVERTYPE* SCIPsetFindConcsolverType( 703 SCIP_SET* set, /**< global SCIP settings */ 704 const char* name /**< name of concurrent solver type */ 705 ); 706 707 /** inserts concurrent solver into the concurrent solver list */ 708 SCIP_RETCODE SCIPsetIncludeConcsolver( 709 SCIP_SET* set, /**< global SCIP settings */ 710 SCIP_CONCSOLVER* concsolver /**< concurrent solver */ 711 ); 712 713 /** frees all concurrent solvers in the concurrent solver list */ 714 SCIP_RETCODE SCIPsetFreeConcsolvers( 715 SCIP_SET* set /**< global SCIP settings */ 716 ); 717 718 /** inserts primal heuristic in primal heuristic list */ 719 SCIP_RETCODE SCIPsetIncludeHeur( 720 SCIP_SET* set, /**< global SCIP settings */ 721 SCIP_HEUR* heur /**< primal heuristic */ 722 ); 723 724 /** returns the primal heuristic of the given name, or NULL if not existing */ 725 SCIP_HEUR* SCIPsetFindHeur( 726 SCIP_SET* set, /**< global SCIP settings */ 727 const char* name /**< name of primal heuristic */ 728 ); 729 730 /** sorts heuristics by priorities */ 731 void SCIPsetSortHeurs( 732 SCIP_SET* set /**< global SCIP settings */ 733 ); 734 735 /** sorts heuristics by name */ 736 void SCIPsetSortHeursName( 737 SCIP_SET* set /**< global SCIP settings */ 738 ); 739 740 /** inserts tree compression in tree compression list */ 741 SCIP_RETCODE SCIPsetIncludeCompr( 742 SCIP_SET* set, /**< global SCIP settings */ 743 SCIP_COMPR* compr /**< tree compression */ 744 ); 745 746 /** returns the tree compression of the given name, or NULL if not existing */ 747 SCIP_COMPR* SCIPsetFindCompr( 748 SCIP_SET* set, /**< global SCIP settings */ 749 const char* name /**< name of tree compression */ 750 ); 751 752 /** sorts compressions by priorities */ 753 void SCIPsetSortComprs( 754 SCIP_SET* set /**< global SCIP settings */ 755 ); 756 757 /** sorts heuristics by names */ 758 void SCIPsetSortComprsName( 759 SCIP_SET* set /**< global SCIP settings */ 760 ); 761 762 /** inserts event handler in event handler list */ 763 SCIP_RETCODE SCIPsetIncludeEventhdlr( 764 SCIP_SET* set, /**< global SCIP settings */ 765 SCIP_EVENTHDLR* eventhdlr /**< event handler */ 766 ); 767 768 /** returns the event handler of the given name, or NULL if not existing */ 769 SCIP_EVENTHDLR* SCIPsetFindEventhdlr( 770 SCIP_SET* set, /**< global SCIP settings */ 771 const char* name /**< name of event handler */ 772 ); 773 774 /** inserts node selector in node selector list */ 775 SCIP_RETCODE SCIPsetIncludeNodesel( 776 SCIP_SET* set, /**< global SCIP settings */ 777 SCIP_NODESEL* nodesel /**< node selector */ 778 ); 779 780 /** returns the node selector of the given name, or NULL if not existing */ 781 SCIP_NODESEL* SCIPsetFindNodesel( 782 SCIP_SET* set, /**< global SCIP settings */ 783 const char* name /**< name of event handler */ 784 ); 785 786 /** returns node selector with highest priority in the current mode */ 787 SCIP_NODESEL* SCIPsetGetNodesel( 788 SCIP_SET* set, /**< global SCIP settings */ 789 SCIP_STAT* stat /**< dynamic problem statistics */ 790 ); 791 792 /** inserts branching rule in branching rule list */ 793 SCIP_RETCODE SCIPsetIncludeBranchrule( 794 SCIP_SET* set, /**< global SCIP settings */ 795 SCIP_BRANCHRULE* branchrule /**< branching rule */ 796 ); 797 798 /** returns the branching rule of the given name, or NULL if not existing */ 799 SCIP_BRANCHRULE* SCIPsetFindBranchrule( 800 SCIP_SET* set, /**< global SCIP settings */ 801 const char* name /**< name of event handler */ 802 ); 803 804 /** sorts branching rules by priorities */ 805 void SCIPsetSortBranchrules( 806 SCIP_SET* set /**< global SCIP settings */ 807 ); 808 809 /** sorts branching rules by name */ 810 void SCIPsetSortBranchrulesName( 811 SCIP_SET* set /**< global SCIP settings */ 812 ); 813 814 /** inserts display column in display column list */ 815 SCIP_RETCODE SCIPsetIncludeDisp( 816 SCIP_SET* set, /**< global SCIP settings */ 817 SCIP_DISP* disp /**< display column */ 818 ); 819 820 /** returns the display column of the given name, or NULL if not existing */ 821 SCIP_DISP* SCIPsetFindDisp( 822 SCIP_SET* set, /**< global SCIP settings */ 823 const char* name /**< name of display */ 824 ); 825 826 /** inserts statistics table in statistics table list */ 827 SCIP_RETCODE SCIPsetIncludeTable( 828 SCIP_SET* set, /**< global SCIP settings */ 829 SCIP_TABLE* table /**< statistics table */ 830 ); 831 832 /** returns the statistics table of the given name, or NULL if not existing */ 833 SCIP_TABLE* SCIPsetFindTable( 834 SCIP_SET* set, /**< global SCIP settings */ 835 const char* name /**< name of statistics table */ 836 ); 837 838 /** inserts dialog in dialog list */ 839 SCIP_RETCODE SCIPsetIncludeDialog( 840 SCIP_SET* set, /**< global SCIP settings */ 841 SCIP_DIALOG* dialog /**< dialog */ 842 ); 843 844 /** returns if the dialog already exists */ 845 SCIP_Bool SCIPsetExistsDialog( 846 SCIP_SET* set, /**< global SCIP settings */ 847 SCIP_DIALOG* dialog /**< dialog */ 848 ); 849 850 /** inserts NLPI in NLPI list */ 851 SCIP_RETCODE SCIPsetIncludeNlpi( 852 SCIP_SET* set, /**< global SCIP settings */ 853 SCIP_NLPI* nlpi /**< NLPI */ 854 ); 855 856 /** returns the NLPI of the given name, or NULL if not existing */ 857 SCIP_NLPI* SCIPsetFindNlpi( 858 SCIP_SET* set, /**< global SCIP settings */ 859 const char* name /**< name of NLPI */ 860 ); 861 862 /** sorts NLPIs by priorities */ 863 void SCIPsetSortNlpis( 864 SCIP_SET* set /**< global SCIP settings */ 865 ); 866 867 /** set priority of an NLPI */ 868 void SCIPsetSetPriorityNlpi( 869 SCIP_SET* set, /**< global SCIP settings */ 870 SCIP_NLPI* nlpi, /**< NLPI */ 871 int priority /**< new priority of NLPI */ 872 ); 873 874 /** inserts information about an external code in external codes list */ 875 SCIP_RETCODE SCIPsetIncludeExternalCode( 876 SCIP_SET* set, /**< global SCIP settings */ 877 const char* name, /**< name of external code */ 878 const char* description /**< description of external code, can be NULL */ 879 ); 880 881 /** inserts bandit virtual function table into set */ 882 SCIP_RETCODE SCIPsetIncludeBanditvtable( 883 SCIP_SET* set, /**< global SCIP settings */ 884 SCIP_BANDITVTABLE* banditvtable /**< bandit algorithm virtual function table */ 885 ); 886 887 /** returns the bandit virtual function table of the given name, or NULL if not existing */ 888 SCIP_BANDITVTABLE* SCIPsetFindBanditvtable( 889 SCIP_SET* set, /**< global SCIP settings */ 890 const char* name /**< name of bandit algorithm virtual function table */ 891 ); 892 893 /** calls init methods of all plugins */ 894 SCIP_RETCODE SCIPsetInitPlugins( 895 SCIP_SET* set, /**< global SCIP settings */ 896 BMS_BLKMEM* blkmem, /**< block memory */ 897 SCIP_STAT* stat /**< dynamic problem statistics */ 898 ); 899 900 /** calls exit methods of all plugins */ 901 SCIP_RETCODE SCIPsetExitPlugins( 902 SCIP_SET* set, /**< global SCIP settings */ 903 BMS_BLKMEM* blkmem, /**< block memory */ 904 SCIP_STAT* stat /**< dynamic problem statistics */ 905 ); 906 907 /** calls initpre methods of all plugins */ 908 SCIP_RETCODE SCIPsetInitprePlugins( 909 SCIP_SET* set, /**< global SCIP settings */ 910 BMS_BLKMEM* blkmem, /**< block memory */ 911 SCIP_STAT* stat /**< dynamic problem statistics */ 912 ); 913 914 /** calls exitpre methods of all plugins */ 915 SCIP_RETCODE SCIPsetExitprePlugins( 916 SCIP_SET* set, /**< global SCIP settings */ 917 BMS_BLKMEM* blkmem, /**< block memory */ 918 SCIP_STAT* stat /**< dynamic problem statistics */ 919 ); 920 921 /** calls initsol methods of all plugins */ 922 SCIP_RETCODE SCIPsetInitsolPlugins( 923 SCIP_SET* set, /**< global SCIP settings */ 924 BMS_BLKMEM* blkmem, /**< block memory */ 925 SCIP_STAT* stat /**< dynamic problem statistics */ 926 ); 927 928 /** calls exitsol methods of all plugins */ 929 SCIP_RETCODE SCIPsetExitsolPlugins( 930 SCIP_SET* set, /**< global SCIP settings */ 931 BMS_BLKMEM* blkmem, /**< block memory */ 932 SCIP_STAT* stat, /**< dynamic problem statistics */ 933 SCIP_Bool restart /**< was this exit solve call triggered by a restart? */ 934 ); 935 936 /** calculate memory size for dynamically allocated arrays */ 937 int SCIPsetCalcMemGrowSize( 938 SCIP_SET* set, /**< global SCIP settings */ 939 int num /**< minimum number of entries to store */ 940 ); 941 942 /** calculate memory size for tree array */ 943 int SCIPsetCalcTreeGrowSize( 944 SCIP_SET* set, /**< global SCIP settings */ 945 int num /**< minimum number of entries to store */ 946 ); 947 948 /** calculate memory size for path array */ 949 int SCIPsetCalcPathGrowSize( 950 SCIP_SET* set, /**< global SCIP settings */ 951 int num /**< minimum number of entries to store */ 952 ); 953 954 /** sets verbosity level for message output */ 955 SCIP_RETCODE SCIPsetSetVerbLevel( 956 SCIP_SET* set, /**< global SCIP settings */ 957 SCIP_VERBLEVEL verblevel /**< verbosity level for message output */ 958 ); 959 960 /** sets feasibility tolerance */ 961 SCIP_RETCODE SCIPsetSetFeastol( 962 SCIP_SET* set, /**< global SCIP settings */ 963 SCIP_LP* lp, /**< LP data, or NULL */ 964 SCIP_Real feastol /**< new feasibility tolerance */ 965 ); 966 967 /** sets feasibility tolerance for reduced costs in LP solution */ 968 SCIP_RETCODE SCIPsetSetDualfeastol( 969 SCIP_SET* set, /**< global SCIP settings */ 970 SCIP_Real dualfeastol /**< new reduced costs feasibility tolerance */ 971 ); 972 973 /** sets LP convergence tolerance used in barrier algorithm */ 974 SCIP_RETCODE SCIPsetSetBarrierconvtol( 975 SCIP_SET* set, /**< global SCIP settings */ 976 SCIP_Real barrierconvtol /**< new convergence tolerance used in barrier algorithm */ 977 ); 978 979 /** sets primal feasibility tolerance for relaxations (relaxfeastol) 980 * 981 * @note Set to SCIP_INVALID to apply relaxation-specific feasibility tolerance only. 982 * 983 * @return Previous value of relaxfeastol. 984 */ 985 SCIP_Real SCIPsetSetRelaxfeastol( 986 SCIP_SET* set, /**< global SCIP settings */ 987 SCIP_Real relaxfeastol /**< new primal feasibility tolerance for relaxations, or SCIP_INVALID */ 988 ); 989 990 /** marks that some limit parameter was changed */ 991 void SCIPsetSetLimitChanged( 992 SCIP_SET* set /**< global SCIP settings */ 993 ); 994 995 /** returns the maximal number of variables priced into the LP per round */ 996 int SCIPsetGetPriceMaxvars( 997 SCIP_SET* set, /**< global SCIP settings */ 998 SCIP_Bool root /**< are we at the root node? */ 999 ); 1000 1001 /** returns the maximal number of cuts separated per round */ 1002 int SCIPsetGetSepaMaxcuts( 1003 SCIP_SET* set, /**< global SCIP settings */ 1004 SCIP_Bool root /**< are we at the root node? */ 1005 ); 1006 1007 /** returns user defined objective value (in original space) for reference purposes */ 1008 SCIP_Real SCIPsetGetReferencevalue( 1009 SCIP_SET* set /**< global SCIP settings */ 1010 ); 1011 1012 /** returns debug solution data */ 1013 SCIP_DEBUGSOLDATA* SCIPsetGetDebugSolData( 1014 SCIP_SET* set /**< global SCIP settings */ 1015 ); 1016 1017 /** Checks, if an iteratively updated value is reliable or should be recomputed from scratch. 1018 * This is useful, if the value, e.g., the activity of a linear constraint or the pseudo objective value, gets a high 1019 * absolute value during the optimization process which is later reduced significantly. In this case, the last digits 1020 * were cancelled out when increasing the value and are random after decreasing it. 1021 * We dot not consider the cancellations which can occur during increasing the absolute value because they just cannot 1022 * be expressed using fixed precision floating point arithmetic, anymore. 1023 * The idea to get more reliable values is to always store the last reliable value, where increasing the absolute of 1024 * the value is viewed as preserving reliability. Then, after each update, the new absolute value can be compared 1025 * against the last reliable one with this method, checking whether it was decreased by a factor of at least 1026 * "lp/recompfac" and should be recomputed. 1027 */ 1028 SCIP_Bool SCIPsetIsUpdateUnreliable( 1029 SCIP_SET* set, /**< global SCIP settings */ 1030 SCIP_Real newvalue, /**< new value after update */ 1031 SCIP_Real oldvalue /**< old value, i.e., last reliable value */ 1032 ); 1033 1034 /** modifies an initial seed value with the global shift of random seeds */ 1035 unsigned int SCIPsetInitializeRandomSeed( 1036 SCIP_SET* set, /**< global SCIP settings */ 1037 unsigned int initialseedvalue /**< initial seed value to be modified */ 1038 ); 1039 1040 /** returns value treated as infinity */ 1041 SCIP_Real SCIPsetInfinity( 1042 SCIP_SET* set /**< global SCIP settings */ 1043 ); 1044 1045 /** returns the minimum value that is regarded as huge and should be handled separately (e.g., in activity 1046 * computation) 1047 */ 1048 SCIP_Real SCIPsetGetHugeValue( 1049 SCIP_SET* set /**< global SCIP settings */ 1050 ); 1051 1052 /** returns value treated as zero */ 1053 SCIP_Real SCIPsetEpsilon( 1054 SCIP_SET* set /**< global SCIP settings */ 1055 ); 1056 1057 /** returns value treated as zero for sums of floating point values */ 1058 SCIP_Real SCIPsetSumepsilon( 1059 SCIP_SET* set /**< global SCIP settings */ 1060 ); 1061 1062 /** returns feasibility tolerance for constraints */ 1063 SCIP_Real SCIPsetFeastol( 1064 SCIP_SET* set /**< global SCIP settings */ 1065 ); 1066 1067 /** returns factor w.r.t. primal feasibility tolerance that determines default (and maximal) feasibility tolerance */ 1068 SCIP_Real SCIPsetLPFeastolFactor( 1069 SCIP_SET* set /**< global SCIP settings */ 1070 ); 1071 1072 /** returns feasibility tolerance for reduced costs */ 1073 SCIP_Real SCIPsetDualfeastol( 1074 SCIP_SET* set /**< global SCIP settings */ 1075 ); 1076 1077 /** returns convergence tolerance used in barrier algorithm */ 1078 SCIP_Real SCIPsetBarrierconvtol( 1079 SCIP_SET* set /**< global SCIP settings */ 1080 ); 1081 1082 /** returns minimal variable distance value to use for pseudo cost updates */ 1083 SCIP_Real SCIPsetPseudocosteps( 1084 SCIP_SET* set /**< global SCIP settings */ 1085 ); 1086 1087 /** returns minimal minimal objective distance value to use for pseudo cost updates */ 1088 SCIP_Real SCIPsetPseudocostdelta( 1089 SCIP_SET* set /**< global SCIP settings */ 1090 ); 1091 1092 /** return the delta to use for computing the cutoff bound for integral objectives */ 1093 SCIP_Real SCIPsetCutoffbounddelta( 1094 SCIP_SET* set /**< global SCIP settings */ 1095 ); 1096 1097 /** return the primal feasibility tolerance for relaxations */ 1098 SCIP_Real SCIPsetRelaxfeastol( 1099 SCIP_SET* set /**< global SCIP settings */ 1100 ); 1101 1102 /** returns minimal decrease factor that causes the recomputation of a value 1103 * (e.g., pseudo objective) instead of an update */ 1104 SCIP_Real SCIPsetRecompfac( 1105 SCIP_SET* set /**< global SCIP settings */ 1106 ); 1107 1108 /** checks, if values are in range of epsilon */ 1109 SCIP_Bool SCIPsetIsEQ( 1110 SCIP_SET* set, /**< global SCIP settings */ 1111 SCIP_Real val1, /**< first value to be compared */ 1112 SCIP_Real val2 /**< second value to be compared */ 1113 ); 1114 1115 /** checks, if val1 is (more than epsilon) lower than val2 */ 1116 SCIP_Bool SCIPsetIsLT( 1117 SCIP_SET* set, /**< global SCIP settings */ 1118 SCIP_Real val1, /**< first value to be compared */ 1119 SCIP_Real val2 /**< second value to be compared */ 1120 ); 1121 1122 /** checks, if val1 is not (more than epsilon) greater than val2 */ 1123 SCIP_Bool SCIPsetIsLE( 1124 SCIP_SET* set, /**< global SCIP settings */ 1125 SCIP_Real val1, /**< first value to be compared */ 1126 SCIP_Real val2 /**< second value to be compared */ 1127 ); 1128 1129 /** checks, if val1 is (more than epsilon) greater than val2 */ 1130 SCIP_Bool SCIPsetIsGT( 1131 SCIP_SET* set, /**< global SCIP settings */ 1132 SCIP_Real val1, /**< first value to be compared */ 1133 SCIP_Real val2 /**< second value to be compared */ 1134 ); 1135 1136 /** checks, if val1 is not (more than epsilon) lower than val2 */ 1137 SCIP_Bool SCIPsetIsGE( 1138 SCIP_SET* set, /**< global SCIP settings */ 1139 SCIP_Real val1, /**< first value to be compared */ 1140 SCIP_Real val2 /**< second value to be compared */ 1141 ); 1142 1143 /** checks, if value is (positive) infinite */ 1144 SCIP_Bool SCIPsetIsInfinity( 1145 SCIP_SET* set, /**< global SCIP settings */ 1146 SCIP_Real val /**< value to be compared against infinity */ 1147 ); 1148 1149 /** checks, if value is huge and should be handled separately (e.g., in activity computation) */ 1150 SCIP_Bool SCIPsetIsHugeValue( 1151 SCIP_SET* set, /**< global SCIP settings */ 1152 SCIP_Real val /**< value to be checked whether it is huge */ 1153 ); 1154 1155 /** checks, if value is in range epsilon of 0.0 */ 1156 SCIP_Bool SCIPsetIsZero( 1157 SCIP_SET* set, /**< global SCIP settings */ 1158 SCIP_Real val /**< value to be compared against zero */ 1159 ); 1160 1161 /** checks, if value is greater than epsilon */ 1162 SCIP_Bool SCIPsetIsPositive( 1163 SCIP_SET* set, /**< global SCIP settings */ 1164 SCIP_Real val /**< value to be compared against zero */ 1165 ); 1166 1167 /** checks, if value is lower than -epsilon */ 1168 SCIP_Bool SCIPsetIsNegative( 1169 SCIP_SET* set, /**< global SCIP settings */ 1170 SCIP_Real val /**< value to be compared against zero */ 1171 ); 1172 1173 /** checks, if value is integral within epsilon */ 1174 SCIP_Bool SCIPsetIsIntegral( 1175 SCIP_SET* set, /**< global SCIP settings */ 1176 SCIP_Real val /**< value to be compared against zero */ 1177 ); 1178 1179 /** checks whether the product val * scalar is integral in epsilon scaled by scalar */ 1180 SCIP_Bool SCIPsetIsScalingIntegral( 1181 SCIP_SET* set, /**< global SCIP settings */ 1182 SCIP_Real val, /**< unscaled value to check for scaled integrality */ 1183 SCIP_Real scalar /**< value to scale val with for checking for integrality */ 1184 ); 1185 1186 /** checks, if given fractional part is smaller than epsilon */ 1187 SCIP_Bool SCIPsetIsFracIntegral( 1188 SCIP_SET* set, /**< global SCIP settings */ 1189 SCIP_Real val /**< value to be compared against zero */ 1190 ); 1191 1192 /** rounds value + feasibility tolerance down to the next integer in epsilon tolerance */ 1193 SCIP_Real SCIPsetFloor( 1194 SCIP_SET* set, /**< global SCIP settings */ 1195 SCIP_Real val /**< value to be compared against zero */ 1196 ); 1197 1198 /** rounds value - feasibility tolerance up to the next integer in epsilon tolerance */ 1199 SCIP_Real SCIPsetCeil( 1200 SCIP_SET* set, /**< global SCIP settings */ 1201 SCIP_Real val /**< value to be compared against zero */ 1202 ); 1203 1204 /** rounds value to the nearest integer in epsilon tolerance */ 1205 SCIP_Real SCIPsetRound( 1206 SCIP_SET* set, /**< global SCIP settings */ 1207 SCIP_Real val /**< value to be compared against zero */ 1208 ); 1209 1210 /** returns fractional part of value, i.e. x - floor(x) in epsilon tolerance */ 1211 SCIP_Real SCIPsetFrac( 1212 SCIP_SET* set, /**< global SCIP settings */ 1213 SCIP_Real val /**< value to return fractional part for */ 1214 ); 1215 1216 /** checks, if values are in range of sumepsilon */ 1217 SCIP_Bool SCIPsetIsSumEQ( 1218 SCIP_SET* set, /**< global SCIP settings */ 1219 SCIP_Real val1, /**< first value to be compared */ 1220 SCIP_Real val2 /**< second value to be compared */ 1221 ); 1222 1223 /** checks, if val1 is (more than sumepsilon) lower than val2 */ 1224 SCIP_Bool SCIPsetIsSumLT( 1225 SCIP_SET* set, /**< global SCIP settings */ 1226 SCIP_Real val1, /**< first value to be compared */ 1227 SCIP_Real val2 /**< second value to be compared */ 1228 ); 1229 1230 /** checks, if val1 is not (more than sumepsilon) greater than val2 */ 1231 SCIP_Bool SCIPsetIsSumLE( 1232 SCIP_SET* set, /**< global SCIP settings */ 1233 SCIP_Real val1, /**< first value to be compared */ 1234 SCIP_Real val2 /**< second value to be compared */ 1235 ); 1236 1237 /** checks, if val1 is (more than sumepsilon) greater than val2 */ 1238 SCIP_Bool SCIPsetIsSumGT( 1239 SCIP_SET* set, /**< global SCIP settings */ 1240 SCIP_Real val1, /**< first value to be compared */ 1241 SCIP_Real val2 /**< second value to be compared */ 1242 ); 1243 1244 /** checks, if val1 is not (more than sumepsilon) lower than val2 */ 1245 SCIP_Bool SCIPsetIsSumGE( 1246 SCIP_SET* set, /**< global SCIP settings */ 1247 SCIP_Real val1, /**< first value to be compared */ 1248 SCIP_Real val2 /**< second value to be compared */ 1249 ); 1250 1251 /** checks, if value is in range sumepsilon of 0.0 */ 1252 SCIP_Bool SCIPsetIsSumZero( 1253 SCIP_SET* set, /**< global SCIP settings */ 1254 SCIP_Real val /**< value to be compared against zero */ 1255 ); 1256 1257 /** checks, if value is greater than sumepsilon */ 1258 SCIP_Bool SCIPsetIsSumPositive( 1259 SCIP_SET* set, /**< global SCIP settings */ 1260 SCIP_Real val /**< value to be compared against zero */ 1261 ); 1262 1263 /** checks, if value is lower than -sumepsilon */ 1264 SCIP_Bool SCIPsetIsSumNegative( 1265 SCIP_SET* set, /**< global SCIP settings */ 1266 SCIP_Real val /**< value to be compared against zero */ 1267 ); 1268 1269 /** rounds value + sumepsilon tolerance down to the next integer */ 1270 SCIP_Real SCIPsetSumFloor( 1271 SCIP_SET* set, /**< global SCIP settings */ 1272 SCIP_Real val /**< value to process */ 1273 ); 1274 1275 /** rounds value - sumepsilon tolerance up to the next integer */ 1276 SCIP_Real SCIPsetSumCeil( 1277 SCIP_SET* set, /**< global SCIP settings */ 1278 SCIP_Real val /**< value to process */ 1279 ); 1280 1281 /** rounds value to the nearest integer in sumepsilon tolerance */ 1282 SCIP_Real SCIPsetSumRound( 1283 SCIP_SET* set, /**< global SCIP settings */ 1284 SCIP_Real val /**< value to process */ 1285 ); 1286 1287 /** returns fractional part of value, i.e. x - floor(x) in sumepsilon tolerance */ 1288 SCIP_Real SCIPsetSumFrac( 1289 SCIP_SET* set, /**< global SCIP settings */ 1290 SCIP_Real val /**< value to process */ 1291 ); 1292 1293 /** checks, if relative difference of values is in range of feastol */ 1294 SCIP_Bool SCIPsetIsFeasEQ( 1295 SCIP_SET* set, /**< global SCIP settings */ 1296 SCIP_Real val1, /**< first value to be compared */ 1297 SCIP_Real val2 /**< second value to be compared */ 1298 ); 1299 1300 /** checks, if relative difference of val1 and val2 is lower than feastol */ 1301 SCIP_Bool SCIPsetIsFeasLT( 1302 SCIP_SET* set, /**< global SCIP settings */ 1303 SCIP_Real val1, /**< first value to be compared */ 1304 SCIP_Real val2 /**< second value to be compared */ 1305 ); 1306 1307 /** checks, if relative difference of val1 and val2 is not greater than feastol */ 1308 SCIP_Bool SCIPsetIsFeasLE( 1309 SCIP_SET* set, /**< global SCIP settings */ 1310 SCIP_Real val1, /**< first value to be compared */ 1311 SCIP_Real val2 /**< second value to be compared */ 1312 ); 1313 1314 /** checks, if relative difference of val1 and val2 is greater than feastol */ 1315 SCIP_Bool SCIPsetIsFeasGT( 1316 SCIP_SET* set, /**< global SCIP settings */ 1317 SCIP_Real val1, /**< first value to be compared */ 1318 SCIP_Real val2 /**< second value to be compared */ 1319 ); 1320 1321 /** checks, if relative difference of val1 and val2 is not lower than -feastol */ 1322 SCIP_Bool SCIPsetIsFeasGE( 1323 SCIP_SET* set, /**< global SCIP settings */ 1324 SCIP_Real val1, /**< first value to be compared */ 1325 SCIP_Real val2 /**< second value to be compared */ 1326 ); 1327 1328 /** checks, if value is in range feasibility tolerance of 0.0 */ 1329 SCIP_Bool SCIPsetIsFeasZero( 1330 SCIP_SET* set, /**< global SCIP settings */ 1331 SCIP_Real val /**< value to be compared against zero */ 1332 ); 1333 1334 /** checks, if value is greater than feasibility tolerance */ 1335 SCIP_Bool SCIPsetIsFeasPositive( 1336 SCIP_SET* set, /**< global SCIP settings */ 1337 SCIP_Real val /**< value to be compared against zero */ 1338 ); 1339 1340 /** checks, if value is lower than -feasibility tolerance */ 1341 SCIP_Bool SCIPsetIsFeasNegative( 1342 SCIP_SET* set, /**< global SCIP settings */ 1343 SCIP_Real val /**< value to be compared against zero */ 1344 ); 1345 1346 /** checks, if value is integral within the feasibility bounds */ 1347 SCIP_Bool SCIPsetIsFeasIntegral( 1348 SCIP_SET* set, /**< global SCIP settings */ 1349 SCIP_Real val /**< value to be compared against zero */ 1350 ); 1351 1352 /** checks, if given fractional part is smaller than feastol */ 1353 SCIP_Bool SCIPsetIsFeasFracIntegral( 1354 SCIP_SET* set, /**< global SCIP settings */ 1355 SCIP_Real val /**< value to be compared against zero */ 1356 ); 1357 1358 /** rounds value + feasibility tolerance down to the next integer */ 1359 SCIP_Real SCIPsetFeasFloor( 1360 SCIP_SET* set, /**< global SCIP settings */ 1361 SCIP_Real val /**< value to be compared against zero */ 1362 ); 1363 1364 /** rounds value - feasibility tolerance up to the next integer */ 1365 SCIP_Real SCIPsetFeasCeil( 1366 SCIP_SET* set, /**< global SCIP settings */ 1367 SCIP_Real val /**< value to be compared against zero */ 1368 ); 1369 1370 /** rounds value to the nearest integer in feasibility tolerance */ 1371 SCIP_Real SCIPsetFeasRound( 1372 SCIP_SET* set, /**< global SCIP settings */ 1373 SCIP_Real val /**< value to be compared against zero */ 1374 ); 1375 1376 /** returns fractional part of value, i.e. x - floor(x) in feasibility tolerance */ 1377 SCIP_Real SCIPsetFeasFrac( 1378 SCIP_SET* set, /**< global SCIP settings */ 1379 SCIP_Real val /**< value to return fractional part for */ 1380 ); 1381 1382 /** checks, if relative difference of values is in range of dual feasibility tolerance */ 1383 SCIP_Bool SCIPsetIsDualfeasEQ( 1384 SCIP_SET* set, /**< global SCIP settings */ 1385 SCIP_Real val1, /**< first value to be compared */ 1386 SCIP_Real val2 /**< second value to be compared */ 1387 ); 1388 1389 /** checks, if relative difference of val1 and val2 is lower than dual feasibility tolerance */ 1390 SCIP_Bool SCIPsetIsDualfeasLT( 1391 SCIP_SET* set, /**< global SCIP settings */ 1392 SCIP_Real val1, /**< first value to be compared */ 1393 SCIP_Real val2 /**< second value to be compared */ 1394 ); 1395 1396 /** checks, if relative difference of val1 and val2 is not greater than dual feasibility tolerance */ 1397 SCIP_Bool SCIPsetIsDualfeasLE( 1398 SCIP_SET* set, /**< global SCIP settings */ 1399 SCIP_Real val1, /**< first value to be compared */ 1400 SCIP_Real val2 /**< second value to be compared */ 1401 ); 1402 1403 /** checks, if relative difference of val1 and val2 is greater than dual feasibility tolerance */ 1404 SCIP_Bool SCIPsetIsDualfeasGT( 1405 SCIP_SET* set, /**< global SCIP settings */ 1406 SCIP_Real val1, /**< first value to be compared */ 1407 SCIP_Real val2 /**< second value to be compared */ 1408 ); 1409 1410 /** checks, if relative difference of val1 and val2 is not lower than -dual feasibility tolerance */ 1411 SCIP_Bool SCIPsetIsDualfeasGE( 1412 SCIP_SET* set, /**< global SCIP settings */ 1413 SCIP_Real val1, /**< first value to be compared */ 1414 SCIP_Real val2 /**< second value to be compared */ 1415 ); 1416 1417 /** checks, if value is in range dual feasibility tolerance of 0.0 */ 1418 SCIP_Bool SCIPsetIsDualfeasZero( 1419 SCIP_SET* set, /**< global SCIP settings */ 1420 SCIP_Real val /**< value to be compared against zero */ 1421 ); 1422 1423 /** checks, if value is greater than dual feasibility tolerance */ 1424 SCIP_Bool SCIPsetIsDualfeasPositive( 1425 SCIP_SET* set, /**< global SCIP settings */ 1426 SCIP_Real val /**< value to be compared against zero */ 1427 ); 1428 1429 /** checks, if value is lower than -dual feasibility tolerance */ 1430 SCIP_Bool SCIPsetIsDualfeasNegative( 1431 SCIP_SET* set, /**< global SCIP settings */ 1432 SCIP_Real val /**< value to be compared against zero */ 1433 ); 1434 1435 /** checks, if value is integral within the dual feasibility bounds */ 1436 SCIP_Bool SCIPsetIsDualfeasIntegral( 1437 SCIP_SET* set, /**< global SCIP settings */ 1438 SCIP_Real val /**< value to be compared against zero */ 1439 ); 1440 1441 /** checks, if given fractional part is smaller than dual feasibility tolerance */ 1442 SCIP_Bool SCIPsetIsDualfeasFracIntegral( 1443 SCIP_SET* set, /**< global SCIP settings */ 1444 SCIP_Real val /**< value to be compared against zero */ 1445 ); 1446 1447 /** rounds value + dual feasibility tolerance down to the next integer */ 1448 SCIP_Real SCIPsetDualfeasFloor( 1449 SCIP_SET* set, /**< global SCIP settings */ 1450 SCIP_Real val /**< value to be compared against zero */ 1451 ); 1452 1453 /** rounds value - dual feasibility tolerance up to the next integer */ 1454 SCIP_Real SCIPsetDualfeasCeil( 1455 SCIP_SET* set, /**< global SCIP settings */ 1456 SCIP_Real val /**< value to be compared against zero */ 1457 ); 1458 1459 /** rounds value to the nearest integer in dual feasibility tolerance */ 1460 SCIP_Real SCIPsetDualfeasRound( 1461 SCIP_SET* set, /**< global SCIP settings */ 1462 SCIP_Real val /**< value to be compared against zero */ 1463 ); 1464 1465 /** returns fractional part of value, i.e. x - floor(x) in dual feasibility tolerance */ 1466 SCIP_Real SCIPsetDualfeasFrac( 1467 SCIP_SET* set, /**< global SCIP settings */ 1468 SCIP_Real val /**< value to return fractional part for */ 1469 ); 1470 1471 /** checks, if the given new lower bound is at least min(oldub - oldlb, |oldlb|) times the bound 1472 * strengthening epsilon better than the old one or the change in the lower bound would fix the 1473 * sign of the variable 1474 */ 1475 SCIP_Bool SCIPsetIsLbBetter( 1476 SCIP_SET* set, /**< global SCIP settings */ 1477 SCIP_Real newlb, /**< new lower bound */ 1478 SCIP_Real oldlb, /**< old lower bound */ 1479 SCIP_Real oldub /**< old upper bound */ 1480 ); 1481 1482 /** checks, if the given new upper bound is at least min(oldub - oldlb, |oldub|) times the bound 1483 * strengthening epsilon better than the old one or the change in the upper bound would fix the 1484 * sign of the variable 1485 */ 1486 SCIP_Bool SCIPsetIsUbBetter( 1487 SCIP_SET* set, /**< global SCIP settings */ 1488 SCIP_Real newub, /**< new upper bound */ 1489 SCIP_Real oldlb, /**< old lower bound */ 1490 SCIP_Real oldub /**< old upper bound */ 1491 ); 1492 1493 /** checks, if the given cut's efficacy is larger than the minimal cut efficacy */ 1494 SCIP_Bool SCIPsetIsEfficacious( 1495 SCIP_SET* set, /**< global SCIP settings */ 1496 SCIP_Bool root, /**< should the root's minimal cut efficacy be used? */ 1497 SCIP_Real efficacy /**< efficacy of the cut */ 1498 ); 1499 1500 /** checks, if relative difference of values is in range of epsilon */ 1501 SCIP_Bool SCIPsetIsRelEQ( 1502 SCIP_SET* set, /**< global SCIP settings */ 1503 SCIP_Real val1, /**< first value to be compared */ 1504 SCIP_Real val2 /**< second value to be compared */ 1505 ); 1506 1507 /** checks, if relative difference of val1 and val2 is lower than epsilon */ 1508 SCIP_Bool SCIPsetIsRelLT( 1509 SCIP_SET* set, /**< global SCIP settings */ 1510 SCIP_Real val1, /**< first value to be compared */ 1511 SCIP_Real val2 /**< second value to be compared */ 1512 ); 1513 1514 /** checks, if relative difference of val1 and val2 is not greater than epsilon */ 1515 SCIP_Bool SCIPsetIsRelLE( 1516 SCIP_SET* set, /**< global SCIP settings */ 1517 SCIP_Real val1, /**< first value to be compared */ 1518 SCIP_Real val2 /**< second value to be compared */ 1519 ); 1520 1521 /** checks, if relative difference of val1 and val2 is greater than epsilon */ 1522 SCIP_Bool SCIPsetIsRelGT( 1523 SCIP_SET* set, /**< global SCIP settings */ 1524 SCIP_Real val1, /**< first value to be compared */ 1525 SCIP_Real val2 /**< second value to be compared */ 1526 ); 1527 1528 /** checks, if relative difference of val1 and val2 is not lower than -epsilon */ 1529 SCIP_Bool SCIPsetIsRelGE( 1530 SCIP_SET* set, /**< global SCIP settings */ 1531 SCIP_Real val1, /**< first value to be compared */ 1532 SCIP_Real val2 /**< second value to be compared */ 1533 ); 1534 1535 /** checks, if relative difference of values is in range of sumepsilon */ 1536 SCIP_Bool SCIPsetIsSumRelEQ( 1537 SCIP_SET* set, /**< global SCIP settings */ 1538 SCIP_Real val1, /**< first value to be compared */ 1539 SCIP_Real val2 /**< second value to be compared */ 1540 ); 1541 1542 /** checks, if relative difference of val1 and val2 is lower than sumepsilon */ 1543 SCIP_Bool SCIPsetIsSumRelLT( 1544 SCIP_SET* set, /**< global SCIP settings */ 1545 SCIP_Real val1, /**< first value to be compared */ 1546 SCIP_Real val2 /**< second value to be compared */ 1547 ); 1548 1549 /** checks, if relative difference of val1 and val2 is not greater than sumepsilon */ 1550 SCIP_Bool SCIPsetIsSumRelLE( 1551 SCIP_SET* set, /**< global SCIP settings */ 1552 SCIP_Real val1, /**< first value to be compared */ 1553 SCIP_Real val2 /**< second value to be compared */ 1554 ); 1555 1556 /** checks, if relative difference of val1 and val2 is greater than sumepsilon */ 1557 SCIP_Bool SCIPsetIsSumRelGT( 1558 SCIP_SET* set, /**< global SCIP settings */ 1559 SCIP_Real val1, /**< first value to be compared */ 1560 SCIP_Real val2 /**< second value to be compared */ 1561 ); 1562 1563 /** checks, if relative difference of val1 and val2 is not lower than -sumepsilon */ 1564 SCIP_Bool SCIPsetIsSumRelGE( 1565 SCIP_SET* set, /**< global SCIP settings */ 1566 SCIP_Real val1, /**< first value to be compared */ 1567 SCIP_Real val2 /**< second value to be compared */ 1568 ); 1569 1570 /** returns the flag indicating whether sub-SCIPs that could cause recursion have been deactivated */ 1571 SCIP_Bool SCIPsetGetSubscipsOff( 1572 SCIP_SET* set /**< global SCIP settings */ 1573 ); 1574 1575 1576 #ifdef NDEBUG 1577 1578 /* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and 1579 * speed up the algorithms. 1580 */ 1581 1582 #define SCIPsetInfinity(set) ( (set)->num_infinity ) 1583 #define SCIPsetGetHugeValue(set) ( (set)->num_hugeval ) 1584 #define SCIPsetEpsilon(set) ( (set)->num_epsilon ) 1585 #define SCIPsetSumepsilon(set) ( (set)->num_sumepsilon ) 1586 #define SCIPsetFeastol(set) ( (set)->num_feastol ) 1587 #define SCIPsetLPFeastolFactor(set) ( (set)->num_lpfeastolfactor ) 1588 #define SCIPsetDualfeastol(set) ( (set)->num_dualfeastol ) 1589 #define SCIPsetBarrierconvtol(set) ( (set)->num_barrierconvtol ) 1590 #define SCIPsetPseudocosteps(set) ( (set)->num_pseudocosteps ) 1591 #define SCIPsetPseudocostdelta(set) ( (set)->num_pseudocostdelta ) 1592 #define SCIPsetRelaxfeastol(set) ( (set)->num_relaxfeastol ) 1593 #define SCIPsetCutoffbounddelta(set) ( MIN(100.0 * SCIPsetFeastol(set), 0.0001) ) 1594 #define SCIPsetRecompfac(set) ( (set)->num_recompfac ) 1595 #define SCIPsetIsEQ(set, val1, val2) ( EPSEQ(val1, val2, (set)->num_epsilon) ) 1596 #define SCIPsetIsLT(set, val1, val2) ( EPSLT(val1, val2, (set)->num_epsilon) ) 1597 #define SCIPsetIsLE(set, val1, val2) ( EPSLE(val1, val2, (set)->num_epsilon) ) 1598 #define SCIPsetIsGT(set, val1, val2) ( EPSGT(val1, val2, (set)->num_epsilon) ) 1599 #define SCIPsetIsGE(set, val1, val2) ( EPSGE(val1, val2, (set)->num_epsilon) ) 1600 #define SCIPsetIsInfinity(set, val) ( (val) >= (set)->num_infinity ) 1601 #define SCIPsetIsHugeValue(set, val) ( (val) >= (set)->num_hugeval ) 1602 #define SCIPsetIsZero(set, val) ( EPSZ(val, (set)->num_epsilon) ) 1603 #define SCIPsetIsPositive(set, val) ( EPSP(val, (set)->num_epsilon) ) 1604 #define SCIPsetIsNegative(set, val) ( EPSN(val, (set)->num_epsilon) ) 1605 #define SCIPsetIsIntegral(set, val) ( EPSISINT(val, (set)->num_epsilon) ) 1606 #define SCIPsetIsScalingIntegral(set, val, scalar) \ 1607 ( EPSISINT((scalar)*(val), MAX(REALABS(scalar), 1.0)*(set)->num_epsilon) ) 1608 #define SCIPsetIsFracIntegral(set, val) ( !EPSP(val, (set)->num_epsilon) ) 1609 #define SCIPsetFloor(set, val) ( EPSFLOOR(val, (set)->num_epsilon) ) 1610 #define SCIPsetCeil(set, val) ( EPSCEIL(val, (set)->num_epsilon) ) 1611 #define SCIPsetRound(set, val) ( EPSROUND(val, (set)->num_epsilon) ) 1612 #define SCIPsetFrac(set, val) ( EPSFRAC(val, (set)->num_epsilon) ) 1613 1614 #define SCIPsetIsSumEQ(set, val1, val2) ( EPSEQ(val1, val2, (set)->num_sumepsilon) ) 1615 #define SCIPsetIsSumLT(set, val1, val2) ( EPSLT(val1, val2, (set)->num_sumepsilon) ) 1616 #define SCIPsetIsSumLE(set, val1, val2) ( EPSLE(val1, val2, (set)->num_sumepsilon) ) 1617 #define SCIPsetIsSumGT(set, val1, val2) ( EPSGT(val1, val2, (set)->num_sumepsilon) ) 1618 #define SCIPsetIsSumGE(set, val1, val2) ( EPSGE(val1, val2, (set)->num_sumepsilon) ) 1619 #define SCIPsetIsSumZero(set, val) ( EPSZ(val, (set)->num_sumepsilon) ) 1620 #define SCIPsetIsSumPositive(set, val) ( EPSP(val, (set)->num_sumepsilon) ) 1621 #define SCIPsetIsSumNegative(set, val) ( EPSN(val, (set)->num_sumepsilon) ) 1622 #define SCIPsetSumFloor(set, val) ( EPSFLOOR(val, (set)->num_sumepsilon) ) 1623 #define SCIPsetSumCeil(set, val) ( EPSCEIL(val, (set)->num_sumepsilon) ) 1624 #define SCIPsetSumRound(set, val) ( EPSROUND(val, (set)->num_sumepsilon) ) 1625 #define SCIPsetSumFrac(set, val) ( EPSFRAC(val, (set)->num_sumepsilon) ) 1626 1627 #define SCIPsetIsFeasEQ(set, val1, val2) ( EPSZ(SCIPrelDiff(val1, val2), (set)->num_feastol) ) 1628 #define SCIPsetIsFeasLT(set, val1, val2) ( EPSN(SCIPrelDiff(val1, val2), (set)->num_feastol) ) 1629 #define SCIPsetIsFeasLE(set, val1, val2) ( !EPSP(SCIPrelDiff(val1, val2), (set)->num_feastol) ) 1630 #define SCIPsetIsFeasGT(set, val1, val2) ( EPSP(SCIPrelDiff(val1, val2), (set)->num_feastol) ) 1631 #define SCIPsetIsFeasGE(set, val1, val2) ( !EPSN(SCIPrelDiff(val1, val2), (set)->num_feastol) ) 1632 #define SCIPsetIsFeasZero(set, val) ( EPSZ(val, (set)->num_feastol) ) 1633 #define SCIPsetIsFeasPositive(set, val) ( EPSP(val, (set)->num_feastol) ) 1634 #define SCIPsetIsFeasNegative(set, val) ( EPSN(val, (set)->num_feastol) ) 1635 #define SCIPsetIsFeasIntegral(set, val) ( EPSISINT(val, (set)->num_feastol) ) 1636 #define SCIPsetIsFeasFracIntegral(set, val) ( !EPSP(val, (set)->num_feastol) ) 1637 #define SCIPsetFeasFloor(set, val) ( EPSFLOOR(val, (set)->num_feastol) ) 1638 #define SCIPsetFeasCeil(set, val) ( EPSCEIL(val, (set)->num_feastol) ) 1639 #define SCIPsetFeasRound(set, val) ( EPSROUND(val, (set)->num_feastol) ) 1640 #define SCIPsetFeasFrac(set, val) ( EPSFRAC(val, (set)->num_feastol) ) 1641 1642 #define SCIPsetIsDualfeasEQ(set, val1, val2) ( EPSZ(SCIPrelDiff(val1, val2), (set)->num_dualfeastol) ) 1643 #define SCIPsetIsDualfeasLT(set, val1, val2) ( EPSN(SCIPrelDiff(val1, val2), (set)->num_dualfeastol) ) 1644 #define SCIPsetIsDualfeasLE(set, val1, val2) ( !EPSP(SCIPrelDiff(val1, val2), (set)->num_dualfeastol) ) 1645 #define SCIPsetIsDualfeasGT(set, val1, val2) ( EPSP(SCIPrelDiff(val1, val2), (set)->num_dualfeastol) ) 1646 #define SCIPsetIsDualfeasGE(set, val1, val2) ( !EPSN(SCIPrelDiff(val1, val2), (set)->num_dualfeastol) ) 1647 #define SCIPsetIsDualfeasZero(set, val) ( EPSZ(val, (set)->num_dualfeastol) ) 1648 #define SCIPsetIsDualfeasPositive(set, val) ( EPSP(val, (set)->num_dualfeastol) ) 1649 #define SCIPsetIsDualfeasNegative(set, val) ( EPSN(val, (set)->num_dualfeastol) ) 1650 #define SCIPsetIsDualfeasIntegral(set, val) ( EPSISINT(val, (set)->num_dualfeastol) ) 1651 #define SCIPsetIsDualfeasFracIntegral(set, val) ( !EPSP(val, (set)->num_dualfeastol) ) 1652 #define SCIPsetDualfeasFloor(set, val) ( EPSFLOOR(val, (set)->num_dualfeastol) ) 1653 #define SCIPsetDualfeasCeil(set, val) ( EPSCEIL(val, (set)->num_dualfeastol) ) 1654 #define SCIPsetDualfeasRound(set, val) ( EPSROUND(val, (set)->num_dualfeastol) ) 1655 #define SCIPsetDualfeasFrac(set, val) ( EPSFRAC(val, (set)->num_dualfeastol) ) 1656 1657 #define SCIPsetIsLbBetter(set, newlb, oldlb, oldub) ( ((oldlb) < 0.0 && (newlb) >= 0.0) || EPSGT(newlb, oldlb, \ 1658 set->num_boundstreps * MAX(MIN((oldub) - (oldlb), REALABS(oldlb)), 1e-3)) ) 1659 #define SCIPsetIsUbBetter(set, newub, oldlb, oldub) ( ((oldub) > 0.0 && (newub) <= 0.0) || EPSLT(newub, oldub, \ 1660 set->num_boundstreps * MAX(MIN((oldub) - (oldlb), REALABS(oldub)), 1e-3)) ) 1661 #define SCIPsetIsEfficacious(set, root, efficacy) \ 1662 ( root ? EPSP(efficacy, (set)->sepa_minefficacyroot) : EPSP(efficacy, (set)->sepa_minefficacy) ) 1663 1664 #define SCIPsetIsRelEQ(set, val1, val2) ( EPSZ(SCIPrelDiff(val1, val2), (set)->num_epsilon) ) 1665 #define SCIPsetIsRelLT(set, val1, val2) ( EPSN(SCIPrelDiff(val1, val2), (set)->num_epsilon) ) 1666 #define SCIPsetIsRelLE(set, val1, val2) ( !EPSP(SCIPrelDiff(val1, val2), (set)->num_epsilon) ) 1667 #define SCIPsetIsRelGT(set, val1, val2) ( EPSP(SCIPrelDiff(val1, val2), (set)->num_epsilon) ) 1668 #define SCIPsetIsRelGE(set, val1, val2) ( !EPSN(SCIPrelDiff(val1, val2), (set)->num_epsilon) ) 1669 1670 #define SCIPsetIsSumRelEQ(set, val1, val2) ( EPSZ(SCIPrelDiff(val1, val2), (set)->num_sumepsilon) ) 1671 #define SCIPsetIsSumRelLT(set, val1, val2) ( EPSN(SCIPrelDiff(val1, val2), (set)->num_sumepsilon) ) 1672 #define SCIPsetIsSumRelLE(set, val1, val2) ( !EPSP(SCIPrelDiff(val1, val2), (set)->num_sumepsilon) ) 1673 #define SCIPsetIsSumRelGT(set, val1, val2) ( EPSP(SCIPrelDiff(val1, val2), (set)->num_sumepsilon) ) 1674 #define SCIPsetIsSumRelGE(set, val1, val2) ( !EPSN(SCIPrelDiff(val1, val2), (set)->num_sumepsilon) ) 1675 #define SCIPsetIsUpdateUnreliable(set, newvalue, oldvalue) \ 1676 ( (ABS(oldvalue) / MAX(ABS(newvalue), set->num_epsilon)) >= set->num_recompfac ) 1677 #define SCIPsetInitializeRandomSeed(set, val) ( (val + (set)->random_randomseedshift) ) 1678 1679 #define SCIPsetGetSubscipsOff(set) ( (set)->subscipsoff ) 1680 1681 #endif 1682 1683 #define SCIPsetAllocBuffer(set,ptr) ( (BMSallocBufferMemory((set)->buffer, (ptr)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1684 #define SCIPsetAllocBufferSize(set,ptr,size) ( (BMSallocBufferMemorySize((set)->buffer, (ptr), (size)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1685 #define SCIPsetAllocBufferArray(set,ptr,num) ( (BMSallocBufferMemoryArray((set)->buffer, (ptr), (num)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1686 #define SCIPsetDuplicateBufferSize(set,ptr,source,size) ( (BMSduplicateBufferMemory((set)->buffer, (ptr), (source), (size)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1687 #define SCIPsetDuplicateBufferArray(set,ptr,source,num) ( (BMSduplicateBufferMemoryArray((set)->buffer, (ptr), (source), (num)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1688 #define SCIPsetReallocBufferSize(set,ptr,size) ( (BMSreallocBufferMemorySize((set)->buffer, (ptr), (size)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1689 #define SCIPsetReallocBufferArray(set,ptr,num) ( (BMSreallocBufferMemoryArray((set)->buffer, (ptr), (num)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1690 #define SCIPsetFreeBuffer(set,ptr) BMSfreeBufferMemory((set)->buffer, (ptr)) 1691 #define SCIPsetFreeBufferSize(set,ptr) BMSfreeBufferMemorySize((set)->buffer, (ptr)) 1692 #define SCIPsetFreeBufferArray(set,ptr) BMSfreeBufferMemoryArray((set)->buffer, (ptr)) 1693 1694 #define SCIPsetAllocCleanBuffer(set,ptr) ( (BMSallocBufferMemory((set)->cleanbuffer, (ptr)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1695 #define SCIPsetAllocCleanBufferSize(set,ptr,size) ( (BMSallocBufferMemorySize((set)->cleanbuffer, (ptr), (size)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1696 #define SCIPsetAllocCleanBufferArray(set,ptr,num) ( (BMSallocBufferMemoryArray((set)->cleanbuffer, (ptr), (num)) == NULL) ? SCIP_NOMEMORY : SCIP_OKAY ) 1697 #define SCIPsetFreeCleanBuffer(set,ptr) BMSfreeBufferMemory((set)->cleanbuffer, (ptr)) 1698 #define SCIPsetFreeCleanBufferSize(set,ptr) BMSfreeBufferMemorySize((set)->cleanbuffer, (ptr)) 1699 #define SCIPsetFreeCleanBufferArray(set,ptr) BMSfreeBufferMemoryArray((set)->cleanbuffer, (ptr)) 1700 1701 /* if we have a C99 compiler */ 1702 #ifdef SCIP_HAVE_VARIADIC_MACROS 1703 1704 /** prints a debugging message if SCIP_DEBUG flag is set */ 1705 #ifdef SCIP_DEBUG 1706 #define SCIPsetDebugMsg(set, ...) SCIPsetPrintDebugMessage(set, __FILE__, __LINE__, __VA_ARGS__) 1707 #define SCIPsetDebugMsgPrint(set, ...) SCIPsetDebugMessagePrint(set, __VA_ARGS__) 1708 #else 1709 #define SCIPsetDebugMsg(set, ...) while ( FALSE ) SCIPsetPrintDebugMessage(set, __FILE__, __LINE__, __VA_ARGS__) 1710 #define SCIPsetDebugMsgPrint(set, ...) while ( FALSE ) SCIPsetDebugMessagePrint(set, __VA_ARGS__) 1711 #endif 1712 1713 #else 1714 /* if we do not have a C99 compiler, use a workaround that prints a message, but not the file and linenumber */ 1715 1716 /** prints a debugging message if SCIP_DEBUG flag is set */ 1717 #ifdef SCIP_DEBUG 1718 #define SCIPsetDebugMsg printf("debug: "), SCIPsetDebugMessagePrint 1719 #define SCIPsetDebugMsgPrint printf("debug: "), SCIPsetDebugMessagePrint 1720 #else 1721 #define SCIPsetDebugMsg while ( FALSE ) SCIPsetDebugMsgPrint 1722 #define SCIPsetDebugMsgPrint while ( FALSE ) SCIPsetDebugMessagePrint 1723 #endif 1724 1725 #endif 1726 1727 1728 /** prints a debug message */ 1729 #ifdef __GNUC__ 1730 __attribute__((format(printf, 4, 5))) 1731 #endif 1732 SCIP_EXPORT 1733 void SCIPsetPrintDebugMessage( 1734 SCIP_SET* set, /**< global SCIP settings */ 1735 const char* sourcefile, /**< name of the source file that called the function */ 1736 int sourceline, /**< line in the source file where the function was called */ 1737 const char* formatstr, /**< format string like in printf() function */ 1738 ... /**< format arguments line in printf() function */ 1739 ); 1740 1741 /** prints a debug message without precode */ 1742 #ifdef __GNUC__ 1743 __attribute__((format(printf, 2, 3))) 1744 #endif 1745 SCIP_EXPORT 1746 void SCIPsetDebugMessagePrint( 1747 SCIP_SET* set, /**< global SCIP settings */ 1748 const char* formatstr, /**< format string like in printf() function */ 1749 ... /**< format arguments line in printf() function */ 1750 ); 1751 1752 1753 #ifdef __cplusplus 1754 } 1755 #endif 1756 1757 #endif 1758