Self-avoiding pathの一般化と自己改変型多スイッチシステム

  • 複数のON-OFFスイッチでできたシステムがあるとする
  • その格子空間を酔歩しているとする
  • 歩きながら何もシステムに変化がなければただの酔歩
  • 酔歩にはSelf-avoiding path的な酔歩というのがある
  • すでに通ったノードはもう通らない、というルールを課した酔歩のことである
  • これを言い換える
  • すでに通ったノードに連結するエッジを取り去り、格子を改変しながら進む酔歩である、と
  • じゃあ、少し一般化して「格子を改変しながら進む」ときの「エッジの取り去りルール」を、「ノードに連結するエッジ」を取り除くのではなくて、「ノードが指定したエッジ」を取り除くことにする
  • そうすると格子の上を酔歩しながら、格子のエッジがだんだん減って行く
  • それを「自己改変型多スイッチシステム」と呼ぶことにしよう
  • このようなシステム上をある点から多数の酔歩する虫が歩くと、虫の座標の分布に特徴が現れる
  • どんな「取り去りエッジ指定情報」のときに、どんな「分布特徴」が対応するか、には、どういうルールが潜むのだろう?
  • 以下、お試しソース
n <- 5

x <- expand.grid(rep(list(0:1),n))

d <- as.matrix(dist(x,method="manhattan"))

d. <- d
d. <- d.==1
library(igraph)
g <- graph.adjacency(d.)

plot(g)

e.list <- get.edgelist(g)

v.e <- sample(1:length(e.list[,1]),length(x[,1]),replace=TRUE)
v.e <- list()
for(i in 1:length(d.[,1])){
	v.e[[i]] <- sample(1:length(e.list[,1]),sample(10))
}

n.rep <- 50

n.iter <- 100
n.step <- 50
#f <- list()
f <- matrix(0,n.rep,length(d.[1,]))
for(ii in 1:n.rep){
p <- matrix(0,n.iter,n.step+1)
for(i in 1:n.iter){
	init <- 1
	m <- d.
	p[i,1] <- init
	for(j in 1:n.step){
		rm.edge <- matrix(e.list[v.e[[p[i,j]]],],ncol=2)
		
		for(k in 1:length(rm.edge[,1])){
			m[rm.edge[k,1],rm.edge[k,2]] <- m[rm.edge[k,2],rm.edge[k,1]] <- 0
		}
		
		ok <- which(m[p[i,j],] == 1)
		if(length(ok)>0){
			s <- sample(ok,1)
			if(runif(1) < 0.5){
				p[i,j+1] <- s
			}else{
				p[i,j+1] <- p[i,j]
			}
			
		}else{
			p[i,j+1] <- p[i,j]
		}
	}
}

t <- table(p[,n.step])
t
tab <- tabulate(p[,n.step],length(d.[1,]))
f[ii,] <- tab
}

length(t)
length(d.[1,])

all.tab <- apply(p,2,tabulate)

for(i in 1:(n.step+1)){
	tab <- tabulate(p[,i])
	plot(g,vertex.color=rgb(tab/max(tab),1-tab/max(tab),0))
}