前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >元胞自动机概述与MATLAB实现

元胞自动机概述与MATLAB实现

作者头像
里克贝斯
发布2021-05-21 16:00:23
1.6K0
发布2021-05-21 16:00:23
举报
文章被收录于专栏:图灵技术域图灵技术域

什么是元胞自动机?

元胞自动机(cellular automata,CA) 是一种时间、空间、状态都离散,空间相互作用和时间因果关系为局部的网格动力学模型,具有模拟复杂系统时空演化过程的能力。它能构建随时间推移发生状态转移的系统,细胞存在于一维或多维网格中,每个细胞都有一个或多个状态,每个细胞都有邻居(即邻近的细胞)。

元胞自动机分类

平稳型:自任何初始状态开始,经过一定时间运行后,元胞空间趋于一个空间平稳的构形,这里空间平稳即指每一个元胞处于固定状态。不随时间变化而变化。 周期型:经过一定时间运行后,元胞空间趋于一系列简单的固定结构(Stable Patterns)或周期结构(Perlodical Patterns)。由于这些结构可看作是一种滤波器(Filter),故可应用到图像处理的研究中。 混沌型:自任何初始状态开始,经过一定时间运行后,元胞自动机表现出混沌的非周期行为,所生成的结构的统计特征不再变止,通常表现为分形分维特征。 复杂型:出现复杂的局部结构,或者说是局部的混沌,其中有些会不断地传播。

奇偶规则

奇偶规则是定义在二维网格上的一种元胞自动机。每个网格的状态用0各1表示。

(1)     对应于每一个元胞位置(i,j)计算出其八个最近领居在t时刻的状态值St的总和M(i,j)。

(2)     根据M(i,j)取值的奇偶性来决定下一时刻t+1该点的状态St+1(i,j)。当M(i,j)为偶数时,St+1(i,j)等于0;当M(i,j)为奇数时,St+1(i,j)等于1。八个点和为偶数,则变为0,为奇数则变为 1

平稳型元胞自动机实现

代码语言:javascript
复制
% 规则,先把中间点置为1,每一时间步对每一点,如果周围
% 八个点和为偶数,则变为0,为奇数则变为 1


Map = [1 1 1; 0 0 0];
colormap(Map);
% 设置网格大小
S = 121;
L = zeros(S);
% 把中间一个数设置为 1 作为元胞种子
M = (S+1)/2;
L(M, M) = 1;
Temp = L;
imagesc(L);

% 计算层数
Layer = (S-1)/2 + 1;

for t=2:Layer
    for x=M-t+1:M+t-1
       if x==M-t+1 || x==M+t-1
           
          for y=M-t+1:M+t-1
            SUM = 0;
            for m=-1:1
               for n=-1:1
                  if x+m>0 && x+m<=S && y+n>0 && y+n<=S
                     SUM = SUM + L(x+m, y+n); 
                  end
               end
            end
            SUM = SUM - L(x, y);
            Temp(x, y) = mod(SUM, 2);
          end
          
       else
            y = M-t+1;
            SUM = 0;
            for m=-1:1
               for n=-1:1
                  if x+m>0 && x+m<=S && y+n>0 && y+n<=S
                     SUM = SUM + L(x+m, y+n); 
                  end
               end
            end
            SUM = SUM - L(x, y);
            Temp(x, y) = mod(SUM, 2);
            
            y = M+t-1;
            SUM = 0;
            for m=-1:1
               for n=-1:1
                  if x+m>0 && x+m<=S && y+n>0 && y+n<=S
                     SUM = SUM + L(x+m, y+n); 
                  end
               end
            end
            SUM = SUM - L(x, y);
            Temp(x, y) = mod(SUM, 2);
       end
    end
    L = Temp;
    imagesc(L);
    pause(0.1);
end

效果图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是元胞自动机?
  • 元胞自动机分类
  • 奇偶规则
  • 平稳型元胞自动机实现
  • 效果图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档