REF · 经典模型

NK 适应性景观THE NK FITNESS LANDSCAPE

Kauffman & Levin,1987 — 把「崎岖度」变成一个可以拧的旋钮

被引用于:Topic 28 适应性景观

01它问的是什么问题(The Question It Poses)

有的问题,你一点一点改,最后总能改到最好;有的问题,改到某处就再也动不了了,而你明知道还有更好的方案在别处。这两类问题的差别在哪儿?

把配置空间画成地形之后,问题就变成了:地形的崎岖程度——有几个山头、山头之间隔多远——由什么决定?Stuart Kauffman 和 Simon Levin 要的不是某个具体系统的真实地形(那通常测不出来),而是一台可以调节崎岖度的发生器:一个旋钮从"只有一座山"一直拧到"完全随机的碎石地",中间连续可调。有了它,才能问"崎岖度变化时,搜索行为怎么变"这种问题。

02规则本身(The Rules)

  1. 系统由 N 个部件组成,每个部件取 0 或 1。所以一共有 2N 种配置。
  2. 每个部件都有自己的一份贡献值。第 i 个部件的贡献,取决于它自己的状态,外加另外 K 个指定部件的状态
  3. 所以第 i 个部件面对 2K+1 种"局面"。开跑之前,给每一种局面从 0 到 1 之间随机抽一个数当贡献值,抽完就固定,整场不变。
  4. 整个系统的适应度 = N 个部件贡献值的平均。
  5. 邻居 = 只翻转其中一个部件得到的配置。所以每个配置有 N 个邻居。

要点全在第 2、3 条。K 是相互依赖的程度:K = 0 时每个部件自己说了算;K = N−1 时每个部件的好坏都被所有其他部件牵着。而"随机抽一个数"这个设定是故意的——它表示"我们对这些依赖关系一无所知",于是唯一进入模型的信息就只剩下 K 本身。

还有一个后果值得说清:翻转一个部件,不只改变它自己的贡献,还会改掉所有依赖它的那 K 个左右的部件的贡献。K 越大,一次改动搅乱的东西越多——这就是崎岖度的来源。

六个部件 — 箭头表示「我的贡献要看谁的脸色」 K = 0 1 2 3 4 5 6 没有箭头:各管各的 翻一个部件 → 只有 1 份贡献改变 地形:单峰 K = 2 1 2 3 4 5 6 每个部件都看另外两个 — 图中只画与部件 1 有关的四条 翻部件 1 → 1、3、5 三份贡献同时改变 地形:多峰 粉色 = 翻转部件 1 之后贡献值会被改写的部件
K 不是"复杂度"的模糊说法,它是一个能数出来的量:改一个部件,会有几份贡献跟着被重算。

03跑起来会看到什么(What You See When It Runs)

从一个随机配置出发,反复搬到更好的邻居去(这叫适应性行走,adaptive walk),直到没有更好的邻居为止。三件事会稳定地出现:

① K = 0 时地形只有一座山。每个部件的最佳状态与别人无关,你可以逐个定下来,所以从任何起点出发都能走到同一个顶点。这个顶点的适应度是每个部件"两选一取大"的平均,也就是约 0.67。走到顶大约要 N/2 步。

② K = N−1 时地形彻底随机。任意两个相邻配置的适应度毫无关系。此时局部最优的个数是 2N⁄(N+1)——N = 20 时约五万个。更要命的是行走会很快结束:每往上走一步,比当前更好的邻居数大约减半,所以从随机起点出发,只需要 log₂N 量级的步数就再也走不动了。N = 100 的系统,大约走七步就卡住。

③ 而且卡住的位置并不高。K 越大,适应性行走能到达的峰越接近随机配置的平均值 0.5。Kauffman 把这个现象叫复杂性灾难(complexity catastrophe):部件之间相互牵制到一定程度之后,"演化/优化"这件事就几乎不再带来任何优势。

K 上升带来的两件事,方向相反 局部最优的个数 K → 1 2ᴺ/(N+1) 越来越多的地方可以卡住 走到的那个峰有多高 随机配置的平均 0.5 K=0 时约 0.67 K → 优化带来的好处塌向零 右图这条曲线就是 Kauffman 说的「复杂性灾难」
K 大不只是"更难找到最优",是连找到的那个次优也变得不值钱。

另有一条常被忽略的结果:K 介于两端之间时,最有意思的事情才发生——地形既有多个峰,峰之间又还保留着相关性(相关长度随 K 上升而变短)。中等 K 是唯一一段"既有多样的好方案、又还能靠搜索找到它们"的区间,这也是"混沌边缘"这类说法在 NK 语言里最接近可定义的地方。

04它解释了现实中的什么(What It Explains)

NK 模型的用法从来不是"代进真实数据算出答案",而是作为一台产生定性预期的机器:如果某个系统的部件相互依赖变强,你应该看到什么?

它给出的预期相当具体:局部最优会变多(不同的团队/物种/公司会稳定地停在不同的方案上,且都不是最优);渐进搜索的收益会迅速衰减(同样的努力,改进幅度越来越小);起点会变得比努力更重要(路径依赖);模仿会变得困难——Jan Rivkin 在 2000 年用 NK 论证过这一点:高 K 的战略哪怕被完全看见也难以被抄走,因为抄错一两个部件就会掉进谷里,而部件的数量让穷举变得不可行。

同一台机器还解释了为什么模块化是一种如此普遍的演化产物:把系统切成模块,就是在人为地把 K 压低,代价是放弃跨模块的协同(峰会矮一点),换来的是"小步改进重新有效"。这正是第 3 期近可分解性那条论证的定量版本。

它不能解释什么(What It Cannot Explain)

延伸阅读(Further Reading)