表が出る確率ppのコインをn回投げたとき,kk回連続で同じ面が出たことのある確率(PC利用).

角田 保(大東文化大学経済学部) 2025/09/08


q=1pq=1-pとし,最初の所持金がkk円で,所持金が0円か2k2k円になった場合に終了する,以下のようなギャンブラー問題を考える.

(i)初回については,表が出たらk+1k+1円となり,裏が出たらk1k-1円となる.

(ii)表が出続けているときには,所持金は1円づつ増える.表が出た後に裏が出たら所持金はk1k-1円となる.

(iii)裏が出続けているときには,所持金は1円づつ減る.裏が出た後に表が出たら所持金はk+1k+1円となる.

(iv)nn回後に所持金が00円もしくは2k2k円となっている場合の確率が,求める確率である.

推移行列は0行0列から2k行2k列の2k+1次正方行列Pであり,P(i,j)P(i,j)PP(i,j)(i,j)成分として以下のように表される.

所持金が0円か2k2k円になった場合に終了するので,P(0,0)=1,P(2k,2k)=1P(0,0)=1,P(2k,2k)=1

(i)より,P(k,k+1)=p,P(k,k1)=qP(k,k+1)=p,P(k,k-1)=q

(ii)より,{P(i,i+1)=pP(i,k1)=q(i=k,k+1,,2k1)\begin{cases}P(i,i+1)=p \\ P(i,k-1)=q \end{cases} \quad (i=k,k+1,\cdots,2k-1)

(iii)より,{P(i,i1)=qP(i,k+1)=p(i=1,2,,k1)\begin{cases}P(i,i-1)=q\\ P(i,k+1)=p \end{cases} \quad (i=1,2,\cdots,k-1)

(iv)より,PnP^nの,(k,0)(k,0)成分と(k,2k)(k,2k)成分の和が求める答である.

python プログラム

import numpy as np

#初期値3個
p = 0.25
n = 10
k = 4

q = 1-p

#推移行列Pを作成する
P = np.zeros((2*k+1,2*k+1)) 
P[0,0] = 1
P[2*k,2*k] = 1
P[k,k+1] = p
P[k,k-1] = q

for i in range(k+1,2*k):
    P[i,i+1] = p
    P[i,k-1] = q

for i in range(1,k):
    P[i,i-1] = q
    P[i,k+1] = p

## Pをn乗し、確率を求める
Pn =  np.linalg.matrix_power(P,n)
prob = Pn[k,0]+Pn[k,2*k]
print("近似解",prob)