Add more BDD packages
SSoelvsten opened this issue · comments
An extensive list can be found here: https://gist.github.com/genadyp/0f0ee62d43492b7fc155e98716e35124
C / C++
-
CUDD ( #17 )
A very efficient and the most used BDD package using depth-first recursion, a unique node table and a memoization table. It shows signs of being a long-living/old project, so getting it to run is not trivial, even when one tries to use the CMake enabled repositories here on GitHub. -
CAL ( #48 )
A BDD package using breadth-first manipulation algorithms to make it able to deal with external memory, The algorithms still use a hash table for random-access to each layer. So, if a layer grows larger than the available memory (incl. the space needed for the FIFO queues) then it shows the same I/O issues as other packages. -
MTBDD
A BDD package with a fascinating design on its unique node table, mixing breadth-first and depth-first manipulation, and multi-core systems. It is missing some features though, such as satcount, restrict, and quantification. We can probably get around this by always returning -1 for satcount and rewriting all other operations into an ITE or Apply.The source code is available here
-
This was requested from peer reviewers.
-
BiDDy
A BDD package for academic usage that supports multiple variants of decision diagrams. From its README.md it looks quite simple to set up.
Rust
One can compile a Rust-to-C FFI which then can be reexposed in the adapter's interface.
- lib-bdd ( #105 )
A Rust implementation of BDDs, where each BDD owns its own memory. That is, it is a recursive BDD package without a unique node table. This provides quite an interesting "baseline". - OxiDD ( #110 )
A modern, abstracted, and multi-core implementation of decision diagrams. This already provides BDDs and ZDDs with competitive performance to CUDD and Sylvan.
Java
A C++ program can start a Java VM and call methods on its classes. This can be nicely hidden away in the adapter's interface.