【元胞自动机】基于元胞自动机模拟生命演化、病毒感染等实例附matlab代码

 1 内容介绍

​元胞自动机,也叫细胞自动机,是一种离散模型。散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成动态系统的演化。不同于一般的动力学模型,元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则构成。凡是满足这些规则的模型都可以算作是元胞自动机模型。因此,元胞自动机是一类模型的总称,或者说是一个方法框架。其特点是时间、空间、状态都离散,每个变量只取有限多个状态,且其状态改变的规则在时间和空间上都是局部的。

将所有元胞自动机的动力学行为归纳为四大类(Wolfram. S.,1986):

⑴ 平稳型:自任何初始状态开始,经过一定时间运行后,元胞空间趋于一个空间平稳的构形,这里空间平稳即指每一个元胞处于固定状态。不随时间变化而变化。

⑵ 周期型:经过一定时间运行后,元胞空间趋于一系列简单的固定结构(Stable Patterns)或周期结构(Perlodical Patterns)。由于这些结构可看作是一种滤波器(Filter),故可应用到图像处理的研究中。

⑶ 混沌型:自任何初始状态开始,经过一定时间运行后,元胞自动机表现出混沌的非周期行为,所生成的结构的统计特征不再变止,通常表现为分形分维特征。

⑷ 复杂型:出现复杂的局部结构,或者说是局部的混沌,其中有些会不断地传播。

​2 仿真代码

function [] = generateGOLSettings(visible)
    
    if ~(strcmp(visible,'on') || strcmp(visible,'off')) 
        disp('WRONG INPUT! SettingUIControls not generated! Check: generateGOLSettings-function');
        return;
    end
    
    % get global variables
    global panelSettings_h;
    
    % set global variables
    global GOLtext1_h;          % text: N
    global GOLtext2_h;          % text: ALIVE
    global GOLtext3_h;          % text: PROB_MUTATION
    global GOLtext4_h;          % text: RANDOM_GLODERS
    global GOLtext5_h;          % text: PAUSE
    global GOLeditbox1_h;       % value: N
    global GOLeditbox2_h;       % value: ALIVE
    global GOLeditbox3_h;       % value: PROB_MUTATION
    global GOLcheckbox4_h;      % value: RANDOM_GLIDERS (checkbox)
    global GOLeditbox5_h;       % value: PAUSE

    
    %% STATIC TEXT
    % static: N
    GOLtext1_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'N. . . . . . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.75 0.9 0.16]);

    % static: ALIVE
    GOLtext2_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'ALIVE. . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.65 0.9 0.16]);

    % static: PROB_MUTATION
    GOLtext3_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'PROB_MUTATION. . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.55 0.9 0.16]);

    % static: RANDOM_GLIDERS
    GOLtext4_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'RANDOM_GLIDERS. . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.45 0.9 0.16]);

    % static: PAUSE
    GOLtext5_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'PAUSE . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.35 0.9 0.16]);


    %% INSERT VALUES (editboxes/checkbox)
    % insert: N
    GOLeditbox1_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.85 0.25 0.08]);

    % insert: ALIVE
    GOLeditbox2_h = uicontrol('Style', 'edit', ...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.75 0.25 0.08]);

    % insert: PROB_MUTATION
    GOLeditbox3_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.65 0.25 0.08]);       

    % insert: RANDOM GLIDERS
    GOLcheckbox4_h = uicontrol('Style', 'checkbox', ...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.79 0.55 0.25 0.08]);

    % insert: PAUSE
    GOLeditbox5_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.45 0.25 0.08]);    

    %% ADD TAGS AND CALLBACKS
    GOLeditbox1_h.Tag  = 'GOL.N';               
    GOLeditbox2_h.Tag  = 'GOL.ALIVE';           
    GOLeditbox3_h.Tag  = 'GOL.PROB_MUTATION';   
    GOLcheckbox4_h.Tag = 'GOL.RANDOM_GLIDERS';  
    GOLeditbox5_h.Tag  = 'GOL.PAUSE';       
    
    GOLeditbox1_h.Callback  = @edit_fun;
    GOLeditbox2_h.Callback  = @edit_fun;
    GOLeditbox3_h.Callback  = @edit_fun;
    GOLcheckbox4_h.Callback = @edit_fun;
    GOLeditbox5_h.Callback  = @edit_fun;
    
    
    
end

function [] = generateMGSettings(visible)
    
    if ~(strcmp(visible,'on') || strcmp(visible,'off')) 
        disp('WRONG INPUT! SettingUIControls not generated! Check: generateMGSettings-function');
        return;
    end

    % get global variables
    global panelSettings_h;
    
    % set global variables
    global MGtext1_h;       % text: N
    global MGtext2_h;       % text: ALIVE
    global MGtext3_h;       % text: PROB_MUTATION
    global MGtext4_h;       % text: VISIBILITY
    global MGtext5_h;       % text: MAJ_REQUIRED
    global MGtext6_h;       % text: PROB_UPDATE
    global MGeditbox1_h;        % value: N
    global MGeditbox2_h;        % value: ALIVE
    global MGeditbox3_h;        % value: PROB_MUTATION
    global MGeditbox4_h;        % value: VISIBILITY
    global MGeditbox5_h;        % value: MAJ_REQUIRED
    global MGeditbox6_h;        % value: PROB_UPDATE
    
    
    
    %% STATIC TEXT
    % static: N
    MGtext1_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'N. . . . . . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.75 0.9 0.16]);

    % static: ALIVE
    MGtext2_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'ALIVE . . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.65 0.9 0.16]);

    % static: PROB_MUTATION
    MGtext3_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'PROB_MUTATION. . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.55 0.9 0.16]);

    % static: VISIBILITY
    MGtext4_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'VISIBILITY. . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.45 0.9 0.16]);

    % static: MAJ_REQUIRED
    MGtext5_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'MAJ_REQUIRED . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.35 0.9 0.16]);
    
    % static: PROB_UPDATE
    MGtext6_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'PROB_UPDATE . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.25 0.9 0.16]);

    
    
    %% INSERT VALUES (editboxes/checkbox)
    % insert: N
    MGeditbox1_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.85 0.25 0.08]);

    % insert: ALIVE
    MGeditbox2_h = uicontrol('Style', 'edit', ...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.75 0.25 0.08]);

    % insert: PROB_MUTATION
    MGeditbox3_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.65 0.25 0.08]);       

    % insert: VISIBILITY
    MGeditbox4_h = uicontrol('Style', 'edit', ...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.55 0.25 0.08]);

    % insert: MAJ_REQUIRED
    MGeditbox5_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.7 0.45 0.25 0.08]);
        
    % insert: PROB_UPDATE
    MGeditbox6_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.7 0.35 0.25 0.08]);

    

    %% ADD TAGS AND CALLBACKS
    MGeditbox1_h.Tag = 'MG.N';               
    MGeditbox2_h.Tag = 'MG.ALIVE';           
    MGeditbox3_h.Tag = 'MG.PROB_MUTATION';   
    MGeditbox4_h.Tag = 'MG.VISIBILITY';  
    MGeditbox5_h.Tag = 'MG.MAJ_REQUIRED';       
    MGeditbox6_h.Tag = 'MG.PROB_UPDATE';
    
    MGeditbox1_h.Callback  = @edit_fun;
    MGeditbox2_h.Callback  = @edit_fun;
    MGeditbox3_h.Callback  = @edit_fun;
    MGeditbox4_h.Callback  = @edit_fun;
    MGeditbox5_h.Callback  = @edit_fun;
    MGeditbox6_h.Callback  = @edit_fun;
    
    
    
end

function [] = generateGOLSettings(visible)
    
    if ~(strcmp(visible,'on') || strcmp(visible,'off')) 
        disp('WRONG INPUT! SettingUIControls not generated! Check: generateGOLSettings-function');
        return;
    end
    
    % get global variables
    global panelSettings_h;
    
    % set global variables
    global GOLtext1_h;          % text: N
    global GOLtext2_h;          % text: ALIVE
    global GOLtext3_h;          % text: PROB_MUTATION
    global GOLtext4_h;          % text: RANDOM_GLODERS
    global GOLtext5_h;          % text: PAUSE
    global GOLeditbox1_h;       % value: N
    global GOLeditbox2_h;       % value: ALIVE
    global GOLeditbox3_h;       % value: PROB_MUTATION
    global GOLcheckbox4_h;      % value: RANDOM_GLIDERS (checkbox)
    global GOLeditbox5_h;       % value: PAUSE

    
    %% STATIC TEXT
    % static: N
    GOLtext1_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'N. . . . . . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.75 0.9 0.16]);

    % static: ALIVE
    GOLtext2_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'ALIVE. . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.65 0.9 0.16]);

    % static: PROB_MUTATION
    GOLtext3_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'PROB_MUTATION. . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.55 0.9 0.16]);

    % static: RANDOM_GLIDERS
    GOLtext4_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'RANDOM_GLIDERS. . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.45 0.9 0.16]);

    % static: PAUSE
    GOLtext5_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'PAUSE . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.35 0.9 0.16]);


    %% INSERT VALUES (editboxes/checkbox)
    % insert: N
    GOLeditbox1_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.85 0.25 0.08]);

    % insert: ALIVE
    GOLeditbox2_h = uicontrol('Style', 'edit', ...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.75 0.25 0.08]);

    % insert: PROB_MUTATION
    GOLeditbox3_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.65 0.25 0.08]);       

    % insert: RANDOM GLIDERS
    GOLcheckbox4_h = uicontrol('Style', 'checkbox', ...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.79 0.55 0.25 0.08]);

    % insert: PAUSE
    GOLeditbox5_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.45 0.25 0.08]);    

    %% ADD TAGS AND CALLBACKS
    GOLeditbox1_h.Tag  = 'GOL.N';               
    GOLeditbox2_h.Tag  = 'GOL.ALIVE';           
    GOLeditbox3_h.Tag  = 'GOL.PROB_MUTATION';   
    GOLcheckbox4_h.Tag = 'GOL.RANDOM_GLIDERS';  
    GOLeditbox5_h.Tag  = 'GOL.PAUSE';       
    
    GOLeditbox1_h.Callback  = @edit_fun;
    GOLeditbox2_h.Callback  = @edit_fun;
    GOLeditbox3_h.Callback  = @edit_fun;
    GOLcheckbox4_h.Callback = @edit_fun;
    GOLeditbox5_h.Callback  = @edit_fun;
    
    
    
end

function [] = generateMGSettings(visible)
    
    if ~(strcmp(visible,'on') || strcmp(visible,'off')) 
        disp('WRONG INPUT! SettingUIControls not generated! Check: generateMGSettings-function');
        return;
    end

    % get global variables
    global panelSettings_h;
    
    % set global variables
    global MGtext1_h;       % text: N
    global MGtext2_h;       % text: ALIVE
    global MGtext3_h;       % text: PROB_MUTATION
    global MGtext4_h;       % text: VISIBILITY
    global MGtext5_h;       % text: MAJ_REQUIRED
    global MGtext6_h;       % text: PROB_UPDATE
    global MGeditbox1_h;        % value: N
    global MGeditbox2_h;        % value: ALIVE
    global MGeditbox3_h;        % value: PROB_MUTATION
    global MGeditbox4_h;        % value: VISIBILITY
    global MGeditbox5_h;        % value: MAJ_REQUIRED
    global MGeditbox6_h;        % value: PROB_UPDATE
    
    
    
    %% STATIC TEXT
    % static: N
    MGtext1_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'N. . . . . . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.75 0.9 0.16]);

    % static: ALIVE
    MGtext2_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'ALIVE . . . . . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.65 0.9 0.16]);

    % static: PROB_MUTATION
    MGtext3_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'PROB_MUTATION. . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.55 0.9 0.16]);

    % static: VISIBILITY
    MGtext4_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'VISIBILITY. . . . . . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.45 0.9 0.16]);

    % static: MAJ_REQUIRED
    MGtext5_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'MAJ_REQUIRED . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.35 0.9 0.16]);
    
    % static: PROB_UPDATE
    MGtext6_h = uicontrol('Style', 'text',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'HorizontalAlignment', 'left', ...
        'String', 'PROB_UPDATE . . . . . . . .', ...
        'Units', 'normalized', ...
        'Position', [0.05 0.25 0.9 0.16]);

    
    
    %% INSERT VALUES (editboxes/checkbox)
    % insert: N
    MGeditbox1_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.85 0.25 0.08]);

    % insert: ALIVE
    MGeditbox2_h = uicontrol('Style', 'edit', ...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.75 0.25 0.08]);

    % insert: PROB_MUTATION
    MGeditbox3_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.65 0.25 0.08]);       

    % insert: VISIBILITY
    MGeditbox4_h = uicontrol('Style', 'edit', ...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.70 0.55 0.25 0.08]);

    % insert: MAJ_REQUIRED
    MGeditbox5_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.7 0.45 0.25 0.08]);
        
    % insert: PROB_UPDATE
    MGeditbox6_h = uicontrol('Style', 'edit',...
        'Parent', panelSettings_h, ...
        'Visible', visible, ...
        'Units', 'normalized', ...
        'Position', [0.7 0.35 0.25 0.08]);

    

    %% ADD TAGS AND CALLBACKS
    MGeditbox1_h.Tag = 'MG.N';               
    MGeditbox2_h.Tag = 'MG.ALIVE';           
    MGeditbox3_h.Tag = 'MG.PROB_MUTATION';   
    MGeditbox4_h.Tag = 'MG.VISIBILITY';  
    MGeditbox5_h.Tag = 'MG.MAJ_REQUIRED';       
    MGeditbox6_h.Tag = 'MG.PROB_UPDATE';
    
    MGeditbox1_h.Callback  = @edit_fun;
    MGeditbox2_h.Callback  = @edit_fun;
    MGeditbox3_h.Callback  = @edit_fun;
    MGeditbox4_h.Callback  = @edit_fun;
    MGeditbox5_h.Callback  = @edit_fun;
    MGeditbox6_h.Callback  = @edit_fun;
    
    
    
end

3 运行结果

4 参考文献

[1]张晓玲, 王文平, 陈森发,等. 基于元胞自动机的知识型企业生命体健康演化模拟[J]. 系统管理学报, 2007, 16(1):6.

[2]郭良杰, and 赵云胜. "基于元胞自动机模型的人员疏散行为模拟." 安全与环境工程 21.4(2014):6.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值