diff --git a/algos/infinite-grid-ijump-astar/v2/lib/GeneralizedAstar.ts b/algos/infinite-grid-ijump-astar/v2/lib/GeneralizedAstar.ts index 7d8e5d0..c394b51 100644 --- a/algos/infinite-grid-ijump-astar/v2/lib/GeneralizedAstar.ts +++ b/algos/infinite-grid-ijump-astar/v2/lib/GeneralizedAstar.ts @@ -220,14 +220,15 @@ export class GeneralizedAstarAutorouter { } solveConnection(connection: SimpleRouteConnection): ConnectionSolveResult { - const { pointsToConnect } = connection - if (pointsToConnect.length > 2) { + if (connection.pointsToConnect.length > 2) { throw new Error( "GeneralizedAstarAutorouter doesn't currently support 2+ points in a connection", ) } connection = this.preprocessConnectionBeforeSolving(connection) + const { pointsToConnect } = connection + this.iterations = 0 this.closedSet = new Set() this.startNode = this.getStartNode(connection) diff --git a/algos/multi-layer-ijump/MultilayerIjump.ts b/algos/multi-layer-ijump/MultilayerIjump.ts index 2c9470f..52a184b 100644 --- a/algos/multi-layer-ijump/MultilayerIjump.ts +++ b/algos/multi-layer-ijump/MultilayerIjump.ts @@ -41,7 +41,7 @@ import { } from "autorouting-dataset/lib/solver-utils/getAlternativeGoalBoxes" export class MultilayerIjump extends GeneralizedAstarAutorouter { - MAX_ITERATIONS: number = 200 + MAX_ITERATIONS: number = 500 VIA_COST: number = 4 // Define the cost for changing layers VIA_DIAMETER: number = 0.5 allowLayerChange: boolean = true // Flag to allow layer changes diff --git a/algos/multi-layer-ijump/benchmark.ts b/algos/multi-layer-ijump/benchmark.ts index 7cc6a34..1f20a7f 100644 --- a/algos/multi-layer-ijump/benchmark.ts +++ b/algos/multi-layer-ijump/benchmark.ts @@ -5,4 +5,5 @@ await runBenchmark({ solver: autoroute, solverName: "multi-layer-ijump", verbose: true, + problemType: "keyboards", }) diff --git a/algos/multi-layer-ijump/index.ts b/algos/multi-layer-ijump/index.ts index 0ebfd4e..d5f4afb 100644 --- a/algos/multi-layer-ijump/index.ts +++ b/algos/multi-layer-ijump/index.ts @@ -15,6 +15,8 @@ export function autoroute(soup: AnySoupElement[]): SolutionWithDebugInfo { const autorouter = new MultilayerIjump({ input, connMap, + // isRemovePathLoopsEnabled: true, + optimizeWithGoalBoxes: true, }) const solution = autorouter.solveAndMapToTraces() diff --git a/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard2.snap.svg b/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard2.snap.svg new file mode 100644 index 0000000..f6e1857 --- /dev/null +++ b/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard2.snap.svg @@ -0,0 +1,12 @@ + \ No newline at end of file diff --git a/algos/multi-layer-ijump/tests/__snapshots__/keyboard.snap.svg b/algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard7.snap.svg similarity index 100% rename from algos/multi-layer-ijump/tests/__snapshots__/keyboard.snap.svg rename to algos/multi-layer-ijump/tests/__snapshots__/multi-layer-keyboard7.snap.svg diff --git a/algos/multi-layer-ijump/tests/__snapshots__/same-net-many-pads.snap.svg b/algos/multi-layer-ijump/tests/__snapshots__/same-net-many-pads.snap.svg index 1ace947..b75ae36 100644 --- a/algos/multi-layer-ijump/tests/__snapshots__/same-net-many-pads.snap.svg +++ b/algos/multi-layer-ijump/tests/__snapshots__/same-net-many-pads.snap.svg @@ -9,4 +9,4 @@ .pcb-silkscreen-top { stroke: #f2eda1; } .pcb-silkscreen-bottom { stroke: #f2eda1; } .pcb-silkscreen-text { fill: #f2eda1; } - \ No newline at end of file + \ No newline at end of file diff --git a/algos/multi-layer-ijump/tests/multi-layer-keyboard2.test.tsx b/algos/multi-layer-ijump/tests/multi-layer-keyboard2.test.tsx new file mode 100644 index 0000000..f1f53d0 --- /dev/null +++ b/algos/multi-layer-ijump/tests/multi-layer-keyboard2.test.tsx @@ -0,0 +1,21 @@ +import { getSimpleRouteJson } from "autorouting-dataset" +import { getKeyboardGenerator } from "autorouting-dataset/lib/generators/keyboards" +import { test, expect } from "bun:test" +import { MultilayerIjump } from "../MultilayerIjump" +import { circuitJsonToPcbSvg } from "circuit-to-svg" + +test("multi-layer ijump keyboard", async () => { + const soup = await getKeyboardGenerator().getExample({ seed: 2 }) + const input = getSimpleRouteJson(soup, { layerCount: 2 }) + + const autorouter = new MultilayerIjump({ + input, + optimizeWithGoalBoxes: true, + }) + + const result = autorouter.solveAndMapToTraces() + + expect(circuitJsonToPcbSvg(soup.concat(result as any))).toMatchSvgSnapshot( + import.meta.path, + ) +}) diff --git a/algos/multi-layer-ijump/tests/keyboard.test.tsx b/algos/multi-layer-ijump/tests/multi-layer-keyboard7.test.tsx similarity index 100% rename from algos/multi-layer-ijump/tests/keyboard.test.tsx rename to algos/multi-layer-ijump/tests/multi-layer-keyboard7.test.tsx