Releases: CPMpy/cpmpy
Releases · CPMpy/cpmpy
Release v0.10.1
Release notes
Fixed
This is a hotfix release due to a bug discovered in bounds computation.
- Bounds for pow and mod (cherry picked for this hotfix) #1012
Full Changelog: v0.10.0...v0.10.1
Release v0.10.0
Release notes
Added
- New solver: Rc2 MaxSAT solver #729
- Expended
to_cnfusingpindakaasencoding backend #782 - Linearisation of multiplication between Boolean and Integer #769
- Solution callback for Hexaly #787, #809
- Start of solver parametrised testsuite #817
- Documentation overview of solver capabilities #728
- Typehints and documentation update for global constraints #812
- Typehints for Solve and SolveAll #775
- OCUS in tools, allowing meta-constraints on MUSes #698
- Fix supported solver version ranges #816
- Transversal / hitting set example (contributed by @nandorsieben) #790
- Nurserostering benchmark #789
- Prediction+optimisation example of scheduling surgeries under uncertainty 5a87c5e
- Decision-focused learning example #621
Internal improvements
- Globals define their own negation #703
- Change
cp.sum(*iterable, **kwargs)tocp.sum(iterable, **kwargs)#756 - Division and Modulo as global functions #807
- Refactor decompose for global functions #793
- Refactor and update Cumulative and NoOverlap constraints #694
Changed
- Throw
ModuleNotFoundErrorwhen module is not installed #825
Fixed
- Fix support for newest OR-Tools 9.15 release #821
- Check Hexaly license before using solver #826
- Fix
to_cnfclause bypass issue #824 - Fix bug handle pdk unsat with conditions #811
- Missing packaging dependency in setup.py #813
- Abs constraint handle None #794
- Timeout under assumptions for Exact #805
- Support for expressions in start, duration and end in CPO #802
- Consistent version checks #792
- Missing constraint tags for Pumpkin #799
- Z3 negate maximisation objective #786
- Scaled Booleans in Pumpkin interface #776
Full Changelog: v0.9.29...v0.10.0
v0.9.29
v0.9.28
v0.9.27
Release notes
Added
- New solver: CPLEX ILP solver #583, #762, #763
- New solver: Hexaly local search solver #718
- New tool: CPMpy cli (get version information on all subsolvers) #693
- Use of CSE in
flatten_objective#730 - Constraint tagging for
pumpkin#720 - Solver capability overview in docs d8d3a2d
- PSP-lib dataset and loader #701
- Safen name collision between user and aux variables #731
Changed
- Update
pindakaasto version 0.2.1 #753 - Exclude slow examples from testset #746
- Safe variable names #731
- SolverInterface consistency improvements and added tests #726
- Improve testing of examples #651
- Modernize shebangs of examples #644
- Linearize improvements e721b0a
- Update waterfall (added automated int-to-bool) 710ec42
- Collection of improvements to GitHub README
Fixed
Precedenceglobal decomposition #742- Minor bugs in examples #739
gnureadlinetypo insetup.py#722- Non-contiguous array handling in
cpm_array#738 - Remove simplification of nullifying arguments from constructors #725
- Skip psplib in testset due to random failure on GitHub actions 7a15d07
- (Pin Pumpkin solver git commit #719) outdated by #720
Full Changelog: v0.9.26...v0.9.27
v0.9.26
Release notes
Added
- New solver: Pumpkin LCG solver (by the ConSol Lab at TU Delft) #669
- New solver: Pindakaas library for transforming pseudo Boolean to CNF #600
- New global:
Regular#677 - New tool: Tooling for the XCSP3 format: dataset, loader, CLI, benchmarking #597
- Common Subexpression Elimination (CSE) #679
- Support for integer constraints for Boolean solvers using new
int2booltransformation #653 - Solution hinting for Gurobi #691
- Solution callback for CP Optimizer #682
- Acces to (installed) solver status/version: call
.version()on a specific solver or onSolverLookupto get an overview. Or usecp.SolverLookup.print_version()for pretty printing. #628 - Support for canonicalisation of subtraction expressions #686
- Allow use of Boolean constants in weighted sum #711
- Added testset for incremental assumptions
- Catch beginner mistakes linked to incorrect usage of boolean expression #660
Changed
- Refactoring of int2bool/pysat #714
- Updated instructions for adding a new solver with request to add solver to overview table
- Improve efficiency
only_implies: avoid retransform if no subexpression #680 - Consistent state reporting of
.solve()across all solvers #545 - Improved docs and error messages for
canonical_comparison#678
Fixed
- Support special cases for Xor global (boolean constants, single argument) #717
- Missing
optimalexit status for GCS #705 - Missing solution for empty csp when enumerating #674
- Use of constants in globals #700
- CSE edge-case in
only_numexpr_equality#696 - Choco
shorttablestar symbol data type #697 - Ensure python-native expression values to prevent unexpected behaviour with numpy constants #695
- Correctly handle numpy integers in
eval_comparison#683 - CP Optimizer fix cumulative with zero-duration task #681
- Fix incorrect decomposition of
Inverseglobal constraint #673
Full Changelog: v0.9.25...v0.9.26
v0.9.25
Release notes
Added
- New solver: IBM CP Optimizer #576
- New global:
ShortTable#469 model.add()as new default to add constraints to model (same behaviour as+=) #640- Easy install of all solvers through the
"all"optional dependency, i.e.pip install cpmpy[all]#665 - More complex variants of the Sudoku puzzle (in examples) #577
- API summery sheet #629
- Linearisation for
div,absandmod#516 - Linearisation for subtraction #639
divlinearisation for Gurobi #593- Native cardinality constraints for PySAT #588
wsumsupport for PySAT- Support for constants in
Elementglobal function #630 SolverLookupnow has.supported()and.print_status()to get information on the available solvers on the current system #641solveAll()now accepts solver-specific kwargs, just likesolve()#582- Optional dependencies for solvers and tools (setup.py) #599
- Documentation for all CPMpy exceptions #622
Changed
- Bumped minimal Python version from 3.7 to 3.8 #575
modanddivnow default to integer division- Improved reading of DIMACS formatted files #587
- Avoid max-based decomposition for
absif possible #595 - Cleanup semantics of Boolean Python builtins #602
- Performance optimisation of
simplify_bool#592 - Ensure
AllDifferentdecomposition is linear #614 - Much improved README
- Improved docs formatting, especially for the Python API docstrings #603
- Improved API documentation of explanation tools #512
- Better exceptions for explanation tools #512
- Improve documentation of non-standard solver args passing for Exact #616
- General documentation improvements #619, #633, #634
- Skip subset of
PySATtests when optional dependencypblibis not available #668
Fixed
- Linearisation with boolean constants #581
- Linearisation of
AllDifferentwith integer constants #547 - Side conditions for
Precedenceglobal #589 simplify_boolon non-CPMpy expressions #626- Handling of negative variables in objective during linearisation #495
- Integers in
GCCglobal for Choco-solver #646 NValueExceptNfor single value range #645- Handling of empty clauses in GCS #662
- Missing user vars when calling
solveAll(), resulting in incorrect number of solutions #609 - Consistent handling of non-positive
time_limit#642 - Added
setuptoolsto required dependencies (can be missing on some installs) #664 - DIMACS tempfiles on Windows #601
Removed
- Removed support for Python version 3.7 #575
Full Changelog: v0.9.24...v0.9.25
0.9.24
Release Notes
Enhancements and Features
- Safening of partial functions: New transformation to safen partial function. #515
- Update Choco interface with native reification: Improved the Choco solver interface with native reification support. #526
- Reals in objective function: Added support for real numbers in the objective function. #529
- Better naive grow: Enhanced the "naive grow" strategy for better performance. #528
- Blocks world: Introduced a "blocks world" example for demonstration purposes. #533
- Examples Colab links: Added direct Colab links to examples for easier experimentation. #553
- Circuit decomposition for all ranges: Extended circuit decomposition to handle all ranges. #424
- Global function in Z3 objective: Introduced global functions in Z3 solver objectives. #560
- Z3 auto subsolver: Implemented automatic subsolver selection for Z3 when solving optimization problems. #567
- Parametrize solver tests: Streamlined solver test cases using parameterization. #572
- Linearize power: Added linearization for power operations. #538
- Improve Boolean normalization for PySAT: Enhanced normalization of Boolean terms for PySAT. #569
Performance Improvements
- Has subexpr optimization: Skip transformations of leaf expressions for improved efficiency. #532
- Only implied speedup: Optimized "only implied" handling for significant speedups. #541
- Distribute tests over CPUs: Distributed tests over 4 CPUs, reducing runtime from
21m30sto8m45s. #571 - ndvar_getitem optimization: Improved
ndvar_getitemby moving fetch casts to initialization. #550 - Remove inline imports: Instead use
import as xat top of file. #542
Bug Fixes
- Remove broadcast in min/max: Fixed issues when forwarding to built-in min/max functions. #536
- Convert numpy array in Table constraint: Ensured proper conversion of NumPy arrays to lists in Table constraints. #540
- Clear values on UNSAT: Added functionality to clear variable values when UNSAT is detected. #523
- Fix cpm_array with order='F': Resolved issues with
cpm_array()when using column-major order. #555 - Car sequencing index fix: Corrected indexing issues in the car sequencing problem. #565
Code Quality and Maintenance
- Improve exception messages: Enhanced clarity of exception messages and removed unused imports. #539
- Edits to the docs: Updated documentation for clarity and completeness. #530
- Gurobi license check: Separated Gurobi license checks into a distinct process. #566
- Standardize solver version checks: Unified approach to checking solver version compatibility. #568
- Update requirements: Upped our minimal python requirement from 3.6 to 3.7. #573
0.9.23
Quick release, because we want the updated tools to be available.
What's Changed
- Extension to tools: MARCO and SMUS
- Added tests for incremental solving and fixed incemental solving with objective in Exact
- Cumulative decomposition fix when capacity was numpy integer.
Full Changelog: v0.9.22...v0.9.23
v0.9.22
What's New
- New solver: GlasgowConstraintSolver (GCS)
- Upgraded to Exact 2
- Minizinc print: easily extract MiniZinc and FlatZinc text from CPMpy model.
- Update TEMPLATE.py to make it clearer how to add new solvers.
- SolverLookup gives clear error message in stead of returning None
- allow kwargs in Model.solve()
- call python builtins for sum, abs, min and max without expressions in the arguments.
- All solvers now have a native_model() function, to allow native solver access.
- It's now possible to name multiple new variables at once, by providing the names in a list.
- Linearize transformation can now rewrite modulo (if multiplication is supported)
- Fix behaviour of "all", "any", "max", "min", "sum", "prod" on higher dimensional NDVarArrays (maintain dimensionality)
- Value function of expressions now always returns a python integer, where it could sometimes be a numpy integer.
- Fixed performance issue where all solver vars where seen as user vars when solving with MiniZinc
Documentation
- Overall improvement of documentation
- update documentation of 'comparison' transformation
New Contributors
Thanks to 2 new contributors!
Full Changelog: v0.9.21...v0.9.22