Optional visual trace of backtracking search tree #814
+172
−26
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR makes three improvements to homomorphism search:
The main one is that an optional
BacktrackingTree
data structure is added to theBacktrackingState
. Ifdebug_homomorphisms(...)
is called rather thanhomomorphisms(...)
, then a list of homomorphisms in addition to aBacktrackingTree
are returned as a pair. This can be viewed in graphviz (see below).find_mrv_elem
picks which C-Set part to branch on, attempting to minimize the branching factor. It does this by finding, for each part, how many valid assignments there are. Previously it just counted how many valid assignments, rather than remembering what these were - this is fixed by just usingfilter
rather thancount
. I would expect this to have a positive performance impact, but this hasn't been benchmarked.When a successful assignment is found, there is a bit of logic to extract an
ACSetTransformation
from theBacktrackingState
. This has now been factored into a functionget_hom
.