miyauchidp.dev

著者: miyauchi(本サイト・各ツールの開発者)

公開 / 更新

厳密計算とモンテカルロ法の違いと使い分け

初動率計算の2つの方式、組合せ列挙による厳密計算とモンテカルロ法について、それぞれの仕組みと精度の違いを解説します。試行回数と誤差の関係(何回回せば結果を信じてよいか)の目安表付き。

初動率を機械に計算させる方式には、あり得る初手をすべて数え上げる厳密計算と、仮想の試合を何万回も繰り返すモンテカルロ法の2つがあります。この記事では、なぜ方式が2つ必要なのか、それぞれがどういう仕組みで動いているのか、そしてモンテカルロ法を使うときに「何回試行すれば結果を信じてよいか」を解説します。初動率そのものの定義や、計算式と採用枚数ごとの早見表は初動率の計算式と早見表のガイド にまとめてあるので、初動率の計算に初めて触れる場合はそちらから読むことをおすすめします。

なぜ計算方式が2つ必要なのか

「合計k枚のどれか1枚を引く」だけの条件なら、組み合わせの式1本で確率が出ます。ところが実際のデッキの初動条件は、「AとBを同時に引きたい」「Cは1枚目は初動だが2枚目は腐る」「複数の展開ルートのうちどれかが成立すればよい」といった形で複合します。条件同士の重なりを漏れなく数え上げる場合分けは、条件が増えるごとに指数的に膨らみ、手計算ではすぐに破綻します。計算機に任せるとしても、この「数え上げ」をどう処理するかで2つの流儀に分かれます。すべて数える(厳密計算)か、無作為に試して近似する(モンテカルロ法)かです。

厳密計算(組合せ列挙)の仕組み

Opener Rate の「厳密計算」(exact モード)は、初手としてあり得る手札の組合せをすべて列挙し、そのうち条件を満たす組合せの数を数え上げて初動率を求めます。カード1枚ずつを個別に並べるのではなく、同じカードをまとめて「何種類のカードから何枚を選ぶか」という単位で組合せ数を計算し、条件ごとに掛け合わせていく方式です。全数を数えるので、結果には一切のブレがありません。同じ設定なら何度計算しても同じ値が返ります。

代償は計算量です。デッキに含まれるカードの種類や条件の数が増えるほど、列挙すべき組合せは指数的に増えます。Opener Rate では計算処理に既定でタイムアウトが設定されており、極端に複雑な条件を厳密計算しようとすると、途中で「計算がタイムアウトしました」という表示になることがあります。これが厳密計算の限界であり、モンテカルロ法の出番になります。

厳密計算の結果画面。全体成功率とラベル別成立率(先攻展開)がともに33.76%と表示されている

厳密計算モードの結果画面です。この例の33.76%は、計算式から手計算した値と正確に一致します(検算の手順は早見表ガイドを参照)。

モンテカルロ法(シミュレーション)の仕組み

もう一つの「シミュレーション」(simulation モード)は、デッキをシャッフルして初手を引くという試行をコンピュータ上で大量に繰り返し、条件を満たした回数の割合から初動率を近似するモンテカルロ法です。組合せを網羅する必要がないため、厳密計算では時間がかかりすぎる複雑な条件でも、現実的な時間で答えが出ます。Opener Rate では試行回数を100回から200万回までの範囲で指定できます。

ただし近似である以上、結果には必ずブレがあります。同じ設定で2回計算すると、わずかに違う値が返ります。このブレの幅を知らずに使うと、「構築Aは74.3%、構築Bは74.0%だからAが上」のような、誤差の範囲内の差を実力差と読み違えることになります。

何回試行すれば結果を信じてよいか

モンテカルロ法の誤差は統計学の標準誤差で見積もれます。真の確率をp、試行回数をnとすると、結果のばらつきの標準偏差は「√(p(1−p) ÷ n)」です。ばらつきが最大になるのはp = 50%付近なので、その最悪ケースで95%信頼区間(結果の95%が収まる幅)を計算すると、次の目安になります。

試行回数誤差の目安(95%信頼)実用上の意味
100回±9.8pt傾向すらつかめない
1万回±0.98pt1pt単位の比較が限界
10万回±0.31pt採用枚数1枚差の比較に十分
100万回±0.10pt0.1pt単位の議論ができる
200万回±0.07ptOpener Rate の上限設定

誤差は試行回数の平方根に反比例します。つまり試行を10倍にしても精度は約3.2倍にしかなりません。1万回の±0.98ptを±0.1ptに詰めるには、10倍ではなく100倍の100万回が必要です。実用上の指針としては、採用枚数を1枚変えた構築案の比較(差はおおむね1〜4pt)なら10万回で十分、0.1pt単位の細かい差を議論したい場合だけ100万回以上に上げる、と覚えておけば足ります。逆に、2つの計算結果の差が上の表の誤差幅に収まっているなら、その差から結論を出すべきではありません。

使い分けの指針

基本は厳密計算を選び、厳密計算が対応していない条件を含む場合や、条件が複雑になってタイムアウトするようになったらシミュレーションに切り替える、というのが Opener Rate での使い分けです。かつては金満で謙虚な壺を使う設定では自動的にシミュレーションへ切り替わっていましたが、現在はめくった公開カードから最良の1枚を選ぶ分岐まで含めて数え上げられるようになったため、壺があっても厳密計算のまま扱えます(仕組みは 金満で謙虚な壺がある場合の計算の記事 で解説しています)。どちらのモードでも、結果は全体の成功率に加えてパターンに付けたラベルごとの成立率として表示されるので、複数の展開ルートを定義した場合はルート別の数字も読めます。パターン定義の実践的な組み方は パターン設定の実践例 を参照してください。

参考情報

この記事で紹介した Opener Rate は無料で利用できます。機能の一覧は紹介ページをご覧ください。

記事内容に誤りを見つけた場合は お問い合わせ から報告してください。