这是我的任务:
彼得带着 1 美元去赌场。在 p 的概率下,Peter 赢得 1 美元,在 (1-p) 的概率下,他损失 1 美元。该过程可以看作是一个马尔可夫链。
如果彼得达到 0 美元,他就会破产回家,如果他设法达到 5 美元,他就会高兴地回家。
求当 p=30%、40%、50%、60% 和 70% 时彼得带着 5 美元回家的概率。为每个概率构造矩阵,其中前 4 个状态是瞬态类别(1-4 美元),后两个状态是两个循环状态(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 美元的概率较小。这感觉不对。有什么我做错了吗?请尝试使用我的方法而不是使用完全不同的代码来解决它。