交通流元胞自动机模拟仿真 matlab源码_元胞自动机中的时间反演

1.引言——生命游戏

1970年,英国数学家约翰·何顿·康威提出了生命游戏(Life Game)。生命游戏本质是一个元胞自动机模型,每个元胞可以看作是一个细胞,细胞的产生、繁衍和死亡拥有3条演化规则。

1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变) 。

2. 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

3. 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)

元胞空间在给定的初始状态下,根据以上3条规则,可以演化出千奇百怪的二维生命形式。在游戏的进行中,杂乱无序的细胞会逐渐演化出各种精致、有形的结构;这些结构往往有很好的对称性,而且每一代都在变化形状。一些形状已经锁定,不会逐代变化。有时,一些已经成形的结构会因为一些无序细胞的“入侵”而被破坏。但是形状和秩序经常能从杂乱中产生出来。

Matlab上的生命游戏代码如下。

%名称:生命游戏
%作者:Lu Jiancheng
clear%清除变量
clc%清屏 
%创建GUI界面
h=figure(1);
set(h,'Name','Life Game','Position',[500,100,600, 600]);%[左侧位置,下侧位置,宽度,高度]
axe=axes('Parent', h);
%set(axe,'Box','on','Position',[50,50,300,300]);%
txt=uicontrol('parent', h,'Style','text', 'string','Life Game', 'fontsize',12, 'position',[100,750,300,25]);
runbutton=uicontrol('parent',h,'Style','pushbutton','string','run','callback','runflag=1;','position',[100,650,50,25]);
stopbutton=uicontrol('parent',h,'Style','pushbutton','string','stop','callback','runflag=0;','position',[200,650,50,25]);
stepbutton=uicontrol('parent',h,'Style','pushbutton','string','step','callback','runflag=0;step=1;','position',[300,650,50,25]);
stepwin = uicontrol('parent', h,'Style','text', 'string','0', 'fontsize',12, 'position',[400,800,100,20]);
%生命游戏代码
%参数
Random=1;%选择初始化方式
maxtime=300;
p=0.3;
n=128;
%cells=zeros(n,n);%建立一个平面矩阵
%几种特定的初始状态
%
% initial_cells=[ 0 0 1;
%                     1 0 1;
%                     0 1 1];
%  initial_cells=[ 0 1 0;
%                      1 1 1;
%                      0 1 0];
initial_cells=[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 1 0 0 0 0 0 0 0 0 0 1 1 0 0;1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0;0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0;0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1;0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 1;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0;0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0;0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0;1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
if Random
%初始化部分for i=1:nfor j=1:nif rand()<pcells(i,j)=1;endendend
else %装载特殊图形%cells(10:25,10:25)=initial_cells;cells=initial_cells;%cells(49:51,49:51)=initial_cells;[n,~] = size(initial_cells);
end
%演化部分
pic=imshow(initial_cells,'Parent', axe,'XData',[0,100],'YData',[0,100]);%绘图
t=0;
runflag=1;
upside=0;
downside=0;
leftside=0;
rightside=0;
step=0;
while(t<maxtime)while(t<maxtime&&(runflag==1||step==1))%演化规则nextcells=cells;for i=1:nfor j=1:n%周期性边界处理if(i==n)downside=1;upside=i-1;elseif(i==1)downside=i+1;upside=i-1+n;elsedownside=i+1;upside=i-1;endif(j==n)rightside=1;leftside=j-1;elseif(j==1)rightside=j+1;leftside=j-1+n;elserightside=j+1;leftside=j-1;end%边界处理结束Sum=cells(upside,leftside)+cells(upside,j)+cells(upside,rightside)+cells(i,leftside)+cells(i,rightside)+cells(downside,leftside)+cells(downside,j)+cells(downside,rightside);                      if(Sum==3)nextcells(i,j)=1;elseif Sum~=2nextcells(i,j)=0;end  endendcells=nextcells;%演化规则结束pic=imshow(cells,'Parent', axe,'XData',[0,100],'YData',[0,100]);%绘图t=t+1;%时间前进1sset(stepwin,'string',t)step=0;pause(0.1);endpause(0.1);
end

运行这段代码,随机初始化元胞空间,可以看到演化过程中逐渐出现有规律的形状。

46b4564df25e40ac3133bd0ff74fa9d9.png
当演化时间为300步时的图像

2.时间反演

时间反演的原始思路是这样。假设演化时间为100 step,每一步时都对元胞空间的状态进行一次快照,保存下来。然后从时间步100开始,一直到第1步。每次载入那一步的元胞空间,如同倒放胶片一样。这样从观察者看来,生命游戏中的时间就好像在倒流。

原始思路有需要保存每一时间步的演化状态,才能实现时间的反转。这样将会消耗大量的内存空间。这样我们自然会想到,能不能在不利用额外内存空间,而只利用元胞自动机本身的元胞空间,就可以实现时间反演?

思路可以是这样的,可以提出基于生命游戏现有的元胞演化规则的逆规则,然后只要将时间步反过来进行演化,就可以实现时间反演的现象。

那么存不存在逆规则呢?生命游戏的逆规则可能比较难以推导,甚至某些情况下是不存在的。

假设在时刻t元胞空间内只有一个细胞,按照生命游戏的三条规则,时刻t+1元胞空间内将空无一物,没有一个细胞。这样即使存在逆规则,也无法实现时间反演,因为任何一个空元胞都可能在上一个时刻是活细胞。

dc63b0cce2db842b7e06072b1f15f0c4.png

3.物理系统

那么存不存在逆规则呢?生命游戏的逆规则可能比较难以推导,甚至某些情况下是不存在的。但下面这个假设的物理系统的逆规则还是比较好推导的。

该假设的物理系统是这样。

1. 元胞可以看作是一个有质量的点,空白表示质量为0,否则质量为1。

2. 质点之间存在吸引力F,F的大小和质点之间的距离成反比。

3. 质点存在速度,决定质点的移动方向和每一时间步的移动距离。

4. 作用力F会产生加速度,加速度决定速度的变化方向和每一时间步的变化大小。

这样一个元胞自动机系统的演化情况如下图所示。

907a43f8157f7629930eed765d452ac7.png

该系统内有两个质点,有沿x方向的初始速度,其Matlab仿真代码如下。

p1=[1,100];  %位置(x,y)
v1=[1,0];    %速度(x,y)
p2=[1,1];  %位置(x,y)
v2=[1,0];    %速度(x,y)
x = [1];
y1 = [100] ;
y2 = [1] ;
dt = 1;
T =[1];
V1L=[0];
V2L=[0];
A1L=[0];
A2L=[0];
for t =2:1:100F =100/(max(p1(2) - p2(2),3.0))^2;a1 = F*sign(p2(2) - p1(2));a2 = F*sign(p1(2) - p2(2));A1L = [A1L,a1];A2L = [A2L,a2];v1(2) = v1(2) +a1*dt;v2(2) = v2(2) +a2*dt;V1L = [V1L,v1(2)];V2L = [V2L,v2(2)];p1 = p1 + v1*dt;p2 = p2 + v2*dt;x = [x,p1(1)];y1 = [y1,p1(2)];y2 = [y2,p2(2)];T = [T,t];
end
plot(x,[y1;y2]);

运行这段代码可以看到两个质点的位置随着时间的变化。

250ee128cac07b1191bcac4551028e64.png

在这样的一个系统里只要将时间步改为-1,就可以实现时间的反演,而不用采用逆规则。反演的图像如下,在前100时间步正向演化,在101时间步到200时间步逆向演化。

可以用以下的代码实现。

dt = -1;
for t =101:1:200F =100/(max(p1(2) - p2(2),3.0))^2;a1 = F*sign(p2(2) - p1(2));a2 = F*sign(p1(2) - p2(2));v1(2) = v1(2) +a1*dt;v2(2) = v2(2) +a2*dt;p1 = p1 + v1*dt;p2 = p2 + v2*dt;x = [x,p1(1)];y1 = [y1,p1(2)];y2 = [y2,p2(2)];T = [T,t];
End

b139129c112a6bc49b91d6aabe6d895b.png
基于规则反演的图像

4.结论

在元胞自动机可以实现一些物理系统,实现基于逆规则的时间反演。这种逆规则甚至可以和原来的规则相同,只需要改变时间步长为负值即可。而生命游戏这种系统,则无法实现基于逆规则的时间反演。

基于逆规则的反演是不需要快照方式,不用记录每一时间步的状态,更符合真实物理实际的情形。如果这种逆规则等同于原规则,我们可以认为该系统的物理规则具有时间对称性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

李宏毅机器学习(二)自注意力机制

学习内容 本文以NLP为基础来介绍自注意力机制&#xff0c;而没有用图像为基础&#xff0c;但是其实两者都是相同的。 在图像中我们可以将图像切块&#xff08;块的划分是自定义的&#xff09;&#xff0c;然后计算块与块之间的关系&#xff1b; 这里介绍了self-attention 的由…

LeetCode 643. 子数组最大平均数 I

1. 题目 给定 n 个整数&#xff0c;找出平均数最大且长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 示例 1: 输入: [1,12,-5,-6,50,3], k 4 输出: 12.75 解释: 最大平均数 (12-5-650)/4 51/4 12.75注意: 1 < k < n < 30,000。 所给数据范围 [-10,000&a…

技术交流论坛_研发部第四次技术交流论坛

炎热的七月&#xff0c;由研发部举办的第四次技术交流论坛顺利召开&#xff0c;这是知识的激烈碰撞&#xff0c;也是一次头脑风暴。出席本次交流活动的有柯明宏副总、郑正部长、权大有副部长、向民龙副部长等公司管理层领导和公司骨干成员。首先由柯明宏副总、郑正部长给这一次…

LeetCode 661. 图片平滑器

1. 题目 包含整数的二维矩阵 M 表示一个图片的灰度。 你需要设计一个平滑器来让每一个单元的灰度成为平均灰度 (向下舍入) &#xff0c; 平均灰度的计算是周围的8个单元和它本身的值求平均&#xff0c;如果周围的单元格不足八个&#xff0c;则尽可能多的利用它们。 示例 1: 输…

论文阅读笔记(三)【ACL 2021】Locate and Label: A Two-stage Identifier for Nested Named Entity

论文标题&#xff1a; Locate and Label: A Two-stage Identifier for Nested Named Entity Recognition 论文链接&#xff1a; https://arxiv.org/abs/2105.06804 代码链接&#xff1a; https://github.com/tricktreat/locate-and-label 摘要 &#xff08;1&#xff09;过…

WDK中出现的特殊代码

WDK中出现的特殊代码 我们用本章的最后一个小节来介绍一些在WDK示例代码中见到的特殊形式编码。这些代码在Win32应用程序的编程中很少见到&#xff0c;读者需要首先熟悉一下。 首先是参数说明宏。参数说明宏一般都是空宏&#xff0c;最常见的是IN和OUT。其实定义很简单&…

局域网lan设置_4G工业路由器的WAN、LAN组网方式

4G工业路由器组网通常是通过WAN口、LAN口来实现&#xff0c;计讯带大家详细了解关于4G工业路由器WAN、LAN组网方式。1、WAN口加4G组网方式该组网方式同时拥有两个可以连接到广域网的接口(以太网口的WAN口和M2M网络的4G口)&#xff0c;两路通道形成互补及备份&#xff0c;同时接…

LeetCode 894. 所有可能的满二叉树(递归)

1. 题目 满二叉树是一类二叉树&#xff0c;其中每个结点恰好有 0 或 2 个子结点。 返回包含 N &#xff08;1 < N < 20&#xff09;个结点的所有可能满二叉树的列表。 答案的每个元素都是一个可能树的根结点。 答案中每个树的每个结点都必须有 node.val0。 你可以按任…

论文阅读笔记(四)【ACL 2021】FEW-NERD: A Few-shot Named Entity Recognition Dataset

摘要 过去的难点&#xff1a; 过去的都是粗粒度的&#xff1b; Few-NERD&#xff1a; 一个大规模的人类注释的小样本NERD数据集&#xff0c;它具有8种粗粒度和66种细粒度实体类型的层次结构。Few-NERD由来自维基百科的188238个句子组成&#xff0c;包含4601160个单词&#xff…

Exchange2003启用web页面登陆(表单型身份验证)

一、 owa中启用表单验证 在Exchange server 2003中配置OWA启用基于表单的身份验证(忽略SSL): o 在服务器&#xff0d;协议&#xff0d;HTTP&#xff0d;HTTP虚拟服务器右键&#xff0d;勾选"启用基于表单的身份验证"&#xff0c;出现提示要求SSL&a…

LeetCode 241. 为运算表达式设计优先级(动态规划)

1. 解题 给定一个含有数字和运算符的字符串&#xff0c;为表达式添加括号&#xff0c;改变其运算优先级以求出不同的结果。 你需要给出所有可能的组合的结果。有效的运算符号包含 , - 以及 * 。 示例 1: 输入: "2-1-1" 输出: [0, 2] 解释: ((2-1)-1) 0 (2-(1-1)…

python具体应用过程_python公开课|Python for循环的具体应用就是python流程控制的核心,想学会就来看看...

【摘要】在这个科学技术高速发展的时代&#xff0c;越来越多的人都开始选择学习编程软件&#xff0c;那么首先被大家选择的编程软件就是python&#xff0c;也用在各行各业之中&#xff0c;并被大家所熟知&#xff0c;所以也有越来越多的python学习者关注python问题&#xff0c;…

知识图谱入门知识(三)词性标注

学习内容 基本大多数的问题都可以转为词性标注问题&#xff01; 这里只做记录&#xff0c;都是别人的回答&#xff01; 常用的概念 什么是token tokenization就是通常所说的分词&#xff0c;分出的每一个词语我们把它称为token。 链接 词性标注参考一 自然语言处理之序列标…

sql 查讯本日 本周 本月

sql 查询本周本月问题---求相差天数 select datediff(day,2004-01-01,getdate()) --1.一个月第一天的 SELECT DATEADD(mm, DATEDIFF(mm,0,getdate()), 0) --2.本周的星期一 SELECT DATEADD(wk, DATEDIFF(wk,0,getdate()), 0) sel…

python爬虫入门必备正则_python 爬虫入门之正则表达式 一

python 正则表达式知识点正则 常用符号. : 匹配任意字符&#xff0c;换行符除外* &#xff1a; 匹配前一个字符 0 次或者无限次&#xff1f; &#xff1a; 匹配前一个字符 0次或者1次.* &#xff1a; 贪心算法.*&#xff1f; &#xff1a;非贪心算法()&#xff1a; 括号内的数…

李宏毅机器学习(三)Word Embedding

学习内容 前情提要 使用一个vector来表示一个word&#xff0c;怎么做&#xff1f; 1-of-N Encoding 维度就是所有单词的量 缺点&#xff1a; dog 和 cat是不能归为一类的&#xff0c;只能单独的表示&#xff1b; Word CLass 将同类别的归为一类&#xff1b; 但是更高层的tok…

IBM T61 键盘没有反映。

出现这个问题不是一次两次了&#xff0c;就是启动后&#xff0c;键盘所有按键&#xff0c;小红帽都不能用&#xff0c;必须重启好几次才能用。 有时候键盘能用&#xff0c;但是打开 dw ,复制不能用&#xff0c;真是懊恼。 今天又出现这个情况&#xff0c;我偶然想到是不是和昨天…

LeetCode 680. 验证回文字符串 Ⅱ

1. 题目 给定一个非空字符串 s&#xff0c;最多删除一个字符。判断是否能成为回文字符串。 示例 1: 输入: "aba" 输出: True示例 2: 输入: "abca" 输出: True 解释: 你可以删除c字符。 注意: 字符串只包含从 a-z 的小写字母。字符串的最大长度是50000。来…

python的序列类型及其特点_Fluent Python 笔记——序列类型及其丰富的操作

序列的分类Python 标准库用 C 语言实现了丰富的序列类型的数据结构&#xff0c;如&#xff1a;容器序列(能存放不同类型的数据)&#xff1a;list、tuple、collections.deque 等扁平序列(只容纳同一类型的数据)&#xff1a;str、bytes、bytearray、memoryview、array.array>&…

论文阅读翻译(全)【一直更新】

学习内容 这里面包含了阅读中翻译的概述&#xff01; CNN is not invariant to scaling and rotation&#xff1b; invariant&#xff1a; 不变的&#xff1b; not invariant&#xff1a; 不是不变的 CNN是变化的&#xff01; 不和不消除&#xff01; 1. 词语 1.1 词形 泛…