一個馬氏鏈模擬遇到的小問題
原本問題很簡單,我們有轉移矩陣爲如下矩陣的馬氏鏈:
根據理論我們可以算出狀態1最終被狀態3吸收的概率是。我順便做了一個模擬:
M = 10000
np.random.seed(1234)
final_state = np.zeros(M)
for i in range(M):
x = 1 # start from 1
while(True):
r =st.uniform.rvs()
if(x==1):
if(r<0.2):
x = 1
elif(r<0.9):
x = 2
else:
x = 3
break
if(x==2):
if(r<0.05):
x = 1
elif(r<0.15):
x = 2
elif(r<0.2):
x = 3
break
else:
x = 4
break
final_state[i] = x
p1 = np.sum(final_state==3)/M
print(p1)
但是這樣得出的結論和理論不一致,重新看了一遍代碼,發現我使用了同一個隨機數來決定兩種不同狀態下一步的變化。我覺得可能是這裏出了問題,所以更改如下
M = 10000
np.random.seed(1234)
final_state = np.zeros(M)
for i in range(M):
x = 2# start from 1
while(True):
if(x==1):
r =st.uniform.rvs()
if(r<0.2):
x = 1
elif(r<0.9):
x = 2
else:
x = 3
break
if(x==2):
r =st.uniform.rvs()
if(r<0.05):
x = 1
elif(r<0.15):
x = 2
elif(r<0.2):
x = 3
break
else:
x = 4
break
final_state[i] = x
p1 = np.sum(final_state==3)/M
print(p1)
這時我得到了正確的答案。
然而我現在的問題是,第一個版本的代碼,**定義了怎樣一個隨機過程呢?**這種隨機過程是否存在實際例子?