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/saveconsprop
is enabled;
the parameter will be renamed toreoptimization/saveprop
in 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/abortfacexhaustive
to control the abort threshold for exhaustive presolving in PAPILOpresolving/milp/abortfacmedium
to control the abort threshold for medium presolving in PAPILOpresolving/milp/abortfacfast
to control the abort threshold for fast presolving in PAPILOconstraints/components/maxcompweight
to determine the maximum weight for a disconnected component that is solved during presolveconstraints/components/contfactor
counts the contributing factor of a single continuous variables with respect to the weight limit specified byconstraints/components/maxcompweight
constraints/indicator/usesameslackvar
to decide whether the same slack variable should be used for indicators constraints with common binary variablepropagating/symmetry/nautymaxncells
andpropagating/symmetry/nautymaxnnodes
to set iteration limits in Nauty (only available if build withSYM=nauty
orSYM=snauty
)
Changed parameters
presolving/milp/threads
is now only available if PaPILO is built with TBB- changed default of
numerics/recomputefac
to 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
FILTER
for 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_FEASIBLE
are now processed before the nodes are cut off and beforeNODE_DELETE
events are processed - removed
#define
ofgetcwd
(in case of Windows builds) inscip/def.h
- the
#define
ofstrcasecmp
andstrncasecmp
(in case of Windows builds) inscip/def.h
will be removed with SCIP 10;
useSCIPstr(n)casecmp()
(scip/pub_misc.h) instead