Features
- parse pseudoboolean constraint from CIP format (and add linear-"and"-reformulation)
- added check for absolute and relative gap limits at end of synchronization in concurrent solving mode, in order to terminate earlier;
note that if the concurrent solve is stopped due to a gap limit, the "winner" solver will have an interrupted solution status and
its primal and dual bounds may not be the best possible ones (useSCIPgetConcurrentPrimalbound()andSCIPgetConcurrentDualbound()instead)
Performance improvements
- imposed stricter limits on the size of disconnected components which may be solved separately during presolve
- use individual slack variables also for constraints indicated by a common binary variable to use tighter formulation by default
- when computing symmetries using Nauty, iteration limits are now available to terminate Nauty early
- reoptimization now also stores propagations from propagators if
reoptimization/saveconspropis enabled;
the parameter will be renamed toreoptimization/savepropin a next major release
Fixed bugs
- Benders' decomposition subproblems that are always infeasible are correctly handled and the complete problem is declared infeasible
- skip linear constraint propagation if the residual activity bound cancels the side precision
- correct bound tracking to make the evaluation of primal-dual-integrals work
- skip aggregations on fixed variables in milp presolver to avoid errors for earlier versions of PaPILO
- use indices of negation counterparts and accept fixings when ordering and-resultants of pseudoboolean constraints
- update locks on model variables before removing pseudoboolean constraints in presolve
- reformulate soft pseudoboolean constraints with linear constraints if the indicator decomposition is disabled
- add workaround for recent HiGHS versions resetting the model status when changing the presolve option after a solve
- avoid hashmap key error in removal of doubletons and singletons in dual presolve of setppc constraints by updating constraints and corresponding hashmaps after each multi-aggregation
Interface changes
New API functions
- added
SCIPtpiIsAvailable()to check whether a working task processing interface is available (TPI != none) - added
SCIPtpiGetLibraryName()andSCIPtpiGetLibraryDesc() SCIPdelCons()can now also be called inSCIP_STAGE_TRANSFORMED- added
SCIPstrcasecmp()andSCIPstrncasecmp()for case-insensitive string comparison - added
SCIPbendersSubproblemsAreInfeasible()to return if at least one subproblem has been identified as being
infeasible prior to performing any variable fixing
New parameters
presolving/milp/abortfacexhaustiveto control the abort threshold for exhaustive presolving in PAPILOpresolving/milp/abortfacmediumto control the abort threshold for medium presolving in PAPILOpresolving/milp/abortfacfastto control the abort threshold for fast presolving in PAPILOconstraints/components/maxcompweightto determine the maximum weight for a disconnected component that is solved during presolveconstraints/components/contfactorcounts the contributing factor of a single continuous variables with respect to the weight limit specified byconstraints/components/maxcompweightconstraints/indicator/usesameslackvarto decide whether the same slack variable should be used for indicators constraints with common binary variablepropagating/symmetry/nautymaxncellsandpropagating/symmetry/nautymaxnnodesto set iteration limits in Nauty (only available if build withSYM=nautyorSYM=snauty)
Changed parameters
presolving/milp/threadsis now only available if PaPILO is built with TBB- changed default of
numerics/recomputefacto 1e+6 to aim at relative epsilon precision
Build system
Cmake
- attempted to fix detection of CPLEX library on macOS and Windows systems
Testing
- added parameter
FILTERfor tests/Makefile to run only tests with a specific pattern (ctest with-R FILTER)
Miscellaneous
- adjusted Gurobi interface for Gurobi 12
- reordered events:
BESTSOLFOUND/NODE_FEASIBLEare now processed before the nodes are cut off and beforeNODE_DELETEevents are processed - removed
#defineofgetcwd(in case of Windows builds) inscip/def.h - the
#defineofstrcasecmpandstrncasecmp(in case of Windows builds) inscip/def.hwill be removed with SCIP 10;
useSCIPstr(n)casecmp()(scip/pub_misc.h) instead