元胞自动机

元胞自动机是数学建模常用东西

模拟森林火灾

%0为空位
%1为燃烧的树
%2为正常的树
n = 300; %构造森林大小
Plight = 5e-6; %被雷击中的概率
Pgrowth = 1e-2;%生长的概率
UL = [n 1:n-1]; %上左邻居
DR = [2:n 1];%下右邻居
veg=zeros(n,n);%森林
imh = image(cat(3,veg,veg,veg));
% veg = empty=0 burning=1 green=2
for i=1:3000 %循环
    %观察每一个空位其上下左右邻居正在燃烧的树的个数(sum为300*300矩阵,每一个值对应森林的每一个空位)
    
    sum =            (veg(UL,:)==1) + ...
        (veg(:,UL)==1)     +      (veg(:,DR)==1) + ...
                     (veg(DR,:)==1);
%现存的树=树-被烧毁的树+新生的树
    veg = 2*(veg==2) - ...
          ( (veg==2) & (sum>0 | (rand(n,n)<Plight)) ) + ...
          2*((veg==0) & rand(n,n)<Pgrowth) ;
     
    set(imh, 'cdata', cat(3,(veg==1),(veg==2),zeros(n)) )%画图
    drawnow
end

结合博客中模拟森林火灾的例子,我们大概可以分析出,元胞自动机本质上来讲是一种仿真模拟。将现实生活中的现象数学化进行模拟(这让我相当了,疫情期间一位同学用java实现的疫情传染模拟的模型)掌握它的本质是掌握python或者matlab中的一些矩阵变换技巧。例如上面的森林火灾就是通过矩阵平移的方式判断其上下左右是否存在被烧毁的树,然后将其状态修改为烧毁。其中的set函数是作图函数,用于形象地表示火灾的模拟。

关于元胞自动机部分持续更新......

posted @ 2021-01-29 23:54  LightAc  阅读(477)  评论(0编辑  收藏  举报
返回顶端