- 昨日の記事では、2次元におけるself-avoiding pathのシミュレーションを行った
- 袋小路に頭を突っ込んで動けなくなる現象「どん詰まり」現象を観察するとともに、それを回避する仕組みについて考えた
- 今日の記事では、次元を上げてみよう
- 次元を2から3に上げると空間が格段に広くなるので、「どん詰まり」現象が起きる確率は低くなる
- ソースとしてはこんな感じ
- animationパッケージを使ってsaveGIF()で囲めば映画が作れる(昨日の記事を参照)
k<-2
b<-matrix(0,4,k+1)
b[1,k+1]<-1
T<-1000
L<-40
library(rgl)
numChild<-1:2
probChild<-c(0.9,0.1)
for(i in 1:T){
plot(b[,1:2],col=gray(b[,k+1]/max(b[,k+1])),pch=15,cex=1,xlim=c(-L,L),ylim=c(-L,L))
Sys.sleep(0.05)
n<-sample(numChild,1,prob=probChild)
active<-which(b[,k+1]==1)
current<-sample(active,1)
for(j in 1:n){
neighbors<-matrix(0,2*k,k)
for(j in 1:k){
neighbors[(j-1)*2+1,]<-neighbors[j*2,]<-b[current,1:k]
neighbors[(j-1)*2+1,j]<-b[current,j]-1
neighbors[j*2,j]<-b[current,j]+1
}
ok<-rep(0,2*k)
for(j in 1:(2*k)){
for(j2 in 1:length(b[,1])){
if(sum((neighbors[j,]-b[j2,1:k])^2)==0){
ok[j]<-1
break
}
}
}
oks<-which(ok==0)
if(length(oks)!=0){
newb<-sample(oks,1)
b<-rbind(b,c(neighbors[newb,],1))
}
}
b[current,k+1]<-b[current,k+1]+1
cols<-rep(0,length(b[,1]))
for(j in 1:max(b[,k+1])){
cols[which(b[,k+1]==j)]<-j
}
}