SCIP executable handles the SIGTERM signal. If the process receives a SIGTERM, SCIP terminates the solution process with a new SCIP_STATUS code SCIP_STATUS_TERMINATE and displays all relevant statistics before exiting.
add number of conflict constraints found by diving heuristics to statistics
allow output of lower bounds for visualization
added symmetry detection for linking constraints
Performance improvements
disable disaggregation of quadratic constraints by changing the default for constraints/quadratic/maxdisaggrsize to 1 (disaggregation can still be very helpful on some instances, but also seems hurtful on others)
Cuts:
increased threshold when to scale up cuts that are generated by nonlinear constraint handlers
test additional scaling factors in CMIR cut generation heuristic
cleaned up implementation of the cut selection procedure and added new cut quality measure
fixed a check for fixed variables in Binpacking example
generate deprecation warnings when using SCIPaddCut
fix bug in sepa_gomory if cut is a bound change
fixed handling of infinite bounds in cons_sos1
Constraints:
fixed bug while scaling linear constraints
don't delete conflict constraints that were transformed into model constraints during a restart
fixed treatment of variable aggregations in knapsack constraint handler that led to wrong propagations
LP Interface:
fixed LPI status after changing objective in lpi_cpx, lpi_grb, lpi_xprs, lpi_msk
fixed and unified asserts in LPIs
retrieve interior solution instead of (possibly non-existing) basic solution from mosek after using barrier without crossover in lpi_msk
fixed bug with NULL pointer handling in LPIs
Heuristics:
fixed wrong cast in LP iteration limit computation in proximity search heuristic
fixed check for time limit in heur_nlpdiving
improved numerics and fixed stop criterion in zirounding heuristic
SCIP 5.0.0
Features
new numerical solution violations get printed when checksol is called
added analysis of the clique table which identifies possible aggregations via the search for strongly connected components and may detect infeasible assignments on the way
added macros to do computations with a higher precision by using double-double arithmetic
extended conflict analysis by analyzing dual solutions of boundexceeding LPs
revised internal debugging mechanism to check against a user given debug solution (debug.h)
Heuristic:
add new heuristic MPEC that solves a MPEC reformulation of a mixed-binary nonlinear problem by regularized NLP reformulations
new primal heuristic ALNS that orchestrates eight different LNS heuristics adaptively using algorithms for the multi-armed bandit problem
three bandit selection algorithms to face sequential decision problems under uncertainty
Presolving and symmetry:
added presol_symmetry.c for computing and storing symmetry information of a MIP
added presol_symbreak.c to detect special symmetry structures and to add symmetry handling constraints
SCIP can now automatically detect and compute symmetries in MIPs (if a graph automorphism code is linked in)
added cons_symresack.c to handle permutation symmetries in a binary programs via inequalities and propagation
added cons_orbisack.c to handle special permutation symmetries in a binary programs via inequalities and propagation
utilizing linear inequalities to compute stronger linearizations for bilinear terms; the inequalities are computed in the OBBT propagator
Cuts:
added API for aggregating rows for generating cuts which uses double-double arithmetic internally
added filtering of parallel cuts in the cut pool
Plugins:
added new plugin type table for adding user-defined statistics tables
new presolving plugin presol_sparsify that tries to cancel nonzero coefficients in linear constraints by adding multiples of linear equalities
Performance improvements
use disjoint set to reduce peak memory usage and time to compute of clique table connectedness information
add and use RESTRICT macro for some pointers
improved the implementation of SCIPvarGetActiveRepresentatives
speed-up reverse propagation
removed bestrelaxsol and directly access relaxation solution instead to decrease overhead when using relaxation handlers
for fast presolving emphasis, disable use of implications in logicor presolving
use limit on the total number of nonzeros added to the clique table during the greedyCliqueAlgorithm of cons_knapsack.c
revised disaggregation of quadratic constraints: the number of created constraints can now be controlled and the disaggregated constraints are scaled in order to increase numerical accuracy
disabled reformulation of products of a binary variable with a linear term that does not solely involve binary variables
speed up creation of LP in the computation of relative interior points
improved dual ray analysis
drop events of disabled linear constraints to reduce event processing effort
improved selection of rows in CMIR aggregation heuristic
generate lifted flowcover cuts in CMIR cut generation heuristic
faster implementation of CMIR cut generation heuristic
use LP solution polishing during probing and diving mode to activate it during many primal heuristics; remains disabled during strong branching and OBBT
improved versions of the clique and variable bound pre-root heuristics that are often able to fix many more variables
Interface changes
New and changed callbacks
New types:
added new abstract selection algorithm SCIP_BANDIT together with callbacks
added new types for symmetry handling
NLP interface:
dropped NLP termination status SCIP_NLPTERMSTAT_UOBJLIM
NLP callbacks:
added parameter objval to SCIP_DECL_NLPIGETSOLUTION for returning the optimal objective value (can be set to NULL)
Separation callbacks:
added parameter allowlocal to SCIP_DECL_SEPAEXECLP and SCIP_DECL_SEPAEXECSOL to switch generation of locally valid cuts
added parameter dstatssize to SCIP_DECL_NLPIDELVARSET and SCIP_DECL_NLPIDELCONSSET
removed SCIPvarGetCliqueComponentIdx(); the connectedness information of the clique table is now stored as a SCIP_DISJOINTSET member of the clique table and cannot be publicly accessed
methods to display linear constraint classification types; use SCIPclassifyConstraintTypesLinear() after reading a problem to classify linear constraint types
public methods SCIPvariableGraphBreadthFirst() and SCIPvariableGraph{Create,Free}() to perform breadth-first search on the variable constraint graph used by the GINS and ALNS heuristics
interface methods to create and use bandit algorithms implemented as SCIP core plugins
interface methods for aggregating rows and computating MIP cuts, see cuts.h
interface method SCIPsetRandomSeed() to (re)set a random number generator seed
Command line interface
new interactive shell functionality to display linear constraint classification types; use display linclass after reading a problem to classify linear constraint types
new command line parameter -r to pass a nonnegative integer as random seed.
Interfaces to external software
added interface to the NLP solver WORHP
added interface to the NLP solver FilterSQP
added interface to graph automorphism algorithms in src/symmetry/ (initially only to BLISS)
unify handling of objective limit in LPIs by replacing LPI parameters SCIP_LPPAR_LOBJLIM and SCIP_LPPAR_UOBJLIM by SCIP_LPPAR_OBJLIM
dropped support for MOSEK < 7.0.0.0
Changed parameters
changed and removed several parameters for zerohalf separator
replaced constraints/quadratic/disaggregate by constraints/quadratic/maxdisaggrsize to bound the total number of created constraints when disaggregating a quadratic constraint
new value 3 for parameter lp/solutionpolishing to enable LP polishing only during probing and diving mode
parameter conflict/useboundlp has new values d (only dual solution analysis) and b (both, conflict and dual solution analysis)
Heuristics:
fixed typo heuristics/completesol/maxunkownrate has changed to heuristics/completesol/maxunknownrate
replaced parameter heuristics/{clique,vbounds}/minfixingrate by heuristics/{clique,vbounds}/minintfixingrate and heuristics/{clique,vbounds}/minmipfixingrate, which check the fixing rate before LP solving and after sub-MIP presolve
Separating:
parameter separating/maxstallrounds only applies to nodes in the tree (not the root node, anymore); use the new parameter separating/maxstallroundsroot for the root node
moved parameters for flowcover and cmir separators to separating/aggregation
constraints/quadratic/disaggrmergemethod to change the strategy of how to merge independent blocks of quadratic constraints
constraints/quadratic/mincurvcollectbilinterms to change the minimal curvature of constraints to be considered when returning bilinear terms to other plugins
constraints/quadratic/binreformbinaryonly to disable reformulation of products of binary and non-binary variables
constraints/symresack/ppsymresack (check whether symresacks can be strengthend by packing/partitining constraints)
propagating/vbounds/minnewcliques to specify the minimum number of new cliques to trigger another clique table analysis
propagating/vbounds/{maxcliquesmedium,maxcliquesexhaustive} to limit the number of cliques relative to the number of binary variable for performing clique table analysis
separating/maxincrounds
separating/maxlocalbounddist, separating/maxcoefratio and separating/intsupportfac
if PaPILO >= 2.1: presolving/milp/maxbadgesizepar to limit the maximal badge size if PaPILO is called in parallel mode
if PaPILO >= 2.1: presolving/milp/maxbadgesizeseq to limit the maximal badge size if PaPILO is called in sequential mode
Data structures
new type SCIP_Shortbool (equal to uint8_t) for storing Boolean values in a more compact manner
new disjoint set data structure SCIP_DISJOINTSET to incrementally update connectedness information for a graph on nodes {0,...,n-1}
new red black tree data structure defined in src/scip/rbtree.{c,h}
added new type SCIP_TABLE together with callbacks to output SCIP statistics
Unit tests
added several tests for the LP interface
added tests that cover nonempty linear constraint classification types
added tests for the double double arithmetic, the new red black tree data structure, the nlpi, obbt, interval arithmetics, symmetry computation, objective function changes in probing, computing envelopes of bilinear function, relaxation enforcement
Build system
added interface to the NLP solver WORHP; set WORHP=true in order to link to WORHP
added interface to the NLP solver FilterSQP; set FILTERSQP=true in order to link to FilterSQP
Cmake
added support for sanitizers in debug mode and options SANITIZE_ADDRESS, SANITIZE_MEMORY, SANITIZE_UNDEFINED, SANITIZE_THREAD
added option SYM to specify which graph automorphism package (bliss, none) should be used, if available
disable non-standard compliant floating point optimizations in combination with intel compilers
improve Visual Studio compilation
only accept IPOPT version 3.12.0 or higher
preserve correct rpath in library (e.g. path to libipopt) when installing
Makefile
new flag DEBUGSOL={true,false} to enable checks against a user given debug solution
added flag SYM to specify which graph automorphism package (bliss, none) should be used
default value for ZIMPL in the Makefile is now false
Fixed bugs
fix wrong statistic display of diving leaf solutions