元胞自动机

原理:应用于物理模拟,生物模拟等领域

典型应用

  生命自动机:一个细胞下一状态的生死取决于周围细胞的生死。对一个细胞周围的 8 个近邻的元胞状态求和,状态改变规则如下:

       如果总和为 2 ,则下一时刻的状态不改变
    如果总和为 3 ,则下一时刻的状态为 1
    否则状态= 0

      一个细胞看作一个元胞,元胞的邻居定义通常有以下三种范式,这里采用第二种,认为其周围八个点为邻居:

  代码如下:

%% 设置GUI按键
plotbutton=uicontrol('style','pushbutton','string','运行', 'fontsize',12, 'position',[150,400,50,20], 'callback', 'run=1;');%运行按钮
erasebutton=uicontrol('style','pushbutton','string','停止','fontsize',12,'position',[250,400,50,20],'callback','freeze=1;');%停止按钮
quitbutton=uicontrol('style','pushbutton','string','退出','fontsize',12,'position',[350,400,50,20],'callback','stop=1;close;');%退出按钮
number = uicontrol('style','text','string','1','fontsize',12, 'position',[20,400,50,20]);%左上角数字
%% 元胞自动机设置
n=200;
%初始化各元胞状态
z = zeros(n,n);
sum = z;
cells = (rand(n,n))<.6;
% 建立图像句柄
imh = image(cat(3,cells,z,z));
set(imh, 'erasemode', 'none')
% 元胞更新的行列数设置
x = 2:n-1;
y = 2:n-1;

% 主事件循环 stop= 0; run = 0;freeze = 0;
while stop==0 if run==1 % 计算邻居存活的总数 sum(x,y) = cells(x,y-1) + cells(x,y+1) + cells(x-1, y) + cells(x+1,y)... + cells(x-1,y-1) + cells(x-1,y+1) + cells(x+1,y-1) + cells(x+1,y+1); % 按照规则更新 cells = (sum==3) | (sum==2 & cells); set(imh, 'cdata', cat(3,cells,z,z) ) stepnumber = 1 + str2double(get(number,'string')); set(number,'string',num2str(stepnumber)) end if freeze==1 run = 0; freeze = 0; end drawnow end
posted @ 2020-01-11 15:02  pipitongkw1  阅读(965)  评论(0编辑  收藏  举报