WUZIQI — Gomoku
好看,本身就是理由
← 返回部落格

讀棋 · 引擎

威脅空間搜尋怎樣讀棋

從 Allis 的威脅空間搜尋到今天的五子棋引擎,理解機器為什麼先看強迫線,再看普通好點。

威脅空間搜尋像一張安靜的分岔圖:只保留那些必須回答的方向。
威脅空間搜尋像一張安靜的分岔圖:只保留那些必須回答的方向。

你明明看見一個好點,下一手卻被對方連續叫殺,整盤棋像被一根線牽走。復盤時更煩:引擎早早標出那條路線,好像它從一開始就知道哪裡會塌。威脅空間搜尋要解釋的,正是這種讀棋順序:先看會逼迫對手回應的線,再回頭比較普通好點。

先把棋盤縮小到強迫線

五子棋的難處,表面上是點太多。15 路棋盤開局後,每一步都有幾十個候選點;如果每個點都平等展開,搜尋樹會很快失控。

但實戰裡,很多點並不平等。一個衝四會要求對手立刻擋;一個三通常會逼出防守;連續的叫殺會讓選擇變少。威脅空間搜尋就抓住這個事實:先研究那些帶有強制回應的分支。

這不是玄學的「機器感」。它更像把棋盤暫時摺疊,只留下「我威脅、你必須處理、我繼續威脅」的骨架。普通的形勢評估晚一點再做。

威脅空間搜尋示意:普通候選點很多,強迫線只保留衝四、活三和連續叫殺的分支
威脅空間搜尋先沿強迫線前進:衝四、活三、VCF 這類分支會顯著縮小要讀的棋盤。

Allis 為什麼從威脅開始

1990 年代初,Victor Allis 和同事在五子棋求解工作裡系統性使用了威脅空間搜尋,並配合證明數搜尋。相關論文包括 1993 年 AAAI 的 Go-Moku Solved by New Search Techniques,以及 1994 年的 Go-Moku and Threat-Space Search

這裡的「solved」要放在當時論文討論的規則和設定裡理解。它不能被讀成「所有五子棋變體都已解決」,更不能跳到禁手、Swap2、不同棋盤尺寸都一併蓋章。

Allis 的關鍵觀察很樸素:如果一方已經擁有連續威脅,另一方的許多漂亮構想都來不及實現。搜尋程式應先問一句:眼前有沒有一條能強迫到底的路。

先讀強迫線,棋盤會安靜很多。

威脅在程式裡怎樣被寫成物件

人說「這裡有活三」,程式要把它拆得更細。一個威脅通常包含三個部分:攻擊方落子的點,防守方必須回應的點,以及後續還能接上的威脅。

比如黑棋形成一個活三,白棋可能有兩個防點。程式會把這兩個防點都列入回應集合,然後繼續檢查黑棋在每個回應後是否還能衝四、做四三,或轉到另一側製造雙威脅。

這一步最容易誤解。威脅空間搜尋並非只找「當前最兇的一手」,它關心的是威脅之間能不能串起來。單個衝四很響,後面接不上,價值會下降。

VCF 是最清楚的一條強迫線

VCF 常被譯成連續衝四勝。它的結構很乾淨:我衝四,你擋;我再衝四,你再擋;最後出現五連或無法同時防住的局面。

從讀棋角度看,VCF 很適合機器。每一步的防守通常被限制在少數點,分支窄,結果明確。你復盤時看到引擎給出一串「唯一防」,多半就是這類線。

但實戰不能只盯 VCF。很多勝法從活三、眠三、四三交換開始,前幾步還沒有連續衝四那麼直白。強的搜尋會在 VCF 之外保留更寬的威脅類型,代價是計算量變大。

復盤動作:看到引擎推薦一步時,先問它是不是帶強迫回應。若對手不擋會立刻輸,那是叫殺;若對手有多個擋點,再繼續數每個擋點後有沒有下一段威脅。

評估函式負責處理沒有強迫的局面

棋盤不會永遠處在叫殺裡。開局天元附近的厚度,中盤邊線的潛力,禁手規則下黑棋雙三雙四的風險,都需要評估函式來判斷。

現代五子棋引擎通常會把強迫線搜尋和局面評估結合起來。能算清的殺棋先算;算不清或暫時無殺時,再用模式、權重、神經網路評估候選點。2025 年 Rapfi 相關的神經網路蒸餾論文,也是在這個方向上討論效率和棋力的平衡。

所以你看到的「引擎讀棋」,通常不是單一技巧。前端有 VCF、VCT 一類戰術搜尋,後面有更寬的點評分系統。兩者配合,才會顯得又快又穩。

人類能借走的部分:先問對手是否被迫

你不必把 Allis 的演算法背下來。實戰裡最有用的借法,是把候選點分層:第一層看衝四和成五,第二層看活三和四三,第三層才看形狀是否舒服。

舉個局面:你在天元附近有兩條斜線苗頭,邊上還有一個看起來很厚的補強點。先別急著補厚,數一下有沒有一步活三能逼對手擋到某個位置,擋完後你能不能在另一條線衝四。

這個順序會改變很多選擇。看起來「漂亮」的厚勢,如果不給對手壓力,可能只是慢一拍;看起來普通的一手活三,只要能接上下一段威脅,就值得優先計算。

威脅空間搜尋的邊界也要記住

威脅空間搜尋擅長處理強制性,卻容易被規則細節和防守資源拖住。禁手五子棋裡,黑棋的某些雙三、雙四不能下;一個看似漂亮的殺法,可能在最後一步觸發禁手。

它也會漏掉安靜的戰略手。某些局面沒有立刻叫殺,但一步補點能封住對手未來兩條線,同時保留自己的反擊。純戰術搜尋讀不到這種長期價值,需要評估來補。

把它當成一種讀棋習慣會更穩:先找強迫,再看形勢;先驗證殺棋,再談好點。下一局復盤時,挑一個中盤局面,沿著「威脅—防守—再威脅」手動走三層,你會更快看懂引擎為什麼落在那裡。

能逼回應的手,先進入計算。

讀完了?打開 WUZIQI 試一局。