Skip to content

Releases: scipopt/papilo

v2.3.1

14 Sep 05:11
Compare
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
Compare
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
Compare
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
Compare
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)

v2.1.4

26 Mar 11:23
Compare
Choose a tag to compare

Fixed bugs

  • DomCol: exclude parallel columns if dual reductions are disabled
  • DoubleToNEq: prefer variables with integral scalar over fractional scalar
  • DualInfer: check if propagating dual variables leads to infeasibility to return Unbounded or Infeasible
  • DualInfer: ensure the primal problem is bounded before changing constraints to equalities
  • Substitutions: if applying substitutions lead to small or huge coefficients leading to numerical troubles in the process

v2.1.3

26 Mar 11:23
Compare
Choose a tag to compare

New parameters with default values

  • max_consecutive_rounds_of_only_bound_changes = 500: PaPILO resumes with the next higher complexity class if the last n rounds only consisted of bound changes

Fixed bugs

  • fixing vector bound checks which failed if compiled with -D_GLIBCXX_ASSERTIONS (Fedora/ArchLinux)
  • SingletonRow: consider case if remaining coefficient is close to zero -> could lead to false variable fixings
  • increase Priority of FixContinuous to detect numerical difficulties earlier
  • ParallelRows: use correct lhs_inf/rhs_inf with negative scale factor under certain circumstances

Miscellaneous

  • Boost: minimal 1.81 requirement for Mac since compiler complained about deprecated declarations in Boost

v2.1.2

26 Mar 11:24
Compare
Choose a tag to compare

Fixed bugs

  • SimpleSubstitution: fixing bug in the infeasibility detection of the extended euclidean

v2.1.1

26 Mar 11:24
Compare
Choose a tag to compare

Fixed bugs

  • SimpleSubstitution: avoid abort because of calling extended_euclidean with negative coefficients

v2.1.0

26 Mar 11:24
Compare
Choose a tag to compare

Performance improvements

  • ParallelCol: reducing the amount of redundant transactions in case of multiple parallel integer columns
  • Probing: checks the time limit condition before propagating a variable
  • Probing: introduce new parameter to cap the badgesize
  • SequentialMode: execute functions like trivialPresolve only once per round and not after every presolver

Interface changes

New parameters with default values

  • probing.maxbadgesize = -1 : maximal number of probing candidates probed in a single badge of candidates (-1 deactivated)
  • ortools.solver_id = PDLP : LP solver of or-tools
  • dualfix.is_fix_to_infinity_allowed = true : should unbounded variables with objective value zero be fixed to infinity?

Data structures

Fixed bugs

  • ParallelRowDetection: lhs is updated correctly
  • fix fmt error: use correct amount of arguments for print statement
  • copy extended_euclidean.hpp during installation
  • fix bug in FindTBB module
  • ranged rows in MPS Files can now be parsed if they are specified as 'E'
  • postsolving FixInfinityCol works also in primal case
  • store data for FixInfinityCol correct if bounds are both infinity
  • PaPILO shows some behavior on different OS

Miscellaneous

  • Providing a way to build PaPILO without TBB (warning parallel design can not be used anymore)
  • Providing an interface to gurobi
  • Providing an interface to ortools (GLOP/PDLP)
  • Install all files (also externals) to the include/papilo folder
  • Presolving is aborted if presolvers are activated that do not support dual postsolve