Skip to content

v2.0.0-rc.1

Pre-release
Pre-release
Compare
Choose a tag to compare
@SSoelvsten SSoelvsten released this 15 Mar 16:30
· 146 commits to main since this release

New Features

  • bdd_printdot(f, out) and zdd_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 Quantification
    • exec_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 into exec_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 setting exec_policy::quantify::transposition_max to 0.
  • Replaced the old adiar::bool_op in favour of an adiar::predicate<bool, bool>.

Contributors