崩塌可以用计算机模拟吗?
在第2章我们看到,在计算和物理过程之间没有明确的界线。同样,沙堆的思想也很容易通过计算机来体现。同物理沙堆一样,算法沙堆产生的复杂结果也具有统计幂律性。
图3.4给出了一个例子。原理如下。计算机程序在一个有25个(虚拟)格子的“板子”上随机堆积(虚拟)沙粒,图中每一个大方块就是一块板子,填有数字的小方块就是格子。每个格子能堆3粒。一旦堆到4粒,就会散落出去,周围4个格子每格1粒,原来的格子变成空的(图中的0)。如果板子边缘的格子有4粒,1粒就会从板子边缘“掉下去”,离开系统。
图3.4 崩塌模型。在板子2中间的格子堆了第4粒沙。然后4粒沙散开到相邻的4个格子。这导致又有两个格子有了4粒沙(板子3)。这些沙再次散开到相邻格子。崩塌一直持续到没有格子有4粒沙。板子9给出了这次崩塌最后的状态和所有受影响的格子(阴影)
从空板子开始(全0),沙粒逐渐累积,直到一些格子有3粒,如图左上的板子所示。如果3粒沙的格子再堆1粒,就会触发一系列动态过程,具体的发展取决于板子上所有格子的状态。在图3.4的板子2中,中间格子堆了第4粒沙。4粒沙散开,导致两个相邻格子有了4粒沙(板子3),继续散开又导致另一个格子有了4粒沙(板子4)。这个过程一直持续,直到所有格子都没有4粒沙(板子9)。这个过程就是崩塌,这次崩塌包括9个格子的10次散落事件。这个过程中,中间格子散落了两次。板子9中没有格子有4粒沙,并且标出了所有曾发生散落事件的格子。
堆一粒沙导致的后果取决于堆放的位置和板子上所有格子的状态。如果沙粒被堆放到没有3粒沙的格子,则不会发生崩塌;如果沙粒堆放的格子有3粒沙,但相邻格子都没有3粒沙,则崩塌规模为1;如果相邻格子有3粒沙,则会发生更大规模的崩塌。如果生成随机初始状态的板子,反复玩这个游戏,并描出崩塌规模与崩塌次数的对数关系,结果将是一条表现出幂律的直线。崩塌规模的上限由板子大小决定。板子越大,能产生的崩塌就越大,但总是越大的崩塌发生的频度越低。
这个基于计算机的系统再次阐释了什么是自组织临界性。除非有格子堆了3粒沙,否则就不会产生崩塌。所有格子都不到3粒沙的板子是亚临界的。一旦有格子有了3粒沙,系统就是临界的,就有可能发生崩塌,但崩塌何时发生,规模多大,取决于系统的具体状态和下一粒沙落在哪里。系统不能越过临界态,因为4粒沙的格子是不被允许的。因此,只要有新的沙粒落到板子上,系统就必然“自组织”成临界态。结果的幂律分布反映了导致特定规模崩塌的状态的潜在可能性。也就是说,可能产生大规模崩塌的状态要比可能产生小规模崩塌的状态出现的可能性低得多。
这个系统证明了,幂律型复杂性可以通过简单规则作用于特定初始状态产生。计算沙堆和真实沙堆唯一的区别在于“粘连”规则不一样。对于真实沙堆,是物理定律决定了沙粒在掉下来前可以堆多高,而对于算法沙堆,则是程序决定了一个格子可以堆多少粒沙。