自我回避行走
Self avoiding 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')
但是路径只沿一个对角线方向行进。谁能看到我犯的错误或解决这个问题?
问题出在这一行:
if(ycheck=="TRUE"&&xcheck=="TRUE"){
那条线的作用是让你无法行走 "go backwards"。假设你的行走是 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)){
我想模拟一个自我回避的二维随机游走 在正方形格子上绘制路径。
到目前为止我已经写出了这个问题的代码:
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')
但是路径只沿一个对角线方向行进。谁能看到我犯的错误或解决这个问题?
问题出在这一行:
if(ycheck=="TRUE"&&xcheck=="TRUE"){
那条线的作用是让你无法行走 "go backwards"。假设你的行走是 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)){