跳到正文

系统

256 条规则,每条一个 byte

Elementary cellular automata 看起来像玩具:一排黑白格子加一张查表。把一个 rule number 逐位读懂,就会明白为什么这么小的规则,可以无聊、可以周期、可以混沌,甚至可以通用计算。

规则不等于它的描述。同样是八个 bit 的查表,可以永远安静,也可以计算任何东西;只有跑起来才知道。

八种邻域,一个 byte

拿一排格子,每格不是黑就是白。下一排怎么来?每个格子看上一排的三个格:左邻、自己、右邻。三个格、每格两种状态,一共 2 × 2 × 2 = 8 种组合,从 111 一路到 000。

一条规则,就只是对这八种组合各给一个答案:黑或白,所以一共只有 2⁸ = 256 条规则。八个是非题刚好是一个 byte,每一条规则都能写成 0 到 255 之间的一个数字。

怎么读一个 rule number

Wolfram 的写法是把八种邻域从大到小排开:111、110、101、100、011、010、001、000,再在每一种下面写出新格子的颜色。Rule 30 的答案是 0、0、0、1、1、1、1、0。

把这八个答案当成二进制数 00011110 来读,就是 30:规则的名字,就是它自己的查表。 反过来也一样。Rule 204 是 11001100,永远照抄中间那格,什么都不变;Rule 0 一步就把所有格子变白。

同样大小,完全不同的世界

让每条规则都从一个黑格开始跑,这 256 张表就不再长得一样。很多规则很快死掉或冻住。有的变成一直重复的条纹。Rule 90 让每个格子等于左邻 XOR 右邻,画出来是一个完整的 Sierpinski 三角。

Rule 30 长出来的图案,右半边好像永远不会安定;它中间那一列不规则到被拿来当随机数用。Rule 110 会长出会移动、会碰撞的局部结构,而 Matthew Cook 证明了这些碰撞可以完成任何计算。 Wolfram 把这些行为分成四类:均匀、周期、混沌、复杂。

256 其实是 88

把一条规则左右镜像,得到的规则行为一样,只是方向反过来。把黑白全部互换,得到的是同一种行为的负片。比如 Rule 30 镜像过来就是 Rule 86。

把镜像和黑白互换都算成同一条之后,256 条规则只剩 88 条真正不同的。 名字的数量从来不等于想法的数量;清单里大部分,是同一个想法换个角度看。

跑起来才知道

最让我在意的,是规则之小和它难以预测之间的落差。Rule 30、Rule 110 都能完整记在脑子里,可是一般来说,没有捷径能让你不算前面每一行,就知道第一百万行长什么样。

理解一条规则最快的方法,不是盯着它的查表,而是把它跑起来。在元胞自动机实验室输入 0 到 255 之间任何一个数字,就能看它展开, 而 Conway's Game of Life 那一页把同一个想法带到二维。