From af4d8acc6efbade15f60ea93736c7e9cba7fe58d Mon Sep 17 00:00:00 2001 From: ShiboSoftwareDev Date: Sun, 2 Aug 2026 23:58:18 +0200 Subject: [PATCH 1/2] experiment: refresh directed guidance for occupied ports --- lib/core.ts | 14 ++++++++++++++ lib/directed-route-hop-heuristic.ts | 7 +++++++ 2 files changed, 21 insertions(+) diff --git a/lib/core.ts b/lib/core.ts index 748d6d6..47e158f 100644 --- a/lib/core.ts +++ b/lib/core.ts @@ -578,6 +578,20 @@ export class TinyHyperGraphSolver extends BaseSolver { this.resetCandidateBestCosts() const startingPortId = problem.routeStartPort[state.currentRouteId!] + const endingPortId = problem.routeEndPort[state.currentRouteId!] + + if (topology.portZ[startingPortId] !== topology.portZ[endingPortId]) { + this.problemSetup.directedHopCountToEndByRoute[state.currentRouteId!] = + createDirectedRouteHopHeuristic({ + topology, + problem, + portEndpointReservationNetId: + this.problemSetup.portEndpointReservationNetId, + portAssignment: state.portAssignment, + routeId: state.currentRouteId!, + }) + } + state.candidateQueue.clear() const startingNextRegionId = this.getStartingNextRegionId( state.currentRouteId!, diff --git a/lib/directed-route-hop-heuristic.ts b/lib/directed-route-hop-heuristic.ts index aa7a97d..fe02f1b 100644 --- a/lib/directed-route-hop-heuristic.ts +++ b/lib/directed-route-hop-heuristic.ts @@ -7,6 +7,7 @@ interface CreateDirectedRouteHopHeuristicContext { topology: TinyHyperGraphTopology problem: TinyHyperGraphProblem portEndpointReservationNetId: Int32Array + portAssignment?: Int32Array routeId: RouteId } @@ -33,11 +34,15 @@ const isRegionAvailableToNet = ( const isPortAvailableToNet = ( problem: TinyHyperGraphProblem, portEndpointReservationNetId: Int32Array, + portAssignment: Int32Array | undefined, routeNetId: NetId, portId: PortId, ) => { if (problem.portSectionMask[portId] === 0) return false + const assignedNetId = portAssignment?.[portId] ?? -1 + if (assignedNetId !== -1 && assignedNetId !== routeNetId) return false + const reservedNetId = portEndpointReservationNetId[portId] ?? -1 return reservedNetId === -1 || reservedNetId === routeNetId } @@ -51,6 +56,7 @@ export const createDirectedRouteHopHeuristic = ({ topology, problem, portEndpointReservationNetId, + portAssignment, routeId, }: CreateDirectedRouteHopHeuristicContext): Int32Array => { const hopCountToGoal = new Int32Array(topology.portCount * 2).fill( @@ -96,6 +102,7 @@ export const createDirectedRouteHopHeuristic = ({ !isPortAvailableToNet( problem, portEndpointReservationNetId, + portAssignment, routeNetId, exitPortId, ) From bb702a8446b256ec979fb8a49ba3cfbf7ab7603e Mon Sep 17 00:00:00 2001 From: ShiboSoftwareDev Date: Mon, 3 Aug 2026 00:00:35 +0200 Subject: [PATCH 2/2] experiment: reject unreachable directed states --- lib/core.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/core.ts b/lib/core.ts index 47e158f..383427a 100644 --- a/lib/core.ts +++ b/lib/core.ts @@ -683,6 +683,7 @@ export class TinyHyperGraphSolver extends BaseSolver { } const h = this.computeH(neighborPortId, nextRegionId) + if (!Number.isFinite(h)) continue const newCandidate = { prevRegionId: currentCandidate.nextRegionId,