Skip to content

Factorization algorithm computes incorrect result for some large complex graphs. #66

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

Open
wants to merge 5 commits into
base: main
Choose a base branch
from

Conversation

brianguenter
Copy link
Owner

@brianguenter brianguenter commented Mar 23, 2024

Fixes #65

Factorization can create new factorable subgraphs interior to an existing subgraph. The most general way to solve this problem is to rerun the dominance calculation on each subgraph where this condition is detected and then to recursively factor these subgraphs before factoring the containing subgraph.

This seemed too computationally expensive so I had special case code which appeared to work. But larger graphs tend to also have more complex internal structure which is more likely to give rise to these internal factorable subgraphs. The current code eventually fails as graphs get larger and their structure becomes more convoluted.

This PR will replace the existing algorithm with a dominance recomputation which will be executed only if internal subgraph creation is detected.

…lex graphs.

Fixes #65

added new_factor_subgraph! to eventually replace factor_subgraph!

changed definition of node_value field in Node to have a Union type instead of Any. May help performance.
…lex graphs.

Fixes #65

fixed factor_order. Used to sort by times_used first then by subgraph containment. This was based on an incorrect assumption that the times_used of a subgraph was always greater than or equal to the times_used of a containing subgraph.

Now sorts by subgraph containment, then by times_used, so contained subgraphs always get factored first.
@brianguenter brianguenter self-assigned this Apr 1, 2024
…lex graphs.

Fixes #65

changed field node_value of Node struct to type Any to match definition on main branch.
…lex graphs.

Fixes #65
removed matching terms optimization from +,- simplify_check_cache since it was generating incorrect results.
@moble moble mentioned this pull request Jun 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Factorization algorithm computes incorrect result for some large complex graphs.
1 participant