複数のダイスを振ったときの確率

 以前、複数のダイスを振ったときの出目の合計が任意の値となる確率というタイトルで同じ内容のものを上げたことがあるけど、この時は少し迂遠なやり方で計算していた。結果を求めるのに経験に頼っており、証明する余裕はなかった。
 今回は、筋道立てて結果を求めることが出来たので、ここで披露する。しかし、何でこれまでこの方法を思いつかなかったのか不思議だ。

 複数のダイスを振って特定の目が出る確率を求めるのだが、例によってnDhという表記をする。TRPGを遊ぶ方はご存知の通り、nはダイスを振る数、hはダイスの面の数を表す。今回は6面ダイスしか検討しないので、nD6となる。ちなみに6面ダイスのことをサイコロと呼ぶ。
 当然だが、ダイスを投げたとき、それぞれの目の出る事象は同様に確からしいとする。
 なお、以降nD6を振ったときにmが出る確率を{ P_{ n, m } }と表記する。

 考え方としては、ダイスを1つずつ振り足していくというものに近い。
 1D6を振ったときの確率は1~6までの出目が均等に1/6となる。ここに1つ振りたしたときの新たに降っただダイスの出目も1~6まで均等に1/6となる。1回目に1の目が出たときには2~7までが均等に1/6の確率で出るし、1回目に6の目が出た時は7~12までが均等に1/6の確率で出る。
 結果として次の表のようになる。

1回目 2回目 確率
-5 - 0/36
-4 - 0/36
-3 - 0/36
-2 - 0/36
-1 - 0/36
0 - 0/36
1 1 1/36
1 2 1/36
1 3 1/36
1 4 1/36
1 5 1/36
1 6 1/36
2 1 1/36
2 2 1/36
2 3 1/36
2 4 1/36
2 5 1/36
2 6 1/36
3 1 1/36
3 2 1/36
3 3 1/36
3 4 1/36
3 5 1/36
3 6 1/36
4 1 1/36
4 2 1/36
4 3 1/36
4 4 1/36
4 5 1/36
4 6 1/36
5 1 1/36
5 2 1/36
5 3 1/36
5 4 1/36
5 5 1/36
5 6 1/36
6 1 1/36
6 2 1/36
6 3 1/36
6 4 1/36
6 5 1/36
6 6 1/36
7 - 0/36
8 - 0/36
9 - 0/36
10 - 0/36
11 - 0/36

 通常1~6までしか書かないのだけど、必要があったので-5~11の範囲で書いた。
 この表を見ると、例えば7が出るのは(1,6), (2,5), (3,4), (4,3), (5,2), (6,1)の6通りで、それぞれの確率は{ \frac{1}{6} \times \frac{1}{6} }となるので、合計は{ \frac{6}{36} = \frac{1}{6} }となる。
 また、8が出るのは(2,6), (3,5), (4,4), (5,3), (6,2)の5通り、ではなく(1,7), (2,6), (3,5), (4,4), (5,3), (6,2)の6通りである。それぞれの確率は{ 0, \frac{1}{6}, \frac{1}{6}, \frac{1}{6}, \frac{1}{6}, \frac{1}{6} = \frac{5}{36} }となる。この確率0になる部分を取り入れるというのがポイントである。
 すると2D6の出目がmとなるときの確率は
{ \displaystyle P_{ 2, m } = ( P_{1,m-1} + P_{1,m-2} + P_{1,m-3} + P_{1,m-4} + P_{1,m-5} + P_{1,m-6} ) \times \frac{1}{6} }
と表すことができる。
 当然だけど、1D6を振ったときに1~6以外の目が出る確率は0なので、
{ \displaystyle \begin{eqnarray} P_{ 1, m } = \begin{cases} \frac{1}{6} \quad ( 1 \leqq m \leqq 6 ) \\ 0 \quad ( m \lt 1, 6 \lt m ) \end{cases} \end{eqnarray} }
である。
 上の{ P_{ 2, m } }を2D6のときだけではなくnD6の場合に一般化すると次の式が得られる。
{ \displaystyle P_{ n, m } = \frac{1}{6} \left( P_{n-1,m-1} + P_{n-1,m-2} + P_{n-1,m-3} + P_{n-1,m-4} + P_{n-1,m-5} + P_{n-1,m-6} \right) \\ \displaystyle \qquad = \frac{1}{6} \sum_{a=1}^{6} P_{n-1, m-a} }
 以上より、2次元の数列として確率を表記することができるのだけど、とてもじゃないけどこの数列の一般項を求められる気がしない。
 前の項を複数参照する上に2次元になっているという辺り、フィボナッチ数列の一般項を求めるよりも難しいんじゃないかと思われる。数学ガールフィボナッチ数列の一般項を求めようという試みの時点でお手上げだった僕の数学力ではどうにもならない。
 一応n=20まで計算したので、その結果をグラフにすると次のようになる。

 取り敢えず、前回ほど苦労せずに結果が得られるようになったということで進歩はあったと思う。同様にして6面ダイス以外の場合も求めることができる。

 さて、上ではnD6の場合の確率だが、これをnDhに敷衍しよう。
 とはいっても、上の式で6のところをhに変えるだけなので特に面倒はない。
 まず、1Dのときの確率を定義しておかないと数列を作れないので、次の初期条件を与えておく。
{ \displaystyle \begin{eqnarray} P_{ 1, m } = \begin{cases} \frac{1}{h} \quad ( 1 \leqq m \leqq h ) \\ 0 \quad ( m \lt 1, h \lt m ) \end{cases} \end{eqnarray} }
 2D以上は次のようになる。
{ \displaystyle P_{ n, m } = \frac{1}{h} \left( P_{n-1,m-1} + P_{n-1,m-2} + \cdots + P_{n-1,m-h} \right) \\ \displaystyle \qquad = \frac{1}{h} \sum_{a=1}^{h} P_{n-1, m-a} }
となる。



おまけ
 上の数列ではどうしてもTRPGを遊んでいるときに確率の見立てを効かせるのに効率が悪い。確率一覧表とかエクセルを持ち歩いていればどうということもないのだけど、やはりその場で簡便に計算できないものかと思う。正しい解に拘らず近似値で計算できないかなと考えた。
 前回、少しだけ言及したけど、振るサイコロの数を増やしていくと正規分布に収束するんじゃないかと予測される。そんなわけで、数列の一般項を求めずに、最所から正規分布を見て計算したら良いのではないかなと思った。
 正規分布は次の式で表される。
{ \displaystyle f(x) = \frac{1}{\sqrt{2\pi\sigma^{2}}}\exp\left( -\frac{(x- \mu )^{2}}{2\sigma^{2}} \right) }
 σ2が分散、μが平均を表す。つまり、この2つの値が分かればその正規分布を描くことができる。
 n個のサイコロを振ったときの平均は3.5nであることは今更説明する必要はないと思う。
 分散は{ \frac{35}{12} n }となるのだけど、これは証明していない。上で求めた確率分布表でこの値になっているのでそのまま持ってくる。頑張って解いてみれば証明できるかもしれないけど、面倒なのでやらない。なお、6面ダイス以外を考える場合はこの部分について改めて検討しなければいけない。
 以上より、nD6に相当する正規分布の方程式は次のようになる。
{\displaystyle f(x) = \frac{1}{\sqrt{\pi\frac{35}{6} n}}\exp\left( -\frac{(x- 3.5n )^{2}}{\frac{35}{6}n} \right) \times 100 }
 百分率で確率を表すため、最後に×100を付記した。扱いやすいように簡略化しようと思う。
{ \displaystyle f(x) = \frac{1}{\sqrt{\pi\frac{35}{6} n}}\exp\left( -\frac{(x- 3.5n )^{2}}{\frac{35}{6}n} \right) \times 100 }
{ \displaystyle \qquad = \frac{1}{\sqrt{\frac{35}{6} \pi n}} \exp \left( - \frac{x^2-7nx+12.25n^2}{\frac{35}{6}n} \right) \times 100 }
{ \displaystyle \qquad = \frac{1}{\sqrt{\frac{35}{6} \pi n}} \exp \left( -\frac{6}{35n} x^2+ \frac{6\cdot 7n}{35n} x - \frac{6 \cdot 12.25n^2}{35n} \right) \times 100 }
{ \displaystyle \qquad = \frac{1}{\sqrt{\frac{35}{6} \pi n}} \frac{\exp\left(\frac{6}{5}x\right)}{\exp\left(\frac{6}{35n}x^2\right) \cdot \exp\left(\frac{73.5}{35}n\right)} \times 100 }
{ \displaystyle \qquad = \frac{1}{\sqrt{\frac{35}{6} \pi n} \cdot \exp\left(\frac{73.5}{35}n\right) } \frac{\exp\left(\frac{6}{5}x\right)}{\exp\left(\frac{6}{35n}x^2\right)} \times 100 }
{ \displaystyle \qquad = \frac{1}{\sqrt{\frac{35}{6} \pi n} \cdot \exp\left(\frac{73.5}{35}n\right) } \exp\left(\frac{6}{5}x - \frac{6}{35n}x^2\right) \times 100 \\ \displaystyle \qquad = \frac{1}{\sqrt{\frac{35}{6} \pi n} \cdot \exp\left(\frac{73.5}{35}n\right) } \exp\left(\frac{6}{5}x\left(-\frac{x}{7n}+1\right)\right) \times 100 }
 出来るだけxを孤立させ、他を定数として扱えるようにしてみた。少しはハンドリングが良くなるんじゃないかと期待したのだけど、むしろより複雑になってる気もする。結局、徒に数式を捏ねくり回しただけで、何かグダグダである。
 取り敢えずn=1~20について計算してみた。以下がその結果のグラフ。

 n=1, 2はイマイチ合致していない感じがするけど、n=3以降は近似として悪くない。
 どの正確な確率と正規分布でどの程度違いがあるか、それぞれの差分に絶対値を付ける形で比較してみた。

 n=1は論外だし、n=2の場合は普通に確率を覚えているので必要ないと思う。
 n=3のとき、誤差が最大で0.8%、n=4では0.4%。十分小さいと見ていいんじゃないかと思う。
 誤差の合計は、n=3のとき5.92%、n=4のとき4.11%。悪くないと思う。
 カイ二乗検定ではn=2以上で5%の有意水準を満たしているので、正規分布による近似で何ら問題はない。ついでにカイ二乗検定について説明したいところだけど、正規分布を利用した数値についてカイ二乗検定を行うとものすごく混乱するのでここでは説明しない。
 それから、exp(x)の計算が大変そうなので、マクローリン展開で計算しやすい形にできないかと思ったのだけど、余計難しくなったので、おとなしく正規分布の式と、平均:3.5n、分散:{ \frac{35}{12}n }を覚えた方が楽だということがわかった。
 使い方としては、例えばビーストバインドトリニティで人間性回復判定の際「10D6を振って25以上なら成功!」というときに確率を見積もって、振るダイスの数を倍にするかどうかを選択する参考にしたりする。
 本来であれば、上の式を定積分して面積を求めることができればそのまま公式としてしまう事ができるのだけど、何か上手くいかなかったので、泥臭く足し算しなければならなくなった。
 10D6を振って24以下で失敗ということなので、n=10のとき{ \sum_{k=10}^{24} f(k) }が失敗する確率である。従って、
{ \displaystyle \sum_{k=10}^{24} f(k) = \sum_{k=10}^{24} \frac{1}{\sqrt{\frac{350}{6} \pi }} \exp \left( - \frac{(k-35)^2}{\frac{350}{6}} \right) \times 100 \\ \displaystyle \qquad = \frac{1}{\sqrt{\frac{350}{6} \pi }} \left\{ \exp \left( - \frac{(10-35)^2}{\frac{350}{6}} \right) + \exp \left( - \frac{(11-35)^2}{\frac{350}{6}} \right) + \exp \left( - \frac{(12-35)^2}{\frac{350}{6}} \right) + \cdots + \exp \left( - \frac{(24-35)^2}{\frac{350}{6}} \right) \right\} \times 100 \\ \displaystyle \qquad = \frac{1}{\sqrt{\frac{350}{6} \pi }} \left\{ \exp \left(-\frac{6}{350} \cdot 25^2 \right) + \exp \left(-\frac{6}{350} \cdot 24^2 \right) + \exp \left(-\frac{6}{350} \cdot 23^2 \right) + \cdots + \exp \left(-\frac{6}{350} \cdot 11^2 \right) \right\} \times 100 \\ \displaystyle \qquad = 2.5766 } という感じで、2.5766%という結果が得られる。ちなみに、正確な確率は2.5247%なので誤差は0.0519と極めて小さい。
 このようにして、たくさんダイスを振るときにも確率を見積もることができるのである。あー便利便利。
 ちなみに10D6を振った結果が次の写真である。

 こうして人として返ってこれなくなり、洞窟に引き籠って宅配の肉饅を喰べる週休8日自宅警備員(邪神)に進化したそうな。めでたしめでたし。

 いつものように今回計算に使ったエクセルのシートを上げておく。
 nD6の確率
 それにしてもはてなブログは表のセルの間がやたらと広いのはどうにかならないものかな。

関連エントリー
 20140531 複数のダイスを振ったときの出目の合計が任意の値となる確率