阿列克谢·梅什科夫

模型能否重现“猞猁–野兔”周期

世界上最著名的生态周期是加拿大的野兔和猞猁:大约每 10 年,它们的数量就会上下波动几十倍。我检验了我的玩具生态系统能否重现它。周期——能,很容易。其他一切——不能。

用真实数据校准模型的试点。问题不是“这对野兔是否成立”,而是“我们能否诚实地把模型与真实序列对比,并看清它在哪里失效”。2026 年 10 月。

模型是第一次迭代中的生态系统,但没有进化:食草动物和捕食者随机游走,能吃就吃。

简而言之

  • 约 10 年的周期很容易得到。但这是一个弱检验:周期几乎完全由一个自由旋钮“一年等于多少个模型步”决定。
  • 猞猁的滞后无法重现。数据中猞猁的峰值比野兔晚约 1.5 年。模型中晚 2.5–3 年,参数拟合几乎无法改变这一点。
  • 波动幅度比现实小 2–3 倍。真实的野兔从谷底到峰值相差约 40 倍,模型只有 3–5 倍。
  • 周期的形状对上了,但几乎任何会循环的模型都能给出这种近似正弦的形状。证据很弱。
  • 结论:有一个周期正确的循环,但不是真正的猞猁–野兔周期。两个有信息量的指标——滞后和振幅——都没有对上。

数据

1845–1935 年猎人卖给哈德逊湾公司的雪鞋兔和加拿大猞猁毛皮数量。数字未经修改。另用麦肯齐河的猞猁序列(1821–1934)独立检验周期。

数据显示数值
周期约 10 年(麦肯齐河:9.7)
猞猁比野兔滞后多少1.5 年 = 0.15 个周期
波动幅度,野兔 / 猞猁从谷底到峰值约 40 / 14 倍
周期中增长阶段的占比两者都约为一半

野兔序列明显不如猞猁序列规律——这是毛皮记录的已知特点。

1845–1935 年野兔和猞猁毛皮序列及其指标:周期、滞后、振幅
图中标注为俄文。

如何比较

  • 比较的是形状,不是绝对数字。毛皮不等于种群数量,所以看的是周期、猞猁滞后、振幅和周期形状。
  • 容差取自数据本身:每个指标在真实序列的 45 年滑动窗口中波动多少。“对上”表示差异在两倍波动范围以内。
  • 只拟合了周期和滞后。用 CMA-ES 算法拟合了九个模型参数(植物生长、野兔代谢和死亡率、猞猁捕猎和死亡率、每年步数)。
  • 振幅和形状留作检验,不参与拟合。如果模型是对的,它们应该自己对上。
  • 防止拟合噪声:20 个最佳候选在 8 个新的随机种子上重新检验。下面所有数字都来自这些检验。

校准之前:用第一次迭代的参数,猞猁在所有运行中都灭绝。在 96 组随机参数中,两个种群都存活的有 31 组,出现明显周期的有 5 组。这五组中猞猁都滞后 0.28–0.32 个周期。

最好的结果

展示的是质量居中的运行,而不是最好的一次。序列经过标准化,模拟的起点被平移以与野兔的相位对齐。图中没有其他拟合。

真实野兔和猞猁毛皮序列与最佳模拟的对比,校准 A
校准 A:原样的模型。实线为数据,虚线为模拟。周期相似,但模型中猞猁的峰值滞后更多。

注意:标准化掩盖了主要的失败。不做标准化就能看出真实周期要深得多:

不对振幅标准化的同样序列:真实波动远深于模型

修正尝试:野兔多时食物变差

短滞后的经典解释是:野兔在猞猁峰值之前就开始减少,因为它们吃光了食物,植物也会自我防御。我加入了一个简单的反馈:野兔多时,食物质量延迟下降,野兔从进食中获得的能量减少。这就是校准 B。

  • 拟合选择了很弱的效应:食物质量只在 0.88 到 0.92 之间波动。
  • 不能更强:野兔会吃不饱而灭绝,猞猁随之灭绝。
  • 滞后只略有改善(0.27 → 0.25 个周期),振幅没有增大,周期变得更不规律。
  • 个别候选给出了约 0.20 的滞后,但周期几乎消失了。在这个模型里,短滞后是以破坏周期为代价换来的。
真实序列与带食物质量反馈的模拟对比,校准 B

指标汇总

指标数据AB
周期,年(拟合)9.9610.11 ✔9.41 ✔
猞猁滞后,周期占比(拟合)0.150.27 ✘0.25 ✘
野兔振幅(留作检验)1.620.71 ✘0.56 ✘
猞猁振幅(留作检验)1.130.47 ✘0.36 ✘
野兔增长阶段占比(留作检验)0.530.51 ✔0.51 ✔
猞猁周期形状(留作检验)—✘✘

振幅是高低水平之比的 log10;1.62 约等于 40 倍。✔ 表示差异在数据两倍波动范围以内。B 相对 A 的改进很小,统计上也不可靠,尽管 B 多了两个参数。

数据、校准 A 和校准 B 的指标对比

为什么很可能对不上

模型中的捕食者“靠能量储备”繁殖,对猎物的反应带有惯性,就像经典的洛特卡–沃尔泰拉模型。这样的系统会卡在约四分之一周期的滞后上。在现实中,野兔似乎在猞猁峰值之前就开始减少:因为食物、压力、其他捕食者。这种限制看起来是结构性的,而不是参数问题。

振幅小可能是因为世界小且具有空间性:56 × 56 网格上只有几百个个体,随机性和局部相遇抑制了大幅波动。

还有一个线索:在拟合出的时间尺度下,模型中的野兔在没有饥饿和捕食者时能活 4–7“年”,而真实的雪鞋兔只活 1–2 年。模型无法产生一个快速更替的猎物种群。

参数确定得如何

很差。在校准 A 中,20 个最佳候选中有 8 个彼此无法区分,猞猁死亡率在它们之间相差 25–40%。在 B 中,20 个里有 11 个无法区分,猞猁代谢相差 6 倍。仅凭周期和滞后,B 的参数几乎无法确定。而且这还是下限:所有候选都来自同一次拟合运行。

有几个参数碰到了允许范围的边界(植物生长取最大值,猞猁代谢取最小值)。这不是精确的信号,而是模型在“勉强”超出合理范围。边界被刻意没有放宽:用奇异的数值来拟合会让结果失去意义。

与最佳候选无法区分的候选之间的参数分散度,校准 A

局限性。数据是毛皮数量,不是种群数量:它取决于毛皮价格、猎人投入和公司物流。滞后恰恰是贸易最可能扭曲的指标。只有一个序列,约 9 个周期,其自身指标就有噪声。周期几乎可以平凡地拟合,所以对上周期是弱成就。模型小且具有空间性,世界大小未被校准。结构变体 B 只有一个且很粗糙(全世界单一的食物质量)。不能保证拟合达到全局最优,尽管 96 个随机循环候选中没有一个滞后低于 0.28。

下一步

  1. 反向检验:拟合振幅和形状,检验滞后。
  2. 另一种结构:食物按网格局部延迟再生;更大或“空间性”更弱的世界。
  3. 观测模型:毛皮 = f(种群数量,猎人投入),带有独立噪声。在使用古数据之前需要这一步,因为那里“代理指标 ≠ 种群数量”的问题更严重。
  4. 用麦肯齐河序列独立检验:猞猁的周期和振幅。

代码、数据和所有图表都在 evo-brain-sim 仓库(calibration 文件夹)中。欢迎通过 Telegram 讨论。