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