Вернуть среднее количество витков за 1000 раз - PullRequest
0 голосов
/ 12 ноября 2018

Я относительно новичок в R, и у меня есть проект для симуляции игры.Я разработал игру и ввел код, в котором он будет возвращать количество ходов, необходимое для победы в игре, однако я застрял в том, как имитировать игру 1000 раз и вернуть среднее значение, хотя это кажется таким простым, япросто не могу решить это.

Код для возврата количества ходов, необходимых для победы:

    s=seq(1:25)
    current=vector()
    current[1]=1
    gameon=1
    turns=1
    while(gameon==1)
    {
      current[turns+1]=sample(s,1,replace=TRUE,prob=w[current[turns],])
      turns=turns+1
      if (current[turns]==25)
      {
       gameon=0
      }
    }

Код игры и матрица перехода:

w = matrix(0, nrow=25, ncol=25)
for (i in 1:25)                      #RED   - 1,2 down 2     3,4 back 3      5,6 
stay
{                                    #AMBER - 1,2 down 1   3,4 back 2      5,6 
forward 1
  if (i == 4)                        #GREEN - 1,2 stay     3,4 forward 1   5,6 
forward 2
  {
    w[i, i+2] = 1/3
    w[i,i+1] = 1/3           # effects on a state with a GREEN pub
    w[i,i] = 1/3
  }
  else if (i == 6)
  {
    w[i,i] = 1/3
    w[i,i+1] = 1/3
    w[i,i+2] = 1/3
  }
  else if (i == 7)
  {
    w[i,i-3] = 1/3
    w[i,i-2] = 1/3          # effects on a state with an AMBER pub
    w[i,i+1] = 1/3
  }
  else if (i == 12)
  {
    w[i,i] = 1/3
    w[i,i+1] = 1/3
    w[i,i+2] = 1/3
  }
  else if (i == 16)
  {
    w[i,i-3] = 1/3
    w[i,i-2] = 1/3         # effects on a state with a RED pub
    w[i,i+1] = 1/3
  }
  else if (i == 15)
  {
    w[i,i-10] = 1/3
    w[i,i-3] = 1/3         # effects on a state with a RED pub
    w[i,i] = 1/3
  }
  else if (i == 18)
  {
    w[i,i] = 1/3
    w[i,i+1] = 1/3         # effects on a state with a RED pub
    w[i,i+2] = 1/3
  }
  else if (i == 21)
  {
    w[i,i-10] = 1/3
    w[i,i-3] = 1/3
    w[i,i] = 1/3
  }
  else if (i == 24)
  {
    w[i,i-10] = 1/3
    w[i,i-3] = 1/3                  #horrible square to be stuck on, cant win from 
this square.
    w[i,i] = 1/3
  }
  else if (i <= 19)
  {
    w[i, seq(i+1,i+6)] = 1/6
  }
  else if (i==20)
  {
    w[i,seq(i+1,i+4)] = 1/6                
    w[i,i+5] = 2/6
  }
  else if (i==22)
  {
    w[i,seq(i+1,i+2)] = 1/6
    w[i,i+3] = 4/6
  }
  else if (i == 23)
  {
    w[i,i+1] = 1/6
    w[i,i+2] = 5/6
  }
  else if (i == 25)
  {
    w[i,i] = 1 #game finished
  }

}

Я полагаю, что цикл for будетлучше всего использовать, но я не знаю, как настроить его так, чтобы оно возвращало среднее число ходов.

...