Sifting Algorithm #535
Labels
blocked
This is to be done... another day!
✨ feature
New operation or other feature
🎓 student project
Work, work... but academic!
Milestone
The most successful approach for variable reordering in conventional BDD packages is the sifting algorithm. This algorithm depends on the ability to efficiently swap two neighbouring variables.
Preliminary Issues
label
tolevel
#407 , we begin differentiating between a node's level and its label.Tasks
Variable Swapping
Implement the variable swapping operation: given two variables x and y that are adjacent and x < y, swap their levels such that y < x.
Label or Level?
The basic idea behind the swapping algorithm is to move the nodes around in a way such that in-going edges can be preserved. To do this, we have to keep quite a few things in mind:
Note that there is a conflict above. Both (1) and (2) are trivial if the parents only know the label and not the level of its children. Yet, (3) wants the parents to be independent of the label and not the level. Here are some ideas for (slightly unsatisfactory) implementations of variable swapping:
Hopefully, we can come up with an approach that can cover (1), (2), and (3) above without having to update any parents or break the graph in an inconvenient way.
Node Preservation
Both the file for x and y need to keep (some of?) the original nodes.
Sifting Algorithm
If one has implemented variable swapping then the algorithm from [Ruddel93] should be possible to implement. Some ideas from [Ranjan97] might be useful. Furthermore, there are multiple optimisations on this algorithm one can extend it with to make it more competitive.
References
The text was updated successfully, but these errors were encountered: