コンテンツにスキップ

Gumbel vs Visit 直接対戦評価

更新日: 2026-07-13

結論

同一checkpoint、同一simulation予算、固定7デッキ、player位置入れ替えでGumbel Sequential HalvingとVisit ISMCTSを直接対戦させた。seed 0とseed 1000の2回、合計560試合では、Gumbelは決着509試合中287勝、勝率56.4%だった。Wilson 95%信頼区間は52.0%から60.6%、両側二項検定はp = 0.0045である。

このbenchmark条件ではGumbelがVisitより強いと判断し、480 simulationsでの標準root選択としてGumbelを維持する。ただし、効果量はデッキに依存し、Iono/Belliboltでは未完了率が高い。未知デッキやcross-deck matchupまで含む一般的な優位を証明した結果ではない。

目的

固定hidden局面を使ったtactical probeでは、480 simulationsのVisitが高予算Visitと79.3%一致し、Gumbelは51.7%一致した。しかし、高予算側もVisitであるため、この一致率はVisitの探索原理に有利であり、実戦勝率を直接表さない。

そこで、oracleへの一致ではなく最終的な対戦結果を測るため、同じcheckpointをGumbelとVisitで共有し、両方式を同じ試合内で直接対戦させた。

評価条件

項目 設定
checkpoint alias checkpoints/policy_value_latest_best.pt
checkpoint実体 checkpoints/policy_value_v13_ismcts_iterative_10k_20260705-052512-cycle010_best.pt
benchmark config configs/benchmarks/evaluate-search-ab.yaml
deck manifest configs/benchmarks/model-decks-v1.yaml
model 両方式で同一checkpoint
deck 固定7デッキのmirror matchup
player位置 Gumbel p0対Visit p1、Visit p0対Gumbel p1
games 各seedで7 decks x 20 games x 2 directions = 280
seeds 0、1000
総試合数 560
device / workers CPU / 8 workers
simulation予算 4 determinizations x 120 = 480 / decision
max depth 18
max steps 220
non-root探索 両方式ともPUCT
Gumbel fallback marked_fallback、実測fallback 0

実行時のHEADはc29b5c1を基点としていたが、pca search-abとplayer別root selectionの変更はworking探索木上にあった。再現する場合は、このレポートと同時にコミットされた実装を基準にする。

CABTのbattle_startにはshuffle seedを指定するAPIがない。両方向に同じevaluation seedを渡しているが、山札順まで同一にしたcommon-random-number比較ではない。deck、試合数、探索予算、player位置を対称化し、独立した2 seedで再現性を確認する設計である。

実行コマンド

seed 0:

pca search-ab \
  --checkpoint checkpoints/policy_value_latest_best.pt \
  --games-per-deck 20 \
  --workers 8 \
  --device cpu

seed 1000:

pca search-ab \
  --checkpoint checkpoints/policy_value_latest_best.pt \
  --games-per-deck 20 \
  --workers 8 \
  --device cpu \
  --seed 1000

保存した結果

Seed Directory
0 data/eval/search-ab/gumbel-vs-visit-20260712-013731/
1000 data/eval/search-ab/gumbel-vs-visit-20260712-081006/

各directoryには次を保存する。

  • gumbel-p0-vs-visit-p1.jsonとCSV
  • visit-p0-vs-gumbel-p1.jsonとCSV
  • Gumbel基準へ正規化したsummary.json

現在のsummary.jsonにあるfinishedは、引き分けを含む完了試合数ではなく、Gumbel勝ちとVisit勝ちを足した決着試合数を表す。今回の合算では決着509、引き分け3、未完了48、実際の完了試合数は512である。

総合結果

Seed別

Seed Gumbel wins Visit wins Draws Unfinished Gumbel決着勝率 95% CI
0 143 115 0 22 55.4% 49.3% - 61.4%
1000 144 107 3 26 57.4% 51.2% - 63.3%
合計 287 222 3 48 56.4% 52.0% - 60.6%

合算した決着509試合に対する両側二項検定はp = 0.0045だった。単一seedの偶然だけでは説明しにくく、2回とも同じ方向の差が再現している。

Player位置別

Gumbelの位置 Gumbel wins Visit wins
player 0 141 113
player 1 146 109

Gumbelは両方のplayer位置で勝ち越した。集計結果はplayer 0またはplayer 1の一方向の有利だけでは説明できない。

戦闘指標

指標 Gumbel Visit Gumbel基準の差
平均サイド取得 3.402 2.814 +20.9%
平均attack-ready 15.121 13.645 +10.8%
平均攻撃回数 7.025 7.280 -3.5%

Gumbelは攻撃回数が少ない一方で、平均サイド取得とattack-readyが高い。少なくともこのbenchmarkでは、行動回数を増やすよりも、サイド取得につながるroot行動へsimulationを配分できた可能性がある。ただし、ログだけから因果関係までは確定できない。

探索診断

指標 Gumbel Visit
simulations / decision 480.0 480.0
平均探索深度 4.425 4.582
秒 / decision 4.112 4.166
Gumbel fallback 0 -
policy calls 35,146 33,063

simulation予算は両方式で正確に480だった。GumbelはVisitより平均深度が約3.4%浅いが、勝率は高い。今回の結果は、rootで深さだけを最大化することより、Sequential Halvingによる候補への予算配分が有効だった可能性を支持する。

1 decisionの実測時間差は約1.3%であり、tactical probeで見えた約21%の差は長時間直接対戦では再現しなかった。実運用上の速度はほぼ同等として扱う。

デッキ別結果

Deck Gumbel wins Visit wins Draws Unfinished Gumbel決着勝率
Archaludon ex 40 40 0 0 50.0%
Garchomp ex 48 27 0 5 64.0%
Dragapult 37 35 2 6 51.4%
Iono / Bellibolt ex 31 14 0 35 68.9%
Mega Abomasnow ex 39 41 0 0 48.8%
Starmie ex / Archaludon 44 35 0 1 55.7%
Mega Lucario ex 48 30 1 1 61.5%

Gumbelの優位はGarchomp、Iono/Bellibolt、Lucarioで大きい。Archaludon、Dragapult、Abomasnowは同等圏であり、すべてのデッキで一様に強くなったわけではない。

Iono/Belliboltは80試合中35試合、43.8%が未完了である。このデッキの決着勝率68.9%は強い打ち切りバイアスを受ける可能性がある。max_steps=300以上での感度分析を別途行い、未完了を減らして確認する必要がある。

Tactical Probeとの関係

tactical probeでは高予算Visitをoracleとしていたため、Visitはoracleの探索原理を近似しやすい。そこから言えるのは「通常Visitが高予算Visitの選択を再現しやすい」ことであり、「Visitが実戦でGumbelより強い」ことではなかった。

今回の直接対戦は、最終エージェントとしての強さを測る目的ではtactical probeより優先する。tactical probeは、局面別のQ regret、候補脱落、学習前後のpolicy変化を診断する用途へ限定する。

採用判断

  1. 現在の480 simulations設定では、Gumbel Sequential Halvingを標準root選択として維持する。
  2. Visitはbaselineとablationとして残す。
  3. 高予算Visit oracleとの不一致だけを理由にGumbelを退行扱いしない。
  4. self-play学習ではgumbel_completed_q targetがモデルへ吸収されるかをvalidationと固定probeで別途確認する。
  5. Iono/Belliboltのtimeout感度と、未知デッキ・cross-deck matchupは別benchmarkとして扱う。

次の検証

  1. 1試合あたりの上限とturn帯を持つstratified tactical probeを作り、同一試合への局面集中を防ぐ。
  2. 同一probe集合で学習前後のpolicy KL、Q regret、action agreementを測る。
  3. 同じ開始checkpointからVisit targetとgumbel_completed_q targetの学習を分岐し、探索方式とtarget方式を分離する。
  4. Iono/Belliboltをmax_steps=300以上で再評価する。
  5. mirror deckだけでなくcross-deckとholdout deckへ評価範囲を広げる。