All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
xternal.c
Go to the documentation of this file.
31 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
45 * - incorporates a full-scale mixed integer quadratically constrained programming (MIQCP) solver.
47 * See the web site of <a href="http://scip.zib.de">SCIP</a> for more information about licensing and to download SCIP.
49 * SCIP is developed together with <a href="http://www3.mathematik.tu-darmstadt.de/ags/optimierung/research/discrete-optimization.html">TU Darmstadt</a> and
50 * <a href="http://www.am.uni-erlangen.de/wima/">University of Erlangen-Nürnberg (Chair of EDOM)</a>
131 * SCIP contains several examples that demonstrate its usage. They are contained in the "examples" directory
142 * An implementation of the column generation approach for the binpacking problem. It includes a customized reader,
151 * A solver for a simple capacity-constrained vehicle routing problem, which is based on pricing tours via a dynamic
173 * A short implementations of a constraint handler, two easy combinatorial heuristics, a file reader, etc. which
174 * demonstrate the usage of SCIP as a branch-and-cut-framework for solving traveling salesman problem instances.
187 * An example showing how to setup constraints (esp. nonlinear ones) when using SCIP as callable library.
234 * There are several extensions of SCIP for particular applications included in the release. They are contained in the "applications" directory
264 * <a href="http://scip.zib.de/doc/applications/MultiObjective"><b>Multi-objective Optimization</b></a>
274 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
283 * - No spaces between control structure keywords like "if", "for", "while", "switch" and the corresponding brackets.
284 * - No spaces between a function name and the parenthesis in both the definition and function calls.
286 * - All global functions start with "SCIP". In the usual naming scheme this is followed by the object and a method name
288 * - Make all functions that are not used outside the module 'static'. Naming should start with a lower case letter.
340 * If you are using (x)emacs, you can use the following customization for the c++-mode. These settings satisfy the
365 * Eclipse user can use the profile below. This profile does not match the \SCIP coding guideline completely.
372 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
373 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_for" value="insert"/>
376 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_base_types" value="do not insert"/>
378 * <setting id="org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_switch" value="false"/>
379 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
380 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
381 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_if" value="insert"/>
382 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_exception_specification" value="do not insert"/>
383 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
384 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_base_types" value="insert"/>
385 * <setting id="org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_access_specifier" value="true"/>
386 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_exception_specification" value="do not insert"/>
387 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_arguments" value="insert"/>
388 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
389 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
390 * <setting id="org.eclipse.cdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
391 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
392 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
393 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
394 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
395 * <setting id="org.eclipse.cdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
396 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_declarator_list" value="insert"/>
397 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_bracket" value="do not insert"/>
398 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_for" value="insert"/>
399 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
401 * <setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_else_in_if_statement" value="insert"/>
403 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
404 * <setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
406 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_switch" value="insert"/>
407 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
409 * <setting id="org.eclipse.cdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
410 * <setting id="org.eclipse.cdt.core.formatter.keep_empty_array_initializer_on_one_line" value="false"/>
411 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
413 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_switch" value="do not insert"/>
414 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
415 * <setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
416 * <setting id="org.eclipse.cdt.core.formatter.brace_position_for_method_declaration" value="next_line"/>
417 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_while" value="insert"/>
418 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
419 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
420 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_arguments" value="insert"/>
421 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_base_clause" value="do not insert"/>
423 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
424 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_declarator_list" value="do not insert"/>
425 * <setting id="org.eclipse.cdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
426 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_while" value="do not insert"/>
427 * <setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_brackets" value="do not insert"/>
428 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_bracket" value="do not insert"/>
429 * <setting id="org.eclipse.cdt.core.formatter.alignment_for_parameters_in_method_declaration" value="48"/>
430 * <setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
432 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
433 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
434 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
436 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
437 * <setting id="org.eclipse.cdt.core.formatter.brace_position_for_type_declaration" value="next_line"/>
438 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
439 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_arguments" value="do not insert"/>
440 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_expression_list" value="do not insert"/>
441 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_parameters" value="do not insert"/>
444 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
445 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_parameters" value="do not insert"/>
446 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
447 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_binary_operator" value="insert"/>
448 * <setting id="org.eclipse.cdt.core.formatter.alignment_for_conditional_expression" value="16"/>
449 * <setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
450 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
451 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_if" value="insert"/>
452 * <setting id="org.eclipse.cdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
453 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
454 * <setting id="org.eclipse.cdt.core.formatter.indent_access_specifier_compare_to_type_header" value="false"/>
455 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
456 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
457 * <setting id="org.eclipse.cdt.core.formatter.continuation_indentation_for_array_initializer" value="1"/>
458 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
459 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
460 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
461 * <setting id="org.eclipse.cdt.core.formatter.indent_body_declarations_compare_to_namespace_header" value="false"/>
462 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
463 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
465 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
466 * <setting id="org.eclipse.cdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
467 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_template_parameters" value="insert"/>
468 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_expression_list" value="insert"/>
469 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
470 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_exception_specification" value="insert"/>
471 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_binary_operator" value="insert"/>
472 * <setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_identifier_in_function_declaration" value="do not insert"/>
473 * <setting id="org.eclipse.cdt.core.formatter.alignment_for_base_clause_in_type_declaration" value="80"/>
474 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
475 * <setting id="org.eclipse.cdt.core.formatter.insert_space_between_empty_parens_in_exception_specification" value="do not insert"/>
476 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
477 * <setting id="org.eclipse.cdt.core.formatter.indent_declaration_compare_to_template_header" value="false"/>
478 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
479 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_switch" value="do not insert"/>
481 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
482 * <setting id="org.eclipse.cdt.core.formatter.indent_statements_compare_to_block" value="true"/>
483 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_template_arguments" value="do not insert"/>
484 * <setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="insert"/>
485 * <setting id="org.eclipse.cdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="48"/>
486 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
487 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_paren_in_cast" value="do not insert"/>
488 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_paren_in_catch" value="insert"/>
489 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_angle_bracket_in_template_parameters" value="do not insert"/>
491 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_parameters" value="do not insert"/>
492 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_while" value="insert"/>
493 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
494 * <setting id="org.eclipse.cdt.core.formatter.brace_position_for_block_in_case" value="next_line"/>
496 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
497 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_base_clause" value="insert"/>
498 * <setting id="org.eclipse.cdt.core.formatter.insert_new_line_after_template_declaration" value="do not insert"/>
499 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_catch" value="insert"/>
502 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_if" value="do not insert"/>
503 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_paren_in_switch" value="insert"/>
505 * <setting id="org.eclipse.cdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
507 * <setting id="org.eclipse.cdt.core.formatter.brace_position_for_namespace_declaration" value="end_of_line"/>
508 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
509 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
510 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
511 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_angle_bracket_in_template_arguments" value="do not insert"/>
512 * <setting id="org.eclipse.cdt.core.formatter.brace_position_for_array_initializer" value="end_of_line"/>
513 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
514 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_catch" value="do not insert"/>
515 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_brace_in_namespace_declaration" value="insert"/>
516 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
517 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_closing_bracket" value="do not insert"/>
518 * <setting id="org.eclipse.cdt.core.formatter.insert_new_line_before_while_in_do_statement" value="insert"/>
519 * <setting id="org.eclipse.cdt.core.formatter.insert_space_before_opening_paren_in_for" value="do not insert"/>
520 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_closing_angle_bracket_in_template_parameters" value="insert"/>
521 * <setting id="org.eclipse.cdt.core.formatter.insert_space_after_opening_angle_bracket_in_template_arguments" value="do not insert"/>
527 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
531 * In most cases (LINUX and MAC) it is quite easy to compile and install SCIP. Therefore, reading the section
532 * \ref BRIEFINSTALL "Brief installation description" should usually be enough. If this is not the case you find
533 * \ref DETAILEDINSTALL "Detailed installation description" below as well as \ref EXAMPLE1 "Examples".
537 * The easiest way to install SCIP is to use the SCIP Optimization Suite which contains SCIP, SoPlex, and ZIMPL. For
538 * that we refer to the INSTALL file of the SCIP Optimization Suite (main advantage: there is no need
546 * -# (optional) install the header, libraries, and binary <code>make install INSTALLDIR="/usr/local/</code>
571 * In this section we describe the use, and a few features, of the SCIP Makefile. We also give two examples for how to install
572 * SCIP. The \ref EXAMPLE1 "first example" illustrates the default installation. This means, with SoPleX and ZIMPL. The
573 * \ref EXAMPLE2 "second example" shows how to get CPLEX linked to SCIP without ZIMPL. This is followed by a section which
574 * gives some hints on what to do if the \ref COMPILERPROBLEMS "compilation throws an error". We give some comments on
577 * If you experience any problems during the installation, you will find help in the \ref INSTALL "INSTALL" file.
579 * SCIP contains a makefile system, which allows the individual setting of several parameters. For
582 * - <code>OPT=<dbg|opt|opt-gccold></code> Here <code>dbg</code> turns on the debug mode of SCIP. This enables asserts
583 * and avoids macros for several function in order to ease debugging. The default is <code>opt</code>, which enables
584 * the optimized mode. The third option <code>opt-gccold</code> will work with older GCC compilers before version
587 * - <code>LPS=<clp|cpx|grb|msk|qso|spx|xprs|none></code> This determines the LP-solver, which should have been
596 * - <code>none</code>: no LP-solver (you should set the parameter <lp/solvefreq> to <-1> to avoid solving LPs)
598 * - <code>LPSOPT=<dbg|opt|opt-gccold></code> Chooses the debug or optimized version (or old GCC optimized) version of
601 * - <code>ZIMPL=<true|false></code> Turns direct support of ZIMPL in SCIP on (default) or off, respectively.
602 * - <code>ZIMPLOPT=<dbg|opt|opt-gccold></code> Chooses the debug or optimized (default) (or old GCC optimized)
604 * If the ZIMPL-support is disabled, the GMP-library is no longer needed for SCIP and therefore not linked to SCIP.
606 * - <code>READLINE=<true|false></code> Turns support via the readline library on (default) or off, respectively.
608 * - <code>IPOPT=<true|false></code> to enable or disable (default) IPOPT interface (needs IPOPT)
610 * - <code>EXPRINT=<cppad|none></code> to use CppAD as expressions interpreter (default) or no expressions interpreter
612 * - <code>GAMS=<true|false></code> to enable or disable (default) reading functionality in GAMS reader (needs GAMS)
616 * - <code>NOBLKBUFMEM=<true></code> turns off the internal SCIP block and buffer memory. This way the code can be checked by valgrind or
617 * similar tools. (The individual options <code>NOBLKMEM=<true></code> and <code>NOBUFMEM=<true></code> to turn off the SCIP block and
620 * - <code>SHARED=<true></code> generates a shared object of the SCIP libraries. (The binary uses these shared
622 * - <code>OPT=prf</code> generates a profiling version of SCIP providing a detailed statistic of the time usage of
627 * - <code>COMP=intel</code> Uses of the Intel compiler which is only available with the main optimization flags
639 * - <code>depend</code> Creates dependencies files. This is only needed if you add files to SCIP.
648 * - <code>make.<sys>.<machine>.<compiler>.<dbg|opt|prf|opt-gccold></code> These file contain system/compiler specific
652 * If your platform or compiler is not supported by SCIP you might try and copy one of the existing
659 * Typing <code>make</code> uses SoPlex as LP solver and includes support for the modeling language ZIMPL. You will be asked the
666 - Current settings: LPS=spx OSTYPE=linux ARCH=x86_64 COMP=gnu SUFFIX= ZIMPL=true ZIMPLOPT=opt IPOPT=false IPOPTOPT=opt
674 -> "libsoplex.*" is the path to the SoPlex library, e.g., "../../soplex/lib/libsoplex.linux.x86.gnu.opt.a"
675 -> "zimplinc" is a directory containing the path to the ZIMPL "src" directory, e.g., "../../zimpl/src".
676 -> "libzimpl.*" is the path to the ZIMPL library, e.g., "../../zimpl/lib/libzimpl.linux.x86.gnu.opt.a"
685 > Enter soft-link target file or directory for "lib/libsoplex.linux.x86_64.gnu.opt.a" (return if not needed):
687 -> creating softlink "lib/libsoplex.linux.x86_64.gnu.opt.a" -> "../../soplex/lib/libsoplex.linux.x86_64.gnu.opt.a"
691 * this soft-link is not necessarily needed since "lib/libsoplex.linux.x86_64.gnu.opt.a" already exists - press return to skip
692 > Enter soft-link target file or directory for "lib/libsoplex.linux.x86_64.gnu.opt.so" (return if not needed):
694 * skipped creation of softlink "lib/libsoplex.linux.x86_64.gnu.opt.so". Call "make links" if needed later.
704 > Enter soft-link target file or directory for "lib/libzimpl.linux.x86_64.gnu.opt.a" (return if not needed):
706 -> creating softlink "lib/libzimpl.linux.x86_64.gnu.opt.a" -> "../../zimpl/lib/libzimpl.linux.x86_64.gnu.opt.a"
710 * this soft-link is not necessarily needed since "lib/libzimpl.linux.x86_64.gnu.opt.a" already exists - press return to skip
711 > Enter soft-link target file or directory for "lib/libzimpl.linux.x86_64.gnu.opt.so" (return if not needed):
713 * skipped creation of softlink "lib/libzimpl.linux.x86_64.gnu.opt.so". Call "make links" if needed later.
726 * Typing <code>make LPS=cpx ZIMPL=false</code> uses CPLEX as LP solver. You will be asked the following questions on
733 - Current settings: LPS=cpx OSTYPE=linux ARCH=x86_64 COMP=gnu SUFFIX= ZIMPL=false ZIMPLOPT=opt IPOPT=false IPOPTOPT=opt
741 -> "libcplex.*" is the path to the CPLEX library, e.g., "<CPLEX-path>/lib/x86_rhel4.0_3.4/static_pic/libcplex.a"
750 > Enter soft-link target file or directory for "lib/libcplex.linux.x86_64.gnu.a" (return if not needed):
752 -> creating softlink "lib/libcplex.linux.x86_64.gnu.a" -> "../../../../adm_cple/cplex121/lib/x86-64_sles9.0_3.3/static_pic/libcplex.a"
756 > Enter soft-link target file or directory for "lib/libcplex.linux.x86_64.gnu.so" (return if not needed):
758 * skipped creation of softlink "lib/libcplex.linux.x86_64.gnu.so". Call "make links" if needed later.
771 * - If the soft-link query script does not work on your machine, read step 2 in the \ref INSTALL "INSTALL" file for
775 * <code>make: *** No rule to make target `lib/???', needed by `obj/O.linux.x86.gnu.opt/lib/scip/???.o'. Stop.</code>\n
776 * the corresponding soft-link was not created or points to a wrong location. Check the soft-link targets in the "lib/"
777 * subdirectory. Try to delete all soft-links from the "lib/" directory\n and call "make links" to generate them
778 * again. If this still fails, read step 2 for instructions on manually\n creating the soft-links.
782 * the corresponding machine dependent makefile for your architecture and compiler is missing.\n Create one of the given
783 * name in the "make/" subdirectory. You may take\n "make/make.linux.x86.gnu.opt" or any other file in the make
786 * - The readline library seems to differ slightly on different OS distributions. Some versions do
793 * - On some systems, the <code>sigaction()</code> method is not available. In this case, you have
794 * to either add <code>-DNO_SIGACTION</code> to the FLAGS in the appropriate "make/make.*" file, or
798 * - On some systems, the <code>rand_r()</code> method is not available. In this case, you have to either add
799 * <code>-DNO_RAND_R</code> to the FLAGS in the appropriate "make/make.*" file, or to compile with
802 * - On some systems, the <code>strtok_r()</code> method is not available. In this case, you have
803 * to either add <code>-DNO_STRTOK_R</code> to the FLAGS in the appropriate make/make.* file, or to
804 * compile with <code>make USRFLAGS=-DNO_STRTOK_R</code>. Make sure, the file "src/scip/misc.c" is
807 * - On some systems, the <code>strerror_r()</code> method is not available. In this case, you have
808 * to either add <code>-DNO_STRERROR_R</code> to the FLAGS in the appropriate "make/make.*" file, or
812 * - On some systems, the option [-e] is not available for the read command. You have to compile with READ=read.
815 * VERBOSE=true ...</code> in order to get the full compiler invocation. This might help to fix the
820 * To build your own windows binaries under windows we recommend using the MinGW-Compiler with MSYS
826 * - pcre (here suffices the pcre7.0-lib.zip (or equivalent) to be extracted into the mingw-folder)
828 * After calling <code>make clean</code> in the ZIMPL folder you will also need flex and bison to
829 * remake ZIMPL. We recommend NOT to use <code>"make clean"</code> inside the ZIMPL-folder if you do
832 * You can download these additional packages from <a href="http://gnuwin32.sourceforge.net/packages.html">here</a>
835 * Second you need to copy the file <code>sh.exe</code> to <code>bash.exe</code> otherwise various
837 * getopt-options, but for mingw you need to add the entry <code>\#include <getopt.h></code> into
840 * Finally, there is one package you need to compile if you want to use ZIMPL and ZIMPL-support in
843 * <code>./configure --prefix=/mingw ; make ; make install</code> should succeed without problems
852 * To run the program, enter <code>bin/scip</code> for the last compiled version. If you have more than one compiled
859 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
866 * Instructions on how to write a new plugin and include it in SCIP can be found in the corresponding
869 * SCIP can also be used for writing your own branch-and-cut or branch-and-cut-and-price code. SCIP already
870 * provides a number of existing code examples which we suggest as both reference and starting point
879 * - The <a href="http://scip.zib.de/doc/examples/VRP"><b>VRP</b></a>-example is a <b>branch-and-cut-and-price</b> (column generation)-code
882 * and the <a href="http://scip.zib.de/doc/applications/Coloring"><b>Coloring</b></a> application are
894 * from the SCIP root directory for copying the content of the <code>Binpacking</code>-example into a fresh
909 * Note that you need to update the dependency files before compiling your project via <code>make depend</code>.
919 * If are using SCIP as a black box solver, here you will find some tips and tricks what you can do.
923 * First of all, we need a SCIP binary and an example problem file to work with. Therefore, you can either download the
924 * SCIP standard distribution (which includes problem files) and compile it on your own or you can download a
925 * precompiled binary and an example problem separately. SCIP can read files in LP, MPS, ZPL, WBO, FZN, PIP, OSiL, and other formats (see \ref FILEREADERS).
927 * If you want to download the source code of the SCIP standard distribution, we recommend to go to the <a
928 * href="http://scip.zib.de/#download">SCIP download section</a>, download the latest release (version 3.0 as
929 * of this writing), inflate the tarball (e.g., with "tar xzf scipoptsuite-[version].tgz"), and follow the instructions
930 * in the INSTALL file. The instance stein27, which will serve as an example in this tutorial, can be found under
933 * If you want to download a precompiled binary, go to the <a href="http://scip.zib.de/#download">SCIP download
934 * section</a> and download an appropriate binary for your operating system. The SCIP source code distribution already comes with
935 * the example problem instance used throughout this tutorial. To follow this tutorial with a precompiled binary, we recommend downloading the instance
939 * Now start your binary, without any arguments. This opens the interactive shell, which should look somehow like this:
942 * SCIP version 2.0.1 [precision: 8 byte] [memory: block] [mode: optimized] [LP solver: SoPlex 1.5.0]
947 * ZIMPL 3.1.0 Zuse Institute Mathematical Programming Language developed by T. Koch (zimpl.zib.de)
954 * First of all "help" shows you a list of all available shell commands. Brackets indicate a submenu with further options.
964 * Okay, let's solve some MIPs... use "read <path/to/file>" to parse a problem file, "optimize" to solve it and "display
974 * (round 1) 0 del vars, 0 del conss, 0 chg bounds, 0 chg sides, 0 chg coeffs, 118 upgd conss, 0 impls, 0 clqs
976 * 0 deleted vars, 0 deleted constraints, 0 tightened bounds, 0 added holes, 0 changed sides, 0 changed coefficients
984 * time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
985 * t 0.0s| 1 | 0 | 34 | - | 337k| 0 | 21 | 27 | 118 | 27 | 118 | 0 | 0 | 0 | 1.300000e+01 | 2.700000e+01 | 107.69%
986 * R 0.0s| 1 | 0 | 34 | - | 338k| 0 | 21 | 27 | 118 | 27 | 118 | 0 | 0 | 0 | 1.300000e+01 | 2.600000e+01 | 100.00%
987 * s 0.0s| 1 | 0 | 34 | - | 339k| 0 | 21 | 27 | 118 | 27 | 118 | 0 | 0 | 0 | 1.300000e+01 | 2.500000e+01 | 92.31%
988 * 0.0s| 1 | 0 | 44 | - | 392k| 0 | 21 | 27 | 118 | 27 | 120 | 2 | 0 | 0 | 1.300000e+01 | 2.500000e+01 | 92.31%
989 * b 0.0s| 1 | 0 | 44 | - | 393k| 0 | 21 | 27 | 118 | 27 | 120 | 2 | 0 | 0 | 1.300000e+01 | 1.900000e+01 | 46.15%
991 * 0.1s| 1 | 2 | 107 | - | 920k| 0 | 24 | 27 | 118 | 27 | 131 | 13 | 0 | 24 | 1.300000e+01 | 1.900000e+01 | 46.15%
992 * R 0.1s| 14 | 10 | 203 | 7.4 | 935k| 13 | - | 27 | 118 | 27 | 124 | 13 | 0 | 164 | 1.300000e+01 | 1.800000e+01 | 38.46%
993 * 0.1s| 100 | 54 | 688 | 5.9 | 994k| 13 | 20 | 27 | 118 | 27 | 124 | 13 | 0 | 206 | 1.300000e+01 | 1.800000e+01 | 38.46%
994 * 0.1s| 200 | 86 | 1195 | 5.5 |1012k| 13 | - | 27 | 119 | 27 | 124 | 13 | 1 | 207 | 1.300000e+01 | 1.800000e+01 | 38.46%
995 * time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
996 * 0.2s| 300 | 106 | 1686 | 5.3 |1024k| 13 | - | 27 | 119 | 27 | 124 | 13 | 1 | 207 | 1.350000e+01 | 1.800000e+01 | 33.33%
998 * 0.7s| 4100 | 50 | 18328 | 4.4 |1033k| 16 | 8 | 27 | 119 | 27 | 124 | 13 | 15 | 207 | 1.650000e+01 | 1.800000e+01 | 9.09%
1018 * What do we see here? After "optimize", SCIP first goes into presolving. Not much is happening for this instance, just
1019 * the linear constraints get upgraded to more specific types. Each round of presolving will be displayed in a single
1020 * line, with a short summary at the end. Here, there has only been one round with actual changes, the second round did
1021 * not bring any further reductions. Thus, it is not displayed and presolving is stopped. Then, we see the actual
1022 * solving process. The first three output lines indicate that new incumbent solutions were found by the primal
1023 * heuristics with display characters "t", "R", and "s"; see, how the "primalbound" column goes down from 27 to 25. In
1024 * the fourth line, two "cuts" are added. Up to here, we needed 44 "LP iter"ations (34 for the first LP and 10 more to
1025 * resolve after adding cuts). Little later, the root node processing is finished. We see that there are now two open
1026 * nodes in the "left" column. From now on, we will see an output line every hundredth node or whenever a new incumbent
1027 * is found (e.g. at node 14 in the above output). After some more nodes, the "dualbound" starts moving, too. At one
1028 * point, both will be the same, and the solving process terminates, showing us some wrap-up information.
1030 * The exact performance varies amongst different architectures, operating systems, and so on. Do not be worried if
1031 * your installation needs more or less time or nodes to solve. Also, this instance has more than 2000 different optimal
1032 * solutions. The optimal objective value always has to be 18, but the solution vector may differ. If you are interested
1033 * in this behavior, which is called "performance variability", you may have a look at the MIPLIB2010 paper.
1037 * SCIP can also write information to files. E.g., we could store the incumbent solution to a file, or output the
1038 * problem instance in another file format (the LP format is much more human readable than the MPS format, for example).
1052 * Passing starting solutions can increase the solving performance so that SCIP does not need to construct an initial feasible solution
1053 * by itself. After reading the problem instance, use the "read" command again, this time with a file containing solution information.
1054 * Solutions can be specified in a raw or xml-format and must have the file extension ".sol", see the documentation of the
1055 * <a href="http://scip.zib.de/doc/html/reader__sol_8h.php">solution reader of SCIP</a> for further information.
1057 * Customized settings are not written or read with the "write" and "read" commands, but with the three commands
1069 * We might want to have some more information now. Which were the heuristics that found the solutions? What plugins
1070 * were called during the solutions process and how much time did they spend? How did the instance that we were solving
1071 * look? Information on certain plugin types (e.g., heuristics, branching rules, separators) we get by
1072 * "display <plugin-type>", information on the solution process, we get by "display statistics", and "display problem"
1082 * shifting s -5000 10 0 LP rounding heuristic with infeasibility recovering also using continuous variables
1098 * We see that rounding and shifting were the heuristics producing the solutions in the beginning. Rounding is called at
1099 * every node, shifting only at every tenth level of the tree. The statistics are quite comprehensive, thus, we just
1100 * explain a few lines here. We get information for all types of plugins and for the overall solving process. Besides
1101 * others, we see that in six calls, the gomory cut separator and the strong Chvátal-Gomory separator each produced
1102 * several hundred cuts (of which only a few entered the LP). The oneopt heuristic found one solution in 4 calls,
1103 * whereas coefdiving failed all 57 times it was called. All the LPs have been solved with the dual simplex algorithm, which
1108 * Now, we can start playing around with parameters. Rounding and shifting seem to be quite successful on this instance,
1109 * wondering what happens if we disable them? Or what happens, if we are even more rigorous and disable all heuristics?
1123 * <shifting> LP rounding heuristic with infeasibility recovering also using continuous variables
1129 * freq frequency for calling primal heuristic <shifting> (-1: never, 0: only at depth freqofs) [10]
1145 * z 0.1s| 3 | 4 | 140 | 10.5 |1060k| 2 | 22 | 27 | 118 | 27 | 123 | 14 | 0 | 66 | 1.300000e+01 | 1.900000e+01 | 46.15%
1146 * z 0.1s| 6 | 7 | 176 | 11.4 |1063k| 5 | 18 | 27 | 118 | 27 | 123 | 14 | 0 | 118 | 1.300000e+01 | 1.900000e+01 | 46.15%
1147 * * 0.1s| 39 | 28 | 386 | 7.0 |1092k| 14 | - | 27 | 118 | 27 | 123 | 14 | 0 | 199 | 1.300000e+01 | 1.800000e+01 | 38.46%
1159 * We can navigate through the menus step-by-step and get a list of available options and submenus. Thus, we select
1160 * "set" to change settings, "heuristics" to change settings of primal heuristics, "shifting" for that particular
1161 * heuristic. Then we see a list of parameters (and yet another submenu for advanced parameters), and disable this
1162 * heuristic by setting its calling frequency to -1. If we already know the path to a certain setting, we can directly
1163 * type it (as for the rounding heuristic in the above example). Note that we do not have to use the full names, but we
1166 * To solve a problem a second time, we have to read it and start the optimization process again.
1186 * D 0.1s| 1 | 0 | 107 | - | 971k| 0 | 24 | 27 | 122 | 27 | 131 | 13 | 4 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
1187 * 0.1s| 1 | 0 | 107 | - | 971k| 0 | 24 | 27 | 122 | 27 | 131 | 13 | 4 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
1188 * 0.1s| 1 | 0 | 119 | - |1111k| 0 | 24 | 27 | 122 | 27 | 132 | 14 | 4 | 0 | 1.300000e+01 | 1.800000e+01 | 38.46%
1189 * 0.1s| 1 | 2 | 119 | - |1112k| 0 | 24 | 27 | 122 | 27 | 132 | 14 | 4 | 24 | 1.300000e+01 | 1.800000e+01 | 38.46%
1190 * time | node | left |LP iter|LP it/n| mem |mdpt |frac |vars |cons |cols |rows |cuts |confs|strbr| dualbound | primalbound | gap
1191 * 0.2s| 100 | 59 | 698 | 5.8 |1138k| 14 | 11 | 27 | 122 | 27 | 123 | 14 | 4 | 204 | 1.300000e+01 | 1.800000e+01 | 38.46%
1192 * 0.2s| 200 | 91 | 1226 | 5.6 |1155k| 14 | - | 27 | 122 | 27 | 123 | 14 | 4 | 207 | 1.300000e+01 | 1.800000e+01 | 38.46%
1205 * Okay, what happened here? First, we reset all parameters to their default values, using "set default". Next, we
1206 * loaded some meta-parameter settings (also see <a href="http://scip.zib.de/#faq">the FAQ</a>), to apply primal heuristics
1207 * more aggressively. SCIP shows us, which single parameters it changed therefor. Now, the optimal solution is already
1208 * found at the root node, by a heuristic which is deactivated by default. Then, after node 200, the user pressed
1209 * CTRL-C which interrupts the solving process, We see that now in the short status report, primal and dual bound are
1210 * different, thus, the problem is not solved yet. Nevertheless, we could access statistics, see the current incumbent
1211 * solution, change parameters and so on. Entering "optimize" we continue the solving process from the point on at which
1214 * Once you found a non-default parameter setting that you wish to save and use in the future, use either the command
1222 * in order to save only the nondefault parameters. The latter has several advantages, you can, e.g., combine parameter
1223 * settings from multiple settings files stored by the latter command, as long as they only affect mutually exclusive
1232 * Special attention should be drawn to the reserved settings file name "scip.set"; whenever the SCIP interactive shell
1233 * is started from a working directory that contains a settings file with the name "scip.set", it will be automatically
1236 * For using special settings for automated tests as described in \ref TEST, save your custom settings in a subdirectory
1240 * We hope this tutorial gave you an overview of what is possible using the SCIP interactive shell. Please also read our
1241 * \ref FAQ, in particular the section <a href="http://scip.zib.de/#faq">Using SCIP as a standalone MIP/MINLP-Solver</a>.
1244 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
1247 * If you are looking for a method in order to perform a specific task, there are usually two places to look at:
1249 * In this main header file, you find all methods that perform "complex" operations that affect or need data from
1251 * For these methods, you always have to provide the SCIP pointer that is created by SCIPcreate().
1252 * The documentation of "scip.h" is grouped into several blocks, each dealing with methods for a specific kind of
1256 * - The files \ref PUBLICMETHODS "pub_<...>.h" contain methods that perform "easy" operations that only
1261 * The file "pub_misc.h" contains methods for data structures like priority queues, hash tables, and hash maps,
1262 * as well as methods for sorting, numerics, random numbers, string operations, and file operations.
1264 * If you are looking for a description of a callback method of a plugin that you want to implement, you have to
1268 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
1271 * A constraint handler defines the semantics and the algorithms to process constraints of a certain class. A single
1272 * constraint handler is responsible for all constraints belonging to its constraint class. For example, there is
1273 * one \ref cons_knapsack.h "knapsack constraint handler" that ensures solutions are only accepted if they satisfy all
1274 * knapsack constraints in the model. \n A complete list of all constraint handlers contained in this release can be
1278 * For an example, look into the subtour constraint handler (examples/TSP/src/ConshdlrSubtour.cpp) of the
1282 * It is very easy to transfer the C explanation to C++; whenever a method should be implemented using the
1283 * SCIP_DECL_CONS... notion, reimplement the corresponding virtual member function of the abstract scip::ObjConshdlr
1286 * Additional documentation for the callback methods of a constraint handler can be found in the file
1290 * -# Copy the template files src/scip/cons_xyz.c and src/scip/cons_xyz.h into files "cons_subtour.c"
1293 * Make sure to <b>adjust your Makefile</b> such that these files are compiled and linked to your project.
1294 * -# Use SCIPincludeConsSubtour() in order to include the constraint handler into your SCIP instance,
1298 * -# Define the \ref CONS_DATA "constraint data and the constraint handler data". This is optional.
1301 * -# Implement the \ref CONS_ADDITIONALCALLBACKS "additional callback methods". This is optional.
1307 * These are given as compiler defines. Some of them are optional, as, e.g., separation-related properties,
1309 * In the C++ wrapper class, you have to provide the constraint handler properties by calling the constructor
1310 * of the abstract base class scip::ObjConshdlr from within your constructor (see the TSP example).
1317 * Additionally, if you are searching for a constraint handler with SCIPfindConshdlr(), this name is looked up.
1321 * This string is printed as a description of the constraint handler in the interactive shell of SCIP.
1324 * Like the separation priority, the enforcement priorities define the order in which the different constraint handlers
1326 * The constraint enforcement is called after the price-and-cut loop is executed (in the case that the LP is solved
1330 * That means, if a constraint handler has negative enforcement priority, it only has to deal with integral solutions
1331 * in its enforcement methods, because for fractional solutions, the integrality constraint handler would have
1333 * If you want to implement a constraint-depending branching rule (for example, SOS branching on special ordered
1334 * set constraints), you have to assign a positive enforcement priority to your constraint handler.
1339 * \par CONSHDLR_CHECKPRIORITY: the priority of the constraint handler for checking feasibility.
1340 * Like the separation priority, the checking priorities define the order in which the different constraint handlers
1343 * That means, constraint handlers with negative checking priorities only have to deal with integral solutions.
1345 * \par CONSHDLR_EAGERFREQ: the default frequency for using all instead of only the useful constraints in separation, propagation and enforcement.
1346 * If \em constraint \em aging is activated, some constraints that were not useful in the past for propagation or
1348 * Usually, the obsolete constraints are not presented to the separation and propagation methods of the constraint
1350 * However, every n'th call, with n being the EAGERFREQ of the constraint handler, all constraints are presented to the
1354 * If the eager evaluation frequency is set to -1, obsolete constraints are never presented to the separation and
1356 * A frequency of 0 means, that obsolete constraints are only used in the first call of each method.
1358 * \par CONSHDLR_NEEDSCONS: indicates whether the constraint handler should be skipped, if no constraints are available.
1359 * Usually, a constraint handler is only executed if there are constraints of its corresponding class in the model.
1361 * However, some constraint handlers must be called without having a constraint of the class in the model, because
1363 * For example, the integrality constraint handler has the NEEDSCONS flag set to FALSE, because there is no explicit
1365 * The integrality conditions are attached to the variables, and the integrality constraint handler has to check
1370 * The following properties are optional and only need to be defined if the constraint handlers support
1373 * \par LINCONSUPGD_PRIORITY: priority of the constraint handler for upgrading of linear constraints
1374 * This property is only needed if a certain linear constraint can be upgraded to a more specific one. In one of
1375 * the first presolving rounds SCIP tries to upgrade linear constraints to more specialized constraints, such as
1378 * \par NONLINCONSUPGD_PRIORITY: priority of the constraint handler for upgrading of nonlinear constraints
1379 * This property has the same effect as the LINCONSUPGD_PRIORITY parameter, see above, and should be set whenever
1380 * an upgrade functionality from a general nonlinear constraint to the more specific one is defined.
1383 * The separation frequency defines the depth levels at which the constraint handler's separation methods \ref CONSSEPALP
1385 * For example, a separation frequency of 7 means, that the separation callback is executed for subproblems that are
1387 * A separation frequency of 0 means, that the separation method is only called at the root node.
1392 * If you want to have a more flexible control of when to execute the separation algorithm, you have to assign
1393 * a separation frequency of 1 and implement a check at the beginning of your separation algorithm whether you really
1397 * \par CONSHDLR_SEPAPRIORITY: the priority of the constraint handler for separation. (optional: to be set only if the constraint handler supports separation)
1398 * In each separation round during the price-and-cut loop of the subproblem processing or during the separation loop
1399 * of the primal solution separation, the separators and separation methods of the constraint handlers are called in
1400 * a predefined order, which is given by the priorities of the separators and the separation priorities of the
1402 * First, the separators with non-negative priority are called in the order of decreasing priority.
1403 * Next, the separation methods of the different constraint handlers are called in the order of decreasing separation
1405 * Finally, the separators with negative priority are called in the order of decreasing priority.
1407 * The separation priority of the constraint handler should be set according to the complexity of the cut separation
1409 * Constraint handlers that provide fast algorithms that usually have a high impact (i.e., cut off a large portion of
1413 * \par CONSHDLR_DELAYSEPA: the default for whether the separation method should be delayed, if other separators found cuts.
1414 * If the constraint handler's separation method is marked to be delayed, it is only executed after no other separator
1416 * If the separation method of the constraint handler is very expensive, you may want to mark it to be delayed until all
1420 * This default frequency has the same meaning as the CONSHDLR_SEPAFREQ with respect to the domain propagation
1422 * A propagation frequency of 0 means that propagation is only applied in preprocessing and at the root node.
1425 * \par CONSHDLR_DELAYPROP: the default for whether the propagation method should be delayed, if other propagators found reductions.
1426 * This property is analogous to the DELAYSEPA flag, but deals with the propagation method of the constraint handler.
1430 * This property indicates at which places the propagation routine of the constraint handler is called.
1431 * Possible values are defined in type_timing.h and can be concatenated, e.g., as in SCIP_PROPTIMING_ALWAYS.
1433 * \par CONSHDLR_PRESOLTIMING: the timing of the constraint handler's presolving method (FAST, MEDIUM, or EXHAUSTIVE).
1434 * Every presolving round starts with the FAST presolving methods. MEDIUM presolvers are only called, if FAST presolvers did not find
1435 * enough reductions in this round so far, and EXHAUSTIVE presolving steps are only performed if all presolvers called before
1437 * Presolving methods should be assigned a timing based on how expensive they are, e.g., presolvers that provide fast algorithms that
1438 * usually have a high impact (i.e., remove lots of variables or tighten bounds of many variables) should have a timing FAST.
1439 * If a presolving method implements different algorithms of different complexity, it may also get multiple timings and check the timing
1442 * \par CONSHDLR_MAXPREROUNDS: the default maximal number of presolving rounds the constraint handler participates in.
1444 * If enough changes have been applied to the model, an additional preprocessing round is performed.
1445 * The MAXPREROUNDS parameter of a constraint handler denotes the maximal number of preprocessing rounds the constraint
1454 * Below the header "Data structures" you can find two structs called "struct SCIP_ConsData" and
1457 * The constraint handler data must be implemented as member variables of your constraint handler class.
1459 * The constraint data are the information that is needed to define a single constraint of the constraint handler's
1461 * For example, the data of a knapsack constraint would consist of a list of variables, a list of weights, and
1466 * The constraint handler data are additional variables, that belong to the constraint handler itself and which are
1468 * For example, you can use these data to store parameters of the constraint handler or statistical information.
1475 * At the bottom of "cons_subtour.c" you can find three interface methods, that also appear in "cons_subtour.h".
1476 * These are SCIPincludeConshdlrSubtour(), SCIPcreateConsSubtour(), and SCIPcreateConsSubtourBasic().
1479 * It is responsible for notifying SCIP of the presence of the constraint handler by calling the method
1481 * It is called by the user, if (s)he wants to include the constraint handler, i.e., if (s)he wants to make
1483 * -# If you are using constraint handler data, you have to <b>allocate the memory for the data</b> at this point.
1497 * -# Now, <b>SCIP gets notified</b> of the presence of the constraint handler together with its \ref CONS_FUNDAMENTALCALLBACKS "basic callbacks".
1505 * -# All \ref CONS_ADDITIONALCALLBACKS "additional callbacks" are added via their setter functions.
1510 * -# If the constraint handler is a specialization of a general linear or nonlinear constraint, we want to include an <b>automatic
1515 * SCIP_CALL( SCIPincludeLinconsUpgrade(scip, linconsUpgdKnapsack, LINCONSUPGD_PRIORITY, CONSHDLR_NAME) );
1520 * SCIP_CALL( SCIPincludeNonlinconsUpgrade(scip, nonlinconsUpgdSubtour, NULL, NONLINCONSUPGD_PRIORITY, TRUE, CONSHDLR_NAME) );
1523 * See also cons_nonlinear.h for further information about the general upgrade procedure in the nonlinear case.
1525 * Some parameters which are important to play with are added to every constraint automatically, as, e.g.,
1530 * "multiplier on separation frequency, how often knapsack cuts are separated (-1: never, 0: only at root)",
1540 * The methods SCIPcreateConsSubtour() and SCIPcreateConsSubtourBasic() are called to create a single constraint of the constraint
1543 * Take a look at the following example from the \ref cons_knapsack.h "knapsack constraint handler":
1581 * SCIP_CALL( consdataCreate(scip, &consdata, conshdlrdata->eventhdlr, nvars, vars, weights, capacity) );
1583 * SCIP_CALL( SCIPcreateCons(scip, cons, name, conshdlr, consdata, initial, separate, enforce, check, propagate,
1590 * In this example, consdataCreate() is a local method that allocates memory for the given consdata
1591 * and fills the data with the given <code>vars</code> array. For allocating memory for the constraint data, you
1600 * Besides the various functions which you will implement inside your constraint handler there exists a number
1601 * of <b> callback methods </b> associated with your constraint handler. Callback methods can be regarded as
1602 * tasks which your constraint handler is able to provide to the solver. They are grouped into two
1612 * \ref CONS_ADDITIONALCALLBACKS "additional callbacks". Such callbacks can be used to allocate and free memory
1613 * at different stages of the solving process. Although not mandatory, it might be useful to implement
1618 * (e.g., SCIPincludeConshdlrKnapsack() for the \ref cons_knapsack.h "knapsack constraint handler").
1619 * Since SCIP version 3.0, two ways of setting callbacks can be used, either via SCIPincludeConshdlr()
1620 * (all at once, as it always was), or via SCIPincludeConshdlrBasic() and setter functions for additional callbacks.
1627 * By implementing the fundamental callbacks, you define the semantics of the constraint class the constraint handler
1629 * If these methods are implemented, the resulting code is already correct and finds the optimal solution to the
1631 * However, it might be very slow because the additional features, like cut separation and domain propagation, are
1633 * In the C++ wrapper class scip::ObjConshdlr, the fundamental callback methods are virtual abstract member functions.
1634 * You have to implement them in order to be able to construct an object of your constraint handler class.
1636 * There are three fundamental callback methods that are all dealing with the feasibility of a given solution.
1638 * However, it is usually reasonable to implement a single local method that is called by all of the three callback
1648 * It has to return a result SCIP_FEASIBLE, if the solution satisfies all the constraints of the constraint handler,
1651 * That means, the constraint handler has to deal with arbitrary solutions that do not necessarily satisfy the bounds
1659 * For example, the \ref cons_knapsack.h "knapsack constraint handler" loops over its constraints and
1660 * calculates the scalar product \f$w^T x\f$ of weights \f$w\f$ with the solution vector \f$x\f$.
1662 * If it exceeds the capacity, the CONSCHECK method is immediately aborted with the result SCIP_INFEASIBLE.
1667 * The CONSENFOLP method is called after the price-and-cut loop was finished and an LP solution is available.
1668 * Like the CHECK call, the ENFOLP method should return a result SCIP_FEASIBLE, if the solution satisfies all the
1670 * However, the behavior should be different, if the solution violates some of the associated constraints.
1671 * The constraint handler may return a result SCIP_INFEASIBLE in this situation, but this is not the best what
1690 * By using the latter method, you can have a single local method to check a solution for feasibility by passing
1691 * the given <code>sol</code> to the CONSCHECK call and by passing a NULL pointer as <code>sol</code> to
1697 * The CONSENFOPS callback is similar to the CONSENFOLP callback, but deals with \em pseudo \em solutions instead
1700 * If the LP was not solved at the current subproblem (either because the user did not want to solve it, or because
1703 * In this solution, the variables are set to the local bound which is best with respect to the objective function.
1704 * You can think of the pseudo solution as solution to the LP relaxation with all constraints except the bounds
1707 * Like the ENFOLP callback, the ENFOPS callback has to check whether the pseudo solution satisfies all the constraints
1709 * The pseudo solution can be accessed by the same methods as the LP solution (SCIP knows, if the LP was solved at the
1712 * Unlike the ENFOLP callback, the ENFOPS callback must not add cuts and cannot return the result SCIP_SEPARATED.
1713 * It is, however, possible to force the solving of the LP by returning the result SCIP_SOLVELP.
1714 * For example, the infeasibility of a linear constraint that contains continuous variables cannot be resolved,
1716 * In this case, the LP has to be solved in order to get a solution that satisfies the linear constraint.
1721 * It has to tell SCIP, which variables are existing in the given constraint, and in which way modifications of these
1724 * For each variable that is affected by the constraint, the callback should call SCIPaddVarLocks():
1725 * - If the constraint may become violated by decreasing the value of a variable, it should call
1726 * SCIPaddVarLocks(scip, var, nlockspos, nlocksneg), saying that rounding down is potentially rendering the
1727 * (positive) constraint infeasible and rounding up is potentially rendering the negation of the constraint
1729 * - If the constraint may become violated by increasing the value of a variable, it should call
1730 * SCIPaddVarLocks(scip, var, nlocksneg, nlockspos), saying that rounding up is potentially rendering the
1731 * constraint's negation infeasible and rounding down is potentially rendering the constraint itself
1733 * - If the constraint may become violated by changing the variable in any direction, it should call
1736 * <b>Note:</b> You do not have to worry about nlockspos and nlocksneg. These integer values are given as
1737 * parameter of the CONSLOCK callback (see type_cons.h). Just use these variables in the above described
1738 * fashion <b>without</b> adding or subtracting anything to them. In case of the knapsack constraints this
1760 * To give same more intuition, consider the linear constraint \f$3x -5y +2z \leq 7\f$ as an example.
1762 * SCIPaddVarLocks(scip, x, nlocksneg, nlockspos), SCIPaddVarLocks(scip, y, nlockspos, nlocksneg),
1764 * and \f$z\f$ and rounding down of \f$y\f$ can destroy the feasibility of the constraint, while rounding
1776 * The additional callback methods do not need to be implemented in every case, but provide useful functionality
1777 * for many applications. They can be added to your constraint handler via setter functions, see
1782 * If you are using constraint handler data, you have to implement this method in order to free the
1783 * constraint handler data. This can be done by the following procedure (which is taken from the
1803 * If you have allocated memory for fields in your constraint handler data, remember to free this memory
1810 * The CONSHDLRCOPY callback is executed when the SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
1811 * callback as <code>NULL</code> the user disables the inclusion of the specified constraint handler into all copied SCIP
1812 * instances. This may deteriorate the performance of primal heuristics solving sub-SCIPs, since these constitute only
1816 * calls the interface method which includes the constraint handler to the model. For example, this callback is
1835 * <b>Note:</b> If you implement this callback, take care when setting the valid pointer. The valid pointer should be
1836 * set to TRUE if (and only if!) you can make sure that all necessary data of the constraint handler are copied
1837 * correctly. If the complete problem is validly copied, i.e. if the copy methods of all problem defining plugins
1838 * (constraint handlers and pricers) return <code>*valid = TRUE</code>, then dual reductions found for the copied problem can be
1839 * transferred to the original SCIP instance. Thus, if the valid pointer is wrongly set to TRUE, it might happen that
1842 * <b>Note:</b> If you implement this callback and the constraint handler needs constraints (see CONSHDLR_NEEDSCONS),
1848 * The constraint handler may, e.g., use this call to replace the original variables in its constraints by transformed
1854 * In this method, the constraint handler should free all resources that were allocated for the solving process.
1858 * The CONSINITPRE callback is executed before the preprocessing is started, even if presolving is turned off.
1859 * The constraint handler may use this call to initialize its presolving data, or to modify its constraints
1861 * Necessary constraint modifications that have to be performed even if presolving is turned off should be done here
1866 * The CONSEXITPRE callback is executed after the preprocessing has been finished, even if presolving is turned off.
1867 * The constraint handler may use this call e.g. to clean up its presolving data, or to finally modify its constraints
1869 * Necessary constraint modifications that have to be performed even if presolving is turned off should be done here
1875 * The CONSINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
1882 * The constraint handler should use this call to clean up its branch-and-bound data, in particular to release
1890 * The CONSDELETE callback is therefore the counterpart of the SCIPcreateCons...() interface method and the CONSTRANS
1895 * The CONSTRANS method is called for each constraint of the constraint handler, when the user starts the solving
1897 * It has to copy the original constraint data of the constraint to the memory for the transformed problem.
1900 * The original model is copied in order to protect it from transformations that are applied during the solving process,
1903 * If the solving process data are freed, the original data still exist and the user can, e.g., modify the problem and
1906 * If you do not implement the CONSTRANS method, a transformed constraint is created with the same flags and the
1910 * If you want to implement preprocessing methods or other methods that modify the constraint data, you have to
1913 * Here is an example, which is taken from the \ref cons_knapsack.h "knapsack constraint handler":
1939 * SCIP_CALL( SCIPcreateCons(scip, targetcons, SCIPconsGetName(sourcecons), conshdlr, targetdata,
1940 * SCIPconsIsInitial(sourcecons), SCIPconsIsSeparated(sourcecons), SCIPconsIsEnforced(sourcecons),
1943 * SCIPconsIsDynamic(sourcecons), SCIPconsIsRemovable(sourcecons), SCIPconsIsStickingAtNode(sourcecons)) );
1952 * It should add the LP relaxations of all "initial" constraints to the LP. The method should scan the constraints
1953 * array for constraints that are marked initial via calls to SCIPconsIsInitial() and put the LP relaxation
1958 * The CONSSEPALP callback is executed during the price-and-cut loop of the subproblem processing.
1959 * It should try to generate cutting planes for the constraints of the constraint handler in order to separate
1963 * Usually, a separation callback searches and produces cuts, that are added with a call to SCIPaddCut().
1968 * - detecting that the node is infeasible in the variables' bounds and can be cut off (result SCIP_CUTOFF)
1972 * - stating that the separator searched, but did not find domain reductions, cutting planes, or cut constraints
1976 * - stating that a new separation round should be started without calling the remaining separator methods (result SCIP_NEWROUND)
1979 * CONSHDLR_SEPAFREQ, CONSHDLR_SEPAPRIORITY, and CONSHDLR_DELAYSEPA, which influence the behaviour of SCIP
1985 * It should try to generate cutting planes for the constraints of the constraint handler in order to separate
1987 * The method is not called in the LP solution loop, which means that there is no valid LP solution.
1989 * Usually, a separation callback searches and produces cuts, that are added with a call to SCIPaddCut().
1994 * - detecting that the node is infeasible in the variables' bounds and can be cut off (result SCIP_CUTOFF)
1998 * - stating that the separator searched, but did not find domain reductions, cutting planes, or cut constraints
2002 * - stating that a new separation round should be started without calling the remaining separator methods (result SCIP_NEWROUND)
2005 * CONSHDLR_SEPAFREQ, CONSHDLR_SEPAPRIORITY, and CONSHDLR_DELAYSEPA, which influence the behaviour of SCIP
2011 * It should propagate the constraints, which means that it should infer reductions in the variables' local bounds
2013 * This technique, which is the main workhorse of constraint programming, is called "node preprocessing" in the
2017 * - detecting that the node is infeasible in the variables' bounds and can be cut off (result SCIP_CUTOFF)
2019 * - stating that the propagator searched, but did not find domain reductions, cutting planes, or cut constraints
2025 * CONSHDLR_PROPFREQ, CONSHDLR_DELAYPROP, and CONSHDLR_PROP_TIMING, which influence the behaviour of SCIP
2030 * If the constraint handler should support \ref CONF "conflict analysis", it has to supply a CONSRESPROP method.
2031 * It also should call SCIPinferVarLbCons() or SCIPinferVarUbCons() in domain propagation instead of SCIPchgVarLb() or
2033 * In the SCIPinferVarLbCons() and SCIPinferVarUbCons() calls, the handler provides the constraint that deduced the
2034 * variable's bound change, and an integer value <code>inferinfo</code> that can be arbitrarily chosen.
2036 * The propagation conflict resolving method CONSRESPROP must then be implemented to provide the "reasons" for the bound
2037 * changes, i.e., the bounds of variables at the time of the propagation, which forced the constraint to set the
2038 * conflict variable's bound to its current value. It can use the <code>inferinfo</code> tag to identify its own propagation rule
2039 * and thus identify the "reason" bounds. The bounds that form the reason of the assignment must then be provided by
2040 * calls to SCIPaddConflictLb() and SCIPaddConflictUb() in the propagation conflict resolving method.
2042 * <b>Note:</b> The fact that <code>inferinfo</code> is an integer, as opposed to an arbitrary data object, is a compromise between space and speed. Sometimes a propagator would
2043 * need more information to efficiently infer the original propagation steps that lead to the conflict. This would,
2044 * however, require too much space. In the extreme, the original propagation steps have to be repeated.
2046 * For example, the \ref cons_logicor.h "logicor constraint" \f$c = x \vee y \vee z\f$ fixes variable \f$z\f$ to TRUE (i.e., changes the lower
2047 * bound of \f$z\f$ to 1.0), if both, \f$x\f$ and \f$y\f$, are assigned to FALSE (i.e., if the upper bounds of these
2048 * variables are 0.0). It uses <code>SCIPinferVarLbCons(scip, z, 1.0, c, 0)</code> to apply this assignment (an
2049 * inference information tag is not needed by the constraint handler and is set to 0). In the conflict analysis, the
2050 * constraint handler may be asked to resolve the lower bound change on \f$z\f$ with constraint \f$c\f$, that was
2051 * applied at a time given by a bound change index "bdchgidx". With a call to <code>SCIPvarGetLbAtIndex(z,
2052 * bdchgidx)</code>, the handler can find out, that the lower bound of variable \f$z\f$ was set to 1.0 at the given
2053 * point of time, and should call <code>SCIPaddConflictUb(scip, x, bdchgidx)</code> and <code>SCIPaddConflictUb(scip, y,
2054 * bdchgidx)</code> to tell SCIP, that the upper bounds of \f$x\f$ and \f$y\f$ at this point of time were the reason for
2057 * If conflict analysis should not be supported, the method has to set the result code to SCIP_DIDNOTFIND. Although
2058 * this is a viable approach to circumvent the implementation of the usually rather complex conflict resolving method, it
2059 * will make the conflict analysis less effective. We suggest to first omit the conflict resolving method and check how
2060 * effective the \ref CONSPROP "propagation method" is. If it produces a lot of propagations for your application, you definitely should
2066 * It should try to tighten the domains of the variables, tighten the coefficients of the constraints of the constraint
2067 * handler, delete redundant constraints, aggregate and fix variables if possible, and upgrade constraints to more
2070 * If the CONSPRESOL callback applies changes to the constraint data, you also have to implement the \ref CONSTRANS callback
2071 * in order to copy the constraint data to the transformed problem space and protect the original problem from the
2074 * To inform SCIP that the presolving method found a reduction the result pointer has to be set in a proper way.
2077 * - SCIP_UNBOUNDED : at least one variable is not bounded by any constraint in objective direction
2090 * The CONSACTIVE callback method is called each time a constraint of the constraint handler is activated.
2091 * For example, if a constraint is added locally to a subproblem, the CONSACTIVE callback is called whenever the
2096 * The CONSDEACTIVE callback method is called each time a constraint of the constraint handler is deactivated.
2097 * For example, if a constraint is added locally to a subproblem, the CONSDEACTIVE callback is called whenever the
2102 * The CONSENABLE callback method is called each time a constraint of the constraint handler is enabled.
2103 * Constraints might be active without being enabled. In this case, only the feasibility checks are executed,
2108 * The CONSDISABLE callback method is called each time a constraint of the constraint handler is disabled.
2112 * The CONSPRINT callback method is called, when the user asks SCIP to display the problem to the screen
2113 * or save the problem into a file. This is, however, only the case if the user requested the CIP format.
2114 * For more details about reading and writing with SCIP we refer to the \ref READER "file readers". In this
2115 * callback method the constraint handler should display the data of the constraint in an appropriate form.
2117 * In later versions of SCIP, the constraint handlers should also be able to parse (i.e., read) constraints
2122 * The CONSCOPY callback method is used whenever constraints should be copied from one SCIP instance into another SCIP
2123 * instance. This method comes with the necessary parameters to do so, most importantly with a mapping of the variables of the
2124 * source SCIP instance to the corresponding variables of the target SCIP instance, and a mapping for the constraints
2125 * in the same way. For a complete list of all arguments of this callback method see type_cons.h.
2127 * To get the corresponding target variable of a given source variable, you can use the variable map directly:
2133 * We recommend, however, to use the method SCIPgetVarCopy() which gets besides others the variable map and the constraint map as input
2134 * and returns the requested target variable. The advantage of using SCIPgetVarCopy() is that in the case
2138 * SCIP_CALL( SCIPgetVarCopy(sourcescip, scip, sourcevar, &targetvar, varmap, consmap, global) );
2141 * Finally, the result pointer <code>valid</code> has to be set to TRUE if (and only if!) the copy process was successful.
2143 * <b>Note:</b> Be careful when setting the valid pointer. If you set the valid pointer to TRUE, but the constraint was
2144 * not copied one-to-one, then optimal solutions might be cut off during the search (see section
2147 * For an example implementation we refer to cons_linear.h. Additional documentation and the complete list of all
2152 * This method is the counter part to CONSPRINT. The ideal idea is that a constraint handler is able to parse the output
2153 * which it generated via the CONSPRINT method and creates the corresponding constraint. If the parsing was successfully
2154 * the result pointer success should be set to TRUE. An example implementation can be found in the \ref cons_linear.h
2159 * This method should iterate over the given constraints and delete all variables that were marked for deletion by SCIPdelVar().
2160 * Variable deletion is especially interesting for branch-cut-and-price applications. If your constraint handler allows
2161 * the addition of variables during the solving process (see "modifiable" attribute of constraints), then you might also want to
2162 * implement this callback. This would allow you to not only create variables during solving, but also remove them dynamically
2164 * During presolving, SCIP may also find that some variables are not needed anymore and then try
2165 * to delete them. Thus, if you do not implement this callback, the constraint handler should capture its variables via
2168 * Additional documentation and the complete list of all parameters can be found in the file type_cons.h.
2172 * The CONSGETVARS callback of a constraint handler can be implemented to give access to the constraint variables
2174 * is already passed, together with its length. Consider implementing @ref CONSGETNVARS, too, to have
2179 * This callback can be implemented to return the number of variables involved into a particular constraint.
2184 * This callback is used inside the various diving heuristics of SCIP and does not affect the normal branching
2186 * The constraint handler can provide this callback to render a current working solution (even more) infeasible by
2191 * Further documentation can be found in @ref type_cons.h for callback descriptions and a complete
2196 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
2201 * The \ref PRICERREDCOST and \ref PRICERFARKAS methods are called after each LP solve to generate additional
2202 * variables which may improve the objective value or decrease the LP infeasibility, respectively.
2206 * If the pricer finds one or more variables with negative reduced costs or negative Farkas value, it should
2207 * call SCIPcreateVar() and SCIPaddPricedVar() to create and add the variable to the problem. Additionally,
2208 * the pricer has to add the variable to all constraints in which it appears. Therefore, a pricer needs to
2209 * know the constraints of the model and their meaning. Note that all constraints for which additional variables
2213 * For example, look into the variable pricer for the binpacking problem (examples/Binpacking/src/pricer_binpacking.c) of the
2215 * The example is written in C. C++ users can easily adapt the code by using the scip::scip::ObjPricer wrapper base class and
2216 * implement the scip_...() virtual methods instead of the SCIP_DECL_PRICER... callback methods.
2221 * Notice that if your pricer cannot cope with variable bounds other than 0 and infinity, you have to mark
2222 * all constraints containing priced variables as modifiable, and you may have to disable reduced cost
2226 * -# Copy the template files src/scip/pricer_xyz.c and src/scip/pricer_xyz.h into files "pricer_mypricer.c"
2229 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
2237 * -# Implement the additional callback methods (see \ref PRICER_ADDITIONALCALLBACKS). This is optional.
2244 * In the C++ wrapper class, you have to provide the pricer properties by calling the constructor
2250 * Additionally, if you are searching for a pricer with SCIPfindPricer(), this name is looked up.
2257 * In each pricing round during the price-and-cut loop of the subproblem processing, the included pricers are
2260 * Usually, you will have only one pricer in your application and the priority is therefore irrelevant.
2262 * \par PRICER_DELAY: the default for whether the pricer should be delayed, if other variables with negative reduced
2264 * Variables may be declared to be "removable" in the SCIPcreateVar() call. This means that SCIP may remove the variable
2265 * from the LP if it was inactive (i.e., sitting at zero) for a number of LP solves. Nevertheless, after the removal of the
2266 * column from the LP, the variable still exists, and SCIP can calculate reduced costs and add it to the LP again if
2269 * If the PRICER_DELAY flag is set to TRUE (which is the common setting), all those existing variables with negative reduced costs
2270 * are added to the LP, and the LP is resolved before the pricer is called. Thus, the pricer can assume that all existing variables
2271 * have non-negative reduced costs if the \ref PRICERREDCOST method is called or non-positive Farkas value if the \ref PRICERFARKAS
2274 * In some applications, this inner pricing loop on the already existing variables can significantly slow down the solving process,
2275 * since it may lead to the addition of only very few variables in each pricing round. If this is an issue in your application,
2276 * you should consider setting the PRICER_DELAY flag to FALSE. You must, however, be aware of the fact that there may be already
2277 * existing variables with negative reduced costs. For example, this may lead to the issue that your pricer generates the same
2278 * variable twice. In some models, this is not critical because an optimal solution would choose only one of the two identical
2279 * variables anyway, but for other models this can lead to wrong results because the duplication of a variable essentially doubles
2285 * Below the header "Data structures" you can find a struct which is called "struct SCIP_PricerData".
2286 * In this data structure, you can store the data of your pricer. For example, it may be convenient to store pointers to the
2287 * constraints of the problem instance here, because the pricer has to add variables to those constraints.
2295 * At the bottom of "pricer_mypricer.c" you can find the interface method SCIPincludePricerMypricer(), which also appears in "pricer_mypricer.h".
2296 * It is called by the user, if (s)he wants to include the pricer, i.e., if (s)he wants to solve a model for which variables should
2300 * It is responsible for notifying SCIP of the presence of the pricer. For this, you can either call SCIPincludePricer(),
2301 * or SCIPincludePricerBasic() since SCIP version 3.0. In the latter variant, \ref PRICER_ADDITIONALCALLBACKS "additional callbacks"
2302 * must be added via setter functions as, e.g., SCIPsetPricerCopy(). We recommend this latter variant because
2303 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
2304 * variant must be manually adjusted with every SCIP release containing new callbacks for pricers in order to compile.
2307 * In addition, the pricer has to be activated before the solution process starts, like it is done
2308 * in the pricer of the Coloring application (applications/Coloring/src/reader_col.c) by calling
2320 * You may also add user parameters for your pricer, see the method SCIPincludePricerColoring() in the pricer of the Coloring application
2326 * The fundamental callback methods have to be implemented in order to obtain an operational algorithm.
2327 * They are passed together with the pricer itself to SCIP using SCIPincludePricer() or SCIPincludePricerBasic(),
2330 * In the case of a pricer, there are two fundamental callback methods, namely the @ref PRICERREDCOST and the
2331 * @ref PRICERFARKAS callbacks, which both search for new variables and add them to the problem.
2332 * These methods have to be implemented for every pricer; the other callback methods are optional.
2333 * In the C++ wrapper class scip::ObjPricer, the scip_redcost() method (which corresponds to the PRICERREDCOST callback)
2334 * is a virtual abstract member function. You have to implement it in order to be able to construct an object of your
2341 * The PRICERREDCOST callback is called inside the price-and-cut loop of the subproblem solving process if the current LP relaxation
2343 * It should search for additional variables that can contribute to improve the current LP's solution value.
2344 * In standard branch-and-price, these are variables with negative dual feasibility, that is negative
2348 * Whenever the pricer finds a variable with negative dual feasibility, it should call SCIPcreateVar()
2349 * and SCIPaddPricedVar() to add the variable to the problem. Furthermore, it should call the appropriate
2350 * methods of the constraint handlers to add the necessary variable entries to the constraints, see pub_cons.h.
2352 * In the usual case that the pricer either adds a new variable or ensures that there are no further variables with negative dual feasibility,
2353 * the result pointer should be set to SCIP_SUCCESS. Only if the pricer aborts pricing without creating a new variable, but
2354 * there might exist additional variables with negative dual feasibility, the result pointer should be set to SCIP_DIDNOTRUN.
2355 * In this case, which sometimes is referred to as "early branching", the LP solution will not be used as a lower bound.
2359 * Since SCIP does not know the semantics of the individual constraints in the problem, the dual solution
2361 * For example, the \ref cons_setppc.h "setppc constraint handler", which deals with set partitioning, packing, and covering constraints, provides
2363 * Similarly, the dual solution of a linear constraint can be queried with the method SCIPgetDualsolLinear() of cons_linear.h.
2364 * The reduced costs of the existing variables can be accessed with the method SCIPgetVarRedcost().
2368 * If the current LP relaxation is infeasible, it is the task of the pricer to generate additional variables that can
2369 * potentially render the LP feasible again. In standard branch-and-price, these are variables with positive Farkas values,
2372 * If the LP was proven to be infeasible, we have an infeasibility proof by the dual Farkas multipliers \f$y\f$.
2373 * With the values of \f$y\f$, an implicit inequality \f$y^T A x \ge y^T b\f$ is associated, with \f$b\f$ given
2378 * \f$y\f$ is chosen in a way, such that the valid inequality \f$y^T A x \ge y^T b\f$ is violated by all \f$x\f$,
2382 * Pricing in this case means to add variables \f$i\f$ with positive Farkas value, i.e., \f$y^T A_i x'_i > 0\f$.
2384 * To apply Farkas pricing, the pricer needs to know the Farkas values of the constraints. Like the dual solution values for
2385 * feasible LP solutions, the dual Farkas values for infeasible solutions can be obtained by constraint handler interface
2387 * The Farkas values for the bounds of the variables are just the regular reduced costs and can be accessed with SCIPgetVarRedcost().
2389 * It is useful to note that Farkas pricing is the same as the regular pricing with a zero objective function.
2390 * Therefore, a typical implementation of a pricer would consist of a generic pricing algorithm that gets a dual solution and an
2391 * objective function vector as input and generates variables by calling SCIPcreateVar() and SCIPaddPricedVar().
2392 * The PRICERREDCOST callback would call this function with the regular objective function and the regular dual solution vector,
2393 * while the PRICERFARKAS callback would call this function with a zero objective function and the Farkas vector.
2394 * From a practical point of view, it is usually the simplest approach to provide just one Boolean flag to the generic pricing
2395 * algorithm in order to identify whether it is reduced cost or Farkas pricing. Then, the algorithm would just call the appropriate
2401 * However, some of them have to be implemented for most applications. They can either be passed directly with
2402 * SCIPincludePricer() to SCIP or via specific <b>setter functions</b> after a call of SCIPincludePricerBasic(),
2407 * If you are using pricer data, you have to implement this method in order to free the pricer data.
2432 * The PRICERCOPY callback is executed when the SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
2433 * callback as <code>NULL</code> the user disables the inclusion of the pricer into all copied SCIP
2434 * instances. This means that primal heuristics will work on a sub-SCIP that contains only a part of the variables
2435 * and no variables are priced in during the solving process of the sub-SCIP. Therefore, primal solutions found in the
2436 * copied problem are typically still valid for the original problem and used for its solving process,
2439 * <b>Note:</b> If you implement this callback, be careful when setting the valid pointer. The valid pointer should be
2440 * set to TRUE if (and only if!) you can make sure that all necessary data of the pricer are copied
2441 * correctly. If the complete problem is validly copied, i.e. if the copy methods of all problem defining plugins
2442 * (constraint handlers and pricers) return <code>*valid = TRUE</code>, then dual reductions found for the copied problem can be
2443 * transferred to the original SCIP instance. Thus, if the valid pointer is wrongly set to TRUE, it might happen that
2449 * The pricer may, e.g., use this call to replace the original constraints stored in its pricer data by transformed
2455 * In this method, the pricer should free all resources that have been allocated for the solving process in PRICERINIT.
2459 * The PRICERINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to begin.
2465 * The pricer should use this call to clean up its branch-and-bound data, which was allocated in PRICERINITSOL.
2469 * If you use your own branching rule (e.g., to branch on constraints), make sure that it is able to branch on \a "pseudo solutions".
2470 * Otherwise, SCIP will use its default branching rules, if necessary (which all branch on variables). This
2471 * could disturb the pricing problem or branching might not even be possible, e.g., if all variables created thus far have already been fixed.
2473 * Note that if the original problem is a maximization problem, SCIP will transform the problem into a minimization
2474 * problem by multiplying the objective function by -1. The pricer has to take care of this by multiplying
2475 * the original objective function value of all variables created during the solving process by -1.
2477 * In some cases, bounds on variables are implicitly enforced by constraints of the problem and the objective function.
2478 * Therefore, these bounds do not need to be added to the LP explicitly, which has the advantage that the pricing routine does not need to
2480 * We call these bounds lazy bounds, they may be set by SCIPchgVarLbLazy() and SCIPchgVarUbLazy() for upper or lower bounds, respectively.
2481 * If the lazy bound is tighter than the local bound, the corresponding bound is not put into the LP.
2482 * In diving mode, lazy bounds are explicitly put into the LP, because changing the objective (which is only possible in diving)
2483 * might reverse the implicitly given bounds. When diving is finished, the bounds are again removed from the LP.
2486 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
2489 * Presolvers are used to reduce the size of the model by removing irrelevant information like redundant constraints,
2490 * to strengthen the LP relaxation by exploiting integrality information, and to extract useful information in the
2492 * Constraint based presolving is done in the CONSPRESOL callback methods of the constraint handlers, see \ref CONSPRESOL.
2493 * Some propagation steps can already be applied in presolving via the PROPRESOL callback methods of propagators, see \ref PROPPRESOL.
2494 * The presolver plugins complement these by additional, usually optimality based, presolving reductions.
2496 * A complete list of all presolvers contained in this release can be found \ref PRESOLVERS "here".
2500 * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjPresol wrapper
2501 * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_PRESOL... callback methods.
2503 * Additional documentation for the callback methods of a presolver, in particular for their input parameters,
2507 * -# Copy the template files src/scip/presol_xyz.c and src/scip/presol_xyz.h into files named "presol_mypresolver.c"
2510 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
2511 * -# Use SCIPincludePresolMypresolver() in order to include the presolver into your SCIP instance,
2513 * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mypresolver".
2518 * -# Implement the additional callback methods (see \ref PRESOL_ADDITIONALCALLBACKS). This is optional.
2525 * In the C++ wrapper class, you have to provide the presolver properties by calling the constructor
2531 * Additionally, if you are searching for a presolver with SCIPfindPresol(), this name is looked up.
2539 * Every presolving round starts with the FAST presolvers. MEDIUM presolvers are only called, if FAST presolvers did not find
2540 * enough reductions in this round so far, and EXHAUSTIVE presolving steps are only performed if all presolvers called before
2542 * Presolvers should be assigned a timing based on how expensive they are, e.g., presolvers that provide fast algorithms that
2543 * usually have a high impact (i.e., remove lots of variables or tighten bounds of many variables) should have a timing FAST.
2544 * If a presolver implements different algorithms of different complexity, it may also get multiple timings and check the timing
2548 * Within a presolving round, when calling all presolvers and presolving methods of propagators and constraint handlers
2550 * a predefined order, which is given by the priorities of the presolvers and the check priorities of the
2552 * First, the presolvers with non-negative priority are called in the order of decreasing priority.
2553 * Next, the presolving methods of the different constraint handlers are called in the order of decreasing check
2555 * Finally, the presolvers with negative priority are called in the order of decreasing priority.
2557 * Again, presolvers that provide fast algorithms that usually have a high impact (i.e., remove lots of variables or tighten
2560 * priorities of all presolvers, propagators, and constraint handlers is to type "display presolvers", "display propagators",
2564 * The presolving is conducted in rounds: the presolvers and presolving methods of the constraint handlers
2565 * are called iteratively until no more reductions have been found or some other abort criterion applies.
2566 * The "maxrounds" parameter of a presolver imposes a limit on the number of presolving rounds in which the
2567 * presolver is called. The PRESOL_MAXROUNDS property specifies the default value for this parameter.
2573 * Below the header "Data structures" you can find a struct which is called "struct SCIP_PresolData".
2574 * In this data structure, you can store the data of your presolver. For example, you should store the adjustable parameters
2583 * At the bottom of "presol_mypresolver.c", you can find the interface method SCIPincludePresolMypresolver(),
2585 * SCIPincludePresolMypresolver() is called by the user, if (s)he wants to include the presolver,
2589 * It is responsible for notifying SCIP of the presence of the presolver. For this, you can either call SCIPincludePresol(),
2590 * or SCIPincludePresolBasic() since SCIP version 3.0. In the latter variant, \ref PRESOL_ADDITIONALCALLBACKS "additional callbacks"
2591 * must be added via setter functions as, e.g., SCIPsetPresolCopy(). We recommend this latter variant because
2592 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
2593 * variant must be manually adjusted with every SCIP release containing new callbacks for presolvers in order to compile.
2603 * You may also add user parameters for your presolver, see \ref PARAM for how to add user parameters and
2609 * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
2611 * They are passed together with the presolver itself to SCIP using SCIPincludePresol() or SCIPincludePresolBasic(),
2614 * Presolver plugins have only one fundamental callback method, namely the @ref PRESOLEXEC method.
2615 * This method has to be implemented for every presolver; the other callback methods are optional.
2616 * In the C++ wrapper class scip::ObjPresol, the scip_exec() method (which corresponds to the PRESOLEXEC callback) is a virtual
2625 * The PRESOLEXEC callback is called inside the presolving loop and should perform the actual presolving reductions.
2626 * It should inspect the problem instance at hand and simplify it by tightening bounds of variables, aggregating or fixing
2627 * variables, changing the type of variables, modifying the graph that represents the instance of your application, and
2630 * Typical methods called by a presolver are, for example, SCIPchgVarType(), SCIPfixVar(), SCIPaggregateVars(), SCIPtightenVarLb(),
2636 * The additional callback methods do not need to be implemented in every case. However, some of them have to be
2637 * implemented for most applications, they can be used, for example, to initialize and free private data.
2638 * Additional callbacks can either be passed directly with SCIPincludePresol() to SCIP or via specific
2639 * <b>setter functions</b> after a call of SCIPincludePresolBasic(), see also @ref PRESOL_INTERFACE.
2643 * If you are using presolver data (see \ref PRESOL_DATA and \ref PRESOL_INTERFACE), you have to implement this method in order to free the presolver data.
2685 * In this method, the presolver should free all resources that have been allocated for the solving process in PRESOLINIT.
2690 * The presolver may use this call to initialize its presolving data which only need to exist during the presolving stage.
2694 * The PRESOLEXITPRE callback is executed after presolving finishes and before the branch-and-bound process begins.
2695 * The presolver should use this call to clean up its presolving data, which was allocated in PRESOLINITPRE.
2698 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
2702 * Constraint based cutting planes, the second type of cutting planes in SCIP, are separated in the CONSSEPALP and
2703 * CONSSEPASOL callback methods of the constraint handlers, see \ref CONSSEPALP and \ref CONSSEPASOL. These cuts are
2704 * valid inequalities or even facets of the polyhedron described by a single constraint or a subset of the constraints of
2705 * a single constraint class. In contrast, general purpose cuts do not require or exploit any knowledge about the
2706 * underlying problem structure but use only the current LP relaxation and the integrality conditions. See also
2707 * "When should I implement a constraint handler, when should I implement a separator?" on \ref FAQ.
2709 * A complete list of all separators contained in this release can be found \ref SEPARATORS "here".
2712 * Take the separator for the class of Gomory mixed integer inequalities (src/scip/sepa_gomory.c) as an example.
2713 * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjSepa wrapper
2714 * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_SEPA... callback methods.
2716 * Additional documentation for the callback methods of a separator, in particular for the input parameters,
2720 * -# Copy the template files src/scip/sepa_xyz.c and src/scip/sepa_xyz.h into files "sepa_myseparator.c"
2723 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
2724 * -# Use SCIPincludeSepaMyseparator() in order to include the separator into your SCIP instance,
2726 * -# Open the new files with a text editor and replace all occurrences of "xyz" by "myseparator".
2731 * -# Implement the additional callback methods (see \ref SEPA_ADDITIONALCALLBACKS). This is optional.
2738 * In the C++ wrapper class, you have to provide the separator properties by calling the constructor
2744 * Additionally, if you are searching for a separator with SCIPfindSepa(), this name is looked up.
2751 * In each separation round during the price-and-cut loop of the subproblem processing or the separation loop
2752 * of the primal solution separation, the separators and separation methods of the constraint handlers are called in
2753 * a predefined order, which is given by the priorities of the separators and the separation priorities
2755 * First, the separators with non-negative priority are called in the order of decreasing priority.
2756 * Next, the separation methods of the constraint handlers are called in the order of decreasing separation
2758 * Finally, the separators with negative priority are called in the order of decreasing priority. An easy way to list the
2759 * priorities of all separators and constraint handlers is to type "display separators" and "display conshdlrs" in
2762 * The priority of the separator should be set according to the complexity of the cut separation algorithm and the
2763 * impact of the resulting cuts: separators that provide fast algorithms that usually have a high impact (i.e., cut off
2768 * The frequency defines the depth levels at which the separation methods \ref SEPAEXECLP and \ref SEPAEXECSOL are called.
2769 * For example, a frequency of 7 means, that the separation callback is executed for subproblems that are in depth
2770 * 0, 7, 14, ... of the branching tree. A frequency of 0 means, that the separation method is only called at the root node.
2773 * The frequency can be adjusted by the user. This property of the separator only defines the default value of the frequency.
2774 * If you want to have a more flexible control of when to execute the separation algorithm, you have to assign
2775 * a frequency of 1 and implement a check at the beginning of your separation methods whether you really want to execute
2779 * \par SEPA_MAXBOUNDDIST: the default maximal relative distance from the current node's dual bound to primal bound compared to best node's dual bound for applying separation.
2780 * At the current branch-and-bound node, the relative distance from its dual bound (local dual bound)
2781 * to the primal bound compared to the best node's dual bound (global dual bound) is considered. The separation method
2782 * of the separator will only be applied at the current node if this relative distance does not exceed SEPA_MAXBOUNDDIST.
2784 * For example, if the global dual bound is 50 and the primal bound is 60, SEPA_MAXBOUNDDIST = 0.25 means that separation
2785 * is only applied if the current node's dual bound is in the first quarter of the interval [50,60], i.e., if it is less
2788 * In particular, the values 0.0 and 1.0 mean that separation is applied at the current best node only or at all
2789 * nodes, respectively. Since separation seems to be most important to apply at nodes that define to the global
2792 * Obviously, at the root node the local dual bound is equal to the global dual bound and thus, the separator is called
2796 * Some heuristics and separators solve MIPs or SAT problems and use a secondary SCIP instance. Examples are
2797 * Large Neighborhood Search heuristics such as RINS and Local Branching or the CGMIP separator. To avoid recursion,
2798 * these plugins usually deactivate all other plugins that solve MIPs. If a separator uses a secondary SCIP instance,
2799 * this parameter has to be TRUE and it is recommended to call SCIPsetSubscipsOff() for the secondary SCIP instance.
2801 * \par SEPA_DELAY: the default for whether the separation method should be delayed, if other separators or constraint handlers found cuts.
2802 * If the separator's separation method is marked to be delayed, it is only executed after no other separator
2804 * If the separation method of the separator is very expensive, you may want to mark it to be delayed until all cheap
2809 * Below the header "Data structures" you can find a struct which is called "struct SCIP_SepaData".
2810 * In this data structure, you can store the data of your separator. For example, you should store the adjustable
2811 * parameters of the separator in this data structure. In a separator, user parameters for the maximal number of
2812 * separation rounds per node and for the maximal number of cuts separated per separation round might be useful.
2819 * At the bottom of "sepa_myseparator.c", you can find the interface method SCIPincludeSepaMyseparator(),
2825 * It is responsible for notifying SCIP of the presence of the separator. For this, you can either call SCIPincludeSepa(),
2826 * or SCIPincludeSepaBasic() since SCIP version 3.0. In the latter variant, \ref SEPA_ADDITIONALCALLBACKS "additional callbacks"
2827 * must be added via setter functions as, e.g., SCIPsetSepaCopy(). We recommend this latter variant because
2828 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
2829 * variant must be manually adjusted with every SCIP release containing new callbacks for separators in order to compile.
2839 * You may also add user parameters for your separator, see \ref PARAM for how to add user parameters and
2845 * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
2847 * They are passed together with the separator itself to SCIP using SCIPincludeSepa() or SCIPincludeSepaBasic(),
2850 * Separator plugins have two callbacks, @ref SEPAEXECLP and @ref SEPAEXECSOL, of which at least one must be implemented.
2857 * The SEPAEXECLP callback is executed during the price-and-cut loop of the subproblem processing.
2858 * It should try to generate general purpose cutting planes in order to separate the current LP solution.
2861 * Usually, the callback searches and produces cuts, that are added with a call to SCIPaddCut().
2863 * In addition to LP rows, the callback may also produce domain reductions or add additional constraints.
2865 * Overall, the SEPAEXECLP callback has the following options, which is indicated by the possible return values of
2867 * - detecting that the node is infeasible in the variable's bounds and can be cut off (result SCIP_CUTOFF)
2871 * - stating that the separator searched, but did not find domain reductions, cutting planes, or cut constraints
2875 * - stating that a new separation round should be started without calling the remaining separator methods (result SCIP_NEWROUND)
2879 * The SEPAEXECSOL callback is executed during the separation loop on arbitrary primal solutions.
2880 * It should try to generate general purpose cutting planes in order to separate the given primal solution.
2881 * The method is not called in the LP solution loop, which means that there is no valid LP solution.
2883 * In the standard SCIP environment, the SEPAEXECSOL callback is not used because only LP solutions are
2884 * separated. The SEPAEXECSOL callback provides means to support external relaxation handlers like semidefinite
2885 * relaxations that want to separate an intermediate primal solution vector. Thus, if you do not want to support
2888 * Usually, the callback searches and produces cuts, that are added with a call to SCIPaddCut().
2890 * In addition to LP rows, the callback may also produce domain reductions or add other constraints.
2892 * Overall, the SEPAEXECSOL callback has the following options, which is indicated by the possible return values of
2894 * - detecting that the node is infeasible in the variable's bounds and can be cut off (result SCIP_CUTOFF)
2898 * - stating that the separator searched, but did not find domain reductions, cutting planes, or cut constraints
2902 * - stating that a new separation round should be started without calling the remaining separator methods (result SCIP_NEWROUND)
2907 * The additional callback methods do not need to be implemented in every case. However, some of them have to be
2908 * implemented for most applications, they can be used, for example, to initialize and free private data.
2909 * Additional callbacks can either be passed directly with SCIPincludeSepa() to SCIP or via specific
2910 * <b>setter functions</b> after a call of SCIPincludeSepaBasic(), see also @ref SEPA_INTERFACE.
2914 * If you are using separator data (see \ref SEPA_DATA and \ref SEPA_INTERFACE), you have to implement this method
2956 * In this method, the separator should free all resources that have been allocated for the solving process in SEPAINIT.
2960 * The SEPAINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
2965 * The SEPAEXITSOL callback is executed before the branch-and-bound process is freed. The separator should use this call
2966 * to clean up its branch-and-bound data, in particular to release all LP rows that it has created or captured.
2969 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
2972 * Propagators are used to tighten the domains of the variables. Like for cutting planes, there are two different types
2973 * of domain propagations. Constraint based (primal) domain propagation algorithms are part of the corresponding
2974 * constraint handlers, see \ref CONSPROP. In contrast, domain propagators usually provide dual propagations, i.e.,
2975 * propagations that can be applied using the objective function and the current best known primal solution. This
2978 * A complete list of all propagators contained in this release can be found \ref PROPAGATORS "here".
2980 * We now explain how users can add their own propagators. Take the pseudo objective function propagator
2981 * (src/scip/prop_pseudoobj.c) as an example. As all other default plugins, it is written in C. C++ users can easily
2982 * adapt the code by using the scip::ObjProp wrapper base class and implement the @c scip_...() virtual methods instead
2985 * Additional documentation for the callback methods of a propagator can be found in the file type_prop.h.
2988 * -# Copy the template files src/scip/prop_xyz.c and src/scip/prop_xyz.h into files named "prop_mypropagator.c"
2991 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
2992 * -# Use SCIPincludePropMypropagator() in order to include the propagator into your SCIP instance,
2994 * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mypropagator".
2999 * -# Implement the additional callback methods (see \ref PROP_ADDITIONALCALLBACKS). This is optional.
3003 * At the top of the new file "prop_mypropagator.c" you can find the propagator properties. These are given as compiler
3006 * In the C++ wrapper class, you have to provide the propagator properties by calling the constructor of the
3007 * abstract base class scip::ObjProp from within your constructor. The properties you have the following meaning:
3012 * This name is used in the interactive shell to address the propagator. Additionally, if you are searching for a
3013 * propagator with SCIPfindProp(), this name is searched for. Names have to be unique: no two propagators may have the
3020 * In each propagation round, the propagators and propagation methods of the constraint handlers are called in a
3021 * predefined order, which is given by the priorities of the propagators and the check priorities of the constraint
3022 * handlers. First, the propagators with non-negative priority are called in order of decreasing priority. Next, the
3023 * propagation methods of the different constraint handlers are called in order of decreasing check priority. Finally,
3024 * the propagators with negative priority are called in order of decreasing priority. \n The priority of the
3025 * propagators should be set according to the complexity of the propagation algorithm and the impact of the domain
3026 * propagations: propagators providing fast algorithms that usually have a high impact (i.e., tighten many bounds)
3030 * The frequency defines the depth levels at which the propagation method \ref PROPEXEC is called. For example, a
3031 * frequency of 7 means, that the propagation callback is executed for subproblems that are in depth 0, 7, 14, ... of
3032 * the branching tree. A frequency of 0 means that propagation is only applied in preprocessing and at the root node. A
3035 * The frequency can be adjusted by the user. This property of the propagator only defines the default value of the
3037 * <b>Note:</b> If you want to have a more flexible control of when to execute the propagation algorithm, you have to
3038 * assign a frequency of 1 and implement a check at the beginning of your propagation algorithm whether you really want
3039 * to execute the domain propagation or not. If you do not want to execute it, set the result code to SCIP_DIDNOTRUN.
3041 * \par PROP_DELAY: the default for whether the propagation method should be delayed, if other propagators or constraint handlers found domain reductions.
3042 * If the propagator's propagation method is marked to be delayed, it is only executed after no other propagator or
3043 * constraint handler found a domain reduction in the current iteration of the domain propagation loop. If the
3044 * propagation method of the propagator is very expensive, you may want to mark it to be delayed until all cheap
3050 * Possible values are defined in type_timing.h and can be concatenated, e.g., as in SCIP_PROPTIMING_ALWAYS.
3058 * Every presolving round starts with the FAST presolving methods. MEDIUM presolvers are only called, if FAST presolvers did not find
3059 * enough reductions in this round so far, and EXHAUSTIVE presolving steps are only performed if all presolvers called before
3061 * Presolving methods should be assigned a timing based on how expensive they are, e.g., presolvers that provide fast algorithms that
3062 * usually have a high impact (i.e., remove lots of variables or tighten bounds of many variables) should have a timing FAST.
3063 * If a presolving method implements different algorithms of different complexity, it may also get multiple timings and check the timing
3067 * This attribute is analogous to the PROP_PRIORITY flag, but deals with the preprocessing method of the presolver.
3069 * \par PROP_PRESOL_MAXROUNDS: the default maximal number of presolving rounds the propagator participates in.
3071 * If enough changes have been applied to the model, an additional preprocessing round is performed.
3072 * The MAXROUNDS parameter of a propagator denotes the maximal number of preprocessing rounds, the propagator
3079 * Below the title "Data structures" you can find a struct called <code>struct SCIP_PropData</code>. In this data
3080 * structure, you can store the data of your propagator. For example, you should store the adjustable parameters of the
3081 * propagator in this data structure. If you are using C++, you can add propagator data as object variables to your
3089 * At the bottom of "prop_mypropagator.c", you can find the interface method SCIPincludeSepaMypropagator(),
3091 * SCIPincludePropMypropagator() is called by the user, if (s)he wants to include the propagator,
3095 * It is responsible for notifying SCIP of the presence of the propagator. For this, you can either call SCIPincludeProp(),
3096 * or SCIPincludePropBasic() since SCIP version 3.0. In the latter variant, \ref PROP_ADDITIONALCALLBACKS "additional callbacks"
3097 * must be added via setter functions as, e.g., SCIPsetPropCopy(). We recommend this latter variant because
3098 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
3099 * variant must be manually adjusted with every SCIP release containing new callbacks for separators in order to compile.
3102 * If you are using propagator data, you have to allocate the memory for the data at this point. You can do this by
3109 * You may also add user parameters for your propagator, see the method SCIPincludePropPseudoobj() in
3115 * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
3117 * They are passed together with the propagator itself to SCIP using SCIPincludeProp() or SCIPincludePropBasic(),
3121 * method. This method has to be implemented for every propagator; the other callback methods are optional. In the
3122 * C++ wrapper class scip::ObjProp, the scip_exec() method (which corresponds to the \ref PROPEXEC
3130 * The PROPEXEC callback is called during presolving and during the subproblem processing. It should perform the actual
3131 * domain propagation, which means that it should tighten the variables' bounds. The technique of domain propagation,
3132 * which is the main workhorse of constraint programming, is called "node preprocessing" in the Integer Programming
3136 * - detecting that the node is infeasible in the variables' bounds and can be cut off (result SCIP_CUTOFF)
3138 * - stating that the propagator searched, but did not find domain reductions, cutting planes, or cut constraints
3147 * The additional callback methods do not need to be implemented in every case. However, some of them have to be
3148 * implemented for most applications, they can be used, for example, to initialize and free private data.
3149 * Additional callbacks can either be passed directly with SCIPincludeProp() to SCIP or via specific
3150 * <b>setter functions</b> after a call of SCIPincludePropBasic(), see also @ref PROP_INTERFACE.
3154 * If the propagator wants to support \ref CONF "conflict analysis", it has to supply the PROPRESPROP method. It also should call
3155 * SCIPinferVarLbProp() or SCIPinferVarUbProp() in the domain propagation instead of SCIPchgVarLb() or SCIPchgVarUb() in
3156 * order to deduce bound changes on variables. In the SCIPinferVarLbProp() and SCIPinferVarUbProp() calls, the
3157 * propagator provides a pointer to itself and an integer value "inferinfo" that can be arbitrarily chosen.
3159 * The propagation conflict resolving method PROPRESPROP must then be implemented to provide the "reasons" for the bound
3160 * changes, i.e., the bounds of variables at the time of the propagation, which forced the propagator to set the
3161 * conflict variable's bound to its current value. It can use the "inferinfo" tag to identify its own propagation rule
3162 * and thus identify the "reason" bounds. The bounds that form the reason of the assignment must then be provided by
3163 * calls to SCIPaddConflictLb() and SCIPaddConflictUb() in the propagation conflict resolving method.
3165 * See the description of the propagation conflict resolving method \ref CONSRESPROP of constraint handlers for
3168 * Omitting the PROPRESPROP callback circumvents the implementation of the usually rather complex conflict resolving method.
3170 * will make the conflict analysis less effective. We suggest to first omit the conflict resolving method and check how
3171 * effective the propagation method is. If it produces a lot of propagations for your application, you definitely should
3177 * If you are using propagator data, you have to implement this method in order to free the propagator data.
3195 * If you have allocated memory for fields in your propagator data, remember to free this memory
3202 * The PROPINIT callback is executed after the problem is transformed. The propagator may, e.g., use this call to
3217 * In this method, the propagator should free all resources that have been allocated for the solving process in PROPINIT.
3221 * The PROPINITPRE callback is executed before the preprocessing is started, even if presolving is turned off.
3222 * The propagator may use this call to initialize its presolving data before the presolving process begins.
3226 * The PROPEXITPRE callback is executed after the preprocessing has been finished, even if presolving is turned off.
3232 * The PROPINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
3246 * To inform SCIP that the presolving method found a reduction the result pointer has to be set in a proper way.
3249 * - SCIP_UNBOUNDED : at least one variable is not bounded by any constraint in objective direction
3250 * - SCIP_CUTOFF : at least one domain reduction that renders the problem infeasible has been found
3263 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
3266 * Branching rules are used to split the problem at the current node into smaller subproblems. Branching rules can be called at three
3269 * - the LP solution of the current problem is fractional. In this case, the integrality constraint handler calls the
3271 * - the list of external branching candidates is not empty. This will only be the case if branching candidates were added
3272 * by a user's \ref RELAX "relaxation handler" or \ref CONS "constraint handler" plugin, calling SCIPaddExternBranchCand().
3274 * - if an integral solution violates one or more constraints and this infeasibility could not be resolved in the callback methods
3275 * \ref CONSENFOLP and \ref CONSENFOPS of the corresponding constraint handlers. In this case, the \ref BRANCHEXECPS method will be called. This is the
3276 * standard case, if you use SCIP as a pure CP or SAT solver. If the LP or any other type of relaxation is used, then
3279 * The idea of branching rules is to take a global view on the problem. In contrast, branching paradigms which are
3280 * specific to one type of constraint are best implemented within the enforcement callbacks of your constraint handler.
3281 * See, e.g., the constraint specific branching rules provided by the constraint handlers for special ordered sets
3284 * All branching rules that come with the default distribution of SCIP create two subproblems by splitting a single
3285 * variable's domain. It is, however, fully supported to implement much more general branching schemes, for example by
3286 * creating more than two subproblems, or by adding additional constraints to the subproblems instead of tightening the
3289 * A complete list of all branching rules contained in this release can be found \ref BRANCHINGRULES "here".
3291 * We now explain how users can add their own branching rules. Take the most infeasible LP branching rule
3292 * (src/scip/branch_mostinf.c) as an example. As all other default plugins, it is written in C. C++ users can easily
3293 * adapt the code by using the scip::ObjBranchrule wrapper base class and implement the scip_...() virtual methods instead of
3296 * Additional documentation for the callback methods of a branching rule can be found in the file type_branch.h.
3302 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
3303 * -# Use SCIPincludeBranchruleMybranchingrule() in order to include the branching rule into your SCIP instance,
3305 * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mybranchingrule".
3310 * -# Implement the additional callback methods (see \ref BRANCHRULE_ADDITIONALCALLBACKS). This is optional.
3315 * At the top of the new file "branch_mybranchingrule.c" you can find the branching rule properties.
3317 * In the C++ wrapper class, you have to provide the branching rule properties by calling the constructor
3323 * Additionally, if you are searching for a branching rule with SCIPfindBranchrule(), this name is looked up.
3330 * In the subproblem processing, the branching rules are called in decreasing order of their priority until
3331 * one succeeded to branch. Since most branching rules are able to generate a branching in all situations,
3333 * BRANCHRULE_MAXBOUNDDIST settings, however, interesting strategies can be easily employed. For example,
3334 * the user can set the priority of the "full strong branching" strategy to the highest value and assign the
3335 * second highest value to the "reliable pseudo cost" rule. If (s)he also sets the maximal depth for the
3336 * "full strong branching" to 5, in the top 5 depth levels of the search tree the "full strong branching" is
3339 * Note that the BRANCHRULE_PRIORITY property only specifies the default value of the priority. The user can
3342 * \par BRANCHRULE_MAXDEPTH: the default value for the maximal depth level of the branching rule.
3343 * This parameter denotes the maximal depth level in the branch-and-bound tree up to which the branching method of the
3346 * Note that this property only specifies the default value. The user can change this value arbitrarily.
3348 * \par BRANCHRULE_MAXBOUNDDIST: the default value for the maximal relative distance from current node's dual bound to primal bound compared to best node's dual bound for applying branching.
3349 * At the current branch-and-bound node, the relative distance from its dual bound (local dual bound)
3350 * to the primal bound compared to the best node's dual bound (global dual bound) is considered. The branching method of
3351 * the branching rule will only be applied at the node if this relative distance does not exceed BRANCHRULE_MAXBOUNDDIST.
3353 * For example, if the global dual bound is 50 and the primal bound is 60, BRANCHRULE_MAXBOUNDDIST = 0.25 means that
3354 * branching is only applied if the current node's dual bound is in the first quarter of the interval [50,60], i.e., if it
3355 * is less than or equal to 52.5. In particular, the values 0.0 and 1.0 mean that the branching rule is applied at the
3358 * Note that the BRANCHRULE_MAXBOUNDDIST property only specifies the default value of the maximal bound distance.
3364 * Below the header "Data structures" you can find a struct which is called "struct SCIP_BranchruleData".
3365 * In this data structure, you can store the data of your branching rule. For example, you should store the adjustable
3367 * If you are using C++, you can add branching rule data as usual as object variables to your class.
3374 * At the bottom of "branch_mybranchingrule.c", you can find the interface method SCIPincludeBranchruleMybranchingrule(),
3376 * SCIPincludeBranchruleMybranchingrule() is called by the user, if (s)he wants to include the branching rule,
3380 * It is responsible for notifying SCIP of the presence of the branching rule. For this, you can either call
3382 * or SCIPincludeBranchruleBasic() since SCIP version 3.0. In the latter variant, \ref BRANCHRULE_ADDITIONALCALLBACKS "additional callbacks"
3383 * must be added via setter functions as, e.g., SCIPsetBranchruleCopy(). We recommend this latter variant because
3384 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
3385 * variant must be manually adjusted with every SCIP release containing new callbacks for branchrule in order to compile.
3388 * If you are using branching rule data, you have to allocate the memory for the data at this point.
3395 * You may also add user parameters for your branching rule, see the method SCIPincludeBranchruleRelpscost() in
3401 * Branching rules do not have any fundamental callback methods, i.e., all callback methods are optional.
3402 * In most cases, however, you want to implement the \ref BRANCHEXECLP method and sometimes the \ref BRANCHEXECPS method.
3407 * The additional callback methods do not need to be implemented in every case. However, some of them have to be
3408 * implemented for most applications, they can be used, for example, to initialize and free private data.
3409 * Additional callbacks can either be passed directly with SCIPincludeBranchrule() to SCIP or via specific
3410 * <b>setter functions</b> after a call of SCIPincludeBranchruleBasic(), see also @ref BRANCHRULE_INTERFACE.
3419 * The BRANCHEXECLP callback is executed during node processing if a fractional LP solution is available. It should
3420 * split the current problem into smaller subproblems. Usually, the branching is done in a way such that the current
3421 * fractional LP solution is no longer feasible in the relaxation of the subproblems. It is, however, possible to
3422 * create a child node for which the fractional LP solution is still feasible in the relaxation, for example, by
3423 * branching on a variable with integral LP value. In every case, you have to make sure that each subproblem is a
3424 * proper restriction of the current problem. Otherwise, you risk to produce an infinite path in the search tree.
3426 * The user gains access to the branching candidates, i.e., to the fractional variables, and their LP solution values by
3427 * calling the method SCIPgetLPBranchCands(). Furthermore, SCIP provides two methods for performing the actual
3430 * Given an integral variable \f$x\f$ with fractional LP solution value \f$x^*\f$, the method SCIPbranchVar() creates
3431 * two child nodes; one contains the bound \f$x \le \lfloor x^* \rfloor\f$ and the other one contains the bound \f$x \ge
3432 * \lceil x^* \rceil\f$, see the BRANCHEXECLP callback in src/scip/branch_mostinf.c for an example. In addition, if a
3433 * proven lower objective bound of a created child node is known, like after strong branching has been applied, the user
3434 * may call the method SCIPupdateNodeLowerbound() in order to update the child node's lower bound.
3440 * The BRANCHEXECEXT callback is executed during node processing if no LP solution is available and the list of
3441 * external branching candidates is not empty. It should split the current problem into smaller subproblems. If you
3442 * do not use relaxation handlers or constraints handlers that provide external branching candidates, you do not need to
3445 * In contrast to the LP branching candidates and the pseudo branching candidates, the list of external branching
3446 * candidates will not be generated automatically. The user has to add all variables to the list by calling
3447 * SCIPaddExternBranchCand() for each of them. Usually, this will happen in the execution method of a relaxation handler or in the
3450 * The user gains access to these branching candidates by calling the method SCIPgetExternBranchCands(). Furthermore,
3451 * SCIP provides two methods for performing the actual branching with a given solution value, namely SCIPbranchVarVal()
3452 * and SCIPcreateChild(). SCIPbranchVarVal() allows users to specify the branching point for a variable in contrast to
3455 * This paragraph contains additional information regarding how the method SCIPbranchVarVal() works. For external branching candidates,
3457 * - Given a continuous variable \f$x\f$ with solution value \f$x^*\f$, the method SCIPbranchVarVal() creates
3458 * two child nodes; one contains the bound \f$x \le x^* \f$ and the other one contains the bound \f$x \ge x^* \f$.
3460 * SCIPbranchVarVal() creates two child nodes; one contains the bound \f$x \le \lfloor x^* \rfloor\f$ and the other
3462 * - Given an integer variable \f$x\f$ with integral solution value \f$x^*\f$, the method SCIPbranchVarVal()
3463 * creates three child nodes; one contains the bound \f$x \le x^* -1\f$, one contains the bound \f$x \ge x^* +1\f$,
3466 * See the BRANCHEXECEXT callback in src/scip/branch_random.c for an example. In addition, if a proven lower bound of a
3467 * created child node is known the user may call the method SCIPupdateNodeLowerbound() in order to update the child
3474 * The BRANCHEXECPS callback is executed during node processing if no LP solution is available and at least one of the
3475 * integer variables is not yet fixed. It should split the current problem into smaller subproblems. PS stands for
3476 * pseudo solution which is the vector of all variables set to their locally best (w.r.t. the objective function)
3479 * The user gains access to the branching candidates, i.e., to the non-fixed integer variables, by calling the method
3480 * SCIPgetPseudoBranchCands(). Furthermore, SCIP provides two methods for performing the actual branching, namely
3483 * Given an integer variable \f$x\f$ with bounds \f$[l,u]\f$ and not having solved the LP, the method SCIPbranchVar()
3485 * - If both bounds are finite, then the two children will contain the domain reductions \f$x \le x^*\f$, and \f$x \ge
3486 * x^*+1\f$ with \f$x^* = \lfloor \frac{l + u}{2}\rfloor\f$. The current pseudo solution will remain feasible in one
3488 * - If only one of the bounds is finite, the variable will be fixed to that bound in one of the child nodes. In the
3490 * - If both bounds are infinite, three children will be created: \f$x \le 1\f$, \f$x \ge 1\f$, and \f$x = 0\f$.
3493 * See the BRANCHEXECPS callback in src/scip/branch_random.c for an example. In addition, if a proven lower bound of a
3494 * created child node is known, the user may call the method SCIPupdateNodeLowerbound() in order to update the child
3501 * In order to apply more general branching schemes, one should use the method SCIPcreateChild().
3502 * After having created a child node, the additional restrictions of the child node have to be added with calls to
3505 * In the method SCIPcreateChild(), the branching rule has to assign two values to the new nodes: a node selection
3506 * priority for each node and an estimate for the objective value of the best feasible solution contained in the subtree
3507 * after applying the branching. If the method SCIPbranchVar() is used, these values are automatically assigned. For
3508 * variable based branching schemes, one might use the methods SCIPcalcNodeselPriority() and the method
3511 * In some cases, the branching rule can tighten the current subproblem instead of producing a branching. For example,
3512 * strong branching might have proven that rounding up a variable would lead to an infeasible LP relaxation and thus,
3513 * the variable must be rounded down. Therefore, the BRANCHEXECLP, BRANCHEXECPS and BRANCHEXECREL callbacks may also
3518 * - adding an additional constraint (e.g. a conflict constraint) (result SCIP_CONSADDED; note that this action
3520 * - reducing the domain of a variable such that the current LP solution becomes infeasible (result SCIP_REDUCEDDOM)
3524 * Only the BRANCHEXECLP callback has the possibility to add a cutting plane to the LP (result SCIP_SEPARATED).
3528 * If you are using branching rule data, you have to implement this method in order to free the branching rule data.
3546 * If you have allocated memory for fields in your branching rule data, remember to free this memory
3568 * In this method, the branching rule should free all resources that have been allocated for the solving process in
3573 * The BRANCHINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
3583 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
3586 * Node selectors are used to decide which of the leaves in the current branching tree is selected as next subproblem
3587 * to be processed. The ordering relation of the tree's leaves for storing them in the leaf priority queue is also
3590 * A complete list of all node selectors contained in this release can be found \ref NODESELECTORS "here".
3594 * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjNodesel wrapper
3595 * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_NODESEL... callback methods.
3597 * Additional documentation for the callback methods of a node selector can be found in the file type_nodesel.h.
3600 * -# Copy the template files src/scip/nodesel_xyz.c and src/scip/nodesel_xyz.h into files named "nodesel_mynodeselector.c"
3603 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
3604 * -# Use SCIPincludeNodeselMynodeselector() in oder to include the node selector into your SCIP instance,
3606 * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mynodeselector".
3611 * -# Implement the additional callback methods (see \ref NODESEL_ADDITIONALCALLBACKS). This is optional.
3616 * At the top of the new file "nodesel_mynodeselector.c" you can find the node selector properties.
3618 * In the C++ wrapper class, you have to provide the node selector properties by calling the constructor
3624 * Additionally, if you are searching for a node selector with SCIPfindNodesel(), this name is looked up.
3631 * The first step of each iteration of the main solving loop is the selection of the next subproblem to be processed.
3632 * The node selector of highest priority (the active node selector) is called to do this selection.
3633 * In particular, if you implemented your own node selector plugin which you want to be applied, you should choose a priority
3635 * Note that SCIP has two different operation modes: the standard mode and the memory saving mode. If the memory
3636 * limit - given as a parameter by the user - is almost reached, SCIP switches from the standard mode to the memory saving
3637 * mode in which different priorities for the node selectors are applied. NODESEL_STDPRIORITY is the priority of the
3640 * Note that this property only defines the default value of the priority. The user may change this value arbitrarily by
3643 * \par NODESEL_MEMSAVEPRIORITY: the default priority of the node selector in the memory saving mode.
3644 * The priority NODESEL_MEMSAVEPRIORITY of the node selector has the same meaning as the priority NODESEL_STDPRIORITY, but
3646 * Usually, you want the best performing node selector, for example best estimate search, to have maximal
3647 * standard priority, while you want a node selector which tends to keep the growth of the search tree limited, for example
3650 * Note that this property only defines the default value of the priority. The user may change this value arbitrarily by
3656 * Below the header "Data structures" you can find a struct which is called "struct SCIP_NodeselData".
3657 * In this data structure, you can store the data of your node selector. For example, you should store the adjustable
3659 * If you are using C++, you can add node selector data as usual as object variables to your class.
3666 * At the bottom of "nodesel_mynodeselector.c", you can find the interface method SCIPincludeNodeselMynodeselector(),
3668 * SCIPincludeNodeselMynodeselector() is called by the user, if (s)he wants to include the node selector,
3672 * It is responsible for notifying SCIP of the presence of the node selector. For this, you can either call
3674 * or SCIPincludeNodeselBasic() since SCIP version 3.0. In the latter variant, \ref NODESEL_ADDITIONALCALLBACKS "additional callbacks"
3675 * must be added via setter functions as, e.g., SCIPsetNodeselCopy(). We recommend this latter variant because
3676 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
3677 * variant must be manually adjusted with every SCIP release containing new callbacks for node selectors in order to compile.
3680 * If you are using node selector data, you have to allocate the memory for the data at this point.
3687 * You may also add user parameters for your node selector, see the method SCIPincludeNodeselRestartdfs() in
3693 * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
3695 * They are passed together with the node selector itself to SCIP using SCIPincludeNodesel() or SCIPincludeNodeselBasic(),
3698 * Node selector plugins have two fundamental callback methods, namely the NODESELSELECT method and the NODESELCOMP method.
3699 * These methods have to be implemented for every node selector; the other callback methods are optional.
3700 * They implement the two requirements every node selector has to fulfill: Selecting a node from the queue to be processed
3701 * next and, given two nodes, deciding which of both is favored by the node selector's selection rule. The first
3702 * task is implemented in the NODESELSELECT callback, the second one in the NODESELCOMP callback.
3703 * In the C++ wrapper class scip::ObjNodesel, the scip_select() method and the scip_comp() method (which correspond to the
3704 * NODESELSELECT callback and the NODESELCOMP callback, respectively) are virtual abstract member functions.
3705 * You have to implement them in order to be able to construct an object of your node selector class.
3711 * The NODESELSELECT callback is the first method called in each iteration in the main solving loop. It should decide
3712 * which of the leaves in the current branching tree is selected as the next subproblem to be processed.
3713 * It can arbitrarily decide between all leaves stored in the tree, but for performance reasons,
3714 * the current node's children and siblings are often treated different from the remaining leaves.
3715 * This is mainly due to the warm start capabilities of the simplex algorithm and the expectation that the bases of
3718 * have a large impact on the solver's performance, because it influences the finding of feasible solutions and the
3721 * Besides the ranking of the node selector, every node gets assigned a node selection priority by the branching rule
3722 * that created the node. See the \ref BRANCHEXECLP and \ref BRANCHEXECPS callbacks of the branching rules for details.
3723 * For example, the node where the branching went in the same way as the deviation from the branching variable's
3724 * root solution could be assigned a higher priority than the node where the branching went in the opposite direction.
3727 * - SCIPgetPrioChild() returns the child of the current node with the largest node selection priority, as assigned by the
3729 * If no child is available (for example, because the current node was pruned), a NULL pointer is returned.
3730 * - SCIPgetBestChild() returns the best child of the current node with respect to the node selector's ordering relation as
3731 * defined by the \ref NODESELCOMP callback. If no child is available, a NULL pointer is returned.
3732 * - SCIPgetPrioSibling() returns the sibling of the current node with the largest node selection priority.
3733 * If no sibling is available (for example, because all siblings of the current node have already been processed), a NULL
3735 * Note that in binary branching every node has at most one sibling, but since SCIP supports arbitrary branching rules,
3737 * - SCIPgetBestSibling() returns the best sibling of the current node with respect to the node selector's ordering relation
3738 * as defined by the \ref NODESELCOMP callback. If no sibling is available, a NULL pointer is returned.
3739 * - SCIPgetBestNode() returns the best leaf from the tree (children, siblings, or other leaves) with respect to the node
3740 * selector's ordering relation as defined by the \ref NODESELCOMP callback. If no open leaf exists, a NULL pointer is
3741 * returned. In this case, the optimization is finished, and the node selector should return a NULL pointer as 'selnode'.
3742 * - SCIPgetBestboundNode() returns a leaf from the tree (children, siblings, or other leaves) with the smallest lower (dual)
3743 * objective bound. If the queue is empty, a NULL pointer is returned. In this case, the optimization is finished, and the
3749 * The NODESELCOMP callback is called to compare two leaves of the current branching tree (say node 1 and node 2)
3759 * The additional callback methods do not need to be implemented in every case. However, some of them have to be
3760 * implemented for most applications, they can be used, for example, to initialize and free private data.
3761 * Additional callbacks can either be passed directly with SCIPincludeNodesel() to SCIP or via specific
3762 * <b>setter functions</b> after a call of SCIPincludeNodeselBasic(), see also @ref NODESEL_INTERFACE.
3766 * If you are using node selector data, you have to implement this method in order to free the node selector data.
3784 * If you have allocated memory for fields in your node selector data, remember to free this memory
3806 * In this method, the node selector should free all resources that have been allocated for the solving process
3811 * The NODESELINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
3822 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
3825 * Feasible solutions can be found in two different ways during the traversal of the branch-and-bound tree. On one
3826 * hand, the solution of a node's relaxation may be feasible with respect to the constraints (including the integrality).
3829 * A complete list of all primal heuristics contained in this release can be found \ref PRIMALHEURISTICS "here".
3831 * Diving heuristics are primal heuristics that explore an auxiliary search tree in a depth-first manner. Since SCIP
3832 * version 3.2, it is easy to integrate further diving heuristics by using a special controller for the scoring,
3836 * Take the simple and fast LP rounding heuristic (src/scip/heur_simplerounding.c) as an example.
3837 * The idea of simple rounding is to iterate over all fractional variables of an LP solution and round them down,
3838 * if the variables appears only with nonnegative coefficients in the system Ax <= b and round them up if
3840 * If one of both conditions applies for each of the fractional variables, this will give a feasible solution.
3841 * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjHeur wrapper
3842 * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_HEUR... callback methods.
3844 * Additional documentation for the callback methods of a primal heuristic can be found in the file type_heur.h.
3847 * -# Copy the template files src/scip/heur_xyz.c and src/scip/heur_xyz.h into files named "heur_myheuristic.c"
3850 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
3851 * -# Use SCIPincludeHeurMyheuristic() in order to include the heuristic into your SCIP instance,
3853 * -# Open the new files with a text editor and replace all occurrences of "xyz" by "myheuristic".
3858 * -# Implement the additional callback methods (see \ref HEUR_ADDITIONALCALLBACKS). This is optional.
3863 * At the top of the new file "heur_myheuristic.c" you can find the primal heuristic properties.
3865 * In the C++ wrapper class, you have to provide the primal heuristic properties by calling the constructor
3867 * Of course, all of them are of relevant, but the most important ones for controlling the performance
3873 * Additionally, if you are searching for a primal heuristic with SCIPfindHeur(), this name is looked up.
3877 * This string is printed as a description of the primal heuristic in the interactive shell when you call "display heuristics".
3880 * In the interactive shell, this character is printed in the first column of a status information row, if the primal
3881 * heuristic found the feasible solution belonging to the primal bound. Note that a star '*' stands for an integral
3883 * In order to avoid confusion, display characters should be unique: no two primal heuristics should have the same display character.
3884 * You can get a list of all primal heuristics along with their display characters by entering "display heuristics" in the
3888 * At each of the different entry points of the primal heuristics during the solving process (see HEUR_TIMING), they are
3891 * The priority of a primal heuristic should be set according to the complexity of the heuristic and the likelihood to find
3892 * feasible solutions: primal heuristics that provide fast algorithms that often succeed in finding a feasible solution should have
3893 * a high priority (like simple rounding). In addition, the interaction between different types of primal heuristics should be taken into account.
3894 * For example, improvement heuristics, which try to generate improved solutions by inspecting one or more of the feasible
3895 * solutions that have already been found, should have a low priority (like Crossover which by default needs at least 3 feasible solutions).
3898 * The frequency together with the frequency offset (see HEUR_FREQOFS) defines the depth levels at which the execution
3899 * method of the primal heuristic \ref HEUREXEC is called. For example, a frequency of 7 together with a frequency offset
3900 * of 5 means, that the \ref HEUREXEC callback is executed for subproblems that are in depth 5, 12, 19, ... of the branching tree. A
3901 * frequency of 0 together with a frequency offset of 3 means, that the execution method is only called at those nodes that are in
3904 * the heuristic is only called at the root node and a frequency of -1 which disables the heuristic.
3906 * The frequency can be adjusted by the user. This property of the primal heuristic only defines the default value of the
3907 * frequency. If you want to have a more flexible control of when to execute the primal heuristic, you have to assign
3908 * a frequency of 1 and implement a check at the beginning of your execution method whether you really want to search for feasible
3909 * solutions or not. If you do not want to execute the method, set the result code to SCIP_DIDNOTRUN.
3912 * The frequency offset defines the depth of the branching tree at which the primal heuristic is executed for the first
3913 * time. For example, a frequency of 7 (see HEUR_FREQ) together with a frequency offset of 10 means, that the
3914 * callback is executed for subproblems that are in depth 10, 17, 24, ... of the branching tree. In particular, assigning
3915 * different offset values to heuristics of the same type, like diving heuristics, can be useful for evenly spreading the
3917 * Note that if the frequency is equal to 1, the heuristic is applied for all nodes with depth level larger or equal to
3921 * This parameter denotes the maximal depth level in the branching tree up to which the execution method of the primal
3925 * Primal heuristics have different entry points during the solving process and the execution timing parameter defines the
3932 * - after the processing of a node <em>with solved LP</em> was finished (SCIP_HEURTIMING_AFTERLPNODE)
3933 * - after the processing of a node <em>without solved LP</em> was finished (SCIP_HEURTIMING_AFTERPSEUDONODE)
3934 * - after the processing of the last node in the current plunge was finished, <em>and only if the LP was solved for
3936 * - after the processing of the last node in the current plunge was finished, <em>and only if the LP was not solved
3940 * The flags listed above can be combined to call the heuristic at multiple times by concatenating them with a bitwise OR.
3942 * - after the processing of a node was finished (SCIP_HEURTIMING_AFTERNODE; combines SCIP_HEURTIMING_AFTERLPNODE and
3944 * - after the processing of the last node in the current plunge was finished (SCIP_HEURTIMING_AFTERPLUNGE; combines
3947 * Calling a primal heuristic "before the processing of the node starts" is particularly useful for heuristics
3948 * that do not need to access the LP solution of the current node. If such a heuristic finds a feasible solution, the
3949 * leaves of the branching tree exceeding the new primal bound are pruned. It may happen that even the current node can
3950 * be cut off without solving the LP relaxation. Combinatorial heuristics, like the farthest insert heuristic for the TSP
3953 * Very fast primal heuristics that require an LP solution can also be called "after each LP solve during the
3958 * (e.g. expensive rounding heuristics like RENS), or even only after a full plunge was finished (e.g., diving heuristics).
3961 * Some heuristics and separators solve MIPs or SAT problems using a secondary SCIP instance. Examples are
3962 * Large Neighborhood Search heuristics such as RINS and Local Branching or the CGMIP separator. To avoid recursion,
3963 * these plugins usually deactivate all other plugins that solve MIPs. If a heuristic uses a secondary SCIP instance,
3964 * this parameter has to be TRUE and it is recommended to call SCIPsetSubscipsOff() for the secondary SCIP instance.
3966 * Computational experiments indicate that for the overall performance of a MIP solver, it is important to evenly
3967 * spread the application of the heuristics across the branch-and-bound tree. Thus, the assignment of the parameters
3970 * Note that all diving heuristics in the SCIP distribution (see, e.g., src/scip/heur_guideddiving.c) check whether other diving
3971 * heuristics have already been called at the current node. This can be done by comparing SCIPgetLastDivenode(scip) and
3972 * SCIPgetNNodes(scip). If the two are equal, and if the current node is not the root node (SCIPgetDepth(scip) > 0), diving
3973 * heuristics should be delayed by returning the result code 'SCIP_DELAYED'. This is an additional contribution to the goal of
3979 * Below the header "Data structures" you can find a struct which is called "struct SCIP_HeurData".
3980 * In this data structure, you can store the data of your primal heuristic. For example, you should store the adjustable
3982 * If you are using C++, you can add primal heuristic data as usual as object variables to your class.
3989 * At the bottom of "heur_myheuristic.c", you can find the interface method SCIPincludeHeurMyheuristic(),
3995 * It is responsible for notifying SCIP of the presence of the heuristic. For this, you can either call
3997 * or SCIPincludeHeurBasic() since SCIP version 3.0. In the latter variant, \ref HEUR_ADDITIONALCALLBACKS "additional callbacks"
3998 * must be added via setter functions as, e.g., SCIPsetHeurCopy(). We recommend this latter variant because
3999 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
4000 * variant must be manually adjusted with every SCIP release containing new callbacks for heuristics in order to compile.
4002 * If you are using primal heuristic data, you have to allocate the memory for the data at this point.
4009 * You may also add user parameters for your primal heuristic, see the method SCIPincludeHeurFeaspump() in
4015 * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
4017 * They are passed together with the primal heuristic itself to SCIP using SCIPincludeHeur() or SCIPincludeHeurBasic(),
4021 * Primal heuristic plugins have only one fundamental callback method, namely the HEUREXEC method.
4022 * This method has to be implemented for every primal heuristic; the other callback methods are optional.
4023 * In the C++ wrapper class scip::ObjHeur, the scip_exec() method (which corresponds to the HEUREXEC callback) is a virtual
4024 * abstract member function. You have to implement it in order to be able to construct an object of your primal heuristic
4031 * The HEUREXEC callback is called at different positions during the node processing loop, see HEUR_TIMING. It should
4032 * search for feasible solutions and add them to the solution pool. For creating a new feasible solution, the
4033 * methods SCIPcreateSol() and SCIPsetSolVal() can be used. Afterwards, the solution can be added to the storage by
4036 * The HEUREXEC callback gets a SCIP pointer, a pointer to the heuristic itself, the current point in the
4042 * - stating that the primal heuristic searched, but did not find a feasible solution (result SCIP_DIDNOTFIND)
4044 * - stating that the primal heuristic was skipped, but should be called again (result SCIP_DELAYED).
4049 * The additional callback methods do not need to be implemented in every case. However, some of them have to be
4050 * implemented for most applications, they can be used, for example, to initialize and free private data.
4051 * Additional callbacks can either be passed directly with SCIPincludeHeur() to SCIP or via specific
4052 * <b>setter functions</b> after a call of SCIPincludeHeurBasic(), see also @ref HEUR_INTERFACE.
4056 * If you are using primal heuristic data, you have to implement this method in order to free the primal heuristic data.
4074 * If you have allocated memory for fields in your primal heuristic data, remember to free this memory
4096 * In this method, the primal heuristic should free all resources that have been allocated for the solving process in
4101 * The HEURINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
4102 * begin. The primal heuristic may use this call to initialize its branch-and-bound specific data.
4106 * The HEUREXITSOL callback is executed before the branch-and-bound process is freed. The primal heuristic should use this
4109 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4113 * Diving heuristics are an important addon to the branch-and-cut search. A diving heuristic explores a single probing
4114 * path down the search tree. In contrast to the regular search guided by branching rule(s) and the selected
4115 * node selector, the diving is performed in an auxiliary tree originating from the focus node of the main
4116 * search tree where the heuristic was called. The advantage of this approach is that many different scoring mechanisms
4117 * can be safely tried as diving heuristic and may probably lead to better solutions. SCIP has a lot of diving heuristics
4121 * Since SCIP version 3.2, the diving heuristics have been redesigned to contain mainly the scoring function used by the
4122 * heuristic. In order to implement a user-defined diving heuristic, it is possible to create one (or several)
4123 * divesets that control the scoring mechanism and add them to the primal heuristic. This has the advantage that
4124 * less code is necessary to create a working diving heuristic. The SCIP statistics now also display some interesting statistics
4128 * This page contains the necessary steps to understand and include a diveset into ones primal diving heuristic plugin. As
4129 * a prerequisite, you should understand the basic implementation steps for a primal heuristic, see \ref HEUR.
4130 * In order to make use of divesets, they must be included _after_ the primal heuristic to which they should belong
4131 * has been included, by using SCIPincludeDiveset(). This will create the data structure for the diveset and
4132 * append it to the list of divesets belonging to the heuristic, which can be retrieved later together with their number
4133 * by using SCIPheurGetDivesets() and SCIPheurGetNDivesets(), respectively. No further memory allocation or deletion is needed;
4134 * As a member of the heuristic, SCIP automatically takes care of freeing the diveset when it is exiting.
4137 * Before the inclusion, one may think of adjusting the various properties that a diveset offers to control
4141 * It is mandatory to implement the fundamental scoring callback of the diveset, which is explained in more detail
4146 * has been defined, use the method SCIPperformGenericDivingAlgorithm() inside the execution callback (\ref HEUREXEC) of the primal
4147 * heuristic to which the diveset belongs, after checking possible preliminaries that may not be met at all times of the search.
4150 * For a code example, we refer to \ref heur_guideddiving.h, which guides the diving into the direction of the current incumbent solution.
4151 * Before it calls SCIPperformGenericDivingAlgorithm(), it checks whether an incumbent is available, and returns if there is none.
4156 * Every diveset controls the diving behavior through a set of user-defined parameters, which are explained in the following:
4159 * the minimal relative depth (to the maximum depth explored during regular search) of the current focus node to start diving
4162 * the maximal relative depth (to the maximum depth explored during regular search) of the current focus node to start diving
4165 * maximal fraction of diving LP iterations compared to node LP iterations that this dive controller may consume
4188 * parameter to control LP resolve dynamically based on this percentage of observed bound changes relative to all variables or
4189 * the LP branching candidates (integer variables with fractional solution values) from the last node where an LP has been solved.
4193 * LP solve frequency for diveset, use a positive integer k to solve an LP at every k'th depth of the diving search (ie. 1 causes the
4194 * diveset to solve _all_ intermediate LPs) or 0 to only resolve the LP relaxation after propagation found at least a certain percentage
4198 * Set this property to TRUE if only LP branching candidates be considered for the execution of the diving algorithm instead of the slower but
4202 * bit mask that represents all supported dive types. Irrelevant if only LP branching candidates should be scored, otherwise, different
4203 * constraint handlers may ask the diveset if it supports their preferred divetype. See \ref type_heur.h for a list of
4212 * The scoring callback expects a candidate variable and calculates a score value and a preferred direction. The selected
4214 * If the diveset should support more than one possible type of diving, it may use the divetype argument as a hint how
4215 * the caller of the score function (could be the diving algorithm itself or one of the constraint handlers that
4220 * This is all there is to extend the SCIP set of diving heuristics by a new one. For further information, please see
4221 * diveset related methods in \ref type_heur.h, \ref pub_heur.h, \ref pub_dive.h, and \ref heur_guideddiving.h or
4224 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4228 * SCIP provides specific support for LP relaxations of constraint integer programs. In addition, relaxation handlers,
4229 * also called relaxators, can be used to include other relaxations, e.g. Lagrange relaxations or semidefinite
4230 * relaxations. The relaxation handler manages the necessary data structures and calls the relaxation solver to generate dual
4233 * However, the data to define a single relaxation must either be extracted by the relaxation handler itself (e.g., from
4234 * the user defined problem data, the LP information, or the integrality conditions), or be provided by the constraint
4235 * handlers. In the latter case, the constraint handlers have to be extended to support this specific relaxation.
4238 * We now explain how users can add their own relaxation handlers using the C interface. It is very easy to
4239 * transfer the C explanation to C++: whenever a method should be implemented using the SCIP_DECL_RELAX... notion,
4240 * reimplement the corresponding virtual member function of the abstract scip::ObjRelax wrapper base class.
4241 * Unfortunately, SCIP does not contain a default relaxation handler plugin, which could be used as an example.
4243 * Additional documentation for the callback methods of a relaxation handler can be found in the file type_relax.h.
4246 * -# Copy the template files src/scip/relax_xyz.c and src/scip/relax_xyz.h into files named "relax_myrelaxator.c"
4249 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4250 * -# Use SCIPincludeRelaxMyrelaxator() in order to include the relaxation handler into your SCIP instance,
4252 * -# Open the new files with a text editor and replace all occurrences of "xyz" by "myrelaxator".
4257 * -# Implement the additional callback methods (see \ref RELAX_ADDITIONALCALLBACKS). This is optional.
4262 * At the top of the new file "relax_myrelaxator.c" you can find the relaxation handler properties.
4264 * In the C++ wrapper class, you have to provide the relaxation handler properties by calling the constructor
4270 * Additionally, if you are searching for a relaxation handler with SCIPfindRelax(), this name is looked up.
4278 * price-and-cut loop for solving the LP relaxation are called in a predefined order, which is given by the priorities
4280 * First, the relaxation handlers with non-negative priority are called in the order of decreasing priority.
4282 * Finally, the relaxation handlers with negative priority are called in the order of decreasing priority.
4284 * Usually, you will have only one relaxation handler in your application and thus only have to decide whether it should
4285 * be called before or after solving the LP relaxation. For this decision you should consider the complexity of
4286 * the relaxation solving algorithm and the impact of the resulting solution: if your relaxation handler provides a fast
4288 * feasible region of the subproblem and the solution severely improves the dual bound), it should have a non-negative
4291 * Note that for certain applications, it is useful to disable the LP relaxation and only use your custom relaxation.
4295 * The frequency defines the depth levels at which the relaxation solving method \ref RELAXEXEC is called.
4296 * For example, a frequency of 7 means, that the relaxation solving callback is executed for subproblems that are in depth
4297 * 0, 7, 14, ... of the branching tree. A frequency of 0 means that the callback is only executed at the root node, i.e.,
4298 * only the relaxation of the root problem is solved. A frequency of -1 disables the relaxation handler.
4303 * Below the header "Data structures" you can find a struct which is called "struct SCIP_RelaxData".
4304 * In this data structure, you can store the data of your relaxation handler. For example, you should store the adjustable
4306 * If you are using C++, you can add relaxation handler data as usual as object variables to your class.
4313 * At the bottom of "relax_myrelaxator.c", you can find the interface method SCIPincludeRelaxMyrelaxator(),
4315 * SCIPincludeRelaxMyrelaxator() is called by the user, if (s)he wants to include the relaxation handler,
4319 * It is responsible for notifying SCIP of the presence of the relaxation handler. For this, you can either call
4321 * or SCIPincludeRelaxBasic() since SCIP version 3.0. In the latter variant, \ref RELAX_ADDITIONALCALLBACKS "additional callbacks"
4322 * must be added via setter functions as, e.g., SCIPsetRelaxCopy(). We recommend this latter variant because
4323 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
4324 * variant must be manually adjusted with every SCIP release containing new callbacks for relaxation handlers in order to compile.
4326 * If you are using relaxation handler data, you have to allocate the memory for the data at this point.
4333 * You may also add user parameters for your relaxation handler, see the method SCIPincludeConshdlrKnapsack() in
4334 * the \ref cons_knapsack.h "knapsack constraint handler" for an example of how to add user parameters.
4339 * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
4341 * They are passed together with the relaxation handler itself to SCIP using SCIPincludeRelax() or SCIPincludeRelaxBasic(),
4345 * Relaxation handler plugins have only one fundamental callback method, namely the \ref RELAXEXEC method.
4346 * This method has to be implemented for every relaxation handler; the other callback methods are optional.
4347 * In the C++ wrapper class scip::ObjRelax, the scip_exec() method (which corresponds to the \ref RELAXEXEC callback) is a virtual
4349 * You have to implement it in order to be able to construct an object of your relaxation handler class.
4357 * Note that, like the LP relaxation, the relaxation handler should only operate on variables for which the corresponding
4358 * column exists in the transformed problem. Typical methods called by a relaxation handler are SCIPconstructLP() and SCIPflushLP() to
4359 * make sure that the LP of the current node is constructed and its data can be accessed via calls to SCIPgetLPRowsData()
4360 * and SCIPgetLPColsData(), SCIPseparateSol() to call the cutting plane separators for a given primal solution, and
4361 * SCIPupdateLocalLowerbound() to update the current node's dual bound after having solved the relaxation.
4362 * In addition, you may want to call SCIPtrySolFree() if you think that you have found a feasible primal solution.
4365 * <code>SCIPsetRelaxSolVal()</code> and <code>SCIPsetRelaxSolVals()</code> and later accessed by
4367 * Furthermore, there is a list of external branching candidates, that can be filled by relaxation handlers and constraint handlers,
4368 * allowing branching rules to take these candidates as a guide on how to split the problem into subproblems.
4369 * Relaxation handlers should store appropriate candidates in this list using the method <code>SCIPaddExternBranchCand()</code>.
4371 * Usually, the RELAXEXEC callback only solves the relaxation and provides a lower (dual) bound with a call to
4373 * However, it may also produce domain reductions, add additional constraints or generate cutting planes. It has the
4375 * - detecting that the node is infeasible in the variable's bounds and can be cut off (result SCIP_CUTOFF)
4376 * - adding an additional constraint and stating that the relaxation handler should not be called again on the same
4378 * - reducing a variable's domain and stating that the relaxation handler should not be called again on the same
4380 * - adding a cutting plane to the LP and stating that the relaxation handler should not be called again on the same
4382 * - stating that the relaxation handler solved the relaxation and should not be called again on the same relaxation
4384 * - interrupting the solving process to wait for additional input, e.g., cutting planes (result SCIP_SUSPENDED)
4387 * In the above criteria, "the same relaxation" means that the LP relaxation stayed unmodified. This means in particular
4388 * that no row has been added and no bounds have been modified. For example, changing the bounds of a variable will, as
4389 * long as it was a COLUMN variable, lead to a modification in the LP such that the relaxation handler is called again
4395 * The additional callback methods do not need to be implemented in every case. However, some of them have to be
4396 * implemented for most applications, they can be used, for example, to initialize and free private data.
4397 * Additional callbacks can either be passed directly with SCIPincludeRelax() to SCIP or via specific
4398 * <b>setter functions</b> after a call of SCIPincludeRelaxBasic(), see also @ref RELAX_INTERFACE.
4402 * If you are using relaxation handler data, you have to implement this method in order to free the relaxation handler
4420 * If you have allocated memory for fields in your relaxation handler data, remember to free this memory
4442 * In this method, the relaxation handler should free all resources that have been allocated for the solving process in
4447 * The RELAXINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
4448 * begin. The relaxation handler may use this call to initialize its branch-and-bound specific data.
4456 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4459 * Mainly, file readers are called to parse an input file and generate a constraint integer programming model. They
4460 * create constraints and variables and activate variable pricers if necessary. However, they can also be called, for
4461 * example, to parse an input file containing information about a primal solution or fixing of variables. Besides that
4462 * it is possible to use some of them for writing (exporting) the problem in a specific format. \n A complete list of
4477 * Take the file reader for MIPs in IBM's Mathematical Programming System format (src/scip/reader_mps.c) as an example.
4478 * As all other default plugins, it is written in C. C++ users can easily adapt the code by using the scip::ObjReader wrapper
4479 * base class and implement the scip_...() virtual methods instead of the SCIP_DECL_READER... callback methods.
4481 * Additional documentation for the callback methods of a file reader can be found in the file type_reader.h.
4487 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4488 * -# Use SCIPincludeReaderMyreader() in order to include the file reader into your SCIP instance,
4495 * -# Implement the \ref READER_ADDITIONALCALLBACKS "additional callback methods". This is optional.
4502 * In the C++ wrapper class, you have to provide the file reader properties by calling the constructor
4508 * Additionally, if you are searching for a file reader with SCIPfindReader(), this name is looked up.
4515 * Each file reader is hooked to a single file name extension. It is automatically called if the user wants to read in a
4517 * Note that the additional extension '.gz', '.z', or '.Z' (indicating a gzip compressed file) are ignored for assigning
4521 * It is, however, not necessary to implement the same (parsing/writing) methods more than once, if you want to
4528 * Below the header "Data structures" you can find a struct which is called "struct SCIP_ReaderData".
4529 * In this data structure, you can store the data of your file reader. For example, you should store the adjustable
4531 * If you are using C++, you can add file reader data as usual as object variables to your class.
4538 * At the bottom of "reader_myreader.c", you can find the interface method SCIPincludeReaderMyreader(),
4544 * It is responsible for notifying SCIP of the presence of the reader. For this, you can either call
4546 * or SCIPincludeReaderBasic() since SCIP version 3.0. In the latter variant, \ref READER_ADDITIONALCALLBACKS "additional callbacks"
4547 * must be added via setter functions as, e.g., SCIPsetReaderCopy(). We recommend this latter variant because
4548 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
4549 * variant must be manually adjusted with every SCIP release containing new callbacks for readers in order to compile.
4551 * If you are using file reader data, you have to allocate the memory for the data at this point.
4558 * You may also add user parameters for your file reader, see the method SCIPincludeReaderLp() in
4569 * methods \ref READERCOPY and \ref READERFREE are optional. In the C++ wrapper class scip::ObjReader, the
4579 * Additional callbacks can either be passed directly with SCIPincludeReader() to SCIP or via specific
4580 * <b>setter functions</b> after a call of SCIPincludeReaderBasic(), see also @ref READER_INTERFACE.
4583 * File reader plugins contain only additional callback methods, namely the methods \ref READERREAD,
4584 * \ref READERWRITE, \ref READERFREE, and \ref READERCOPY. Therefore, these are not needed to be implemented. However,
4591 * The READERREAD callback is called when the user invokes SCIP to read in a file with file name extension
4592 * corresponding to the READER_EXTENSION property of the file reader. This is usually triggered by a call to the method
4594 * The READERREAD callback should parse the input file and perform the desired action, which usually means
4595 * generating a constraint integer programming model, adding a primal solution, fixing variables
4602 * - creating the variables: SCIPcreateVar(), SCIPchgVarType(), SCIPchgVarLb(), SCIPchgVarUb(), SCIPaddVar(), and
4605 * - creating the constraints: SCIPcreateConsLinear(), SCIPaddCoefLinear(), SCIPchgLhsLinear(), SCIPchgRhsLinear(),
4608 * Primal solutions can only be created for the transformed problem. Therefore, the user has to call SCIPtransformProb()
4609 * before (s)he reads in the file containing the solution and adds it to the solution pool via the method SCIPreadSol().
4614 * The READERWRITE callback is called when the user invokes SCIP to write a problem (original or transformed)
4615 * in the format the reader supports. This is only possible if this callback is implemented. To write the problem
4616 * all necessary information is given through the parameters of this callback method (see type_reader.h). This
4617 * information should be used to output the problem in the requested format. This callback method is usually
4618 * triggered by the call of the methods SCIPwriteOrigProblem(), SCIPwriteTransProblem(), SCIPprintOrigProblem(),
4622 * integer programming model is SCIPinfoMessage(). This method outputs a given string into a file
4630 * The READERCOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
4631 * callback as <code>NULL</code> the user disables the execution of the specified reader for all copied SCIP
4632 * instances. The question might arise why to copy that plugin. In case of debugging it is nice to be able to
4633 * write/display the copied instances. Since the reader is in charge of that, you might want to copy the plugin. Below
4652 * If you are using file reader data, you have to implement this method in order to free the file reader data.
4670 * If you have allocated memory for fields in your file reader data, remember to free this memory
4677 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4680 * SCIP comes with a command line shell which allows the user to read in problem instances, modify the solver's
4681 * parameters, initiate the optimization and display certain statistics and solution information. This shell consists
4682 * of dialogs, which are organized as a tree in SCIP. A node of this tree which is not a leaf represents a menu in
4683 * the shell and the children of this node correspond to the entries of this menu (which can again be menus). All
4684 * different dialogs are managed by a dialog handler, which, in particular, is responsible for executing the dialog
4685 * corresponding to the user's command in the shell. The concept of a dialog handler is different to that
4686 * of a constraint handler, which is used to manage objects of the same structure, see \ref CONS. In particular, SCIP
4687 * features only one dialog handler (dialog_default.h), whereas there may exist different constraint handlers.
4692 * We give the explanation for creating your own source file for each additional dialog. Of course, you can collect
4693 * different dialogs in one source file. Take src/scip/dialog_default.c, where all default dialog plugins are collected, as an
4695 * As all other default plugins, the default dialog plugin and the template dialog are written in C. C++ users can easily
4696 * adapt the code by using the scip::ObjDialog wrapper base class and implement the scip_...() virtual methods instead of the
4699 * Additional documentation for the callback methods of a dialog can be found in the file type_dialog.h.
4702 * -# Copy the template files src/scip/dialog_xyz.c and src/scip/dialog_xyz.h into files named "dialog_mydialog.c"
4705 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4706 * -# Use SCIPincludeDialogMydialog() in order to include the dialog handler into your SCIP instance,
4713 * -# Implement the \ref DIALOG_ADDITIONALCALLBACKS "additional callback methods". This is optional.
4720 * In the C++ wrapper class, you have to provide the dialog properties by calling the constructor
4725 * In the interactive shell, this name appears as the command name of the dialog in the parent dialog.
4726 * Additionally, if you are searching an entry in a menu with SCIPdialogFindEntry(), this name is looked up.
4727 * Names within one menu have to be unique: no two dialogs in the same menu may have the same name.
4730 * This string is printed as a description of the dialog in the interactive shell if the additional
4734 * This parameter states whether the dialog is a menu in the interactive shell, i.e., is the parent of further
4740 * Below the header "Data structures" you can find a struct which is called "struct SCIP_DialogData".
4749 * At the bottom of "dialog_mydialog.c" you can find the interface method SCIPincludeDialogMydialog(), which also appears
4753 * It is responsible for notifying SCIP of the presence of the dialog, which can be done by the following lines of code:
4757 * SCIP_CALL( SCIPcreateDialog(scip, &dialog, dialogExecMydialog, dialogDescMydialog, dialogFreeMydialog,
4765 * Here "parentdialog" has to be an existing dialog which is defined to be a menu (see DIALOG_ISSUBMENU), e.g.,
4768 * The interface method is called by the user, if (s)he wants to include the dialog, i.e., if (s)he wants to use the dialog in
4772 * default dialogs plugin</b>, i.e., the SCIPincludeDialogMydialog() call has to occur after the
4773 * SCIPincludeDialogDefault() call. The SCIPincludeDialogDefault() method is called from within the SCIPincludeDefaultPlugins()
4774 * method. Therefore, it suffices to include your dialog plugins after you have called SCIPincludeDefaultPlugins().
4799 * Consider the following example. The user wants to add a "drawgraph" command to the root menu of SCIP.
4800 * (S)he copies the "dialog_xyz.c" and "dialog_xyz.h" files into files "dialog_drawgraph.c" and "dialog_drawgraph.h", respectively.
4801 * Then, (s)he puts the following code into the SCIPincludeDialogDrawgraph() method, compare SCIPincludeDialogDefault() in
4830 * Using this code, it is even possible to call SCIPincludeDialogDrawgraph() before including the default dialog plugins,
4831 * and you can also call it multiple times without causing inconsistencies in the dialog structure.
4838 * In the C++ wrapper class scip::ObjDialog, the scip_exec() method (which corresponds to the \ref DIALOGEXEC callback) is a virtual
4846 * The DIALOGEXEC method is invoked, if the user selected the dialog's command name in the parent's menu. It should
4847 * execute what is stated in DIALOG_DESC, e.g., the display constraint handlers dialog should display information about
4850 * For typical methods called by the execution method, have a look at src/scip/dialog_default.c.
4852 * The callback has to return which dialog should be processed next. This can be, for example, the root dialog
4853 * (SCIPdialoghdlrGetRoot()), the parent dialog (SCIPdialogGetParent()) or NULL, which stands for closing the interactive
4864 * If you are using dialog data, you have to implement this method in order to free the dialog data.
4889 * This method is called when the help menu of the parent is displayed. It should output (usually a single line of)
4892 * If this callback is not implemented, the description string of the dialog (DIALOG_DESC) is displayed instead.
4896 * The DIALOGCOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
4897 * callback as <code>NULL</code> the user disables the execution of this dialog for all copied SCIP instances. In
4898 * general there is no need to copy any dialog since it is most unlikely to start the interactive shell of the copied
4903 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
4906 * While solving a constraint integer program, SCIP displays status information in a column-like fashion. The current
4907 * number of processed branching tree nodes, the solving time, and the relative gap between primal and dual bound are
4908 * examples of such display columns. There already exists a wide variety of display columns which can be activated or
4909 * deactivated on demand, see src/scip/disp_default.c. Additionally, the user can implement his/her own display columns
4915 * We give the explanation for creating your own source file for each additional display column. Of course, you can collect
4917 * Take src/scip/disp_default.c, where all default display columns are collected, as an example.
4918 * As all other default plugins, the default display column plugins and the display column template are written in C.
4919 * C++ users can easily adapt the code by using the scip::ObjDisp wrapper base class and implement the scip_...() virtual methods
4923 * Additional documentation for the callback methods of a display column can be found in the file type_disp.h.
4925 * Here is what you have to do to implement a display column (assuming your display column is named "mydisplaycolumn"):
4926 * -# Copy the template files src/scip/disp_xyz.c and src/scip/disp_xyz.h into files named "disp_mydisplaycolumn.c"
4929 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
4930 * -# Use SCIPincludeDispMydisplaycolumn() in order to include the display column into your SCIP instance,
4932 * -# Open the new files with a text editor and replace all occurrences of "xyz" by "mydisplaycolumn".
4937 * -# Implement the \ref DISP_ADDITIONALCALLBACKS "additional callback methods". This is optional.
4942 * At the top of the new file "disp_mydisplaycolumn.c" you can find the display column properties.
4944 * In the C++ wrapper class, you have to provide the display column properties by calling the constructor
4950 * Additionally, if you are searching for a display column with SCIPfindDisp(), this name is looked up.
4957 * This string is printed as the header of the display column in the status information display.
4960 * This parameter defines the width (number of characters) of the display column. The value of the parameter has to be
4964 * The total width of status information lines is bounded by the parameter "display width". The display columns actually contained
4965 * in the status information display are selected in decreasing order of their priority. Furthermore, the user can force
4966 * columns to be displayed or not to be displayed in the status information display. For that, (s)he has to switch the value
4967 * of the display column's parameter "active" from "auto" (its default value) to "on" or "off", respectively.
4970 * In the status information display, the display columns are arranged from left to right in increasing order of their
4973 * \par DISP_STRIPLINE: the default for whether the display column should be separated with a line from its right neighbor.
4974 * This parameter states whether the display column should be separated with the string "|" from its right neighbor. In so
4979 * Below the header "Data structures" you can find a struct which is called "struct SCIP_DispData".
4980 * In this data structure, you can store the data of your display column. For example, you should store the adjustable
4982 * If you are using C++, you can add display column data as usual as object variables to your class.
4989 * At the bottom of "disp_mydisplaycolumn.c" you can find the interface method SCIPincludeDispMydisplaycolumn(), which also
4993 * It is responsible for notifying SCIP of the presence of the display column by calling the method
4996 * The interface method is called by the user, if (s)he wants to include the display column, i.e., if (s)he wants to use the display column in his
4999 * If you are using display column data, you have to allocate the memory for the data at this point.
5006 * Although this is very uncommon, you may also add user parameters for your display column, see the method
5007 * SCIPincludeConshdlrKnapsack() in the \ref cons_knapsack.h "knapsack constraint handler" for an example.
5012 * Display column plugins have only one fundamental callback method, namely the \ref DISPOUTPUT method.
5013 * This method has to be implemented for every display column; the other callback methods are optional.
5014 * In the C++ wrapper class scip::ObjDisp, the scip_output() method (which corresponds to the \ref DISPOUTPUT callback) is a virtual
5016 * You have to implement it in order to be able to construct an object of your display column class.
5022 * The DISPOUTPUT callback is called after each pricing loop during node processing and after a node has been processed.
5023 * In addition, at the root node, the callback is executed after each iteration of the price-and-cut loop.
5024 * It should write the display column information for the current node to a given output file stream.
5026 * Typical methods called by a display column are, for example, SCIPdispLongint(), SCIPdispInt(), SCIPdispTime(), and
5037 * The DISPCOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this callback
5038 * as <code>NULL</code> the user disables the execution of the specified column. In general it is probably not needed to
5039 * implement that callback since the output of the copied instance is usually suppressed. In the other case or for
5045 * If you are using display column data, you have to implement this method in order to free the display column data.
5063 * If you have allocated memory for fields in your display column data, remember to free this memory
5076 * In this method, the display column should free all resources that have been allocated for the solving process in
5081 * The DISPINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
5082 * begin. The display column may use this call to initialize its branch-and-bound specific data.
5086 * The DISPEXITSOL callback is executed before the branch-and-bound process is freed. The display column should use this
5090 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5093 * While solving a constraint integer program, SCIP drops thousands of events such as SCIP_EVENTTYPE_VARFIXED (a
5094 * complete list of all events is given in type_event.h). These events can be caught and used to do something after a
5095 * certain event happens. Events can be used to speed up the solution process. For example, the set partitioning
5096 * constraint is only worth propagating if one of the involved variables is fixed. This can be detected by
5097 * catching the event SCIP_EVENTTYPE_VARFIXED. To be able to catch an event it is necessary to write an event handler
5100 * We now explain how users can add their own event handlers. We give the explanation for creating your own
5101 * source file for each additional event handler. Of course, you can collect different event handlers in one source file
5102 * or you can put the event handler directly into the constraint handler. In a \ref EVENTUSAGE "second step" we discuss
5103 * the usage of an event handler. This means how to catch and drop events. \ref EVENTTYPES "Finally", we give some notes on the existing
5106 * Take src/scip/cons_logior.c, where the event handler is directly included into the constraint handler. As all other
5107 * default plugins, the event handlers are written in C. C++ users can easily adapt the code by using the scip::ObjEventhdlr
5108 * wrapper base class and implement the scip_...() virtual methods instead of the SCIP_DECL_EVENT... callback methods.
5110 * Additional documentation for the callback methods of an event handler can be found in the file type_event.h. There is
5111 * also an example written in C which deals with an event handler. You find this example in the directory
5112 * "examples/Eventhdlr/". An C++ example can be found within the TSP project (examples/TSP/src/EventhdlrNewSol.cpp).
5114 * Here is what you have to do to implement an event handler (assuming your event handler is named "bestsol"):
5115 * -# Copy the template files src/scip/event_xyz.c and src/scip/event_xyz.h into files named "event_bestsol.c"
5118 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
5119 * -# Use SCIPincludeEventBestsol() in order to include the event handler into your SCIP instance,
5125 * -# Implement the \ref EVENT_ADDITIONALCALLBACKS "additional callback methods". This is optional.
5132 * In the C++ wrapper class, you have to provide the event handler properties by calling the constructor
5137 * This name has to be unique with respect to all other event handlers. If you are searching for an event handler with
5145 * Below the header "Data structures" you can find a struct which is called "struct SCIP_EventhdlrData".
5146 * In this data structure, you can store the data of your event handler. For example, you should store the adjustable
5148 * If you are using C++, you can add event handler data as usual as object variables to your class.
5155 * At the bottom of "event_bestsol.c", you can find the interface method SCIPincludeEventBestsol(),
5157 * SCIPincludeEventBestsol() is called by the user, if (s)he wants to include the event handler,
5161 * It is responsible for notifying SCIP of the presence of the event handler. For this, you can either call
5163 * or SCIPincludeEventhdlrBasic() since SCIP version 3.0. In the latter variant, \ref EVENT_ADDITIONALCALLBACKS "additional callbacks"
5164 * must be added via setter functions as, e.g., SCIPsetReaderCopy(). We recommend this latter variant because
5165 * it is more stable towards future SCIP versions which might have more callbacks, whereas source code using the first
5166 * variant must be manually adjusted with every SCIP release containing new callbacks for event handlers in order to compile.
5168 * If you are using event handler data, you have to allocate the memory for the data at this point.
5175 * Although this is very uncommon, you may also add user parameters for your event handler, see the method
5176 * SCIPincludeConshdlrKnapsack() in the \ref cons_knapsack.h "knapsack constraint handler" for an example.
5181 * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
5183 * They are passed together with the event handler itself to SCIP using SCIPincludeEventhdlr() or SCIPincludeEventhdlrBasic(),
5187 * Event handler plugins have only one fundamental callback method, namely the \ref EVENTEXEC method. This method has
5188 * to be implemented for every event handler; the other callback methods are optional. In the C++ wrapper class
5189 * scip::ObjEventhdlr, the scip_exec() method (which corresponds to the \ref EVENTEXEC callback) is a virtual abstract member
5190 * function. You have to implement it in order to be able to construct an object of your event handler class.
5196 * The EVENTEXEC callback is called after the requested event happened. Then the event handler can do some action in
5199 * Typical the execution method sets a parameter to TRUE to indicate later in solving process that something happened
5200 * which should be analyzed further. In the \ref cons_knapsack.h "knapsack constraint handler" you find such a typical
5205 * The additional callback methods do not need to be implemented in every case. However, some of them have to be
5206 * implemented for most applications, they can be used, for example, to initialize and free private data.
5207 * Additional callbacks can either be passed directly with SCIPincludeEventhdlr() to SCIP or via specific
5208 * <b>setter functions</b> after a call of SCIPincludeEventhdlrBasic(), see also @ref EVENT_INTERFACE.
5212 * The EVENTCOPY callback is executed when a SCIP instance is copied, e.g. to solve a sub-SCIP. By defining this
5213 * callback as <code>NULL</code> the user disables the execution of the specified event handler for all copied SCIP
5214 * instances. Note that in most cases the event handler in the copied instance will be initialize by those objects (such
5215 * as constraint handlers or propagators) which need this event handler (see \ref cons_knapsack.h). In these cases the copy
5217 * (SCIP_EVENTTYPE_BESTSOLFOUND), you might want to implement that callback. The event handler example which you find
5237 * If you are using event handler data, you have to implement this method in order to free the event handler data.
5255 * If you have allocated memory for fields in your event handler data, remember to free this memory
5269 * In this method, the event handler should free all resources that have been allocated for the solving process in
5274 * The EVENTINITSOL callback is executed when the presolving is finished and the branch-and-bound process is about to
5279 * The EVENTEXITSOL callback is executed before the branch-and-bound process is freed. The event handler should use this
5284 * After you have implemented the event handler, you have to tell SCIP for which events this event handler should be
5285 * used. This can be a general events, such as <code>SCIP_EVENTTYPE_BESTSOLFOUND</code>, or a variable event which is the most common
5288 * In case of a general (not variable) event you use the function SCIPcatchEvent() to attach to an event and
5299 * If you want trigger some variable event, you use the method SCIPcatchVarEvent() to attach the variable event and
5312 * All available events are listed in type_event.h. There are atomic events such as <code>SCIP_EVENTTYPE_VARFIXED</code>
5313 * and combined events such as <code>SCIP_EVENTTYPE_VARCHANGED</code>. The events are encoded via bit masks. Each atomic
5316 * SCIP only throws atomic events. However, an event handler might be interested in bunch of events. Through the
5317 * underlying bit masks it is possible to combine the atomic events. For example, <code>SCIP_EVENTTYPE_VARCHANGED</code>
5318 * is an event which combines the events <code>SCIP_EVENTTYPE_VARFIXED</code>, <code>SCIP_EVENTTYPE_VARUNLOCKED</code>,
5323 * #define SCIP_EVENTTYPE_VARCHANGED (SCIP_EVENTTYPE_VARFIXED | SCIP_EVENTTYPE_VARUNLOCKED | SCIP_EVENTTYPE_OBJCHANGED
5327 * Depending on the event type, the event offers different information. The methods which can be used to gain
5332 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5336 * It is used, e.g., to solve convex relaxations of the problem or to find locally optimal solutions of
5340 * While the NLPI itself corresponds to the solver interface, the NLPIPROBLEM corresponds to the
5342 * An NLP is specified as a set of indexed variables with variable bounds, an objective function,
5343 * and a set of constraints, where each constraint is specified as a function which is restricted to lie
5346 * The linear and quadratic parts are specified via variable indices and coefficients, while the
5348 * That is, the user of the NLPI does not provide function evaluation callbacks but an algebraic representation of the NLP.
5349 * Interfaces for solvers that require function evaluations can make use of the NLPIORACLE, which
5350 * provides a set of methods to compute functions values, gradients, Jacobians, and Hessians for a given NLP.
5358 * Additional documentation for the callback methods of an NLPI, in particular for their input parameters,
5362 * -# Copy the template files src/nlpi/nlpi_xyz.c and src/nlpi/nlpi_xyz.h into files named "nlpi_mynlpi.c"
5365 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
5393 * solvers that provide fast algorithms that are usually successful on a wide range of problems should have a high priority.
5394 * An easy way to list the priorities of all NLPIs is to type "display nlpis" in the interactive shell of SCIP.
5398 * Below the header "Data structures" you can find structs which are called "struct SCIP_NlpiData" and "struct SCIP_NlpiProblem".
5399 * In this data structure, you can store the data of your solver interface and of a specific NLP problem.
5400 * For example, you could store a pointer to the block memory data structure in the SCIP_NlpiData data structure
5405 * At the bottom of "nlpi_mynlpi.c", you can find the interface method SCIPcreateNlpSolverXyz(),
5409 * It is responsible for creating an NLPI that contains all properties and callback methods of your
5411 * SCIPcreateNlpSolverXyz() is called by the user (e.g., SCIP), if (s)he wants to use this solver interface in his/her application.
5424 * The fundamental callback methods of the plugins are the ones that have to be implemented in order to obtain
5432 * The NLPICOPY callback is executed if the plugin should be copied, e.g., when a SCIP instance is copied.
5436 * The NLPIFREE callback is executed if the NLP solver interface data structure should be freed, e.g., when a SCIP instance is freed.
5440 * The NLPIGETSOLVERPOINTER callback can be used to pass a pointer to a solver specific data structure to the user.
5445 * The callback method should initialize a SCIP_NlpiProblem struct here that corresponds to an empty NLP.
5454 * The NLPIGETPROBLEMPOINTER callback can be used to pass a pointer to a solver specific data structure of the NLP to the user.
5458 * The NLPIADDVARS callback is executed if a set of variables with lower and upper bounds and names should be added to a particular NLP.
5459 * The callback method must add the new variables behind the previously added variables, if any.
5460 * If NULL is given for the lower bounds arguments, -infinity is assumed as lower bound for each new variable.
5461 * If NULL is given for the upper bounds arguments, +infinity is assumed as upper bound for each new variable.
5466 * The NLPIADDCONSTRAINTS callback is executed if a set of constraints should be added to a particular NLP.
5467 * Constraints are specified by providing left and right hand sides, linear and quadratic coefficients, expression trees, and constraint names.
5468 * All of these arguments are optional, giving NULL for left hand sides corresponds to -infinity, giving NULL for right hand sides corresponds to +infinity.
5476 * The NLPICHGVARBOUNDS callback is executed to change the bounds on a set of variables of an NLP.
5480 * The NLPICHGCONSSIDES callback is executed to change the sides on a set of constraints of an NLP.
5485 * The caller provides an array in which for each variable it is marked whether it should be deleted.
5486 * In the same array, the method should return the new position of each variable in the NLP, or -1 if it was deleted.
5491 * The caller provides an array in which for each constraint it is marked whether it should be deleted.
5492 * In the same array, the method should return the new position of each constraint in the NLP, or -1 if it was deleted.
5496 * The NLPICHGLINEARCOEFS callback is executed to change the coefficients in the linear part of the objective function or a constraint of an NLP.
5500 * The NLPICHGQUADCOEFS callback is executed to change the coefficients in the quadratic part of the objective function or a constraint of an NLP.
5504 * The NLPICHGEXPRTREE callback is executed to replace the expression tree of the objective function or a constraint of an NLP.
5508 * The NLPICHGNONLINCOEF callback is executed to change a single parameter in the (parametrized) expression tree of the objective function or a constraint of an NLP.
5512 * The NLPICHGOBJCONSTANT callback is executed to change the constant offset of the objective function of an NLP.
5516 * The NLPISETINITIALGUESS callback is executed to provide primal and dual initial values for the variables and constraints of an NLP.
5518 * It is possible to pass a NULL pointer for any of the arguments (primal values of variables, dual values of variable bounds, dual values of constraints).
5519 * In this case, the solver should clear previously set starting values and setup its own starting point.
5530 * The NLPIGETSOLSTAT callback can be used to request the solution status (solved, infeasible, ...) after an NLP has been solved.
5534 * The NLPIGETTERMSTAT callback can be used to request the termination reason (normal, iteration limit, ...) after an NLP has been solved.
5538 * The NLPIGETSOLUTION callback can be used to request the primal and dual solution values after an NLP solve.
5540 * It is possible to return only primal values for the variables, but no values for the dual variables, e.g., if a solver does not compute such values.
5544 * The NLPIGETSTATISTICS callback can be used to request the statistical values (number of iterations, time, ...) after an NLP solve.
5548 since they are currently not used, not implemented, and likely to change with a next version. -->
5552 * The NLPIGETINTPAR callback can be used to request the value of an integer valued NLP parameter.
5568 * The NLPIGETSTRINGPAR callback can be used to request the value of a string valued NLP parameter.
5575 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5578 * An expression interpreter is a tool to compute point-wise and interval-wise the function values, gradients, and
5580 * It is used, e.g., by an NLP solver interface to compute Jacobians and Hessians for the solver.
5582 * The expression interpreter interface in SCIP has been implemented similar to those of the LP solver interface (LPI).
5584 * The expression interpreter API has been designed such that it can be used independently from SCIP.
5586 * A complete list of all expression interpreters contained in this release can be found \ref EXPRINTS "here".
5592 * Additional documentation for the callback methods of an expression interpreter, in particular for their input parameters,
5595 * Note that the expression interpreter API has <b>BETA status</b> and thus may change in the next version.
5598 * -# Copy the file \ref exprinterpret_none.c into a file named "exprinterpreti_myexprinterpret.c".
5600 * Make sure to adjust your Makefile such that these files are compiled and linked to your project.
5614 * In your "exprinterpret_myexprinterpret.c", these methods are mostly dummy methods that return error codes.
5622 * The SCIPexprintGetDesc method should return a short description of the expression interpreter, e.g., the name of the developer of the code.
5626 * The SCIPexprintGetCapability method should return a bitmask that indicates the capabilities of the expression interpreter,
5641 * The SCIPexprintCompile method is called to initialize the data structures that are required to evaluate
5643 * The expression interpreter can store data that is particular to a given expression tree in the tree by using
5653 * The SCIPexprintNewParametrization method is called when the values of the parameters in a parametrized expression tree have changed.
5657 * The SCIPexprintEval method is called when the value of an expression represented by an expression tree should be computed for a point.
5661 * The SCIPexprintEvalInt method is called when an interval that contains the range of an expression represented by an expression tree with respect to intervals for the variables should be computed.
5665 * The SCIPexprintGrad method is called when the gradient of an expression represented by an expression tree should be computed for a point.
5669 * The SCIPexprintGradInt method is called when an interval vector that contains the range of the gradients of an expression represented by an expression tree with respect to intervals for the variables should be computed.
5673 * The SCIPexprintHessianSparsityDense method is called when the sparsity structure of the Hessian matrix should be computed and returned in dense form.
5677 * The SCIPexprintHessianDense method is called when the Hessian of an expression represented by an expression tree should be computed for a point.
5680 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5683 * Conflict analysis is a way to automatically use the information obtained from infeasible nodes
5686 * Once a node is declared infeasible, SCIP automatically tries to infer a constraint that explains the reason for the
5687 * infeasibility, in order to avoid similar situations later in the search. This explanation essentially consists of a
5688 * constraint stating that at least one of its variables should have a bound different from the current infeasible node,
5689 * because the current setting led to infeasibility. Clearly, all variables that are fixed in the current infeasible
5690 * node would yield such a constraint (since this leads to infeasibility). The key point rather is to infer a "small"
5691 * constraint that does the same job. SCIP handles this by several heuristics. For this, SCIP sets up a
5692 * so-called (directed) conflict graph. The nodes in this graph correspond to bound changes of variables and an arc (@a
5693 * u, @a v) means that the bound change corresponding to @a v is based on the bound change of @a u. In general, a node
5694 * will have several ingoing arcs which represent all bound changes that have been used to infer (propagate) the bound
5695 * change in question. The graph also contains source nodes for each bound that has been changed during branching and an
5696 * artificial target node representing the conflict, i.e., the infeasibility. Essentially, SCIP heuristically constructs
5697 * a cut in this graph that involves few "branching nodes". For details on the techniques that SCIP uses,
5705 * -# If one detects infeasibility, one should initiate conflict analysis, see \ref INITCONFS "below".
5709 * If this functionality is not implemented, SCIP will still work correctly, but cannot use the information of the constraint
5710 * handler or the propagator for conflict analysis. In this case, each bound reduction performed by the constraint
5717 * -# Inform SCIP about the variable bounds that are the reason for the detection of infeasibility
5719 * SCIPaddConflictBinvar(). If there is more than one valid explanation of infeasibility, either one can be used.
5721 * -# Call SCIPanalyzeConflict() from a propagator or SCIPanalyzeConflictCons() from a constraint
5728 * When propagating variable domains, SCIP needs to be informed that the deduced variable bounds should be
5730 * SCIPinferVarUbCons(), and SCIPinferBinvarCons() for constraint handlers and SCIPinferVarLbProp(),
5737 * Reverse Propagation is used to build up the conflict graph. Essentially, it provides an algorithm to detect the arcs
5738 * leading to a node in the conflict graph, i.e., the bound changes responsible for the new bound change deduced during
5739 * propagation. Reverse Propagation needs to be implemented in the RESPROP callback functions of
5741 * These callbacks receive the following information: the variable which is under investigation (@p
5742 * infervar), the corresponding bound change (@p bdchgidx, @p boundtype), and the integer (@p inferinfo) that has been
5745 * One can use SCIPvarGetUbAtIndex() or SCIPvarGetLbAtIndex() to detect the bounds before or after the propagation that
5746 * should be investigated. Then the bounds that were involved should be passed to SCIP via SCIPaddConflictLb() and
5747 * SCIPaddConflictUb(). If there is more than one valid explanation of infeasibility, either one can be used.
5757 * (see @p example/LOP directory). This constraint handler propagates the equations \f$x_{ij} + x_{ji} =
5760 * When propagating the equation and <code>vars[i][j]</code> is fixed to 1, the constraint handler uses
5762 * SCIP_CALL( SCIPinferBinvarCons(scip, vars[j][i], FALSE, cons, i*n + j, &infeasible, &tightened) );
5764 * Thus, variable <code>vars[j][i]</code> is fixed to 0 (@p FALSE), and it passes <code>i*n + j </code> as @p inferinfo.
5766 * When it propagates the triangle inequality and both <code>vars[i][j]</code> and <code>vars[j][k]</code>
5769 * SCIP_CALL( SCIPinferBinvarCons(scip, vars[k][i], FALSE, cons, n*n + i*n*n + j*n + k, &infeasible, &tightened) );
5771 * Thus, in this case, variable <code>vars[k][i]</code> is fixed to 0 and <code>n*n + i*n*n + j*n + k</code> is
5774 * In reverse propagation, the two cases can be distinguished by @p inferinfo: if it is less than @p n*n,
5775 * we deal with an equation, otherwise with a triangle inequality. The constraint handler can then extract the
5778 * In the first case, it has to distinguish whether <code>vars[i][j]</code> is fixed to 0 or 1 –
5780 * or SCIPaddConflictUb(), respectively, with variable <code>vars[j][i]</code>. In the second case, it is clear that the only
5781 * possible propagation is to fix <code>vars[i][j]</code> to 0 when both <code>vars[k][i]</code> and <code>vars[j][k]</code>
5786 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5789 * The reoptimization feature of SCIP can be used to solve a sequence of optimization problems \f$(P_{i})_{i \in I}\f$ with
5791 * (P_i) \quad \min \{ c_i^T x \;|\; A^ix \geq b^i,\; x_{j} \in \{0,1\}^{n}\;\forall j \in \mathcal{I} \}
5793 * such that between two problems \f$P_i\f$ and \f$P_{i+1}\f$ the space of solutions gets restricted and/or the objective
5794 * fuction changes. To use reoptimization the user has to change the parameter <code>reoptimization/enable</code> to
5795 * <code>TRUE</code> before the solving process of the first problem of the sequence starts, i.e., in stage
5796 * <code>SCIP_STAGE_INIT</code> or <code>SCIP_STAGE_PROBLEM</code>. This can be done via the interactive shell or by
5797 * calling SCIPenableReoptimization(). In both cases SCIP changes some parameters and fixes them:
5799 * -# set the limit <code>maxorigsol</code> of stored solutions to zero because this is handled by a special solution tree provided
5803 * -# disable dual reductions within presolvers and propagators (<code>misc/allowdualreds = FALSE</code>)
5806 * In contrast to the presolving and propagating methods that are using dual information, performing strong branching is
5807 * allowed. The bound tightenings resulting from strong branching are handeled in a special way. After changing the objective
5808 * function and solving the modified problem the feasible region that was pruned by strong branching will be reconstructed
5811 * If the reoptimization feature is enabled SCIP tries to reuse the search tree, especially the search frontier at the end
5812 * of the solving process, to speed up the solving process of the following problems. Therefore, the current release
5813 * provides the branching rule <code>branch_nodereopt</code> to reconstruct the tree. SCIP triggers a restart of the
5826 * Before SCIP discards all the stored information and solves the problem from scratch it tries to compress the search
5827 * tree. Therefore, the current release provides compression heuristics that try to find a good and much smaller
5830 * After a problem in the sequence of optimization problems was solved, the objective function can be changed in two ways:
5831 * -# Using the provided reader <code>reader_diff</code> the objective function can be changed via using the interactive
5837 * -# The objective function can be changed within the code. Therefore, the transformed problem needs to be freed by
5838 * calling SCIPfreeTransform(). Afterwards, the objective coefficient of each variable can be changed by calling
5843 * \note Currently, the reoptimization feature only supports pure binary and mixed binary programs. In case the original
5844 * problem containts integer and implicit integer variables, reoptimization will be automatically disabled if there are
5853 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5859 * reference counter to one. Capturing an object (e.g., by calling SCIPcaptureVar()) increases the reference counter,
5860 * releasing it (e.g., by calling SCIPreleaseVar()) decreases the counter. If the reference counter gets zero, the
5866 * When a data object is added to SCIP (e.g., by calling SCIPaddVar()) , it is captured again, such that a
5876 * the reference counter will be 1 afterwards, and the variable will be destroyed, if SCIP frees the problem.
5877 * If the user wants to use this variable, e.g. for extracting statistics after SCIP was finished, the user must not call
5881 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5903 * If this is the case, the user can define a method by the PARAMCHGD callback and use this method as
5904 * the @c paramchgd parameter of the @c SCIPaddXyzParam() method, also giving a pointer to the data, which is
5909 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5916 * SCIP provides an access to the standard C functions @c malloc and @c free with the additional feature of tracking
5917 * memory in debug mode. In this way, memory leaks can be easily detected. This feature is automatically activated in
5926 * SCIP offers its own block memory handling, which allows efficient handling of smaller blocks of memory in cases in
5927 * which many blocks of the same (small) size appear. This is adaquate for branch-and-cut codes in which small blocks
5928 * of the same size are allocated and freed very often (for data structures used to store rows or branch-and-bound
5929 * nodes). Actually, most blocks allocated within SCIP have small sizes like 8, 16, 30, 32, 64. The idea is simple:
5930 * There is a separate list of memory blocks for each interesting small size. When allocating memory, the list is
5931 * checked for a free spot in the list; if no such spot exists the list is enlarged. Freeing just sets the block to be
5932 * available. Very large blocks are handled separatedly. See the dissertation of Tobias Achterberg for more details.
5934 * One important comment is that freeing block memory requires the size of the block in order to find the right list.
5960 * In addition to block memory, SCIP offers buffer memory. This should be used if memory is locally
5961 * used within a function and freed within the same function. For this purpose, SCIP has a list of memory buffers
5962 * that are reused for this purpose. In this way, a very efficient allocation/freeing is possible.
5968 * SCIP 3.2 introduced a new type of buffer memory, the clean buffer. It provides memory which is initialized to zero
5969 * and requires the user to reset the memory to zero before freeing it. This can be used at performance-critical
5970 * places where only few nonzeros are added to a dense array and removing these nonzeros individually is much faster
5971 * than clearing the whole array. Same as the normal buffer array, the clean buffer should be used for temporary memory
5981 * - In debug mode the arguments are checked for overly large allocations (negative sizes are converted into very large values of type @c size_t).
5988 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
5993 * - Use <b>asserts</b> in your code to show preconditions for the parameters, invariants and postconditions.
5994 * Assertions are boolean expressions which inevitably have to evaluate to <code>TRUE</code>. Consider the
6011 * As you can see, both pointers and integers are checked for valid values at the beginning of the
6012 * function <code>consdataCatchEvent()</code>. This is particularly important for, e.g., array indices like
6013 * the variable <code>pos</code> in this example, where using the <code>consdata->nvars[pos]</code>
6015 * if the asserted precondition on <code>pos</code> were not matched and <pos> were an arbitrary index
6021 * \endcode and run the code. See \ref MAKE for further information about compiler options for SCIP.
6030 * at the top of SCIP files you want to analyze. This will output messages included in the code using
6032 * We recommend to also use <code>SCIPdebugMessage()</code> in your own code for being able to activate
6037 * - If available on your system, you can use software like <a href="http://valgrind.org">valgrind</a> to check for uninitialized
6042 * - If there are memory leaks for which you cannot detect the origin, you can remake your code with the option NOBLKBUFMEM=true
6043 * (do not forget to clean your code before with <code>make OPT=... LPS=... clean</code>). After that valgrind (or similar) helps
6045 * - If your code cuts off a feasible solution, but you do not know which component is responsible,
6046 * you can define <code>SCIP_DEBUG_SOLUTION</code> in the file <code>debug.h</code> to be a filename
6048 * This solution is then read and it is checked for every cut, whether the solution violates the cut.
6051 * For example, if we include a <code>\#define SCIP_DEBUG</code> at the top of \ref heur_oneopt.h, recompile SCIP
6055 * SCIP version 1.1.0 [precision: 8 byte] [memory: block] [mode: debug] [LP solver: SoPlex 1.4.0]
6064 * 0.1s| 1 | 0 | 132 | 257k| 0 | 14 | 30 | 13 | 13 | 30 | 51 | 39 | 0 | 0 | 3.026472e+03 | 3.347000e+03 | 10.59%
6069 * [src/scip/heur_oneopt.c:102] debug: lb:<-0> <= val:<1> <= ub:<1> and obj:<171> by at most: <1>
6070 * [src/scip/heur_oneopt.c:135] debug: -> The shift value had to be reduced to <0>, because of row <R122>.
6073 * [src/scip/heur_oneopt.c:383] debug: Only one shiftcand found, var <t_C167>, which is now shifted by<-1.0>
6074 * k 0.1s| 1 | 0 | 132 | 258k| 0 | 14 | 30 | 13 | 13 | 30 | 51 | 39 | 0 | 0 | 3.026472e+03 | 3.164000e+03 | 4.54%
6124 * <code>\#define SCIP_DEBUG_SOLUTION "check/p0033.sol"</code> in debug.h, recompile and run SCIP,
6139 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6149 * At first you should create a file listing all problem instances that should be part of the test.
6155 * e.g., <code>../../problems/instance1.lp</code> or absolute path, e.g., <code>/home/problems/instance2.mps</code>
6156 * in this file. Only one problem should be listed on every line (since the command <code>cat</code> is used to parse this file).
6160 * Optionally, you can provide a solution file in the <code>scip/check/testset/</code> directory containing
6161 * known information about the feasibility and the best known objective values for the test instances.
6162 * SCIP can use these values to verify the results. The file has to have the same basename as the
6163 * <code>.test</code>-file, i.e., in our case <code>testrun.solu</code>. One line can only contain
6170 * With these information types you can encode for an instance named <code>instance1.lp</code> the following
6197 * See the files <code>scip/check/testset/short.test</code> and <code>scip/check/testset/short.solu</code>
6210 * <code>test</code>-file (<code>testrun.test</code>). This will cause SCIP to solve our test instances
6216 * During computation, SCIP automatically creates the directory <code>scip/check/results/</code>
6225 * \arg <code>*.pav</code> - <a href="http://www.gamsworld.org/performance/paver/">PAVER</a> output
6227 * The last three files in the above list, i.e., the files containing a summary of the computational results,
6228 * can also be generated manually. Therefore the user has to call the <code>evalcheck.sh</code> script in the
6229 * @c check directory with the corresponding @c out file as argument. For example, this may be useful if the user stopped the
6230 * test before it was finished, in which case the last three files will not be automatically generated by SCIP.
6232 * The last column of the ASCII summary table contains the solver status. We distinguish the following statuses: (in order of priority)
6235 * \arg fail: solver cut off a known feasible solution (value of the <code>solu</code>-file is beyond the dual bound;
6239 * \arg solved: solver solved problem which has no (optimal) value in solu-file (since we here cannot detect the direction
6240 * of optimization, it is possible that a solver claims an optimal solution which contradicts a known feasible solution)
6241 * \arg better: solver found solution better than known best solution (or no solution was noted in the <code>solu</code>-file so far)
6242 * \arg gaplimit, sollimit: solver reached gaplimit or limit of number of solutions (at present: only in SCIP)
6246 * Additionally the <code>evalcheck.sh</code> script can generate a <code>solu</code>-file by calling
6250 * where <code><solu-file></code> denotes the filename of the new file where the solutions shall be
6257 * The output has two additional columns containing the solving time until the first and the best solution was found.
6267 * \arg <<code>test name</code>> indicates the name of the the test file, e.g., <code>testrun</code>
6268 * \arg <<code>binary</code>> defines the used binary, e.g., <code>scip-3.2.0.linux.x86_64.gnu.opt.spx</code>
6269 * \arg <<code>machine name</code>> tells the name of the machine, e.g., <code>mycomputer</code>
6270 * \arg <<code>setting name</code>> denotes the name of the used settings, e.g., <code>default</code>
6282 * It is possible to use customized settings files for the test run instead of testing SCIP with default settings.
6285 * @b Note: Several common user parameters such as, e.g., the time limit and node limit parameters,
6288 * for a list of available advanced testing options that have to be specified from the command line.
6290 * @b Note: Accessing settings files in subfolders of the @c settings directory is currently not supported.
6298 * in the SCIP root directory. It is possible to enter a list of settings files as a double-quoted,
6299 * comma-separated list of settings names as <code>fast</code> above, i.e. <code>SETTINGS="fast,medium,slow"</code>
6300 * will invoke the solution process for every instance with the three settings <code>fast.set, medium.set, slow.set</code>
6301 * before continuing with the next instance from the <code>.test</code>-file. This may come in handy if the
6307 * We can further customize the test run by specifying the following options in the <code>make</code> call:
6309 * \arg <code>CONTINUE</code> - continue the test run if it was previously aborted [default: "false"]
6312 * \arg <code>LOCK</code> - should the test run be locked to prevent other machines from performing the same test run [default: "false"]
6313 * \arg <code>MAXJOBS=n</code> - run tests on 'n' cores in parallel. Note that several instances are solved in parallel, but
6318 * \arg <code>SETCUTOFF</code> - if set to '1', an optimal solution value (from the <code>.solu</code>-file) is used as objective limit [default: 0]
6319 * \arg <code>THREADS</code> - the number of threads used for solving LPs, if the linked LP solver supports multithreading [default: 1]
6320 * \arg <code>VALGRIND</code> - run valgrind on the SCIP binary; errors and memory leaks found by valgrind are reported as fails [default: "false"]
6325 * Often test runs are performed on the basis of different settings. In this case, it is useful to
6326 * have a performance comparison. For this purpose, we can use the <code>allcmpres.sh</code> script in
6329 * Suppose, we performed our test run with two different settings, say <code>fast.set</code> and
6330 * <code>slow.set</code>. Assuming that all other parameters (including the SCIP binary), were the same,
6331 * we may have the following <code>res</code>-files in the directory <code>scip/check/results/</code>
6345 * in the @c check directory. This produces an ASCII table on the console that provide a detailed
6346 * performance comparison of both test runs. Note that the first <code>res</code>-file serves as reference
6348 * (The term "solver" can be considered as the combination of SCIP with a specific setting file.)
6353 * \arg <code>NodQ</code> - Equals Nodes(i) / Nodes(0), where 'i' denotes the current solver and '0' stands for the reference solver.
6358 * \arg <code>eval</code> - Number of instances evaluated (bounds check = "ok", i.e., solved to optimality
6359 * within the time and memory limit and result is correct). Only these instances are used in the calculation
6377 * \arg <code>gnodes</code> - Geometric mean of the processed nodes over all evaluated instances.
6378 * \arg <code>shnodes</code> - Shifted geometric mean of the processed nodes over all evaluated instances.
6382 * \arg <code>gtime</code> - Geometric mean of the computation time over all evaluated instances.
6383 * \arg <code>shtime</code> - Shifted geometric mean of the computation time over all evaluated instances.
6389 * \arg <code>optimal auto settings</code> - Theoretical result for a solver that performed 'best of all' for every instance.
6390 * \arg <code>diff</code> - Solvers with instances that differ from the reference solver in the number of
6392 * \arg <code>equal</code> - Solvers with instances whose number of processed nodes and total number of
6393 * simplex iterations is equal to the reference solver (including a 10% tolerance) and where no timeout
6398 * Since this large amount of information is not always needed, one can generate a narrower table by calling:
6409 * As in the evaluation, the output contains the two additional columns of the solving time until the first and the best solution was found.
6413 * The \c allcmpres script also performs two statistical tests for comparing different settings: For deciding whether
6414 * more feasible solutions have been found or more instances have been solved to optimality or not, we use a McNemar
6415 * test. For comparing the running time and number of nodes, we use a variant of the Wilcoxon signed rank test. A
6416 * detailed explanation can be found in the PhD thesis of Timo Berthold (Heuristic algorithms in global MINLP solvers).
6420 * Assume that we compare two settings \c S1 and \c S2 with respect to the number of instances solved to optimality
6421 * within the timelimit. The null hypothesis would be "Both settings lead to an equal number of instances being solved
6422 * to optimality", which we would like to disprove. Let \f$n_1\f$ be the number of instances solved by setting \c S1
6423 * but not by \c S2, and let \f$n_2\f$ be the number of instances solved by setting \c S2 but not by \c S1. The
6428 * Under the null hypothesis, \f$\chi^2\f$ is chi-squared distributed with one degree of freedom. This allows to compute
6429 * a \f$p\f$-value as the probability for obtaining a similar or even more extreme result under the null hypothesis.
6443 * In this case, the test with respect to the number of found feasible solutions is irrelevant, since their number is
6444 * equal. In particular, the null hypothesis gets accepted (i.e., there is no difference in the settings - this is
6447 * With respect to the number of instances solved to optimality within the timelimit, we have that \f$0.005 < p <=
6448 * 0.05\f$ (marked by <tt>p ~ (0.005, 0.05)</tt>). Thus, there is some evidence that the null hypothesis is false, i.e., the
6449 * settings perform differently; this is marked by "!". In the concrete case, we have 230 instances, all of which are
6454 * Assume that we compare two settings \c S1 and \c S2 with respect to their solution times (within the time limit). We
6455 * generate a sorted list of the ratios of the run times, where ratios that are (absolutely or relatively) within 1\%
6456 * of 1.0 are discarded, and ratios between 0.0 and 0.99 are replaced with their negative inverse in order to
6460 * and \c G2 depending on whether the ratios are smaller than -1.0 or larger than 1.0 (\c G1 contains the instances for which
6461 * setting \c S1 is faster). Then the sums of the ranks in groups \c G1 and \c G2 are computed, yielding values \c R1
6468 * which we assume to be (approximately) normally distributed (with zero mean) and allows to compute the probability
6469 * \f$p\f$ that one setting is faster than the other. (Note that for \f$N \leq 60\f$, we apply a correction by
6477 * While the \f$z\f$-value is close to zero for the run time, it is extremely negative regarding the solving nodes. This latter
6478 * tendency for the number of nodes is significant on a 0.05 % level, i.e., the probability \f$p\f$ that setting \c S1 uses more
6481 * However, the null hypothesis is not rejected with respect to the run time. In the concrete case, setting \c S1 has a
6482 * shifted geometric mean of its run times (over 230 instances) of 248.5, for \c S2 it is 217.6. This makes a ratio of
6487 * Analogously to the target <code>test</code> there are further targets to run automated tests with other MIP solvers.
6489 * \arg for <a href="http://www-01.ibm.com/software/integration/optimization/cplex-optimizer/">cplex</a>
6521 * For this target, the option GAMSSOLVER has to be given to specify the name of a GAMS solver to run, e.g. GAMSSOLVER=SCIP.
6526 * CONVERTSCIP to specify a SCIP which can be used to convert non-gams files into gams format (default: bin/scip, if existing; set to "no" to disable conversion).
6528 * A memory limit (MEM option) is only passed as workspace option to GAMS, but not enforced via ulimit (it's up to the solver to regard and obey the limit).
6537 * After the testrun there should be an <code>.out</code>, an <code>.err</code> and a <code>.res</code> file
6540 * Furthermore you can also use the script <code>allcmpres.sh</code> for comparing results of different solvers.
6544 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6551 * This does not influence the performance of SCIP, but the position of the parameter in the settings menu.
6553 * You should add the corresponding flag to the SCIP<datatype>Param() calls in your own source code.
6557 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6560 * - SCIPcreateChild() has a new last parameter giving an estimate for value of best feasible solution in the subtree to
6563 * - The callback \ref CONSCHECK in the constraint handlers now has a new parameter <code>printreason</code> that tells
6564 * a constraint handler to output the reason for a possible infeasibility of the solution to be checked using
6565 * SCIPinfoMessage(). Have a look at one of the constraint handlers implemented in SCIP to see how it works. This
6566 * methodology makes it possible to output the reason of a violation in human readable form, for instance, for the check
6567 * at the end of a SCIP run, where the obtained best solution is checked against the original formulation.\n This change
6568 * often has little effect on C-implementations, since this parameter can be safely ignored with respect to the
6569 * correctness of the code. The corresponding C++ method scip::ObjConshdlr::scip_check(), however, has to be extended
6572 * - SCIPcheckSolOrig() is restructured. The last two parameters have changed. They are now bools indicating
6573 * whether the reason for the violation should be printed to the standard output and whether all violations should be
6574 * printed. This reflects the changes in the constraint handlers above, which allow the automation of the feasibility
6577 * - New parameters "extension" and "genericnames" in SCIPprintTransProblem(), SCIPprintOrigProblem(),
6578 * SCIPwriteOrigProblem(), and SCIPwriteTransProblem() defining the requested format or NULL for default CIP format
6580 * - <code>SCIPprintTransProblem(scip, NULL, NULL, TRUE)</code> displays the transformed problem in CIP format with
6582 * - <code>SCIPprintOrigProblem(scip, NULL, "lp", FALSE)</code> displays the original problem in LP format with
6585 * - New callback method SCIP_DECL_READERWRITE(x) in type_reader.h; this method is called to write a problem to file
6586 * stream in the format the reader stands for; useful for writing the transformed problem in LP or MPS format. Hence,
6593 * - New parameter "extension" in SCIPreadProb(), defining a desired file format or NULL if file extension should be used.
6596 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6602 * - The callback SCIP_DECL_PRICERREDCOST(x) in the \ref PRICER "pricers" has two new parameters:
6603 * - A <code>result</code> pointer determines whether the pricer guarantees that there exist no more variables. This allows for early branching.
6606 * - The \ref CONS "constraint handlers" have two new callback methods (see type_cons.h for more details).
6612 * - SCIPcalcMIR() in scip.h has two new parameter "mksetcoefsvalid" and "sol". The parameter "mksetcoefsvalid" stores
6613 * whether the coefficients of the mixed knapsack set ("mksetcoefs") computed in SCIPlpCalcMIR() are valid. If the mixed knapsack constraint obtained after aggregating LP rows
6614 * is empty or contains too many nonzero elements the generation of the <b>c-MIR cut</b> is aborted in SCIPlpCalcMIR() and "mksetcoefs" is not valid.
6617 * - SCIPgetVarClosestVlb() and SCIPgetVarClosestVub() in scip.h have a new parameter "sol". It can be used to obtain the <b>closest variable bound</b> w.r.t. a solution different from the LP solution.
6627 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6637 * - All plugins, like \ref BRANCH "branching rules" and \ref HEUR "primal heuristics", have a new callback method (see, e.g.,
6643 * - Constraint handlers have two new callback methods. One for copying the constraint handler plugins
6644 * SCIP_DECL_CONSHDLRCOPY() and the other for copying a constraint itself, SCIP_DECL_CONSCOPY().
6648 * - SCIP_DECL_VARCOPY(x) - When copying a SCIP instance, this method is called to copy the variables' data.
6652 * - SCIP_DECL_PROBCOPY(x) - When copying a SCIP instance, this method is called to copy the problem's data.
6660 * - The \ref BRANCH "branching rules" have a second new callback method (see type_branch.h for more details):
6661 * - SCIP_DECL_BRANCHEXECEXT(x) - This method can be used to branch on external branching candidates,
6662 * which can be added by a user's "relaxation handler" or "constraint handler" plugin, calling <code>SCIPaddExternBranchCand()</code>.
6667 * - The callback SCIP_DECL_PROBEXITSOL(x) in the main problem has one new parameter (see type_prob.h for more details):
6668 * - The parameter <code>restart</code> is <code>TRUE</code> if the callback method was triggered by a restart.
6677 * - Every new callback method resulted in a new parameter of the include function for the corresponding plugin,
6678 * e.g., SCIPincludeBranchrule() has two new parameters <code>SCIP_DECL_BRANCHCOPY((*branchcopy))</code> and
6679 * <code>SCIP_DECL_BRANCHEXECREL((*branchexecrel))</code>. In the same fashion, the new callbacks
6680 * SCIP_DECL_VARCOPY and SCIP_DECL_PROBCOPY led to new parameters in SCIPcreateVar() and SCIPcreateProb() in
6683 * - SCIPincludeHeur() and SCIPincludeSepa() in \ref scip.h, as well as scip::ObjSepa() and scip::ObjHeur(), have a new parameter:
6684 * - <code>usessubscip</code> - It can be used to inform SCIP that the heuristic/separator to be included uses a secondary SCIP instance.
6686 * - SCIPapplyRens() in \ref heur_rens.h has a new parameter <code>uselprows</code>. It can be used to switch from LP rows
6690 * - W.r.t. to copy and the C++ wrapper classes there are two new classes. These are <code>ObjCloneable</code> and
6691 * <code>ObjProbCloneable</code>. The constraint handlers and variables pricers are derived from
6692 * <code>ObjProbCloneable</code> and all other plugin are derived from <code>ObjCloneable</code>. Both
6693 * classes implement the function <code>iscloneable()</code> which return whether a plugin is clone
6700 * - The method SCIPgetVarStrongbranch() has been replaced by two methods SCIPgetVarStrongbranchFrac() and
6703 * - The methods SCIPgetVarPseudocost() and SCIPgetVarPseudocostCurrentRun() in \ref scip.h now return the pseudocost value of
6704 * one branching direction, scaled to a unit interval. The former versions of SCIPgetVarPseudocost() and
6705 * SCIPgetVarPseudocostCurrentRun() are now called SCIPgetVarPseudocostVal() and SCIPgetVarPseudocostValCurrentRun(), respectively.
6708 * - The methods SCIPgetVarConflictScore() and SCIPgetVarConflictScoreCurrentRun() in \ref scip.h are now called
6711 * - The methods SCIPvarGetNInferences(), SCIPvarGetNInferencesCurrentRun(), SCIPvarGetNCutoffs(), and
6712 * SCIPvarGetNCutoffsCurrentRun() are now called SCIPvarGetInferenceSum(), SCIPvarGetInferenceSumCurrentRun(),
6713 * SCIPvarGetCutoffSum(), and SCIPvarGetCutoffSumCurrentRun(), respectively. Furthermore, they now return
6719 * - <code>maxmksetcoefs</code> - If the mixed knapsack constraint obtained after aggregating LP rows contains more
6720 * than <code>maxmksetcoefs</code> nonzero coefficients the generation of the <b>c-MIR cut</b> is aborted.
6721 * - <code>delta</code> - It can be used to obtain the scaling factor which leads to the best c-MIR cut found within
6722 * the cut generation heuristic. If a <code>NULL</code> pointer is passed, the corresponding c-MIR cut will already be
6723 * added to SCIP by SCIPcutGenerationHeuristicCmir(). Otherwise, the user can generate the cut and add it to SCIP
6725 * - <code>deltavalid</code> - In case, the user wants to know the best scaling factor, i.e., <code>delta</code> passed is not <code>NULL</code>,
6726 * <code>deltavalid</code> will be <code>TRUE</code> if the stored scaling factor <code>delta</code> will lead to a violated c-MIR cut.
6729 * - All functions for setting <b>user parameters</b> of different types like SCIPparamSetBool(), SCIPparamSetChar(),
6730 * SCIPparamSetInt(), SCIPparamSetLongint(), and SCIPparamSetString() in pub_paramset.h have a new parameter:
6736 * - The NLPI library is now a separate library that is required when linking against the SCIP library.
6737 * This requires changes to Makefiles that use SCIP, see the \ref RELEASENOTES "Release notes" for more details.
6739 * - We do not distinguish between <b>block memory</b> for the original and the transformed problem anymore. The same
6742 * - The usage of <b>strong branching</b> changed. Now, SCIPstartStrongbranch() and SCIPendStrongbranch() must be
6747 * - The <b>predefined setting files</b> like "settings/cuts/off.set,aggressive.set,fast.set" have been replaced by
6748 * interface methods like SCIPsetHeuristics(), SCIPsetPresolving(), SCIPsetSeparating(), and SCIPsetEmphasis() in
6765 /* - SCIP now has "lazy bounds", which are useful for column generation - see @ref PRICER_REMARKS "pricer remarks" for an explanation.
6767 * - SCIP has rudimentary support to solve quadratic nonlinear integer programs - see \ref cons_quadratic.h.
6771 * - SCIP can now handle indicator constraints (reading (from LP, ZIMPL), writing, solving, ...) - see \ref cons_indicator.h.
6778 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6787 * - The new parameters "nnewaddconss" and "naddconss" were added to the constraint handler callback method SCIP_DECL_CONSPRESOL()
6788 * and the presolver callback method SCIP_DECL_PRESOLEXEC(). These parameters were also added to corresponding C++ wrapper class methods.
6789 * - Propagators are now also called in during presolving, this is supported by the new callback methods SCIP_DECL_PROPINITPRE(),
6791 * - New parameters "isunbounded" and "isinfeasible" for presolving initialization (SCIP_DECL_CONSINITPRE(),
6792 * SCIP_DECL_PRESOLINITPRE(), SCIP_DECL_PROPINITPRE()) and presolving deinitialization (SCIP_DECL_CONSEXITPRE(),
6794 * constraint handlers and propagators, telling the callback whether the problem was already declared to be
6795 * unbounded or infeasible. This allows to avoid expensive steps in these methods in case the problem is already
6809 * are virtual functions. That means, if you are not adding the new parameters, your code will still compile, but these methods are not executed.
6815 * - The new constraint handler callback SCIP_DECL_CONSDELVARS() is called after variables were marked for deletion.
6816 * This method is optional and only of interest if you are using SCIP as a branch-and-price framework. That means,
6817 * you are generating new variables during the search. If you are not doing that just define the function pointer
6820 * If this method gets implemented you should iterate over all constraints of the constraint handler and delete all
6826 * - The method SCIPcopyProb() and the callback SCIP_DECL_PROBCOPY() got a new parameter "global" to indicate whether the global problem or a local version is copied.
6831 * - Added parameter "separate" to conflict handler callback method SCIP_DECL_CONFLICTEXEC() that defines whether the conflict constraint should be separated or not.
6836 * - The callbacks SCIP_DECL_NLPIGETSOLUTION() and SCIP_DECL_NLPISETINITIALGUESS() got new parameters to get/set values of dual variables.
6837 * - The callback SCIP_DECL_NLPICOPY() now passes the block memory of the target SCIP as an additional parameter.
6845 * - The methods SCIPwriteVarName(), SCIPwriteVarsList(), and SCIPwriteVarsLinearsum() got a new boolean parameter "type"
6847 * - The method SCIPwriteVarsList() got additionally a new parameter "delimiter" that defines the character which is used for delimitation.
6848 * - The methods SCIPparseVarName() and SCIPparseVarsList() got a new output parameter "endptr" that is filled with the position where the parsing stopped.
6853 * - SCIPincludeProp() got additional parameters to set the timing mask of the propagator and the new callbacks and parameters related to calling the propagator in presolving.
6854 * - SCIPincludeConshdlr() got additional parameters to set the variable deletion callback function and the timing mask for propagation.
6859 * - Method SCIPseparateRelaxedKnapsack() in knapsack constraint handler got new parameter "cutoff", which is a pointer to store whether a cutoff was found.
6860 * - Method SCIPincludeQuadconsUpgrade() of quadratic constraint handler got new parameter "active" to indicate whether the upgrading method is active by default.
6865 * - The methods SCIPexprtreeEvalSol(), SCIPexprtreeEvalIntLocalBounds(), and SCIPexprtreeEvalIntGlobalBounds() have been renamed to SCIPevalExprtreeSol(),
6866 * SCIPevalExprtreeLocalBounds(), and SCIPevalExprtreeGlobalBounds() and are now located in scip.h.
6867 * - Various types and functions dealing with polynomial expressions have been renamed to use the proper terms "monomial" and "polynomial".
6868 * - The methods SCIPnlpGetObjective(), SCIPnlpGetSolVals(), and SCIPnlpGetVarSolVal() have been removed, use SCIPgetNLPObjval(), SCIPvarGetNLPSol()
6870 * - Removed methods SCIPmarkRequireNLP() and SCIPisNLPRequired(), because the NLP is now always constructed if nonlinearities are present.
6871 * - SCIPgetNLP() has been removed and NLP-methods from pub_nlp.h have been moved to scip.h, which resulted in some renamings, too.
6872 * - The functions SCIPnlpiGetSolution() and SCIPnlpiSetInitialGuess() got additional arguments to get/set dual values.
6873 * - The method SCIPgetNLPI() got a new parameter "nlpiproblem", which is a pointer to store the NLP solver interface problem.
6878 * - SCIPgetVarCopy() got a new parameter "success" that will be FALSE if method is called after problem creation stage and no hash map is given or no image for
6880 * - Removed method SCIPreadSol(); call solution reading via SCIPreadProb() which calls the solution reader for .sol files.
6881 * - SCIPchgVarType() got an extra boolean parameter to store if infeasibility is recognized while upgrading a variable from continuous type to an integer type.
6882 * - SCIPdelVar() got a new parameter "deleted", which stores whether the variable was successfully marked to be deleted.
6883 * - SCIPcalcNodeselPriority() got a new parameter "branchdir", which defines the type of branching that was performed: upwards, downwards, or fixed.
6889 * - The result value SCIP_NEWROUND has been added, it allows a separator/constraint handler to start a new separation round
6893 * - The emphasis setting types now distinguish between plugin-type specific parameter settings (default, aggressive, fast, off), which are changed by
6894 * SCIPsetHeuristics/Presolving/Separating(), and global emphasis settings (default, cpsolver, easycip, feasibility, hardlp, optimality, counter),
6901 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
6910 * - Added parameter "relaxedbds" to conflict handler callback method SCIP_DECL_CONFLICTEXEC(). This array contains
6916 * - New optional callback methods in constraint handlers: SCIP_DECL_CONSGETVARS and SCIP_DECL_CONSGETNVARS.
6917 * These callbacks, if implemented, should return an array of all variables and the number of all variables used
6919 * - Added a propagation timing parameter "proptiming" to SCIP_DECL_CONSPROP(), giving the current timing at which
6921 * - Added a parameter 'restart' to the SCIP_DECL_CONSEXITSOL() callback method, indicating whether this call was
6923 * - Added a parameter 'relaxedbd' to SCIP_DECL_CONSRESPROP() callback method. If explaining a given bound change
6924 * (index), it is sufficient to explain the reason for reaching the 'relaxedbd' value, see above
6925 * - Removed parameters "isunbounded", "isinfeasible" and "result" from SCIP_DECL_CONSINITPRE() and
6926 * SCIP_DECL_CONSEXITPRE() callback methods. It is not allowed to determine unboundedness or infeasibility in
6932 * - New callback method SCIP_DECL_MESSAGEHDLRFREE() which is called when the message handler is freed.
6933 * - The old callback method SCIP_DECL_MESSAGEERROR() was replaced by the callback method SCIP_DECL_ERRORPRINTING().
6938 * - Removed parameters "isunbounded", "isinfeasible" and "result" from SCIP_DECL_PRESOLINITPRE() and
6939 * SCIP_DECL_PRESOLSEXITPRE(). It is not allowed to determine unboundedness or infeasibility in these
6947 * - Added a parameter 'restart' to SCIP_DECL_PROPEXITSOL() callback method, indicating whether this call was
6949 * - Added a parameter 'relaxedbd' to SCIP_DECL_PROPRESPROP() callback method. If explaining a given bound change
6951 * - Removed parameters "isunbounded", "isinfeasible" and "result" from SCIP_DECL_PROPINITPRE() and
6952 * SCIP_DECL_PROPEXITPRE() callback methods. It is not allowed to determined unboundedness or infeasibility in
6958 * - New NLPI callback SCIP_DECL_NLPISETMESSAGEHDLR() to set message handler in NLP solver interfaces.
6969 * optional callbacks. For example SCIPsetConshdlrParse(), SCIPsetPropCopy() or SCIPsetHeurInitsol().
6974 * - Added basic creation methods for all constraints types, e.g., SCIPcreateConsBasicLinear(); these methods should make the usage easier,
6976 * - New methods SCIPgetConsVars() and SCIPgetConsNVars() (corresponding callbacks need to be implemented, see above)
6981 * - Added basic creation methods SCIPcreateVarBasic() and SCIPcreateProbBasic() and setter functions
6982 * - Added method SCIPisPresolveFinished() which returns whether the presolving process would be stopped after the
6984 * - Forbid problem modifications in SCIP_STAGE_{INIT,EXIT}PRESOLVE (see pre-conditions for corresponding methods in scip.h).
6990 * SCIPvarGetWorstBoundLocal() and added new methods SCIPvarGetBestBoundGlobal() and SCIPvarGetWorstBoundGlobal().
6997 * - Changed the message handler system within SCIP heavily such that it is thread-safe. SCIPcreateMessagehdlr() in
6998 * scip.{c,h} was replaced by SCIPmessagehdlrCreate() in pub_message.h/message.c with a changed parameter list.
6999 * - Error messages (SCIPerrorMessage()) are not handled via the message handler anymore; per default the error
7005 * - New functions SCIPcreateEmptyRowCons(), SCIPcreateEmptyRowSepa(), SCIPcreateRowCons(), and SCIPcreateRowSepa()
7006 * that allow to set the originating constraint handler or separator of a row respectively; this is, for instance,
7007 * needed for statistics on the number of applied cuts. If rows are created outside a constraint handler or separator
7008 * use SCIPcreateRowUnspec() and SCIPcreateEmptyRowUnspec(). The use of SCIPcreateEmptyRow() and SCIPcreateRow() is
7010 * - New functions SCIProwGetOrigintype(), SCIProwGetOriginCons(), and SCIProwGetOriginSepa() to obtain the originator
7017 * - SoPlex LPI supports setting of SCIP_LPPAR_DUALFEASTOL when using SoPlex version 1.6.0.5 and higher.
7022 * - Renamed SCIPmarkNonlinearitiesPresent() to SCIPenableNLP() and SCIPhasNonlinearitiesPresent() to
7029 * - Changed the counting system within SCIP heavily. SPARSESOLUTION was renamed to SCIP_SPARSESOL. New method for
7032 * - Renamed SCIPgetCountedSparseSolutions() to SCIPgetCountedSparseSols() in cons_countsols.{c,h}.
7037 * - Replaced SCIPparamSet*() by SCIPchg*Param() (where * is either Bool, Int, Longint, Real, Char, or String).
7038 * - New parameter in SCIPcopy() and SCIPcopyPlugins() to indicate whether the message handler from the source SCIP
7039 * should be passed to the target SCIP (only the pointer is copied and the usage counter of the message handler is
7041 * - SCIPprintCons() does not print termination symbol ";\n" anymore; if wanted, use SCIPinfoMessage() to print
7044 * - The methods SCIPsortedvecInsert*() have an additional parameter which can be used to receive the position where
7049 * For further information we refer to the \ref RELEASENOTES "Release notes" and the \ref CHANGELOG "Changelog".
7052 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
7061 * - new possible return value "SCIP_DIDNOTFIND" for SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_BRANCHEXECPS(), and
7062 * SCIP_DECL_BRANCHEXECEXT() callbacks to state that the branching rule searched, but did not find a branching.
7067 * - added parameter "nmarkedconss" to SCIP_DECL_CONSPROP() callback which gives the number of constraints marked
7079 * - Added parameter "stopearly" to callback method SCIP_DECL_PRICERREDCOST(). This boolean pointer should be used
7080 * by the pricer to state whether early branching should be performed, even if new variables were added in the
7086 * - Added parameter "nodeinfeasible" to SCIP_DECL_HEUREXEC() callback which states whether the current subproblem
7087 * was already detected to be infeasible. In this case, the current LP solution might not respect local bounds,
7102 * - New method SCIPconshdlrGetStrongBranchPropTime() which returns the time used for domain propagation methods
7104 * - New method SCIPconsIsMarkedPropagate() which returns whether a constraint is marked for propagation.
7105 * - New methods SCIPconsAddUpgradeLocks() and SCIPconsGetNUpgradeLocks() to increase or get the number of upgrade
7111 * - New method SCIPpropGetStrongBranchPropTime() which returns the time spent by a domain propagator during strong
7113 * - New methods SCIPmarkConsPropagate() and SCIPunmarkConsPropagate to (un)mark a constraint for propagation.
7118 * - New methods SCIProwChgRank() and SCIProwGetRank() to change and get the rank of a cutting plane, respectively.
7119 * - Added parameter "sidetypes" to SCIPcalcMIR() to specify the specify row side type to be used.
7120 * - Added parameter "cutrank" to SCIPcalcMIR() and SCIPcalcStrongCG() which stores the rank of the returned cut.
7122 * - Added parameter "infeasible" to SCIPaddCut() which is a pointer to store whether the cut is infeasible for the
7125 * - New methods SCIPchgRowLhsDive() and SCIPchgRowRhsDive() to change left and right hand side of a row during diving.
7126 * - Added parameter "cutoff" to SCIPsolveDiveLP(), SCIPsolveProbingLP(), and SCIPsolveProbingLPWithPricing()
7127 * which is a pointer to store whether the diving/probing LP was infeasible or the objective limit was reached.
7149 * - New method SCIPgmlWriteNodeWeight() to write a node section including weight to a .gml graph file.
7150 * - New methods SCIPsparseSolGetFirstSol() and SCIPsparseSolGetNextSol() to get the first sparse solution
7152 * - New methods in pub_misc.h to handle a (circular) queue, e.g., SCIPqueueCreate(), SCIPqueueFree(),
7154 * - New methods for hash tables: SCIPhashtableRemoveAll(), SCIPhashtableGetNElements(), SCIPhashtableGetLoad()
7155 * - New methods in pub_misc.h to handle a resource activity, e.g., SCIPactivityCreate(), SCIPactivityFree(),
7157 * - New methods for digraphs: SCIPdigraphResize() to resize the graph and SCIPdigraphSetNodeDatas() and
7163 * - New method SCIPcopyOrig() to copy the original problem. Analoguosly, use SCIPcopyOrigProb(), SCIPcopyOrigVars(),
7164 * and SCIPcopyOrigConss() to copy original problem data, variables, or constraints, respectively.
7165 * - New method SCIPcopyImplicationsCliques() to copy implications and cliques to a copied SCIP instance.
7169 * - Added parameter "endptr" to SCIPparseVar() which stores the final string position after parsing.
7170 * - Added parameter "enablepropagation" to SCIPstartStrongbranch(), which can be used to enable strong branching
7172 * - New method SCIPgetVarStrongbranchWithPropagation() which performs strong branching with propagation on a variable.
7175 * - Added parameter "lazyconss" to SCIPwriteMIP() to swith writing removable rows as lazy constraints.
7176 * - New method SCIPcreateFiniteSolCopy() to create a copy of a solution with infinite fixings removed.
7177 * - New method SCIPadjustImplicitSolVals() which sets implicit integer variables to an integer value in the given
7179 * - New method SCIPprintDualSol() which prints the dual solution for a pure LP (works only with preprocessing disabled).
7181 * - New method SCIPgetFirstLPTime() and SCIPgetNRootFirstLPIterations() to return time and iterations for the first
7182 * LP solve and SCIPgetFirstLPDualboundRoot() and SCIPgetFirstLPLowerboundRoot() to return the first root LP dual and
7184 * - New method SCIPgetNLimSolsFound() returning the number of feasible primal solution respecting the objective limit.
7185 * - Added parameter "endline" to SCIPprintDisplayLine() to switch printing a newline symbol at the end of the line.
7193 * For further information we refer to the \ref RELEASENOTES "Release notes" and the \ref CHANGELOG "Changelog".
7196 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
7297 * For further information we refer to the \ref RELEASENOTES "Release notes" and the \ref CHANGELOG "Changelog".
7300 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
7303 * SCIP is capable of computing (count or enumerate) the number of feasible solutions of a given constraint integer
7304 * program. In case continuous variables are present, the number of feasible solutions for the projection to the
7305 * integral variables is counted/enumerated. This means, an assignment to the integer variables is counted if the
7306 * remaining problem (this is the one after fixing the integer variables w.r.t. to this assignment) is feasible.
7308 * As a first step you have to load or create your problem in the usual way. In case of using the
7313 * Afterwards you can count the number of feasible solution with the command <code>count</code>.
7317 * That means SCIP will count the number of solution but does not store (enumerate) them. If you are interested in that see
7320 * @note Since SCIP version 2.0.0 you do not have to worry about <tt>dual</tt> reductions anymore. These are
7321 * automatically turned off. The only thing you should switch off are restarts. These restarts can lead to a wrong
7322 * counting process. We recommend using the counting settings which can be set in the interactive shell as follows:
7326 * The SCIP callable library provides an interface method SCIPcount() which allows users to count the number of feasible
7327 * solutions to their problem. The method SCIPsetParamsCountsols(), which is also located in cons_countsols.h, loads the
7328 * predefined counting settings to ensure a safe count. The complete list of all methods that can be used for counting
7334 * It is possible to give a (soft) upper bound on the number solutions that should be counted. If this upper bound is
7335 * exceeded, SCIP will be stopped. The name of this parameter is <code>constraints/countsols/sollimit</code>. In
7340 * In case you are using the callable library, this upper bound can be assigned by calling SCIPsetLongintParam() as follows:
7347 * The reason why this upper bound is soft comes from the fact that, by default, SCIP uses a technique called unrestricted
7348 * subtree detection. Using this technique it is possible to detect several solutions at once. Therefore, it can happen
7353 * Per default SCIP only counts all feasible solutions. This means, these solutions are not stored. If you switch the
7354 * parameter <code>constraints/countsols/collect</code> to TRUE (the default value is FALSE) the detected solutions are
7365 * @note The solution which are collected are stored w.r.t. the active variables. These are the variables which got not
7368 * In case you are using the interactive shell you can write all collected solutions to a file as follows
7372 * In that case the sparse solutions are unrolled and lifted back into the original variable space.
7374 * The callable library provides a method which gives access to all collected sparse solutions. That is,
7375 * SCIPgetCountedSparseSolutions(). The sparse solutions you get are defined w.r.t. active variables. To get solutions
7379 * -# lift each solution into original variable space by extending the solution by those variable which got removed
7382 * The get the variables which got removed during presolving, you can use the methods SCIPgetFixedVars() and
7383 * SCIPgetNFixedVars(). The method SCIPgetProbvarLinearSum() transforms given variables, scalars and constant to the
7384 * corresponding active variables, scalars and constant. Using this method for a single variable gives a representation
7385 * for that variable w.r.t. the active variables which can be used to compute the value for the considered solution (which
7389 * \ref SCIP_DECL_DIALOGEXEC(SCIPdialogExecWriteAllsolutions) "SCIPdialogExecWriteAllsolutions()" cons_countsols.c which
7395 * If you are interested in counting the number of optimal solutions, this can be done with SCIP using the
7461 * This page lists headers containing methods provided by the core of SCIP that can be used via the
7462 * callable library. If you are in the <a href="../html">User's Manual</a> you only find methods that are
7463 * public and, therefore, allowed to be used. The <a href="../html_devel">Developer's Manual</a> includes
7466 * All of the headers listed below include functions that are allowed to be called by external users. Besides those
7467 * functions it is also valid to call methods that are listed in one of the headers of the (default) plugins, e.g.,
7470 * If you are looking for information about a particular object of SCIP, such as a variable or a constraint, you should
7471 * first search the corresponding "pub_<...>.h" header. E.g., for constraints, look in pub_cons.h. If you need some
7474 * Since there is a huge number of methods in scip.h, these methods are grouped into different categories. These
7517 * A detailed description what a branching rule does and how to add a branching rule to SCIP can be found
7524 * A detailed description what a constraint handler does and how to add a constraint handler to SCIP can be found
7536 * @brief This page contains a list of all displays (output columns) which are currently available.
7544 * @brief This page contains a list of all expression interpreter which are currently available.
7546 * A detailed description what a expression interpreter does and how to add a expression interpreter to SCIP can be found
7555 * The \ref SHELL "interactive shell" and the callable library are capable of reading/parsing several different file
7559 * <tr><td>\ref reader_cip.h "CIP format"</td> <td>for SCIP's constraint integer programming format</td></tr>
7560 * <tr><td>\ref reader_cnf.h "CNF format"</td> <td>DIMACS CNF (conjunctive normal form) file format used for example for SAT problems</td></tr>
7561 * <tr><td>\ref reader_diff.h "DIFF format"</td> <td>for reading a new objective function for mixed-integer programs</td></tr>
7562 * <tr><td>\ref reader_fzn.h "FZN format"</td> <td>FlatZinc is a low-level solver input language that is the target language for MiniZinc</td></tr>
7563 * <tr><td>\ref reader_gms.h "GMS format"</td> <td>for mixed-integer nonlinear programs (<a href="http://www.gams.com/docs/document.htm">GAMS</a>) [reading requires compilation with GAMS=true and a working GAMS system]</td></tr>
7564 * <tr><td>\ref reader_lp.h "LP format"</td> <td>for mixed-integer (quadratically constrained quadratic) programs (CPLEX)</td></tr>
7565 * <tr><td>\ref reader_mps.h "MPS format"</td> <td>for mixed-integer (quadratically constrained quadratic) programs</td></tr>
7566 * <tr><td>\ref reader_opb.h "OPB format"</td> <td>for pseudo-Boolean optimization instances</td></tr>
7567 * <tr><td>\ref reader_osil.h "OSiL format"</td> <td>for mixed-integer nonlinear programs</td></tr>
7568 * <tr><td>\ref reader_pip.h "PIP format"</td> <td>for <a href="http://polip.zib.de/pipformat.php">mixed-integer polynomial programming problems</a></td></tr>
7569 * <tr><td>\ref reader_sol.h "SOL format"</td> <td>for solutions; XML-format (read-only) or raw SCIP format</td></tr>
7570 * <tr><td>\ref reader_wbo.h "WBO format"</td> <td>for weighted pseudo-Boolean optimization instances</td></tr>
7571 * <tr><td>\ref reader_zpl.h "ZPL format"</td> <td>for <a href="http://zimpl.zib.de">ZIMPL</a> models, i.e., mixed-integer linear and nonlinear
7577 * A detailed description what a file reader does and how to add a file reader to SCIP can be found
7589 * A detailed description what a node selector does and how to add a node selector to SCIP can be found
7596 * A detailed description what a NLP solver interface does and how to add a NLP solver interface to SCIP can be found
7610 * Per default there exist no variable pricer. A detailed description what a variable pricer does and how to add a
7617 * A detailed description what a primal heuristic does and how to add a primal heuristic to SCIP can be found
7624 * A detailed description what a propagator does and how to add a propagator to SCIP can be found
7631 * Note that the linear programming relaxation is not implemented via the relaxation handler plugin. Per default there
7632 * exist no relaxation handler. A detailed description what a variable pricer does and how to add a A detailed
7633 * description what a relaxation handler does and how to add a relaxation handler to SCIP can be found \ref RELAX
|