A C++ library for multi-terminal (reduced ordered) interval decision diagrams.
You need to install bazel and have a modern C++ compiler.
With Bazelisk you can build an run with:
bazelisk build //...
bazelisk test //...
To generate a compile_commands.json
for clangd:
bazelisk run @hedron_compile_commands//:refresh_all
Started to work on it. Nothing concrete yet.
- The code is parametric on the type of variables and terminal elements.
- The terminal elements must form a lattice.
- The variable ordering is implicitly given by an internalizer which maps each variable to a unique index. The order on the indices becomes the variable order.
- reordering
void reorder(std::map<int, int> const & var_idx_bijection) { ... }
- swap operation for two variables adjacent in the ordering
- partial lookup for two steps in the variable order (needed in the swap)
- reordering is like bubble sort with the new order and using swap
- implement proper reference counting to manage the memory
- use c++ smart pointer ?
- map operation to transform the type of variables and terminal