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.