【问题标题】:Casino game with matrix different probabilities具有矩阵不同概率的赌场游戏
【发布时间】:2016-07-11 17:06:31
【问题描述】:

这是我的任务:

彼得带着 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 美元的概率较小。这感觉不对。有什么我做错了吗? 请尝试使用我的方法而不是使用完全不同的代码来解决它。

【问题讨论】:

  • 如果有什么不清楚的地方请追问。
  • 在我看来,保持在 0 或 5 状态的概率应该是 1。这就是所谓的吸收状态。应该只存在从状态 1 到 0 或 2 的转换,并且它们应该是互补的(即总和为 1)。你的矩阵在我看来不是那样的。

标签: r matrix stochastic-process


【解决方案1】:

这就是我构建 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

三次迭代后的确定性或理论概率(从 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

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

【讨论】:

    猜你喜欢
    • 2022-10-09
    • 2021-05-11
    • 2014-05-28
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多