本記事はヨットでBストレートが達成される確率に関する記事です.
目的は,Bストレートが達成される確率を最大にする戦略を明らかにし,その場合の確率を求めることです.
『世界のアソビ大全51』における呼称にならい,Bストレートとは出目が12345または23456となることを指します.
解法
動的計画法で解きます.
\mathrm{dp}[i][j][k][l]=(i 回の振り直しが残っていて,j 個の目が不確定で,2,3,4,5のうち k 種類の数字が揃っていて,l=(1,6の少なくとも一方が揃っている)である場合にBストレートとなる確率) とします.
例えば,通常のルールにおいて1ラウンドでBストレートだけを狙った場合にそれが達成される確率は,\mathrm{dp}[2][5][0][0]=\frac{319695199}{1224440064}\approx0.261 となります.
遷移についてはコードを見てください.振り直しの際に k を減らすような遷移は最適となりえないため省いています.
from fractions import Fraction
# 振り直しの回数
N = 2
dp = [[[[Fraction(0)] * 2 for k in range(5)] for j in range(6)] for i in range(N+1)]
dp[0][0][4][1] = Fraction(1)
for i in range(N+1):
for j in range(6):
for k in range(5):
for l in range(2):
if j == 0:
if i > 0:
for l_ in range(l+1):
dp[i][j][k][l] = max(dp[i-1][5-k-l_][k][l_], dp[i][j][k][l])
else:
p = Fraction(k+2*l, 6) * dp[i][j-1][k][l]
if k < 4:
p += Fraction(4-k, 6) * dp[i][j-1][k+1][l]
if l < 1:
p += Fraction(2, 6) * dp[i][j-1][k][l+1]
dp[i][j][k][l] = p
print(dp[N][5][0][0]) # 319695199/1224440064
print(float(dp[N][5][0][0])) # 0.26109501673411434
戦略
各 \left(i, k\right) に対し \mathrm{dp}[i-1][5-k][k][0] と \mathrm{dp}[i-1][4-k][k][1] を比較することで,1,6を戻すべきか否かを決定できます.前者が大きければ戻すべきとなります.
i=1 の場合,k\leq1 なら戻すべきで,k=2 なら等しく,k\geq3 なら戻さないべきです.
i=2 の場合,k\leq2 なら戻すべきで,k\geq3 なら戻さないべきです.
i\geq3 の場合,k\leq3 なら戻すべきで,k=4 なら戻さないべきです.
通常のルールで i\geq3 とはならないので,k\leq2 なら戻し,k\geq3 なら戻さないとすれば最適であることがわかります.
各状態における値
不確定の目が存在しない場合の値です.したがって \left(k,l\right)=\left(0,0\right) とはなりえません.
i=1 | i=2 | |
\left(k,l\right)=\left(0,1\right) | 0.031 | 0.130 |
\left(k,l\right)=\left(1,0\right) | 0.037 | 0.146 |
\left(k,l\right)=\left(1,1\right) | 0.037 | 0.146 |
\left(k,l\right)=\left(2,0\right) | 0.056 | 0.184 |
\left(k,l\right)=\left(2,1\right) | 0.056 | 0.184 |
\left(k,l\right)=\left(3,0\right) | 0.111 | 0.278 |
\left(k,l\right)=\left(3,1\right) | 0.167 | 0.306 |
\left(k,l\right)=\left(4,0\right) | 0.333 | 0.556 |
\left(k,l\right)=\left(4,1\right) | 1.000 | 1.000 |