--negotiate: PathFinder rounds on the empty board before routing

Every connection is routed N times on the empty board, where routes may
share cells at a price that doubles each round for every other net on a
cell, and a cell that stays shared gains history. The real routing then
pays that history on free cells, so the first routes stop taking the space
later routes (a fine-pitch part's escapes) have no way round. Off by
default.

The old history term never steered: it only accrued at rip-up fights,
after the first routes had claimed the contested space, and routed
connections are never revisited in later passes.
This commit is contained in:
2026-10-03 14:45:59 -06:00
parent 7c076d9995
commit 09c58ea630
6 changed files with 179 additions and 4 deletions
+2
View File
@@ -99,6 +99,7 @@ def route_board_exact(
seed: int | None = None,
route_first: frozenset | None = None,
access_cost: float = 0.0,
negotiate: int = 0,
rollback: bool = True,
net_widths: dict[int, int] | None = None,
via_drill: int | None = None,
@@ -134,6 +135,7 @@ def route_board_exact(
seed=seed,
route_first=route_first,
access_cost=access_cost,
negotiate=negotiate,
rollback=rollback,
net_widths=net_widths,
via_drill=via_drill,