元胞自动机简介(美赛复习一)

为美赛准备,进行元胞自动机的简单回顾。
本文只是简单回顾,可能会进行相关论文复现。

文章目录

    • 一、简介
  • 1.元胞
  • 2.元胞空间
  • 3.元胞邻居
  • 4.边界条件
  • 5.规则
    • 二、简单例子

一、简介

元胞自动机:是一种时间、空间、状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。
元胞自动机由元胞元胞空间元胞邻居元胞规则四部分组成。
元胞自动机简介(美赛复习一)_第1张图片

1.元胞

元胞:可称为单元或基元,是元胞自动机最基本的部分。
元胞状态:在最简单的情况下,元胞有两种可能状态;较复杂情况下,具有多种状态。元胞的状态都按照元胞自动机的动力规则不断更新。

2.元胞空间

元胞空间:就是元胞在空间分布上的集合。
元胞空间的类型:
元胞自动机简介(美赛复习一)_第2张图片

3.元胞邻居

元胞邻居:某一元胞状态更新时所要搜索的空间域就是该元胞的邻居。
元胞邻居类型:
元胞自动机简介(美赛复习一)_第3张图片

4.边界条件

理论上,元胞空间是无限的,实际应用中无法达到这一理想条件。为了给元胞空间边界上的元胞拥有规则所需要的邻居,就需要构造出一些虚拟的邻居。
常用的邻居边界条件类型有:固定型周期型绝热型映射型这四种
(1)固定型边界
元胞自动机简介(美赛复习一)_第4张图片
(2)周期型边界
元胞自动机简介(美赛复习一)_第5张图片
(3)绝热型边界
元胞自动机简介(美赛复习一)_第6张图片
(4)映射型边界
元胞自动机简介(美赛复习一)_第7张图片

5.规则

根据元胞当前状态及邻居的状态决定下一时刻该元胞状态
元胞自动机根据规则进行局部元胞间的相互作用从而引起全局的变化。
特征:
1.离散型:空间、时间及状态都是离散的
2.同质性:服从相同的规律分布方式相同
3.并行性:元胞的状态更新规则变化是同步进行的
4.高维度:元胞自动机是一类无穷维动力系统
初等元胞自动机的介绍:
一维元胞自动机的元胞邻居半径为1;元胞有且只有两种状态。
在这里插入图片描述
元胞自动机简介(美赛复习一)_第8张图片
元胞自动机简介(美赛复习一)_第9张图片

二、简单例子

1.奇偶规则
元胞有两种状态,邻居之和为奇数时中心元胞为1;邻居之和为偶数,中心元胞变为0。
元胞自动机简介(美赛复习一)_第10张图片

奇偶规则代码
clc
clear all;
n=200;
Se=zeros(n);
Z=zeros(n);
Se(n/2-2:n/2+2,n/2-2:n/2+2)=1;
Ch=imagesc(cat(3,Se,Z,Z));  %可视化
axis square  %加边框
Sd=zeros(n+2);  
while(1)
    Sd(2:n+1,2:n+1)=Se;
    sum=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(sum,2);
   
    set(Ch,'cdata',cat(3,Se,Z,Z))
    pause(0.05)
end
   figure

2.生命游戏
在一个正方形的棋盘中,每个小格有两种状态,“生”或“死”,每个小格有8个邻居。
①、对于“生”的格子,若它的8个邻居中有两个或者三个为“生”,则该格继续保持“生”,否则就变为“死”。 ②、对于“死”的格子,若它的8个邻居中有3个“生”,则该格变为“生”,否则继续保持“死”。
元胞自动机简介(美赛复习一)_第11张图片

生命游戏代码
clc
clear;
n=200;
p=0.4;
z=zeros(n);
Se=rand(n)<p;
Sd=zeros(n+2);%矩阵初始化
Ph=image(cat(3,Se,z,z));%初始可视化
while(1)
    Sd(2:n+1,2:n+1)=Se;%
    Sum=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)+Sd(1:n,1:n)+Sd(3:n+2,1:n)+Sd(1:n,3:n+2)+Sd(3:n+2,3:n+2);
%邻居之和(邻居中生的元胞的数目)
    for i=1:n
    for j=1:n
    if Sum(i,j)==3||(Sum(i,j)==2&&Se(i,j)==1)%生的条件
        Se(i,j)=1;
    else 
            Se(i,j)=0;
    end
    end
end
set(Ph,'cdata',cat(3,Se,z,z))%更新可视化
   drawnow
end

3.澳洲火灾
经典的森林火灾元胞自动机模型是由 Drossel 和 Schwabl 在1992年提出。森林火灾元胞自动机模型定义在正方形网格上,元胞有三种状态:树,火和空地。
规则:
元胞自动机简介(美赛复习一)_第12张图片
元胞自动机简介(美赛复习一)_第13张图片

澳洲火灾代码
clc
clear
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 = 空地为0 着火为1 树木为2
for i=1:3000 
    sum =(veg(UL,:)==1) + (veg(:,UL)==1)+(veg(:,DR)==1) +  (veg(DR,:)==1);  % 计算出所有格子有几个邻居是着火的
% 根据规则更新森林矩阵:是否树=是否树-是否着火的树+是否新生的树(0-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

你可能感兴趣的:(数模回顾,matlab)