New and changed callbacks
- Copying a SCIP instance:
- Branching on externally given candidates:
- 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.
- Branching:
- The method SCIPgetVarStrongbranch() has been replaced by two methods SCIPgetVarStrongbranchFrac() and SCIPgetVarStrongbranchInt().
- The methods SCIPgetVarPseudocost() and SCIPgetVarPseudocostCurrentRun() in scip.h now return the pseudocost value of one branching direction, scaled to a unit interval. The former versions of SCIPgetVarPseudocost() and SCIPgetVarPseudocostCurrentRun() are now called SCIPgetVarPseudocostVal() and SCIPgetVarPseudocostValCurrentRun(), respectively.
- The methods SCIPgetVarConflictScore() and SCIPgetVarConflictScoreCurrentRun() in scip.h are now called SCIPgetVarVSIDS() and SCIPgetVarVSIDSCurrentRun(), respectively.
- The methods SCIPvarGetNInferences(), SCIPvarGetNInferencesCurrentRun(), SCIPvarGetNCutoffs(), and SCIPvarGetNCutoffsCurrentRun() are now called SCIPvarGetInferenceSum(), SCIPvarGetInferenceSumCurrentRun(), SCIPvarGetCutoffSum(), and SCIPvarGetCutoffSumCurrentRun(), respectively. Furthermore, they now return
SCIP_Real instead of SCIP_Longint values.
- 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.
Miscellaneous
- 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.
- The usage of strong branching changed. Now, SCIPstartStrongbranch() and SCIPendStrongbranch() must be called before and after strong branching, respectively.
- 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}
or
SCIP> set emphasis {counter|cpsolver|easycip|feasibility|hardlp|optimality}
For further release notes we refer to the Release notes.