2025年6月24日

圍棋人機對奕(7)﹍如何知道 AI 引擎實力強弱?模擬對戰實測

圍棋人機對奕(7)﹍如何知道 AI 引擎實力強弱?模擬對戰實測

Wayne Fu 0 A+
go-ai-engine-match.jpg-圍棋AI引擎模擬對戰實測前兩篇「級位實力的 AI 引擎」、「段位實力的 AI 引擎」公佈了各大 AI 引擎的對戰實測成績,不過不能因此而斷定某 AI 引擎一定勝過另一個 AI 引擎,原因在於:
  • 有些引擎已經停止開發,那麼可以視為棋力已達上限
  • 但有些引擎還在開發,有不同的版本號,而越新的版本通常實力更強
  • 我的實測不一定是最新版本號,而是挑出適合安裝在 Drago 的版本號
  • 引擎參數經優化後棋力會更強,例如 CPU 執行緒數量(threads)、每手棋模擬次數(playouts)、搜尋樹使用記憶體大小(tree-size)
  • 很多靠神經網路運算的 AI 引擎,需要訓練過的權重檔案,不同的權重檔案也會導致棋力不同
之沒有使用引擎優化後的參數,是因為並非為了讓 AI 參加比賽。我的目的就是系列文的主旨,找出適合人機對奕的訓練工具:
  • 不必花太多時間在調校 AI 引擎上,使用預設值就好
  • 讓 AI 在容許的指定時間內就落子,減少等待時間的浪費
  • 用最簡單的方式找出適合自己訓練棋力的 AI 對手
所以本篇提供的實測結果是有侷限性的,只能作為大致參考。不過本篇提供 AI 引擎互相對戰的操作方法,以及了解需要解決的問題後,讀者自然知道如何拿更新版本的 AI 引擎、權重檔案、及優化參數進行實測,甚至增加彼此的對戰局數,以獲得更客觀的實力評估。
圍棋人機對奕系列文章:
(圖片出處: pexels.com)

一、GoGui 初始測試(規則不同勝負顛倒)

1. GoGui 對奕指令 之前「GoGui」→「五、AI 對奕」說明過,讓 AI 互相對奕的指令範例如下: G:\GoTool\GoGui\gogui-twogtp -black "G:\GoTool\Aya\Aya.exe --mode gtp" -white "G:\GoTool\DarGTP\DarGTP.exe" -size 19 -time 10s -games 10 -sgffile G:\GoTool\GoGui\twogtp\Aya_DarGTP -alternate -auto
  • G:\GoTool\GoGui\gogui-twogtp → 這是 gogui-twogtp.exe 的路徑,請改成自己的路徑
  • -black "G:\GoTool\Aya\Aya.exe --mode gtp" → 這是黑棋 AI 引擎,用 Aya 當範例,雙引號內請改成自己的引擎路徑,若引擎需要參數記得加上去
  • -white "G:\GoTool\DarGTP\DarGTP.exe" → 這是白棋 AI 引擎,用 DariushGTP 當範例,雙引號內請改成自己的引擎路徑,若引擎需要參數記得加上去
  • -size 19 → 棋盤尺寸
  • -time 10s → 每手 10 秒,請自行調整。如果不想等待太久的話,別設定太長的時間,否則一盤棋會模擬很久
  • -games 10 → 對奕 10 盤棋,請自行調整數字
  • -sgffile G:\GoTool\GoGui\twogtp\Aya_DarGTP → 對奕檔案的檔名、路徑
  • -alternate → 此參數代表每下完一盤棋,黑白對調
  • -auto → 自動進行對奕,一定要有此參數才能執行
2. 規則不同導致勝負顛倒 然而在其中一場對戰後,產生的 .dat 紀錄檔卻發現了以下現象: go-ai-engine-match-1.jpg-圍棋AI引擎模擬對戰實測 這是 Aya 與 Fuego 的對戰,測了 5 場後的結果,GoGui 可能會分別顯示日本規則與中國規則的計算結果。結果採日本計目制計算時,全部都是黑勝;而同一盤棋採中國數子法計算時,全部都是白勝,這到底是怎麼回事呢? 逐一打開 sgf 檔對奕內容才發現,原來終局前有些 AI 會拼命在對方空裡下,嘗試看能不能出棋,如果不能出棋的話,那送掉的這些棋子,根據不同規則,勝負甚至可能顛倒:
  • 比目制:死子會算 2 目,那麼 AI 自殺的子會讓對手平白多出額外的目數,可能影響勝負
  • 數子法:由於子空皆地,那麼棋子如何自殺,不影響最終算空的結果
所以為了避免某些 AI 終局時送子的行為,計算勝負時需要一律採中國數子法才不會出錯。

二、GoGui 修正後的指令

1. 加入裁判功能 查閱資料後,找到一個方法可以強制使用數子法算空。根據「GoGui 說明書」,裡面有個參數 -referee 可以在計算勝負時使用第三方裁判,例如 GNU Go 可以設定中國規則數子法,這樣棋局勝負就不會判錯了。 請將前面 GoGui 的 AI 互相對奕指令,最後面加入 -referee 參數: G:\GoTool\GoGui\gogui-twogtp -black "G:\GoTool\Aya\Aya.exe --mode gtp" -white "G:\GoTool\DarGTP\DarGTP.exe" -size 19 -time 10s -games 10 -sgffile G:\GoTool\GoGui\twogtp\Aya_DarGTP -alternate -auto -referee "G:\GoTool\GnuGo\gnugo.exe --mode gtp --chinese-rules"
  • -referee 後面的參數請用雙引號 "" 包起來
  • G:\GoTool\GnuGo\gnugo.exe 請改成你的 gnugo.exe 路徑
  • 後面的參數 --mode gtp --chinese-rules 代表 GNU Go 使用中國規則數子法
2. 修改後的對戰資料 go-ai-engine-match-2.jpg-圍棋AI引擎模擬對戰實測 加入 GNU Go 裁判後,讓 Aya 與 Fuego 重新進行 10 局大戰,結果 .dat 紀錄檔如上:
  • 棋局結果最多會有 3 欄,第 1 欄為日本規則,第 2 欄為中國規則,第 3 欄為裁判使用的規則
  • 如果兩個引擎預設都是日本規則,只會顯示第 1 欄
  • 如果兩個引擎預設都是中國規則,只會顯示第 2 欄
  • 如果兩個引擎預設一中一日,則第 1、2 欄都會有勝負結果
  • 如果加入了裁判,則第 3 欄也會出現勝負結果
  • 如上圖,第 1、2 欄的勝負跟之前差不多,幾乎都是相反的結果
  • 但我們只要看紅框標示的第 3 欄,使用中國規則數子法的勝負結果就行了

三、級位 AI 對戰結果

1. 對戰條件 麻煩的問題解決後,可以開始模擬 AI 對戰。首先進行已經介紹過的 4 個級位 AI 引擎,如有版本號的話以安裝在 Drago 上顯示的為準:
  • Dariush
  • Aya 6.34
  • GNU Go 3.8
  • Fuego 1.1
對戰條件如下:
  • 19x19 棋盤
  • 每手 20 秒
  • 同一個對手下 10 局
2. 操作心得 測試電腦使用 Intel i5 12 代 CPU,開了 3~4 個指令視窗同時跑 3~4 場對戰,級位 AI 引擎雖然限制每手最多 20 秒,但感覺很快就下一手,因為一局並沒有花太多時間,通常幾分鐘內就模擬完。 所以我判斷就算設定每手 5~10 秒也許結果也差不多,那麼可以多模擬幾局,例如 20~30 局,更能看出實力差距。 3. 對戰結果 個別對戰統計:
  • Aya vs DariushGTP:DariushGTP 勝 8:2
  • Aya vs GNU Go:GNU Go 勝 10:0
  • Aya vs Fuego:Fuego 勝 9:1
  • DariushGTP vs GNU Go :GNU Go 勝 8:2
  • DariushGTP vs Fuego:Fuego 勝 9:1
  • GNU Go vs Fuego:GNU Go 勝 6:4
勝負統計:
  • GNU Go:3勝 (勝場 24)
  • Fuego: 2勝1負 (勝場 22)
  • DariushGTP:1勝2負 (勝場 11)
  • Aya:3負 (勝場 3)
4. 棋力判斷 因為每組對戰的樣本數只有 10 局,以下只根據有限的統計數據大略估算:
  • Aya 輸 DariushGTP 約 1~2 子
  • DariushGTP 輸 Fuego 及 GNU Go 約 2~3 子
  • Fuego 與 GNU Go 實力接近,GNU Go 稍微領先一點點
級位棋友進行對奕訓練的話,建議挑戰順序如下: Aya → DariushGTP → Fuego → GNU Go

四、段位 AI 對戰結果

1. 對戰條件 接著進行已經介紹過的 5 個段位 AI 引擎,如有版本號的話以安裝在 Drago 上顯示的為準:
  • Pachi 12.86
  • AQ 2.1.1
  • Rayon 8.0.1+3.0
  • Leela 0.11.0
  • KataGo 1.9.1
對戰條件如下:
  • 19x19 棋盤
  • 每手 20 秒
  • 同一個對手下 10 局
2. 操作心得 跟級位測試一樣,開了 3 個指令視窗同時跑 3 場對戰,結果 CPU 一下就爆了,全程都是接近滿載的狀況。看來段位引擎會耗費大量 CPU 運算,如果 CPU 不夠力的話,也許看狀況一次模擬 1~2 場就好。 另外觀察所有 sgf 檔產生的時間,發現 Ray 的對局花費時間最久,常常下一局要 20 分鐘或更久,代表 Ray 以外的引擎即便設定每手 20 秒,也常能在時限到之前就落子,因為很多對局 5 分鐘之內就結束了。 所以我推測 Ray 的預設參數中,可能使用了大量的 CPU 執行緒數量(threads)、每手棋模擬次數(playouts),所以花費的運算時間較多。之前介紹過 KataGo 是免費開源引擎中棋力最強的,但一局花費的時間並沒有很多,這結果讓我十分訝異,不得不讚嘆其棋力及演算法之強大。 3. 對戰結果 個別對戰統計:
  • Pachi vs AQ:AQ 勝 7:3
  • Pachi vs Ray:Ray 勝 10:0
  • Pachi vs Leela:Leela 勝 9:1
  • Pachi vs KataGo:KataGo 勝 10:0
  • AQ vs Ray:Ray 勝 9:1
  • AQ vs Leela:AQ 勝 8:2
  • AQ vs KataGo:KataGo 勝 9:1
  • Ray vs Leela:平手 5:5
  • Ray vs KataGo:KataGo 勝 6:4
  • Leela vs KataGo:KataGo 勝 10:0
勝負統計:
  • KataGo:4勝 (勝場 35)
  • Ray: 2勝1負1和 (勝場 28)
  • AQ:2勝2負 (勝場 17)
  • Leela:1勝2負1和 (勝場 16)
  • Pachi:4負 (勝場 4)
4. 棋力判斷 因為每組對戰的樣本數只有 10 局,以下只根據有限的統計數據大略估算:
  • Pachi 輸 Leela 約 2~3 子
  • Leela 與 AQ 實力接近,AQ 稍微領先一點點(勝場數只多1場)
  • AQ 輸 Ray 約 2 子
  • 但 Ray 的實力不太穩定,能跟 KataGo 一拼也能跟弱很多的 Leela 打成平手
  • 從KataGo 全勝,且勝局數大幅領先 Ray 來判斷,實力應可對 Ray 讓先
段位棋友進行對奕訓練的話,建議挑戰順序如下: Pachi → Leela → AQ → Ray → KataGo

五、額外測試

除了以上分別對級位、段位引擎進行測試,我還測試了級位最強的 Fuego、GNU Go 與段位最弱的 Pachi,看看究竟差距多少,結果 Pachi 兩局都以 10:0 碾壓獲勝。 以 Pachi 實力 KGS 4D 來看,Fuego 為 KGS 2K,此結果算是相當合理,10:0 代表棋力差距在 3~4 子以上,那麼此篇對戰實測是有相當大參考價值的,所有級位引擎實際上都未達段位的實力,而所有段位引擎都至少具備中高段的實力,棋友們可以根據自身棋力挑選合適的 AI 引擎進行訓練。
圍棋人機對奕系列文章:
0 0
如這篇文章對你有幫助,歡迎「分享」到 FB、「追蹤」粉絲團、「訂閱」最新文章

沒有留言:

張貼留言注意事項:

◎ 勾選「通知我」可收到後續回覆的mail!
◎ 請在相關文章留言,與文章無關的主題可至「Blogger 社團」提問。
◎ 請避免使用 Safari 瀏覽器,否則無法登入 Google 帳號留言(只能匿名留言)!
◎ 提問若無法提供足夠的資訊供判斷,可能會被無視。建議先參考這篇「Blogger 提問技巧及注意事項」。
◎ CSS 相關問題非免費諮詢,建議使用「Chrome 開發人員工具」尋找答案。
◎ 手機版相關問題請參考「Blogger 行動版範本的特質」→「三、行動版範本不一定能執行網頁版工具」;或參考「Blogger 行動版範本修改技巧 」,或本站 Blogger 行動版標籤相關文章。
◎ 非官方範本問題、或貴站為商業網站,請參考「Blogger 免費諮詢 + 付費諮詢
◎ 若是使用官方 RWD 範本,請參考「Blogger 推出全新自適應 RWD 官方範本及佈景主題」→ 不建議對範本進行修改!
◎ 若留言要輸入語法,"<"、">"這兩個符號請用其他符號代替,否則語法會消失!
◎ 為了過濾垃圾留言,所有留言不會即時發佈,請稍待片刻。
◎ 本站「已關閉自刪留言功能」。

TOP