Skip to content

Releases: scipopt/papilo

v3.0.0

24 Nov 13:30

Choose a tag to compare

License changes

The license of PaPILO has changed to the Apache License 2.0.

Features

The MPS Parser can now handle maximization problem (OBJSENSE MAX).

Interface changes

New API functions

  • ProblemBuilder: setColImplIntAll() to set all implied integrality flags at once.
  • PresolveOptions: early_exit_callback if a calling program wants to forcefully stop PaPILO.

New parameters with default values

  • cliquemerging.maxedgesparallel = 1000000: maximal number of edges in the graph constructed for parallel clique merging
  • cliquemerging.maxedgessequential = 100000: maximal number of edges in the graph constructed for sequential clique merging
  • cliquemerging.maxcliquesize = 100: maximal size of cliques considered for clique merging
  • cliquemerging.maxgreedycalls = 10000: maximal number of function calls for greedy clique in a single thread in clique merging
  • cliquemerging.enabled = 0: is clique merging enabled?
  • dualinfer.minboundred = 0.001: minimum relative reduction to accept a bound change in dualinfer
  • presolve.max_reduction_seq = 1000000000: abort the sequential executed presolver after a specified number of reductions
  • cliquemerging.maxcalls = 1: maximum number of calls to the clique merging presolver

Data Structure:

  • Postsolve: The event FixedColInf contains now also the information whether the opposing bound is infinite.
    Note that Postsolving is no longer backwards compatible. The PostsolveStack for this entry is changed from (ind = [col,...], val=[bound,...]) to (ind = [col,is_inf, ...], val=[0,bound,...]).

Build system

  • for cmake >= 3.30, CMP0167 is enforced and BOOST_ROOT no longer supported; use Boost_DIR instead with these cmake versions
  • disabled default solvers and require linking when enabled
  • recognize also Gurobi 10 to 13 libs automatically

Miscellaneous

  • the time limit is now checked while applying the presolve reductions

For a detailed description of the new features, see the SCIP Optimization Suite release report.

For downloads of prebuild libraries and executables, check https://scipopt.org/index.php#download.

v2.4.4

23 Oct 13:55

Choose a tag to compare

Fixed bugs and other minor changes

  • suppress compiler warnings from GCC 12 with Boost < 1.85
  • support renamed verbosity levels in SoPlex
  • fixed constructor of Solution class
  • remove check for OpenMP if calling cmake with -DHIGHS=on

v2.4.3

21 Jul 16:02

Choose a tag to compare

Fixed bugs

  • Components: Find set representatives before unifying components
  • Stuffing: Clear singleton columns for unique stuffings
  • Trivial: Run trivial presolving in every round

Build system

  • disable setting the boolean variable MACOSX_RPATH to a string value to actually enable @rpath usage

v2.4.2

16 Apr 07:10

Choose a tag to compare

Fixed bugs

  • SCIP interface: Provide implied integrality when setting up component problem
  • HiGHS interface: Enforce integrality of variables that are marked as both integral and implicit integral
  • Gurobi interface: Declare implied integral variable with binary bounds to be binary

Build system

  • use CMake CONFIG mode for linking SoPlex, SCIP, and HiGHS

v2.4.1

30 Jan 16:03

Choose a tag to compare

Fixed bugs

  • SparseStorage: Determine end pointers without behind last accesses

Build system

  • improved search for dependencies when another tool uses papilo-config.cmake
  • updated the unit testing framework catch from 2.13.8 to 3.7.0
  • link the executable via the Fortran compiler when clusol is used

v2.4.0

06 Nov 17:02

Choose a tag to compare

Interface changes

Changed parameters

  • presolve.abortfac = 0.00080000000000000004: abort factor of weighted number of reductions for exhaustive presolving
  • presolve.lpabortfac = 0.01: abort factor of weighted number of reductions for exhaustive LP presolving

New parameters with default values

  • numerics.useabsfeas = 1: whether to use an absolute tolerance for feasibility checks
  • presolve.abortfacfast = 0.00080000000000000004: abort factor of weighted number of reductions for fast presolving
  • presolve.abortfacmedium = 0.00080000000000000004: abort factor of weighted number of reductions for medium presolving
  • presolve.lpabortfacfast = 0.01: abort factor of weighted number of reductions for fast LP presolving
  • presolve.lpabortfacmedium = 0.01: abort factor of weighted number of reductions for medium LP presolving

Build system

  • updated FindTBB.cmake
  • revised the CMake configuration to export the PaPILO dependencies (papilo-config.cmake)

Fixed bugs

  • all fast presolvers: maintain changed activities of current and last round to avoid missing reductions
  • FixContinuous: only fix column which contribution deviates by at most epsilon in every row
  • Components: identify fixing a component to an optimal solution as strong dual reduction

v2.3.1

14 Sep 05:11

Choose a tag to compare

Fixed bugs

  • DominatedCols: compress set of dominations topologically to avert memory exhaustions
  • Input and Output: handle floating point numbers precisely in parsers and writers
  • OPB-Parser: handle additional whitespaces
  • ParallelColDetection: only merge integral parallel columns for integral column scale
  • ParallelColDetection: reduce complexity of hole detection for integral parallel columns
  • Probing: eliminate computational overhead in row propagation
  • Propagation: handle constraint propagation more carefully by applying feasibility instead of epsilon tolerance
  • SimpleSubstitution: correct feasibility tolerances on euclidean coprime substitutions
  • SingletonCols: order effective side changes to avoid invalid infeasibility
  • SingletonStuffing: normalize and order sides to avoid invalid infeasibility
  • Statistics: avoid counting calls of symmetry extensions additionally
  • Trivial: mark activity redundancy in trivial row presolving

Build system

  • fixed build against HiGHS 1.7.2
  • TBB is now no longer download automatically; to enable the download, set option TBB_DOWNLOAD to on
  • added check whether linking of libatomic is necessary and possible to make std::atomic available

Known issues

  • SingletonCols: normalize if substituting constraint in the objective (when dual-postsolve is active)

v2.3.0

21 Jun 10:26

Choose a tag to compare

Interface changes

New parameters with default values

  • presolve.maxrounds = -1 : maximal number of rounds (-1: unlimited, 0: cleanup)
  • introduced preprocessor variable PAPILO_API_VERSION to indicate API changes

Data structures

  • statistics have an additional integer variable single_matrix_coefficient_changes to count the coefficient changes apart from variable substitutions and constraint deletions
  • add PostsolveStatus to namespace papilo (PAPILO_API_VERSION 1)

Fixed bugs

  • SingletonCols: normalize if substituting constraint in the objective (primal-postsolve only)
  • Postsolve: round primal solution values close to zero when substituting
  • VeriPB: encode INFINITY differently to prevent SIGSEGV if executed in Rational
  • VeriPB: encode fixed variables in a separate array to avoid problems with casting infinity
  • VeriPB: ensure that numbers are casted to integers when writing in the certificates
  • VeriPB: when updating the rhs/lhs of parallel cols distinguish the case factor greater or less than 0
  • VeriPB: fix bug leading to endless loop when reconstructing the fractional numbers during sparsify

Known issues

  • SingletonCols: normalize if substituting constraint in the objective (when dual-postsolve is active)
  • VeriPB: in Rational mode using infinity to encode fixed variables can lead to wrong calculations

v2.2.1

14 May 11:25

Choose a tag to compare

Build system

  • header only works now as intended (Boost Serialization)
  • add compile option -ffp-contract=off or /fp:precise to enhance reproducibility across different systems
  • disable building convMPS and duplicates

Fixed bugs

  • DualFix: lock rows if variables are dual-fixed to infinity to avoid conflict when dual-postsolving
  • ParallelColDetection: avoid segfault by handling already fixed variables separately during sorting
  • ParallelColDetection: mark deleted parallel columns as modified to avoid problems when scanning conflicts during the application of the transactions
  • ParallelRowDetection: in dual-postsolving flip bound status of non-basic variable for negative factor
  • Propagation: avoid numerical difficulties
  • SimpleSubstitution: ensure coprime-ness of coefficients for infeasible detection for linear diphantine equations
  • Stuffing: store row to allow correct dual-postsolving

Miscellaneous

  • update version of fmt from 6.1.2 to 7.1.3 due to deprecation
  • MPS-Parser parses files numerically exactly if rational arithmetic is used

v2.2.0

26 Mar 11:26

Choose a tag to compare

Performance improvements

  • Symmetries: For binary problems ParallelCols adds symmetry-breaking constraints to avoid introducing non-binary integer variables via parameter

Interface changes

  • CML: new options dual-reduced-solution/costs-reduced-solution/basis-reduced-solution to pass the dual/reduced costs/basis information of the reduced solution via command-line to PaPILO in the postsolve call
  • Boost: program_options is no longer required but needed to use PaPILO via command-line.

New API functions

Changed parameters

New parameters with default values

  • verification_with_VeriPB = 0 : should PaPILO print a VeriPB log (only for PseudoBoolean problems)?
  • veripb.verify_propagation = 0 : how to log the proof of verification? 0: reverse unit propagation, 1: Addition in polish notation
  • parallelcols.symmetries_enabled = 0 : should ParallelCols add symmetry-breaking constraints instead of introducing new variables?

Data structures

Fixed bugs

  • SimpleProbing: avoid unstable replacements of columns with small ranges
  • if PaPILO solves the problem a backend solver is no longer called
  • DualInfer: add percentage of bound change as stop criterium for dual-propagation
  • CMake: Libs are available when installing with CMake

Miscellaneous

  • Ortools: PaPILO parses the dual solution and the reduced costs from ortools
  • HiGHS: PaPILO supports HiGHS version 1.3+
  • VeriPB: prints VeriPB 2.0 parseable certificate for pseudo-Boolean problems in the log
  • OPB-Format: PaPILO can now parse files in linear opb format
  • RoundingSat https://gitlab.com/MIAOresearch/software/roundingsat is available as PseudoBoolean solver
  • make testcluster script extended by SKIP_PRESOLVE and SOLVE_EXECUTABLE to solve the reduced/original problem
  • make testcluster script extended to verify PaPILO certificates (experimental only)