Scippy

SCIP

Solving Constraint Integer Programs

Release notes for SCIP 0.7

SCIP 0.7.9

Features

  • aging and cleanup now only remove non-basic columns and basic rows, s.t. resolving can be applied with 0 simplex iterations
  • probing is now also possible in presolving stage
  • it is now possible to create subnodes in probing and use backtracking to undo probing changes
  • it is now possible to interrupt and continue presolving
  • bounds of variables are included in the feasibility checks for solutions
  • support for barrier algorithm
  • included debugging module to check whether cutting planes cut off the optimal solution
  • if verblevel is at least NORMAL, an automatical check of the best solution is performed in the original problem, and an error message is displayed, if it violates an original constraint
  • due to the new constraint handler "cons_cumulative.{c,h}" SCIP can resource-constraint scheduling problem
  • Plugins
    • new implementation of the feasibility pump heuristic by Timo Berthold (replaces old implementation); old implementation is now called "objfeaspump"; parameter names have been changed accordingly
    • diving heuristics now compare their number of LP iterations with the number of node LP iterations instead of the total number (including their own) LP iterations
    • new plugin: probing presolver
    • new plugin: clique separator for clique cuts with at least 3 elements
    • changed implementation of reliability value calculation in reliability branching; slightly modified influence of maximal total number of strong branching LP iterations in reliability branching
    • changed implementation of maximal strong branching iterations calculation in reliability branching
    • modified the automatic objfactor setting of feaspump heuristic to let the objective function have stronger influence
    • changed implementation of automatic minplungedepth and maxplungedepth calculation in bfs node selector
    • new plugin: implied bound cuts separator
    • during probing, propagation of bounds is now always performed in linear constraint handler, ignoring the parameter "tightenboundsfreq"
    • new implementation of the clique graph construction method in clique separator
    • new constraint handler "cons_cumulative.{c,h}"

Examples and applications

  • added TSP example in examples/TSP

Interface changes

New and changed callbacks

  • new callback methods INITSOL and EXITSOL for variable pricers, primal heuristics, conflict handlers, relaxators, separators, propagators, event handlers, node selectors and display columns
  • callback method CONFLICTEXEC of conflict handlers receive additional parameters "dynamic" and "removeable"
  • constraint handler callback methods CONSLOCK and CONSUNLOCK are replaced by a single method CONSLOCK with the number of locks being positive or negative

Deleted and changed API methods

New API functions

Command line interface

  • command line history in interactive shell now only stores "useful" commands

Interfaces to external software

  • removed storing of dual norms in LPI state of CPLEX interface (too memory consuming)

Changed parameters

  • default frequency offset of fracdiving heuristic changed to 3
  • default frequency offset of (new) feaspump heuristic changed to 0
  • default frequency offset of objfeaspump heuristic changed to 8
  • changed default priority of primal heuristics
  • renamed parameter "limits/sol" to "limits/solutions"
  • changed default check priority of knapsack constraint handler to -600000
  • changed default priority of Gomory cut separator to -1000 (will now be called after constraint handlers!)
  • changed default priority of strong CG cut separator to -2000
  • changed default priority of cmir cut separator to -3000
  • changed default of parameter "lp/pricing" to 's'teepest edge pricing
  • default parameter "branching/relpscost/minreliable" changed to 1.0
  • default parameter "branching/relpscost/maxlookahead" changed to 8
  • default parameter "branching/relpscost/sbiterofs" changed to 100000
  • default parameter "heuristics/coefdiving/maxlpiterquot" changed to 0.05
  • default parameter "heuristics/fracdiving/maxlpiterquot" changed to 0.05
  • default parameter "heuristics/guideddiving/maxlpiterquot" changed to 0.05
  • default parameter "heuristics/linesearchdiving/maxlpiterquot" changed to 0.05
  • default parameter "heuristics/pscostdiving/maxlpiterquot" changed to 0.05
  • default parameter "heuristics/feaspump/freq" changed to 20
  • default parameter "heuristics/objfeaspump/freq" changed to 20
  • default parameter "heuristics/objpscostdiving/freq" changed to 20
  • default parameter "heuristics/rootsoldiving/freq" changed to 20
  • default parameter "separating/clique/maxtreenodes" changed to -1

New parameters

  • new parameter delay for presolvers
  • new parameter delaypresol for constraint handlers
  • "lp/cleanupcolsroot" and "lp/cleanuprowsroot" to distinguish cleanup settings between root node and other nodes
  • "heuristics/fixandinfer/proprounds" and "heuristics/fixandinfer/minfixings"
  • "separating/.../delay"
  • "presolving/.../delay"
  • "propagating/.../delay"
  • "constraints/.../delaysepa"
  • "constraints/.../delayprop"
  • "constraints/.../delaypresol"
  • "lp/initalgorithm" and "lp/resolvealgorithm" for switching between simplex and barrier algorithm
  • "numerics/barrierconvtol" to set the convergence tolerance in the barrier algorithm
  • "lp/pricing" to set the pricing strategy used in the LP solver
  • "lp/checkstability" to disable stability check of LP solver's result code
  • "conflict/dynamic"
  • "conflict/removeable"
  • "reading/mpsreader/dynamicconss"
  • "reading/cnfreader/dynamicconss"
  • "heuristics/coefdiving/maxlpiterofs"
  • "heuristics/feaspump/maxlpiterofs"
  • "heuristics/fracdiving/maxlpiterofs"
  • "heuristics/guideddiving/maxlpiterofs"
  • "heuristics/linesearchdiving/maxlpiterofs"
  • "heuristics/objfeaspump/maxlpiterofs"
  • "heuristics/objpscostdiving/maxlpiterofs"
  • "heuristics/pscostdiving/maxlpiterofs"
  • "heuristics/rootsoldiving/maxlpiterofs"
  • "heuristics/feaspump/maxsols"
  • "heuristics/objfeaspump/maxsols"
  • "heuristics/objpscostdiving/maxsols"
  • "heuristics/rootsoldiving/maxsols"
  • "branching/scorefunc"

Data structures

  • new possible result SCIP_DELAYED for EXEC method of separators, presolvers and propagators and SEPA, PROP, and PRESOL methods of constraint handlers

Fixed bugs

  • fixed bug in MPS file reader
  • fixed bugs in separation store with single coefficient cuts that are converted into bound changes
  • at least one cut per separation round is added to the LP to avoid cycling, even if the cut is redundant
  • removed bug with applying reduced cost strengthening before pricing in all necessary variables
  • negated variables must also be reset in SCIPvarInitSolve()
  • removed bug with objective norm calculation and column variables not in the LP (pricing)
  • removed conflict analysis of infeasible diving LP if pricing is activated
  • removed bug in knapsack constraint handler with merging multiple items if more than two items of the same variable appear in the constraint
  • fixed bug in SCIProwCalcIntegralScalar() with rows consisting of only continuous variables (appeared in gomory cut separator on miplib/dcmulti.mps)
  • fixed documentation of CONSLOCK-method (missing parameter "scip" in SCIPaddVarLocks())
  • included missing "objrelax.h" in includes of objscip.h
  • fixed bug that presolving time is not counted to solving time, if presolving is called explicitly with SCIPpresolve()
  • fixed bug where presolving fixings are counted even if the variable was already fixed
  • fixed bug that CONSLOCK method of constraint handlers that don't need constraints is not called
  • fixed bug that after a resolve and further preprocessing, existing primal solutions may get corrupted due to aggregations or fixings that are possible due to the primal bound (given by the best solution)
  • fixeg bug in setppc constraint handler with pairs of aggregated variables in the same constraint
  • removed bug with dual presolver, that declared a problem to be unbounded or infeasible, if it could fix a variable to infinity even if its objective value is zero
  • fixed bug in knapsack constraint handler that fixed variables are sometimes not removed in presolving
  • made conflict analysis available in presolving stage (for probing conflicts)
  • removed bug in knapsack constraint handler with merging negated variables of equal weight at the end of the variables' array
  • fixed bug with primal bound becoming wrong, if in a prior run the optimal solution was found and the cutoff bound was thereby reduced due to further domain propagation w.r.t. the objective function
  • fixed bug with unresolved numerical troubles in LP that don't render the LP useless at the current node
  • fixed bug in SCIPisObjIntegral()
  • LP error on forced LP resolve (due to 0 unfixed integers) now leads to an error (instead of accepting the pseudo solution as feasible)
  • fixed bug in SCIPprintError() with file == NULL
  • fixed bug with globally deleting constraints, that have attached rows which are therefore not released in exitsol methods
  • fixed bugs in intobj separator
  • fixed bug in CPLEX LP interface with dual norms
  • heuristic's display character is now only shown the first time, the new solution was found
  • fixed bug that SCIPreadProb() doesn't discard the transformed problem
  • fixed bug in cmir separator with empty rows
  • fixed bug in linear constraint handler's knapsack relaxation separator
  • fixed numerical bugs in rounding heuristic and rootsoldiving heuristic
  • fixed bug in implied bound cut separator: only implications between binary variables were generated before
  • fixed bug in linear constraint handler with eventdatas, if the original constraint has no variables
  • fixed bug with wrong euclidean norm calculation of row, if multiple coefficients for the same variable are added and the sorting of the row was delayed with SCIProwDelaySort()
  • fixed bug with adding implications: wrong insertion position, if only the lower bound change was present but not the upper bound change
  • fixed bug in SCIPvarAddImplics() with wrong variable used in varAdjustBd()
  • fixed bug in method reduced() of tclique_branch.c with sorting nodes in V

SCIP 0.7.8

Features

  • changed SCIProwCalcIntegralScalar() to a slightly different algorithm
  • improved knapsack relaxation in linear constraint handler separator to scale the constraint in order to get integral coefficients instead of just rounding down all coefficients
  • improved presolving of linear constraint handler: aggregation of two constraints with equal coefficient vector into single constraint
  • improved presolving of knapsack constraint handler: aggregation of equal or negated variables in same constraint
  • Plugins
    • priority of separators, propagators and presolvers decide whether the plugin is called before the corresponding constraint handler methods or after: plugins with nonnegative priorities are called before, plugins with negative priorities are called after the constraint handlers
    • new plugin class for relaxators (external relaxations, that can be used in parallel with LP relaxations)
    • if more than one result code applies to a plugin's execution, it should return the one that is higher in the call's documentation list

Interface changes

  • even in optimized mode, the simple functions that are implemented as defines in the include files exist in the library, s.t. one can include the include files without NDEBUG and use the optimized library

New and changed callbacks

  • new branching rule plugin methods INITSOL and EXITSOL

Deleted and changed API methods

New API functions

Changed parameters

  • slightly changed the meaning of parameter "presolving/abortfac" a value of 0 now means to abort presolving only after no more change has been found

Fixed bugs

  • removed bug in knapsack constraint handler that appears if a variable is fixed to zero in knapsack presolving, which triggers a variable of the same knapsack to be fixed to one due to aggregation
  • fixed bugs in consdataSwitchWatchedVars() of "or" and "and" constraint handlers
  • fixed bug in all-fullstrong branching with getting strong branching information for columns not in current LP
  • assigning a value to a fixed variable in a solution with SCIPsetSolVal() does not return an error anymore, if the value is equal to the fixed value of the variable
  • implemented missing case in solve.c with branching rules that add constraints
  • solving loop is now immediately aborted, if a node on the active path is marked to be cut off
  • removed bug in resolving an interrupted problem, after the last solved node was cut off
  • removed bug with infinite solving loop if LP solving is turned off
  • removed bug in knapsack presolver
  • removed bug with aborted solving in root node (e.g. due to time limit) that is tagged to be restarted
  • changed numerics for integrality check of coefficients (fixed bug with accumulated errors in rows s.t. the row's activity is no longer integral although the row is marked being integer)
  • fixed bugs in constraint handlers (and, logicor, or, setppc, xor) with calling conflict analysis during presolving
  • slightly changed numerics in linear constraint handler presolving to fix a bug with coefficients detected to be scaled to an integral value, that are not integral after scaling due to a large scalar that increased the integrality gap to a value larger than epsilon
  • fixed wrong assertion in xor constraint handler with switching both watched variables to unwatched
  • removed bug in SCIPisScalingIntegral()
  • removed bugs with calling SCIPtightenVarLb(), SCIPtightenVarUb(), SCIPinferVarLbCons(), SCIPinferVarUbCons(), SCIPinferVarLbProp() and SCIPinferVarUbProp() in PROBLEM stage
  • fixed bug in presolving with wrong number of newly fixed/aggregated/... variables/bounds/... after a restart

SCIP 0.7.7

Features

  • infeasible LPs in diving now produce conflict clauses (if LP conflict analysis is enabled)
  • conflict analysis was slightly modified
  • slightly changed aging strategy of logic or constraint handler

Interface changes

Deleted and changed API methods

  • method SCIPgetGap() and SCIPgetTransGap() now return infinity, if primal and dual bound have opposite sign (this removes the oddness with the gap increasing while the dual bound approaches zero)

New API functions

Changed parameters

  • "lp/colagelimit" and "lp/rowagelimit" may now be set to -1 to disable deletion of columns/rows due to aging

Build system

Makefile

  • the file names in the archive file are now preceeded with a directory "scip-<lt;version>gt;/"
  • the compiler is now also represented in the LP solver library names (e.g. you have to rename the softlink "libcplex.linux.x86.a" to "libcplex.linux.x86.gnu.a")

Fixed bugs

  • removed bug in conflict analysis that appears if the conflict is only active at the current depth level
  • missing SCIPlpiIsPrimalFeasible() and SCIPlpiIsDualFeasible() implemented in lpi_spx.cpp and lpi_spx121.cpp
  • removed preprocessing of linear constraint pairs with modifiable constraints
  • removed wrong assert "assert(eventfilter->gt;len == 0 || eventfilter->gt;eventmask != 0x00000000)" from event.c
  • removed wrong assert in conflict analysis (appeared on analyzing diving LP conflicts with both bounds of a non-binary variable changed)

SCIP 0.7.6

Features

  • creation of reconvergence clauses in conflict analysis
  • first node of each plunging is not treated as plunging node w.r.t. calling primal heuristics
  • improved performance of logic or constraint handler due to better watched variables handling

Interface changes

Deleted and changed API methods

New API functions

Changed parameters

  • changed default frequency offset of pscostdiving "heuristics/pscostdiving/freqofs" to 2 and frequency offset of fracdiving "heuristics/feaspump/freqofs" to 0 in order to not call pscostdiving in root node, where nearly all pseudo costs are uninitialized

New parameters

  • new parameter "separating/efficacynorm" to choose between Euclidean, maximum, sum and discrete norm in efficacy calculation

Data structures

  • new possible result code SCIP_DELAYED for primal heuristics

Fixed bugs

  • removed bugs in CLP Solver interface
  • SCIP returned "gap limit reached" even if the problem was solved to optimality, if the optimal solution was found at a node with lower bound equal to the global lower bound
  • after conversion of the focus node into a junction (e.g. in case of numerical troubles while solving the node's LP), the child nodes got the wrong LP fork attached (the common LP fork of the old and new focus node instead of the old focus node's LP fork)
  • bug reconvergence clauses in conflict analysis if bounds on non-binary variables were the reason for the fixing of the uip to create a reconvergence clause for
  • wrong sub calls in SCIPvarGet...CurrentRun() for aggregated variables
  • variables' conflict set counter was not reset when the problem was resolved again

Known bugs

  • unbounded models lead to an error
  • air04 and air05 return wrong optimal value (1 too large): possibly due to strong branching or setppc propagation?

SCIP 0.7.5

Miscellaneous

  • started change log