Featured image of post 摩擦越大,原始汤越活

摩擦越大,原始汤越活

三条规则的极简人工生命沙盒,和参数扫描给出的两个反直觉结论。

一个极简的人工生命沙盒。规则只有三条,作用在每一对上:

1
2
3
1) 径向力    f = w_ij · (1 − d/R)      正吸引 / 负排斥
2) 对齐力矩  速度朝邻居速度方向旋转       (群游、漩涡的来源)
3) 摩擦      每步速度 × fric

物种数量任意,相互作用矩阵 w_ij 可以编辑——所以它不是"一个模拟",而是一个可以在上面找行为的实验台。

拖动画布可以抓起粒子搅拌,滚轮缩放。


我在这台实验台上发现的两件事

这些预设不是我手调出来的,是扫描脚本在规则空间里跑出来的。

而扫描本身给了两个反直觉的结果。


发现一:摩擦越大,体系反而越"活"

第一轮扫描 486 组对称规则(同类相吸 + 异类相斥),跑 900 步后统计"是否冻结":

摩擦冻结比例
0.90044%
0.95031%
0.97511%

直觉会说"摩擦越大越容易静止"。实测正相反。

原因在于:成对吸引作用于彼此,会把动能互相抽干。

粒子在吸引下加速、越过对方、被反向拉回——每一次都在消耗能量。摩擦弱时,这套"摆"很快把能量耗散干净,然后卡死在力平衡的位置,变成一动不动的静态点阵。

摩擦大反而阻止了这个过程。能量来不及被抽干,体系保持缓慢滑动。

顺带两条结论:

  • 高摩擦下所有活动规则都碎成 100+ 个孤立小团(最大团占比 5–11%),聚不成大结构
  • 对齐这一项在对称规则里几乎不影响存活率,只改变形状

发现二:持续活动来自"力的不对称",不是来自加能量

对称规则要么冻结、要么碎成小团。改一处结构就能解决:让力矩阵不对称。

A 追 B、B 躲 A——即非互易作用。这样"作用—反作用"不再成对抵消,体系可以自己驱动自己。

三物种循环(A 追 B,B 追 C,C 追 A)扫描 108 组:

仍在移动的粒子
非互易矩阵100%
同一矩阵对称化后59–69%

对照实验很干净——同一组参数,只把矩阵对称化:

1
2
3
4
chase  flee  fric  align core | 非互易 moved/phi/团数 | 对称化 moved/phi/团数
 0.80  -0.70 0.985 0.00  2.0  |   100%   0.694  186   |   59%   0.440  134
 1.20  -1.20 0.985 0.00  2.0  |   100%   0.622  161   |   63%   0.182  126
 0.40  -0.20 0.960 0.30  4.0  |    98%   0.724   75   |   69%   0.437   73

最好的规则(「翻涌」预设):

1
2
3
[[0, 1.2, -0.7],
 [-0.7, 0, 1.2],
 [1.2, -0.7, 0]]   // 摩擦 0.96,对齐 0.3,斥核 4.0

100% 粒子持续移动,混合度 Φ=0.48,最大团占比 16%,而"结构还在重组"的指标(末段熵的波动)是全扫描最高——0.0245。


把"看起来有意思"变成可测量的数

界面右侧的指标都是可证伪的,不是装饰:

指标定义判读
聚类系数 C你邻居的邻居也是你邻居的概率随机撒点≈0,成团后上升
最大团占比按并查集连通的最大团 / 总数晶体≈100%,气体≈0
混合度 Φ每个粒子"最近异类距离 ≤ 最近同类距离"的比例相分离→0,追逐/共生→高
空间熵 H网格计数的归一化熵均匀→1,塌缩成团→下降
不可预测性与"同初值 + 1.5px 微扰"副本的平均位置发散从 0.02 起步,1200 步后可读

实测对照(1500 步,800–1100 粒子):

预设CΦH最大团动能
翻涌(非互易)0.850.480.7416%5.61
生命边缘(对称)1.000.130.7998%~0
结晶(对称、低摩擦)0.770.950.7933%0.004
相分离1.000.020.7561%1.64
原始汤(无作用)0.570.490.7798%~0

「相分离」的 Φ=0.02 和「翻涌」的 Φ=0.48——同一个指标把两种完全不同的结构分开了。

不可预测性上,「翻涌」的最大发散是冻结体系的数十倍。

同一个 1.5px 的扰动,在自我驱动的体系里会长成完全不同的世界,在冻结体系里什么都不会发生。


验证:不靠肉眼

1
2
node verify.mjs          # 71 项断言
node verify-browser.mjs  # 34 项断言(真机 Chromium)
  • 确定性:同一种子两次运行逐位一致;不同种子不同 ⇒ 任何观察可复现
  • 数值健全: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 本身随接触历史变化,看是否自发出现分工或领地
  • 三维:核心已经是纯数组合集,换成三个坐标即可,代价只是渲染要改写

这个项目最让我意外的地方,不是某个预设好看。

是“加能量"并不是让系统活起来的唯一办法——把对称性打破,它自己就会动。

使用 Hugo 构建
主题 Stack 由 Jimmy 设计