Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optional visual trace of backtracking search tree #814

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

kris-brown
Copy link
Contributor

This PR makes three improvements to homomorphism search:

  1. The main one is that an optional BacktrackingTree data structure is added to the BacktrackingState. If debug_homomorphisms(...) is called rather than homomorphisms(...), then a list of homomorphisms in addition to a BacktrackingTree are returned as a pair. This can be viewed in graphviz (see below).

  2. 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 using filter rather than count. I would expect this to have a positive performance impact, but this hasn't been benchmarked.

  3. When a successful assignment is found, there is a bit of logic to extract an ACSetTransformation from the BacktrackingState. This has now been factored into a function get_hom.

@kris-brown
Copy link
Contributor Author

kris-brown commented Jun 22, 2023

Example of the search tree graphviz output on a schema with Triangles, Edges, and Vertices (note the hover text). The vertices are labeled by the parts of the domain ACSet, and the edges indicate the assigned part in the codomain ACSet.
Screenshot 2023-06-21 at 6 42 42 PM

@kris-brown
Copy link
Contributor Author

(TODO: Rebase and then tag Evan as a reviewer)

@github-actions
Copy link
Contributor

Review Checklist

Does this PR follow the development guidelines? Following is a partial checklist:

Tests

  • New features and bug fixes have unit tests
  • New modules have tests that are ultimately called by the test runner (test/runtests.jl)
  • Existing tests have not been deleted
  • Code coverage >= 90% or reduction justified in PR

Documentation

  • All exported functions, types, and constants have docstrings, written in complete sentences
  • Citations are given for any constructions, algorithms, or code drawn from external sources

Other

  • Style guidelines are followed, including indent width 2
  • Changes breaking backwards compatibility have been approved

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant