五子棋裡有一句聽起來很絕對的話:空盤開局,黑棋可以贏。很多人第一次聽見它,會把它理解成一種傳說,像老棋手在茶桌邊留下的判斷。那台程式換了一種寫法:它把經驗拆成一條可檢查的贏法,放進機器能執行的路線裡。
先手優勢原本只是共識
五子棋規則簡單,先連成一線的人贏。也正因為簡單,黑棋先下一手這件事被放得很大:它先占中心,先製造威脅,也先逼對手回答。日本職業玩家很早就認為 Go-Moku 是先手勝局,但在電腦證明出現以前,這更多是一種高水準經驗。
經驗當然有分量。問題是,經驗不能替你窮盡所有反擊。只要白棋有一條沒被看見的防守路線,「黑必勝」就還是一句沒有完全落地的話。這台程式的價值,就從這條縫裡出現。
程式證明了什麼
1993 年,L. Victor Allis、H. J. van den Herik 與 M. P. H. Huntjens 在《Go-Moku Solved by New Search Techniques》中描述了這套程式。論文摘要寫得很直接:在橫放的 15×15 棋盤上,Go-Moku 對先行一方是已勝遊戲。
這裡的「證明」,並非在誇程式會下棋,也不只是記錄比賽勝率。它更接近一個可複查的結論:當它執黑先行時,面對最優抵抗也能找到必勝路線。換句話說,黑棋的優勢從感覺,變成了樹上的節點與分支。
它沒有粗暴搜尋整張棋盤
如果只是把 15×15 的交叉點全展開,搜尋會很快爆炸。這套程式的關鍵不在「算得多」,而在「知道先算哪裡」。它使用了兩種技術:威脅空間搜尋與證明數搜尋。前者把攻擊方真正有意義的連續威脅挑出來;後者補上需要形式化確認的部分。
Darse Billings 在 1993 年的摘要裡提到,Go-Moku 解樹包含 138,790 個局面;另一種「長連不勝」的常見變體需要 153,284 個節點。這些數字放在今天看不誇張,但它們提醒我們:好的搜尋不靠蠻力取勝;它把複雜度放在最該被檢查的地方。
好的讀法,會先縮小棋盤。
威脅空間為什麼適合五子棋
五子棋的進攻常常不是「我下一手贏」,更常見的是「我這一手讓你只能應」。活三、衝四、連續逼應,都會把對手的選擇壓窄。威脅空間搜尋正是沿著這種節奏工作:先看攻擊線,再把防守方必須回答的點納入考慮。
這和人類覆盤很像。你不會把全盤每個空點都當成同等候選;你會先看哪裡有迫使對手回應的手段。差別在於,人會漏,程式要把漏看的風險用另一層搜尋補回來。它的美感,恰好在這兩者之間。
證明改變了規則討論的語氣
一旦自由五子棋被證明先手可勝,很多規則設計就不再只是「為了好玩」。禁手、開局限制、Swap2 這類機制,都可以被看成對先手優勢的不同修正:有的約束黑棋,有的讓雙方重新選擇顏色,有的把開局責任交給擺局者。
這也是連珠與現代比賽規則的底層背景。規則並非給簡單遊戲加複雜裝飾;它是在盡量保留棋感的前提下,把開局的不平衡壓到可比賽、可學習、可長期玩的範圍裡。
對普通玩家有什麼用
不必背下那棵解樹。它對普通玩家最有用的啟發,是把「威脅」看成一串問題,而非單個漂亮落點。每下一手,都問一句:如果對手必須回答,他的回答還剩幾種?如果答案很多,這手可能只是好看;如果答案越來越少,計畫才開始成形。
程式證明也有邊界
這個證明針對的是特定規則下的 Go-Moku,並不等於所有連珠、所有開局規則、所有變體都被一併解決。ICGA 的整理也把 Connect Five、Go-moku、Renju、Pente 等放在同一家族裡分別說明,因為細小規則會改變整局的數學形狀。
這點很重要。「五子棋被解了」這句話太粗;「某些常見 Go-Moku 規則下,先手勝已被證明」更準確,也更尊重棋本身。一個安靜的結論,往往比一句大話更耐用。
把證明留在棋盤背後
今天再打開一張五子棋盤,它不會站在旁邊提醒你「黑棋必勝」。它更像一層背景知識:這個遊戲之所以需要規則、需要開局設計、需要讓人舒服地重來一局,是因為最簡單的版本已經被看得足夠深。
好的棋盤不必展示證明。它只要讓你在落子時感覺清楚:壓力從哪裡來,選擇在哪裡縮小,下一手是否真的讓局面變得更安靜。
證明在背後,棋感在手上。