Keep selective rerip repairs local with additive resource search - #176
Open
seveibar wants to merge 7 commits into
Open
Keep selective rerip repairs local with additive resource search#176seveibar wants to merge 7 commits into
seveibar wants to merge 7 commits into
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Benchmark This PRRun benchmarks by commenting on this PR: Everything after Examples:
Any PR whose title contains |
This was referenced Sep 8, 2026
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.
Selective reripping currently searches a Pareto frontier of distinct blocker-owner sets. Large graphs can spend substantial time enumerating those sets, then discard nearly complete routing because old owner dependencies form a cycle even after the owners have moved.
Use one shortest-path label per directed hop, minimizing occupied resource uses before routing cost. Repeated conflicts increase the cost of the resource that caused them, allowing the search to move past a repeating local conflict. Every owner encountered by the selected path remains in its rip set. Remove those owners and commit the cleared witness after rechecking every hop with the ordinary hard-constraint cost function. Other committed routes remain in place. This removes the historical-cycle and alternate-owner branches and avoids searching the newly cleared route again.
Relaxed search now includes static port penalties, congestion history, and the cost of a layer change in its secondary routing cost, so the witness does not ignore expensive cramped ports or via demand.
Ordinary routing uses a cached reverse shortest-path lower bound that includes port costs, reservations, and occupied ports. Adding routes can only remove available edges; removing routes clears the cache so that reopened corridors are available again. The relaxed search ignores entry direction and region crossings, and its cache follows the active goal, including partial-route goals.
The reverse search is resumable: it settles only the ports requested by ordinary A*, retaining its original occupancy snapshot until a rip invalidates it. Its indexed priority queue stores each unsettled port once, decreases priorities in place, and skips already-settled neighbors. This avoids stale heap entries and repeated distance work without changing edge costs or route selection.
Completed routing rounds retain the lowest region cost. The former segment-count selection could replace a substantially less congested route with a slightly shorter route, as long as both were below a ceiling derived from the first routing round. Removing that comparison eliminates 27 lines of selection logic.
A rejected or deferred goal transition no longer stops expansion of the other exits in its region. A six-port regression verifies that the router can go around a blocker and reach the goal through its other incident region without reripping.
Stacked on
fix/preload-preservation-on-current-pin(c1043b3), the dependency revision used by the autorouter. Caller-owned initial-assignment preservation remains unchanged.Validation: all 135 tests (7,990 assertions, including the existing routing snapshot) and the full TypeScript project pass. A deterministic queue regression covers priority decreases, ties, removal, and reinsertion; the occupied-port and resumed-search regressions remain unchanged. Captured production graph replays for SRJ18 samples 4, 6, and 12 preserve every routing iteration, statistic, and byte of route output. In sequential Linux ARM/Bun 1.4.2 replays, sample 12 drops from 39.95 to 22.25 seconds; native sample 6 drops from 22.65 to 18.74 seconds and sample 4 from 1.145 to 1.005 seconds. These are pathing diagnostics, not a claim about the complete hosted benchmark.
The pathing changes complete ordinary hard-constrained SRJ18 graph routing for samples 14 and 15 within the existing 2,000,000-iteration budget, without reaching the greedy final phase. True end-to-end autorouter runs on the preceding static-heuristic revision confirm graph completion but still have downstream DRC errors. Current full-board quality and performance validation is ongoing for the follow-up to tscircuit/tscircuit-autorouter#2442; this dependency PR does not claim the final >90% benchmark result.