虫の動きに粘り制約を入れる

  • 昨日の続き
  • 種類として「隣り合った」虫」の動きは似ている、という制約を入れることを考える
  • 多型のアレルで言えば、交叉の起きにくさ(連鎖不平衡の起源)
  • こちらで、「連(連続したもの)」を考慮した0,1配列の発生を書いた。それを適用して、昨日のソースを改変したのが以下のソース
Nx<-100 #1次元格子
Nm<-100 #座位数(虫の種類数)
Nt<-100 #世代数

A<-array(0,c(Nx,Nm,Nt))

#初期の虫分布
Xrange<-(Nx/2-10):(Nx/2+10)
st<-sample(Xrange,Nm,replace=TRUE)
end<-sample(Xrange,Nm,replace=TRUE)

#st<-rep(sample(Xrange,1),Nx)
#end<-rep(sample(Xrange,1),Nx)

for(i in 1:Nm){
	A[st[i]:end[i],i,1]<-1
}

image(A[,,1])

# 生存条件
LoL<-0.3*Nm
UpL<-0.7*Nm

S<-apply(A[,,1],1,sum)

dead<-((S<=LoL) + ( S>=UpL))

A[which(dead==1),,1]<-0



image(A[,,1])
fcross<-0.2

for(i in 2:Nt){
	A[,,i]<-A[,,i-1]
	for(j in 1:Nx){
		# 空間を閉じるための処理
		pre<-j-1
		post<-j+1
		if(pre<1)pre<-Nx
		if(post>Nx)post<-1
		# 粘りを入れる
		rrr<-sample(c(-1,1),Nm,replace=TRUE,prob=c(fcross,1-fcross))
		rrr<-cumprod(rrr)
		rrr<-(rrr+1)/2
		#rinitial<-sample(c(0,1),1)
		#cross<-runif(Nm)
		
		#rrr<-sample(c(0,1),1) 

		for(k in 1:Nm){
			#rrr<-sample(c(0,1),1) # 粘りを入れる
			if(A[j,k,i]==0){
				if(A[pre,k,i-1]==1 || A[post,k,i-1]==1){
					A[j,k,i]<-rrr[k]
					#A[j,k,i]<-sample(c(0,1),1)
					#A[j,k,i]<-1
				}
			}

		}
	}
	S<-apply(A[,,i],1,sum)

	dead<-((S<=LoL) + ( S>=UpL))

	A[which(dead==1),,i]<-0

	image(A[,,i])

}

for(i in 1:Nt){
	filenum=10000+i
	filename=paste("test",filenum,".jpeg",sep="")
	jpeg(file=filename)
	image(A[,,i])
	dev.off()
}