Моделирование игры в кости Монте-Карло в R

Привет, я пытаюсь решить проблему, когда у игрока есть 10 долларов. Подбрасывается монета, если игрок правильно называет ее, он зарабатывает 1 доллар, если неверно, он теряет 1 доллар. Каковы шансы, что он достигнет 0 долларов прежде, чем достигнет 20 долларов? Как долго в среднем длится игра? Сколько у него в среднем после 25 сальто? Я должен использовать метод Монте-Карло в R, чтобы закодировать это, но я новичок и не совсем уверен, с чего начать - вот о чем я думал

game <- function() {
x=10 ## $10
y=0 ## number of times player gets $20
z =0 ## number of times player loses money
 result<- sample(1:2,1, replace = TRUE)
if (result==1) {
x=x+1 } ## money goes up, 1 represents player calling correct coin
else{
x=x-1 }
if (x= 20) { 
y = y+1} ### dont know how to stop trials
if(x=0){
z=z+1}

Я совершенно не понимаю, как это кодировать, но вот идея. В основном я хочу смоделировать симуляцию 50/50 и посмотреть, как часто встречается y и z. Я не уверен, как запустить определенное количество испытаний или остановиться, когда я достигну 20 или 0 .... Спасибо за любую помощь.


person Mary Popko    schedule 26.04.2016    source источник


Ответы (1)


Ах, версия Gambler's Ruin.

Во всяком случае, кажется, что вы еще не использовали циклы (например, for и while) в R, что странно, поскольку это довольно далеко в семестре.

Приведенное ниже позволит вам запустить моделирование, чтобы ответить на ваши вопросы.

# Set configuration
money = 10  # $10

B = 100         # Number of games to play

y = 0           # Number of times player gets $20 from ALL games run
z = rep(0, B)   # Number of times player loses money per game
r = rep(0, B)   # Number of rounds played per game
a = rep(0, B)   # Value on the 25th turn per game (not the average!)

# Start playing games!
for(i in 1:B){

  # Reset settings for each game. 

  # Make it reproducible by setting a seed. 
  set.seed(1337+i)

  # Set Counter
  count = 1

  # Set game
  x = money

  while( x > 0 ){

    # Perform the draw
    result = sample(1:2,1, replace = TRUE)

    # 1 means the player wins!
    if(result == 1) {
      x = x + 1 

    } else { # 2 - The player loses!
      x = x - 1 

      # Increment Player Loss
      z[i] = z[i] + 1
    }

    # Increase round calculation
    r[i] = r[i] + 1

    count = count + 1

    # After 25 flips, how much is left? 
    if(count == 25){
      a[i] = x
    }

    # Reset to zero? 
    if(x == 20){
      y = y + 1

      # End game
      break;
    }

  }

}
person coatless    schedule 26.04.2016