SCIP Doxygen Documentation
Loading...
Searching...
No Matches
Release notes for SCIP 10

SCIP 10.0.1

Fixed bugs

  • fixed that parameters passed on as variadic arguments to SCIPsolveNLP() and SCIPsolveNlpi() were ignored when compiling with MS compilers without -Zc:preprocessor
  • make more CONOPT output available when verbosity level is set to 2
  • turn off detection of definitional constraints in CONOPT for now, to work around a related issue in CONOPT 4.39.0
  • fixed call of SCIPcreateConsBasicSOCNonlinear() with coefs being NULL, and fixed check for offsets being finite
  • avoid crash when initial IIS solve fails while reporting errors explicitly
  • fixed that variable removal in IIS cleanup tried to delete variables that were marked as not deletable
  • fixed that some IIS info messages were not using a user's message handler
  • fixed use of interactive option (-i) of AMPL interface
  • fixed failure in nl writing on big endian machines
  • correct memory reallocation in storeSubproblemMasterVar() of benders.c to avoid errors when freeing memory
  • also set real solution in SCIPsolSetValExact() to maintain approximation
  • handle exact solutions in SCIPsolCheckOrig(), SCIPcheckSolOrig(), and SCIPrecomputeSolObj() to correctly check exact initial solutions in SCIPtransformProb()
  • fixed calculation of Euclidean norm in calcEfficacyDenseStorage() for use in exact solving
  • removed unnecessary explicit linking of GMP library for exact solving mode unittests
  • fixed bug with changing the type of the slack variable in indicator constraints while copying
  • signal extreme estimations in timeSeriesEstimate() and skip pruning estimations in eventExecEstim() to avoid unstable restarting
  • fixed parallelism computation of dynamic cut selector to use Euclidean norm instead of unsupported argument
  • fixed that non-efficacious cuts were not filtered out before checking dynamic parallelism in dynamic cut selector
  • fixes in nauty.h for 32bit systems
  • fixed SCIPgetDualSolVal() for a linear constraint with a single variable
  • adjust conflictAnalyzeLP() to inability of row aggregation to handle a change in the number of variables
  • propagate child lower bounds back to focus node to ensure consistent lower bound tracking

Miscellaneous

  • updated ampl/mp to version 4.0.4
  • switch from GetTempPath2A to GetTempPathA in nl writer for Windows for broader compatibility

SCIP 10.0.0

Features and Performance Improvements

Exact Solving

  • added numerically exact solving mode for mixed-integer linear programs to the core framework including certification of branch-and-bound phase
  • core extensions:
    • new wrapper struct SCIP_RATIONAL for rational arithmetic currently based on Boost, GMP, and MPFR
    • new data structure SCIP_LPEXACT for handling rational LP relaxation and computing safe dual bounds
    • new interfaces to exact LP solvers SoPlex and QSopt_ex
    • safe dualproof version of conflict analysis
    • new data structure SCIP_CERTIFICATE for certificate printing/proof logging
  • new plugins:
    • new constraint handler "exactlinear" for handling linear constraints with rational data
    • new constraint handler "exactsol" to post-process and repair solutions from floating-point heuristics
  • plugins revised for numerically exact solving mode:
    • adjusted readers for MPS, LP, CIP, OPB/WBO, and ZIMPL files
    • extended presolver "milp" to perform rational presolving with PaPILO
    • adjusted constraint handler "integral" and default reliability pseudo-cost branching rule "relpscost"
    • extended Gomory cut separator to separate and certify numerically safe MIR cuts
    • adjusted all primal heuristics (except for five dedicated MINLP heuristics)
  • new interfaces to exact LP solvers SoPlex and QSopt_ex

Symmetry Handling

  • added more techniques to handle reflection symmetries, in particular, for orbitopes with column reflections and matrices whose rows and columns can be permuted by a symmetry
  • Dejavu can be used to compute symmetries; the source code is shipped with SCIP and incorporates sassy
  • implemented symmetry detection callbacks for disjunction and superindicator constraint handlers
  • detailed information about applied symmetry handling techniques can be printed to the terminal
  • improve memory usage by introducing different constraint handlers for full orbitopes and packing/partitioning orbitopes
  • symmetry detection no longer treats implicit integer variables separately, but computes symmetries based on the variable type inferred from variable bounds and implied integrality
  • extended the statistics to also include information about the number of variables (per type) affected by symmetry
  • implemented method to compute new permutations from a given list of symmetry group generators
  • cons_orbisack, cons_orbitope_full, cons_orbitope_pp, and cons_symresack now try to replace the stored aggregated variables by active ones at the end of presolving; this should reduce the size of copies of the presolved problem
  • simplified symmetry detection graphs in case all edges have the same color

Presolve

  • distinguish implicit integrality of variables into strong and weak type, depending on whether integrality is implied for all feasible or only at least one optimal solution
  • added a new presolver "implint", which detects implied integral variables by detecting (transposed) network submatrices in the problem; for now, this plugin is disabled by default
  • added support for (transposed) network matrix detection
  • allow multi-aggregation of unbounded slack variables, which may enable more bound tightening due to a reduction in the number of unbounded variables
  • resolve all fixings in xor constraints also for an available integer variable

Conflict Analysis

  • added generalized resolution conflict analysis that operates directly on linear constraints instead of conflict graphs
  • disabled dualsol and dualray conflict upgrades to maintain conflict store
  • apply general conflict upgrades in conflict store

Cutting Planes

  • added a new separator "flower" to generate flower cuts from AND constraints and nonlinear product expressions
  • added functionality to deal with hypergraphs by means of efficient access to vertices, edges, and intersections edges

Primal Heuristics

  • added decomposition kernel search (DKS) heuristic (disabled by default), which implements a kernel search framework; it can be used both as a construction heuristic as well as an improvement heuristic; existing decomposition information can be utilized
  • reduced maximal fraction of diving LP iterations relative to total node LP iterations

Branching

  • added a dynamic max-lookahead criterion for strong branching; a probability distribution is fitted to the observed candidate gains and evaluating further candidates stops when the expected tree-size reduction no longer justifies the LP evaluation cost
  • added new fields in history to store ancestral pseudo cost updates, used in the pseudo costs branching rule to compute discounted pseudo costs

Nonlinearity

  • added an interface to the NLP solver CONOPT
  • implemented columnwise Jacobian sparsity computation in the NLP oracle
  • extended SOC detection to simple bilinear constraints, e.g., x*y >= 1

Infeasibility Analysis

  • added the possibility to search for irreducible infeasible subsystems (IIS)
  • added new plugin type for finding irreducible infeasible subsystems (IIS)
  • new iisfinder plugin "greedy", which implements a greedy addition and deletion based algorithm with dynamic batch sizing

Benders' Decomposition

  • when solving a problem with additional decomposition information (for example, when reading a DEC file) and enabling decomposition/applybenders, the problem is now solved in a Benders' decomposition relaxator; instead of decomposing the original SCIP instance, the relaxator builds the decomposed problem in sub-SCIPs and solves it via default Benders' Decomposition; a solution to the original (undecomposed) problem is now made available by the relaxator; the SCIP shell dialog "display statistics" now also prints the statistics from solving the Benders' decomposition in the relaxator
  • adds objective types for Benders' decomposition; the choices are to sum the subproblems objectives (classical approach) and to use the maximum of the subproblems objectives
  • the linking master variables for each Benders' decomposition subproblem are now stored; these can be accessed for the generation of cuts and setting up the subproblems

Reading and Writing

  • added a new data structure SCIP_DATATREE that holds serializable data and a function to export to a JSON file
  • added ability to collect statistics from tables in a SCIP_DATATREE and write out as JSON file; dialog write statistics now writes a JSON file if name of file to write ends with .json
  • added writing support for AMPL NL writer: currently only general and specialized linear and nonlinear constraints can be written
  • added support for AND-constraints to GAMS writer
  • simplify expressions of nonlinear constraints in MPS and LP writing to increase chance that they are recognized as quadratic

Applications

  • New application "PBSolver" to solve pseudoboolean instances in OPB and WBO format while complying with PB competition rules
  • Coloring: new parameter branching/coloring/strategy to choose the least/most fractional variable for branching

Miscellaneous

  • do not allow non-root restarts when no global fixings were found
  • reimplemented SCIPvarGetActiveRepresentatives() by using dense arrays to avoid repeated resorting
  • avoid unnecessary calls of constraint handlers components, benders, benderslp, propagator genvbounds, and heuristics ofins, subnlp, nlpdiving, indicator
  • inlined SCIPgetStatus() to reduce computational overhead
  • variable data pointer are now copied if no copy routine was supplied
  • add check that parameter value pointers are unique, i.e., no two are the same

Interface changes

Deprecations

New and changed callbacks

Deleted and changed API functions

New API functions

Exact Solving:

Implicit Integrality:

Symmetry Handling:

Conflict Analysis:

Branching:

Cutting Planes:

Benders' Decomposition:

IIS:

Hypergraphs:

Network Matrix:

Solve Statistics:

Nonlinearity:

Miscellaneous:

Data Structures

Changes in Preprocessor Macros

SCIP Shell

  • help <command> now allows to display information on specific command
  • allow to hide certain commands in the help list
  • added the (hidden) command "exit" to exit the shell
  • added command iis to create an infeasible subsystem
  • added write/iis dialog to write out the infeasible subsystem to file
  • added display/iis dialog to write out the infeasible subsystem to console

Changed parameters

  • heuristics/scheduler/heurtimelimit removed to avoid indeterministic behavior of scheduler heuristic, uses main time limit instead
  • removed parameters constraints/orbitope/checkpporbitope, constraints/orbitope/sepafullorbitope, constraints/orbitope/forceconscopy, which became superfluous
  • removed reading/gmsreader/signpower
  • removed benders/default/numthreads: multi-threading support for Benders' decomposition has been temporarily disabled
  • restricted range of parameter propagating/symmetry/sstleadervartype to [1,7]; its new default value is 6
  • propagating/∗/timingmask extended by setting 0 to disable propagators completely
  • changed defaults of constraints/components/propfreq and constraints/components/maxdepth to -1 and 2147483647, respectively, to avoid unnecessary calls of components propagator by default
  • changed frequencies for the following heuristics: shifting, gins, crossover, rins, randrounding
  • changed default maxlpiterquot to 0.05 for all LP diving heuristics and feaspump, whereas adaptivediving uses 0.15 and rootsoldiving remains at 0.01
  • changed default of presolving/restartminred to 0.05
  • changed default of presolving/immrestartfac to 0.05
  • removed parameters propagating/symmetry/{nautymaxncells,nautymaxnnodes}
  • updated description of parameter misc/usesymmetry

New parameters

  • exact/enable: enable exact solving mode
  • exact/improvingsols: whether only improving exact solutions should be considered
  • exact/safedbmethod: method of safe dual bounding
  • exact/interleavedbstrat: interleaving strategy between safe dual bounding and exact LP solving
  • exact/psdualcolselection: project-and-shift strategy of dual column selection
  • exact/cutapproxmaxboundval: maximal absolute bound for which coefficients in exact cuts should be approximated
  • exact/cutmaxdenom: maximal denominator of coefficients in approximating exact cuts
  • exact/allownegslack: whether negative slack variables in exact Gomory cuts should be used
  • exact/lpinfo: whether the exact LP solver should display status messages
  • constraints/exact{linear,sol}/{sepafreq,propfreq,proptiming,eagerfreq,maxprerounds,delaysepa,delayprop,presoltiming}: functionality of constraint handlers exactlinear and exactsol
  • constraints/exactlinear/sortvars: whether binary variable coefficients should be sorted with decreasing absolute value in exactlinear constraints
  • constraints/exactlinear/{tightenboundsfreq,propcont,limitdenom,boundmaxdenom}: propagation of exactlinear constraints
  • constraints/exactlinear/{maxrounds,maxroundsroot,maxsepacuts,maxsepacutsroot}: separation of exactlinear constraints
  • constraints/exactsol/solbufsize: size of solution buffer in exactsol handler
  • constraints/exactsol/{minimprove,checkfpfeasibility,checkcontimplint,abortfrac,unfixfrac}: solution processing in exactsol handler
  • constraints/exactsol/maxstalls: maximal number of consecutive unsuccessful reparations in exactsol handler
  • certificate/filename, certificate/maxfilesize: certificate file
  • branching/pscost/discountfactor, branching/relpscost/discountfactor: discount factor for ancestral pseudo costs in pscost and relpscost branching rules
  • branching/collectancpscost: enable/disable recording of ancestral pseudo costs
  • branching/relpscost/dynamiclookahead, branching/relpscost/dynamiclookaheadquot, branching/relpscost/dynamiclookdistribution, branching/relpscost/minsamplesize: configure the dynamic max-lookahead criterion for strong branching: enable flag, fraction threshold, distribution choice, and minimum sample size
  • constraints/cumulative/maxtime: limit the time horizon and avoid integer overflow for unbounded variables
  • constraints/orbitope_full/forceconscopy, constraints/orbitope_pp/forceconscopy: whether non-model constraints of type full orbitope and packing/partitioning orbitope are copied to sub-SCIPs, respectively
  • propagating/symmetry/handlesignedorbitopes: whether to apply special symmetry handling techniques for orbitopes whose columns can be (partially) reflected
  • propagating/symmetry/usesimplesgncomp: whether symmetry components all of whose variables are simultaneously reflected by a symmetry shall be handled by a special inequality
  • propagating/symmetry/dispsyminfo: whether to print information about applied symmetry handling methods
  • propagating/symmetry/nautymaxlevel: limit on depth level of Nauty's search tree
  • presolving/implint/convertintegers: whether implied integrality should also be detected for enforced integral variables
  • presolving/implint/columnrowratio: ratio of rows/columns where the row-wise network matrix detection algorithm is used instead of the column-wise network matrix detection algorithm
  • presolving/implint/numericslimit: limit for absolute integral coefficients beyond which the corresponding rows and variables are excluded from implied integrality detection
  • write/implintlevel: whether integrality constraints should be written for implied integral variables (regarded by cip, mps, lp, rlp, pip, fzn, and gms writers)
  • iis/∗
  • presolving/milp/enablecliquemerging: whether to enable clique merging in PaPILO
  • presolving/milp/maxedgesparallel: maximal number of edges in the parallel clique merging graph
  • presolving/milp/maxedgessequential: maximal number of edges in the sequential clique merging graph
  • presolving/milp/maxcliquesize: maximal size of cliques considered for clique merging
  • presolving/milp/maxgreedycalls: maximal number of greedy max clique calls in a single thread
  • heuristics/dks/∗: heuristic decomposition kernel search
  • relaxing/benders/continueorig: whether original problem should continue solving after the completion of the Benders' decomposition algorithm in the Benders' relaxator, if the problem is not solved to optimality
  • relaxing/benders/nodelimit: node limit for the Benders' decomposition master problem in the Benders' relaxator; by default the limits from the original SCIP instance are copied
  • conflict/usegenres, conflict/reduction, conflict/mbreduction, conflict/maxvarsfracres, conflict/resfuiplevels, conflict/fixandcontinue, conflict/maxcoefquot: control generalized resolution conflict analysis
  • lp/minsolvedepth: lower bound on the depth at which LPs are solved
  • reading/opbreader/maxintsize: maximal intsize above which an OPB instance is rejected
  • reading/nlreader/binary, reading/nlreader/comments: adjust writing of nl files
  • nlpi/conopt/priority: priority of the CONOPT NLP solver
  • randomization/randomseedshiftmultiplier: multiplier for the shift set by randomization/randomseedshift; the shift is multiplied by (6*randomseedshiftmultiplier+1), with the default value for randomseedshiftmultiplier set to 10 now; this default value is expected to change with every major release; setting the parameter to 0 restores SCIP 9 behavior

Other Changes

  • removed LP solver interface lpi_spx1, which used the old SoPlex interface; renamed lpi_spx2 to lpi_spx
  • removed cons_abspower.{h,c}, cons_quadratic.{h,c}, and cons_soc.{h,c}

Build system

  • new option SYM=dejavu to choose Dejavu for computing symmetries
  • changed the default for TPI to tny
  • added build flag CHECKSTAGE=auto to control stage checks in API function calls
  • removed LPS options spx1 and spx2, only LPS=spx is available to select SoPlex now
  • removed previously deprecated PARASCIP option, use THREADSAFE=false instead to disable thread-safety

Makefile

  • added build flag EXACTSOLVE=<true|false|auto> to turn exact solving mode on, off, or turn it on if all necessary dependencies are available
  • added build flag MPFR (default: false) to link with the multiprecision floating-point library, needed when SoPlex is also built with MPFR=true for precision boosting in rational solving mode
  • added build flag CONOPT (default: false) to link to the CONOPT NLP solver
  • link-time-optimization can be enabled on Linux and macOS with gcc and clang by setting LTO=true, default is false
  • revised SANITIZE options: removed SANITIZE=full, added SANITIZE=thread, SANITIZE=address, and SANITIZE=memory to enable thread, address, and memory sanitizers, respectively, in addition to undefined behavior sanitizer; changed default to SANITIZE=false
  • default settings for makefile variables in make.project are now only used if variable hasn't been set already
  • the symlink $(LIBDIR)/include/papilo should now point to the src subdirectory of a PaPILO repository or the headers directory of a PaPILO installation without TBB; pointing to the directory of a PaPILO repository still works, but is deprecated
  • removed option to link TBB library, as this is not used by default when PaPILO has not been built via cmake (use USRCXXFLAGS=-DPAPILO_TBB USRLDFLAGS=-ltbb to enable TBB for PaPILO)
  • LPS=spx is no longer mapped to LPS=spx2, which changes the name of the generated LPI libraries and binaries when using SoPlex
  • removed OPENSOURCE flag

Cmake

  • added build flag EXACTSOLVE=<on|off|auto> to turn exact solving mode on, off, or turn it on if all necessary dependencies are available
  • added build flag CONOPT (default: off) to link to the CONOPT NLP solver and variable CONOPT_DIR to specify the path to CONOPT
  • link-time-optimization can be enabled if supported by compiler by using -DLTO=on, default is off
  • replaced SANITIZE_XYZ=(on|off) options by SANITIZE=(on|off|thread|address|memory); undefined behavior sanitizer is always enabled if not SANITIZE=off (the default)
  • increased minimal required cmake version to 3.11
  • scip-config.cmake now defines a variable SCIP_COMPILE_FLAGS, which could be used to compile code that builds against SCIP via cmake; currently, this only passes on the sanitizer flags that were used to build libscip
  • removed automatic download and build of Bliss during cmake configuration when -DSYM=(s)bliss; a Bliss installation from https://github.com/scipopt/bliss can be specified with -DBLISS_DIR
  • removed option LEGACY

Fixed bugs

  • fixed bug related to unreleased data for the Benders' decomposition framework; when reading an SMPS file and applying Benders' decomposition, data is created that was not correctly released; also, data within the Benders' decomposition framework was not appropriately reset; the data is now released/reset as expected
  • to fix a bug where duplicate cuts from different constraint handlers were not recognized, SCIPrealHash() was changed to be stable around shortly representable numbers, and a numerical tolerance for comparing cutting plane efficacy for the aggregation separator is introduced
  • accept fractional continuous implied integral variables in heuristic "completesol"
  • invalidate activity with contradicting infinity contributions
  • avoid integer overflow in cumulative constraints triggered by unbounded variables, see new parameter constraints/cumulative/maxtime
  • allow negative update in SCIPconsAddUpgradeLocks() to unlock constraint upgrade
  • fixed memory leaks when LP, MPS, and OPB/WBO readers abort unsuccessfully
  • removed erroneous catching of objective-changed events in intobj separator; instead, the separator no longer executes within probing with changed objective function
  • propagator dualfix no longer fixes variables to infinity to avoid issues when transferring the solution to the original problem
  • track and check bounds on the coefficients that is used for a variable in aggregations of other variables to improve numerical stability
  • corrected the upgrade of full orbitopes to packing/partitioning orbitopes in case the orbitopal symmetries form a proper subgroup of a component's symmetry group
  • aggregate integer variable to not in clique variable in cliquePresolve() of xor constraints to avoid infeasible solutions
  • fixed memory leak in dynamic partition search primal heuristic
  • fixed issue with file existence check in XML parser when SCIP was build with ZLIB support on Windows
  • fixed thread-safety issue when using CppAD and user-defined expression handler
  • fixed typo in #pragma directive of redistributed nauty.h

Miscellaneous

  • removed 4th number in SCIP version; the new format is major.minor.patch
  • changed sassy to the version included in Dejavu
  • updated ampl/mp to v4.0.3
  • the CIP reader now sets an objective offset instead of adding a variable fixed to the objective offset
  • the solchecker tool has been extended for rational values
  • SCIPclassifyConstraintTypesLinear() classify a varbound only when a binary variable is present
  • the internal limit MAXGENNUMERATOR has been increased to allow more generators of symmetry groups, especially for problems with many variables