⛄一、元胞自动机简介

1 元胞自动机发展历程
最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视.
1970 年, 剑桥大学的约翰 · 何顿 · 康威设计了一个电脑游戏 “生命游戏” 后, 元胞自动机才吸引了科学家们的注意.

1983 年 S.Wolfram 发表了一系列论文. 对初等元胞机 256 种 规则所产生的模型进行了深入研究, 并用熵来描述其演化行 为, 将细胞自动机分为平稳型, 周期型, 混沌型和复杂型.

2 对元胞自动机的初步认识
元胞自动机(CA)是一种用来仿真局部规则和局部联系的方法。典型的元胞自动机是定义在网格上的,每一个点上的网格代表一个元胞与一种有限的状态。变化规则适用于每一个元胞并且同时进行。典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。

3 元胞的变化规则&元胞状态
典型的变化规则,决定于元胞的状态,以及其( 4 或 8 )邻居的状态。

4 元胞自动机的应用
元胞自动机已被应用于物理模拟,生物模拟等领域。

5 元胞自动机的matlab编程
结合以上,我们可以理解元胞自动机仿真需要理解三点。一是元胞,在matlab中可以理解为矩阵中的一点或多点组成的方形块,一般我们用矩阵中的一点代表一个元胞。二是变化规则,元胞的变化规则决定元胞下一刻的状态。三是元胞的状态,元胞的状态是自定义的,通常是对立的状态,比如生物的存活状态或死亡状态,红灯或绿灯,该点有障碍物或者没有障碍物等等。

6 一维元胞自动机——交通规则
定义:
6.1 元胞分布于一维线性网格上.
6.2 元胞仅具有车和空两种状态.

7 二维元胞自动机——生命游戏
定义:
7.1 元胞分布于二维方型网格上.
7.2 元胞仅具有生和死两种状态.

元胞状态由周围八邻居决定.
规则:

骷髅:死亡;笑脸:生存
周围有三个笑脸,则中间变为笑脸
少于两个笑脸或者多于三个,中间则变死亡。

8 什么是元胞自动机
离散的系统: 元胞是定义在有限的时间和空间上的, 并且元 胞的状态是有限.
动力学系统: 元胞自动机的举止行为具有动力学特征.
简单与复杂: 元胞自动机用简单规则控制相互作用的元胞 模拟复杂世界.


9 构成要素

(1)元胞 (Cell)

元胞是元胞自动机基本单元:
状态: 每一个元胞都有记忆贮存状态的功能.
离散: 简单情况下, 元胞只有两种可能状态; 较复杂情况下, 元胞具有多种状态.
更新: 元胞的状态都安照动力规则不断更新.
(2)网格 (Lattice)
不同维网格

常用二维网格

(3)邻居 (Neighborhood)

(4)边界 (Boundary)

反射型:以自己作为边界的状态
吸收型:不管边界(车开到边界就消失)

(5)规则(状态转移函数)
定义:根据元胞当前状态及其邻居状况确定下一时刻该元胞状态的动力学函数, 简单讲, 就是一个状态转移函数.
分类 :
总和型: 某元胞下时刻的状态取决于且仅取决于它所有邻居 的当前状态以及自身的当前状态.
合法型: 总和型规则属于合法型规则. 但如果把元胞自动机 的规则限制为总和型, 会使元胞自动机具有局限性.
(6)森林火灾

绿色:树木;红色:火;黑色:空地。
三种状态循环转化:
树:周围有火或者被闪电击中就变成火。
空地:以概率p变为树木
理性分析:红为火;灰为空地;绿是树

元胞三种状态的密度和为1

火转化为空地的密度等于空地转换为树的密度(新长出来的树等于烧没的树)

f是闪电的概率:远远小于树生成的概率;T s m a x T_{smax}T smax
​是一大群树被火烧的时间尺度
程序实现
周期性边界条件
购进啊

其中的数字为编号
构建邻居矩阵

上面矩阵中的数字编号,对应原矩阵相同位置编号的上邻居编号,一 一对应
同样道理:

(7)交通概念
车距和密度

流量方程

守恒方程

时空轨迹(横轴是空间纵轴为时间)

红线横线与蓝色交点表示每个时间车的位置。
如果是竖线则表示车子在该位置对应的时间

宏观连续模型:

最常用的规则:

红色条表示速度是满的。

1 加速规则:不能超过v m a x ( 2 格 / s ) v_{max}(2格/s)v
max(2格/s)
2 防止碰撞:不能超过车距

理论分析:

结果分析: 密度与流量

第一个图:横坐标是归一化后的密度,纵坐标是车流量。第二个图:理论值与CA的结果

结果分析: 时空轨迹

中间的深色区域是交通堵塞的区域。

⛄二、案例及部分源代码

1 案例
figure 1:wolfram的184号规则

这个规则可以让元胞模拟出交通流的感觉,为什么说是感觉呢,因为大家好像看到了一个方块或者说叫一个小车,在向前行进,但是并没有模拟出交通流中的很多现象。随后就有NaSch规则被提出来了,这个规则可以说是所有元胞交通流模型的鼻祖,后面很多规则都是从这个规则中进化而来的。而我们今天讨论的靠右行驶的双车道模型也是根据NaSch模型改进而来的,简单讨论一下NaSch模型,然后进一步引出本文要讲解的靠右行驶模型。

NaSch规则:

(1)加速,

(2)减速,

(3)以概率p随机慢化速度,

(4)行进,

可以看到,NaSch规则就仅仅只有简单的四条,但是却模拟出了交通流的最基本的东西,从其时空图就可以看出来:

figure 2:Density=0.15,Vmax=5

figure 2是元胞长度为1000,时间步为500时候得出的时空图。这里还有相应的包括流量密度图和速度密度图等基本图也可以得出来。

接下来离我们的靠右行驶模型又进了一步,在这之前,我们再介绍一下基于NaSch的双车道模型STNS,有了双车道模型,靠右行驶模型便不再是难事。

STNS规则:

可以从STNS的规则中看到,为了实现双车道的CA交通流模型,我们实质对NaSch模型的改动仅仅是添加了一条换道规则,而换道规则看起来又是那么容易理解和合乎现实条件。这就是CA的魅力,通过稍微改动规则,就可以实现一些我们想要的结果,后面我们将用靠右行驶模型来诠释这个。当然规则也是CA的噩梦,我们通常情况下并不知道什么时候该用CA的什么规则。

现在我将再引进一条规则,在此规则下CA就可以实现2014MCM比赛中靠右行驶规则,同时可以预料到,再修改一些规则,仍然可以完整实现2014MCM比赛A题中的任何一个问题,但是这里对此不予以讨论。

Keep-Right Rule:


至此,靠右行驶规则用元胞自动机实现完毕。下面是用Matlab实现的仿真模拟图:

⛄二、案例及部分源代码

1 案例
1.1 元胞状态
0 :代表易感者
1 :代表潜伏者
2 :代表患病者
3 :代表免疫者
4 :代表死亡者
5 : 代表虚拟边界

1.2 规则
易感者的下一状态只能有两种:易感者 潜伏者
潜伏者的下一状态只能有三种:潜伏者 患病者 免疫者
患病者的下一状态只能有两种:患病者 死亡者 易感者(治疗)
免疫者的下一状态只能有一种:免疫者
死亡者的下一状态只能有一种:死亡者
状态转移的两种方式:
1.自我影响
2.影响邻居(邻居影响)

1.3 邻居
采用八邻居格式。

2 部分代码

close;clear;clc
%参数初始化
n = 250;
chushiqianfuzhe = 5;
% 邻居采用 8邻居式

% 0 :代表易感者
% 1 :代表潜伏者
% 2 :代表患病者
% 3 :代表免疫者
% 4 :代表死亡者
% 5 : 代表虚拟值

p01 = 0.1; %潜伏者对易感者的概率
p02 = 0.2; %患病者对易感者的概率
p10 = 0.005; %免疫率
p24 = 0.001; %死亡率
p20 = 0.04; %对患病者治愈率 人工影响
p_10 = 0.06; %对潜伏者治愈率
k = 1; %患病系数 越大越说明病毒前期蛰伏越长

rand(‘state’,sum(clock));
present = 5ones(n+2);
present(2:n+1,2:n+1) = 0;
while chushiqianfuzhe ~= sum(sum(present(2:n+1,2:n+1)))
present(2+floor(n
rand),2+floor(n*rand)) = 1;
end
%潜伏者时间序列
T = zeros(n+2);

for i = 1:10000
J = 5*ones(n+2);
to_qianfuzhe = zeros(n+2);

for r = 2:n+1for l = 2:n+1%以下为易感者if present(r,l) == 0  % 只受外部影响 故可省略J(r,l) = 0;elseif present(r,l) == 1           %自我影响 以及 影响外部temp = exp(-k*(12 - T(r,l))/T(r,l)); %该公式代表病毒前期潜伏时长% 自我影响if temp > rand                   %变为病患者J(r,l) = 2;T(r,l) = 0;elseif rand < p10               %变为免疫者J(r,l) = 3;T(r,l) = 0;elseif rand <  p_10             %变为易感者J(r,l) = 0;T(r,l) = 0;else J(r,l) = 1;end% 影响邻居if present(r-1,l-1) == 0if rand < p01to_qianfuzhe(r-1,l-1) = 1;endendif present(r-1,l) == 0if rand < p01to_qianfuzhe(r-1,l) = 1;endendif present(r-1,l+1) == 0if rand < p01ro_qianfuzhe(r-1,l+1) = 1;endendif present(r,l+1) == 0if rand < p01to_qianfuzhe(r,l+1) = 1;endendif present(r+1,l+1) == 0if rand < p01to_qianfuzhe(r+1,l+1) = 1;endendif present(r+1,l) == 0if rand < p01to_qianfuzhe(r+1,l) = 1;endendif present(r+1,l-1) == 0if rand < p01 to_qianfuzhe(r+1,l-1) = 1;endend    if present(r,l-1) == 0if rand < p01 to_qianfuzhe(r,l-1) = 1;endendelseif present(r,l) == 2 % 自我影响 以及 影响邻居% 自我影响if p24 > rand                   %变为死亡者J(r,l) = 4;elseif p20 > rand           %变为易感者J(r,l) = 0;elseJ(r,l) = 2;end

⛄三、运行结果


⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]党珊,蒋太刚,巫承军.基于元胞自动机方法的消防疏散仿真研究[J].现代电子技术. 2022,45(21)
[2]帅斌,秦梦瑶,许旻昊.基于元胞自动机的高速铁路列车运行仿真研究[J].计算机仿真. 2022,39(08)
[3]张睿洋.元胞自动机在两类传染病模型中的应用[J].现代信息科技. 2022,6(10)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

【元胞自动机】元胞自动机传染病传播模拟【含Matlab源码 1680期】相关推荐

  1. 【元胞自动机】基于matlab元胞自动机模拟SEIR传播模型和采取隔离措施的SEIR模型【含Matlab源码 2181期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视.1970 年, 剑桥大学的约翰 · 何顿 ...

  2. 【元胞自动机】元胞自动机模拟交通事故道路通行量【含Matlab源码 356期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  3. 【元胞自动机】元胞自动机地铁火灾疏散模型【含Matlab源码 246期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  4. 【元胞自动机】基于matlab元胞自动机多车道信号交叉口仿真【含Matlab源码 818期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  5. 【元胞自动机】元胞自动机双边教室疏散【含Matlab源码 1208期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  6. 【元胞自动机】基于matlab元胞自动机3D森林火灾模型【含Matlab源码 656期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  7. 【元胞自动机】元胞自动机城市规划【含Matlab源码 125期】

    ⛄一.案例简介(附课程报告) 城市规模设计 雄安新区占地总面积约为2000平方公里,涉及河北省雄县.容城.安新3个县及周边部分区域,地处北京.天津.保定腹地,通过ArcGIS地图软件搜索该区域并从中提 ...

  8. 【元胞自动机】基于matlab元胞自动机模拟交通路况(含超车)【含Matlab源码 2389期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  9. 【元胞自动机】元胞自动机人流疏散【含Matlab源码 665期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

最新文章

  1. 安装JDK1.8+环境配置
  2. 毕业设计——学术交流管理系统的设计与实现-1
  3. 笔记-信息系统开发基础-架构设计-软件体系结构评估方式
  4. UVA11525 Permutation 逆康托展开
  5. c语言 子进程,子Shell和子进程
  6. 【JAVA基础篇】面对对象的特征
  7. [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼、百战不殆)
  8. 苹果推送iOS12.2系统更新:电信用户一定要升级!
  9. PL/SQL 12.0配置连接远程Oracle数据库
  10. UE4官方文档UI学习:6. UMG 使用菜单锚显示弹出菜单
  11. ESP32 WS2812B灯带 代码
  12. 电子合同助力企业实现全程无纸化闭环
  13. MyRolan (快速启动小工具)
  14. linux通过xdm开启端口,Red Hat Linux 5.4 开启xdm远程访问
  15. 大数据专业就业岗位有哪些?
  16. React Native之旅—热更新(Pushy)
  17. 《您的设计模式》(CBF4LIFE)之“状态模式”【整理】
  18. PAT (Advanced Level) Practis 1039 Course List for Student (25)
  19. 巧用Python的choice()方法
  20. The supplied data appears to be in the OLE2 Format. You are calling the part of POI that deals with

热门文章

  1. CentOS挂载本地iso文件制作yum源
  2. soar系统搭建_sql自动化检查和分析工具 :soar和soar-web 安装和使用体验
  3. layout蛇形线建议
  4. 夜空中繁星露营地场景特效
  5. Hbase从入门到精通,精心整理的学习笔记,自学党快来瞅一瞅,赶紧收藏吧!
  6. go语言适合写桌面程序吗?
  7. 基于web端和C++的两种深度学习模型部署方式
  8. 京东封杀申通背后,隐藏着什么?
  9. net start mysql 服务名无效。
  10. 代谢网络重构中的iMAT方法