首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >矩阵不同概率的赌场博弈

矩阵不同概率的赌场博弈
EN

Stack Overflow用户
提问于 2016-07-11 17:06:31
回答 1查看 107关注 0票数 2

这是我的任务:

彼得带着一美元去赌场。有了p的机会,彼得赢了1美元,他赢了1美元。这个过程可以看作是一个马尔可夫链。

如果彼得到了0美元,他就破产了,如果他能赚到5美元,他就幸福地回家了。

当p=为30%、40%、50%、60%和70%时,找出彼得带着5美元回家的可能性。构造每个概率的矩阵,其中前4个状态是瞬态类(1-4美元),最后两个状态是两个递归状态(0&5美元)。

我解决它的计划

当每个独立的矩阵与when_converged收敛时(P^n=when_converged)。

然后使用mpow中的n来查看从1美元到5美元的概率,换句话说,从状态1到6。

这是我的代码:

代码语言:javascript
复制
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收敛的。

代码语言:javascript
复制
when_converged(P40, 0.00005)

从Rstudio中,我知道P40收敛于37。

代码语言:javascript
复制
when_converged(P50, 0.00005)

从Rstudio中,我知道P50收敛于47。

代码语言:javascript
复制
when_converged(P60, 0.00005)

从Rstudio中,我得到P60收敛于61。

代码语言:javascript
复制
when_converged(P70, 0.00005)

从Rstudio中,我知道P70的收敛值为79。

代码语言:javascript
复制
mpow(P30, 35)

mpow(P40, 37)

mpow(P50, 47)

mpow(P60, 61)

mpow(P70, 79)

我需要的帮助

我从Rstudio得到的是,对于mpow(P60,61)和mpow(P70,79)来说,用5美元回家的概率比mpow(P50,47)和mpow(P40,37)要小。其中赢1美元的可能性较小。感觉不对。我做错什么了吗?请尝试使用我的方法来解决这个问题&而不是使用完全不同的代码。

EN

回答 1

Stack Overflow用户

发布于 2016-07-12 00:21:45

这就是我如何构造一个P30矩阵..。和你的不一样:

代码语言:javascript
复制
> 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状态下被发送给自己,而在其他情况下,它被发送到相邻的输出列。所以,在-1中要么是0,要么是2。用头名和行名显示可能更清楚:

代码语言:javascript
复制
> 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建立具有不同值的矩阵。

代码语言:javascript
复制
 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开始:

代码语言:javascript
复制
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

代码语言:javascript
复制
> 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-package中也有一个矩阵幂函数-package.

代码语言:javascript
复制
> 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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38312464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档