すごろくで特定のマスに止まる確率

ふと、すごろくで特定のマスに止まる確率はどのぐらいだろうかと考えた。

たとえば、7マス先に1回休みのマスがあるとする。6面サイコロを使ったすごろくで、7マス目までに他の特殊マスがない場合、1回休みのマスに止まる確率はいくらだろうか?

ちゃんと解く場合

ちゃんと解く場合には、漸化式を分析すればよい。

$P(n)$を「nマス先のマスに止まる確率」とする。このとき、$1-P(n)$は「nマス目のマスに止まらず通過する確率」である。
($n\ge 0$で、$P(0)=1$とする)

無論、サイコロは1~6の6面サイコロを仮定するが、他のサイコロの場合でも計算方法は大きく変わらない。

小さな$n$で具体的に計算すると、

$P(1)=1/6,$

$P(2)=1/6 \cdot P(1) + 1/6=7/36,$

$P(3)=1/6 \cdot P(2) + 1/6 \cdot P(1) + 1/6 = \cdots$

となる。

便宜上、$n<0$のとき$P(n)=0$とすれば、

$$P(n)=\frac{1}{6} \sum_{k=1}^6 P(n-k) \qquad (n>0)$$

であると推測できる。これはプログラム的には、動的計画法で計算できる。

 

仕方無しにプログラムを組んで、小さい$n$で計算してみる。

以下Pythonによるソースコード

from fractions import Fraction
from random import randint

memo = {}
def p(n):
    if n < 0:
        return Fraction(0)
    if n == 0:
        return Fraction(1)
    if n in memo:
        return memo[n]

    result = Fraction(0)
    for k in range(6):
        result += p(n - k - 1)
    result /= 6
    memo[n] = result
    return result

for i in range(1, 31):
    print('{:2}: {:2.4%}'.format(i, float(p(i))))

結果は以下。

 1: 16.6667%
 2: 19.4444%
 3: 22.6852%
 4: 26.4660%
 5: 30.8771%
 6: 36.0232%
 7: 25.3604%
 8: 26.8094%
 9: 28.0369%
10: 28.9288%
11: 29.3393%
12: 29.0830%
13: 27.9263%
14: 28.3540%
15: 28.6114%
16: 28.7071%
17: 28.6702%
18: 28.5587%
19: 28.4713%
20: 28.5621%
22: 28.5944%
23: 28.5756%
24: 28.5598%
26: 28.5748%
27: 28.5769%
28: 28.5736%
29: 28.5701%
30: 28.5692%

興味深いことに、どうやら目標のマスのちょうど6マス手前にいるときが一番、そのマスに止まりやすいらしい(約36.0%)。7マス手前にいるときは約25.4%なのに。

逆に当然ながら、1マス前にいるときが一番、そのマスを通り過ぎてしまいやすい(1/6)。

また、10マス以上離れているマスに関しては、大体28~29%の確率でそのマスに止まることになる。

(ちなみに「300: 28.5714」であった。厳密な収束値はおそらくあるが、別に知る必要はないだろう。)

実験的に解く場合

上記の漸化式や結果が正しいことの確認も含めて、実験的にも計算してみる。

疑似乱数のサイコロを使って、10000回実際に止まるか過ぎるかを実験し、統計的に確率を計算する。おおよその答えでいい場合には、こちらの方法の方が簡単で手っ取り早い。

以下がPythonによるソースコード。プログラム自体は至ってシンプルである。

from random import randint

def dice():
    return randint(1,6)

def test(n, c=10000):
    assert n > 0
    success = 0
    for i in range(c):
        p = 0
        while p < n:
            p += dice()
        if p == n:
            success += 1
    return success / c

result = test(6)
print(result)
result = test(7)
print(result)

実行結果は以下。

0.3569
0.2524

前述の結果とほぼ一致する。

おわりに

そのマスまでの距離が6か7かで、そのマスに止まる確率が大きく異なることは意外であった。今回は計算していないが、仮に人生ゲームのような1~10が出目の場合には、10マス先がやはり一番止まりやすい結果となるのだろうか。

ある特定のマスに止まる確率は大目に見て30%であった。これは10人いれば3人、3人いれば1人止まるかどうかという値である。すごろくというのは普通、3人とか4人とか、そのぐらいの人数で遊ばれるものであるから、すると、この確率は「ちょうどいい」確率と言えるのかも知れない。皆が皆、止まるというのも、誰も止まらないというのも、面白くない。誰か一人ぐらいが止まるというのが、勝負にメリハリがついて、趣があるのだろう。

以上。