一个极简的人工生命沙盒。规则只有三条,作用在每一对上:
| |
物种数量任意,相互作用矩阵 w_ij 可以编辑——所以它不是"一个模拟",而是一个可以在上面找行为的实验台。
拖动画布可以抓起粒子搅拌,滚轮缩放。
我在这台实验台上发现的两件事
这些预设不是我手调出来的,是扫描脚本在规则空间里跑出来的。
而扫描本身给了两个反直觉的结果。
发现一:摩擦越大,体系反而越"活"
第一轮扫描 486 组对称规则(同类相吸 + 异类相斥),跑 900 步后统计"是否冻结":
| 摩擦 | 冻结比例 |
|---|---|
| 0.900 | 44% |
| 0.950 | 31% |
| 0.975 | 11% |
直觉会说"摩擦越大越容易静止"。实测正相反。
原因在于:成对吸引作用于彼此,会把动能互相抽干。
粒子在吸引下加速、越过对方、被反向拉回——每一次都在消耗能量。摩擦弱时,这套"摆"很快把能量耗散干净,然后卡死在力平衡的位置,变成一动不动的静态点阵。
摩擦大反而阻止了这个过程。能量来不及被抽干,体系保持缓慢滑动。
顺带两条结论:
- 高摩擦下所有活动规则都碎成 100+ 个孤立小团(最大团占比 5–11%),聚不成大结构
- 对齐这一项在对称规则里几乎不影响存活率,只改变形状
发现二:持续活动来自"力的不对称",不是来自加能量
对称规则要么冻结、要么碎成小团。改一处结构就能解决:让力矩阵不对称。
A 追 B、B 躲 A——即非互易作用。这样"作用—反作用"不再成对抵消,体系可以自己驱动自己。
三物种循环(A 追 B,B 追 C,C 追 A)扫描 108 组:
| 仍在移动的粒子 | |
|---|---|
| 非互易矩阵 | 100% |
| 同一矩阵对称化后 | 59–69% |
对照实验很干净——同一组参数,只把矩阵对称化:
| |
最好的规则(「翻涌」预设):
| |
100% 粒子持续移动,混合度 Φ=0.48,最大团占比 16%,而"结构还在重组"的指标(末段熵的波动)是全扫描最高——0.0245。
把"看起来有意思"变成可测量的数
界面右侧的指标都是可证伪的,不是装饰:
| 指标 | 定义 | 判读 |
|---|---|---|
| 聚类系数 C | 你邻居的邻居也是你邻居的概率 | 随机撒点≈0,成团后上升 |
| 最大团占比 | 按并查集连通的最大团 / 总数 | 晶体≈100%,气体≈0 |
| 混合度 Φ | 每个粒子"最近异类距离 ≤ 最近同类距离"的比例 | 相分离→0,追逐/共生→高 |
| 空间熵 H | 网格计数的归一化熵 | 均匀→1,塌缩成团→下降 |
| 不可预测性 | 与"同初值 + 1.5px 微扰"副本的平均位置发散 | 从 0.02 起步,1200 步后可读 |
实测对照(1500 步,800–1100 粒子):
| 预设 | C | Φ | H | 最大团 | 动能 |
|---|---|---|---|---|---|
| 翻涌(非互易) | 0.85 | 0.48 | 0.74 | 16% | 5.61 |
| 生命边缘(对称) | 1.00 | 0.13 | 0.79 | 98% | ~0 |
| 结晶(对称、低摩擦) | 0.77 | 0.95 | 0.79 | 33% | 0.004 |
| 相分离 | 1.00 | 0.02 | 0.75 | 61% | 1.64 |
| 原始汤(无作用) | 0.57 | 0.49 | 0.77 | 98% | ~0 |
「相分离」的 Φ=0.02 和「翻涌」的 Φ=0.48——同一个指标把两种完全不同的结构分开了。
不可预测性上,「翻涌」的最大发散是冻结体系的数十倍。
同一个 1.5px 的扰动,在自我驱动的体系里会长成完全不同的世界,在冻结体系里什么都不会发生。
验证:不靠肉眼
| |
- 确定性:同一种子两次运行逐位一致;不同种子不同 ⇒ 任何观察可复现
- 数值健全:7 个预设各跑 1500 步,无 NaN / Infinity,坐标不出界,速度有界
- 指标区分力:三个结构指标在预设之间跨度都在 0.05 以上
- 物理直觉断言:相分离的 Φ 必须低于追逐体系;晶体的最大团必须大于原始汤
- 性能:单线程 900 粒子 0.19 ms/步、3000 粒子 1.4 ms/步;浏览器里 3000 粒子仍 45–60 fps
关键的一条:verify.mjs 直接从 HTML 里抽出 UMD 核心在 Node 里跑。
所以"这个模拟是什么行为"可以用脚本回答,不需要打开浏览器用眼睛猜。
还能往哪走
- 能量守恒版本:现在是耗散系统,加入速度相关的能量注入,看它是否进入稳态湍流
- 自适应规则:让
w_ij本身随接触历史变化,看是否自发出现分工或领地 - 三维:核心已经是纯数组合集,换成三个坐标即可,代价只是渲染要改写
这个项目最让我意外的地方,不是某个预设好看。
是“加能量"并不是让系统活起来的唯一办法——把对称性打破,它自己就会动。
