保存量を持ついろいろなもののやりとり〜さらに一般化

  • 昨日までは捕食・被捕食の関係を見ていた
  • そこでは、ある種はある種に捕食されるという食物連鎖が1本の鎖でそれが和になっているモデルだった
  • 実際の食物連鎖はもっと複雑なネットワーク
  • ネットワークで考えるならば、たとえば、細胞内の遺伝子転写の世界を考えよう
  • そこでは、mRNAを生成するのに利用可能な何か(それは構成元素であるかもしれないし、エネルギーであるかもしれない)は有限な量であって、しかもそれはたいていの場合には、一定量の維持されている
  • その世界では、さまざまな者(物?)たちが相互に助け合ったり奪い合ったりしながら、mRNA量とその原資との分配をしている
  • たくさんの反応が並行して起きている
  • 個々の反応では「保存量」が「保存」される
  • 個々の反応には「消滅物」と「生成物」と「消滅も生成もしないけれど、参加する物(触媒とか)」が存在する
  • その状態は動的であるとともに、保存量を持つ状態であるから
  • 偏微分連立方程式であって、「固定点」を持ち、「固定点の周囲」に循環路ができて、その循環路上の時間変化においては、保存量は一定
  • 個々の反応の参加者と、その反応での消滅者と生成者をいろいろにする
  • 個々の反応で消滅する「数」や生成する「数」も1個と限らずいろいろにする
  • ここでは、参加者たちは「種の個体」であったり「物質〜分子」であるような言葉づかいをしてきたが、もっと、一般化できるだろう
  • ある分子が集まって、ある構造を作っているとする。その構造があって初めて起きる反応もあるだろう。そうすると、そのような構造は、この偏微分連立方程式の変量となる。「細胞の中でのできごと」を記述するのに、「インタクトな細胞膜全体」というのは、必須項目であって、それはこの連立方程式で変数であるべきである、というような具合に。
  • こんな風に考えると、ある分子のポリマー状態は、nポリマーの存在がn+1ポリマーの存在の前提条件であることなどから、nポリマーも1分子もn+1ポリマーもそれぞれが変数となる。そして「保存量が保存される」
n<-3
us<-sample(1:10,n)
Nr<-n*5 # 反応の数は色々
ks<-runif(Nr)
us<-sample(1:10,n,replace=TRUE)
# 反応の参加者、消滅者、生成者とその量
Player<-matrix(sample(1:4,Nr*n,replace=TRUE),Nr,n)
In<-matrix(sample(0:4,Nr*n,replace=TRUE),Nr,n)
Out<-matrix(sample(0:4,Nr*n,replace=TRUE),Nr,n)
# In OutはPlayerに限る
for(i in 1:length(In[,1])){
	for(j in 1:length(In[1,])){
		if(Player[i,j]==0){
			In[i,j]<-0
			Out[i,j]<-0
		}
		
	}
}

Niter<-10000
dt<-1
m<-matrix(0,Niter,n)
p<-rep(0,Niter)
m[1,]<-runif(n)

p[1]<-0
for(i in 1:n){
	p[1]<-p[1]+us[i]*m[1,i]
}
m[1,]<-m[1,]/p[1]
p[1]<-0
for(i in 1:n){
	p[1]<-p[1]+us[i]*m[1,i]
}

for(i in 2:Niter){
	m[i,]<-m[i-1,]
	for(j in 1:Nr){
		tmp<-ks[j]*dt
		pamountIn<-0
		pamountOut<-0
		for(k in 1:n){
			tmp<-tmp*m[i-1,k]^Player[j,k]
			pamountIn<-pamountIn+us[k]*In[j,k]
			pamountOut<-pamountOut+us[k]*Out[j,k]
		}

		for(k in 1:n){
			m[i,k]<-m[i,k]-In[j,k]*tmp+tmp*pamountIn/pamountOut*us[k]*Out[j,k]/pamountOut*Out[j,k]
			#m[i,k]<-m[i,k]-In[j,k]*tmp+Out[j*k]*tmp*pamountIn/pamountOut
		}
	}

	for(j in 1:n){
		p[i]<-p[i]+us[j]*m[i,j]
	}

}
plot(p,type="l",ylim=c(0,2),main="保存量")
plot(data.frame(m),cex=0.1)

#xlim<-ylim<-c(min(m),max(m))
#plot(data.frame(m),cex=0.1,xlim=xlim,ylim=ylim)