Gating

  • Gatingは膜電位・神経生理の世界で用いられる言葉(Wikipedia)
    • 0/1の情報に量子化する作用とも言える
  • こちらで時系列パターンの発生を見ている
    • たった一つの推移行列があって、それが離散的なとき(要素が0,1のみでできている推移行列の場合)には、複数の循環があり、そのような推移行列の作用を続けると、ぐるぐると状態を回る
    • たった一つの推移行列が離散的でないときには、「平衡状態」に移行する
    • 離散的な推移行列の重みづけ線形和のときも、「平衡状態」に移行する
  • 離散的でない推移行列が複数あって、それらが、離散的に順序を持って作用するときには、それぞれの推移行列が表す「平衡状態」が一つではないので、複数の平衡状態の間を惑う
  • 現実的には、生命現象において、推移行列が離散的に順序を持って作用することは難しいはず。なぜなら、多数の要素に時間軸を守らせることは難しいから
  • そんなとき、一部の要素から、次の要素への振り分けが、0,1式になっていて、あるときは、方向iへ、あるときは方向jへ、というような振り分け点があると、たとえ、推移行列が一つであっても、平衡状態へは到達しない
  • 細胞の応答性などは、入力に対して、0/1の反応を返すことがあるので、このような仕組みを持たせることで、減衰してしまわない状態が維持されていると考えるのは妥当だろう
SeqCircuit<-function(s){
	n<-length(s)
	s0<-1:n
	h<-list(c())
	counter<-1
	checker<-rep(1,n)
	while(sum(checker)>0){
		st<-s0[which(checker==1)][1]
		tmpval<-s[st]
		tmpseq<-c(tmpval)
		checker[tmpval]<-0
		while(tmpval!=st){
			tmpval2<-s[tmpval]
			tmpseq<-c(tmpseq,tmpval2)
			tmpval<-tmpval2
			checker[tmpval]<-0
		}
		h[[counter]]<-tmpseq
		counter<-counter+1
	}
	return(list(Circuits=h,NumCircuit=length(h),LengthCircuit=as.numeric(lapply(h,length))))
}

# 要素の量が変化しながら、総量1で固定されている状況

Nelement<-10 # 要素数
# 要素の初期割合
library(MCMCpack)

s<-c(rdirichlet(1,rep(1,Nelement)))
S1<-1:Nelement
# 追跡する時間(世代)数
maxT<-200

# 相互に独立するべき循環のセットの数(個々の循環のセットには、複数の循環があるが、それらは、要素を共有しない)
Num<-10

Mlist<-list() # 複数の循環セットを規定する行列を納めたリスト
for(x in 1:Num){

S1<-sample(S1)

tmpm<-matrix(0,length(s),length(s))
for(i in 1:length(s)){
	tmpm[i,S1[i]]<-1
}

Mlist[[x]]<-tmpm
Mlist[[x]]<-t(rdirichlet(Nelement,rep(1,Nelement)))
Mlist[[x]]<-Mlist[[1]]
}

Mlist2<-Mlist
for(i in 1:Num){
	tmppp<-rep(0,Nelement)
	tmppp[sample(1:Nelement,1)]<-1
	Mlist2[[i]][,sample(1:Nelement,1)]<-tmppp

}
Mlist2<-Mlist
for(i in 1:5){
	tmppp<-rep(0,Nelement)
	tmppp[sample(1:Nelement,1)]<-1
	Mlist2[[i]][,sample(1:Nelement,1)]<-tmppp

}

# 循環セットの行列を作用させる順番。適当に
Numrep<-10
rseq<-rep(sample(1:Num,Numrep,replace=TRUE),maxT/Numrep)

# 要素の頻度内訳の格納用行列
Ss<-matrix(0,maxT,Nelement)
Ss2<-Ss
s2<-s
# 時間発展させる
for(i in 1:maxT){
	s<-Mlist[[rseq[i]]]%*%s
	s2<-Mlist2[[rseq[i]]]%*%s2
	Ss[i,]<-s
	Ss2[i,]<-s2
}

# 1からtobedrawnElement個の要素の割合の時間経過をプロット
# 1からtobedrawnTime時間の経過をプロット
par(mfcol=c(2,2))

tobedrawnElement<-min(5,Nelement)
tobedrawnTime<-50
matplot(Ss[1:tobedrawnTime,1:tobedrawnElement],type="l")
matplot(Ss2[1:tobedrawnTime,1:tobedrawnElement],type="l")

tobedrawnElement<-1
tobedrawnTime<-maxT
matplot(Ss[1:tobedrawnTime,1:tobedrawnElement],type="l")
matplot(Ss2[1:tobedrawnTime,1:tobedrawnElement],type="l")

par(mfcol=c(1,1))