元胞自动机在生态中的应用一....元胞自动机的简介元胞自动机由JohnvonNeumannStanislawUlam在1950s提出的。元胞自动机可用来研究很多一般现象。其中包括通信、信息传递、计算、构造、生长、复制竞争与进化等。同时。它为动力学系统理论中有关秩序(Ordering)、紊动(Turbulence)、混沌(Chaos)、非对称(Symmetry-Breaking)、分形(Fractality)等系统整体行为与复杂现象的研究提供了一个有效的模型工具。元胞自动机自产生以来,被广泛地应用到社会、经济、军事和科学研究的各个领域。应用领域涉及社会学、生物学、生态学、信息科学、计算机科学、数学、物理学、化学、地理、环境、军事学等。计算机科学-计算机图形学的研究、化学-分子运动、物理-气体扩散、生命科学-细胞的增长、医学-肿瘤的生长、历史-国家的演化动态、交通-交通规则和军事科学-军事作战模拟等。元胞自动机(CellularAutomata,简称CA)也有人译为细胞自动机、点格自动机、分子自动机或单元自动机)。是一时间和空间都离散的动力系统。散布在规则网格(LatticeGrid)中的每一个元胞(Cell)[也有人叫斑块(Patch)]取有限的离散状态,遵循同样的作用规则,依据确定的(或随机的)局部规则作同步更新。大量的元胞通过简单的相互作用而构成动态系统的演化。元胞自动机根据不同的分法有许多类型,主要有下面两种:1.按维数分类:一维、二维和三维;2.按动态演化行为分类:平稳型、周期型、混沌型以及复杂型。3.按动力学分类:(1)均匀状态(点态吸引子);(2)简单的周期结构(周期性吸引子);(3)混沌的非周期性模式(混沌吸引子);(4)第四类行为可以与生命系统等复杂系统中的自组织现象相比拟,但在连续系统中没有相对应的模式。这类元胞自动机最具研究价值。元胞自动机的构成条件:1.元胞空间:离散的规则的网格以及边界条件;2.状态集:每个元胞都有一定的状态,且状态的数量是有限的;3.邻居作用:定义元胞与周围邻居的相互作用;3.演进规则:刻画元胞状态的演化动态。演进规则是把元胞邻居状态映射到该该元胞状态的一种函数,表示如下:其中:R-规则,-元胞(i)的邻居状态,-元胞(i)的状态。演化规则是元胞自动机的核心,规则不一样,元胞自动机所得到的结果也不同。总之.简单的讲,元胞自动机可以视为由一个元胞空间和定义于该空间的变换函数所组成。图形示例:二....元胞自动机的应用1.1.1.1.生命游戏(J.J.J.J.ConwayConwayConwayConway)元胞自动机早期一个出名的应用就是生命游戏,生命游戏的构成及规则如下:(1)元胞分布在规则划分的网格上;(2)元胞具有0,1两种状态,0代表死,l代表生;(3)元胞以相邻的8个元胞为邻居。即Moore邻居形式;(4)一个元胞的生死由其在该时刻本身的生死状态和周围八个邻居的状态(确切讲是状态的和)决定:·在当前时刻,如果一个元胞状态为生,且八个相邻元胞中有两个或三个的状态为生,则在下--时刻该元胞继续保持为生,否则死去;·在当前时刻。如果一个元胞状态为死。且八个相邻元胞中正好有三个为生。则该元胞在下一时刻复活。否则保持为死。接着我们把它数学化:周期边界666601234560000周期边界000001234560000反射边界000001234566666iIbN)(:R)(IbNiiIbN)(:R)(IbN其中黑色代表活着(1),白色代表死亡(0)****相应程序后面给出2.2.2.2.集合种群(1)经典的集合种群模型(Levins模型)其中c和e分别表示局域物种的侵占率和死亡率,p代表被种群占据的区域在整个区域中的比例。在集合种群模型中,物种对物种的侵占为全局扩散,即侵占源为整个区域(整个元胞空间)上所有的局域种群,实际上物种的扩散有一定的范围,即扩散半径dN(网格的长度)。考虑局部扩散作用后集合种群模型将转化为CA模型其中,pi表示元胞i的上存在物种的概率,表示元胞i邻居中存在种群的概率,n表示邻居数量。在此模型中物种扩散半径与n有关,是局部的,此时侵占源仅仅是该空元胞邻居中的局域种群,即S。扩散(侵占)半径d=1时,就是我们所说的Moore邻居模式(n=(2d+1)2-1=8).从此模型中我们可以发现,元胞状态是连续的,且考虑了元胞的局部作用(而非全局作用).因此,CA模型比集合种群模型更符合实际。相应的离散状态模型:在离散CA模型中,每个元胞的状态只有存在(用‘0’表示)与不dpmcp(1p)epc(1p)epdtNNmNNiiiep-)p1(nScdtdp)(其中njijpsnSiiiSp(t1)c(1p(t))+(1-e)p(t)n存在(用‘1’表示)两种。元胞的状态转化规则如下:如果t时刻元胞i状态为0,则随机生成一个数s,如果s小于等于cp*,则下一时刻元胞状态为1,否则继续为0;如果t时刻元胞i状态为1,则随机生成一个数s,如果s小于等于e,则下一时刻元胞状态为0,否则继续为1。则相应的数学表达式如下:其中,表示元胞i邻居中存在物种(状态为1)的元胞比例.两种规则的模拟输出如下:颜色越白表示存在物种的概率越大(2)在Levins模型拥挤效应下的CA模型拥挤效应:当种群密度过高时个体内分泌腺功能絮乱造成的异常行为,从而使灭绝风险增加。加拥挤效应参数D后的集合种群模型(惠苍.2003.《Dynamicalcomplexityandmetapopulationpersistence》),此模型在一定的参数下会产生混沌。其中R表示元胞总数,dij表示元胞i和元胞j之间的距离。在这个模型中种群对空元胞的侵占与两元胞之间的距离负相关。相应的图如下;****相应程序后面给出*itt+1*i1,scpp(i)0p(i)0,scptt10,sep(i)1p(i)1,se*iSpn1020304050607080901001020304050607080901001020304050607080901001020304050607080901000.10.20.30.40.50.60.70.80.9Ddpcp(1-p)-[1+(1-e)p]pdt&Diiiiidpcp(1-p)+[e+(1-e))p]pdtRjiij1sMax[]dijdRj&ijiijp(t)1psd二维模拟图象-从这两幅图可以看出拥挤效应(D=35)产生了从种群中心向边缘扩散的空间波2.2.2.2.斑块占据(POPOPOPO)模型在相同的斑块(各斑块均同质且连通度相同)上考虑各种状态的相互转化,那么整个区域的状态被每个斑块上的状态所决定,因为每一时刻整个区域上的状态,能被每个状态斑块的比例所描述,这样的模型叫斑块占据模型(levins模型是其中一个),动态表示如下:X(t+1)=AX(t)其中X表示状态存在的概率向量(),A表示状态状态转移矩阵ii0x1x1,(,且对于所有的j,都成立.如果在PO模型中考虑局部作用,那么ij0a1iija1相应的模型就转化为CA模型。下面看一个简单的例子:如果斑块上有一个物种,用x(t),y(t)分别表示物种t时刻不存在、存在的概率。那么状态间相互转化的图示如下:CE1C011E其中C,E分别表示该物种的侵占概率和灭绝概率。那么转移矩阵如下1CEAC1E则x(t+1)1CEx(t)y(t+1)C1Ey(t)和levins模型一样接着我们考虑局部作用,即侵占只与该斑块的邻居有关(局部扩散),51015202530510152025305101520253051015202530而一个斑块上的物种灭绝率与邻居无关,即,,其中c,e和上面的模型SCcEen,一样,表示该物种的侵占率(有人叫侵占参数)、灭绝率(有人叫灭绝参数)。则相应的CA模型如下:(1)(1)()()(1)()(1)()iiiiiiSxtcxteytnSytcxteytn其中xi(t),yi(t)分别表示物种t时刻斑块i上不存在、存在的概率。因为xi(t)+yi(t)=1,如果我们只关心物种存在,那么模型可简化如下:(1)(1(t))(1)()iiiSytcyeytn很明显,此模型和基于levins模型的元胞自动机模型一样。3.3.3.3.基于个体的CACACACA模型和上面三个例子不同的是,这个模型是考虑个体状态的,而且建模的方法和上面都不一样,下面我们以森林火灾模型(AForestFireModel)为例。这个模型包含4个状态变量,及其解释在下表中。,1,[12]1,1(,,|).{1(1)}btijNtxbpijNpt其中,表示t时刻斑块(i,j)上活着的树被点着(被大火烧着)[12]1(,,|)tpijtN的概率,此概率与上一时刻的邻居状态有关;表示着火邻居的数量,表,1btNbp示一个树木(afixedburning)着火的概率。,,,1,2,2,{1,0,1},{1,0,1}||||1||||21.iijjiijjbtxMxijijijijtN状态x颜色对状态的解释(表示)-1黑色死亡(包括烧死)的树木(含死亡树木的斑块)0白色没有树木(空斑块)1绿色活着的树木(含活树的斑块)2红色正在燃烧的树木(含燃烧树的斑块)其中代表八邻对角线上的四个邻居的M一个着火的树下一时刻变成死树的概率为,[21]1,2(,,|)ijtxpijtN图*出示了状态转化的示意图,显示空斑块永远为空,不参与状态的变化。*12211210pp1.参考资料-----《StochasticCellelarAutomataModelsInDiseaseSpreadingAndEcology》/Magister三....分析方法2.簇分析(ClusterAnalysis)2.时间序列分析(TimeSeriesAnalysis)2.傅列分析(FourierAnalysis)。后两个分析方法很常见,在MATLAB里有现成函数.而簇分析,我现在还没有完全搞懂,以后在说。当然还有相图分析,分支图分析(这些方法也很常见)。四....相应程序:1.生命游戏functionlifeN=input('输入网格数量N=');T=input('输入时间T=');A=round(rand(N));%赋初始状态矩阵fort=1:TB=[zeros(1,N);A;zeros(1,N)];C=[zeros(N+2,1),B,zeros(N+2,1)];%非周期边界fori=2:N+1forj=2:N+1a=0;form=-1:1forn=-1:1ifi+m~=i&j+n~=jifC(i+m,j+n)==1%%1表示生存,0表示死亡a=a+1;elsea=a;endendendendifC(i,j)==0%%如果(i,j)状态为空ifa==3D(i-1,j-1)=1;elseD(i-1,j-1)=0;endelseifa==2|a==3D(i-1,j-1)=1;elseD(i-1,j-1)=0;endendendendA=D;iftT-20imagesc(D);colormap(gray)pause(0.5)endEnd2.拥挤效应(1)functionhuicangc=input('请输入殖民率c=');e=input('请输入灭绝率e=');d=input('请输入拥挤强度d=');N=input('请输入网格数N=');T=input('请输入=120的时间数T=');caerwei01=round(rand(N));%%%赋初值s=maxjuzhen(caerwei01);fo