Scippy

SCIP

Solving Constraint Integer Programs

Release notes for SCIP 0.9

SCIP 0.9.0

Features

  • primal heuristics that run before the node is solved now know already whether the LP will be solved at the current node or not
  • the EXITSOL callback of the plugins is now called before the LP and the global cut pool are freed
  • possibility of SAT-like restarts after a number of conflict constraints have been found
  • in the root node of the very first run, heuristics with timing AFTERNODELPNODE, AFTERLPPLUNGE, AFTERPSEUDONODE, and AFTERPSEUDOPLUNGE are now called before the enforcement of the constraint handlers, in particular before the branching rules; in this way, the branching rule can already benefit from a tighter primal bound
  • if a heuristic found a better solution after the LP loop (and in particular the AFTERNODE heuristics in the root node of the very first run, see above), domain propagation and LP solving is triggered again; this allows for additional reduced cost tightening and other dual propagations
  • hard-coded relative objective gain to consider a separation loop to be stalling is now changed from 1e-3 to 1e-4, which means that separation is not aborted as early as before
  • Plugins
    • new primal heuristic "rens"
    • new primal heuristic "mutation"
    • slightly modified crossover and rins heuristics
    • improved presolving of and, or and xor constraints
    • improved performance of intdiving heuristic
    • new primal heuristic "veclendiving"
    • improved heuristic "octane"
    • improved heuristic "shifting"
    • slightly modified rens and localbranching heuristics
    • modified guided diving heuristic such that it equals the original version of the heuristic (i.e., round in direction of the current incumbent solution instead of the average of all primal feasible solutions)
    • modified c-MIR cut separator to more closely resemble the original version of Marchand and Wolsey
    • implemented additional dual presolving in linear constraint handler
    • slightly modified presolving of varbound constraint handler
    • c-MIR cuts try now to scale the cut to integral values; however, cuts are still generated if this fails
    • ID character for intdiving heuristic is now 'I'
    • new heuristic "intshifting" (ID character 'i')

Interface changes

New and changed callbacks

  • new parameter "solinfeasible" for constraint handler callback methods ENFOLP and ENFOPS
  • replaced callback parameter "inlploop" and "inplunging" by "heurtiming" in SCIP_DECL_HEUREXEC
  • slightly changed the meaning of the result codes returned by external relaxators: if they modify the LP or tighten bounds of variables, they are not automatically be called again (it is assumed that they already made use of these changes). They are only called again, if they returned SCIP_SUSPENDED or if some other plugin modified the LP.

Deleted and changed API methods

PSEUDONODES DURINGPLUNGING DURINGLPLOOP AFTERNODE timingmask
FALSE FALSE FALSE FALSE SCIP_HEURTIMING_BEFORENODE
TRUE FALSE FALSE FALSE SCIP_HEURTIMING_BEFORENODE
FALSE TRUE FALSE FALSE SCIP_HEURTIMING_BEFORENODE
TRUE TRUE FALSE FALSE SCIP_HEURTIMING_BEFORENODE
FALSE FALSE TRUE FALSE SCIP_HEURTIMING_BEFORENODE | SCIP_HEURTIMING_DURINGLPLOOP
TRUE FALSE TRUE FALSE SCIP_HEURTIMING_BEFORENODE | SCIP_HEURTIMING_DURINGLPLOOP
FALSE TRUE TRUE FALSE SCIP_HEURTIMING_BEFORENODE | SCIP_HEURTIMING_DURINGLPLOOP
TRUE TRUE TRUE FALSE SCIP_HEURTIMING_BEFORENODE | SCIP_HEURTIMING_DURINGLPLOOP
FALSE FALSE FALSE TRUE SCIP_HEURTIMING_AFTERLPPLUNGE
TRUE FALSE FALSE TRUE SCIP_HEURTIMING_AFTERPLUNGE
FALSE TRUE FALSE TRUE SCIP_HEURTIMING_AFTERLPNODE
TRUE TRUE FALSE TRUE SCIP_HEURTIMING_AFTERNODE
FALSE FALSE TRUE TRUE SCIP_HEURTIMING_AFTERLPPLUNGE | SCIP_HEURTIMING_DURINGLPLOOP
TRUE FALSE TRUE TRUE SCIP_HEURTIMING_AFTERPLUNGE | SCIP_HEURTIMING_DURINGLPLOOP
FALSE TRUE TRUE TRUE SCIP_HEURTIMING_AFTERLPNODE | SCIP_HEURTIMING_DURINGLPLOOP
TRUE TRUE TRUE TRUE SCIP_HEURTIMING_AFTERNODE | SCIP_HEURTIMING_DURINGLPLOOP

New API functions

Command line interface

  • command shell now understands escape characters ",' and \ which makes it possible to read in files with spaces in the name

Interfaces to external software

  • updated XPress interface to XPress-MP 17 (contributed by Michael Perregaard)

Changed parameters

  • changed default value of "heuristics/octane/usediffray" to FALSE
  • removed parameter "heuristics/octane/usediffbwray"
  • renamed parameter "heuristics/octane/useavgray" to "heuristics/octane/useavgnbray"
  • changed default value of "heuristics/rens/binarybounds" to TRUE
  • changed default value of "heuristics/octane/freq" to -1 in order to deactivate Octane
  • parameter "heuristics/feaspump/maxsols" is now strict, i.e., if n solutions were already found, the feasibility pump starts to work only if maxsols <lt;= n, instead of maxsols <lt; n

New parameters

  • "conflict/restartnum" and "conflict/restartfac"
  • "heuristics/octane/useavgray"
  • "heuristics/octane/useavgwgtray"
  • "limits/absgap" to define an absolute gap limit
  • "separating/cmir/aggrtol"
  • "separating/cmir/densityscore"
  • "separating/cmir/fixintegralrhs"
  • "separating/maxruns"
  • "presolving/restartminred" which forbids another restart if the last one was not successful enough
  • "propagating/abortoncutoff"
  • "reading/zplreader/changedir" to control behavior of path switching of ZIMPL file reader
  • "reading/zplreader/parameters" to pass additional parameters to ZIMPL

Build system

Makefile

  • added ncurses to the readline entries in the make/make.* files
  • added quotes to sed expressions in Makefile (needed under Windows)
  • modified makefiles for Windows/Intel
  • added automatic query script in the Makefile for soft-link names

Fixed bugs

  • fixed bug with adding constraints with INITIAL=true and separating them afterwards, which lead to a second addition of the constraint's relaxation in the child node
  • fixed bug in cmir cut separator, that 8*delta was not tried
  • fixed bug in cmir cut separator with wrong sign of slack in row score function
  • fixed bug with string pointer copy instead of string content duplication in constructors of C++ wrapper classes
  • fixed bug in CPLEX interface with basis access methods that dualopt has to be called for more error status codes
  • fixed bug with inserting two variable bounds of the same type on the same variable with the same bounding variable but with different sign of coefficient (e.g., x <lt;= 10*z + 5 and x <lt;= -5*z + 10); in previous version, one of the two was removed, although both have a useful meaning; now, we keep both and detect a stronger global bound in the implication graph presolving
  • fixed bug in cmir cut separator with weights fixed to zero, thus making the current aggregation invalid
  • fixed bug that SCIPvarGetAvgSol() always returned the upper bound (affected guided diving heuristic)
  • fixed bug in RENS, RINS, Local Branching, Crossover and Mutation heuristics with wrong variable - subvariable assignments
  • fixed bug in cmir cut separator with wrong calculation of cut efficacies
  • objective function is now also checked for integrality after problem transformation (fixed a bug that a solution which was generated between transformation and presolving for an integral objective function did not reduce the cutoff bound by one)
  • fixed a bug with cmir cut efficacy calculation (however, on my first tests, the performance reduced slightly!)
  • fixed bug in infeasible/bound-exceeding LP conflict analysis if the bounds were relaxed in diving (happens in intshifting heuristic)
  • too large deltas are now also rejected in c-MIR cut separation
  • separation LPs are now immediately resolved after a bound change was generated by a cut separator; before, the separation round was prematurely aborted, which means that a separation round limit was sometimes reached very quickly and some of the separators were not even called a single time