Releases: scipopt/papilo
Releases · scipopt/papilo
v3.0.0
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_callbackif 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 mergingcliquemerging.maxedgessequential = 100000: maximal number of edges in the graph constructed for sequential clique mergingcliquemerging.maxcliquesize = 100: maximal size of cliques considered for clique mergingcliquemerging.maxgreedycalls = 10000: maximal number of function calls for greedy clique in a single thread in clique mergingcliquemerging.enabled = 0: is clique merging enabled?dualinfer.minboundred = 0.001: minimum relative reduction to accept a bound change in dualinferpresolve.max_reduction_seq = 1000000000: abort the sequential executed presolver after a specified number of reductionscliquemerging.maxcalls = 1: maximum number of calls to the clique merging presolver
Data Structure:
Postsolve: The eventFixedColInfcontains 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_ROOTno longer supported; useBoost_DIRinstead 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
v2.4.3
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_RPATHto a string value to actually enable@rpathusage
v2.4.2
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
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
Interface changes
Changed parameters
presolve.abortfac= 0.00080000000000000004: abort factor of weighted number of reductions for exhaustive presolvingpresolve.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 checkspresolve.abortfacfast= 0.00080000000000000004: abort factor of weighted number of reductions for fast presolvingpresolve.abortfacmedium= 0.00080000000000000004: abort factor of weighted number of reductions for medium presolvingpresolve.lpabortfacfast= 0.01: abort factor of weighted number of reductions for fast LP presolvingpresolve.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
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
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
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
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)