v2.0.0-rc.1
Pre-release
Pre-release
New Features
bdd_printdot(f, out)
andzdd_printdot(A, out)
These now take a third optional Boolean argument,include_id
. If true, then the output includes the level-specific identifiers which are useful for debugging. By default, this is false and outputs a decision diagram as in most literature.exec_policy
now also includes heuristical variables for Nested Sweeping and Quantificationexec_policy::quantify::transposition_growth
: The maximum size the BDD may grow to repeat the initial transposition step.exec_policy::quantify::transposition_max
: The maximal number of sweeps. This value may be further decreased based on internal heuristics.
bdd_optmin(f, c)
New function to derive the assignment in f that is minimal with respect to a linear cost function c.
Optimisations
- Based on our experiments for v2.0.0-beta.3, the threshold to use levelized random access has been increased to half of what the replaced priority queue would use.
- Levelized Random Access now only depends on whether a BDD is indexable and not canonical.
- Added levelized random access to quantification. This improves performance, depending on the instance solved, by 0% to 40%.
Bug Fixes
- Multiple fixes (and extensions) to the statistics for Nested Sweeping.
Breaking Changes
- Canonicity of a BDD and ZDD is now a function rather than a member variable. The value is derived from the two underlying features of being indexable and sorted.
- The getters in
exec_policy
are generalized as a .get to match the .set (and to remove headaches in clashing definitions). - The
exec_policy::quantify
enum has been moved intoexec_policy::quantify::algorithm
. Simultaneously, it now only has two options: Nested and Singleton. This removes Partial completely. The previous meaning of Nested is intact by settingexec_policy::quantify::transposition_max
to 0. - Replaced the old
adiar::bool_op
in favour of anadiar::predicate<bool, bool>
.
Contributors
- Steffan Sølvsten ( @SSoelvsten )
- Erik Funder Carstensen ( @halvko )