Backgammon Sage Proを支えるOpen Sage評価エンジンと、eXtreme Gammonのボットエンジン(XG)との定量的比較。
Open SageボットエンジンとeXtreme Gammon(XG)を、対応する評価レベル同士 — ニューラルネットワークによる直接評価、マルチプライ先読み、打ち切りロールアウト — で比較します。XGにはプログラムから操作できるインターフェースがないため、そのBatch Analysis機能を通じて採点しました。用いたのは、互いに補い合う3つの手法です。第1の手法では、階層化されたグラウンドトゥルース評価のセットを構築し — 選択が明確な判断は高速な評価を信頼し、僅差の判断はフルロールアウトへ段階的に引き上げます — その参照基準に対する各エンジンの成績をパフォーマンスレーティング(PR)として算出しました。対象は500のアンリミテッドゲーム(17,535件の判断)と130の5ポイントマッチ(18,292件の判断)です。さらにアンリミテッドゲームについては、XG自身の階層化分析を参照基準としてこの比較全体を組み直しました — まさに鏡写しの検証です — が、XG自身の数値で判定してもSageの打ち切りロールアウトが優位を保ちました。第2の手法では、Sage 3TとXG Roller++が本当に見解を異にするアンリミテッドのポジションを抽出し、それぞれを両エンジンのフルロールアウトで判定します。いずれの手法でも2つのエンジンは接近しており、多くのユーザーが頼りにする打ち切りロールアウトの対応レベルではSageがやや優位でした。第3の手法は問いを逆転させます。すでにXGで分析済みの290の実戦トーナメントマッチをSageで再分析し、両エンジンが各プレイヤーに与えるパフォーマンスレーティングを比較したところ、その平均差は統計的にゼロと区別がつきませんでした。
eXtreme Gammon(XG)はコンピューターによるバックギャモン分析の標準的な基準であり、その評価エンジンは入手できる中で最強クラスと広く見なされています。真剣に受け止められることを目指す新しいエンジンは、「XGと比べてどうなのか?」という単純な問いに答えなければなりません。本研究は、Backgammon Sage Proの中核であるニューラルネットワークエンジンOpen Sageについて、この問いに定量的に答えるものです。
目標は、Open Sageの評価とXGの評価を、同程度の計算量のレベル同士で比較することでした。最も自然な実験 — 2つのエンジンを何千ゲームも直接対戦させて結果を集計する — は現実的ではありません。XGのデスクトップアプリにはプログラムから操作できるインターフェースがなく、2つのエンジン間でポジションや手を受け渡すには手作業でクリックしていくしかないからです。強いエンジン同士のわずかな差を検出できるだけのサンプル数に達するには、あまりに時間がかかりすぎます。
そこで代わりに、XGのBatch Analysis機能を利用します。これは数百の棋譜を1回の無人実行でまとめて採点できる機能です。Open Sageが多数のゲームで両サイドをプレイし、各ゲームをXGがインポートできる標準的なテキスト形式でエクスポートし、XGにまとめて分析させ、その判定を読み戻します。この共通の土台の上で、第3節と第4節で説明する2つの異なる手法を適用します。第3の研究(第5節)はシミュレーションから完全に離れ、XGで分析済みの実戦トーナメントマッチを題材にします。
どちらのエンジンも、精度と速度のトレードオフの中でさまざまな深さでポジションを評価できます。結果を読み解くにはこれらのレベルの理解が欠かせません。比較はつねに、2つのエンジンの対応するレベル同士で行われるからです。
直接評価(1プライ)。先読みなしの、ポジションに対するニューラルネットワークの生の出力です。最も高速な設定であり、より深いすべてのレベルの土台になります。(1プライを生のネットワーク評価とするXGの慣例に従っています。)
マルチプライ先読み(2・3・4プライ)。エンジンが数ターン先まで読み、相手の応手を考慮し、各ステップで起こりうる出目について平均を取り、各手順の末端でネットワークの生の評価を行います。プライが1つ増えるごとに精度は上がりますが、計算コストは大幅に増えます。
打ち切りロールアウト(1T、2T、3T)。固定の深さまで探索する代わりに、エンジンは短いシミュレーションゲームを多数プレイし、数ターン後に打ち切って、その時点のポジションをマルチプライ先読みで評価します。分散低減により、サンプリングされたダイスの運の大部分が相殺されます。これがXGの「Roller」設定で、固定深さの探索より強く、それでいてフルロールアウトよりはるかに軽量です。
フルロールアウト。多数のシミュレーションゲームを最後までプレイします。分散低減を用いて十分な回数を実行すれば、フルロールアウトはバックギャモンエンジンが生み出せる中で最もグラウンドトゥルースに近いものであり、本研究では一貫してこれを参照基準として用います。
| 種類 | Sage | XGの相当レベル | 内容 |
|---|---|---|---|
| 直接評価 | 1プライ | 1プライ(生の評価) | ポジションに対する1回のニューラルネットワーク評価 — 先読みなし。 |
| マルチプライ | 2P · 3P · 4P | 2プライ · 3プライ · 4プライ | 相手の応手を数ターン先まで探索し、ダイスについて平均を取る。 |
| 打ち切りロールアウト | 1T · 2T · 3T | Roller · Roller+ · Roller++ | 多数の短いシミュレーションゲームを5〜7ターンで打ち切り、マルチプライで評価(分散低減あり)。3T/Roller++は3プライ判断、2T/Roller+は2プライ、1T/Rollerは1プライを使用。 |
| フルロールアウト | ロールアウト | ロールアウト | シミュレーションゲームを最後までプレイ — 本研究における参照「正解」。 |
第1の手法では、「真の」最善手をできる限り正確に確定させた固定の判断セットに対して、各エンジンを採点します。これは、XGを他の多くのボットと比較した有名な2012年のXG研究と同じアプローチです。
まず、Sage 3P同士の自己対戦による500のアンリミテッドゲームをシミュレーションしました。3Pのようにそこそこ強いレベルは、あらゆるゲームプラン — レース、アタック、プライミング、アンカリング — にわたって現実的なポジション分布を生み出し、これこそテストしたい多様性です。次に、盤上のスコアによってすべての判断の価値が変わる130の5ポイントマッチについて、研究全体をもう一度実行しました。両方の結果を以下に示します。
すべての判断の真の最善手をフルロールアウトで確定させるのは途方もなくコストがかかり、しかも不要です。ほとんどの判断は僅差ではないからです。そこで参照基準は、段階的に深くなる3つのパスで構築し、選択が本当に微妙なところだけにロールアウトの計算量を投入します。同じ手順を両方のデータセットに適用し、各パスは確信を持って解決できる判断を確定させ、残りを次のパスに送ります:
すべての判断を3プライで評価します。最善手が次善手を0.05エクイティより大きく上回る場合、3Pの判定を正解として受け入れ、その判断を確定させます。
残った判断を3Tで再評価します。差が0.02エクイティより広がった場合、3Tの判定を正解として受け入れます。
なお0.02以内にあるものはすべて、Sageのフルロールアウトで確定させます。チェッカープレイとキューブアクションの両方に3P判断を用い、1,296ゲームずつのバッチで、エクイティの95%信頼幅が0.005を下回るまで — または上限の20,736ゲーム(16 × 1,296)に達するまで — 実行します。最も時間のかかるバックゲームのポジションは、1つあたり1時間を優に超えました。
その結果が、すべての判断がその難しさにちょうど見合った深さで解決された、階層化された参照基準です。この同じ3パスの手順を両方のデータセット — 500のアンリミテッドゲームと130の5ポイントマッチ — に対して実行し、得られた階層構成は各セットの結果と並べて以下に示します。
信頼できる評価の階層化セットが手に入れば、任意のエンジンの採点は簡単です。各ベンチマーク判断をエンジンに提示し、選んだ手またはキューブアクションの正解に対するエクイティエラーを記録し、平均エラー × 500をPRとして報告します。同じ合計を、チェッカープレイPRとキューブPRに、さらにゲームプラン別に分けて示します。
XGの採点には、はじめにで述べた追加の手順が必要でした。XGにはAPIがないため、500のアンリミテッドゲームと130のマッチの棋譜に対して、カスタムレベル — 3プライ判断、不一致があればテスト対象のレベルに引き上げ — でBatch Analysisを実行し、各ポジションにおけるXGの最善判断を、XGが出力する
.xg
ファイルから抽出して、同じ参照エクイティに対して採点しました。
500のアンリミテッドゲーム全体で、3つのパスは16,889ポジション(17,535件の判断)を次のように解決しました:
対応する5つのレベルを、これら17,535件の判断で採点しました。PRは低いほど良く、各ペアで強い方のエンジンをハイライトしています。
テストしたすべてのエンジンとレベルのPRを、判断の種類とゲームプラン別に示します。低いほど良い値です。
| エンジン | PR | チェッカー | キューブ | ピュアレース | レース | アタック | プライミング | アンカリング |
|---|---|---|---|---|---|---|---|---|
| Sage 3T | 0.21 | 0.18 | 0.36 | 0.02 | 0.24 | 0.17 | 0.31 | 0.28 |
| XG Roller++ | 0.32 | 0.31 | 0.38 | 0.04 | 0.40 | 0.24 | 0.41 | 0.44 |
| Sage 2T | 0.26 | 0.23 | 0.44 | 0.02 | 0.32 | 0.21 | 0.39 | 0.30 |
| XG Roller+ | 0.41 | 0.41 | 0.39 | 0.05 | 0.59 | 0.31 | 0.47 | 0.54 |
| Sage 1T | 0.50 | 0.52 | 0.40 | 0.04 | 0.57 | 0.43 | 0.59 | 0.73 |
| XG Roller | 0.53 | 0.54 | 0.48 | 0.05 | 0.63 | 0.44 | 0.71 | 0.66 |
| Sage 4P | 0.41 | 0.39 | 0.50 | 0.07 | 0.51 | 0.37 | 0.45 | 0.53 |
| XG 4プライ | 0.46 | 0.45 | 0.52 | 0.06 | 0.58 | 0.40 | 0.57 | 0.58 |
| Sage 3P | 0.58 | 0.58 | 0.57 | 0.14 | 0.72 | 0.52 | 0.63 | 0.74 |
| XG 3プライ | 0.57 | 0.57 | 0.58 | 0.05 | 0.71 | 0.48 | 0.73 | 0.71 |
| Sage 2P | 1.64 | 1.39 | 2.88 | 0.40 | 1.77 | 1.83 | 1.86 | 1.71 |
| Sage 1P | 2.59 | 2.48 | 3.20 | 0.78 | 2.60 | 2.79 | 3.10 | 2.89 |
上の数値はすべて、Sageの階層化された参照基準でエンジンを採点したものです。当然予想される反論はホームアドバンテージ — Sageが自身のロールアウトで測られている — でしょう。そこで、まったく鏡写しの検証を構築しました。同じ500ゲーム、同じ判断に対して、すべての階層でXG自身の分析を正解とするのです。XG 3プライが3P階層の判断を、XG Roller++が3T階層の判断を、XG自身のフルロールアウトがロールアウト階層の判断を確定させます — Sageの参照基準に階層ごとに対応するXG版です。そのうえで、すべてのエンジンをこれに対して再採点しました。
| エンジン | PR | チェッカー | キューブ | ピュアレース | レース | アタック | プライミング | アンカリング |
|---|---|---|---|---|---|---|---|---|
| Sage 3T | 0.26 | 0.25 | 0.33 | 0.02 | 0.37 | 0.20 | 0.30 | 0.36 |
| XG Roller++ | 0.33 | 0.35 | 0.23 | 0.04 | 0.50 | 0.20 | 0.39 | 0.47 |
| Sage 2T | 0.31 | 0.30 | 0.35 | 0.02 | 0.41 | 0.27 | 0.36 | 0.37 |
| XG Roller+ | 0.38 | 0.40 | 0.23 | 0.04 | 0.58 | 0.26 | 0.39 | 0.54 |
| Sage 1T | 0.46 | 0.48 | 0.37 | 0.03 | 0.58 | 0.40 | 0.50 | 0.64 |
| XG Roller | 0.47 | 0.49 | 0.35 | 0.12 | 0.61 | 0.35 | 0.54 | 0.62 |
| Sage 4P | 0.37 | 0.36 | 0.42 | 0.06 | 0.53 | 0.34 | 0.40 | 0.39 |
| XG 4プライ | 0.45 | 0.46 | 0.40 | 0.13 | 0.60 | 0.36 | 0.48 | 0.59 |
| Sage 3P | 0.49 | 0.48 | 0.52 | 0.08 | 0.66 | 0.46 | 0.54 | 0.55 |
| XG 3プライ | 0.47 | 0.49 | 0.40 | 0.12 | 0.63 | 0.37 | 0.54 | 0.61 |
| Sage 2P | 1.35 | 1.14 | 2.40 | 0.31 | 1.50 | 1.48 | 1.52 | 1.41 |
| Sage 1P | 2.24 | 2.14 | 2.76 | 0.74 | 2.21 | 2.44 | 2.69 | 2.39 |
マッチのセットでも同じ3つのパスを実行しますが、1つ追加点があります。各プレイヤーのアウェイスコアとクロフォードのフラグをすべての評価に引き渡し、正解を正しいスコアに対するマッチエクイティ(MWC)空間で計算します。130の5ポイントマッチ全体で、各パスは17,892ポジション(18,292件の判断)を次のように解決しました:
対応する5つのレベルを、これら18,292件の判断で採点しました。PRは低いほど良く、各ペアで強い方のエンジンをハイライトしています。
5ポイントマッチのセットでテストしたすべてのエンジンとレベルのPRを、判断の種類とゲームプラン別に示します。低いほど良い値です。
| エンジン | PR | チェッカー | キューブ | ピュアレース | レース | アタック | プライミング | アンカリング |
|---|---|---|---|---|---|---|---|---|
| Sage 3T | 0.19 | 0.16 | 0.40 | 0.01 | 0.17 | 0.18 | 0.25 | 0.26 |
| XG Roller++ | 0.35 | 0.35 | 0.41 | 0.08 | 0.44 | 0.32 | 0.33 | 0.45 |
| Sage 2T | 0.26 | 0.24 | 0.44 | 0.02 | 0.36 | 0.18 | 0.34 | 0.33 |
| XG Roller+ | 0.44 | 0.44 | 0.41 | 0.09 | 0.55 | 0.44 | 0.40 | 0.52 |
| Sage 1T | 0.49 | 0.49 | 0.52 | 0.05 | 0.57 | 0.44 | 0.57 | 0.63 |
| XG Roller | 0.51 | 0.51 | 0.54 | 0.09 | 0.64 | 0.50 | 0.51 | 0.62 |
| Sage 4P | 0.42 | 0.42 | 0.48 | 0.05 | 0.52 | 0.38 | 0.45 | 0.55 |
| XG 4プライ | 0.46 | 0.45 | 0.56 | 0.09 | 0.60 | 0.44 | 0.42 | 0.56 |
| Sage 3P | 0.57 | 0.56 | 0.67 | 0.05 | 0.74 | 0.56 | 0.58 | 0.68 |
| XG 3プライ | 0.54 | 0.53 | 0.61 | 0.09 | 0.69 | 0.53 | 0.52 | 0.65 |
| Sage 2P | 1.30 | 1.26 | 1.60 | 0.39 | 1.59 | 1.23 | 1.50 | 1.41 |
| Sage 1P | 2.30 | 2.29 | 2.31 | 0.69 | 2.48 | 2.43 | 2.47 | 2.56 |
ロールアウトPRの手法は、共通の参照基準に対して両エンジンを採点します。より鋭く直接的な問いはこうです。現実的なプレイの中で、2つのエンジンは最善手について実際にどこで意見が分かれるのか — そしてそのとき、どちらが正しいのか?
この問いには、手法1の最も難しいアンリミテッドの判断 — ロールアウト済みのポジション — で答えます。これらは今や、SageのフルロールアウトとXGのフルロールアウトの両方を備えています。その中からSage 3TとXG Roller++が異なる選択をしたすべての判断を見つけ出し、それぞれのロールアウトがどちらの選択を支持したかを問います。両方のロールアウトがあることがまさに肝心な点です。すべての不一致はSageのロールアウトとXG自身のロールアウトの両方で判定されるため、答えが単一のエンジンの正解を信じることに依存しません。
ロールアウト済みのアンリミテッドのポジション — 本研究で最も難しい判断 — 全体で、2つのエンジンは1,488件のチェッカープレイと69件のキューブ判断で意見が分かれました。各パネルは、各エンジンがロールアウトの最善判断と一致した頻度を、XG自身のロールアウトとSageのロールアウトのそれぞれを基準にして示します。
最初の2つの手法は、どちらのエンジンが強いかを問います。エンジンを使って自分のプレイを研究する人にとっては、第3の問いも同じくらい重要です。実戦マッチをXGで分析してパフォーマンスレーティングを記録し、それからまったく同じマッチをSageで分析したとき — 2つのレーティングはどれくらい近いのか?XGで特定のPRが何を意味するかの感覚を何年もかけて培ってきたプレイヤーは、Sageからも本質的に同じ数値を得られるべきです。
これを直接検証するため、すでにXGで分析済みの実戦トーナメントマッチを大量に集め、そのすべてをSageでゼロから再分析し、各エンジンが各プレイヤーに与えたパフォーマンスレーティングを比較しました。
マッチファイルは2026年の3つのトーナメントに由来し、すべて7ポイントマッチで、Máté Fehér氏のご厚意により提供されました — 競技プレイヤーが自分のゲームを研究するのとまったく同じように、すでにeXtreme Gammonで分析済みのものです。
合計290マッチ、580のプレイヤー個別レーティングです。もう1マッチは棋譜の破損のため除外しました。
580のプレイヤーレーティングをすべてまとめると、2つのエンジンはほぼ完全に一致します。平均差は統計的にゼロと区別がつかず、その差のばらつきはPR自体のばらつきに比べて小さいものです。
| プレイヤーごとのパフォーマンスレーティング | XG | Sage | 差Sage − XG |
|---|---|---|---|
| 平均 | 4.36 | 4.36 | +0.002 |
| 標準偏差 | 2.08 | 2.10 | 0.37 |
| 95%範囲 | 1.52 – 9.36 | 1.44 – 9.67 | −0.76 – +0.74 |
2つの強さの研究を通じて、Open Sage 3TとXG Roller++はおおむね同等 — 入手できる中で最強クラスのバックギャモン評価が2つ、互いに接近している — という結果でした。ロールアウトPRの研究 — アンリミテッドと5ポイントマッチの両方で実施 — では、3プライを除くすべての対応レベルでSageの方が強く、3プライでは2つのエンジンはノイズの範囲内にあります。しかもアンリミテッドゲームでは、参照基準をXG自身の階層化分析に切り替えてもこの結果は揺るぎません。最強の評価レベル(Sage 3TとXG Roller++)で2つのエンジンの見解が分かれるポジションを取り上げ、両エンジンのロールアウトに対して採点した不一致ポジションの研究では、チェッカーの不一致についてどちらのロールアウトを基準にしてもSage 3Tの方が近いエンジンであり、キューブの不一致は稀すぎ、かつ拮抗しすぎていて結論は出せませんでした。
つまり、Sage 3TがXG Roller++よりわずかに強いことを示す一定の証拠があります。最も自然な反論 — その優位はSageを自身のロールアウトで採点したことによる見かけ上のものだ — には、検証できる範囲で答えが出ています。XG自身の参照基準で採点しても、Sageの打ち切りレベルは優位を保ちます。とはいえ差は小さく、正直にまとめれば、2つのエンジンは非常に近い、非常に高い水準でプレイしている — そしてそれこそが、私たちが目指した水準でした。
そして第3の研究は、Sageのユーザーが実際に直面する問いに答えます。すでにXGで評価済みの290の実戦トーナメントマッチにおいて、Sageは本質的に同じパフォーマンスレーティングを出します — プレイヤーのSageレーティングとXGレーティングの平均差は統計的にゼロと区別がつかず、その差のばらつきはPR自体のばらつきに比べて小さいのです。テストがロールアウトによる正解に対する強さであれ、実際のゲームがどうプレイされたかについての単純な一致度であれ、Open SageとXGは同じところに行き着きます。
Open Sageはオープンソースとして公開されており、両手法の背後にある完全なパイプラインはエンジンのリポジトリに同梱されています。以下のすべては
bgsage パッケージと、ローカルでビルドしたそのエンジンだけで動作します — 外部のサービスやデータセット、インフラは一切不要です。唯一の手作業による依存先はeXtreme Gammon本体で、XGにプログラムから操作できるインターフェースがないため、XG列の再生成に使います。
bgbot_cpp 拡張モジュール)をビルドします。XG列を再現するには、さらにBatch Analysisの手順のためにeXtreme Gammon(Windows)が必要です。各スクリプトはリポジトリ内でパスを解決するので、必ず bgsage/ ルートから実行してください。
パイプラインを手作業で動かす必要はありません。Anthropicのエージェント型コマンドラインコーディングツールであるClaude Codeが、エンジンのビルドとベンチマークの実行を代わりに行ってくれます。リポジトリのチェックアウトを指定して、やりたいことを説明するだけです。以下で詳述するのと同じ手順を、Claude Codeが順に進めます:
data/money_benchmark/benchmark.json.gz に対して採点し、この研究と比較できる表として出力して。」./mybot にある — 同梱ベンチマークの各判断を私のボットで評価して、参照エクイティに対するPRを計算して。」
ベンチマーク — 信頼できる評価の階層化セット — は、1本のスクリプト scripts/benchmark_money.pyで構築と採点の両方を行います。入り口は2つあります。
リポジトリには、組み上げ済みのベンチマークが
data/money_benchmark/benchmark.json.gz として同梱されています(非圧縮のJSONはGitHubのファイルサイズ上限を超えるため、スクリプトはgzipをそのまま読み込みます)。任意のSageレベルを採点すると、第3節の表の該当行が再現されます:
# lower PR is better python scripts/benchmark_money.py score --level 3ply # Sage 3P python scripts/benchmark_money.py score --level truncated3 # Sage 3T # --level: 1ply 2ply 3ply 4ply | truncated1/2/3 | rollout
まったく別のエンジンを採点するには、スクリプトが内部で使っているのと同じ規則を適用します。データセットの各判断について、あなたのエンジンの選択を取り、そのエクイティを保存されている参照(「ロールアウト」)エクイティと比較します — 平均エラー × 500がそのPRです。
適応的な3つのパスでデータセットを再作成します。ゲームはシード固定(シード 1から500ゲーム)なので、判断と参照エクイティは同じ結果になります:
# 1. simulate 500 Sage-3P self-play games (+ XG transcripts) python scripts/benchmark_money.py build --stages pass1 --n-games 500 --workers 6 # 2. re-evaluate every decision within 0.05 at 3T python scripts/benchmark_money.py build --stages pass2 --n-threads 16 # 3. roll out every decision still within 0.02 python scripts/benchmark_money.py build --stages pass3 --n-threads 16
パス 3は data/money_benchmark/benchmark.json
(およびその .gz)を書き出します。オプション Aとまったく同じ方法で採点してください。 --stages を省略すると、3つのパスがすべて順番に実行されます。
XGにはAPIがないため、その結果はXGのBatch Analysisから得ています。パス 1はXGインポート用の棋譜を data/money_benchmark/xg/ に書き出します — これらは同梱されていないので、データセットだけから始めた場合はパス 1で再生成してください。
xg/ フォルダーをカスタムレベル — 3プライ判断、不一致時はテスト対象のレベルに引き上げ — でBatch Analyzeします。このときSave Games after analyzeにチェックを入れておきます。XGはゲームごとに1つの
.xg ファイルを書き出します。
python scripts/benchmark_pr_xg.pyを実行します。これは各ポジションについてXGの最善判断を .xg ファイルから読み取り、同じ参照エクイティに対して採点して、同じPRの内訳を出力します。
第3節のXG参照のアンリミテッドゲーム表 — そして不一致ポジションの研究 — には、代わりに最難関ポジションのXGによるロールアウトが必要です。それらのポジションに対してXGのBatch Rolloutを(Save Gamesにチェックを入れて)実行し、次に python scripts/xg_benchmark_report.py でそれらを読み取ると、XG参照のレベル表と不一致ポジションレポートの両方が出力されます。下記の手法 2を参照してください。
5ポイントマッチの研究は、
scripts/benchmark_match.pyで同じように再現できます。これは
benchmark_money.py のマッチプレイ版で、マッチの長さとマッチ数を引数で指定し、マッチスコアがすべての評価に織り込まれます。そのグラウンドトゥルースは次のファイルとして同梱されています: data/match_benchmark/5pt/benchmark.json.gz.
# score against the shipped match dataset (no rebuild) python scripts/benchmark_match.py score --match-length 5 --level truncated3 # or rebuild: 130 seeded 5-pt matches, three adaptive passes python scripts/benchmark_match.py build --match-length 5 --n-matches 130 --stages pass1 --workers 6 python scripts/benchmark_match.py build --match-length 5 --n-matches 130 --stages pass2 --n-threads 16 python scripts/benchmark_match.py build --match-length 5 --n-matches 130 --stages pass3 --n-threads 16 # XG columns: batch-analyze data/match_benchmark/5pt/xg/, then python scripts/benchmark_pr_xg_match.py --match-length 5
不一致の研究は、手法1で構築したのと同じアンリミテッドベンチマークを元に、最難関ポジションのXG自身のフルロールアウトと突き合わせます。唯一の手作業による依存先はXGのBatch Rolloutで、残りは1本のスクリプトが行います。
data/money_benchmark/xg/.
.xg ファイルです。
python scripts/xg_benchmark_report.py
このスクリプトはXGのロールアウトを読み取って
data/money_benchmark/xg_results/rollout.jsonlに書き出し、続いてXGロールアウトに対する評価レベル別PR(第3節の第2の参照基準)と不一致ポジションレポート — すべての不一致をSageとXGのロールアウトに対して順に採点したもの — の両方を出力します。
マッチプレイはこの手法ではまだ扱っていません。マッチのポジションのXGフルロールアウトが必要ですが、まだ実行していないためです。マッチでの強さは代わりに、ロールアウトPRの研究(第3節)と実戦マッチの一致度の研究(第5節)でカバーしています。
.xg ファイルです。