🦠 生命游戏
三条规则、二维方格、无限棋盘——却诞生了滑翔机、振荡器、能无限增殖的”滑翔机炮”,以及一个图灵完备的宇宙。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 个活细胞的混乱历史,最后留下几个稳定的残骸
- 思考:为什么”滑翔机”在无数随机初始构型里反复出现?它是不是生命游戏里的”基本粒子”?