2

これは私の仕事です:

ピーターは 1 ドルを持ってカジノに行きます。p の確率でピーターは 1 ドルを獲得し、(1-p) の確率で 1 ドルを失います。このプロセスは、マルコフ連鎖として見ることができます。

ピーターが 0 ドルに達すると破産して家に帰り、なんとか 5 ドルに達すると満足して家に帰ります。

p= 30%, 40%, 50%, 60% & 70% のとき、ピーターが 5 ドルを持って家に帰る確率を求めてください。最初の 4 つの状態が一時的なクラス (1 ~ 4 ドル) であり、最後の 2 つの状態が 2 つの再発状態 (0 および 5 ドル) である確率ごとに行列を作成します。

それを解決するための私の計画

when_converged を使用して、個別の各行列がいつ収束するか (P^n = P^n+1) を見つけます。

次に、mpow でその n を使用して、1 ドルから 5 ドル、つまり状態 1 から 6 になる確率を確認します。

これは私のコードです:

mpow <- function(P, n) {
    if (n == 0) {
        return(diag(nrow(P)))
    } else if (n == 1) {
        return(P)
    } else {
        return(P %*% mpow(P, n - 1))
    }
}

when_converged <- function(P, tol=0.00005) { 
    n = 1; diff = 1 
    while (diff > tol) { 
        A <- mpow(P, n) 
        B <- mpow(P, n+1) 
        diff <- max(abs(A - B)) 
        n <- n + 1 
    } 
    return(n) 
}


P30 <- matrix(c(0, 0.3, 0, 0, 0.7, 0, 0.7, 0, 0.3, 0, 0, 0, 0, 0.7, 0, 0.3, 0, 0, 0, 0, 0.7, 0, 0, 0.3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1), nrow = 6, ncol = 6, byrow = TRUE)

P40 <- matrix(c(0, 0.4, 0, 0, 0.6, 0, 0.6, 0, 0.4, 0, 0, 0, 0, 0.6, 0, 0.4, 0, 0, 0, 0, 0.6, 0, 0, 0.4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1), nrow = 6, ncol = 6, byrow = TRUE)

P50 <- matrix(c(0, 0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0.5, 0, 0, 0, 0, 0.5, 0, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1), nrow = 6, ncol = 6, byrow = TRUE)

P60 <- matrix(c(0, 0.6, 0, 0, 0.4, 0, 0.6, 0, 0.4, 0, 0, 0, 0, 0.6, 0, 0.4, 0, 0, 0, 0, 0.6, 0, 0, 0.4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1), nrow = 6, ncol = 6, byrow = TRUE)

P70 <- matrix(c(0, 0.7, 0, 0, 0.3, 0, 0.7, 0, 0.3, 0, 0, 0, 0, 0.7, 0, 0.3, 0, 0, 0, 0, 0.7, 0, 0, 0.3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1), nrow = 6, ncol = 6, byrow = TRUE)

when_converged(P30, 0.00005)

Rstudio から、P30 が 35 に収束することがわかりました。

when_converged(P40, 0.00005)

Rstudio から、P40 が 37 に収束していることがわかります。

when_converged(P50, 0.00005)

Rstudio から、P50 が 47 に収束していることがわかります。

when_converged(P60, 0.00005)

Rstudio から、P60 が 61 に収束することがわかりました。

when_converged(P70, 0.00005)

Rstudio から、P70 が 79 に収束していることがわかります。

mpow(P30, 35)

mpow(P40, 37)

mpow(P50, 47)

mpow(P60, 61)

mpow(P70, 79)

助けが必要なこと

Rstudio から得たのは、mpow(P60, 61) & mpow(P70, 79) の場合、mpow(P50, 47) & mpow(P40, 37) に比べて 5 ドルで家に帰る確率が低くなるということです。1ドルを獲得する確率が低い場合. これは間違っていると感じます。私が間違っていることはありますか?まったく別のコードではなく、私の方法を使用して解決してください。

4

1 に答える 1

3

これは私がP30マトリックスを構築した方法です...あなたのものと同じではありません:

> P30 <- matrix(c(1,  0, 0,  0,  0, 0,
+                   0.7, 0, 0.3, 0, 0,  0, 
+                   0,  0.7, 0, 0.3, 0, 0, 
+                   0,  0, 0.7, 0, 0.3, 0,
+                   0,  0,  0,  0.7, 0 , 0.3,                  
+                   0,  0, 0, 0, 0, 1), nrow = 6, ncol = 6, byrow = TRUE)
> P30
     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]  1.0  0.0  0.0  0.0  0.0  0.0
[2,]  0.7  0.0  0.3  0.0  0.0  0.0
[3,]  0.0  0.7  0.0  0.3  0.0  0.0
[4,]  0.0  0.0  0.7  0.0  0.3  0.0
[5,]  0.0  0.0  0.0  0.7  0.0  0.3
[6,]  0.0  0.0  0.0  0.0  0.0  1.0

各行の入力列は、状態が 0 または 5 の場合はそれ自体にのみ送信されますが、他の状態では隣接する出力列に送信されることに注意してください。したがって、in-1 は out-0 または out-2 のいずれかに移動します。おそらく、列名と行名で表示する方が明確です。

> rownames(P30) <- 0:5
> colnames(P30) <- 0:5
> P30
    0   1   2   3   4   5
0 1.0 0.0 0.0 0.0 0.0 0.0
1 0.7 0.0 0.3 0.0 0.0 0.0
2 0.0 0.7 0.0 0.3 0.0 0.0
3 0.0 0.0 0.7 0.0 0.3 0.0
4 0.0 0.0 0.0 0.7 0.0 0.3
5 0.0 0.0 0.0 0.0 0.0 1.0

これは、P の値が異なる行列を作成するのに役立ちます。

 p0 <-  matrix(0, nrow = 6, ncol = 6); p=.30
 p30 <- p0; p30 [cbind(2:5,1:4)] <- 1-p
             p30[cbind(2:5,3:6)] <- p
 p30[ cbind(c(1,1),c(6,6))] <- 1
 p30

     [,1] [,2] [,3] [,4] [,5] [,6]
[1,]  1.0  0.0  0.0  0.0  0.0  0.0
[2,]  0.7  0.0  0.3  0.0  0.0  0.0
[3,]  0.0  0.7  0.0  0.3  0.0  0.0
[4,]  0.0  0.0  0.7  0.0  0.3  0.0
[5,]  0.0  0.0  0.0  0.7  0.0  0.3
[6,]  0.0  0.0  0.0  0.0  0.0  1.0

3 回の反復後の決定論的または理論上の確率 (state=1 から開始:

c(0,1,0,0,0,0) %*% P30 %*% P30 %*% P30
#-----
         0 1     2 3     4 5
[1,] 0.847 0 0.126 0 0.027 0

あなたに同意しますmpow

> c(0,1,0,0,0,0) %*% mpow(P30 ,3)
         0 1     2 3     4 5
[1,] 0.847 0 0.126 0 0.027 0

-package%^%には、matrix-power 関数もあります。expm

> c(0,1,0,0,0,0) %*% expm::'%^%'( P30,3)
         0 1     2 3     4 5
[1,] 0.847 0 0.126 0 0.027 0
于 2016-07-12T00:21:45.190 に答える