- Gatingは膜電位・神経生理の世界で用いられる言葉(Wikipedia)
- こちらで時系列パターンの発生を見ている
- たった一つの推移行列があって、それが離散的なとき(要素が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))))
}
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
}
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))