2016-07-11 3 views
2

Это моя задача:Казино игры с матричными различными вероятностями

Питер идет в казино с 1 долларами. С шансом p Питер выигрывает 1 доллар и шанс (1-p) он теряет 1 доллар. Процесс можно рассматривать как цепь марков.

Если Питер доходит до 0 долларов, он уходит домой банкротом, если ему удается достичь 5 долларов, он идет домой счастливым.

Найти вероятность того, что Питер отправится домой с 5 долларами, если p = 30%, 40%, 50%, 60% & 70%. Построить матрицы для каждой вероятности, где первые 4 состояния являются переходным классом (1- 4 доллара), а два последних состояния - это два повторяющихся состояния (0 & 5 долларов).

Мой план в решении его

найти, когда каждый отдельный матрица сходится (Р^п = Р^п + 1) с when_converged.

Затем используйте, что п в MPOW, чтобы увидеть вероятность перехода от 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), то вероятность того, чтобы идти домой с 5 долларов становится меньше по сравнению с MPOW (P50, 47) & mpow (P40, 37). Где вероятность выигрыша 1 доллара меньше. Что неправильно. Есть ли что-то, что я делаю неправильно? Попробуйте решить его, используя мой метод & не со всем разным кодом.

+0

Если что-то неясно, спрашивайте. – PeterNiklas

+1

Как я вижу, вероятность остаться в состоянии 0 или 5 должна быть 1. Это то, что называется поглощающим состоянием. Там должны быть только переходы из состояния одного в 0 или 2, и они должны быть взаимодополняющими (т. Е. Суммой к одному). Твои матрицы не похожи на меня. –

ответ

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 

Это может помочь в создании таких матриц с различными значениями для Р

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 

Детерминистические или теоретические вероятности после трех итераций (начиная с состояния = 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