python元胞自动机模拟交通_零基础教程:从生命游戏到细胞自动机

本文介绍了细胞自动机的概念,从生命游戏出发,探讨了有限状态自动机、无限状态自动机和 Turning 机。还详细讲解了细胞自动机的分类和动力学行为,并提供了在 C++ 中实现细胞自动机的示例。
摘要由CSDN通过智能技术生成

我们常常听到一个名字:细胞自动机(Celluar Automata),此外这个名字与另一个概念:生命游戏(Life Game) 有关,而很多人听到这些概念都是被其无限的可能性所吸引。本文我们来了解下细胞自动机的概念与运作原理。

本文所有代码都是 C++ 代码(除了部分伪代码),并且可以在 VS 2019 Community 上成功编译。

1.从生命游戏谈起

Conway提出的生命游戏其实是一个零玩家游戏( Player 始终为观察者),它包括一个二维矩阵世界(可以扩展),这个世界中的每个方格居住着一个活着的或死了的细胞。

这里提下“矩阵世界”的概念:一个 n 维的矩阵世界是一个被划分成格子的 n 维空间,或者说是离散 n 维空间 。这个空间在计算理论中有着重要作用, 细胞自动机的状态实质上就是映射 ,即全空间的布尔值。

一个细胞在下一个时刻生死取决于相邻 8 个方格中活着的或死了的细胞的数量。如果相邻方格活着的细胞数量过多( > 3 个),这个细胞会因为资源匮乏而在下一个时刻死去;相反,如果周围活细胞过少( < 2 个),这个细胞会因太孤单而死去。

实际中,你可以设定周围活细胞的数目怎样时才适宜该细胞的生存。如果这个数目设定过低,世界中的大部分细胞会因为找不到太多的活的邻居而死去,直到整个世界都没有生命;如果这个数目设定过高,世界中又会被生命充满而没有什么变化(只有一种细胞)。这种设定叫做环境压力设定。

实际中,这个数目一般选取 2 或者 3 ;这样整个生命世界才不至于太过荒凉或拥挤,而是一种动态的平衡。这样的话,游戏的规则就是:当一个方格周围有 2 或 3 个活细胞时,方格中的活细胞在下一个时刻继续存活;即使这个时刻方格中没有活细胞,在下一个时刻也会“诞生”活细胞(生殖的模拟)。

在这个游戏中,还可以设定一些更加复杂的规则(当然也会增加代码的编写难度~),例如当前方格的状况不仅由父一代决定,而且还考虑祖父一代的情况。你还可以作为这个世界的上帝,随意设定某个方格细胞的死活,以观察对世界的影响。

在游戏的进行中,杂乱无序的细胞会逐渐演化出各种精致、有形的结构;这些结构往往有很好的对称性,而且每一代都在变化形状。一些形状已经锁定,不会逐代变化。有时,一些已经成形的结构会因为一些无序细胞的“入侵”而被破坏。但是形状和秩序经常能从杂乱中产生出来。

生命游戏的世界是存在边界的,下面有三种边界:

  • 周期型边界:周期型是指相对边界连接起来的细胞空间。

这种空间与无限空间最为接近,进行理论探讨时,常以此类空间作为实验进行模拟。

  • 固定边界:所有边界外元胞均取某一固定常量。

  • 绝热边界:边界外元胞的状态始终和边界元胞的状态保持一致。

下面我们给出一个 C++ 的实现(这里我们用到了 OpenGL 来画图):

#include
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值