康威生命游戏 返回
元胞自动机·复杂系统

康威生命游戏 — 元胞自动机模拟器

仅用\"诞生、生存、消亡\"三条规则,整个宇宙就活动起来。配置滑翔机和枪,体验复杂的生命现象吧。

控制
模拟速度
fps
元胞大小
px
随机密度
%
外观
预设图案

生命游戏规则

  • 诞生: 死元胞周围恰有3个生元胞→诞生
  • 生存: 生元胞周围有2~3个生元胞→继续生存
  • 消亡: 其他情况→消亡(过密或过疏)
计算结果
0
世代数
0
生存元胞数
0.0%
生存率
0
最大生存数
15
播放速度 fps
游戏

点击拖拽绘制元胞 | 右键拖拽擦除

理论·主要公式

$$N_{alive}(i,j) = \sum_{(di,dj)\neq(0,0)} s(i+di, j+dj)$$

生存相邻元胞数:Moore邻域(8邻域)的生存元胞数之和($s=1$:生存、$0$:消亡)。

$\text{alive}(t+1) = \begin{cases} 1 & N=3 \\ s(t) & N=2 \\ 0 & \text{其他} \end{cases}$

康威生命规则:3个邻域诞生,2或3个邻域生存,其他情况消亡。

$$p_{steady} \approx 0.0293$$

稳定态平均密度:从随机初始配置自然收敛的生命密度(经验值)。

康威生命游戏是什么

🙋
生命游戏是模拟生物吗?
🎓
简单说,这是一个元胞(网格方块)世界的模拟,单纯的规则中能产生复杂的\"生命现象\"。不是真的生物模拟,而是\"生命现象的隐喻\"。用这个模拟器试试调整\"随机密度\"滑块,虽然初始看起来是随机的,但运动起来就会产生有序的图案,这很有趣。
🙋
听说规则只有\"诞生、生存、消亡\"三个。具体是什么意思?
🎓
例如,死元胞(白方格)周围恰好有3个活元胞(黑方格),那么下一代这个元胞就会\"诞生\"。反之,活元胞周围有2或3个元胞就能\"存活\",否则因为过密或过疏就会\"消亡\"。把右上的\"模拟速度\"调慢,逐世代推进观察,你就能看清这个规则如何起作用。
🙋
滑翔机和滑翔机枪有什么神奇的地方吗?
🎓
这是最让人惊奇的地方。仅仅5个活元胞组成的\"滑翔机\",在4世代周期内保持原形并沿对角线移动。\"滑翔机枪\"则无限制地生产滑翔机,简直像一个\"工厂\"。用这个模拟器的\"预设图案\"菜单选择\"滑翔机枪\"运行看看。单纯规则竟能自发产生如此复杂有序的运动,这就是生命游戏最迷人的地方。

物理模型与主要公式

生命游戏是定义在离散元胞空间(网格)和时间上的元胞自动机。每个元胞 $c_{i,j}(t)$ 的状态(1: 存活, 0: 消亡)由其周围8邻域元胞状态总和 $S$ 决定,下一代 $t+1$ 的状态为:

$$ c_{i,j}(t+1) = \begin{cases}1 & \text{满足诞生或生存条件} \\ 0 & \text{其他}\end{cases} $$

其中,$c_{i,j}(t)$ 是时刻 $t$ 位置 $(i, j)$ 的元胞状态,$S = \sum_{k=-1}^{1}\sum_{l=-1}^{1}c_{i+k, j+l}(t) - c_{i,j}(t)$ 是自身外的8个邻域元胞的存活总数。这一简单确定性规则产生了复杂系统的行为。

常见问题

点击模拟器上方的\"预设图案\"按钮,即可看到滑翔机、方块、滑翔机枪等代表性图案列表。点击即可将其放置在棋盘上。
点击屏幕右下的\"清空\"按钮清空棋盘,或将\"模拟速度\"滑块向左拖动以减慢更新间隔。也可以用橡皮工具批量删除不需要的元胞。
当前版本使用标准生命游戏规则(S23/B3),不可改变。但可以自由编辑初始配置,手动模拟其他规则的行为。
点击棋盘右下的\"导出\"按钮,可将当前全部元胞状态复制为RLE格式。之后用\"导入\"按钮粘贴,即可从同一状态重新开始。
拖动屏幕上下的速度滑块可调整世代更新的间隔。向左拖变慢,向右拖变快。也可点击暂停按钮手动单步执行。
可以的。从随机初始配置中常常自发产生滑翔机、方块、振子等稳定或周期性图案。特别在密度合适的情况下,可以观察到长期复杂的生命现象。

现实应用

复杂系统与自组织研究:生命游戏是\"简单局部相互作用产生复杂全局非预期图案\"的\"涌现\"现象的代表模型。广泛应用于生物群体行为和社会现象建模的基础概念中。

计算理论·图灵完全性:生命游戏经过适当的初始图案设置,可以构成逻辑门和存储器,能作为通用图灵机执行任意计算(图灵完全)。这说明单纯规则系统具有惊人的计算能力。

CAE中的元胞自动机:生命游戏本身不直接用于CAE,但思想被应用其中。例如格点玻尔兹曼法(LBM)用于流体模拟,格子玻尔兹曼法用于材料结晶生长和扩散现象建模等。

算法与编程教育:规则简洁直观,易于可视化,是编程初学者学习二维数组操作、状态转移实现、并行处理概念的绝佳材料,广泛用于教学中。

常见误解与注意事项

首先,别把生命游戏当成\"生物模拟\"。它只是\"涌现\"和\"自组织\"概念的抽象模型。实际应用中也容易本末倒置。具体有三点注意:

1. \"随机密度\"的设置大幅影响结果:生成随机初始状态时,密度滑块的值很关键。虽然50%密度看起来最\"混乱\",但实际上密度太低(如10%以下)时元胞迅速消亡,密度太高(如80%以上)时只剩下过密的静态块。要看到有序的动态图案,应该在30%到60%之间调整。这种参数微调在材料微观结构生成模拟中也很常见。

2. 边界条件要明确:这个模拟器的网格是有限的,边界怎么处理?多数实现要么用\"死元胞永远环绕\"的固定边界,要么用反对侧相连的周期边界。滑翔机碰到边界消失是因为固定边界。实际用元胞自动机时,第一步就要确认边界条件,这直接影响结果。

3. 别被\"生命\"这个词迷惑:元胞\"活着\"只是状态为1或0的位,没有能量、遗传基因。规则只基于邻域位数的简单切换。\"单纯局部规则产生复杂全局行为\"这个结构本身,才是CAE中\"网格离散状态更新\"的精妙之处啊。

使用指南

  1. 用网格大小滑块(slCellSize)设置初始元胞数量,范围50×50到200×200
  2. 用密度滑块(slDensity)调整初始生存元胞密度10%到90%,生成随机配置
  3. 用速度滑块(slSpeed)控制模拟速度1fps到60fps,点击[播放]按钮开始世代进行
  4. 用pickAlive和pickBg自定义生存元胞和背景色,也可手动配置滑翔机等已知图案

具体计算示例

100×100网格、初始密度35%的随机初始化中,第0世代有3500个元胞生存。每世代应用\"3个邻域诞生、2~3个邻域生存\"规则后,第10世代的生存元胞数约850个,生存率降至8.5%。若以30fps速度运行,1秒内完成30世代计算,可观察到稳定结构或周期振荡图案的收敛。

实务中的注意事项

  1. 网格200×200以上时计算负荷急增,为防止浏览器响应迟钝,请将密度控制在20%以下
  2. 世代数超过3000的模拟中,内存占用可能指数增长,需定期执行[清空]
  3. 滑翔机枪或元老数在初始化后数百世代才活跃,要留足观察时间,建议fps值设得较低以细致观察推移过程