超简单有趣的模拟算法:元胞自动机(CA)原理简介与 matlab 代码实现

您所在的位置:网站首页 简单的模型图片大全 超简单有趣的模拟算法:元胞自动机(CA)原理简介与 matlab 代码实现

超简单有趣的模拟算法:元胞自动机(CA)原理简介与 matlab 代码实现

2024-07-17 10:37| 来源: 网络整理| 查看: 265

很久之前就就听说了元胞自动机(cellular automata,CA),但是一直没有尝试。得知2023年美赛春季赛只有两道赛题的时候,怕考到这个,所以出一篇元胞自动机的博客,权且当一篇学习笔记。

尝试过后才发现元胞自动机其实并没有那么难,非常好理解,算是万金油的模拟算法,可以作为保底的plan B。

文章目录 1 原理介绍1.1 概念1.2 原理 2 实例2.1 奇偶游戏2.2 生灭游戏2.3 森林火灾2.3.1 普通森林大火2.3.2 东风森林大火 3 小结

1 原理介绍 1.1 概念

在这里插入图片描述

元胞:模拟的时候就是一个有记忆存储状态功能的格子,是元胞自动机的最基本的组成部分。因此元胞具有以下3个特点:

元胞自动机最基本的单元。元胞有记忆贮存状态的功能。所有元胞状态都按照元胞规则不断更新。

状态:每个元胞都有自己的状态,随着时间的推移,状态也会改变。

元胞空间:元胞分布在空间中的格点,可以是1维、2维或n维。

邻居:能影响元胞下一时刻状态的周围元胞。一般来说有三种邻居模式(图是2维情况下的):

在这里插入图片描述

当然还有其他的邻居模式,不赘述,主要看题目要求。

边界:整个元胞空间不是无穷大的,是需要一个边界范围的。边界也有好几种类型:固定型、周期型、绝热型、映射型……,个人感觉最后还是得看需要解决的问题,具体问题具体分析。

规则:根据元胞自身及邻居元胞的状态,决定下一时刻元胞状态的决定,可以是动力学函数或状态转移方程。

1.2 原理

这个没啥原理,这部分简单讲讲步骤:

Step1:建立假设、简化条件。

Step2:设置初始状态和边界。

Step3:推导状态转方程和条件。

Step4:根据时间迭代。

基于大量的实验,人们发现元胞自动机根据动力学行为能分为 4 类(Wolfram. S.,1986):

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

我们不对每种类型的元胞做实验验证,只提供几种经典和常见的例子。

2 实例 2.1 奇偶游戏

条件:

邻居和为奇数时,中间的数字变成1;邻居和为偶数时,中间的数字变成2。 %%奇偶规则游戏 clear;clc; n = 1000;%指定边界长度 Se = zeros(n); z = zeros(n); Se(n/2-2:n/2+2,n/2-2:n/2+2)=1; %初始化中间的点 Ch = imagesc(Se); axis square; Sd = zeros(n+2); %边界 while(true) %死循环 % 保存现有状态的右2:边界1,右边1 Sd(2:n+1,2:n+1) = Se; % 上下左右加一次 sumValue = 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(sumValue,2); set(Ch,'cdata',Se); pause(0.0001) end

9倍速效果如下

在这里插入图片描述

还挺好看的

不是个实际例子,但是可以看出元胞自动机的代码模板,反正就是这么一个流程。

2.2 生灭游戏

条件:

如果活细胞周围活细胞数小于2个或者大于3个,则转为死;如果活细胞周围活细胞数为2个或者3个,则保持活;如果死细胞周围有3个活细胞,则转为活。

对于活细胞,我们用1表示;对于死细胞,我们用0表示。

n = 200; p = 0.4; z = zeros(n); Se = rand(n)0 && rand()


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3