對 Misty 82 勝 0 負

上線之前,我們讓它和我們自己的鬥獸棋電腦 Misty 進行了一場公開挑戰賽:200 盤,每步 1,000 次訪問。hzyhhzy 的引擎贏 82 盤、輸 0 盤、和 118 盤,得分率 0.705。每一盤勝局都是走進 Misty 的獸穴取勝,每一盤和棋都是重複局面。

每盤棋都由 Mistboard 自己的規則程式碼裁判,兩個引擎只負責提出著法。雙方的預算按用時對齊,在同一台機器上每步大約兩秒:Misty 用它平時的 500 萬個節點、單執行緒,KataGo 用 1,000 次訪問、四執行緒,搭配 b10c384 神經網路。兩個引擎都在固定的搜尋量處停下,所以在 Modal 上下出的棋,就是它們在這裡會下出的棋。KataGo 內建的重複局面規則被關閉,雙方都按裁判的規則處理重複。

KataGo勝和棋負得分率
執紅,100 盤445600.72
執黑,100 盤386200.69
合計8211800.705
對局長度的中位數是 127 個半回合。得分率的 95% 信賴區間是 0.67 到 0.74,約合 +125 到 +180 Elo;挑戰賽的要求是 0.55。

全部 200 盤都收在一個研究裡,原始紀錄放在一個檔案中,每盤一行 JSON。

虎現在可以橫向跳河

我們是在 GitHub 上找揭棋引擎時發現 KataGo 的。它放在一個名為 KataGomo 的儲存庫的 AnimalChess2025 分支上,名字裡看不出和鬥獸棋有關,所以之前專門找鬥獸棋引擎時漏掉了它。

它的虎既能縱向跳河,也能橫向跳河,跳法和獅一樣。我們的虎原先只能縱向跳,這個理解來自英文維基百科的條目。騰訊 QQ遊戲的規則、萊頓大學的鬥獸棋頁面和 KataGo 自己的原始碼,都讓虎擁有和獅一樣的跳法;一個按某條規則訓練的引擎,去和一個按另一條規則下棋的引擎比賽,比出來的只是規則的差別。

從 9 月 21 日起,Mistboard 上的虎可以縱橫兩個方向跳河,規則引擎、電腦、分析棋盤、規則頁面和題目都已更新。有一道題目被新的跳法駁倒,已經撤下。這次改動只增加了著法,所以之前的每一盤棋按原樣仍然合法。

兩盤勝局,兩個引擎各自怎麼看

我們用兩個引擎按比賽設定,把其中兩盤勝局的每個局面重新評估了一遍。每張圖只顯示一個數:KataGo 的勝率,由兩個引擎各判斷一次,一次是 KataGo 自己,一次是 Misty。兩條線分開的地方,就是兩個引擎對誰佔優看法不一。和棋算作半勝;Misty 的分數(釐兵)按我們分析棋盤使用的曲線 1 / (1 + e^(−0.00368 × cp)) 換算成勝率。

第 67 盤:多一隻狼,卻輸了

Misty 執紅,第 11 回合吃掉一隻狼,大半盤都認為自己領先;而 KataGo 的得分先停在 50%,隨後一路上升。

第 29 回合 Misty 把困在角落的虎從 g8 走到 g9,KataGo 對自己的得分從 61% 升到 92%,而 Misty 仍認為自己 +111。KataGo 為紅方給出的變化從獅 b1-b2 開始,能讓紅方保持 37%。Misty 到第 36 回合才看出來,晚了七個回合。

第 94 盤:慢慢收緊

Misty 執黑,第 19 回合吃掉一隻狼,此後 30 個回合裡大部分時間都認為自己領先;而 KataGo 的得分從 50% 慢慢升到 63%。

第 50 回合 Misty 把貓從 c8 走到 c7,KataGo 從 63% 升到 98%。Misty 仍認為自己 +80,兩個回合之後才算出必輸。KataGo 為黑方給出的變化是象 d6-d7,能讓黑方保持 38%。

在這兩盤棋中,KataGo 分別比 Misty 早七個回合和兩個回合看出勝局。

KataGo 就是那個圍棋程式,用自我對弈重新訓練

KataGo-AnimalChess 就是原版 KataGo,只是把棋盤和規則換成了鬥獸棋,自我對弈的訓練流程原樣照跑:自我對弈時每步 400 次訪問,10 個殘差塊、384 個通道的神經網路在兩塊 GPU 上用 SGD 訓練,規則在 Dandelion 軟體支援的各個變體之間隨機切換,所以一個網路就能下所有變體。儲存庫裡估計,在一個小型棋類上練到頂尖棋力,算力花費不到 50 美元。網路權重打包在軟體的下載裡,沒有單獨發布,也沒有註明授權條款。

Misty 的評估只有三項手寫的內容:子力、離獸穴的距離,以及陷阱扣分。在它之上再加一層學習出來的修正,並沒有幫助。

Misty 不懂衝獸穴競速

Misty 對局面的評估是子力,加上每個棋子離對方獸穴距離的獎勵。它從不去問奔向自己獸穴的對方棋子是否會先到;等搜尋抵達獸穴時它才發現,那大約是 12 著之後。8 月我們試了三種辦法教它,三種結果都是無效或負收益。

先看競速多常決定對局。在 Misty 平常的 500 萬節點下自我對弈 172 盤,52.9% 以重複和棋結束,26.2% 以進入獸穴結束,20.9% 以無進展和棋結束。只有 4.7% 是真正的競速:勝方在十著之前持平或落後。同樣的測試在 20 萬節點下給出 22%:較弱的對弈會把競速誇大約五倍。

更深的搜尋也找不到多少東西。在這 8 盤競速裡,6000 萬節點比 500 萬節點最多早 4 著看到敗勢,其中 4 盤一著也沒有提前。獸穴附近的搜尋延伸在免費給予時得到 +45 Elo,代價是 3.3 倍的節點;把預算固定後,它得到 −15 和 −12。專門的衝獸穴競速評估項,每方各比較一次雙方的奔襲棋子,在權重 10 和 25 下分別得到 −3 和 +9。每一場對抗都是 300 對換色對局。

搜尋夠得著時,Misty 照樣能把競速下好。在舊虎規則下的一盤自我對弈中,紅方的虎吃掉一隻狼,站進 d 路通道,就在藍方的象旁邊。它不能橫向跳,所以藍方不急著吃它。當象從 d7 走到 d6,紅方的獅從 c3 跳到 c7,跳進象剛離開的格子。象在 d5 吃掉了虎,而獅離一個藍方守不住的獸穴只差三步。藍方最終領先 13 分,卻輸了。Misty 沒有衝獸穴競速評估項;是搜尋深度找到了這條線。自 9 月 21 日起,虎可以橫向跳,這條通道不再困得住它。

真正改變了鬥獸棋對局的,是同一批對局裡找到的兩個常數:一個讓對局過早結束的無吃子和棋計數,以及接近零的和棋輕視值。改掉它們後,自我對弈中分出勝負的對局從四分之一升到大約一半。我們留下的教訓是:要把搜尋預算固定住,否則測的只是預算。那 52 盤對局都收在一個研究裡。

入門仍從 Misty 開始

KataGo 排在鬥獸棋電腦列表的最上面,在 Misty 之上。Misty 仍是預設對手,也是較容易的那一個;想下更難的棋就選 KataGo。鬥獸棋的復盤和分析仍由 Misty 負責。

在網站上,KataGo 每步搜尋 150 次訪問,大約用時 1.5 到 3.5 秒。在這個設定下,它和 Misty 下了 50 盤,19 勝 0 負 31 和,得分率 0.690,與 1,000 次訪問的結果分不出差別。它的棋力來自神經網路。

致謝

KataGomo 是開源專案,網址是 github.com/hzyhhzy/KataGomo。感謝 hzyhhzy 提供引擎並允許我們使用,感謝 lightvector 的 KataGo,也感謝 Kouza 的 Dandelion 4 神經網路。

挑戰 KataGo鬥獸棋規則