一個馬氏鏈模擬的遇到的小問題

一個馬氏鏈模擬遇到的小問題

原本問題很簡單,我們有轉移矩陣爲如下矩陣的馬氏鏈:
123410.20.70.1020.050.10.050.83001040001\begin{aligned} &\begin{array}{ccccc} & 1 & 2 & 3 & 4 \\ 1 & 0.2 & 0.7 & 0.1 & 0 \\ 2 & 0.05 & 0.1 & 0.05 & 0.8\\ 3 & 0 & 0 &1 &0 \\ 4 & 0 & 0 &0 &1 \end{array} \end{aligned}

根據理論我們可以算出狀態1最終被狀態3吸收的概率是25137\frac{25}{137}。我順便做了一個模擬:

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)

這時我得到了正確的答案。

然而我現在的問題是,第一個版本的代碼,**定義了怎樣一個隨機過程呢?**這種隨機過程是否存在實際例子?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章