Scippy

SCIP

Solving Constraint Integer Programs

Release notes for SCIP 1.0

SCIP 1.0.0

Features

  • the doxygen documentation now has HowTo's for all plugin types
  • the doxygen documentation now contains a FAQ
  • SCIP now has a couple of specialized settings, all called scip_*.set
  • SCIP is now compatible to the Exception branch of SoPlex
  • presolving, cut separation, primal heuristics and strong branching now better respect time limit
  • time limit is now forwarded to lp solving algorithm
  • modified cut selection code
  • cut conversion into linear constraints after a restart now works better
  • if possible, objective function is scaled to make objective value integral with gcd 1
  • removed performance bottleneck with non-bfs based node selectors and large leaf queues at the cost of a small memory overhead (2 ints per node in the leaf queue); this improves performance quite a bit on instances that take a large number of branching nodes
  • slightly modified automatic constraint aging strategy
  • the documentation has now a TAB Modules; there you can find list of available constraint handles, presolvers, propagators, lpi interfaces, file readers and so on
  • Plugins
    • new C templates disp_xxx.h and dialog_xxx.h and C++ wrapper classes objdisp.h and objdialog.h, respectively
    • new improvement heuristic "oneopt"
    • improved performance of linear constraint propagation by delaying some floor/ceil calculations
    • new node selection rule "estimate" (best estimate search)
    • best estimate search is now used in all large neighborhood search heuristics
    • new heuristic "actconsdiving" following an idea of John Chinneck
    • new node selection rule "hybridestim"
    • improved performance of clique cut separator
    • modified reader "sol", st. files which where created via typing the order of commands 'set log *.sol', 'disp sol var -', 'set log cplex.log' in Cplex can now be read
    • modified probing presolver to do multiple cycles if called in subsequent runs
    • greatly improved performance of LP file reader by replacing string copies with pointer copies
    • changed sort algorithm in probing presolver
    • added flow cover separator
    • gomory cuts are now also separated for integral slack variables
    • less aggressive in Gomory cut separation
    • strong CG cuts are now also separated for integral slack variables
    • new dummy LP interface "lpi_none.c"; useful for running SCIP without a LP solver

Interface changes

New and changed callbacks

  • new callback method SCIPdialogFree()

Deleted and changed API methods

New API functions

Command line interface

  • default dialog menu now includes the commands "set default" and "display parameters"
  • added option to write node LP and MIP relaxations to LP file from interactive shell

Changed parameters

  • parameters are now separated into basic and advanced, the latter ones have been moved to extra submenus
  • priority parameters are now restricted to be in [INT_MIN/4,INT_MAX/4] to avoid overflow errors in comparison methods
  • increased priority of "estimate" node selector, such that this is the new default node selector
  • changed default value of global "separating/maxbounddist" to 1.0
  • changed default value of "numerics/boundstreps" to 0.05 in order to avoid very long propagation loops on continuous variables
  • changed default value of "separating/objparalfac" to 0.01 for performance reasons
  • changed default values of "heuristics/∗diving/backtrack to TRUE
  • changed default value of "nodeselection/restartdfs/stdpriority" to 10000
  • changed meaning of parameter setting "nodeselection/childsel = l"; old meaning is now called 'r'
  • changed default value of "presolving/restartfac" to 0.05
  • changed default value of "presolving/restartminred" to 0.10
  • changed default value of "constraints/linear/propfreq" to 1
  • changed default value of "separating/objparalfac" to 0.0001
  • changed default value of "conflict/maxvarsfac" to 0.1
  • changed default value of "conflict/useprop" to TRUE
  • changed default value of "conflict/useinflp" to TRUE
  • changed default value of "conflict/usepseudo" to TRUE
  • changed default value of "conflict/maxlploops" to 2
  • changed default value of "conflict/lpiterations" to 10
  • changed default value of "conflict/interconss" to -1
  • changed default value of "conflict/reconvlevels" to -1
  • changed default value of "conflict/settlelocal" to FALSE

New parameters

  • "conflict/enable" to globally enable or disable conflict analysis
  • "constraints/linear/maxcardbounddist" and "constraints/knapsack/maxcardbounddist"
  • "heuristics/∗diving/backtrack" to activate 1-level backtracking for most of the diving heuristics
  • "heuristics/feaspump/maxstallloops"
  • "nodeselection/childsel" to control the child selection
  • "presolving/immrestartfac"
  • "separating/∗/maxbounddist" to have individual maxbounddist parameters per separator
  • "separating/clique/backtrackfreq" to speed up clique cut separation in heuristic fashion
  • "separating/redcost/continuous"

Build system

Makefile

  • added .exe extension to binaries of MinGW
  • added "LPS=none" for compiling SCIP without a LP solver
  • modified the default LP solver to be SoPlex instead of CPLEX
  • removed the ".static" extension associated to the LINK variable from the Makefile system (If you want to build makefiles for shared library generation, use the OPT variable. For example, you could create a makefile "make/make.linux.x86.gnu.opt-shared" and compile it with "make OPT=opt-shared".)
  • added version numbers to library files (There will be a softlink generated in the lib/ and bin/ directories without version number that point to the latest compiled version.)
  • made ZIMPL=true the default; if you do not want to include ZIMPL support, call "make ZIMPL=false"

Fixed bugs

  • fixed bug in rowScale() concerning deletion of almost zero coefficients
  • fixed bug in SCIPcutpoolAddNewRow() concerning update of minidx and maxidx of added row
  • removed wrong assert in bounddisjunction constraint enforcement
  • fixed bug with wrong bound changes of loose variables
  • fixed bug with aggregated variables in debug solution test
  • fixed numerical buf with slightly different LP optimum after resolving due to probing/diving
  • fixed bug in cmir and flowcover separator with variables which are currently not in the LP
  • weakened assert in primal.c in order to avoid numerical troubles
  • changed wrong assert in SCIPnodeAddBoundinfer()
  • fixed bug in intshifting and oneopt heuristic with variables which are currently not in the LP
  • fixed bug in integer objective seperator with restarts
  • fixed bug in integer objective seperator with dynamic columns
  • fixed numerical bug in propagator of varbound constraint handler
  • fixed numerical bug in rowScaling of lp.c, which possibly cut off feasible solutions
  • fixed bug with too long variable names
  • fixed bug with strange user descriptions of plugins
  • changed position of some asserts to prevent segmentation faults
  • SCIPgetAvgPseudocostCount() and SCIPgetAvgPseudocostCountCurrentRun() now return the average over all integer variables instead of all variables, since pseudo costs are not recorded for continuous variables
  • fixed wrong sorting of plugins with priorities close to INT_MIN or INT_MAX
  • replaced "line" by "read" in Makefile, since "line" is non-standard
  • fixed bug in variable bound constraint handler with changing bounds on multi-aggregated variables
  • fixed bug in variable bounds search and insertion method
  • fixed bug with LP size management in probing if column generation is used
  • fixed bug with branching rules that produce only one child with no changes to the problem
  • fixed bug in linear constraint handler: only tight cuts are transformed into linear constraints after restart
  • fixed bug in LP file reader with row names identical to section keywords
  • fixed bug that external relaxator is not reset appropriately for a new problem instance
  • fixed potential bugs due to errors in resolving the LP after diving or probing
  • removed wrong assert in function paramWrite()
  • fixed potential bugs in SCIPpriceLoop() and priceAndCutLoop(), st. now all LP solution stati are handled appropriately
  • fixed bug with uninitialized in check.awk
  • fixed bug with primal heuristics reducing the cutoff bound such that the current node is cut off
  • now it is possible to add original solutions
  • fixed bug that cut age was not reset to zero for violated cuts
  • fixed bugs with SCIPgetBestsol() returning NULL after a restart with user objective limit
  • fixed wrong status code in presence of user objective limit and a feasible solution that is not better than the limit
  • fixed bug regarding modifying bounds in original problem if negated original variables exist
  • fixed bug in ZIMPL file reader for multiple occurrences of a single variable in the objective function
  • fixed bug with deleting variables from the transformed problem that are contained in the implication graph
  • fixed bug in oneopt heuristic: must not be called on pseudo nodes if continuous variables are present
  • significantly improved performance of c-MIR and Gomory cuts by caching closest VLB and VUB info
  • fixed bug in root reduced cost fixing propagator that leads to an empty domain for a variable as a proof of optimality of the current incumbent
  • fixed bug in bounddisjunction constraint handler with propagation of multi-aggregated variables
  • fixed bug with almost integral multi-aggregation in dual presolve of linear constraint handler
  • fixed bug with numerics in update of min/maxactivity in linear constraint handler
  • fixed bug with numerics in linear constraint handler due to non-representable BOUNDSCALETOL
  • SCIPwrite{LP,MIP} may no longer be called after solving, since the LP data structures may not be valid
  • fixed potential bug with non-existent LP in SCIPwrite{LP,MIP}
  • fixed bug with multiple pending bound changes on some variable
  • fixed bug with fractional coefficients of binary variables in cont –>gt; impl int upgrading