1977-Hadlock最小繞送#
案件摘要#
Lee 演算法(1961)保證最短但淹板,線搜尋(1969)省記憶體但不保證最短——魚與熊掌能否兼得?1977 年,數學家 Frank Hadlock 發表格子圖最短路的研究,揭示了破案鑰匙:把「最短」重寫成「最少繞送(detour)」。若路徑長 \(L = M + 2d\) ( \(M\) 是起終點的曼哈頓距離, \(d\) 是背離目標的步數),則找最短路 ⟺ 找繞送數最小的路。以繞送數為搜尋指標,波前只沿「朝目標」方向優先擴展——這正是 A* 演算法(Hart-Nilsson-Raphael, 1968)在格子圖上的最優化實例。Hadlock 的工作成為 A* 繞線的理論基礎,今日所有 EDA detailed routing 引擎的「預估函數 \(f = g + h\) 」,都以此為數學根據。
前因 -- 為什麼會有這個案子#
- Lee 的淹板矛盾:BFS 四方向無差別擴展,大量探索與目標相反方向的格子——記憶體與時間都浪費。
- 線搜尋失了最優性:Mikami/Hightower 為省記憶體犧牲最短保證,對時序關鍵 net 不可接受。
- AI 領域的 A 已誕生(1968):Hart-Nilsson-Raphael 證明:只要啟發函數 \(h\) 不高估剩餘距離(admissible),A 找到的必是最短路——理論工具就緒,缺格子圖上的應用與分析。
- 手工佈線的直覺:人類佈線員「先直奔目標,被迫才繞」——繞送數正是這個直覺的數學化。
線索與推理 -- 數學式、程式、理論#
核心:最短 ⟺ 最少繞送#
設起點 \(s\) 、終點 \(t\) ,曼哈頓距離 \(M = |x_s - x_t| + |y_s - y_t|\) 。任何路徑 \(P\) 滿足:
其中 \(d(P)\) 是繞送數——背離目標方向(使距離暫時 +1)的步數。每繞一步多走 2 步(繞去又繞回)。因此:
於是搜尋指標從「步數」換成「繞送數」:以 \(f(n) = g(n) + h(n)\) 為優先序( \(g\) = 已走繞送, \(h\) = 到目標的曼哈頓距離),用優先佇列擴展——** \(h\) 恰是 admissible 啟發*(曼哈頓距離不會高估剩餘步數),A 最優性定理直接適用:
複雜度的推理#
BFS 探索半徑為 \(M + 2d^*\) 的整個菱形區域;A* 以 \(h\) 引導,理論上只探索繞送 \(\le d^*\) 的區域。實測上記憶體與時間常省一個數量級——最優性與效率同時到手,魚與熊掌兼得。
import heapq
def a_star_route(grid, start, goal):
"""f = g + h,h = 曼哈頓距離(admissible)→ 首達即最短。"""
R, C = len(grid), len(grid[0])
h = lambda p: abs(p[0]-goal[0]) + abs(p[1]-goal[1])
heap = [(h(start), 0, start)]
g = {start: 0}; parent = {}
while heap:
f, gv, cur = heapq.heappop(heap)
if cur == goal:
path = [cur]
while cur in parent: cur = parent[cur]; path.append(cur)
return path[::-1]
if gv > g[cur]: continue
for dr, dc in ((1,0),(-1,0),(0,1),(0,-1)):
nr, nc = cur[0]+dr, cur[1]+dc
if 0 <= nr < R and 0 <= nc < C and grid[nr][nc] == 0:
ng = gv + 1
if ng < g.get((nr,nc), 10**9):
g[(nr,nc)], parent[(nr,nc)] = ng, cur
heapq.heappush(heap, (ng + h((nr,nc)), ng, (nr,nc)))
return None
工程化:懲罰與擁塞#
Hadlock/A* 框架的真正威力在格子代價可自訂:把擁塞、過孔成本、層切換成本寫進 \(g\) ,把預估擁塞寫進 \(h\) ——現代 negotiated congestion routing(PathFinder, 1990s)就是在 A* 骨架上迭代調整代價。
結案 -- 後果與影響#
- A 成為 detailed routing 內核:從 1977 到今日,所有商用繞線器的格點搜尋都以 A 為骨幹;Lee 演算法退居「全網互斥檢查」與教學角色。
- 最優性證明進入 EDA:admissible 啟發 + A* 定理的引入,讓繞線器第一次有「既快又證明最短」的數學保證。
- 擁塞談判的骨架:A* 的可自訂代價催生 PathFinder 式 negotiated routing(FPGA 繞線標準)與現代 global routing 的迷宮式談判。
- 理論傳播:Hadlock 的論文(Networks 期刊)成為格子圖最短路的經典文獻,EDA 與組合最佳化在此案交會。
關鍵人物與文獻#
- Frank O. Hadlock:數學家,格子圖最短路理論。
- P. E. Hart, N. J. Nilsson, B. Raphael:SRI,A* 演算法發明者(1968)。
- 文獻:
- F. O. Hadlock, "A Shortest Path Algorithm for Grid Graphs," Networks 7, 323 (1977).
- P. E. Hart, N. J. Nilsson, B. Raphael, "A Formal Basis for the Heuristic Determination of Minimum Cost Paths," IEEE Trans. SSC 4, 100 (1968).
- L. McMurchie, C. Ebeling, "PathFinder: A Negotiation-Based Performance-Driven Router for FPGAs," FPGA 1995.