Solving Constraint Integer Programs

Interface changes between SCIP 1.2 and SCIP 2.0

New and changed callbacks

  • Restarts:

    • The callback SCIP_DECL_PROBEXITSOL(x) in the main problem has one new parameter (see type_prob.h for more details):
      • The parameter restart is TRUE if the callback method was triggered by a restart.

Changed interface methods

  • Copying a SCIP instance:

    • Every new callback method resulted in a new parameter of the include function for the corresponding plugin, e.g., SCIPincludeBranchrule() has two new parameters SCIP_DECL_BRANCHCOPY((*branchcopy)) and SCIP_DECL_BRANCHEXECREL((*branchexecrel)). In the same fashion, the new callbacks SCIP_DECL_VARCOPY and SCIP_DECL_PROBCOPY led to new parameters in SCIPcreateVar() and SCIPcreateProb() in scip.c, respectively.

    • SCIPincludeHeur() and SCIPincludeSepa() in scip.h, as well as scip::ObjSepa() and scip::ObjHeur(), have a new parameter:
      • usessubscip - It can be used to inform SCIP that the heuristic/separator to be included uses a secondary SCIP instance.

    • SCIPapplyRens() in heur_rens.h has a new parameter uselprows. It can be used to switch from LP rows to constraints as basis of the sub-SCIP constructed in the RENS heuristic.

    • W.r.t. to copy and the C++ wrapper classes there are two new classes. These are ObjCloneable and ObjProbCloneable. The constraint handlers and variables pricers are derived from ObjProbCloneable and all other plugin are derived from ObjCloneable. Both classes implement the function iscloneable() which return whether a plugin is clone able or not. Besides that each class has a function named clone() which differ in their signature. See objcloneable.h, objprobcloneable.h, and the TSP example for more details.
  • Others:

    • SCIPcutGenerationHeuristicCmir() in sepa_cmir.h has three new parameters:
      • maxmksetcoefs - If the mixed knapsack constraint obtained after aggregating LP rows contains more than maxmksetcoefs nonzero coefficients the generation of the c-MIR cut is aborted.
      • delta - It can be used to obtain the scaling factor which leads to the best c-MIR cut found within the cut generation heuristic. If a NULL pointer is passed, the corresponding c-MIR cut will already be added to SCIP by SCIPcutGenerationHeuristicCmir(). Otherwise, the user can generate the cut and add it to SCIP on demand afterwards.
      • deltavalid - In case, the user wants to know the best scaling factor, i.e., delta passed is not NULL, deltavalid will be TRUE if the stored scaling factor delta will lead to a violated c-MIR cut.

    • All functions for setting user parameters of different types like SCIPparamSetBool(), SCIPparamSetChar(), SCIPparamSetInt(), SCIPparamSetLongint(), and SCIPparamSetString() in pub_paramset.h have a new parameter:
      • quiet - It prevents any output during the assign to a new value.


  • The NLPI library is now a separate library that is required when linking against the SCIP library. This requires changes to Makefiles that use SCIP, see the Release notes for more details.
  • We do not distinguish between block memory for the original and the transformed problem anymore. The same block memory is now used in both problem stages.
  • All C++ objects and constructors have a SCIP pointer, now.
  • The predefined setting files like "settings/cuts/off.set,aggressive.set,fast.set" have been replaced by interface methods like SCIPsetHeuristics(), SCIPsetPresolving(), SCIPsetSeparating(), and SCIPsetEmphasis() in scip.h and by user dialogs in the interactive shell like

    SCIP> set {heuristics|presolving|separating} emphasis {aggressive|fast|off}


    SCIP> set emphasis {counter|cpsolver|easycip|feasibility|hardlp|optimality}

For further release notes we refer to the Release notes.