autorouting-dataset
收藏资源简介:
这是一个用于基准测试的autorouting问题数据集,包含多种分类的问题,每个问题适用于不同的autorouting场景。数据集由数千个文件组成,以tscircuit soup格式存储,可用于开发新的autorouting算法。
This is a dataset of autorouting problems intended for benchmarking purposes. It includes multiple categorized problems, each tailored for distinct autorouting scenarios. The dataset consists of thousands of files stored in the tscircuit soup format, and can be utilized for developing novel autorouting algorithms.
autorouting-dataset
数据集概述
该数据集包含用于基准测试的自动布线问题,以及大量实用工具,包括一个查看器和测试服务器,用于开发新的自动布线算法。
自动布线问题
自动布线是指在二维表面上绘制线路(导线)以连接铜垫。线路可以通过铜镀孔(称为“通孔”)穿过垫子。线路还必须避开“障碍物”,这些障碍物是其他垫子或线路无法通过的阻塞区域,例如孔或指定给天线的区域。
问题分类
数据集包含不同分类的问题,每个问题适用于不同的自动布线场景。
| 问题 | 准备状态 | 描述 | 难度 |
|---|---|---|---|
single-trace |
🟢 view | 通过障碍物布线单条线路 | 简单 |
traces |
🟢 view | 布线多条线路到点对,不交叉 | 中等 |
single-trace-group |
🔴 TBA | 通过多个点布线单条线路 | 简单 |
layers-traces |
🔴 TBA | 通过多层布线连接两个点的线路 | 简单 |
traces-groups |
🔴 TBA | 布线多条线路到点组,不交叉 | 中等 |
layers-traces |
🔴 TBA | 通过多层布线多条线路到点对,不交叉 | 困难 |
layers-traces-groups |
🔴 TBA | 通过多个地点布线多条线路到点组,不交叉 | 困难 |
hyperdense-* |
🔴 TBA | 超密集BGA布线 | 困难+ |
incremental-* |
🔴 TBA | 相同数据集但组件移动或线路改变。测试缓存效率 | 困难+ |
示例问题
simple-multi-point-trace
基准测试
基准测试使用的标准包括:
- 速度(机器规格待定)
- 在类别内完全布线的电路板百分比
- 质量(与理想布线相比,线路长度如何?通常较短的线路更好)
- 问题类型
- 增量速度(如果单个组件移动或线路改变的速度)
数据集使用
数据集由数千个文件组成,采用tscircuit soup格式。每个问题类型在datasets目录中都有相应的数据集。您可以从releases page下载包含数据集的zip文件。如果您的求解器是TypeScript编写的,您可以通过导入autorouting-dataset动态生成数据集。
数据集可以轻松可视化,并包含大量可用于约束的元数据。您可以使用getSimpleRouteJson实用函数将其转换为简单对象,接口如下:
tsx interface SimpleRouteJson { layerCount: number obstacles: Array<{ type: "rect" | "oval" // 注意:大多数数据集不包含椭圆形 center: { x: number; y: number } width: number height: number }> connections: Array<{ name: string pointsToConnect: Array<{ x: number; y: number }> }> bounds: { minX: number; maxX: number; minY: number; maxY: number } }
编写求解器
您可以使用任何语言编写求解器,但目前对TypeScript求解器提供一流支持。
TypeScript求解器
TypeScript求解器可以接受tscircuit soup或SimpleRouteJson。示例代码如下:
tsx import { startAutoroutingDevServer, getSimpleRouteJson } from "autorouting-dataset"
const mySolver = (soup: AnySoupElement[]) => { const routeJson = getSimpleRouteJson(soup)
// ...
// 返回一个或多个pcb_trace对象作为解决方案 return [ { "type": "pcb_trace", "route": [ { "route_type": "wire", "x": 3, "y": 1, "width": 5, "layer": "top" }, { "route_type": "via", "x": 3, "y": 1, "from_layer": "top", "to_layer": "bottom" } ] } ] }
startAutoroutingDevServer({ solver: mySolver, port: 3000 })
您可以使用bun --hot ./solver-server.ts运行此文件。
非TypeScript求解器
- 使用您的算法托管服务器(参见下面的简单Flask服务器)
- 运行
npx autorouting-dataset server start并配置您的服务器URL
可视化问题/解决方案
tscircuit在debug.tscircuit.com上运行调试服务,您可以使用它来可视化解或未解的问题。如果您使用的是TypeScript以外的语言,可以参考这里的说明(待定)。
如果您使用的是TypeScript,您可能希望增量可视化您的解决方案或自定义您自己的可视化。为此,有一个易于使用的RouterPlayground组件,允许可视化您的解决方案。
运行基准测试
如果您有TypeScript求解器,可以使用以下代码程序化运行基准测试:
tsx import { runBenchmark } from "autorouting-dataset" import mySolver from "./my-solver"
const result = await runBenchmark({ mySolver, verbose: true, })
console.log(result)
社区求解器
即将推出!请创建问题以将您的求解器添加到此仓库,我们将列出基准测试等!
我们正在为测量性能准备专用测试机器。




