自我避免走路

时间:2015-03-16 18:36:33

标签: r random-walk

我想模拟自我避免二维随机游走 在正方形格子上绘制路径。

到目前为止,我已经写出了这个问题的代码:

n <- 100
x <- 0
y <- 0 

randomwalkx <- 0
randomwalky <- 0

for(i in 1:n){

  random <- sample(0:3, 1)

  if(random == 0){x <- x+1}
  if(random == 1){x <- x-1}
  if(random == 2){y <- y+1}
  if(random == 3){y <- y-1}

  xcheck <- x %in% randomwalkx
  ycheck <- y %in% randomwalky


  if(ycheck == "TRUE" && xcheck == "TRUE"){

    if(random==0){x<-x-1}
    if(random==1){x<-x+1}
    if(random==2){y<-y-1}
    if(random==3){y<-y+1}

  }else{
    randomwalkx <- c(randomwalkx, x)
    randomwalky <- c(randomwalky, y)
  }

}


  plot(randomwalkx,randomwalky,xlab='x',ylab='y')
  lines(randomwalkx,randomwalky,type='b')

然而,路径仅沿一个对角线方向行进。任何人都可以看到我犯的错误或解决了这个问题吗?

1 个答案:

答案 0 :(得分:2)

问题出在这一行:

if(ycheck=="TRUE"&&xcheck=="TRUE"){

该线正在做的是让你的步行不能“倒退”。假设你的步行是randomwalkx =(0,1,1,2),randomwalky =(0,0,-1,-1),你的下一个滚动给你x = x-1:下一个坐标是1, - 1。随机游走历史中都存在x = 1和y = -1,因此您的循环将重新滚动,直到您继续朝x或y的相同方向前进。

您可以通过将行更改为

来解决此问题
if(paste(x,y) %in% paste(randomwalkx, randomwalky)){