Splendorのランダム補充に対して木探索を工夫したが、単純なPUCTの方が強かった
Splendor は宝石トークンを集めてカードを購入し、手に入れたカードのボーナスを以降の購入割引として活用しながら勝利点を伸ばしていくボードゲームである。場には購入可能なカードが常に公開されており、カードを購入したり表向きでキープ(予約)したりすると、空いた枠へ山札から新たなカードが補充される。
このランダム補充が、木探索の実装においては少々厄介な要素となる。同じ「このカードを購入する」という着手であっても、直後にどんなカードがめくられるかによって後続の局面展開が大きく分岐するためだ。
今回は、この確率的なカード補充をより精緻に先読みすることで探索性能を引き上げられないか検証した。しかし結論から言えば、目論見とは正反対の結果となった。補充結果の期待値推定誤差を抑えることには成功したものの、実際の対局では単純なランダムサンプリングを行う標準PUCTよりも弱くなってしまった。
まずは単純に1つずつ補充結果を引く
現在のPUCT実装では、1回のシミュレーション(simulation)ごとに、山札の補充候補から1枚を一様ランダムに選択している。
同じ枝を繰り返し探索する場合、その都度独立に異なる補充結果を引くことになる。ここではこれをIIDサンプリングと呼ぶ。
たとえば山札の補充候補が16枚存在し、あるカード購入の枝を8回探索した場合、同一のカードが重複して選ばれることもあれば、一度も考慮されないカードが残ることもある。
そこでまず考えたのが、「限られたシミュレーション回数の中でも、補充候補をより網羅的に探索できないか」というアプローチだった。
重複しないように補充結果を読む
試したアプローチの1つ目は、最初の数回について補充候補を重複なしでサンプリングする方法である。
16通りの補充候補から8回探索を進めるのであれば、同じカードを重複して引くよりも、まずは異なる8種類を1回ずつ評価した方が、局面の期待値を高精度に推定できるはずだと考えた。
実際、既知の平均値を推定するオフラインテストでは確かな効果が確認された。
| 方法 | 8回 sampling の RMSE |
|---|---|
| 独立 sampling | 0.10797 |
| 重複なし sampling | 0.07820 |
二乗平均平方根誤差(RMSE)は27.6%低減した。
さらに終盤局面において探索回数を128回から512回へ増やす構成も検証した。基本的な戦術テスト(tactical test)における最善手選択率は91.02%から96.09%へと向上した。
しかしながら、同じ512回を使って標準のIIDサンプリングを行った場合も全く同様に96.09%に達していた。それどころか、標準IIDサンプリングの方が平均探索深度は17.73手(ply)まで到達していたのに対し、重複なしサンプリングは16.09手にとどまっていた。
このテストで得られた改善はサンプリング手法の違いによるものではなく、単にシミュレーション回数を増やした効果に過ぎなかったのである。
実対局での検証においても、新しい探索手法は固定128回の標準探索に対して89勝2分109敗と負け越し、ペアスコア(pair score)は0.450と明確な実力低下を示した。
policy上位のカード購入だけ補充枝を広げる
次に、すべての偶然手(chance branch)を一律に広げるのではなく、policyネットワークが高く評価している有力なカード購入・予約の手に絞って丁寧に読む手法を試みた。
候補手のうち上位2つの対象手について、初回に選択された補充枝から8種類をまとめて重複なしで評価する仕組みである。
計算コストを揃えた比較検証において、補充価値の推定RMSEは0.10797から0.07820へと改善した。
しかし戦術テストの正解率は91.02%にとどまり、平均探索深度も12.93手から12.83手へとわずかに浅くなってしまった。
実際の対局成績はさらに芳しくなかった。
新しい探索 176勝 2分 222敗pair score = 0.442595% interval = [0.3962, 0.4888]局面の推定値こそ正確になったものの、対局を行うプレイヤーとしては弱体化してしまったのである。
終盤だけ探索量を増やす方法も再現しなかった
もう一つの試みとして、補充のサンプリング自体は通常のIIDのままとし、ゲーム終盤にのみ探索回数を重点配分するアプローチも検証した。
点数が低いうちは112回、いずれかのプレイヤーが11点以上に到達した終盤局面では256回へと増やす。過去の自己対局データ上で平均126.76回相当となり、固定128回とほぼ同一の計算量に収まる設計である。
最初の200ペアの対戦ではペアスコア0.50625とわずかに勝ち越したため、異なる初期配置を用いた800ペアでの追試を実施した。
しかしその結果はペアスコア0.48531(95%信頼区間 [0.4607, 0.5099]、片側下限0.46466)と振るわず、初期に見られたわずかな優位性は再現しなかった。
なぜ推定精度が上がっても弱くなったのか
なぜ偶然手局面の推定精度を改善しても、対局の実力向上には結びつかなかったのか。
PUCTにおけるシミュレーション回数は有限である。そのため、特定の補充枝を幅広く均等に読もうとすればするほど、他の候補手との比較や、真に有望な手をより深く読み進めるための計算リソースが削られてしまうためである。
補充結果を広く読む ↓探索が横に広がる ↓有望な枝を深く読む回数が減る今回検証したサンプリング手法は、まさにこのトレードオフにおいて裏目に出た可能性が高い。
一部のカード購入について局面評価Qの分散を抑え込んでも、他の候補手は相対的にノイズを抱えたまま放置される。加えて、補充候補の網羅に消費されたシミュレーション回数は、より深い手番展開を読むためには一切使えない。
結論:単純なIID PUCTを維持する
検証した「補充結果を考慮したサンプリング」「重要枝の束ねサンプリング(bundle sampling)」「終盤局面へのリソース再配分」はいずれも不採用とした。
現状のアーキテクチャのように、1シミュレーションにつき1つの末端局面(leaf)を評価する設計においては、カード補充に伴う分散そのものは探索品質を制限する主要因ではないと考えられる。
したがって探索の設計思想としては、固定のシミュレーション回数のもとで補充結果を独立にサンプリングする、極めてシンプルな方式へ回帰することとした。
コードベースにおいて唯一採用したのは、補充候補から派生する後続局面の生成をあらかじめ全展開せず、実際にその補充結果がサンプリングされた段階でのみ遅延生成する最適化である。これは探索の確率分布を一切変えず、参照されない偶然手の無駄なメモリ確保と計算を省くための実装改善となる。
今回の実験を通じて、少なくとも「偶然手ノードをより均等に深く読むことで勝率を高める」という仮説の優先度は大きく下がった。
今後、1回のシミュレーション内で複数の末端局面を一括バッチ評価できるアーキテクチャへ進化すれば、複数の補充結果を並行して評価するコスト構造が根本的に変わる。その段階になれば、厳密な期待値計算や部分的な確率探索を再検証する価値が出てくるだろう。
しかし現行のシミュレーション配分においては、サンプリング推定量自体の精度を追求するよりも、ゲーム木全体へシミュレーションをいかに深く配分できるかの方が、最終的な対局性能を大きく左右することが浮き彫りとなった。
この記事は、実装・実験記録をもとに、本文の大部分をLLMが執筆し、筆者が内容を確認・編集しています。