赞
踩
目录
元胞自动机(cellular automata,CA) 是一种时间、空间、状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。
元胞自动机由元胞、元胞空间、元胞邻居和元胞规则四部分组成。
固定型,周期型,绝热型和映射型四种类型。
固定型:固定给某一个数值,没有规则来确定。
例如图中左下角这个3没有左邻居和下邻居,所以我们任意给值作为其邻居的值
周期型:
左上角的3放置最下侧作为3的下邻居 右下角的5放置左下角作为3的左邻居
绝热型:
将缺少邻居的中心元胞的值赋给邻居
映射型:
由中心元胞相邻的邻居进行赋值,类似于跳棋
- %%奇偶规则游戏
- clear;clc;
-
- %指定边界长度
- n = 200;
- Se = zeros(n);
- z = zeros(n);
-
- %将中间5*5=25个点初始化为1
- Se(n/2-2:n/2+2,n/2-2:n/2+2)=1;
-
- Ch = imagesc(Se);
- axis square;
-
- %设置边界情况
- Sd = zeros(n+2);
-
- while(true) %死循环
- Sd(2:n+1,2:n+1) = Se;
- %4邻居型计算通用式 进行邻居数值求和
- sumValue = Sd(1:n,2:n+1)+Sd(3:n+2,2:n+1)+Sd(2:n+1,1:n)+Sd(2:n+1,3:n+2);
- Se = mod(sumValue,2);
- set(Ch,'cdata',Se);
- pause(0.03)
- end
规则:
(1)树————>火
(2)火————>空地
(3)空地————>树
- clear;clc;
- %火灾
- % 定义表示森林的矩阵大小
- n = 300;
- % 迭代次数
- k = 30000;
-
- Pground = 0.8; % 从着火变成空地的概率
- Plight = 5e-6; Pgrowth = 1e-3; % 定义闪电和生长的概率
- P2=0.7; %旁边有火,树着火的概率
-
- UL = [n,1:n-1]; DR = [2:n,1]; % 定义上左,下右邻居
- veg=zeros(n,n)+2; % 初始化表示森林的矩阵
- imh = image(cat(3,veg,veg,veg)); % 可视化表示森林的矩阵
- Sd = zeros(n+2); %边界
-
- % veg = 空地为0 着火为1 树木为2
- for i=1:k
- Sd(2:n+1,2:n+1) = veg;
- %8邻居通用表达式 判断邻居是否着火
- sumValue = (Sd(1:n,2:n+1)==1)+(Sd(2:n+1,1:n)==1)+(Sd(2:n+1,3:n+2)==1)+(Sd(3:n+2,2:n+1)==1);
-
- %进行演化迭代
- for p=1:n
- for q=1:n
- if(veg(p,q)==2 && ((sumValue(p,q)>0 && rand()<P2)||rand()<Plight))
- %首先要是树,而且需要邻居有火,就会一定概率着火;或者被雷劈了,就会直接着火
- veg(p,q)=1;
- elseif(veg(p,q)==1&&rand()<Pground)
- %如果是火且满足概率,则变为空地
- veg(p,q) = 0;
- elseif(veg(p,q)==0&&sumValue(p,q)==0&&rand()<Pgrowth)
- %如果是空地,且周围没有火,那么以一定概率长成树
- veg(p,q) = 2;
- end
- end
- end
- set(imh, 'cdata', cat(3,(veg==1),(veg==2),zeros(n)))
- drawnow
- end
参考:
【数学建模】元胞自动机(CA)详解 + Matlab代码实现_WSKH0929的博客-CSDN博客_matlab元胞自动机
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。