Skip to content

Commit

Permalink
release 0.9.13
Browse files Browse the repository at this point in the history
  • Loading branch information
tias committed May 14, 2023
1 parent b911b0e commit e14c053
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 2 deletions.
41 changes: 41 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,46 @@
# Change log

## 0.9.13
Solid progress release.

To make more clear how well-supported each of the solvers are, we introduced a tiered classification:

* Tier 1 solvers: passes all internal tests, passes our bigtest suit, will be fuzztested in the near future
- "ortools" the OR-Tools CP-SAT solver
- "pysat" the PySAT library and its many SAT solvers ("pysat:glucose4", "pysat:lingeling", etc)

* Tier 2 solvers: passes all internal tests, might fail on edge cases in bigtest
- "minizinc" the MiniZinc modeling system and its many solvers ("minizinc:gecode", "minizinc:chuffed", etc)
- "z3" the SMT solver and theorem prover
- "gurobi" the MIP solver
- "PySDD" a Boolean knowledge compiler

* Tier 3 solvers: they are work in progress and live in a pull request
- "gcs" the Glasgow Constraint Solver
- "exact" the Exact pseudo-boolean solver

We hope to upgrade many of these solvers to higher tiers, as well as adding new ones. Reach out on github if you want to help out.

New above the hood:
* added 'DirectConstraint', a generic way to post solver-specific constraints which CPMpy does not implement, with multiple examples such as ortools' automaton, circuit, multicircuit
* added 'Count' global constraint with decomposition
* added 'GlobalCardinalityCount' (GCC) global constraint with decomposition
* added 'Inverse' global constraint with with decomposition
* a Boolean 'IfThenElse' global constraint with decomposition c->if_true & (~c)->if_false

New under the hood:
* a BoolVal() expression object for constants True/False, better handling/cleaning of Bool constants as a result
* added a highly efficient 'toplevel_list' transformation that all solvers call to get a list of CPMpy expressions, simplifies what to expect as input for transformations
* 'decompose_globals' is now a transformation that decomposes the unsupported globals, it also does it best to properly handle 'numeric' globals, reified globals and negated globals

Changed:
* added missing decomposition for 'Table' global constraint
* highly optimized the 'get_variables' transformation
* pushed bounds computation into the expressions, more robust and extensible
* removed custom deepcopy() for Python's better built-in one
* slightly better handling of incomplete (partial) functions, e.g. in bounds computation (ongoing work)
* fixed bugs in MiniZinc and Z3's rewriting, related to int vs bool

## 0.9.12
New:
* examples/ use notebooks with graphic visualisation whenever possible
Expand Down
4 changes: 2 additions & 2 deletions cpmpy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
- `solvers`: CPMpy classes that translate a model into approriate calls of a solver's API
- `transformations`: common methods for transforming expressions into other expressions, used by `solvers` modules to simplify/rewrite expressions
"""
# Tias Guns, 2019-2022
# Tias Guns, 2019-2023

__version__ = "0.9.12"
__version__ = "0.9.13"


from .expressions import *
Expand Down

0 comments on commit e14c053

Please sign in to comment.