🦠 生命游戏

三条规则、二维方格、无限棋盘——却诞生了滑翔机、振荡器、能无限增殖的”滑翔机炮”,以及一个图灵完备的宇宙。1970 年约翰·康威在纸上发明了它,至今仍是最著名的元胞自动机。

玩法

python3 content/code/game_of_life.py              # 高斯滑翔机炮,演示 300 代
python3 content/code/game_of_life.py -p glider -n 20   # 看滑翔机飞 20 代
python3 content/code/game_of_life.py -p pulsar -n 10   # 看脉冲星脉动 10 代
python3 content/code/game_of_life.py -p penta -n 20    # 看十五项全能脉动 20 代
python3 content/code/game_of_life.py --verify          # 跑全部实验并验证

规则(B3/S23)

每个格子只有两种状态:活(#)或死(.)。每一代同时更新:

  • 出生:死格若有恰好 3 个活邻居 → 下代变活
  • 存活:活格若有 2 或 3 个活邻居 → 继续活
  • 死亡:其余情况(邻居 ≤1 或 ≥4)→ 孤独死或拥挤死

就这三条。没有指挥,没有中央计划,一切只由局部邻居决定。

四件著名玩具(本仓库脚本实测)

1. 滑翔机:会飞的”生命粒子”

5 个细胞组成的图案,每 4 代恢复原状、整体斜移一格——它在棋盘上”飞”:

第 0 代       第 4 代       第 8 代       第 12 代      第 16 代
..#.......   ..........   ..........   ..........   ..........
#.#.......   ...#......   ..........   ..........   ..........
.##.......   .#.#......   ....#.....   ..........   ..........
..........   ..##......   ..#.#.....   .....#....   ..........
..........   ..........   ...##.....   ...#.#....   ......#...

实测:20 代后形状逐格完全不变,整体从 (0,0) 平移到 (5,5)——每 4 代斜移一格,速度恰好是光速的四分之一(c/4)。

2. 脉冲星:心脏在跳

13×13 的经典振荡器,48 个细胞。连续 7 代的活细胞数:

48 → 56 → 72 → 48 → 56 → 72 → 48

每 3 代回到初始形状(period-3),像一颗在 48↔72 之间收缩舒张的心脏。

3. Pentadecathlon:十五项全能

period-15 振荡器,12 个细胞(10×3)。名字直译”十五项全能”——它每 15 代完整复位一次,像运动员做一套规定动作:

第 0 代         第 3 代         第 7 代         第 14 代
............   ...######...   .##......##.   ............
...#....#...   ..########..   #..#....#..#   ..#.#..#.#..
.##.####.##.   .##......##.   #####..#####   .#..#..#..#.
...#....#...   ..########..   #..#....#..#   ..#.#..#.#..
............   ...######...   .##......##.   ............

第 3 代爆发到 40 个细胞(满月),第 7 代张开成对称臂膀,第 14 代收拢,第 15 代精确回到起点。前 15 代人口曲线:12 → 22 → 18 → 40 → 18 → 18 → 20 → 28 → 20 → 20 → 22 → 18 → 22 → 20 → 16 → 12。实测最小周期恰为 15(period-15)。

4. 高斯滑翔机炮:无限增殖

1970 年,康威悬赏 50 美元寻找能无限增殖的构型。比尔·戈斯珀(Bill Gosper)的答案:36 个细胞组成一座”炮”,炮身每 30 代精确复位一次,每次复位的同时朝右下射出一架滑翔机。第 90 代时,三架滑翔机已经排成对角线队列飞向远方:

.........................#..................................
.......................#.#..................................
.............##......##............##.......................
...........#...#....##............##.......................
.##........#.....#...##.....................................
.##........#...#.##....#.#..................................
...........#.....#.......#..................................
............#...#...........................................
.............##.............................................
........................#...................................
.........................##.................................
........................##..................................
............................................................
................................#.#.........................
.................................##.........................
................................#..........................
............................................................
.......................................#..................
........................................##.................
.......................................##...................

实测验证(本仓库脚本):

观测项结果
炮身周期300 代内每 30 代精确复位(10 次检查全部吻合),即 period-30
发射速率每 30 代一架;315 代时航线上正好 10 架滑翔机,连通块计数 10/10
滑翔机速度c/4(每 4 代斜移一格),航线上相邻两架间隔 7.5 格对角线距离
总活细胞数36(初始)→ 92(315 代,炮身 42 + 航线上 50)

为什么它让人着迷

  • 图灵完备:1990 年代被证明——生命游戏可以模拟任意图灵机,也就是原则上能计算任何可计算的东西。在这个宇宙里,连”计算机”本身都是涌现出来的。
  • 滑翔机 = 信息:滑翔机在生命游戏的计算理论里扮演”信号”角色,像电子在电路里流动。有人用滑翔机搭出了完整的加法器。
  • 从简单到复杂:规则只有三条、完全确定,却能长出无限增殖、自我复制的结构。康威本人曾说,他选择这套规则是因为”既不会太快灭绝,也不会太容易爆炸”。
  • 康威的赌约:当年悬赏 50 美元找”无限增殖”构型,戈斯珀拿到后康威付了钱——后来人们开玩笑说,这是他花得最值的 50 美元。

还能怎么玩

  • -p glider-p pulsar 看单种玩具,或把 -n 调大看炮不停发射
  • 试试 R-五格骨牌(R-pentomino):随手一摆 5 个格子,会演化出 1103 代、最多 1167 个活细胞的混乱历史,最后留下几个稳定的残骸
  • 思考:为什么”滑翔机”在无数随机初始构型里反复出现?它是不是生命游戏里的”基本粒子”?

相关

  • 兰顿蚂蚁 — 另一个”简单规则、复杂行为”的元胞自动机,它俩是同一主题的两张面孔
  • 乌岚素数螺旋 — 素数在螺旋里排成斜线,同样是”局部规则”长出的全局结构
  • 黄金角向日葵 — 斐波那契螺旋的植物学版本