@@ -14,7 +14,10 @@ import { SingleTransitionCrossingRouteSolver } from "../HighDensitySolver/TwoRou
1414import { SingleTransitionIntraNodeSolver } from "../HighDensitySolver/SingleTransitionIntraNodeSolver"
1515import { MultiHeadPolyLineIntraNodeSolver2 } from "../HighDensitySolver/MultiHeadPolyLineIntraNodeSolver/MultiHeadPolyLineIntraNodeSolver2_Optimized"
1616import { MultiHeadPolyLineIntraNodeSolver3 } from "../HighDensitySolver/MultiHeadPolyLineIntraNodeSolver/MultiHeadPolyLineIntraNodeSolver3_ViaPossibilitiesSolverIntegration"
17- import { HighDensitySolverA01 } from "@tscircuit/high-density-a01"
17+ import {
18+ HighDensitySolverA01 ,
19+ HighDensitySolverA02 as HighDensityA02Solver ,
20+ } from "@tscircuit/high-density-a01"
1821import { FixedTopologyHighDensityIntraNodeSolver } from "../FixedTopologyHighDensityIntraNodeSolver"
1922
2023export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver <
@@ -23,6 +26,7 @@ export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
2326 | SingleTransitionCrossingRouteSolver
2427 | SingleTransitionIntraNodeSolver
2528 | FixedTopologyHighDensityIntraNodeSolver
29+ | HighDensityA02Solver
2630> {
2731 override getSolverName ( ) : string {
2832 return "HyperSingleIntraNodeSolver"
@@ -59,6 +63,7 @@ export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
5963 [ "closedFormSingleTrace" ] ,
6064 // ["closedFormTwoTrace"],
6165 [ "highDensityA01" ] ,
66+ [ "highDensityA02" ] ,
6267 [ "fixedTopologyHighDensityIntraNodeSolver" ] ,
6368 ]
6469 }
@@ -198,11 +203,22 @@ export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
198203 } ,
199204 ] ,
200205 } ,
206+ {
207+ name : "highDensityA02" ,
208+ possibleValues : [
209+ {
210+ HIGH_DENSITY_A02 : true ,
211+ } ,
212+ ] ,
213+ } ,
201214 ]
202215 }
203216
204217 computeG ( solver : IntraNodeRouteSolver ) {
205- if ( ( solver as any ) instanceof HighDensitySolverA01 ) {
218+ if (
219+ ( solver as any ) instanceof HighDensitySolverA01 ||
220+ ( solver as any ) instanceof HighDensityA02Solver
221+ ) {
206222 return ( solver as any ) . iterations / 1_000_000
207223 }
208224 if ( solver ?. hyperParameters ?. MULTI_HEAD_POLYLINE_SOLVER ) {
@@ -238,6 +254,32 @@ export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
238254 solver . MAX_ITERATIONS = 10_000_000
239255 return solver as any
240256 }
257+ if ( hyperParameters . HIGH_DENSITY_A02 ) {
258+ const solver = new HighDensityA02Solver ( {
259+ nodeWithPortPoints : this . nodeWithPortPoints ,
260+ outerGridCellSize : 0.1 ,
261+ outerGridCellThickness : 2 ,
262+ innerGridCellSize : 0.4 ,
263+ viaDiameter : this . constructorParams . viaDiameter ?? 0.3 ,
264+ viaMinDistFromBorder : 0.15 ,
265+ traceMargin : 0.15 ,
266+ enableDeferredConflictRepair : true ,
267+ maxDeferredRepairPasses : 48 ,
268+ edgePenaltyStrength : 0.2 ,
269+ // This likely needs to be corrected to use the actual trace width-
270+ // but using anything but 0.1 for traceThickness is causing issues
271+ // needs more debugging- repro01 in the high-density-a01 repo
272+ // has a good reproduction
273+ traceThickness : 0.1 , // this.constructorParams.traceWidth ?? 0.15,
274+ hyperParameters : {
275+ greedyMultiplier : 1.2 ,
276+ shuffleSeed : hyperParameters . SHUFFLE_SEED ?? 0 ,
277+ ripCost : 1 ,
278+ } ,
279+ } )
280+ solver . MAX_ITERATIONS = 20_000_000 * this . effort
281+ return solver as any
282+ }
241283 if ( hyperParameters . CLOSED_FORM_TWO_TRACE_SAME_LAYER ) {
242284 return new TwoCrossingRoutesHighDensitySolver ( {
243285 nodeWithPortPoints : this . nodeWithPortPoints ,
@@ -282,7 +324,10 @@ export class HyperSingleIntraNodeSolver extends HyperParameterSupervisorSolver<
282324
283325 onSolve ( solver : SupervisedSolver < IntraNodeRouteSolver > ) {
284326 let routes : HighDensityIntraNodeRoute [ ]
285- if ( ( solver . solver as any ) instanceof HighDensitySolverA01 ) {
327+ if (
328+ ( solver . solver as any ) instanceof HighDensitySolverA01 ||
329+ ( solver . solver as any ) instanceof HighDensityA02Solver
330+ ) {
286331 routes = ( solver . solver as any ) . getOutput ( )
287332 } else {
288333 routes = solver . solver . solvedRoutes
0 commit comments