Repository navigation
Support-type bound: fast exact vertex enumeration - #50
Merged
Merged
Conversation
… vertex enumeration Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # CHANGELOG.md
Co-authored-by: Cursor <cursoragent@cursor.com> # Conflicts: # CHANGELOG.md
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
_polytope_verticestried every set ofn - 1rows of the support-type polytope (n + 2(2^n - 1)rows) inFractionarithmetic. For a 4-state survey support with 6 maximal rectangles that isC(132, 5) ≈ 3.4e8exact solves: hours, and it is why most 4-state survey runs hit their hard timeout before any time budget could act.Now:
_irredundantdrops rows the remaining rows imply. A row is dropped only when an exact LP dual bound (certificates.certified_lp_minimum) proves its maximum is at most its right-hand side; nonnegativity rows are always kept. 261 rows -> 40 for 7 rectangles.Timings: 6 rectangles, hours -> 0.3 s; 7 rectangles, 7 s. (2, inf): G = 2 - 3/8 log2 3 and the certified flow bound 1.49702 are unchanged.
Test plan
tests/test_generator_bounds.py: hypothesis test that the pruned enumeration equals brute force on random sparse 3x3 supports; a 7-rectangle staircase support runs in < 60 s.Made with Cursor