とし,最初の所持金が円で,所持金が0円か円になった場合に終了する,以下のようなギャンブラー問題を考える.
(i)初回については,表が出たら円となり,裏が出たら円となる.
(ii)表が出続けているときには,所持金は1円づつ増える.表が出た後に裏が出たら所持金は円となる.
(iii)裏が出続けているときには,所持金は1円づつ減る.裏が出た後に表が出たら所持金は円となる.
(iv)回後に所持金が円もしくは円となっている場合の確率が,求める確率である.
推移行列は0行0列から2k行2k列の2k+1次正方行列Pであり,をの成分として以下のように表される.
所持金が0円か円になった場合に終了するので,.
(i)より,.
(ii)より,.
(iii)より,.
(iv)より,の,成分と成分の和が求める答である.
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)