Scippy

SCIP

Solving Constraint Integer Programs

paramset.c
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of the program and library */
4 /* SCIP --- Solving Constraint Integer Programs */
5 /* */
6 /* Copyright (C) 2002-2016 Konrad-Zuse-Zentrum */
7 /* fuer Informationstechnik Berlin */
8 /* */
9 /* SCIP is distributed under the terms of the ZIB Academic License. */
10 /* */
11 /* You should have received a copy of the ZIB Academic License */
12 /* along with SCIP; see the file COPYING. If not email to scip@zib.de. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file paramset.c
17  * @brief methods for handling parameter settings
18  * @author Tobias Achterberg
19  * @author Timo Berthold
20  * @author Stefan Heinz
21  * @author Gerald Gamrath
22  */
23 
24 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
25 
26 #include <assert.h>
27 #include <string.h>
28 
29 #include "scip/scip.h"
30 #include "scip/set.h"
31 #include "scip/paramset.h"
32 
33 #include "scip/struct_paramset.h"
34 
35 
36 
37 /*
38  * Parameter methods
39  */
40 
41 /** hash key retrieval function for parameters */
42 static
43 SCIP_DECL_HASHGETKEY(hashGetKeyParam)
44 { /*lint --e{715}*/
45  SCIP_PARAM* param;
46 
47  param = (SCIP_PARAM*)elem;
48  assert(param != NULL);
49 
50  return param->name;
51 }
52 
53 /** checks whether parameter can be changed and issues a warning message if it is fixed */
54 static
56  SCIP_PARAM* param, /**< parameter */
57  SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
58  )
59 {
60  assert(param != NULL);
61 
62  if( param->isfixed )
63  {
64  SCIPmessagePrintWarning(messagehdlr, "parameter <%s> is fixed and cannot be changed. Unfix it to allow changing the value.\n",
65  param->name);
67  }
68 
69  return SCIP_OKAY;
70 }
71 
72 /** checks parameter value according to the given feasible domain; issues a warning message if value was invalid */
73 static
75  SCIP_PARAM* param, /**< parameter */
76  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
77  SCIP_Bool value /**< value to check */
78  )
79 {
80  assert(param != NULL);
81  assert(param->paramtype == SCIP_PARAMTYPE_BOOL);
82 
83  if( value != TRUE && value != FALSE )
84  {
85  SCIPmessagePrintWarning(messagehdlr, "Invalid value <%d> for bool parameter <%s>. Must be <0> (FALSE) or <1> (TRUE).\n",
86  value, param->name);
88  }
89 
90  return SCIP_OKAY;
91 }
92 
93 /** checks parameter value according to the given feasible domain; issues a warning message if value was invalid */
94 static
96  SCIP_PARAM* param, /**< parameter */
97  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
98  int value /**< value to check */
99  )
100 {
101  assert(param != NULL);
102  assert(param->paramtype == SCIP_PARAMTYPE_INT);
103 
104  if( value < param->data.intparam.minvalue || value > param->data.intparam.maxvalue )
105  {
106  SCIPmessagePrintWarning(messagehdlr, "Invalid value <%d> for int parameter <%s>. Must be in range [%d,%d].\n",
107  value, param->name, param->data.intparam.minvalue, param->data.intparam.maxvalue);
108  return SCIP_PARAMETERWRONGVAL;
109  }
110 
111  return SCIP_OKAY;
112 }
113 
114 /** checks parameter value according to the given feasible domain; issues a warning message if value was invalid */
115 static
117  SCIP_PARAM* param, /**< parameter */
118  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
119  SCIP_Longint value /**< value to check */
120  )
121 {
122  assert(param != NULL);
123  assert(param->paramtype == SCIP_PARAMTYPE_LONGINT);
124 
125  if( value < param->data.longintparam.minvalue || value > param->data.longintparam.maxvalue )
126  {
127  SCIPmessagePrintWarning(messagehdlr, "Invalid value <%" SCIP_LONGINT_FORMAT "> for longint parameter <%s>. Must be in range [%" SCIP_LONGINT_FORMAT ",%" SCIP_LONGINT_FORMAT "].\n",
128  value, param->name, param->data.longintparam.minvalue, param->data.longintparam.maxvalue);
129  return SCIP_PARAMETERWRONGVAL;
130  }
131 
132  return SCIP_OKAY;
133 }
134 
135 /** checks parameter value according to the given feasible domain; issues a warning message if value was invalid */
136 static
138  SCIP_PARAM* param, /**< parameter */
139  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
140  SCIP_Real value /**< value to check */
141  )
142 {
143  assert(param != NULL);
144  assert(param->paramtype == SCIP_PARAMTYPE_REAL);
145 
146  if( value < param->data.realparam.minvalue || value > param->data.realparam.maxvalue )
147  {
148  SCIPmessagePrintWarning(messagehdlr, "Invalid real parameter value <%.15g> for parameter <%s>. Must be in range [%.15g,%.15g].\n",
149  value, param->name, param->data.realparam.minvalue, param->data.realparam.maxvalue);
150  return SCIP_PARAMETERWRONGVAL;
151  }
152 
153  return SCIP_OKAY;
154 }
155 
156 /** checks parameter value according to the given feasible domain; issues a warning message if value was invalid */
157 static
159  SCIP_PARAM* param, /**< parameter */
160  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
161  char value /**< value to check */
162  )
163 {
164  assert(param != NULL);
165  assert(param->paramtype == SCIP_PARAMTYPE_CHAR);
166 
167  if( value == '\b' || value == '\f' || value == '\n' || value == '\r' || value == '\v' )
168  {
169  SCIPmessagePrintWarning(messagehdlr, "Invalid char parameter value <%x>.\n", (int)value);
170  return SCIP_PARAMETERWRONGVAL;
171  }
172 
173  if( param->data.charparam.allowedvalues != NULL )
174  {
175  char* c;
176 
177  c = param->data.charparam.allowedvalues;
178  while( *c != '\0' && *c != value )
179  c++;
180 
181  if( *c != value )
182  {
183  SCIPmessagePrintWarning(messagehdlr, "Invalid char parameter value <%c>. Must be in set {%s}.\n",
184  value, param->data.charparam.allowedvalues);
185  return SCIP_PARAMETERWRONGVAL;
186  }
187  }
188 
189  return SCIP_OKAY;
190 }
191 
192 /** checks parameter value according to the given feasible domain; issues a warning message if value was invalid */
193 static
195  SCIP_PARAM* param, /**< parameter */
196  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
197  const char* value /**< value to check */
198  )
199 {
200  unsigned int i;
201 
202  assert(param != NULL);
203  assert(param->paramtype == SCIP_PARAMTYPE_STRING);
204 
205  if( value == NULL )
206  {
207  SCIPmessagePrintWarning(messagehdlr, "Cannot assign a NULL string to a string parameter.\n");
208  return SCIP_PARAMETERWRONGVAL;
209  }
210 
211  for( i = 0; i < (unsigned int) strlen(value); ++i )
212  {
213  if( value[i] == '\b' || value[i] == '\f' || value[i] == '\n' || value[i] == '\r' || value[i] == '\v' )
214  {
215  SCIPmessagePrintWarning(messagehdlr, "Invalid character <%x> in string parameter at position %d.\n", (int)value[i], i);
216  return SCIP_PARAMETERWRONGVAL;
217  }
218  }
219 
220  return SCIP_OKAY;
221 }
222 
223 /** writes the parameter to a file */
224 static
226  SCIP_PARAM* param, /**< parameter */
227  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
228  FILE* file, /**< file stream to write parameter to, or NULL for stdout */
229  SCIP_Bool comments, /**< should parameter descriptions be written as comments? */
230  SCIP_Bool onlychanged /**< should only the parameters been written, that are changed from default? */
231  )
232 {
233  assert(param != NULL);
234 
235  /* write parameters at default values only, if the onlychanged flag is not set or if the parameter is fixed */
236  if( onlychanged && SCIPparamIsDefault(param) && !SCIPparamIsFixed(param) )
237  return SCIP_OKAY;
238 
239  /* write parameter description, bounds, and defaults as comments */
240  if( comments )
241  {
242  SCIPmessageFPrintInfo(messagehdlr, file, "# %s\n", param->desc);
243  switch( param->paramtype )
244  {
245  case SCIP_PARAMTYPE_BOOL:
246  SCIPmessageFPrintInfo(messagehdlr, file, "# [type: bool, range: {TRUE,FALSE}, default: %s]\n",
247  param->data.boolparam.defaultvalue ? "TRUE" : "FALSE");
248  break;
249  case SCIP_PARAMTYPE_INT:
250  SCIPmessageFPrintInfo(messagehdlr, file, "# [type: int, range: [%d,%d], default: %d]\n",
252  break;
254  SCIPmessageFPrintInfo(messagehdlr, file, "# [type: longint, range: [%" SCIP_LONGINT_FORMAT ",%" SCIP_LONGINT_FORMAT "], default: %" SCIP_LONGINT_FORMAT "]\n",
256  break;
257  case SCIP_PARAMTYPE_REAL:
258  SCIPmessageFPrintInfo(messagehdlr, file, "# [type: real, range: [%.15g,%.15g], default: %.15g]\n",
260  break;
261  case SCIP_PARAMTYPE_CHAR:
262  SCIPmessageFPrintInfo(messagehdlr, file, "# [type: char, range: {%s}, default: %c]\n",
263  param->data.charparam.allowedvalues != NULL ? param->data.charparam.allowedvalues : "all chars",
264  param->data.charparam.defaultvalue);
265  break;
267  SCIPmessageFPrintInfo(messagehdlr, file, "# [type: string, default: \"%s\"]\n", param->data.stringparam.defaultvalue);
268  break;
269  default:
270  SCIPerrorMessage("unknown parameter type\n");
271  return SCIP_INVALIDDATA;
272  }
273  }
274 
275  /* write parameter value */
276  SCIPmessageFPrintInfo(messagehdlr, file, "%s = ", param->name);
277  switch( param->paramtype )
278  {
279  case SCIP_PARAMTYPE_BOOL:
280  SCIPmessageFPrintInfo(messagehdlr, file, "%s", SCIPparamGetBool(param) ? "TRUE" : "FALSE");
281  break;
282  case SCIP_PARAMTYPE_INT:
283  SCIPmessageFPrintInfo(messagehdlr, file, "%d", SCIPparamGetInt(param));
284  break;
286  SCIPmessageFPrintInfo(messagehdlr, file, "%" SCIP_LONGINT_FORMAT "", SCIPparamGetLongint(param));
287  break;
288  case SCIP_PARAMTYPE_REAL:
289  SCIPmessageFPrintInfo(messagehdlr, file, "%.15g", SCIPparamGetReal(param));
290  break;
291  case SCIP_PARAMTYPE_CHAR:
292  SCIPmessageFPrintInfo(messagehdlr, file, "%c", SCIPparamGetChar(param));
293  break;
295  SCIPmessageFPrintInfo(messagehdlr, file, "\"%s\"", SCIPparamGetString(param));
296  break;
297  default:
298  SCIPerrorMessage("unknown parameter type\n");
299  return SCIP_INVALIDDATA;
300  }
301 
302  /* write "fix" after value if parameter is fixed */
303  if( SCIPparamIsFixed(param) )
304  SCIPmessageFPrintInfo(messagehdlr, file, " fix");
305 
306  SCIPmessageFPrintInfo(messagehdlr, file, "\n");
307 
308  if( comments )
309  SCIPmessageFPrintInfo(messagehdlr, file, "\n");
310 
311  return SCIP_OKAY;
312 }
313 
314 /** if a bool parameter exits with the given parameter name it is set to the new value */
315 static
317  SCIP_PARAMSET* paramset, /**< parameter set */
318  SCIP_SET* set, /**< global SCIP settings */
319  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
320  const char* paramname, /**< parameter name */
321  SCIP_Bool value, /**< new value of the parameter */
322  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
323  )
324 {
325  SCIP_PARAM* param;
326 
327  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
328  if( param != NULL )
329  {
330  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_BOOL);
331 
332  if( SCIPparamIsFixed(param) )
333  {
334  SCIPdebugMessage("hard coded parameter <%s> is fixed and is thus not changed.\n", param->name);
335 
336  return SCIP_OKAY;
337  }
338  SCIP_CALL( SCIPparamSetBool(param, set, messagehdlr, value, quiet) );
339  }
340 #ifndef NDEBUG
341  else
342  {
343  SCIPmessagePrintWarning(messagehdlr, "unknown hard coded bool parameter <%s>\n", paramname);
344  }
345 #endif
346 
347  return SCIP_OKAY;
348 }
349 
350 /** if an char parameter exits with the given parameter name it is set to the new value */
351 static
353  SCIP_PARAMSET* paramset, /**< parameter set */
354  SCIP_SET* set, /**< global SCIP settings */
355  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
356  const char* paramname, /**< parameter name */
357  char value, /**< new value of the parameter */
358  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
359  )
360 {
361  SCIP_PARAM* param;
362 
363  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
364  if( param != NULL )
365  {
366  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_CHAR);
367 
368  if( SCIPparamIsFixed(param) )
369  {
370  SCIPdebugMessage("hard coded parameter <%s> is fixed and is thus not changed.\n", param->name);
371 
372  return SCIP_OKAY;
373  }
374  SCIP_CALL( SCIPparamSetChar(param, set, messagehdlr, value, quiet) );
375  }
376 #ifndef NDEBUG
377  else
378  {
379  SCIPmessagePrintWarning(messagehdlr, "unknown hard coded char parameter <%s>\n", paramname);
380  }
381 #endif
382 
383  return SCIP_OKAY;
384 }
385 
386 /** if an integer parameter exits with the given parameter name it is set to the new value */
387 static
389  SCIP_PARAMSET* paramset, /**< parameter set */
390  SCIP_SET* set, /**< global SCIP settings */
391  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
392  const char* paramname, /**< parameter name */
393  int value, /**< new value of the parameter */
394  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
395  )
396 {
397  SCIP_PARAM* param;
398 
399  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
400  if( param != NULL )
401  {
402  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
403 
404  if( SCIPparamIsFixed(param) )
405  {
406  SCIPdebugMessage("hard coded parameter <%s> is fixed and is thus not changed.\n", param->name);
407 
408  return SCIP_OKAY;
409  }
410  SCIP_CALL( SCIPparamSetInt(param, set, messagehdlr, value, quiet) );
411  }
412 #ifndef NDEBUG
413  else
414  {
415  SCIPmessagePrintWarning(messagehdlr, "unknown hard coded int parameter <%s>\n", paramname);
416  }
417 #endif
418 
419  return SCIP_OKAY;
420 }
421 
422 /** if a long integer parameter exits with the given parameter name it is set to the new value */
423 static
425  SCIP_PARAMSET* paramset, /**< parameter set */
426  SCIP_SET* set, /**< global SCIP settings */
427  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
428  const char* paramname, /**< parameter name */
429  SCIP_Longint value, /**< new value of the parameter */
430  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
431  )
432 {
433  SCIP_PARAM* param;
434 
435  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
436  if( param != NULL )
437  {
438  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_LONGINT);
439 
440  if( SCIPparamIsFixed(param) )
441  {
442  SCIPdebugMessage("hard coded parameter <%s> is fixed and is thus not changed.\n", param->name);
443 
444  return SCIP_OKAY;
445  }
446  SCIP_CALL( SCIPparamSetLongint(param, set, messagehdlr, value, quiet) );
447  }
448 #ifndef NDEBUG
449  else
450  {
451  SCIPmessagePrintWarning(messagehdlr, "unknown hard coded longint parameter <%s>\n", paramname);
452  }
453 #endif
454 
455  return SCIP_OKAY;
456 }
457 
458 /** if a real parameter exits with the given parameter name it is set to the new value */
459 static
461  SCIP_PARAMSET* paramset, /**< parameter set */
462  SCIP_SET* set, /**< global SCIP settings */
463  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
464  const char* paramname, /**< parameter name */
465  SCIP_Real value, /**< new value of the parameter */
466  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
467  )
468 {
469  SCIP_PARAM* param;
470 
471  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
472  if( param != NULL )
473  {
474  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_REAL);
475 
476  if( SCIPparamIsFixed(param) )
477  {
478  SCIPdebugMessage("hard coded parameter <%s> is fixed and is thus not changed.\n", param->name);
479 
480  return SCIP_OKAY;
481  }
482  SCIP_CALL( SCIPparamSetReal(param, set, messagehdlr, value, quiet) );
483  }
484 #ifndef NDEBUG
485  else
486  {
487  SCIPmessagePrintWarning(messagehdlr, "unknown hard coded real parameter <%s>\n", paramname);
488  }
489 #endif
490 
491  return SCIP_OKAY;
492 }
493 
494 /** copies value of source Bool parameter to target Bool parameter*/
495 static
497  SCIP_PARAM* sourceparam, /**< source Bool parameter */
498  SCIP_PARAM* targetparam, /**< target Bool parameter */
499  SCIP_SET* set, /**< global SCIP settings of target SCIP */
500  SCIP_MESSAGEHDLR* messagehdlr /**< message handler of target SCIP */
501  )
502 {
503  SCIP_Bool value;
504 
505  assert(sourceparam != NULL);
506  assert(targetparam != NULL);
507 
508  /* get value of source parameter and copy it to target parameter */
509  value = SCIPparamGetBool(sourceparam);
510  SCIP_CALL( SCIPparamSetBool(targetparam, set, messagehdlr, value, TRUE) );
511 
512  return SCIP_OKAY;
513 }
514 
515 /** copies value of source int parameter to target int parameter*/
516 static
518  SCIP_PARAM* sourceparam, /**< source int parameter */
519  SCIP_PARAM* targetparam, /**< target int parameter */
520  SCIP_SET* set, /**< global SCIP settings of target SCIP */
521  SCIP_MESSAGEHDLR* messagehdlr /**< message handler of target SCIP */
522  )
523 {
524  int value;
525 
526  assert(sourceparam != NULL);
527  assert(targetparam != NULL);
528 
529  /* get value of source parameter and copy it to target parameter */
530  value = SCIPparamGetInt(sourceparam);
531  SCIP_CALL( SCIPparamSetInt(targetparam, set, messagehdlr, value, TRUE) );
532 
533  return SCIP_OKAY;
534 }
535 
536 /** copies value of source longint parameter to target longint parameter*/
537 static
539  SCIP_PARAM* sourceparam, /**< source longint parameter */
540  SCIP_PARAM* targetparam, /**< target longint parameter */
541  SCIP_SET* set, /**< global SCIP settings of target SCIP */
542  SCIP_MESSAGEHDLR* messagehdlr /**< message handler of target SCIP */
543  )
544 {
545  SCIP_Longint value;
546 
547  assert(sourceparam != NULL);
548  assert(targetparam != NULL);
549 
550  /* get value of source parameter and copy it to target parameter */
551  value = SCIPparamGetLongint(sourceparam);
552  SCIP_CALL( SCIPparamSetLongint(targetparam, set, messagehdlr, value, TRUE) );
553 
554  return SCIP_OKAY;
555 }
556 
557 /** copies value of source real parameter to target real parameter*/
558 static
560  SCIP_PARAM* sourceparam, /**< source real parameter */
561  SCIP_PARAM* targetparam, /**< target real parameter */
562  SCIP_SET* set, /**< global SCIP settings of target SCIP */
563  SCIP_MESSAGEHDLR* messagehdlr /**< message handler of target SCIP */
564  )
565 {
566  SCIP_Real value;
567 
568  assert(sourceparam != NULL);
569  assert(targetparam != NULL);
570 
571  /* get value of source parameter and copy it to target parameter */
572  value = SCIPparamGetReal(sourceparam);
573  SCIP_CALL( SCIPparamSetReal(targetparam, set, messagehdlr, value, TRUE) );
574 
575  return SCIP_OKAY;
576 }
577 
578 /** copies value of source char parameter to target char parameter*/
579 static
581  SCIP_PARAM* sourceparam, /**< source char parameter */
582  SCIP_PARAM* targetparam, /**< target char parameter */
583  SCIP_SET* set, /**< global SCIP settings of target SCIP */
584  SCIP_MESSAGEHDLR* messagehdlr /**< message handler of target SCIP */
585  )
586 {
587  char value;
588 
589  assert(sourceparam != NULL);
590  assert(targetparam != NULL);
591 
592  /* get value of source parameter and copy it to target parameter */
593  value = SCIPparamGetChar(sourceparam);
594  SCIP_CALL( SCIPparamSetChar(targetparam, set, messagehdlr, value, TRUE) );
595 
596  return SCIP_OKAY;
597 }
598 
599 /** copies value of source string parameter to target string parameter*/
600 static
602  SCIP_PARAM* sourceparam, /**< source string parameter */
603  SCIP_PARAM* targetparam, /**< target string parameter */
604  SCIP_SET* set, /**< global SCIP settings of target SCIP */
605  SCIP_MESSAGEHDLR* messagehdlr /**< message handler of target SCIP */
606  )
607 {
608  char* value;
609 
610  assert(sourceparam != NULL);
611  assert(targetparam != NULL);
612 
613  /* get value of source parameter and copy it to target parameter */
614  value = SCIPparamGetString(sourceparam);
615  SCIP_CALL( SCIPparamSetString(targetparam, set, messagehdlr, value, TRUE) );
616 
617  return SCIP_OKAY;
618 }
619 
620 /** returns type of parameter */
622  SCIP_PARAM* param /**< parameter */
623  )
624 {
625  assert(param != NULL);
626 
627  return param->paramtype;
628 }
629 
630 /** returns name of parameter */
631 const char* SCIPparamGetName(
632  SCIP_PARAM* param /**< parameter */
633  )
634 {
635  assert(param != NULL);
636 
637  return param->name;
638 }
639 
640 /** returns description of parameter */
641 const char* SCIPparamGetDesc(
642  SCIP_PARAM* param /**< parameter */
643  )
644 {
645  assert(param != NULL);
646 
647  return param->desc;
648 }
649 
650 /** returns locally defined parameter specific data */
652  SCIP_PARAM* param /**< parameter */
653  )
654 {
655  assert(param != NULL);
656 
657  return param->paramdata;
658 }
659 
660 /** returns whether parameter is advanced */
662  SCIP_PARAM* param /**< parameter */
663  )
664 {
665  assert(param != NULL);
666 
667  return param->isadvanced;
668 }
669 
670 /** returns whether parameter is fixed */
672  SCIP_PARAM* param /**< parameter */
673  )
674 {
675  assert(param != NULL);
676 
677  return param->isfixed;
678 }
679 
680 /** returns value of SCIP_Bool parameter */
682  SCIP_PARAM* param /**< parameter */
683  )
684 {
685  assert(param != NULL);
686  assert(param->paramtype == SCIP_PARAMTYPE_BOOL);
687 
688  if( param->data.boolparam.valueptr != NULL )
689  return *param->data.boolparam.valueptr;
690  else
691  return param->data.boolparam.curvalue;
692 }
693 
694 /** returns default value of SCIP_Bool parameter */
696  SCIP_PARAM* param /**< parameter */
697  )
698 {
699  assert(param != NULL);
700  assert(param->paramtype == SCIP_PARAMTYPE_BOOL);
701 
702  return param->data.boolparam.defaultvalue;
703 }
704 
705 /** returns value of int parameter */
707  SCIP_PARAM* param /**< parameter */
708  )
709 {
710  assert(param != NULL);
711  assert(param->paramtype == SCIP_PARAMTYPE_INT);
712 
713  if( param->data.intparam.valueptr != NULL )
714  return *param->data.intparam.valueptr;
715  else
716  return param->data.intparam.curvalue;
717 }
718 
719 /** returns minimal value of int parameter */
721  SCIP_PARAM* param /**< parameter */
722  )
723 {
724  assert(param != NULL);
725  assert(param->paramtype == SCIP_PARAMTYPE_INT);
726 
727  return param->data.intparam.minvalue;
728 }
729 
730 /** returns maximal value of int parameter */
732  SCIP_PARAM* param /**< parameter */
733  )
734 {
735  assert(param != NULL);
736  assert(param->paramtype == SCIP_PARAMTYPE_INT);
737 
738  return param->data.intparam.maxvalue;
739 }
740 
741 /** returns default value of int parameter */
743  SCIP_PARAM* param /**< parameter */
744  )
745 {
746  assert(param != NULL);
747  assert(param->paramtype == SCIP_PARAMTYPE_INT);
748 
749  return param->data.intparam.defaultvalue;
750 }
751 
752 /** returns value of SCIP_Longint parameter */
754  SCIP_PARAM* param /**< parameter */
755  )
756 {
757  assert(param != NULL);
758  assert(param->paramtype == SCIP_PARAMTYPE_LONGINT);
759 
760  if( param->data.longintparam.valueptr != NULL )
761  return *param->data.longintparam.valueptr;
762  else
763  return param->data.longintparam.curvalue;
764 }
765 
766 /** returns minimal value of longint parameter */
768  SCIP_PARAM* param /**< parameter */
769  )
770 {
771  assert(param != NULL);
772  assert(param->paramtype == SCIP_PARAMTYPE_LONGINT);
773 
774  return param->data.longintparam.minvalue;
775 }
776 
777 /** returns maximal value of longint parameter */
779  SCIP_PARAM* param /**< parameter */
780  )
781 {
782  assert(param != NULL);
783  assert(param->paramtype == SCIP_PARAMTYPE_LONGINT);
784 
785  return param->data.longintparam.maxvalue;
786 }
787 
788 /** returns default value of SCIP_Longint parameter */
790  SCIP_PARAM* param /**< parameter */
791  )
792 {
793  assert(param != NULL);
794  assert(param->paramtype == SCIP_PARAMTYPE_LONGINT);
795 
796  return param->data.longintparam.defaultvalue;
797 }
798 
799 /** returns value of SCIP_Real parameter */
801  SCIP_PARAM* param /**< parameter */
802  )
803 {
804  assert(param != NULL);
805  assert(param->paramtype == SCIP_PARAMTYPE_REAL);
806 
807  if( param->data.realparam.valueptr != NULL )
808  return *param->data.realparam.valueptr;
809  else
810  return param->data.realparam.curvalue;
811 }
812 
813 /** returns minimal value of real parameter */
815  SCIP_PARAM* param /**< parameter */
816  )
817 {
818  assert(param != NULL);
819  assert(param->paramtype == SCIP_PARAMTYPE_REAL);
820 
821  return param->data.realparam.minvalue;
822 }
823 
824 /** returns maximal value of real parameter */
826  SCIP_PARAM* param /**< parameter */
827  )
828 {
829  assert(param != NULL);
830  assert(param->paramtype == SCIP_PARAMTYPE_REAL);
831 
832  return param->data.realparam.maxvalue;
833 }
834 
835 /** returns default value of SCIP_Real parameter */
837  SCIP_PARAM* param /**< parameter */
838  )
839 {
840  assert(param != NULL);
841  assert(param->paramtype == SCIP_PARAMTYPE_REAL);
842 
843  return param->data.realparam.defaultvalue;
844 }
845 
846 /** returns value of char parameter */
848  SCIP_PARAM* param /**< parameter */
849  )
850 {
851  assert(param != NULL);
852  assert(param->paramtype == SCIP_PARAMTYPE_CHAR);
853 
854  if( param->data.charparam.valueptr != NULL )
855  return *param->data.charparam.valueptr;
856  else
857  return param->data.charparam.curvalue;
858 }
859 
860 /** returns allowed values of char parameter, or NULL if everything is allowed */
862  SCIP_PARAM* param /**< parameter */
863  )
864 {
865  assert(param != NULL);
866  assert(param->paramtype == SCIP_PARAMTYPE_CHAR);
867 
868  return param->data.charparam.allowedvalues;
869 }
870 
871 /** returns default value of char parameter */
873  SCIP_PARAM* param /**< parameter */
874  )
875 {
876  assert(param != NULL);
877  assert(param->paramtype == SCIP_PARAMTYPE_CHAR);
878 
879  return param->data.charparam.defaultvalue;
880 }
881 
882 /** returns value of string parameter */
884  SCIP_PARAM* param /**< parameter */
885  )
886 {
887  assert(param != NULL);
888  assert(param->paramtype == SCIP_PARAMTYPE_STRING);
889 
890  if( param->data.stringparam.valueptr != NULL )
891  return *param->data.stringparam.valueptr;
892  else
893  return param->data.stringparam.curvalue;
894 }
895 
896 /** returns default value of String parameter */
898  SCIP_PARAM* param /**< parameter */
899  )
900 {
901  assert(param != NULL);
902  assert(param->paramtype == SCIP_PARAMTYPE_STRING);
903 
904  return param->data.stringparam.defaultvalue;
905 }
906 
907 /** returns whether the parameter is on its default setting */
909  SCIP_PARAM* param /**< parameter */
910  )
911 {
912  assert(param != NULL);
913 
914  switch( param->paramtype )
915  {
916  case SCIP_PARAMTYPE_BOOL:
917  return (SCIPparamGetBool(param) == SCIPparamGetBoolDefault(param));
918 
919  case SCIP_PARAMTYPE_INT:
920  return (SCIPparamGetInt(param) == SCIPparamGetIntDefault(param));
921 
923  return (SCIPparamGetLongint(param) == SCIPparamGetLongintDefault(param));
924 
925  case SCIP_PARAMTYPE_REAL:
926  return EPSZ(SCIPparamGetReal(param) - SCIPparamGetRealDefault(param), 1e-16);
927 
928  case SCIP_PARAMTYPE_CHAR:
929  return (SCIPparamGetChar(param) == SCIPparamGetCharDefault(param));
930 
932  return (strcmp(SCIPparamGetString(param), SCIPparamGetStringDefault(param)) == 0);
933 
934  default:
935  SCIPerrorMessage("unknown parameter type\n");
936  SCIPABORT();
937  return FALSE; /*lint !e527*/
938  }
939 }
940 
941 /** creates a parameter with name and description, does not set the type specific parameter values themselves */
942 static
944  SCIP_PARAM** param, /**< pointer to the parameter */
945  BMS_BLKMEM* blkmem, /**< block memory */
946  const char* name, /**< name of the parameter */
947  const char* desc, /**< description of the parameter */
948  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
949  SCIP_PARAMDATA* paramdata, /**< locally defined parameter specific data */
950  SCIP_Bool isadvanced /**< is the parameter advanced? */
951  )
952 {
953  assert(param != NULL);
954  assert(name != NULL);
955  assert(desc != NULL);
956 
957  SCIP_ALLOC( BMSallocBlockMemory(blkmem, param) );
958 
959  SCIP_ALLOC( BMSduplicateMemoryArray(&(*param)->name, name, strlen(name)+1) );
960  SCIP_ALLOC( BMSduplicateMemoryArray(&(*param)->desc, desc, strlen(desc)+1) );
961 
962  (*param)->paramchgd = paramchgd;
963  (*param)->paramdata = paramdata;
964  (*param)->isadvanced = isadvanced;
965  (*param)->isfixed = FALSE;
966 
967  return SCIP_OKAY;
968 }
969 
970 /** creates a SCIP_Bool parameter, and sets its value to default */
971 static
973  SCIP_PARAM** param, /**< pointer to the parameter */
974  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
975  BMS_BLKMEM* blkmem, /**< block memory */
976  const char* name, /**< name of the parameter */
977  const char* desc, /**< description of the parameter */
978  SCIP_Bool* valueptr, /**< pointer to store the current parameter value, or NULL */
979  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
980  SCIP_Bool defaultvalue, /**< default value of the parameter */
981  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
982  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
983  )
984 {
985  assert(param != NULL);
986  assert(name != NULL);
987 
988  SCIP_CALL( paramCreate(param, blkmem, name, desc, paramchgd, paramdata, isadvanced) );
989 
990  (*param)->paramtype = SCIP_PARAMTYPE_BOOL;
991  (*param)->data.boolparam.valueptr = valueptr;
992  (*param)->data.boolparam.defaultvalue = defaultvalue;
993 
994  SCIP_CALL( SCIPparamSetBool(*param, NULL, messagehdlr, defaultvalue, TRUE) );
995 
996  return SCIP_OKAY;
997 }
998 
999 /** creates a int parameter, and sets its value to default */
1000 static
1002  SCIP_PARAM** param, /**< pointer to the parameter */
1003  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1004  BMS_BLKMEM* blkmem, /**< block memory */
1005  const char* name, /**< name of the parameter */
1006  const char* desc, /**< description of the parameter */
1007  int* valueptr, /**< pointer to store the current parameter value, or NULL */
1008  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1009  int defaultvalue, /**< default value of the parameter */
1010  int minvalue, /**< minimum value for parameter */
1011  int maxvalue, /**< maximum value for parameter */
1012  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1013  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1014  )
1015 {
1016  assert(param != NULL);
1017  assert(name != NULL);
1018 
1019  SCIP_CALL( paramCreate(param, blkmem, name, desc, paramchgd, paramdata, isadvanced) );
1020 
1021  (*param)->paramtype = SCIP_PARAMTYPE_INT;
1022  (*param)->data.intparam.valueptr = valueptr;
1023  (*param)->data.intparam.defaultvalue = defaultvalue;
1024  (*param)->data.intparam.minvalue = minvalue;
1025  (*param)->data.intparam.maxvalue = maxvalue;
1026 
1027  SCIP_CALL( SCIPparamSetInt(*param, NULL, messagehdlr, defaultvalue, TRUE) );
1028 
1029  return SCIP_OKAY;
1030 }
1031 
1032 /** creates a SCIP_Longint parameter, and sets its value to default */
1033 static
1035  SCIP_PARAM** param, /**< pointer to the parameter */
1036  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1037  BMS_BLKMEM* blkmem, /**< block memory */
1038  const char* name, /**< name of the parameter */
1039  const char* desc, /**< description of the parameter */
1040  SCIP_Longint* valueptr, /**< pointer to store the current parameter value, or NULL */
1041  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1042  SCIP_Longint defaultvalue, /**< default value of the parameter */
1043  SCIP_Longint minvalue, /**< minimum value for parameter */
1044  SCIP_Longint maxvalue, /**< maximum value for parameter */
1045  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1046  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1047  )
1048 {
1049  assert(param != NULL);
1050  assert(name != NULL);
1051 
1052  SCIP_CALL( paramCreate(param, blkmem, name, desc, paramchgd, paramdata, isadvanced) );
1053 
1054  (*param)->paramtype = SCIP_PARAMTYPE_LONGINT;
1055  (*param)->data.longintparam.valueptr = valueptr;
1056  (*param)->data.longintparam.defaultvalue = defaultvalue;
1057  (*param)->data.longintparam.minvalue = minvalue;
1058  (*param)->data.longintparam.maxvalue = maxvalue;
1059 
1060  SCIP_CALL( SCIPparamSetLongint(*param, NULL, messagehdlr, defaultvalue, TRUE) );
1061 
1062  return SCIP_OKAY;
1063 }
1064 
1065 /** creates a SCIP_Real parameter, and sets its value to default */
1066 static
1068  SCIP_PARAM** param, /**< pointer to the parameter */
1069  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1070  BMS_BLKMEM* blkmem, /**< block memory */
1071  const char* name, /**< name of the parameter */
1072  const char* desc, /**< description of the parameter */
1073  SCIP_Real* valueptr, /**< pointer to store the current parameter value, or NULL */
1074  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1075  SCIP_Real defaultvalue, /**< default value of the parameter */
1076  SCIP_Real minvalue, /**< minimum value for parameter */
1077  SCIP_Real maxvalue, /**< maximum value for parameter */
1078  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1079  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1080  )
1081 {
1082  assert(param != NULL);
1083  assert(name != NULL);
1084 
1085  SCIP_CALL( paramCreate(param, blkmem, name, desc, paramchgd, paramdata, isadvanced) );
1086 
1087  (*param)->paramtype = SCIP_PARAMTYPE_REAL;
1088  (*param)->data.realparam.valueptr = valueptr;
1089  (*param)->data.realparam.defaultvalue = defaultvalue;
1090  (*param)->data.realparam.minvalue = minvalue;
1091  (*param)->data.realparam.maxvalue = maxvalue;
1092 
1093  SCIP_CALL( SCIPparamSetReal(*param, NULL, messagehdlr, defaultvalue, TRUE) );
1094 
1095  return SCIP_OKAY;
1096 }
1097 
1098 /** creates a char parameter, and sets its value to default */
1099 static
1101  SCIP_PARAM** param, /**< pointer to the parameter */
1102  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1103  BMS_BLKMEM* blkmem, /**< block memory */
1104  const char* name, /**< name of the parameter */
1105  const char* desc, /**< description of the parameter */
1106  char* valueptr, /**< pointer to store the current parameter value, or NULL */
1107  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1108  char defaultvalue, /**< default value of the parameter */
1109  const char* allowedvalues, /**< array with possible parameter values, or NULL if not restricted */
1110  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1111  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1112  )
1113 {
1114  assert(param != NULL);
1115  assert(name != NULL);
1116 
1117  SCIP_CALL( paramCreate(param, blkmem, name, desc, paramchgd, paramdata, isadvanced) );
1118 
1119  (*param)->paramtype = SCIP_PARAMTYPE_CHAR;
1120  (*param)->data.charparam.valueptr = valueptr;
1121  (*param)->data.charparam.defaultvalue = defaultvalue;
1122  if( allowedvalues != NULL )
1123  {
1124  SCIP_ALLOC( BMSduplicateMemoryArray(&(*param)->data.charparam.allowedvalues, allowedvalues, strlen(allowedvalues)+1) );
1125  }
1126  else
1127  (*param)->data.charparam.allowedvalues = NULL;
1128 
1129  SCIP_CALL( SCIPparamSetChar(*param, NULL, messagehdlr, defaultvalue, TRUE) );
1130 
1131  return SCIP_OKAY;
1132 }
1133 
1134 /** creates a string parameter, and sets its value to default */
1135 static
1137  SCIP_PARAM** param, /**< pointer to the parameter */
1138  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1139  BMS_BLKMEM* blkmem, /**< block memory */
1140  const char* name, /**< name of the parameter */
1141  const char* desc, /**< description of the parameter */
1142  char** valueptr, /**< pointer to store the current parameter value, or NULL */
1143  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1144  const char* defaultvalue, /**< default value of the parameter */
1145  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1146  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1147  )
1148 {
1149  assert(param != NULL);
1150  assert(name != NULL);
1151  assert(valueptr == NULL || *valueptr == NULL);
1152  assert(defaultvalue != NULL);
1153 
1154  SCIP_CALL( paramCreate(param, blkmem, name, desc, paramchgd, paramdata, isadvanced) );
1155 
1156  (*param)->paramtype = SCIP_PARAMTYPE_STRING;
1157  (*param)->data.stringparam.valueptr = valueptr;
1158  SCIP_ALLOC( BMSduplicateMemoryArray(&(*param)->data.stringparam.defaultvalue, defaultvalue, strlen(defaultvalue)+1) );
1159  (*param)->data.stringparam.curvalue = NULL;
1160 
1161  SCIP_CALL( SCIPparamSetString(*param, NULL, messagehdlr, defaultvalue, TRUE) );
1162 
1163  return SCIP_OKAY;
1164 }
1165 
1166 /** frees a single parameter */
1167 static
1169  SCIP_PARAM** param, /**< pointer to the parameter */
1170  BMS_BLKMEM* blkmem /**< block memory */
1171  )
1172 {
1173  assert(param != NULL);
1174  assert(*param != NULL);
1175 
1176  switch( (*param)->paramtype )
1177  {
1178  case SCIP_PARAMTYPE_BOOL:
1179  case SCIP_PARAMTYPE_INT:
1181  case SCIP_PARAMTYPE_REAL:
1182  break;
1183  case SCIP_PARAMTYPE_CHAR:
1184  BMSfreeMemoryArrayNull(&(*param)->data.charparam.allowedvalues);
1185  break;
1186  case SCIP_PARAMTYPE_STRING:
1187  BMSfreeMemoryArray(&(*param)->data.stringparam.defaultvalue);
1188  if( (*param)->data.stringparam.valueptr == NULL )
1189  {
1190  BMSfreeMemoryArray(&(*param)->data.stringparam.curvalue);
1191  }
1192  else
1193  {
1194  BMSfreeMemoryArray((*param)->data.stringparam.valueptr);
1195  }
1196  break;
1197  default:
1198  SCIPerrorMessage("invalid parameter type\n");
1199  /* just continuing the function in this case seems save */
1200  SCIPABORT();
1201  }
1202 
1203  BMSfreeMemoryArray(&(*param)->name);
1204  BMSfreeMemoryArray(&(*param)->desc);
1205  BMSfreeBlockMemory(blkmem, param);
1206 }
1207 
1208 /** sets SCIP_Bool parameter according to the value of the given string */
1209 static
1211  SCIP_PARAM* param, /**< parameter */
1212  SCIP_SET* set, /**< global SCIP settings */
1213  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1214  char* valuestr /**< value in string format (may be modified during parse) */
1215  )
1216 {
1217  assert(param != NULL);
1218  assert(param->paramtype == SCIP_PARAMTYPE_BOOL);
1219  assert(set != NULL);
1220  assert(valuestr != NULL);
1221 
1222  if( strcasecmp(valuestr, "TRUE") == 0 )
1223  {
1224  SCIP_CALL( SCIPparamSetBool(param, set, messagehdlr, TRUE, TRUE) );
1225  }
1226  else if( strcasecmp(valuestr, "FALSE") == 0 )
1227  {
1228  SCIP_CALL( SCIPparamSetBool(param, set, messagehdlr, FALSE, TRUE) );
1229  }
1230  else
1231  {
1232  SCIPerrorMessage("invalid parameter value <%s> for SCIP_Bool parameter <%s>\n", valuestr, param->name);
1233  return SCIP_READERROR;
1234  }
1235 
1236  return SCIP_OKAY;
1237 }
1238 
1239 /** sets int parameter according to the value of the given string */
1240 static
1242  SCIP_PARAM* param, /**< parameter */
1243  SCIP_SET* set, /**< global SCIP settings */
1244  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1245  char* valuestr /**< value in string format (may be modified during parse) */
1246  )
1247 {
1248  int value;
1249 
1250  assert(param != NULL);
1251  assert(param->paramtype == SCIP_PARAMTYPE_INT);
1252  assert(set != NULL);
1253  assert(valuestr != NULL);
1254 
1255  if( sscanf(valuestr, "%d", &value) == 1 )
1256  {
1257  SCIP_CALL( SCIPparamSetInt(param, set, messagehdlr, value, TRUE) );
1258  }
1259  else
1260  {
1261  SCIPerrorMessage("invalid parameter value <%s> for int parameter <%s>\n", valuestr, param->name);
1262  return SCIP_READERROR;
1263  }
1264 
1265  return SCIP_OKAY;
1266 }
1267 
1268 /** sets SCIP_Longint parameter according to the value of the given string */
1269 static
1271  SCIP_PARAM* param, /**< parameter */
1272  SCIP_SET* set, /**< global SCIP settings */
1273  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1274  char* valuestr /**< value in string format (may be modified during parse) */
1275  )
1276 {
1277  SCIP_Longint value;
1278 
1279  assert(param != NULL);
1280  assert(param->paramtype == SCIP_PARAMTYPE_LONGINT);
1281  assert(set != NULL);
1282  assert(valuestr != NULL);
1283 
1284  if( sscanf(valuestr, "%"SCIP_LONGINT_FORMAT, &value) == 1 )
1285  {
1286  SCIP_CALL( SCIPparamSetLongint(param, set, messagehdlr, value, TRUE) );
1287  }
1288  else
1289  {
1290  SCIPerrorMessage("invalid parameter value <%s> for SCIP_Longint parameter <%s>\n", valuestr, param->name);
1291  return SCIP_READERROR;
1292  }
1293 
1294  return SCIP_OKAY;
1295 }
1296 
1297 /** sets SCIP_Real parameter according to the value of the given string */
1298 static
1300  SCIP_PARAM* param, /**< parameter */
1301  SCIP_SET* set, /**< global SCIP settings */
1302  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1303  char* valuestr /**< value in string format (may be modified during parse) */
1304  )
1305 {
1306  SCIP_Real value;
1307 
1308  assert(param != NULL);
1309  assert(param->paramtype == SCIP_PARAMTYPE_REAL);
1310  assert(set != NULL);
1311  assert(valuestr != NULL);
1312 
1313  if( sscanf(valuestr, "%" SCIP_REAL_FORMAT, &value) == 1 )
1314  {
1315  SCIP_CALL( SCIPparamSetReal(param, set, messagehdlr, value, TRUE) );
1316  }
1317  else
1318  {
1319  SCIPerrorMessage("invalid parameter value <%s> for SCIP_Real parameter <%s>\n", valuestr, param->name);
1320  return SCIP_READERROR;
1321  }
1322 
1323  return SCIP_OKAY;
1324 }
1325 
1326 /** sets Char parameter according to the value of the given string */
1327 static
1329  SCIP_PARAM* param, /**< parameter */
1330  SCIP_SET* set, /**< global SCIP settings */
1331  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1332  char* valuestr /**< value in string format (may be modified during parse) */
1333  )
1334 {
1335  char value;
1336 
1337  assert(param != NULL);
1338  assert(param->paramtype == SCIP_PARAMTYPE_CHAR);
1339  assert(set != NULL);
1340  assert(valuestr != NULL);
1341 
1342  if( sscanf(valuestr, "%c", &value) == 1 )
1343  {
1344  SCIP_CALL( SCIPparamSetChar(param, set, messagehdlr, value, TRUE) );
1345  }
1346  else
1347  {
1348  SCIPerrorMessage("invalid parameter value <%s> for char parameter <%s>\n", valuestr, param->name);
1349  return SCIP_READERROR;
1350  }
1351 
1352  return SCIP_OKAY;
1353 }
1354 
1355 /** sets String parameter according to the value of the given string */
1356 static
1358  SCIP_PARAM* param, /**< parameter */
1359  SCIP_SET* set, /**< global SCIP settings */
1360  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1361  char* valuestr /**< value in string format (may be modified during parse) */
1362  )
1363 {
1364  unsigned int len;
1365 
1366  assert(param != NULL);
1367  assert(param->paramtype == SCIP_PARAMTYPE_STRING);
1368  assert(set != NULL);
1369  assert(valuestr != NULL);
1370 
1371  /* check for quotes */
1372  len = (unsigned int) strlen(valuestr);
1373  if( len <= 1 || valuestr[0] != '"' || valuestr[len-1] != '"' )
1374  {
1375  SCIPerrorMessage("invalid parameter value <%s> for string parameter <%s> (string has to be in double quotes)\n",
1376  valuestr, param->name);
1377  return SCIP_READERROR;
1378  }
1379 
1380  /* remove the quotes */
1381  valuestr[len-1] = '\0';
1382  valuestr++;
1383  SCIP_CALL( SCIPparamSetString(param, set, messagehdlr, valuestr, TRUE) );
1384 
1385  return SCIP_OKAY;
1386 }
1387 
1388 
1389 /*
1390  * Parameter set methods
1391  */
1392 
1393 /** creates parameter set */
1395  SCIP_PARAMSET** paramset, /**< pointer to store the parameter set */
1396  BMS_BLKMEM* blkmem /**< block memory */
1397  )
1398 {
1399  assert(paramset != NULL);
1400 
1401  SCIP_ALLOC( BMSallocMemory(paramset) );
1402 
1403  SCIP_CALL( SCIPhashtableCreate(&(*paramset)->hashtable, blkmem, SCIP_HASHSIZE_PARAMS,
1404  hashGetKeyParam, SCIPhashKeyEqString, SCIPhashKeyValString, NULL) );
1405 
1406  (*paramset)->params = NULL;
1407  (*paramset)->nparams = 0;
1408  (*paramset)->paramssize = 0;
1409 
1410  return SCIP_OKAY;
1411 }
1412 
1413 /** frees parameter set */
1415  SCIP_PARAMSET** paramset, /**< pointer to the parameter set */
1416  BMS_BLKMEM* blkmem /**< block memory */
1417  )
1418 {
1419  int i;
1420 
1421  assert(paramset != NULL);
1422  assert(*paramset != NULL);
1423  assert((*paramset)->paramssize == 0 || (*paramset)->params != NULL);
1424  assert((*paramset)->paramssize >= (*paramset)->nparams);
1425 
1426  for( i = (*paramset)->nparams - 1; i >= 0; --i )
1427  {
1428  paramFree(&(*paramset)->params[i], blkmem);
1429  }
1430 
1431  SCIPhashtableFree(&(*paramset)->hashtable);
1432 
1433  BMSfreeMemoryArrayNull(&(*paramset)->params);
1434  BMSfreeMemory(paramset);
1435 }
1436 
1437 /** adds parameter to the parameter set */
1438 static
1440  SCIP_PARAMSET* paramset, /**< parameter set */
1441  SCIP_PARAM* param /**< parameter to add */
1442  )
1443 {
1444  assert(paramset != NULL);
1445  assert(param != NULL);
1446 
1447  /* insert the parameter name to the hash table */
1448  SCIP_CALL( SCIPhashtableSafeInsert(paramset->hashtable, (void*)param) );
1449 
1450  /* ensure, that there is enough space in the params array */
1451  if( paramset->nparams >= paramset->paramssize )
1452  {
1453  paramset->paramssize *= 2;
1454  paramset->paramssize = MAX(paramset->paramssize, paramset->nparams+1);
1455  SCIP_ALLOC( BMSreallocMemoryArray(&paramset->params, paramset->paramssize) );
1456  }
1457  assert(paramset->nparams < paramset->paramssize);
1458 
1459  /* insert parameter in the params array */
1460  paramset->params[paramset->nparams] = param;
1461  paramset->nparams++;
1462 
1463  return SCIP_OKAY;
1464 }
1465 
1466 /** creates a SCIP_Bool parameter, sets it to its default value, and adds it to the parameter set */
1468  SCIP_PARAMSET* paramset, /**< parameter set */
1469  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1470  BMS_BLKMEM* blkmem, /**< block memory */
1471  const char* name, /**< name of the parameter */
1472  const char* desc, /**< description of the parameter */
1473  SCIP_Bool* valueptr, /**< pointer to store the current parameter value, or NULL */
1474  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1475  SCIP_Bool defaultvalue, /**< default value of the parameter */
1476  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1477  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1478  )
1479 {
1480  SCIP_PARAM* param;
1481 
1482  assert(paramset != NULL);
1483 
1484  /* create the parameter */
1485  SCIP_CALL( paramCreateBool(&param, messagehdlr, blkmem, name, desc, valueptr, isadvanced, defaultvalue, paramchgd, paramdata) );
1486 
1487  /* add parameter to the parameter set */
1488  SCIP_CALL( paramsetAdd(paramset, param) );
1489 
1490  return SCIP_OKAY;
1491 }
1492 
1493 /** creates a int parameter, sets it to its default value, and adds it to the parameter set */
1495  SCIP_PARAMSET* paramset, /**< parameter set */
1496  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1497  BMS_BLKMEM* blkmem, /**< block memory */
1498  const char* name, /**< name of the parameter */
1499  const char* desc, /**< description of the parameter */
1500  int* valueptr, /**< pointer to store the current parameter value, or NULL */
1501  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1502  int defaultvalue, /**< default value of the parameter */
1503  int minvalue, /**< minimum value for parameter */
1504  int maxvalue, /**< maximum value for parameter */
1505  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1506  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1507  )
1508 {
1509  SCIP_PARAM* param;
1510 
1511  assert(paramset != NULL);
1512 
1513  /* create the parameter */
1514  SCIP_CALL( paramCreateInt(&param, messagehdlr, blkmem, name, desc, valueptr, isadvanced, defaultvalue, minvalue, maxvalue,
1515  paramchgd, paramdata) );
1516 
1517  /* add parameter to the parameter set */
1518  SCIP_CALL( paramsetAdd(paramset, param) );
1519 
1520  return SCIP_OKAY;
1521 }
1522 
1523 /** creates a SCIP_Longint parameter, sets it to its default value, and adds it to the parameter set */
1525  SCIP_PARAMSET* paramset, /**< parameter set */
1526  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1527  BMS_BLKMEM* blkmem, /**< block memory */
1528  const char* name, /**< name of the parameter */
1529  const char* desc, /**< description of the parameter */
1530  SCIP_Longint* valueptr, /**< pointer to store the current parameter value, or NULL */
1531  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1532  SCIP_Longint defaultvalue, /**< default value of the parameter */
1533  SCIP_Longint minvalue, /**< minimum value for parameter */
1534  SCIP_Longint maxvalue, /**< maximum value for parameter */
1535  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1536  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1537  )
1538 {
1539  SCIP_PARAM* param;
1540 
1541  assert(paramset != NULL);
1542 
1543  /* create the parameter */
1544  SCIP_CALL( paramCreateLongint(&param, messagehdlr, blkmem, name, desc, valueptr, isadvanced, defaultvalue, minvalue, maxvalue,
1545  paramchgd, paramdata) );
1546 
1547  /* add parameter to the parameter set */
1548  SCIP_CALL( paramsetAdd(paramset, param) );
1549 
1550  return SCIP_OKAY;
1551 }
1552 
1553 /** creates a SCIP_Real parameter, sets it to its default value, and adds it to the parameter set */
1555  SCIP_PARAMSET* paramset, /**< parameter set */
1556  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1557  BMS_BLKMEM* blkmem, /**< block memory */
1558  const char* name, /**< name of the parameter */
1559  const char* desc, /**< description of the parameter */
1560  SCIP_Real* valueptr, /**< pointer to store the current parameter value, or NULL */
1561  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1562  SCIP_Real defaultvalue, /**< default value of the parameter */
1563  SCIP_Real minvalue, /**< minimum value for parameter */
1564  SCIP_Real maxvalue, /**< maximum value for parameter */
1565  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1566  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1567  )
1568 {
1569  SCIP_PARAM* param;
1570 
1571  assert(paramset != NULL);
1572 
1573  /* create the parameter */
1574  SCIP_CALL( paramCreateReal(&param, messagehdlr, blkmem, name, desc, valueptr, isadvanced, defaultvalue, minvalue, maxvalue,
1575  paramchgd, paramdata) );
1576 
1577  /* add parameter to the parameter set */
1578  SCIP_CALL( paramsetAdd(paramset, param) );
1579 
1580  return SCIP_OKAY;
1581 }
1582 
1583 /** creates a char parameter, sets it to its default value, and adds it to the parameter set */
1585  SCIP_PARAMSET* paramset, /**< parameter set */
1586  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1587  BMS_BLKMEM* blkmem, /**< block memory */
1588  const char* name, /**< name of the parameter */
1589  const char* desc, /**< description of the parameter */
1590  char* valueptr, /**< pointer to store the current parameter value, or NULL */
1591  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1592  char defaultvalue, /**< default value of the parameter */
1593  const char* allowedvalues, /**< array with possible parameter values, or NULL if not restricted */
1594  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1595  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1596  )
1597 {
1598  SCIP_PARAM* param;
1599 
1600  assert(paramset != NULL);
1601 
1602  /* create the parameter */
1603  SCIP_CALL( paramCreateChar(&param, messagehdlr, blkmem, name, desc, valueptr, isadvanced, defaultvalue, allowedvalues,
1604  paramchgd, paramdata) );
1605 
1606  /* add parameter to the parameter set */
1607  SCIP_CALL( paramsetAdd(paramset, param) );
1608 
1609  return SCIP_OKAY;
1610 }
1611 
1612 /** creates a string parameter, sets it to its default value, and adds it to the parameter set */
1614  SCIP_PARAMSET* paramset, /**< parameter set */
1615  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1616  BMS_BLKMEM* blkmem, /**< block memory */
1617  const char* name, /**< name of the parameter */
1618  const char* desc, /**< description of the parameter */
1619  char** valueptr, /**< pointer to store the current parameter value, or NULL */
1620  SCIP_Bool isadvanced, /**< is this parameter an advanced parameter? */
1621  const char* defaultvalue, /**< default value of the parameter */
1622  SCIP_DECL_PARAMCHGD ((*paramchgd)), /**< change information method of parameter */
1623  SCIP_PARAMDATA* paramdata /**< locally defined parameter specific data */
1624  )
1625 {
1626  SCIP_PARAM* param;
1627 
1628  assert(paramset != NULL);
1629 
1630  /* create the parameter */
1631  SCIP_CALL( paramCreateString(&param, messagehdlr, blkmem, name, desc, valueptr, isadvanced, defaultvalue, paramchgd, paramdata) );
1632 
1633  /* add parameter to the parameter set */
1634  SCIP_CALL( paramsetAdd(paramset, param) );
1635 
1636  return SCIP_OKAY;
1637 }
1638 
1639 /** returns the name of the given parameter type */
1640 static
1641 const char* paramtypeGetName(
1642  SCIP_PARAMTYPE paramtype /**< type of parameter */
1643  )
1644 {
1645  static const char* paramtypename[] = {
1646  "Bool", /* SCIP_PARAMTYPE_BOOL = 0 */
1647  "int", /* SCIP_PARAMTYPE_INT = 1 */
1648  "Longint", /* SCIP_PARAMTYPE_LONGINT = 2 */
1649  "Real", /* SCIP_PARAMTYPE_REAL = 3 */
1650  "char", /* SCIP_PARAMTYPE_CHAR = 4 */
1651  "string" /* SCIP_PARAMTYPE_STRING = 5 */
1652  };
1653 
1654  return paramtypename[(int)paramtype];
1655 }
1656 
1657 /** returns whether an existing parameter is fixed */
1659  SCIP_PARAMSET* paramset, /**< parameter set */
1660  const char* name /**< name of the parameter */
1661  )
1662 {
1663  SCIP_PARAM* param;
1664 
1665  assert(paramset != NULL);
1666 
1667  /* retrieve parameter from hash table */
1668  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1669  if( param == NULL )
1670  {
1671  SCIPerrorMessage("parameter <%s> unknown\n", name);
1672  SCIPABORT();
1673  return FALSE; /*lint !e527*/
1674  }
1675 
1676  return SCIPparamIsFixed(param);
1677 }
1678 
1679 /** returns the pointer to an existing SCIP parameter */
1681  SCIP_PARAMSET* paramset, /**< parameter set */
1682  const char* name /**< name of the parameter */
1683  )
1684 {
1685  assert(paramset != NULL);
1686 
1687  /* retrieve parameter from hash table and return it */
1688  return (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1689 }
1690 
1691 /** gets the value of an existing SCIP_Bool parameter */
1693  SCIP_PARAMSET* paramset, /**< parameter set */
1694  const char* name, /**< name of the parameter */
1695  SCIP_Bool* value /**< pointer to store the parameter */
1696  )
1697 {
1698  SCIP_PARAM* param;
1699 
1700  assert(paramset != NULL);
1701  assert(value != NULL);
1702 
1703  /* retrieve parameter from hash table */
1704  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1705  if( param == NULL )
1706  {
1707  SCIPerrorMessage("parameter <%s> unknown\n", name);
1708  return SCIP_PARAMETERUNKNOWN;
1709  }
1710  if( param->paramtype != SCIP_PARAMTYPE_BOOL )
1711  {
1712  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
1714  return SCIP_PARAMETERWRONGTYPE;
1715  }
1716 
1717  /* get the parameter's current value */
1718  *value = SCIPparamGetBool(param);
1719 
1720  return SCIP_OKAY;
1721 }
1722 
1723 /** gets the value of an existing int parameter */
1725  SCIP_PARAMSET* paramset, /**< parameter set */
1726  const char* name, /**< name of the parameter */
1727  int* value /**< pointer to store the parameter */
1728  )
1729 {
1730  SCIP_PARAM* param;
1731 
1732  assert(paramset != NULL);
1733  assert(value != NULL);
1734 
1735  /* retrieve parameter from hash table */
1736  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1737  if( param == NULL )
1738  {
1739  SCIPerrorMessage("parameter <%s> unknown\n", name);
1740  return SCIP_PARAMETERUNKNOWN;
1741  }
1742  if( param->paramtype != SCIP_PARAMTYPE_INT )
1743  {
1744  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
1746  return SCIP_PARAMETERWRONGTYPE;
1747  }
1748 
1749  /* get the parameter's current value */
1750  *value = SCIPparamGetInt(param);
1751 
1752  return SCIP_OKAY;
1753 }
1754 
1755 /** gets the value of an existing SCIP_Longint parameter */
1757  SCIP_PARAMSET* paramset, /**< parameter set */
1758  const char* name, /**< name of the parameter */
1759  SCIP_Longint* value /**< pointer to store the parameter */
1760  )
1761 {
1762  SCIP_PARAM* param;
1763 
1764  assert(paramset != NULL);
1765  assert(value != NULL);
1766 
1767  /* retrieve parameter from hash table */
1768  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1769  if( param == NULL )
1770  {
1771  SCIPerrorMessage("parameter <%s> unknown\n", name);
1772  return SCIP_PARAMETERUNKNOWN;
1773  }
1774  if( param->paramtype != SCIP_PARAMTYPE_LONGINT )
1775  {
1776  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
1778  return SCIP_PARAMETERWRONGTYPE;
1779  }
1780 
1781  /* get the parameter's current value */
1782  *value = SCIPparamGetLongint(param);
1783 
1784  return SCIP_OKAY;
1785 }
1786 
1787 /** gets the value of an existing SCIP_Real parameter */
1789  SCIP_PARAMSET* paramset, /**< parameter set */
1790  const char* name, /**< name of the parameter */
1791  SCIP_Real* value /**< pointer to store the parameter */
1792  )
1793 {
1794  SCIP_PARAM* param;
1795 
1796  assert(paramset != NULL);
1797  assert(value != NULL);
1798 
1799  /* retrieve parameter from hash table */
1800  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1801  if( param == NULL )
1802  {
1803  SCIPerrorMessage("parameter <%s> unknown\n", name);
1804  return SCIP_PARAMETERUNKNOWN;
1805  }
1806  if( param->paramtype != SCIP_PARAMTYPE_REAL )
1807  {
1808  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
1810  return SCIP_PARAMETERWRONGTYPE;
1811  }
1812 
1813  /* get the parameter's current value */
1814  *value = SCIPparamGetReal(param);
1815 
1816  return SCIP_OKAY;
1817 }
1818 
1819 /** gets the value of an existing char parameter */
1821  SCIP_PARAMSET* paramset, /**< parameter set */
1822  const char* name, /**< name of the parameter */
1823  char* value /**< pointer to store the parameter */
1824  )
1825 {
1826  SCIP_PARAM* param;
1827 
1828  assert(paramset != NULL);
1829  assert(value != NULL);
1830 
1831  /* retrieve parameter from hash table */
1832  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1833  if( param == NULL )
1834  {
1835  SCIPerrorMessage("parameter <%s> unknown\n", name);
1836  return SCIP_PARAMETERUNKNOWN;
1837  }
1838  if( param->paramtype != SCIP_PARAMTYPE_CHAR )
1839  {
1840  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
1842  return SCIP_PARAMETERWRONGTYPE;
1843  }
1844 
1845  /* get the parameter's current value */
1846  *value = SCIPparamGetChar(param);
1847 
1848  return SCIP_OKAY;
1849 }
1850 
1851 /** gets the value of an existing string parameter */
1853  SCIP_PARAMSET* paramset, /**< parameter set */
1854  const char* name, /**< name of the parameter */
1855  char** value /**< pointer to store the parameter */
1856  )
1857 {
1858  SCIP_PARAM* param;
1859 
1860  assert(paramset != NULL);
1861  assert(value != NULL);
1862 
1863  /* retrieve parameter from hash table */
1864  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1865  if( param == NULL )
1866  {
1867  SCIPerrorMessage("parameter <%s> unknown\n", name);
1868  return SCIP_PARAMETERUNKNOWN;
1869  }
1870  if( param->paramtype != SCIP_PARAMTYPE_STRING )
1871  {
1872  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
1874  return SCIP_PARAMETERWRONGTYPE;
1875  }
1876 
1877  /* get the parameter's current value */
1878  *value = SCIPparamGetString(param);
1879 
1880  return SCIP_OKAY;
1881 }
1882 
1883 /** changes the fixing status of an existing parameter */
1885  SCIP_PARAMSET* paramset, /**< parameter set */
1886  const char* name, /**< name of the parameter */
1887  SCIP_Bool fixed /**< new fixing status of the parameter */
1888  )
1889 {
1890  SCIP_PARAM* param;
1891 
1892  assert(paramset != NULL);
1893 
1894  /* retrieve parameter from hash table */
1895  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1896  if( param == NULL )
1897  {
1898  SCIPerrorMessage("parameter <%s> unknown\n", name);
1899  return SCIP_PARAMETERUNKNOWN;
1900  }
1901 
1902  SCIPparamSetFixed(param, fixed);
1903 
1904  return SCIP_OKAY;
1905 }
1906 
1907 /** changes the value of an existing parameter */
1909  SCIP_PARAMSET* paramset, /**< parameter set */
1910  SCIP_SET* set, /**< global SCIP settings */
1911  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1912  const char* name, /**< name of the parameter */
1913  void* value /**< new value of the parameter */
1914  )
1915 {
1916  SCIP_PARAM* param;
1917 
1918  assert(paramset != NULL);
1919  assert(set != NULL);
1920 
1921  /* retrieve parameter from hash table */
1922  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1923  if( param == NULL )
1924  {
1925  SCIPerrorMessage("parameter <%s> unknown\n", name);
1926  return SCIP_PARAMETERUNKNOWN;
1927  }
1928 
1929  switch( param->paramtype )
1930  {
1931  case SCIP_PARAMTYPE_BOOL:
1932  /* set the parameter's current value */
1933  SCIP_CALL( SCIPparamSetBool(param, set, messagehdlr, (SCIP_Bool) (size_t) value, TRUE) );
1934  break;
1935 
1936  case SCIP_PARAMTYPE_INT:
1937  /* set the parameter's current value */
1938  SCIP_CALL( SCIPparamSetInt(param, set, messagehdlr, (int) (size_t) value, TRUE) );
1939  break;
1940 
1942  /* set the parameter's current value */
1943  SCIP_CALL( SCIPparamSetLongint(param, set, messagehdlr, (SCIP_Longint) (size_t) value, TRUE) );
1944  break;
1945 
1946  case SCIP_PARAMTYPE_REAL:
1947  /* set the parameter's current value */
1948  SCIP_CALL( SCIPparamSetReal(param, set, messagehdlr, (SCIP_Real) (size_t) value, TRUE) );
1949  break;
1950 
1951  case SCIP_PARAMTYPE_CHAR:
1952  /* set the parameter's current value */
1953  SCIP_CALL( SCIPparamSetChar(param, set, messagehdlr, (char) (size_t) value, TRUE) );
1954  break;
1955 
1956  case SCIP_PARAMTYPE_STRING:
1957  /* set the parameter's current value */
1958  SCIP_CALL( SCIPparamSetString(param, set, messagehdlr, (char*) value, TRUE) );
1959  break;
1960 
1961  default:
1962  SCIPerrorMessage("unknown parameter type\n");
1963  return SCIP_INVALIDDATA;
1964  }
1965 
1966  return SCIP_OKAY;
1967 }
1968 
1969 /** changes the value of an existing SCIP_Bool parameter */
1971  SCIP_PARAMSET* paramset, /**< parameter set */
1972  SCIP_SET* set, /**< global SCIP settings */
1973  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
1974  const char* name, /**< name of the parameter */
1975  SCIP_Bool value /**< new value of the parameter */
1976  )
1977 {
1978  SCIP_PARAM* param;
1979 
1980  assert(paramset != NULL);
1981  assert(set != NULL);
1982 
1983  /* retrieve parameter from hash table */
1984  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
1985  if( param == NULL )
1986  {
1987  SCIPerrorMessage("parameter <%s> unknown\n", name);
1988  return SCIP_PARAMETERUNKNOWN;
1989  }
1990  if( param->paramtype != SCIP_PARAMTYPE_BOOL )
1991  {
1992  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
1994  return SCIP_PARAMETERWRONGTYPE;
1995  }
1996 
1997  /* set the parameter's current value */
1998  SCIP_CALL( SCIPparamSetBool(param, set, messagehdlr, value, TRUE) );
1999 
2000  return SCIP_OKAY;
2001 }
2002 
2003 /** changes the default value of an existing SCIP_Bool parameter */
2005  SCIP_PARAMSET* paramset, /**< parameter set */
2006  const char* name, /**< name of the parameter */
2007  SCIP_Bool defaultvalue /**< new default value of the parameter */
2008  )
2009 {
2010  SCIP_PARAM* param;
2011 
2012  assert(paramset != NULL);
2013 
2014  /* retrieve parameter from hash table */
2015  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
2016  if( param == NULL )
2017  {
2018  SCIPerrorMessage("parameter <%s> unknown\n", name);
2019  return SCIP_PARAMETERUNKNOWN;
2020  }
2021  if( param->paramtype != SCIP_PARAMTYPE_BOOL )
2022  {
2023  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
2025  return SCIP_PARAMETERWRONGTYPE;
2026  }
2027 
2028  /* set the parameter's default value */
2029  SCIPparamSetDefaultBool(param, defaultvalue);
2030 
2031  return SCIP_OKAY;
2032 }
2033 
2034 /** changes the value of an existing int parameter */
2036  SCIP_PARAMSET* paramset, /**< parameter set */
2037  SCIP_SET* set, /**< global SCIP settings */
2038  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2039  const char* name, /**< name of the parameter */
2040  int value /**< new value of the parameter */
2041  )
2042 {
2043  SCIP_PARAM* param;
2044 
2045  assert(paramset != NULL);
2046  assert(set != NULL);
2047 
2048  /* retrieve parameter from hash table */
2049  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
2050  if( param == NULL )
2051  {
2052  SCIPerrorMessage("parameter <%s> unknown\n", name);
2053  return SCIP_PARAMETERUNKNOWN;
2054  }
2055  if( param->paramtype != SCIP_PARAMTYPE_INT )
2056  {
2057  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
2059  return SCIP_PARAMETERWRONGTYPE;
2060  }
2061 
2062  /* set the parameter's current value */
2063  SCIP_CALL( SCIPparamSetInt(param, set, messagehdlr, value, TRUE) );
2064 
2065  return SCIP_OKAY;
2066 }
2067 
2068 /** changes the default value of an existing int parameter */
2070  SCIP_PARAMSET* paramset, /**< parameter set */
2071  const char* name, /**< name of the parameter */
2072  int defaultvalue /**< new default value of the parameter */
2073  )
2074 {
2075  SCIP_PARAM* param;
2076 
2077  assert(paramset != NULL);
2078 
2079  /* retrieve parameter from hash table */
2080  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
2081  if( param == NULL )
2082  {
2083  SCIPerrorMessage("parameter <%s> unknown\n", name);
2084  return SCIP_PARAMETERUNKNOWN;
2085  }
2086  if( param->paramtype != SCIP_PARAMTYPE_INT )
2087  {
2088  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
2090  return SCIP_PARAMETERWRONGTYPE;
2091  }
2092 
2093  /* set the parameter's default value */
2094  SCIPparamSetDefaultInt(param, defaultvalue);
2095 
2096  return SCIP_OKAY;
2097 }
2098 
2099 /** changes the value of an existing SCIP_Longint parameter */
2101  SCIP_PARAMSET* paramset, /**< parameter set */
2102  SCIP_SET* set, /**< global SCIP settings */
2103  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2104  const char* name, /**< name of the parameter */
2105  SCIP_Longint value /**< new value of the parameter */
2106  )
2107 {
2108  SCIP_PARAM* param;
2109 
2110  assert(paramset != NULL);
2111  assert(set != NULL);
2112 
2113  /* retrieve parameter from hash table */
2114  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
2115  if( param == NULL )
2116  {
2117  SCIPerrorMessage("parameter <%s> unknown\n", name);
2118  return SCIP_PARAMETERUNKNOWN;
2119  }
2120  if( param->paramtype != SCIP_PARAMTYPE_LONGINT )
2121  {
2122  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
2124  return SCIP_PARAMETERWRONGTYPE;
2125  }
2126 
2127  /* set the parameter's current value */
2128  SCIP_CALL( SCIPparamSetLongint(param, set, messagehdlr, value, TRUE) );
2129 
2130  return SCIP_OKAY;
2131 }
2132 
2133 /** changes the value of an existing SCIP_Real parameter */
2135  SCIP_PARAMSET* paramset, /**< parameter set */
2136  SCIP_SET* set, /**< global SCIP settings */
2137  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2138  const char* name, /**< name of the parameter */
2139  SCIP_Real value /**< new value of the parameter */
2140  )
2141 {
2142  SCIP_PARAM* param;
2143 
2144  assert(paramset != NULL);
2145  assert(set != NULL);
2146 
2147  /* retrieve parameter from hash table */
2148  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
2149  if( param == NULL )
2150  {
2151  SCIPerrorMessage("parameter <%s> unknown\n", name);
2152  return SCIP_PARAMETERUNKNOWN;
2153  }
2154  if( param->paramtype != SCIP_PARAMTYPE_REAL )
2155  {
2156  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
2158  return SCIP_PARAMETERWRONGTYPE;
2159  }
2160 
2161  /* set the parameter's current value */
2162  SCIP_CALL( SCIPparamSetReal(param, set, messagehdlr, value, TRUE) );
2163 
2164  return SCIP_OKAY;
2165 }
2166 
2167 /** changes the value of an existing char parameter */
2169  SCIP_PARAMSET* paramset, /**< parameter set */
2170  SCIP_SET* set, /**< global SCIP settings */
2171  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2172  const char* name, /**< name of the parameter */
2173  char value /**< new value of the parameter */
2174  )
2175 {
2176  SCIP_PARAM* param;
2177 
2178  assert(paramset != NULL);
2179  assert(set != NULL);
2180 
2181  /* retrieve parameter from hash table */
2182  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
2183  if( param == NULL )
2184  {
2185  SCIPerrorMessage("parameter <%s> unknown\n", name);
2186  return SCIP_PARAMETERUNKNOWN;
2187  }
2188  if( param->paramtype != SCIP_PARAMTYPE_CHAR )
2189  {
2190  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
2192  return SCIP_PARAMETERWRONGTYPE;
2193  }
2194 
2195  /* set the parameter's current value */
2196  SCIP_CALL( SCIPparamSetChar(param, set, messagehdlr, value, TRUE) );
2197 
2198  return SCIP_OKAY;
2199 }
2200 
2201 /** changes the value of an existing string parameter */
2203  SCIP_PARAMSET* paramset, /**< parameter set */
2204  SCIP_SET* set, /**< global SCIP settings */
2205  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2206  const char* name, /**< name of the parameter */
2207  const char* value /**< new value of the parameter */
2208  )
2209 {
2210  SCIP_PARAM* param;
2211 
2212  assert(paramset != NULL);
2213  assert(set != NULL);
2214 
2215  /* retrieve parameter from hash table */
2216  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)name);
2217  if( param == NULL )
2218  {
2219  SCIPerrorMessage("parameter <%s> unknown\n", name);
2220  return SCIP_PARAMETERUNKNOWN;
2221  }
2222  if( param->paramtype != SCIP_PARAMTYPE_STRING )
2223  {
2224  SCIPerrorMessage("wrong parameter type - parameter <%s> has type <%s> instead of <%s>\n",
2226  return SCIP_PARAMETERWRONGTYPE;
2227  }
2228 
2229  /* set the parameter's current value */
2230  SCIP_CALL( SCIPparamSetString(param, set, messagehdlr, value, TRUE) );
2231 
2232  return SCIP_OKAY;
2233 }
2234 
2235 /** parses emphasis settings */
2236 static
2238  SCIP_PARAMSET* paramset, /**< parameter set */
2239  SCIP_SET* set, /**< global SCIP settings */
2240  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2241  char* line /**< line to parse (is modified during parse, but not freed) */
2242  )
2243 {
2244  SCIP_PARAMSETTING paramsetting;
2245  SCIP_Bool globalemphasis = FALSE;
2246  char* paramname;
2247  char* paramvaluestr;
2248 
2249  assert( paramset != NULL );
2250  assert( line != NULL );
2251 
2252  /* find the start of the parameter name */
2253  while ( *line == ' ' || *line == '\t' || *line == '\r' )
2254  line++;
2255  if ( *line == '\0' || *line == '\n' || *line == '#' )
2256  return SCIP_OKAY;
2257  paramname = line;
2258 
2259  /* find the end of the parameter name */
2260  while ( *line != ' ' && *line != '\t' && *line != '\r' && *line != '\n' && *line != '#' && *line != '\0' && *line != '=' && *line != ':' )
2261  line++;
2262  *line = '\0';
2263  ++line;
2264 
2265  /* check for global emphasis settings */
2266  if ( strcmp(paramname, "default") == 0 )
2267  {
2268  SCIP_CALL( SCIPparamsetSetEmphasis(paramset, set, messagehdlr, SCIP_PARAMEMPHASIS_DEFAULT, FALSE) );
2269  globalemphasis = TRUE;
2270  }
2271  else if ( strcmp(paramname, "counter") == 0 )
2272  {
2273  SCIP_CALL( SCIPparamsetSetEmphasis(paramset, set, messagehdlr, SCIP_PARAMEMPHASIS_COUNTER, FALSE) );
2274  globalemphasis = TRUE;
2275  }
2276  else if ( strcmp(paramname, "cpsolver") == 0 )
2277  {
2278  SCIP_CALL( SCIPparamsetSetEmphasis(paramset, set, messagehdlr, SCIP_PARAMEMPHASIS_CPSOLVER, FALSE) );
2279  globalemphasis = TRUE;
2280  }
2281  else if ( strcmp(paramname, "easycip") == 0 )
2282  {
2283  SCIP_CALL( SCIPparamsetSetEmphasis(paramset, set, messagehdlr, SCIP_PARAMEMPHASIS_EASYCIP, FALSE) );
2284  globalemphasis = TRUE;
2285  }
2286  else if ( strcmp(paramname, "feasibility") == 0 )
2287  {
2288  SCIP_CALL( SCIPparamsetSetEmphasis(paramset, set, messagehdlr, SCIP_PARAMEMPHASIS_FEASIBILITY, FALSE) );
2289  globalemphasis = TRUE;
2290  }
2291  else if ( strcmp(paramname, "hardlp") == 0 )
2292  {
2293  SCIP_CALL( SCIPparamsetSetEmphasis(paramset, set, messagehdlr, SCIP_PARAMEMPHASIS_HARDLP, FALSE) );
2294  globalemphasis = TRUE;
2295  }
2296  else if ( strcmp(paramname, "optimality") == 0 )
2297  {
2298  SCIP_CALL( SCIPparamsetSetEmphasis(paramset, set, messagehdlr, SCIP_PARAMEMPHASIS_OPTIMALITY, FALSE) );
2299  globalemphasis = TRUE;
2300  }
2301 
2302  /* check whether rest of line is clean */
2303  if ( globalemphasis )
2304  {
2305  /* check, if the rest of the line is clean */
2306  while ( *line == ' ' || *line == '\t' || *line == '\r' )
2307  ++line;
2308  if ( *line != '\0' && *line != '\n' && *line != '#' )
2309  {
2310  SCIPerrorMessage("additional characters after global emphasis setting: %s.\n", line);
2311  return SCIP_READERROR;
2312  }
2313  return SCIP_OKAY;
2314  }
2315 
2316  /* find the start of the parameter value string */
2317  while ( *line == ' ' || *line == '\t' || *line == '\r' )
2318  ++line;
2319  if ( *line == '\0' || *line == '\n' || *line == '#' )
2320  {
2321  SCIPerrorMessage("emphasis parameter value is missing\n");
2322  return SCIP_READERROR;
2323  }
2324  paramvaluestr = line;
2325 
2326  /* find the end of the parameter value string */
2327  while ( *line != ' ' && *line != '\t' && *line != '\r' && *line != '\n' && *line != '#' && *line != '\0' )
2328  ++line;
2329 
2330  if ( *line == '#' )
2331  *line = '\0';
2332  else if ( *line != '\0' )
2333  {
2334  *line = '\0';
2335  ++line;
2336  /* check, if the rest of the line is clean */
2337  while ( *line == ' ' || *line == '\t' || *line == '\r' )
2338  ++line;
2339  if ( *line != '\0' && *line != '\n' && *line != '#' )
2340  {
2341  SCIPerrorMessage("additional characters after emphasis parameter value: %s.\n", line);
2342  return SCIP_READERROR;
2343  }
2344  }
2345 
2346  /* determine type of setting */
2347  if ( strcmp(paramvaluestr, "default") == 0 )
2348  paramsetting = SCIP_PARAMSETTING_DEFAULT;
2349  else if ( strcmp(paramvaluestr, "aggressive") == 0 )
2350  paramsetting = SCIP_PARAMSETTING_AGGRESSIVE;
2351  else if ( strcmp(paramvaluestr, "fast") == 0 )
2352  paramsetting = SCIP_PARAMSETTING_FAST;
2353  else if ( strcmp(paramvaluestr, "off") == 0 )
2354  paramsetting = SCIP_PARAMSETTING_OFF;
2355  else
2356  {
2357  SCIPerrorMessage("unkown parameter setting: %s.\n", paramvaluestr);
2358  return SCIP_READERROR;
2359  }
2360 
2361  /* check which kind of emphasis we want to set */
2362  if ( strcmp(paramname, "heuristics") == 0 )
2363  {
2364  SCIP_CALL( SCIPsetSetHeuristics(set, messagehdlr, paramsetting, FALSE) );
2365  }
2366  else if ( strcmp(paramname, "presolving") == 0 )
2367  {
2368  SCIP_CALL( SCIPsetSetPresolving(set, messagehdlr, paramsetting, FALSE) );
2369  }
2370  else if ( strcmp(paramname, "separating") == 0 )
2371  {
2372  SCIP_CALL( SCIPsetSetSeparating(set, messagehdlr, paramsetting, FALSE) );
2373  }
2374 
2375  return SCIP_OKAY;
2376 }
2377 
2378 /** parses a parameter file line "paramname = paramvalue" and sets parameter accordingly */
2379 static
2381  SCIP_PARAMSET* paramset, /**< parameter set */
2382  SCIP_SET* set, /**< global SCIP settings */
2383  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2384  char* line, /**< line to parse (is modified during parse, but not freed) */
2385  SCIP_Bool* foundnormalparam /**< pointer to store whether a normal parameter (not emphasis setting) has been found */
2386  )
2387 {
2388  SCIP_PARAM* param;
2389  char* paramname;
2390  char* paramvaluestr;
2391  char* paramend;
2392  char* lastquote;
2393  SCIP_Bool quoted;
2394  SCIP_Bool fix = FALSE;
2395 
2396  assert(paramset != NULL);
2397  assert(line != NULL);
2398  assert(foundnormalparam != NULL);
2399 
2400  /* find the start of the parameter name */
2401  while( *line == ' ' || *line == '\t' || *line == '\r' )
2402  line++;
2403  if( *line == '\0' || *line == '\n' || *line == '#' )
2404  return SCIP_OKAY;
2405  paramname = line;
2406 
2407  /* find the end of the parameter name */
2408  while( *line != ' ' && *line != '\t' && *line != '\r' && *line != '\n' && *line != '#' && *line != '\0' && *line != '=' && *line != ':' )
2409  line++;
2410  paramend = line;
2411 
2412  /* skip possible whitespace */
2413  while( *line == ' ' || *line == '\t' || *line == '\r' )
2414  line++;
2415 
2416  /* check whether first part consists of "emphasis:" */
2417  if ( *line == ':' )
2418  {
2419  *paramend = '\0'; /* could have paramend == line */
2420  if ( strcmp(paramname, "emphasis") != 0 )
2421  {
2422  SCIPerrorMessage("expected \"emphasis:\" at beginning of line.\n");
2423  return SCIP_READERROR;
2424  }
2425 
2426  /* check that emphasis settings only appear at beginning of file */
2427  if ( *foundnormalparam )
2428  {
2429  SCIPerrorMessage("emphasis settings have to appear at top of file.\n");
2430  return SCIP_READERROR;
2431  }
2432 
2433  /* parse emphasis line */
2434  SCIP_CALL( emphasisParse(paramset, set, messagehdlr, line+1) ); /* message handler */
2435  return SCIP_OKAY;
2436  }
2437  else if ( *line != '=' )
2438  {
2439  SCIPerrorMessage("expected character '=' after the parameter name.\n");
2440  return SCIP_READERROR;
2441  }
2442  *paramend = '\0'; /* could have paramend == line */
2443  ++line;
2444 
2445  /* find the start of the parameter value string */
2446  while( *line == ' ' || *line == '\t' || *line == '\r' )
2447  line++;
2448  if( *line == '\0' || *line == '\n' || *line == '#' )
2449  {
2450  SCIPerrorMessage("parameter value is missing\n");
2451  return SCIP_READERROR;
2452  }
2453  paramvaluestr = line;
2454 
2455  /* find the end of the parameter value string */
2456  quoted = (*paramvaluestr == '"');
2457  lastquote = NULL;
2458  while( (quoted || (*line != ' ' && *line != '\t' && *line != '\r' && *line != '\n' && *line != '#')) && *line != '\0' )
2459  {
2460  if( *line == '"' )
2461  lastquote = line;
2462  line++;
2463  }
2464  if( lastquote != NULL )
2465  line = lastquote+1;
2466  if( *line == '#' )
2467  *line = '\0';
2468  else if( *line != '\0' )
2469  {
2470  /* check, if the rest of the line is clean */
2471  *line = '\0';
2472  line++;
2473  while( *line == ' ' || *line == '\t' || *line == '\r' )
2474  line++;
2475  if( *line == 'f' && *(line+1) == 'i' && *(line+2) == 'x' )
2476  {
2477  fix = TRUE;
2478  line += 3;
2479 
2480  while( *line == ' ' || *line == '\t' || *line == '\r' )
2481  line++;
2482  }
2483  if( *line != '\0' && *line != '\n' && *line != '#' )
2484  {
2485  SCIPerrorMessage("additional characters <%c> after parameter value (and possible 'fix' keyword)\n", *line);
2486  return SCIP_READERROR;
2487  }
2488  }
2489 
2490  /* retrieve parameter from hash table */
2491  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
2492  if( param == NULL )
2493  {
2494  SCIPmessagePrintWarning(messagehdlr, "unknown parameter <%s>\n", paramname);
2495  return SCIP_OKAY;
2496  }
2497 
2498  SCIPparamSetFixed(param, FALSE);
2499 
2500  /* set parameter's value */
2501  switch( param->paramtype )
2502  {
2503  case SCIP_PARAMTYPE_BOOL:
2504  SCIP_CALL( paramParseBool(param, set, messagehdlr, paramvaluestr) );
2505  break;
2506  case SCIP_PARAMTYPE_INT:
2507  SCIP_CALL( paramParseInt(param, set, messagehdlr, paramvaluestr) );
2508  break;
2510  SCIP_CALL( paramParseLongint(param, set, messagehdlr, paramvaluestr) );
2511  break;
2512  case SCIP_PARAMTYPE_REAL:
2513  SCIP_CALL( paramParseReal(param, set, messagehdlr, paramvaluestr) );
2514  break;
2515  case SCIP_PARAMTYPE_CHAR:
2516  SCIP_CALL( paramParseChar(param, set, messagehdlr, paramvaluestr) );
2517  break;
2518  case SCIP_PARAMTYPE_STRING:
2519  SCIP_CALL( paramParseString(param, set, messagehdlr, paramvaluestr) );
2520  break;
2521  default:
2522  SCIPerrorMessage("unknown parameter type\n");
2523  return SCIP_INVALIDDATA;
2524  }
2525 
2526  if( fix )
2527  SCIPparamSetFixed(param, TRUE);
2528 
2529  *foundnormalparam = TRUE;
2530 
2531  return SCIP_OKAY;
2532 }
2533 
2534 /** reads parameters from a file */
2536  SCIP_PARAMSET* paramset, /**< parameter set */
2537  SCIP_SET* set, /**< global SCIP settings */
2538  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2539  const char* filename /**< file name */
2540  )
2541 {
2542  SCIP_RETCODE retcode;
2543  SCIP_Bool foundnormalparam = FALSE;
2544  FILE* file;
2545  char line[1024];
2546  int lineno;
2547 
2548  assert(paramset != NULL);
2549  assert(filename != NULL);
2550 
2551  /* open the file for reading */
2552  file = fopen(filename, "r");
2553  if( file == NULL )
2554  {
2555  SCIPerrorMessage("cannot open file <%s> for reading\n", filename);
2556  SCIPprintSysError(filename);
2557  return SCIP_NOFILE;
2558  }
2559 
2560  /* read the parameters from the file */
2561  lineno = 0;
2562  retcode = SCIP_OKAY;
2563  while( fgets(line, (int) sizeof(line), file) != NULL && retcode == SCIP_OKAY )
2564  {
2565  lineno++;
2566  retcode = paramsetParse(paramset, set, messagehdlr, line, &foundnormalparam);
2567  }
2568 
2569  /* close input file */
2570  fclose(file);
2571 
2572  if( retcode == SCIP_READERROR )
2573  {
2574  SCIPerrorMessage("input error in file <%s> line %d\n", filename, lineno);
2575  }
2576  else
2577  {
2578  SCIP_CALL( retcode );
2579  }
2580 
2581  return SCIP_OKAY;
2582 }
2583 
2584 /** writes all parameters in the parameter set to a file */
2586  SCIP_PARAMSET* paramset, /**< parameter set */
2587  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2588  const char* filename, /**< file name, or NULL for stdout */
2589  SCIP_Bool comments, /**< should parameter descriptions be written as comments? */
2590  SCIP_Bool onlychanged /**< should only the parameters been written, that are changed from default? */
2591  )
2592 {
2593  SCIP_RETCODE retcode;
2594  FILE* file;
2595  int i;
2596 
2597  assert(paramset != NULL);
2598 
2599  /* open the file for writing */
2600  if( filename != NULL )
2601  {
2602  file = fopen(filename, "w");
2603  if( file == NULL )
2604  {
2605  SCIPerrorMessage("cannot open file <%s> for writing\n", filename);
2606  SCIPprintSysError(filename);
2607  return SCIP_FILECREATEERROR;
2608  }
2609  }
2610  else
2611  file = NULL;
2612 
2613  if( comments )
2614  {
2615  /* display the SCIP version as comment in the first line */
2616 #if( SCIP_SUBVERSION == 0 )
2617  SCIPmessageFPrintInfo(messagehdlr, file, "# SCIP version %d.%d.%d\n",
2618  SCIP_VERSION/100, (SCIP_VERSION/10) % 10, SCIP_VERSION % 10); /*lint !e778*/
2619 #else
2620  SCIPmessageFPrintInfo(messagehdlr, file, "# SCIP version %d.%d.%d.%d\n",
2621  SCIP_VERSION/100, (SCIP_VERSION/10) % 10, SCIP_VERSION % 10, SCIP_SUBVERSION); /*lint !e778*/
2622 #endif
2623 
2624  SCIPmessageFPrintInfo(messagehdlr, file, "\n");
2625  }
2626 
2627  /* write the parameters to the file */
2628  for( i = 0; i < paramset->nparams; ++i )
2629  {
2630  retcode = paramWrite(paramset->params[i], messagehdlr, file, comments, onlychanged);
2631  if( retcode != SCIP_OKAY )
2632  {
2633  if( filename != NULL )
2634  {
2635  assert(file != NULL);
2636  fclose(file);
2637  }
2638  SCIP_CALL( retcode );
2639  }
2640  }
2641 
2642  /* close output file */
2643  if( filename != NULL )
2644  {
2645  assert(file != NULL); /*lint !e449*/
2646  fclose(file);
2647  }
2648 
2649  return SCIP_OKAY;
2650 }
2651 
2652 /** installs default values for all parameters */
2654  SCIP_PARAMSET* paramset, /**< parameter set */
2655  SCIP_SET* set, /**< global SCIP settings */
2656  SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
2657  )
2658 {
2659  int i;
2660 
2661  /* set all parameters to their default values */
2662  for( i = 0; i < paramset->nparams; ++i )
2663  {
2664  SCIP_CALL( SCIPparamSetToDefault(paramset->params[i], set, messagehdlr) );
2665  }
2666 
2667  return SCIP_OKAY;
2668 }
2669 
2670 /** installs default value for a single parameter */
2672  SCIP_PARAMSET* paramset, /**< parameter set */
2673  SCIP_SET* set, /**< global SCIP settings */
2674  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2675  const char* paramname /**< name of the parameter */
2676  )
2677 {
2678  SCIP_PARAM* param;
2679 
2680  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
2681 
2682  if( param != NULL )
2683  {
2684  SCIP_CALL( SCIPparamSetToDefault(param, set, messagehdlr) );
2685  }
2686 
2687  return SCIP_OKAY;
2688 }
2689 
2690 /** resets parameters changed by SCIPparamsetSetHeuristicsXyz functions to their default values
2691  *
2692  * @note fixed parameters stay as they are; you need to unfix them first if they should be changed, too
2693  */
2694 static
2696  SCIP_PARAMSET* paramset, /**< parameter set */
2697  SCIP_SET* set, /**< global SCIP settings */
2698  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2699  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
2700  )
2701 { /*lint --e{715}*/
2702  SCIP_HEUR** heurs;
2703  char paramname[SCIP_MAXSTRLEN];
2704  int nheurs;
2705  int i;
2706 
2707  heurs = set->heurs;
2708  nheurs = set->nheurs;
2709 
2710  for( i = 0; i < nheurs; ++i )
2711  {
2712  const char* heurname;
2713  heurname = SCIPheurGetName(heurs[i]);
2714 
2715  /* set frequency parameter to default */
2716  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "heuristics/%s/freq", heurname);
2717  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
2718 
2719  /* set LP iteration offset to default */
2720  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "heuristics/%s/maxlpiterofs", heurname);
2721  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
2722 
2723  /* set LP iteration quota to default */
2724  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "heuristics/%s/maxlpiterquot", heurname);
2725  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
2726  }
2727 
2728  /* set specific parameters for RENS heuristic */
2729  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "heuristics/rens/nodesofs") );
2730  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "heuristics/rens/minfixingrate") );
2731 
2732  /* set specific parameters for Crossover heuristic */
2733  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "heuristics/crossover/nwaitingnodes") );
2734  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "heuristics/crossover/dontwaitatroot") );
2735  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "heuristics/crossover/nodesquot") );
2736  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "heuristics/crossover/minfixingrate") );
2737 
2738  return SCIP_OKAY;
2739 }
2740 
2741 /** sets heuristics to aggressive */
2742 static
2744  SCIP_PARAMSET* paramset, /**< parameter set */
2745  SCIP_SET* set, /**< global SCIP settings */
2746  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2747  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
2748  )
2749 {
2750  SCIP_HEUR** heurs;
2751  SCIP_PARAM* param;
2752  char paramname[SCIP_MAXSTRLEN];
2753  int nheurs;
2754  int i;
2755 
2756  heurs = set->heurs;
2757  nheurs = set->nheurs;
2758 
2759  SCIP_CALL( paramsetSetHeuristicsDefault(paramset, set, messagehdlr, quiet) );
2760 
2761  for( i = 0; i < nheurs; ++i )
2762  {
2763  const char* heurname;
2764  heurname = SCIPheurGetName(heurs[i]);
2765 
2766  /* dualval heuristic should stay disabled */
2767  if( strcmp(heurname, "dualval") == 0 )
2768  continue;
2769 
2770  /* get frequency parameter of heuristic */
2771  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "heuristics/%s/freq", heurname);
2772  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
2773 
2774  if( param != NULL )
2775  {
2776  int deffreq;
2777  int newfreq;
2778 
2779  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
2780  deffreq = SCIPparamGetIntDefault(param);
2781 
2782  /* change frequency to half of the default value, if it is > 0, otherwise set to 20 */
2783  if( deffreq == -1 || deffreq == 0 )
2784  {
2785  newfreq = 20;
2786  }
2787  else
2788  {
2789  newfreq = (int) SCIPsetCeil(set, deffreq/2.0);
2790  newfreq = MAX(newfreq, 1);
2791  }
2792 
2793  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, newfreq, quiet) );
2794  }
2795 
2796  /* LP iteration limits only get increased for heuristics which are activated by default */
2797  if( SCIPparamGetIntDefault(param) > -1 )
2798  {
2799  /* construct (possible) parameter name for LP iteration offset */
2800  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "heuristics/%s/maxlpiterofs", heurname);
2801  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
2802 
2803  if( param != NULL && SCIPparamGetType(param) == SCIP_PARAMTYPE_INT )
2804  {
2805  /* set LP iteration offset to 1.5 time the current value */
2806  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, (int) (1.5 * SCIPparamGetIntDefault(param)), quiet) );
2807  }
2808 
2809  /* construct (possible) parameter name for LP iteration quotient parameter */
2810  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "heuristics/%s/maxlpiterquot", heurname);
2811  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
2812 
2813  if( param != NULL && SCIPparamGetType(param) == SCIP_PARAMTYPE_REAL )
2814  {
2815  /* set LP iteration quotient to 1.5 time the current value */
2816  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, paramname, 1.5 * SCIPparamGetRealDefault(param), quiet) );
2817  }
2818  }
2819  }
2820 
2821  /* set specific parameters for RENS heuristic, if the heuristic is included */
2822 #ifndef NDEBUG
2823  if( SCIPsetFindHeur(set, "rens") != NULL )
2824 #endif
2825  {
2826  SCIP_CALL( paramSetLongint(paramset, set, messagehdlr, "heuristics/rens/nodesofs", (SCIP_Longint)2000, quiet) );
2827  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "heuristics/rens/minfixingrate", 0.3, quiet) );
2828  }
2829 
2830  /* set specific parameters for Crossover heuristic, if the heuristic is included */
2831 #ifndef NDEBUG
2832  if( SCIPsetFindHeur(set, "crossover") != NULL )
2833 #endif
2834  {
2835  SCIP_CALL( paramSetLongint(paramset, set, messagehdlr, "heuristics/crossover/nwaitingnodes", (SCIP_Longint)20, quiet) );
2836  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "heuristics/crossover/dontwaitatroot", TRUE, quiet) );
2837  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "heuristics/crossover/nodesquot", 0.15, quiet) );
2838  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "heuristics/crossover/minfixingrate", 0.5, quiet) );
2839  }
2840 
2841  return SCIP_OKAY;
2842 }
2843 
2844 /** sets heuristics to fast */
2845 static
2847  SCIP_PARAMSET* paramset, /**< parameter set */
2848  SCIP_SET* set, /**< global SCIP settings */
2849  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2850  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
2851  )
2852 {
2853  int i;
2854 
2855 #define NEXPENSIVEHEURFREQS 15
2856  static const char* const expensiveheurfreqs[NEXPENSIVEHEURFREQS] = {
2857  "heuristics/coefdiving/freq",
2858  "heuristics/crossover/freq",
2859  "heuristics/distributiondiving/freq",
2860  "heuristics/feaspump/freq",
2861  "heuristics/fracdiving/freq",
2862  "heuristics/guideddiving/freq",
2863  "heuristics/linesearchdiving/freq",
2864  "heuristics/nlpdiving/freq",
2865  "heuristics/subnlp/freq",
2866  "heuristics/objpscostdiving/freq",
2867  "heuristics/pscostdiving/freq",
2868  "heuristics/rens/freq",
2869  "heuristics/rootsoldiving/freq",
2870  "heuristics/undercover/freq",
2871  "heuristics/veclendiving/freq"
2872  };
2873 
2874  SCIP_CALL( paramsetSetHeuristicsDefault(paramset, set, messagehdlr, quiet) );
2875 
2876  /* explicitly turn off expensive heuristics, if included */
2877  for( i = 0; i < NEXPENSIVEHEURFREQS; ++i )
2878  if( SCIPhashtableRetrieve(paramset->hashtable, (void*)expensiveheurfreqs[i]) != NULL )
2879  {
2880  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, expensiveheurfreqs[i], -1, quiet) );
2881  }
2882 
2883  return SCIP_OKAY;
2884 }
2885 
2886 /** turns all heuristics off */
2887 static
2889  SCIP_PARAMSET* paramset, /**< parameter set */
2890  SCIP_SET* set, /**< global SCIP settings */
2891  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2892  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
2893  )
2894 {
2895  SCIP_HEUR** heurs;
2896  char paramname[SCIP_MAXSTRLEN];
2897  int nheurs;
2898  int i;
2899 
2900  heurs = set->heurs;
2901  nheurs = set->nheurs;
2902 
2903  SCIP_CALL( paramsetSetHeuristicsDefault(paramset, set, messagehdlr, quiet) );
2904 
2905  for( i = 0; i < nheurs; ++i )
2906  {
2907  const char* heurname;
2908  heurname = SCIPheurGetName(heurs[i]);
2909 
2910  /* get frequency parameter of heuristic */
2911  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "heuristics/%s/freq", heurname);
2912 
2913  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, -1, quiet) );
2914  }
2915 
2916  return SCIP_OKAY;
2917 }
2918 
2919 /** resets all parameters that start with "presolving" in their name to their default value; additionally set the
2920  * parameters which might have previously been changed by the methods SCIPparamsetSetToPresolving{Off,Fast,Aggressive}
2921  * to their default value
2922  *
2923  * @note fixed parameters stay as they are; you need to unfix them first if they should be changed, too
2924  */
2925 static
2927  SCIP_PARAMSET* paramset, /**< parameter set */
2928  SCIP_SET* set, /**< global SCIP settings */
2929  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
2930  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
2931  )
2932 { /*lint --e{715}*/
2933  SCIP_PROP** props;
2934  SCIP_CONSHDLR** conshdlrs;
2935  SCIP_PRESOL** presols;
2936  char paramname[SCIP_MAXSTRLEN];
2937  int nprops;
2938  int nconshdlrs;
2939  int npresols;
2940  int i;
2941 
2942  presols = set->presols;
2943  npresols = set->npresols;
2944 
2945  /* reset each individual presolver */
2946  for( i = 0; i < npresols; ++i )
2947  {
2948  const char* presolname;
2949  presolname = SCIPpresolGetName(presols[i]);
2950 
2951  /* reset maxrounds parameter of presolvers */
2952  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "presolving/%s/maxrounds", presolname);
2953 
2954  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
2955  }
2956 
2957  props = set->props;
2958  nprops = set->nprops;
2959 
2960  /* reset presolving for each individual propagator */
2961  for( i = 0; i < nprops; ++i )
2962  {
2963  const char* propname;
2964  propname = SCIPpropGetName(props[i]);
2965 
2966  /* reset maxprerounds parameter of propagator */
2967  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "propagating/%s/maxprerounds", propname);
2968  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
2969  }
2970 
2971  conshdlrs = set->conshdlrs;
2972  nconshdlrs = set->nconshdlrs;
2973 
2974  /* reset presolving settings for each individual constraint handler */
2975  for( i = 0; i < nconshdlrs; ++i )
2976  {
2977  const char* conshdlrname;
2978  conshdlrname = SCIPconshdlrGetName(conshdlrs[i]);
2979 
2980  /* reset maxprerounds parameter of constraint handler */
2981  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/maxprerounds", conshdlrname);
2982  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
2983 
2984  /* reset presolpairwise parameter of constraint handler */
2985  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/presolpairwise", conshdlrname);
2986  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
2987  }
2988 
2989  /* explicitly reset parameters of setppc constraint handler, if the constraint handler is included */
2990  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "constraints/setppc/cliquelifting") );
2991 
2992  /* explicitly reset parameters of knapsack constraint handler, if the constraint handler is included */
2993  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "constraints/knapsack/disaggregation") );
2994 
2995  /* explicitly reset restart and maxrounds parameters */
2996  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "presolving/maxrestarts") );
2997  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "presolving/restartfac") );
2998  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "presolving/restartminred") );
2999  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "presolving/maxrounds") );
3000 
3001  /* explicitly reset probing parameters */
3002  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "propagating/probing/maxuseless") );
3003  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "propagating/probing/maxtotaluseless") );
3004  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "propagating/probing/maxprerounds") );
3005 
3006  return SCIP_OKAY;
3007 }
3008 
3009 /** sets presolving to aggressive */
3010 static
3012  SCIP_PARAMSET* paramset, /**< parameter set */
3013  SCIP_SET* set, /**< global SCIP settings */
3014  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3015  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3016  )
3017 {
3018  SCIP_PARAM* param;
3019  char paramname[SCIP_MAXSTRLEN];
3020 
3021  /* reset previous changes on presolving parameters */
3022  SCIP_CALL( paramsetSetPresolvingDefault(paramset, set, messagehdlr, quiet) );
3023 
3024  /* explicitly change restart parameters */
3025  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "presolving/restartfac", 0.03, quiet) );
3026  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "presolving/restartminred", 0.06, quiet) );
3027 
3028  /* explicitly change parameters of setppc constraint handler, if included */
3029 #ifndef NDEBUG
3030  if( SCIPsetFindConshdlr(set, "setppc") != NULL )
3031 #endif
3032  {
3033  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "constraints/setppc/cliquelifting", TRUE, quiet) );
3034  }
3035 
3036  /* explicitly change parameters of presolver boundshift, if included */
3037 #ifndef NDEBUG
3038  if( SCIPsetFindPresol(set, "boundshift") != NULL )
3039 #endif
3040  {
3041  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/boundshift/maxrounds", -1, quiet) );
3042  }
3043 
3044  /* explicitly change parameters of presolver convertinttobin, if included */
3045 #ifndef NDEBUG
3046  if( SCIPsetFindPresol(set, "convertinttobin") != NULL )
3047 #endif
3048  {
3049  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/convertinttobin/maxrounds", 0, quiet) );
3050  }
3051 
3052  /* explicitly change parameters of presolver dualagg, if included */
3053 #ifndef NDEBUG
3054  if( SCIPsetFindPresol(set, "dualagg") != NULL )
3055 #endif
3056  {
3057  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/dualagg/maxrounds", -1, quiet) );
3058  }
3059 
3060  /* explicitly change parameters of presolver tworowbnd, if included */
3061 #ifndef NDEBUG
3062  if( SCIPsetFindPresol(set, "tworowbnd") != NULL )
3063 #endif
3064  {
3065  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/tworowbnd/maxrounds", -1, quiet) );
3066  }
3067 
3068  /* explicitly change parameters of presolver redvub, if included */
3069 #ifndef NDEBUG
3070  if( SCIPsetFindPresol(set, "redvub") != NULL )
3071 #endif
3072  {
3073  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/redvub/maxrounds", -1, quiet) );
3074  }
3075 
3076  /* explicitly change parameters of presolver implfree, if included */
3077 #ifndef NDEBUG
3078  if( SCIPsetFindPresol(set, "implfree") != NULL )
3079 #endif
3080  {
3081  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/implfree/maxrounds", -1, quiet) );
3082  }
3083 
3084  /* explicitly change parameters of probing */
3085  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "propagating/probing/maxuseless");
3086  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
3087  if( param != NULL )
3088  {
3089  int defvalue;
3090 
3091  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
3092  defvalue = SCIPparamGetIntDefault(param);
3093 
3094  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, (int) (1.5 * defvalue), quiet) );
3095  }
3096  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "propagating/probing/maxtotaluseless");
3097  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
3098  if( param != NULL )
3099  {
3100  int defvalue;
3101 
3102  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
3103  defvalue = SCIPparamGetIntDefault(param);
3104 
3105  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, (int) (1.5 * defvalue), quiet) );
3106  }
3107 
3108  return SCIP_OKAY;
3109 }
3110 
3111 /** sets presolving to fast */
3112 static
3114  SCIP_PARAMSET* paramset, /**< parameter set */
3115  SCIP_SET* set, /**< global SCIP settings */
3116  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3117  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3118  )
3119 {
3120  SCIP_CONSHDLR** conshdlrs;
3121  SCIP_PARAM* param;
3122  char paramname[SCIP_MAXSTRLEN];
3123  int nconshdlrs;
3124  int i;
3125 
3126  /* reset previous changes on presolving parameters */
3127  SCIP_CALL( paramsetSetPresolvingDefault(paramset, set, messagehdlr, quiet) );
3128 
3129  conshdlrs = set->conshdlrs;
3130  nconshdlrs = set->nconshdlrs;
3131 
3132  /* turn off pairwise comparison for each constraint handler that has this feature */
3133  for( i = 0; i < nconshdlrs; ++i )
3134  {
3135  const char* conshdlrname;
3136  conshdlrname = SCIPconshdlrGetName(conshdlrs[i]);
3137 
3138  /* get presolpairwise parameter of constraint handler */
3139  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/presolpairwise", conshdlrname);
3140  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
3141 
3142  if( param != NULL && SCIPparamGetType(param) == SCIP_PARAMTYPE_BOOL )
3143  {
3144  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, paramname, FALSE, quiet) );
3145  }
3146  }
3147 
3148  /* explicitly turn off restarts */
3149  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/maxrestarts", 0, quiet) );
3150 
3151  /* explicitly change parameters of presolver convertinttobin, if included */
3152 #ifndef NDEBUG
3153  if( SCIPsetFindPresol(set, "convertinttobin") != NULL )
3154 #endif
3155  {
3156  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/convertinttobin/maxrounds", 0, quiet) );
3157  }
3158 
3159  /* turn off probing, if included */
3160 #ifndef NDEBUG
3161  if( SCIPsetFindProp(set, "probing") != NULL )
3162 #endif
3163  {
3164  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "propagating/probing/maxprerounds", 0, quiet) );
3165  }
3166 
3167  /* explicitly disable components presolver, if included */
3168 #ifndef NDEBUG
3169  if( SCIPsetFindPresol(set, "components") != NULL )
3170 #endif
3171  {
3172  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/components/maxrounds", 0, quiet) );
3173  }
3174 
3175  /* explicitly disable dominated columns presolver, if included */
3176 #ifndef NDEBUG
3177  if( SCIPsetFindPresol(set, "domcol") != NULL )
3178 #endif
3179  {
3180  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/domcol/maxrounds", 0, quiet) );
3181  }
3182 
3183  /* explicitly disable gate extraction presolver, if included */
3184 #ifndef NDEBUG
3185  if( SCIPsetFindPresol(set, "gateextraction") != NULL )
3186 #endif
3187  {
3188  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/gateextraction/maxrounds", 0, quiet) );
3189  }
3190 
3191  return SCIP_OKAY;
3192 }
3193 
3194 /** turns all presolving off */
3195 static
3197  SCIP_PARAMSET* paramset, /**< parameter set */
3198  SCIP_SET* set, /**< global SCIP settings */
3199  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3200  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3201  )
3202 {
3203  SCIP_PRESOL** presols;
3204  SCIP_PROP** props;
3205  SCIP_CONSHDLR** conshdlrs;
3206  char paramname[SCIP_MAXSTRLEN];
3207  int npresols;
3208  int nprops;
3209  int nconshdlrs;
3210  int i;
3211 
3212  /* reset previous changes on presolving parameters */
3213  SCIP_CALL( paramsetSetPresolvingDefault(paramset, set, messagehdlr, quiet) );
3214 
3215  presols = set->presols;
3216  npresols = set->npresols;
3217 
3218  /* turn each individual presolver off */
3219  for( i = 0; i < npresols; ++i )
3220  {
3221  const char* presolname;
3222  presolname = SCIPpresolGetName(presols[i]);
3223 
3224  /* get maxrounds parameter of presolvers */
3225  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "presolving/%s/maxrounds", presolname);
3226 
3227  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, 0, quiet) );
3228  }
3229 
3230  props = set->props;
3231  nprops = set->nprops;
3232 
3233  /* turn off presolving for each individual propagator */
3234  for( i = 0; i < nprops; ++i )
3235  {
3236  const char* propname;
3237  propname = SCIPpropGetName(props[i]);
3238 
3239  /* get maxrounds parameter of propagator */
3240  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "propagating/%s/maxprerounds", propname);
3241 
3242  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, 0, quiet) );
3243  }
3244 
3245  conshdlrs = set->conshdlrs;
3246  nconshdlrs = set->nconshdlrs;
3247 
3248  /* turn off presolving for each individual constraint handler */
3249  for( i = 0; i < nconshdlrs; ++i )
3250  {
3251  const char* conshdlrname;
3252  conshdlrname = SCIPconshdlrGetName(conshdlrs[i]);
3253 
3254  /* get maxprerounds parameter of constraint handler */
3255  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/maxprerounds", conshdlrname);
3256 
3257  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, 0, quiet) );
3258  }
3259 
3260  /* explicitly turn off restarts */
3261  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/maxrestarts", 0, quiet) );
3262 
3263  /* set the maximum number of presolving rounds to zero */
3264  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/maxrounds", 0, quiet) );
3265 
3266  return SCIP_OKAY;
3267 }
3268 
3269 /** reset parameters that may have been changed by other SCIPparamsetSetSeparatingXyz to their default values
3270  *
3271  * @note fixed parameters stay as they are; you need to unfix them first if they should be changed, too
3272  */
3273 static
3275  SCIP_PARAMSET* paramset, /**< parameter set */
3276  SCIP_SET* set, /**< global SCIP settings */
3277  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3278  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3279  )
3280 { /*lint --e{715}*/
3281  SCIP_SEPA** sepas;
3282  SCIP_CONSHDLR** conshdlrs;
3283  char paramname[SCIP_MAXSTRLEN];
3284  int nconshdlrs;
3285  int nsepas;
3286  int i;
3287 
3288  sepas = set->sepas;
3289  nsepas = set->nsepas;
3290 
3291  /* reset separating parameters of all separators */
3292  for( i = 0; i < nsepas; ++i )
3293  {
3294  const char* sepaname;
3295  sepaname = SCIPsepaGetName(sepas[i]);
3296 
3297  /* reset frequency parameter of separator */
3298  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "separating/%s/freq", sepaname);
3299  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
3300 
3301  /* reset maximum number of rounds in root node */
3302  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "separating/%s/maxroundsroot", sepaname);
3303  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
3304 
3305  /* reset maximum number of cuts per separation in root node */
3306  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "separating/%s/maxsepacutsroot", sepaname);
3307  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
3308  }
3309 
3310  conshdlrs = set->conshdlrs;
3311  nconshdlrs = set->nconshdlrs;
3312 
3313  /* reset each individual constraint handler separation settings */
3314  for( i = 0; i < nconshdlrs; ++i )
3315  {
3316  const char* conshdlrname;
3317  conshdlrname = SCIPconshdlrGetName(conshdlrs[i]);
3318 
3319  /* reset separation frequency parameter of constraint handler, if available */
3320  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/sepafreq", conshdlrname);
3321  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
3322 
3323  /* reset maximal separated cuts in root node of constraint handler, if available */
3324  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/maxsepacutsroot", conshdlrname);
3325  if( SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname) != NULL )
3326  {
3327  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, paramname) );
3328  }
3329  }
3330 
3331  /* explicitly reset individual parameters */
3332  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "constraints/linear/separateall") );
3333  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/minorthoroot") );
3334  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/maxroundsrootsubrun") );
3335  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/maxaddrounds") );
3336  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/maxcutsroot") );
3337  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/poolfreq") );
3338  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/cmir/maxfailsroot") );
3339  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/mcf/maxtestdelta") );
3340  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/mcf/trynegscaling") );
3341  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/cmir/maxtriesroot") );
3342  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/cmir/maxaggrsroot") );
3343  SCIP_CALL( SCIPparamsetSetToDefault(paramset, set, messagehdlr, "separating/maxbounddist") );
3344 
3345  return SCIP_OKAY;
3346 }
3347 
3348 /** sets separating to aggressive */
3349 static
3351  SCIP_PARAMSET* paramset, /**< parameter set */
3352  SCIP_SET* set, /**< global SCIP settings */
3353  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3354  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3355  )
3356 {
3357  SCIP_CONSHDLR** conshdlrs;
3358  SCIP_SEPA** sepas;
3359  SCIP_PARAM* param;
3360  char paramname[SCIP_MAXSTRLEN];
3361  int nconshdlrs;
3362  int nsepas;
3363  int i;
3364 
3365  sepas = set->sepas;
3366  nsepas = set->nsepas;
3367 
3368  /* set all separating parameters to default values */
3369  SCIP_CALL( paramsetSetSeparatingDefault(paramset, set, messagehdlr, quiet) );
3370 
3371  /* set separating parameters of all separators */
3372  for( i = 0; i < nsepas; ++i )
3373  {
3374  const char* sepaname;
3375  sepaname = SCIPsepaGetName(sepas[i]);
3376 
3377  /* intobj and cgmip separators should stay disabled */
3378  if( strcmp(sepaname, "intobj") == 0 || strcmp(sepaname, "cgmip") == 0 )
3379  continue;
3380 
3381  /* get frequency parameter of separator */
3382  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "separating/%s/freq", sepaname);
3383  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
3384 
3385  if( param != NULL )
3386  {
3387  int deffreq;
3388  int newfreq;
3389 
3390  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
3391  deffreq = SCIPparamGetIntDefault(param);
3392 
3393  /* for enabled separators, change frequency to at least every 20th depths and
3394  * enable disabled separators
3395  */
3396  if( deffreq == -1 )
3397  newfreq = 0;
3398  else if( deffreq == 0 )
3399  newfreq = 20;
3400  else
3401  newfreq = MIN(deffreq, 20);
3402 
3403  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, newfreq, quiet) );
3404  }
3405 
3406  /* get maximum number of rounds in root node */
3407  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "separating/%s/maxroundsroot", sepaname);
3408  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
3409 
3410  if( param != NULL )
3411  {
3412  int defrounds;
3413 
3414  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
3415  defrounds = SCIPparamGetIntDefault(param);
3416 
3417  /* increase the maximum number of rounds in the root node by factor of 1.5 */
3418  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, (int) (1.5 * defrounds), quiet) );
3419  }
3420 
3421  /* get maximum number of cuts per separation in root node */
3422  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "separating/%s/maxsepacutsroot", sepaname);
3423  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
3424 
3425  if( param != NULL )
3426  {
3427  int defnumber;
3428 
3429  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
3430  defnumber = SCIPparamGetIntDefault(param);
3431 
3432  /* increase the maximum number of cut per separation rounds in the root node by factor of 2 */
3433  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, 2*defnumber, quiet) );
3434  }
3435  }
3436 
3437  conshdlrs = set->conshdlrs;
3438  nconshdlrs = set->nconshdlrs;
3439 
3440  /* set separating parameters of all constraint handlers */
3441  for( i = 0; i < nconshdlrs; ++i )
3442  {
3443  const char* conshdlrname;
3444  conshdlrname = SCIPconshdlrGetName(conshdlrs[i]);
3445 
3446  /* get separating frequency parameter of constraint handler */
3447  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/sepafreq", conshdlrname);
3448  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
3449 
3450  if( param != NULL )
3451  {
3452  int deffreq;
3453  int newfreq;
3454 
3455  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
3456  deffreq = SCIPparamGetIntDefault(param);
3457 
3458  /* for constraint handlers with enabled separation, change frequency to at least every 10th depths and
3459  * enable disabled separation routines
3460  */
3461  if( deffreq == -1 )
3462  newfreq = 0;
3463  else if( deffreq == 0 )
3464  newfreq = 10;
3465  else
3466  newfreq = MIN(deffreq, 10);
3467 
3468  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, newfreq, quiet) );
3469  }
3470 
3471  /* get maximal separated cuts in root node of constraint handler */
3472  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/maxsepacutsroot", conshdlrname);
3473  param = (SCIP_PARAM*)SCIPhashtableRetrieve(paramset->hashtable, (void*)paramname);
3474 
3475  if( param != NULL )
3476  {
3477  int defnumber;
3478 
3479  assert(SCIPparamGetType(param) == SCIP_PARAMTYPE_INT);
3480  defnumber = SCIPparamGetIntDefault(param);
3481 
3482  /* change maximal cuts in root node to at least 500 */
3483  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, MAX(defnumber, 500), quiet) );
3484  }
3485  }
3486 
3487  /* explicitly change general separating parameters */
3488  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "separating/minorthoroot", 0.1, quiet) );
3489  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/maxroundsrootsubrun", 5, quiet) );
3490  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/maxaddrounds", 5, quiet) );
3491  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/maxcutsroot", 5000, quiet) );
3492  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/poolfreq", 10, quiet) );
3493 
3494  /* explicitly change a separating parameter of the linear constraint handler, if included */
3495 #ifndef NDEBUG
3496  if( SCIPsetFindConshdlr(set, "linear") != NULL )
3497 #endif
3498  {
3499  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "constraints/linear/separateall", TRUE, quiet) );
3500  }
3501 
3502  /* explicitly change a separating parameter of cmir separator, if included */
3503 #ifndef NDEBUG
3504  if( SCIPsetFindSepa(set, "cmir") != NULL )
3505 #endif
3506  {
3507  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/cmir/maxfailsroot", 200, quiet) );
3508  }
3509 
3510  /* explicitly change separating parameters of mcf separator, if included */
3511 #ifndef NDEBUG
3512  if( SCIPsetFindSepa(set, "mcf") != NULL )
3513 #endif
3514  {
3515  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/mcf/maxtestdelta", -1, quiet) );
3516  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "separating/mcf/trynegscaling", TRUE, quiet) );
3517  }
3518 
3519  return SCIP_OKAY;
3520 }
3521 
3522 /** sets separating to fast */
3523 static
3525  SCIP_PARAMSET* paramset, /**< parameter set */
3526  SCIP_SET* set, /**< global SCIP settings */
3527  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3528  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3529  )
3530 {
3531  /* reset previous changes on separating parameters */
3532  SCIP_CALL( paramsetSetSeparatingDefault(paramset, set, messagehdlr, quiet) );
3533 
3534  /* explicitly decrease maxbounddist */
3535  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "separating/maxbounddist", 0.0, quiet) );
3536 
3537  /* explicitly turn off expensive separators, if included */
3538 #ifndef NDEBUG
3539  if( SCIPsetFindConshdlr(set, "and") != NULL )
3540 #endif
3541  {
3542  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "constraints/and/sepafreq", 0, quiet) );
3543  }
3544 #ifndef NDEBUG
3545  if( SCIPsetFindSepa(set, "cmir") != NULL )
3546 #endif
3547  {
3548  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/cmir/maxroundsroot", 5, quiet) );
3549  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/cmir/maxtriesroot", 100, quiet) );
3550  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/cmir/maxaggrsroot", 3, quiet) );
3551  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/cmir/maxsepacutsroot", 200, quiet) );
3552  }
3553 #ifndef NDEBUG
3554  if( SCIPsetFindSepa(set, "flowcover") != NULL )
3555 #endif
3556  {
3557  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/flowcover/freq", -1, quiet) );
3558  }
3559 #ifndef NDEBUG
3560  if( SCIPsetFindSepa(set, "gomory") != NULL )
3561 #endif
3562  {
3563  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/gomory/maxroundsroot", 20, quiet) );
3564  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/gomory/maxsepacutsroot", 200, quiet) );
3565  }
3566 #ifndef NDEBUG
3567  if( SCIPsetFindSepa(set, "mcf") != NULL )
3568 #endif
3569  {
3570  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/mcf/freq", -1, quiet) );
3571  }
3572 #ifndef NDEBUG
3573  if( SCIPsetFindSepa(set, "strongcg") != NULL )
3574 #endif
3575  {
3576  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/strongcg/maxroundsroot", 10, quiet) );
3577  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/strongcg/maxsepacutsroot", 200, quiet) );
3578  }
3579 
3580  return SCIP_OKAY;
3581 }
3582 
3583 /** turns all cuts off */
3584 static
3586  SCIP_PARAMSET* paramset, /**< parameter set */
3587  SCIP_SET* set, /**< global SCIP settings */
3588  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3589  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3590  )
3591 {
3592  SCIP_SEPA** sepas;
3593  SCIP_CONSHDLR** conshdlrs;
3594  char paramname[SCIP_MAXSTRLEN];
3595  int nsepas;
3596  int nconshdlrs;
3597  int i;
3598 
3599  /* reset previous changes on separating parameters */
3600  SCIP_CALL( paramsetSetSeparatingDefault(paramset, set, messagehdlr, quiet) );
3601 
3602  sepas = set->sepas;
3603  nsepas = set->nsepas;
3604 
3605  /* turn each individual separator off */
3606  for( i = 0; i < nsepas; ++i )
3607  {
3608  const char* sepaname;
3609  sepaname = SCIPsepaGetName(sepas[i]);
3610 
3611  /* get frequency parameter of separator */
3612  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "separating/%s/freq", sepaname);
3613  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, -1, quiet) );
3614  }
3615 
3616  conshdlrs = set->conshdlrs;
3617  nconshdlrs = set->nconshdlrs;
3618 
3619  /* turn off separation for each individual constraint handler */
3620  for( i = 0; i < nconshdlrs; ++i )
3621  {
3622  const char* conshdlrname;
3623  conshdlrname = SCIPconshdlrGetName(conshdlrs[i]);
3624 
3625  /* get separation frequency parameter of constraint handler */
3626  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "constraints/%s/sepafreq", conshdlrname);
3627  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, -1, quiet) );
3628  }
3629 
3630  return SCIP_OKAY;
3631 }
3632 
3633 /** sets parameters to
3634  * - SCIP_PARAMSETTING_DEFAULT to use default values (see also SCIPparamsetSetToDefault())
3635  * - SCIP_PARAMSETTING_COUNTER to get feasible and "fast" counting process
3636  * - SCIP_PARAMSETTING_CPSOLVER to get CP like search (e.g. no LP relaxation)
3637  * - SCIP_PARAMSETTING_EASYCIP to solve easy problems fast
3638  * - SCIP_PARAMSETTING_FEASIBILITY to detect feasibility fast
3639  * - SCIP_PARAMSETTING_HARDLP to be capable to handle hard LPs
3640  * - SCIP_PARAMSETTING_OPTIMALITY to prove optimality fast
3641  */
3643  SCIP_PARAMSET* paramset, /**< parameter set */
3644  SCIP_SET* set, /**< global SCIP settings */
3645  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3646  SCIP_PARAMEMPHASIS paramemphasis, /**< parameter emphasis */
3647  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3648  )
3649 {
3650  /* reset all parameter to default */
3651  SCIP_CALL( SCIPparamsetSetToDefaults(paramset, set, messagehdlr) );
3652 
3653  switch( paramemphasis )
3654  {
3656  /* the default values are already set */
3657  break;
3658 
3660  /* TODO: should constraints/linear/detectlowerbound and detectcutoffbound be set to FALSE? */
3661  /* avoid logicor upgrade since the logicor constraint handler does not perform full propagation */
3662  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "constraints/linear/upgrade/logicor", FALSE, quiet) );
3663 
3664  /* set priority for inference branching to highest possible value */
3665  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "branching/inference/priority", INT_MAX/4, quiet) );
3666 
3667  /* set priority for depth first search to highest possible value */
3668  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "nodeselection/dfs/stdpriority", INT_MAX/4, quiet) );
3669 
3670  /* avoid that the ZIMPL reader transforms the problem before the problem is generated */
3671  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "reading/zplreader/usestartsol", FALSE, quiet) );
3672 
3673  /* turn off all heuristics */
3674  SCIP_CALL( paramsetSetHeuristicsOff(paramset, set, messagehdlr, quiet) );
3675 
3676  /* turn off all separation */
3677  SCIP_CALL( paramsetSetSeparatingOff(paramset, set, messagehdlr, quiet) );
3678 
3679  /* turn off restart */
3680  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/maxrestarts", 0, quiet) );
3681 
3682  /* unlimited number of propagation rounds in any branch and bound node */
3683  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "propagating/maxrounds", -1, quiet) );
3684  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "propagating/maxroundsroot", -1, quiet) );
3685 
3686  /* adjust conflict analysis for depth first search */
3687  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "conflict/fuiplevels", 1, quiet) );
3688  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "conflict/dynamic", FALSE, quiet) );
3689 
3690  /* prefer binary variables for branching */
3691  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "branching/preferbinary", TRUE, quiet) );
3692 
3693  /* turn on aggressive constraint aging */
3694  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "constraints/agelimit", 1, quiet) );
3695 
3696  /* turn off components presolver since we are currently not able to handle that in case of counting */
3697  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/components/maxrounds", 0, quiet) );
3698  break;
3699 
3701  /* shrink the minimal maximum value for the conflict length */
3702  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "conflict/minmaxvars", 10, quiet) );
3703 
3704  /* use only first unique implication point */
3705  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "conflict/fuiplevels", 1, quiet) );
3706 
3707  /* do not use reconversion conflicts */
3708  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "conflict/reconvlevels", 0, quiet) );
3709 
3710  /* after 250 conflict we force a restart since then the variable statistics are reasonable initialized */
3711  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "conflict/restartnum", 250, quiet) );
3712 
3713  /* increase the number of conflicts which induce a restart */
3714  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "conflict/restartfac", 2.0, quiet) );
3715 
3716  /* weight the variable which made into a conflict */
3717  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "conflict/conflictweight", 1.0, quiet) );
3718 
3719  /* do not check pseudo solution (for performance reasons) */
3720  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "constraints/disableenfops", TRUE, quiet) );
3721 
3722  /* use value based history to detect a reasonable branching point */
3723  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "history/valuebased", TRUE, quiet) );
3724 
3725  /* turn of LP relaxation */
3726  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "lp/solvefreq", -1, quiet) );
3727 
3728  /* prefer the down branch in case the value based history does not suggest something */
3729  SCIP_CALL( paramSetChar(paramset, set, messagehdlr, "nodeselection/childsel", 'd', quiet) );
3730 
3731  /* accept any bound change */
3732  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "numerics/boundstreps", 1e-6, quiet) );
3733 
3734  /* allow for at most 10 restart, after that the value based history should be reliable */
3735  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "presolving/maxrestarts", 10, quiet) );
3736 
3737  /* set priority for depth first search to highest possible value */
3738  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "nodeselection/dfs/stdpriority", INT_MAX/4, quiet) );
3739 
3740  break;
3741 
3743  /* set heuristics to fast, to avoid spending to much time for involved heuristics */
3744  SCIP_CALL( paramsetSetHeuristicsFast(paramset, set, messagehdlr, quiet) );
3745 
3746  /* set presolving to fast, to avoid spending to much time for involved presolving */
3747  SCIP_CALL( paramsetSetPresolvingFast(paramset, set, messagehdlr, quiet) );
3748 
3749  /* set separating to fast, to avoid spending to much time for involved separators */
3750  SCIP_CALL( paramsetSetSeparatingFast(paramset, set, messagehdlr, quiet) );
3751 
3752  break;
3753 
3755  /* set heuristics aggressive */
3756  SCIP_CALL( paramsetSetHeuristicsAggressive(paramset, set, messagehdlr, quiet) );
3757 
3758  /* reduce the amount of separation rounds and disable most expensive separators */
3759  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/maxrounds", 1, quiet) );
3760  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/maxroundsroot", 5, quiet) );
3761  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/cmir/freq", -1, quiet) );
3762  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/flowcover/freq", -1, quiet) );
3763  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/mcf/freq", -1, quiet) );
3764 
3765  /* set priority for node selection "restartdfs" to be higher as the current used one */
3766  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "nodeselection/restartdfs/stdpriority", INT_MAX/4, quiet) );
3767  break;
3768 
3770  /* set heuristics to fast, to avoid heuristics which solve also an LP */
3771  SCIP_CALL( paramsetSetHeuristicsFast(paramset, set, messagehdlr, quiet) );
3772 
3773  /* set presolving to fast, to avoid spending to much time for involved presolving */
3774  SCIP_CALL( paramsetSetPresolvingFast(paramset, set, messagehdlr, quiet) );
3775 
3776  /* reduce the amount of strong branching */
3777  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "branching/relpscost/maxreliable", 1.0, quiet) );
3778  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "branching/relpscost/inititer", 10, quiet) );
3779 
3780  /* reduce the amount of separation rounds */
3781  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/maxrounds", 1, quiet) );
3782  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "separating/maxroundsroot", 5, quiet) );
3783 
3784  break;
3785 
3787  /* set cuts aggressive */
3788  SCIP_CALL( paramsetSetSeparatingAggressive(paramset, set, messagehdlr, quiet) );
3789 
3790  /* increase the amount of strong branching */
3791  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "branching/fullstrong/maxdepth", 10, quiet) );
3792  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "branching/fullstrong/maxbounddist", 0.0, quiet) );
3793  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "branching/relpscost/sbiterquot", 1.0, quiet) );
3794  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, "branching/relpscost/sbiterofs", 1000000, quiet) );
3795  SCIP_CALL( paramSetReal(paramset, set, messagehdlr, "branching/relpscost/maxreliable", 10.0, quiet) );
3796  SCIP_CALL( paramSetBool(paramset, set, messagehdlr, "branching/relpscost/usehyptestforreliability",TRUE, quiet) );
3797  break;
3798 
3799  default:
3800  SCIPerrorMessage("the parameter setting <%d> is not allowed for emphasis call\n", paramemphasis);
3801  return SCIP_INVALIDCALL;
3802  }
3803  return SCIP_OKAY;
3804 }
3805 
3806 /** sets parameters to deactivate separators and heuristics that use auxiliary SCIP instances; should be called for
3807  * auxiliary SCIP instances to avoid recursion
3808  */
3810  SCIP_PARAMSET* paramset, /**< parameter set */
3811  SCIP_SET* set, /**< global SCIP settings */
3812  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3813  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3814  )
3815 {
3816  SCIP_HEUR** heurs;
3817  SCIP_SEPA** sepas;
3818 
3819  char paramname[SCIP_MAXSTRLEN];
3820 
3821  int nheurs;
3822  int nsepas;
3823  int i;
3824 
3825  heurs = set->heurs;
3826  nheurs = set->nheurs;
3827 
3828  /* disable all heuristics that use auxiliary SCIP instances */
3829  for( i = 0; i < nheurs; ++i )
3830  {
3831  if( SCIPheurUsesSubscip(heurs[i]) )
3832  {
3833  const char* heurname;
3834  heurname = SCIPheurGetName(heurs[i]);
3835 
3836  /* get frequency parameter of heuristic */
3837  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "heuristics/%s/freq", heurname);
3838 
3839  /* we have to unfix the parameter if it fixed and not already set to -1 */
3840  if( SCIPparamsetIsFixed(paramset, paramname) )
3841  {
3842  int oldfreq;
3843 
3844  SCIP_CALL( SCIPparamsetGetInt(paramset, paramname, &oldfreq) );
3845 
3846  /* if the frequency is already set to -1, we do not have to unfix it, but must not try to set it, either */
3847  if( oldfreq == -1 )
3848  continue;
3849 
3850  /* unfix parameter */
3851  SCIPmessageFPrintInfo(messagehdlr, NULL, "unfixing parameter %s in order to disable sub-SCIPs in the current (sub-)SCIP instance\n", paramname);
3852  SCIP_CALL( SCIPparamsetFix(paramset, paramname, FALSE) );
3853  }
3854 
3855  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, -1, quiet) );
3856  }
3857  }
3858 
3859  sepas = set->sepas;
3860  nsepas = set->nsepas;
3861 
3862  /* disable all separators that use auxiliary SCIP instances */
3863  for( i = 0; i < nsepas; ++i )
3864  {
3865  if( SCIPsepaUsesSubscip(sepas[i]) )
3866  {
3867  const char* sepaname;
3868  sepaname = SCIPsepaGetName(sepas[i]);
3869 
3870  /* get frequency parameter of separator */
3871  (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "separating/%s/freq", sepaname);
3872 
3873  /* we have to unfix the parameter if it fixed and not already set to -1 */
3874  if( SCIPparamsetIsFixed(paramset, paramname) )
3875  {
3876  int oldfreq;
3877 
3878  SCIP_CALL( SCIPparamsetGetInt(paramset, paramname, &oldfreq) );
3879 
3880  /* if the frequency is already set to -1, we do not have to unfix it, but must not try to set it, either */
3881  if( oldfreq == -1 )
3882  continue;
3883 
3884  /* unfix parameter */
3885  SCIPmessageFPrintInfo(messagehdlr, NULL, "unfixing parameter %s in order to disable sub-SCIPs in the current (sub-)SCIP instance\n", paramname);
3886  SCIP_CALL( SCIPparamsetFix(paramset, paramname, FALSE) );
3887  }
3888 
3889  SCIP_CALL( paramSetInt(paramset, set, messagehdlr, paramname, -1, quiet) );
3890  }
3891  }
3892 
3893  return SCIP_OKAY;
3894 }
3895 
3896 /** sets heuristic parameters values to
3897  * - SCIP_PARAMSETTING_DEFAULT which are the default values of all heuristic parameters
3898  * - SCIP_PARAMSETTING_FAST such that the time spend for heuristic is decreased
3899  * - SCIP_PARAMSETTING_AGGRESSIVE such that the heuristic are called more aggregative
3900  * - SCIP_PARAMSETTING_OFF which turn off all heuristics
3901  */
3903  SCIP_PARAMSET* paramset, /**< parameter set */
3904  SCIP_SET* set, /**< global SCIP settings */
3905  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3906  SCIP_PARAMSETTING paramsetting, /**< parameter settings */
3907  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3908  )
3909 {
3910  switch( paramsetting )
3911  {
3913  SCIP_CALL( paramsetSetHeuristicsDefault(paramset, set, messagehdlr, quiet) );
3914  break;
3915  case SCIP_PARAMSETTING_OFF:
3916  SCIP_CALL( paramsetSetHeuristicsOff(paramset, set, messagehdlr, quiet) );
3917  break;
3919  SCIP_CALL( paramsetSetHeuristicsFast(paramset, set, messagehdlr, quiet) );
3920  break;
3922  SCIP_CALL( paramsetSetHeuristicsAggressive(paramset, set, messagehdlr, quiet) );
3923  break;
3924  default:
3925  SCIPerrorMessage("the parameter setting <%d> is not allowed for heuristics\n", paramsetting);
3926  return SCIP_INVALIDCALL;
3927  }
3928 
3929  return SCIP_OKAY;
3930 }
3931 
3932 /** sets presolving parameters to
3933  * - SCIP_PARAMSETTING_DEFAULT which are the default values of all presolving parameters
3934  * - SCIP_PARAMSETTING_FAST such that the time spend for presolving is decreased
3935  * - SCIP_PARAMSETTING_AGGRESSIVE such that the presolving is more aggregative
3936  * - SCIP_PARAMSETTING_OFF which turn off all presolving
3937  */
3939  SCIP_PARAMSET* paramset, /**< parameter set */
3940  SCIP_SET* set, /**< global SCIP settings */
3941  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3942  SCIP_PARAMSETTING paramsetting, /**< parameter settings */
3943  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3944  )
3945 {
3946  switch( paramsetting )
3947  {
3949  SCIP_CALL( paramsetSetPresolvingDefault(paramset, set, messagehdlr, quiet) );
3950  break;
3951  case SCIP_PARAMSETTING_OFF:
3952  SCIP_CALL( paramsetSetPresolvingOff(paramset, set, messagehdlr, quiet) );
3953  break;
3955  SCIP_CALL( paramsetSetPresolvingFast(paramset, set, messagehdlr, quiet) );
3956  break;
3958  SCIP_CALL( paramsetSetPresolvingAggressive(paramset, set, messagehdlr, quiet) );
3959  break;
3960  default:
3961  SCIPerrorMessage("the parameter setting <%d> is not allowed for presolving\n", paramsetting);
3962  return SCIP_INVALIDCALL;
3963  }
3964 
3965  return SCIP_OKAY;
3966 }
3967 
3968 /** sets separating parameters to
3969  * - SCIP_PARAMSETTING_DEFAULT which are the default values of all separating parameters
3970  * - SCIP_PARAMSETTING_FAST such that the time spend for separating is decreased
3971  * - SCIP_PARAMSETTING_AGGRESSIVE such that the separating is done more aggregative
3972  * - SCIP_PARAMSETTING_OFF which turn off all separating
3973  */
3975  SCIP_PARAMSET* paramset, /**< parameter set */
3976  SCIP_SET* set, /**< global SCIP settings */
3977  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
3978  SCIP_PARAMSETTING paramsetting, /**< parameter settings */
3979  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
3980  )
3981 {
3982  switch( paramsetting )
3983  {
3985  SCIP_CALL( paramsetSetSeparatingDefault(paramset, set, messagehdlr, quiet) );
3986  break;
3987  case SCIP_PARAMSETTING_OFF:
3988  SCIP_CALL( paramsetSetSeparatingOff(paramset, set, messagehdlr, quiet) );
3989  break;
3991  SCIP_CALL( paramsetSetSeparatingFast(paramset, set, messagehdlr, quiet) );
3992  break;
3994  SCIP_CALL( paramsetSetSeparatingAggressive(paramset, set, messagehdlr, quiet) );
3995  break;
3996  default:
3997  SCIPerrorMessage("the parameter setting <%d> is not allowed for separating\n", paramsetting);
3998  return SCIP_INVALIDCALL;
3999  }
4000 
4001  return SCIP_OKAY;
4002 }
4003 
4004 /** returns the array of parameters */
4006  SCIP_PARAMSET* paramset /**< parameter set */
4007  )
4008 {
4009  assert(paramset != NULL);
4010 
4011  return paramset->params;
4012 }
4013 
4014 /** returns the number of parameters in the parameter set */
4016  SCIP_PARAMSET* paramset /**< parameter set */
4017  )
4018 {
4019  assert(paramset != NULL);
4020 
4021  return paramset->nparams;
4022 }
4023 
4024 /** copies all parameter values of the source parameter set to the corresponding parameters in the target set
4025  *
4026  * by default reoptimization is disabled after copying the parameters. if you want to use reoptimization, you have
4027  * to enable it explicitly.
4028  */
4030  SCIP_PARAMSET* sourceparamset, /**< source parameter set */
4031  SCIP_PARAMSET* targetparamset, /**< target parameter set */
4032  SCIP_SET* set, /**< global SCIP settings of target SCIP */
4033  SCIP_MESSAGEHDLR* messagehdlr /**< message handler of target SCIP */
4034  )
4035 {
4036  int i;
4037 
4038  assert(sourceparamset != NULL);
4039  assert(targetparamset != NULL);
4040  assert(sourceparamset != targetparamset);
4041  assert(set != NULL);
4042 
4043  assert(sourceparamset->nparams == 0 || sourceparamset->params != NULL);
4044  assert(targetparamset->nparams == 0 || targetparamset->params != NULL);
4045 
4046  for( i = 0; i < sourceparamset->nparams; ++i )
4047  {
4048  SCIP_PARAM* sourceparam;
4049  SCIP_PARAM* targetparam;
4050  const char* paramname;
4051 
4052  sourceparam = sourceparamset->params[i];
4053  assert(sourceparam != NULL);
4054 
4055  /* find parameter of same name in target scip */
4056  paramname = SCIPparamGetName(sourceparam);
4057  targetparam = (SCIP_PARAM*)SCIPhashtableRetrieve(targetparamset->hashtable, (void*)paramname);
4058 
4059  /* if a plugin was not copied, the parameter does not exist in the target SCIP */
4060  if( targetparam == NULL )
4061  continue;
4062 
4063  assert(SCIPparamGetType(sourceparam) == SCIPparamGetType(targetparam));
4064 
4065  /* set value of target parameter to value of source parameter */
4066  switch( SCIPparamGetType(sourceparam) )
4067  {
4068  case SCIP_PARAMTYPE_BOOL:
4069  SCIP_CALL( paramCopyBool(sourceparam, targetparam, set, messagehdlr) );
4070  break;
4071 
4072  case SCIP_PARAMTYPE_INT:
4073  SCIP_CALL( paramCopyInt(sourceparam, targetparam, set, messagehdlr) );
4074  break;
4075 
4077  SCIP_CALL( paramCopyLongint(sourceparam, targetparam, set, messagehdlr) );
4078  break;
4079 
4080  case SCIP_PARAMTYPE_REAL:
4081  SCIP_CALL( paramCopyReal(sourceparam, targetparam, set, messagehdlr) );
4082  break;
4083 
4084  case SCIP_PARAMTYPE_CHAR:
4085  SCIP_CALL( paramCopyChar(sourceparam, targetparam, set, messagehdlr) );
4086  break;
4087 
4088  case SCIP_PARAMTYPE_STRING:
4089  /* the visualization parameters are explicitly not copied to avoid that the visualization file of the original SCIP is overwritten;
4090  * to avoid a hard coded comparison, each parameter could get a Bool flag which tells if the value
4091  * of that parameter can be copied
4092  */
4093  if( strncmp(sourceparam->name, "visual/", 7) != 0 )
4094  {
4095  SCIP_CALL( paramCopyString(sourceparam, targetparam, set, messagehdlr) );
4096  }
4097  break;
4098 
4099  default:
4100  SCIPerrorMessage("unknown parameter type\n");
4101  return SCIP_INVALIDDATA;
4102  }
4103 
4104  /* copy fixing status of parameter */
4105  SCIPparamSetFixed(targetparam, SCIPparamIsFixed(sourceparam));
4106  }
4107 
4108  /* disable reoptimization explicitly */
4109  if( set->reopt_enable )
4110  {
4111  if( SCIPsetIsParamFixed(set, "reoptimization/enable") )
4112  {
4113  SCIP_CALL( SCIPsetChgParamFixed(set, "reoptimization/enable", FALSE) );
4114  }
4115  SCIP_CALL( SCIPparamsetSetBool(targetparamset, set, messagehdlr, "reoptimization/enable", FALSE) );
4116  SCIP_CALL( SCIPsetSetReoptimizationParams(set, messagehdlr) );
4117  }
4118 
4119  return SCIP_OKAY;
4120 }
4121 
4122 /** sets fixing status of given parameter */
4124  SCIP_PARAM* param, /**< parameter */
4125  SCIP_Bool fixed /**< new fixing status of the parameter */
4126  )
4127 {
4128  assert(param != NULL);
4129 
4130  param->isfixed = fixed;
4131 }
4132 
4133 /** checks value of SCIP_Bool parameter; issues a warning message if value is invalid */
4135  SCIP_PARAM* param, /**< parameter */
4136  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4137  SCIP_Bool value /**< value to check */
4138  )
4139 {
4140  assert(param != NULL);
4141 
4142  SCIP_CALL_QUIET( paramCheckBool(param, messagehdlr, value) );
4143 
4144  return SCIP_OKAY;
4145 }
4146 
4147 /** checks value of string parameter; issues a warning message if value is invalid */
4149  SCIP_PARAM* param, /**< parameter */
4150  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4151  const char* value /**< value to check */
4152  )
4153 {
4154  return paramCheckString(param, messagehdlr, value);
4155 }
4156 
4157 /** checks value of character parameter; issues a warning message if value is invalid */
4159  SCIP_PARAM* param, /**< parameter */
4160  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4161  const char value /**< value to check */
4162  )
4163 {
4164  return paramCheckChar(param, messagehdlr, value);
4165 }
4166 
4167 /** checks value of SCIP_Longint parameter; issues a warning message if value is invalid */
4169  SCIP_PARAM* param, /**< parameter */
4170  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4171  SCIP_Longint value /**< value to check */
4172  )
4173 {
4174  return paramCheckLongint(param, messagehdlr, value);
4175 }
4176 
4177 /** sets value of SCIP_Bool parameter */
4179  SCIP_PARAM* param, /**< parameter */
4180  SCIP_SET* set, /**< global SCIP settings, or NULL if param change method should not be called */
4181  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4182  SCIP_Bool value, /**< new value of the parameter */
4183  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
4184  )
4185 {
4186  assert(param != NULL);
4187 
4188  /* check, if value is possible for the parameter and the parameter is not fixed */
4189  SCIP_CALL_QUIET( paramCheckBool(param, messagehdlr, value) );
4190  SCIP_CALL_QUIET( paramCheckFixed(param, messagehdlr) );
4191 
4192  /* set the parameter's current value */
4193  if( param->data.boolparam.valueptr != NULL )
4194  *param->data.boolparam.valueptr = value;
4195  else
4196  param->data.boolparam.curvalue = value;
4197 
4198  /* call the parameter's change information method */
4199  if( param->paramchgd != NULL && set != NULL )
4200  {
4201  SCIP_CALL( param->paramchgd(set->scip, param) );
4202  }
4203 
4204  if( !quiet )
4205  {
4206  SCIP_CALL( paramWrite(param, messagehdlr, NULL, FALSE, TRUE) );
4207  }
4208 
4209  return SCIP_OKAY;
4210 }
4211 
4212 /** sets value of int parameter */
4214  SCIP_PARAM* param, /**< parameter */
4215  SCIP_SET* set, /**< global SCIP settings, or NULL if param change method should not be called */
4216  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4217  int value, /**< new value of the parameter */
4218  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
4219  )
4220 {
4221  assert(param != NULL);
4222 
4223  /* check, if value is possible for the parameter and the parameter is not fixed */
4224  SCIP_CALL_QUIET( paramCheckInt(param, messagehdlr, value) );
4225  SCIP_CALL_QUIET( paramCheckFixed(param, messagehdlr) );
4226 
4227  /* set the parameter's current value */
4228  if( param->data.intparam.valueptr != NULL )
4229  *param->data.intparam.valueptr = value;
4230  else
4231  param->data.intparam.curvalue = value;
4232 
4233  /* call the parameter's change information method */
4234  if( param->paramchgd != NULL && set != NULL )
4235  {
4236  SCIP_CALL( param->paramchgd(set->scip, param) );
4237  }
4238 
4239  if( !quiet )
4240  {
4241  SCIP_CALL( paramWrite(param, messagehdlr, NULL, FALSE, TRUE) );
4242  }
4243 
4244  return SCIP_OKAY;
4245 }
4246 
4247 /** sets value of SCIP_Longint parameter */
4249  SCIP_PARAM* param, /**< parameter */
4250  SCIP_SET* set, /**< global SCIP settings, or NULL if param change method should not be called */
4251  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4252  SCIP_Longint value, /**< new value of the parameter */
4253  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
4254  )
4255 {
4256  assert(param != NULL);
4257 
4258  /* check, if value is possible for the parameter and the parameter is not fixed */
4259  SCIP_CALL_QUIET( paramCheckLongint(param, messagehdlr, value) );
4260  SCIP_CALL_QUIET( paramCheckFixed(param, messagehdlr) );
4261 
4262  /* set the parameter's current value */
4263  if( param->data.longintparam.valueptr != NULL )
4264  *param->data.longintparam.valueptr = value;
4265  else
4266  param->data.longintparam.curvalue = value;
4267 
4268  /* call the parameter's change information method */
4269  if( param->paramchgd != NULL && set != NULL )
4270  {
4271  SCIP_CALL( param->paramchgd(set->scip, param) );
4272  }
4273 
4274  if( !quiet )
4275  {
4276  SCIP_CALL( paramWrite(param, messagehdlr, NULL, FALSE, TRUE) );
4277  }
4278 
4279  return SCIP_OKAY;
4280 }
4281 
4282 /** sets value of SCIP_Real parameter */
4284  SCIP_PARAM* param, /**< parameter */
4285  SCIP_SET* set, /**< global SCIP settings, or NULL if param change method should not be called */
4286  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4287  SCIP_Real value, /**< new value of the parameter */
4288  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
4289  )
4290 {
4291  assert(param != NULL);
4292 
4293  /* check, if value is possible for the parameter and the parameter is not fixed */
4294  value = MAX(value, SCIP_REAL_MIN);
4295  value = MIN(value, SCIP_REAL_MAX);
4296  SCIP_CALL_QUIET( paramCheckReal(param, messagehdlr, value) );
4297  SCIP_CALL_QUIET( paramCheckFixed(param, messagehdlr) );
4298 
4299  /* set the parameter's current value */
4300  if( param->data.realparam.valueptr != NULL )
4301  *param->data.realparam.valueptr = value;
4302  else
4303  param->data.realparam.curvalue = value;
4304 
4305  /* call the parameter's change information method */
4306  if( param->paramchgd != NULL && set != NULL )
4307  {
4308  SCIP_CALL( param->paramchgd(set->scip, param) );
4309  }
4310 
4311  if( !quiet )
4312  {
4313  SCIP_CALL( paramWrite(param, messagehdlr, NULL, FALSE, TRUE) );
4314  }
4315 
4316  return SCIP_OKAY;
4317 }
4318 
4319 /** sets value of char parameter */
4321  SCIP_PARAM* param, /**< parameter */
4322  SCIP_SET* set, /**< global SCIP settings, or NULL if param change method should not be called */
4323  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4324  char value, /**< new value of the parameter */
4325  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
4326  )
4327 {
4328  assert(param != NULL);
4329 
4330  /* check, if value is possible for the parameter and the parameter is not fixed */
4331  SCIP_CALL_QUIET( paramCheckChar(param, messagehdlr, value) );
4332  SCIP_CALL_QUIET( paramCheckFixed(param, messagehdlr) );
4333 
4334  /* set the parameter's current value */
4335  if( param->data.charparam.valueptr != NULL )
4336  *param->data.charparam.valueptr = value;
4337  else
4338  param->data.charparam.curvalue = value;
4339 
4340  /* call the parameter's change information method */
4341  if( param->paramchgd != NULL && set != NULL )
4342  {
4343  SCIP_CALL( param->paramchgd(set->scip, param) );
4344  }
4345 
4346  if( !quiet )
4347  {
4348  SCIP_CALL( paramWrite(param, messagehdlr, NULL, FALSE, TRUE) );
4349  }
4350 
4351  return SCIP_OKAY;
4352 }
4353 
4354 /** sets value of string parameter */
4356  SCIP_PARAM* param, /**< parameter */
4357  SCIP_SET* set, /**< global SCIP settings, or NULL if param change method should not be called */
4358  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4359  const char* value, /**< new value of the parameter */
4360  SCIP_Bool quiet /**< should the parameter be set quiet (no output) */
4361  )
4362 {
4363  assert(param != NULL);
4364 
4365  /* check, if value is possible for the parameter and the parameter is not fixed */
4366  SCIP_CALL_QUIET( paramCheckString(param, messagehdlr, value) );
4367  SCIP_CALL_QUIET( paramCheckFixed(param, messagehdlr) );
4368 
4369  /* set the parameter's current value */
4370  if( param->data.stringparam.valueptr != NULL )
4371  {
4373  SCIP_ALLOC( BMSduplicateMemoryArray(param->data.stringparam.valueptr, value, strlen(value)+1) );
4374  }
4375  else
4376  {
4378  SCIP_ALLOC( BMSduplicateMemoryArray(&param->data.stringparam.curvalue, value, strlen(value)+1) );
4379  }
4380 
4381  /* call the parameter's change information method */
4382  if( param->paramchgd != NULL && set != NULL )
4383  {
4384  SCIP_CALL( param->paramchgd(set->scip, param) );
4385  }
4386 
4387  if( !quiet )
4388  {
4389  SCIP_CALL( paramWrite(param, messagehdlr, NULL, FALSE, TRUE) );
4390  }
4391 
4392  return SCIP_OKAY;
4393 }
4394 
4395 
4396 /** changes default value of SCIP_Bool parameter */
4398  SCIP_PARAM* param, /**< parameter */
4399  SCIP_Bool defaultvalue /**< new default value */
4400  )
4401 {
4402  assert(param != NULL);
4403  assert(param->paramtype == SCIP_PARAMTYPE_BOOL);
4404 
4405  param->data.boolparam.defaultvalue = defaultvalue;
4406 }
4407 
4408 /** changes default value of int parameter */
4410  SCIP_PARAM* param, /**< parameter */
4411  int defaultvalue /**< new default value */
4412  )
4413 {
4414  assert(param != NULL);
4415  assert(param->paramtype == SCIP_PARAMTYPE_INT);
4416 
4417  assert(param->data.intparam.minvalue <= defaultvalue && param->data.intparam.maxvalue >= defaultvalue);
4418 
4419  param->data.intparam.defaultvalue = defaultvalue;
4420 }
4421 
4422 /** sets the parameter to its default setting */
4424  SCIP_PARAM* param, /**< parameter */
4425  SCIP_SET* set, /**< global SCIP settings */
4426  SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
4427  )
4428 {
4429  assert(param != NULL);
4430 
4431  /* do not change the parameter if it is fixed */
4432  if( SCIPparamIsFixed(param) )
4433  {
4434  SCIPdebugMessage("parameter <%s> is fixed and is not reset to its default value.\n", param->name);
4435 
4436  return SCIP_OKAY;
4437  }
4438 
4439  switch( param->paramtype )
4440  {
4441  case SCIP_PARAMTYPE_BOOL:
4442  SCIP_CALL( SCIPparamSetBool(param, set, messagehdlr, SCIPparamGetBoolDefault(param), TRUE) );
4443  break;
4444 
4445  case SCIP_PARAMTYPE_INT:
4446  SCIP_CALL( SCIPparamSetInt(param, set, messagehdlr, SCIPparamGetIntDefault(param), TRUE) );
4447  break;
4448 
4450  SCIP_CALL( SCIPparamSetLongint(param, set, messagehdlr, SCIPparamGetLongintDefault(param), TRUE) );
4451  break;
4452 
4453  case SCIP_PARAMTYPE_REAL:
4454  SCIP_CALL( SCIPparamSetReal(param, set, messagehdlr, SCIPparamGetRealDefault(param), TRUE) );
4455  break;
4456 
4457  case SCIP_PARAMTYPE_CHAR:
4458  SCIP_CALL( SCIPparamSetChar(param, set, messagehdlr, SCIPparamGetCharDefault(param), TRUE) );
4459  break;
4460 
4461  case SCIP_PARAMTYPE_STRING:
4462  SCIP_CALL( SCIPparamSetString(param, set, messagehdlr, SCIPparamGetStringDefault(param), TRUE) );
4463  break;
4464 
4465  default:
4466  SCIPerrorMessage("unknown parameter type\n");
4467  return SCIP_INVALIDDATA;
4468  }
4469 
4470  return SCIP_OKAY;
4471 }
4472 
4473 /** writes a single parameter to a file */
4475  SCIP_PARAM* param, /**< parameter */
4476  SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
4477  const char* filename, /**< file name, or NULL for stdout */
4478  SCIP_Bool comments, /**< should parameter descriptions be written as comments? */
4479  SCIP_Bool onlychanged /**< should only the parameters been written, that are changed from default? */
4480  )
4481 {
4482  SCIP_RETCODE retcode;
4483  FILE* file;
4484 
4485  assert(param != NULL);
4486 
4487  /* open the file for writing */
4488  if( filename != NULL )
4489  {
4490  file = fopen(filename, "w");
4491  if( file == NULL )
4492  {
4493  SCIPerrorMessage("cannot open file <%s> for writing\n", filename);
4494  SCIPprintSysError(filename);
4495  return SCIP_FILECREATEERROR;
4496  }
4497  }
4498  else
4499  file = NULL;
4500 
4501  /* write the parameter to the file */
4502  retcode = paramWrite(param, messagehdlr, file, comments, onlychanged);
4503 
4504  /* close output file */
4505  if( filename != NULL )
4506  {
4507  assert(file != NULL); /*lint !e449*/
4508  fclose(file);
4509  }
4510 
4511  SCIP_CALL( retcode );
4512 
4513  return SCIP_OKAY;
4514 }
SCIP_INTPARAM intparam
#define BMSfreeMemoryArray(ptr)
Definition: memory.h:102
SCIP_RETCODE SCIPparamsetFix(SCIP_PARAMSET *paramset, const char *name, SCIP_Bool fixed)
Definition: paramset.c:1884
SCIP_RETCODE SCIPparamsetAddChar(SCIP_PARAMSET *paramset, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1584
#define BMSallocBlockMemory(mem, ptr)
Definition: memory.h:406
enum SCIP_ParamType SCIP_PARAMTYPE
Definition: type_paramset.h:45
SCIP_PARAM ** params
SCIP_RETCODE SCIPparamsetWrite(SCIP_PARAMSET *paramset, SCIP_MESSAGEHDLR *messagehdlr, const char *filename, SCIP_Bool comments, SCIP_Bool onlychanged)
Definition: paramset.c:2585
static SCIP_RETCODE paramsetSetPresolvingFast(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:3113
#define NEXPENSIVEHEURFREQS
static void paramFree(SCIP_PARAM **param, BMS_BLKMEM *blkmem)
Definition: paramset.c:1168
SCIP_Longint defaultvalue
static SCIP_RETCODE paramsetParse(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char *line, SCIP_Bool *foundnormalparam)
Definition: paramset.c:2380
const char * SCIPheurGetName(SCIP_HEUR *heur)
Definition: heur.c:1147
SCIP_PARAMDATA * SCIPparamGetData(SCIP_PARAM *param)
Definition: paramset.c:651
void SCIPparamSetDefaultBool(SCIP_PARAM *param, SCIP_Bool defaultvalue)
Definition: paramset.c:4397
SCIP_RETCODE SCIPparamSetInt(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, int value, SCIP_Bool quiet)
Definition: paramset.c:4213
static const char * paramtypeGetName(SCIP_PARAMTYPE paramtype)
Definition: paramset.c:1641
#define SCIP_MAXSTRLEN
Definition: def.h:201
static SCIP_RETCODE paramCheckString(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, const char *value)
Definition: paramset.c:194
SCIP_RETCODE SCIPparamsetSetToDefault(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *paramname)
Definition: paramset.c:2671
SCIP_HASHTABLE * hashtable
char SCIPparamGetChar(SCIP_PARAM *param)
Definition: paramset.c:847
#define NULL
Definition: lpi_spx.cpp:130
struct SCIP_ParamData SCIP_PARAMDATA
Definition: type_paramset.h:73
static SCIP_RETCODE paramSetBool(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *paramname, SCIP_Bool value, SCIP_Bool quiet)
Definition: paramset.c:316
SCIP_Real curvalue
SCIP_BOOLPARAM boolparam
SCIP_Longint minvalue
#define SCIP_SUBVERSION
Definition: def.h:90
SCIP_RETCODE SCIPparamsetSetSeparating(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
Definition: paramset.c:3974
static SCIP_RETCODE paramsetSetPresolvingAggressive(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:3011
static SCIP_RETCODE paramCreate(SCIP_PARAM **param, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata, SCIP_Bool isadvanced)
Definition: paramset.c:943
SCIP_Bool SCIPsepaUsesSubscip(SCIP_SEPA *sepa)
Definition: sepa.c:708
static SCIP_RETCODE paramCheckInt(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, int value)
Definition: paramset.c:95
SCIP_CHARPARAM charparam
union SCIP_Param::@8 data
const char * SCIPpresolGetName(SCIP_PRESOL *presol)
Definition: presol.c:553
#define FALSE
Definition: def.h:56
SCIP_PROP * SCIPsetFindProp(SCIP_SET *set, const char *name)
Definition: set.c:3720
SCIP_Longint curvalue
int SCIPsnprintf(char *t, int len, const char *s,...)
Definition: misc.c:8174
#define TRUE
Definition: def.h:55
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:53
SCIP_PRESOL * SCIPsetFindPresol(SCIP_SET *set, const char *name)
Definition: set.c:3498
#define SCIP_CALL(x)
Definition: def.h:266
SCIP_PARAM * SCIPparamsetGetParam(SCIP_PARAMSET *paramset, const char *name)
Definition: paramset.c:1680
static SCIP_RETCODE paramParseChar(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char *valuestr)
Definition: paramset.c:1328
const char * SCIPparamGetName(SCIP_PARAM *param)
Definition: paramset.c:631
SCIP_LONGINTPARAM longintparam
SCIP_RETCODE SCIPparamsetSetToDefaults(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:2653
SCIP_Bool SCIPparamIsDefault(SCIP_PARAM *param)
Definition: paramset.c:908
#define SCIPdebugMessage
Definition: pub_message.h:77
SCIP_Real SCIPparamGetRealDefault(SCIP_PARAM *param)
Definition: paramset.c:836
internal methods for handling parameter settings
datastructures for handling parameter settings
const char * SCIPsepaGetName(SCIP_SEPA *sepa)
Definition: sepa.c:633
SCIP_Real SCIPparamGetReal(SCIP_PARAM *param)
Definition: paramset.c:800
SCIP_Real SCIPsetCeil(SCIP_SET *set, SCIP_Real val)
Definition: set.c:5378
SCIP_Longint * valueptr
static SCIP_RETCODE paramSetInt(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *paramname, int value, SCIP_Bool quiet)
Definition: paramset.c:388
enum SCIP_ParamSetting SCIP_PARAMSETTING
Definition: type_paramset.h:56
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
Definition: misc.c:1480
SCIP_RETCODE SCIPparamSetLongint(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Longint value, SCIP_Bool quiet)
Definition: paramset.c:4248
#define SCIP_REAL_FORMAT
Definition: def.h:130
SCIP_RETCODE SCIPparamCheckBool(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool value)
Definition: paramset.c:4134
static SCIP_RETCODE paramCopyBool(SCIP_PARAM *sourceparam, SCIP_PARAM *targetparam, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:496
SCIP_STRINGPARAM stringparam
SCIP_Longint SCIPparamGetLongint(SCIP_PARAM *param)
Definition: paramset.c:753
static SCIP_RETCODE paramCopyChar(SCIP_PARAM *sourceparam, SCIP_PARAM *targetparam, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:580
char * SCIPparamGetString(SCIP_PARAM *param)
Definition: paramset.c:883
SCIP_RETCODE SCIPparamsetSetToSubscipsOff(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:3809
SCIP_CONSHDLR * SCIPsetFindConshdlr(SCIP_SET *set, const char *name)
Definition: set.c:3381
SCIP_Bool SCIPsetIsParamFixed(SCIP_SET *set, const char *name)
Definition: set.c:2572
SCIP_RETCODE SCIPparamsetGetInt(SCIP_PARAMSET *paramset, const char *name, int *value)
Definition: paramset.c:1724
SCIP_RETCODE SCIPparamSetBool(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool value, SCIP_Bool quiet)
Definition: paramset.c:4178
SCIP_Bool curvalue
#define SCIPerrorMessage
Definition: pub_message.h:45
SCIP_RETCODE SCIPparamsetSetReal(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_Real value)
Definition: paramset.c:2134
static SCIP_RETCODE paramParseReal(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char *valuestr)
Definition: paramset.c:1299
static SCIP_RETCODE paramParseLongint(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char *valuestr)
Definition: paramset.c:1270
SCIP_RETCODE SCIPparamsetSetDefaultInt(SCIP_PARAMSET *paramset, const char *name, int defaultvalue)
Definition: paramset.c:2069
SCIP_RETCODE SCIPparamsetGetBool(SCIP_PARAMSET *paramset, const char *name, SCIP_Bool *value)
Definition: paramset.c:1692
unsigned int isadvanced
SCIP_RETCODE SCIPparamSetChar(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char value, SCIP_Bool quiet)
Definition: paramset.c:4320
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
Definition: cons.c:3897
static SCIP_RETCODE paramsetSetHeuristicsOff(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:2888
SCIP_RETCODE SCIPsetSetSeparating(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
Definition: set.c:3092
SCIP_Bool SCIPparamIsFixed(SCIP_PARAM *param)
Definition: paramset.c:671
static SCIP_RETCODE paramsetSetPresolvingDefault(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:2926
SCIP_RETCODE SCIPparamSetString(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *value, SCIP_Bool quiet)
Definition: paramset.c:4355
#define BMSallocMemory(ptr)
Definition: memory.h:74
SCIP_Bool * valueptr
SCIP_RETCODE SCIPparamsetGetLongint(SCIP_PARAMSET *paramset, const char *name, SCIP_Longint *value)
Definition: paramset.c:1756
SCIP_RETCODE SCIPparamsetCreate(SCIP_PARAMSET **paramset, BMS_BLKMEM *blkmem)
Definition: paramset.c:1394
#define SCIP_DECL_PARAMCHGD(x)
Definition: type_paramset.h:88
void SCIPmessagePrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
Definition: message.c:411
SCIP_RETCODE SCIPparamsetSetEmphasis(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_PARAMEMPHASIS paramemphasis, SCIP_Bool quiet)
Definition: paramset.c:3642
SCIP_RETCODE SCIPparamsetAddLongint(SCIP_PARAMSET *paramset, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Longint *valueptr, SCIP_Bool isadvanced, SCIP_Longint defaultvalue, SCIP_Longint minvalue, SCIP_Longint maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1524
SCIP_RETCODE SCIPparamsetAddString(SCIP_PARAMSET *paramset, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, char **valueptr, SCIP_Bool isadvanced, const char *defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1613
static SCIP_RETCODE paramCopyReal(SCIP_PARAM *sourceparam, SCIP_PARAM *targetparam, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:559
SCIP_SEPA * SCIPsetFindSepa(SCIP_SET *set, const char *name)
Definition: set.c:3646
internal methods for global SCIP settings
static SCIP_RETCODE paramsetSetSeparatingOff(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:3585
SCIP_RETCODE SCIPsetSetReoptimizationParams(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: set.c:614
SCIP_Real maxvalue
#define BMSreallocMemoryArray(ptr, num)
Definition: memory.h:82
#define BMSfreeMemory(ptr)
Definition: memory.h:100
SCIP_RETCODE SCIPparamsetSetHeuristics(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
Definition: paramset.c:3902
SCIP_RETCODE SCIPsetSetPresolving(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
Definition: set.c:3074
static SCIP_RETCODE paramWrite(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, FILE *file, SCIP_Bool comments, SCIP_Bool onlychanged)
Definition: paramset.c:225
int SCIPparamsetGetNParams(SCIP_PARAMSET *paramset)
Definition: paramset.c:4015
static SCIP_RETCODE paramCreateString(SCIP_PARAM **param, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, char **valueptr, SCIP_Bool isadvanced, const char *defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1136
#define BMSduplicateMemoryArray(ptr, source, num)
Definition: memory.h:98
#define BMSfreeMemoryArrayNull(ptr)
Definition: memory.h:103
static SCIP_RETCODE paramCopyLongint(SCIP_PARAM *sourceparam, SCIP_PARAM *targetparam, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:538
SCIP_Bool SCIPheurUsesSubscip(SCIP_HEUR *heur)
Definition: heur.c:1198
static SCIP_RETCODE paramsetSetHeuristicsFast(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:2846
SCIP_PARAMTYPE SCIPparamGetType(SCIP_PARAM *param)
Definition: paramset.c:621
SCIP_RETCODE SCIPparamSetReal(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Real value, SCIP_Bool quiet)
Definition: paramset.c:4283
SCIP_RETCODE SCIPsetSetHeuristics(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
Definition: set.c:3056
#define SCIP_Bool
Definition: def.h:53
unsigned int isfixed
static SCIP_RETCODE paramSetReal(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *paramname, SCIP_Real value, SCIP_Bool quiet)
Definition: paramset.c:460
static SCIP_RETCODE emphasisParse(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char *line)
Definition: paramset.c:2237
static SCIP_RETCODE paramParseBool(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char *valuestr)
Definition: paramset.c:1210
static SCIP_RETCODE paramsetSetSeparatingFast(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:3524
SCIP_RETCODE SCIPparamsetSetInt(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, int value)
Definition: paramset.c:2035
static SCIP_RETCODE paramCheckFixed(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:55
#define EPSZ(x, eps)
Definition: def.h:157
void SCIPprintSysError(const char *message)
Definition: misc.c:8110
static const char * paramname[]
Definition: lpi_msk.c:4201
SCIP_RETCODE SCIPparamsetGetReal(SCIP_PARAMSET *paramset, const char *name, SCIP_Real *value)
Definition: paramset.c:1788
#define MAX(x, y)
Definition: tclique_def.h:75
SCIP_RETCODE SCIPparamsetSetDefaultBool(SCIP_PARAMSET *paramset, const char *name, SCIP_Bool defaultvalue)
Definition: paramset.c:2004
static SCIP_RETCODE paramCreateLongint(SCIP_PARAM **param, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Longint *valueptr, SCIP_Bool isadvanced, SCIP_Longint defaultvalue, SCIP_Longint minvalue, SCIP_Longint maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1034
SCIP_RETCODE SCIPparamsetGetString(SCIP_PARAMSET *paramset, const char *name, char **value)
Definition: paramset.c:1852
#define SCIP_CALL_QUIET(x)
Definition: def.h:241
SCIP_RETCODE SCIPparamsetSetBool(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_Bool value)
Definition: paramset.c:1970
SCIP_RETCODE SCIPhashtableSafeInsert(SCIP_HASHTABLE *hashtable, void *element)
Definition: misc.c:1608
static SCIP_DECL_HASHGETKEY(hashGetKeyParam)
Definition: paramset.c:43
SCIP_RETCODE SCIPparamsetCopyParams(SCIP_PARAMSET *sourceparamset, SCIP_PARAMSET *targetparamset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:4029
SCIP_Real * valueptr
#define BMSfreeBlockMemory(mem, ptr)
Definition: memory.h:419
SCIP_RETCODE SCIPparamsetSetPresolving(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
Definition: paramset.c:3938
static SCIP_RETCODE paramSetLongint(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *paramname, SCIP_Longint value, SCIP_Bool quiet)
Definition: paramset.c:424
SCIP_HEUR * SCIPsetFindHeur(SCIP_SET *set, const char *name)
Definition: set.c:3812
static SCIP_RETCODE paramsetSetPresolvingOff(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:3196
SCIP_Bool SCIPparamGetBool(SCIP_PARAM *param)
Definition: paramset.c:681
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
Definition: misc.c:1627
SCIP_RETCODE SCIPparamsetAddInt(SCIP_PARAMSET *paramset, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1494
static SCIP_RETCODE paramCreateReal(SCIP_PARAM **param, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1067
int SCIPparamGetIntMax(SCIP_PARAM *param)
Definition: paramset.c:731
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
Definition: misc.c:1510
#define SCIP_HASHSIZE_PARAMS
Definition: def.h:210
enum SCIP_ParamEmphasis SCIP_PARAMEMPHASIS
Definition: type_paramset.h:70
#define SCIP_REAL_MAX
Definition: def.h:128
int SCIPparamGetInt(SCIP_PARAM *param)
Definition: paramset.c:706
SCIP_RETCODE SCIPparamsetSetString(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, const char *value)
Definition: paramset.c:2202
static SCIP_RETCODE paramCopyString(SCIP_PARAM *sourceparam, SCIP_PARAM *targetparam, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:601
#define SCIP_REAL_MIN
Definition: def.h:129
SCIP_RETCODE SCIPparamCheckChar(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, const char value)
Definition: paramset.c:4158
static SCIP_RETCODE paramsetSetHeuristicsDefault(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:2695
static SCIP_RETCODE paramSetChar(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *paramname, char value, SCIP_Bool quiet)
Definition: paramset.c:352
#define SCIP_VERSION
Definition: def.h:89
static SCIP_RETCODE paramParseInt(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char *valuestr)
Definition: paramset.c:1241
static SCIP_RETCODE paramCreateChar(SCIP_PARAM **param, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1100
static SCIP_RETCODE paramCopyInt(SCIP_PARAM *sourceparam, SCIP_PARAM *targetparam, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:517
SCIP_RETCODE SCIPsetChgParamFixed(SCIP_SET *set, const char *name, SCIP_Bool fixed)
Definition: set.c:2678
char * SCIPparamGetCharAllowedValues(SCIP_PARAM *param)
Definition: paramset.c:861
SCIP_RETCODE SCIPparamCheckLongint(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Longint value)
Definition: paramset.c:4168
static SCIP_RETCODE paramCheckReal(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Real value)
Definition: paramset.c:137
SCIP_RETCODE SCIPparamsetAddReal(SCIP_PARAMSET *paramset, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1554
SCIP_PARAMTYPE paramtype
SCIP_Bool defaultvalue
SCIP_PARAMDATA * paramdata
void SCIPmessageFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr,...)
Definition: message.c:602
SCIP_Longint SCIPparamGetLongintMax(SCIP_PARAM *param)
Definition: paramset.c:778
static SCIP_RETCODE paramCheckBool(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool value)
Definition: paramset.c:74
const char * SCIPparamGetDesc(SCIP_PARAM *param)
Definition: paramset.c:641
SCIP_Real defaultvalue
#define SCIP_Real
Definition: def.h:127
#define MIN(x, y)
Definition: memory.c:67
SCIP_Longint SCIPparamGetLongintDefault(SCIP_PARAM *param)
Definition: paramset.c:789
int SCIPparamGetIntMin(SCIP_PARAM *param)
Definition: paramset.c:720
void SCIPparamsetFree(SCIP_PARAMSET **paramset, BMS_BLKMEM *blkmem)
Definition: paramset.c:1414
int SCIPparamGetIntDefault(SCIP_PARAM *param)
Definition: paramset.c:742
SCIP_Longint maxvalue
SCIP_RETCODE SCIPparamsetRead(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *filename)
Definition: paramset.c:2535
char * SCIPparamGetStringDefault(SCIP_PARAM *param)
Definition: paramset.c:897
SCIP_RETCODE SCIPparamSetToDefault(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
Definition: paramset.c:4423
SCIP_RETCODE SCIPparamsetSetLongint(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_Longint value)
Definition: paramset.c:2100
static SCIP_RETCODE paramsetSetHeuristicsAggressive(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:2743
SCIP_RETCODE SCIPparamsetSetChar(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, char value)
Definition: paramset.c:2168
static SCIP_RETCODE paramsetSetSeparatingAggressive(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:3350
#define SCIP_Longint
Definition: def.h:112
SCIP_Bool SCIPparamsetIsFixed(SCIP_PARAMSET *paramset, const char *name)
Definition: paramset.c:1658
SCIP_RETCODE SCIPparamsetGetChar(SCIP_PARAMSET *paramset, const char *name, char *value)
Definition: paramset.c:1820
SCIP_Real SCIPparamGetRealMin(SCIP_PARAM *param)
Definition: paramset.c:814
static SCIP_RETCODE paramsetSetSeparatingDefault(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Bool quiet)
Definition: paramset.c:3274
SCIP_PARAM ** SCIPparamsetGetParams(SCIP_PARAMSET *paramset)
Definition: paramset.c:4005
static SCIP_RETCODE paramCreateInt(SCIP_PARAM **param, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1001
SCIP_Bool SCIPparamGetBoolDefault(SCIP_PARAM *param)
Definition: paramset.c:695
static SCIP_RETCODE paramParseString(SCIP_PARAM *param, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, char *valuestr)
Definition: paramset.c:1357
SCIP_RETCODE SCIPparamsetAddBool(SCIP_PARAMSET *paramset, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:1467
SCIP_RETCODE SCIPparamWrite(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, const char *filename, SCIP_Bool comments, SCIP_Bool onlychanged)
Definition: paramset.c:4474
static SCIP_RETCODE paramCheckLongint(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, SCIP_Longint value)
Definition: paramset.c:116
struct BMS_BlkMem BMS_BLKMEM
Definition: memory.h:392
static SCIP_RETCODE paramCreateBool(SCIP_PARAM **param, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
Definition: paramset.c:972
SCIP_Longint SCIPparamGetLongintMin(SCIP_PARAM *param)
Definition: paramset.c:767
SCIP_Bool SCIPparamIsAdvanced(SCIP_PARAM *param)
Definition: paramset.c:661
void SCIPparamSetDefaultInt(SCIP_PARAM *param, int defaultvalue)
Definition: paramset.c:4409
#define SCIP_ALLOC(x)
Definition: def.h:277
#define SCIPABORT()
Definition: def.h:238
static SCIP_RETCODE paramsetAdd(SCIP_PARAMSET *paramset, SCIP_PARAM *param)
Definition: paramset.c:1439
char SCIPparamGetCharDefault(SCIP_PARAM *param)
Definition: paramset.c:872
static SCIP_RETCODE paramCheckChar(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, char value)
Definition: paramset.c:158
SCIP_REALPARAM realparam
SCIP_RETCODE SCIPparamCheckString(SCIP_PARAM *param, SCIP_MESSAGEHDLR *messagehdlr, const char *value)
Definition: paramset.c:4148
const char * SCIPpropGetName(SCIP_PROP *prop)
Definition: prop.c:887
SCIP_Real SCIPparamGetRealMax(SCIP_PARAM *param)
Definition: paramset.c:825
SCIP callable library.
void SCIPparamSetFixed(SCIP_PARAM *param, SCIP_Bool fixed)
Definition: paramset.c:4123
SCIP_Real minvalue
SCIP_RETCODE SCIPparamsetSet(SCIP_PARAMSET *paramset, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, const char *name, void *value)
Definition: paramset.c:1908