1701066749
复杂 3 大写的计算
1701066750
1701066751
计算机科学的真义 [144] 是在自然界中无处不在的大写的计算。
1701066752
1701066753
——朗顿(Chris Langton),引自勒温(Roger Lewin)的《复杂性:混沌边缘的生命》(Complexity:Life at the Edge of Chaos)
1701066754
1701066755
1701066756
1701066757
1701066759
复杂 第10章 元胞自动机、生命和宇宙
1701066760
1701066762
自然界中的计算
1701066763
1701066764
《科学》杂志不久前出版了一篇文章, [145] 题为《社会性昆虫行为的计算》(Getting the Behavior of Social Insects to Compute),文中介绍了一些昆虫学家的工作,他们将蚂蚁群体的行为等同于“计算机算法”,每只蚂蚁都执行简单的程序,使得整个种群作为一个整体执行复杂的计算,比如在决定何时将巢穴搬往何地的问题上形成一致。
1701066765
1701066766
如果由一只蚂蚁来领导和决策,很容易就能在计算机上编出程序来进行计算。其他蚂蚁只需按照领导者的决策来做就行了。然而,在前面我们已经看到,在蚂蚁群体中没有领导者;蚁群“计算机”由数百万只自主的蚂蚁组成,每只蚂蚁都只是根据与一小部分蚂蚁的交互来进行决策和行动。这种计算与具有CPU和内存的普通电脑进行的计算差别很大。
1701066767
1701066768
与此类似,1994年三位杰出的大脑科学家也写了一篇文章:“大脑是计算机吗?” [146] 他们认为:“如果我们同意接受更宽泛的计算概念,答案就一定是‘是’。”同蚁群一样,大脑的计算方式——数以亿计的神经元并行工作,而无须中央控制——也与现代的数字计算机的运作方式完全不同。
1701066769
1701066770
在前两章我们探讨了计算机中的生命和进化。在这一部分,我们来看看相对的思想,以及计算在自然界中的广泛存在。自然系统的“计算”指的是什么呢?大致上说,计算是复杂系统为了成功适应环境而对信息的处理。但是这样的说法还能更精确些吗?信息在哪里?复杂系统又是如何处理信息的?
1701066771
1701066772
为了让这类问题更易于研究,科学家们通常会将问题理想化——也就是尽可能简化,但仍然保留问题的主要特征。鉴于此,许多人都用元胞自动机这种理想化的复杂系统模型来研究自然界中的计算。
1701066773
1701066775
元胞自动机
1701066776
1701066777
在第4章曾讲过,图灵机将“明确程序”——也就是计算——的概念进行了形式化。计算就是图灵机根据机器的规则集将带子上的初始输入转换成停机时带子上的输出。这个抽象的机器就是后来所有数字计算机的设计原型。由于冯·诺依曼对计算机设计作出的贡献,现在的计算机架构被称为“冯·诺依曼体系结构”。
1701066778
1701066779
冯·诺依曼体系结构包括存储数据和程序指令的随机存取存储器(RAM)、从存储器存取指令和数据并执行指令处理数据的中央处理单元(CPU)。你可能知道,虽然程序员们编程时使用的是高级语言,存储在计算机中的指令和数据却是0/1组成的串。执行指令就是将这种0/1码译成基本的逻辑操作让CPU执行。只需要几种基本的逻辑操作就能实现所有计算,现代CPU每秒能执行数亿次这样的逻辑操作。
1701066780
1701066781
元胞自动机是理想化的复杂系统,结构完全不同于计算机。想象一块板子上排列着许多灯泡(图10.1),每个灯泡与四周以及斜对角的灯泡连在一起。在图中只画了其中一个灯泡的连接线,不过姑且想象所有灯泡都有连接线。
1701066782
1701066783
1701066784
1701066785
1701066786
▲图10.1 排列的灯泡,每个都与四周以及对角的灯泡相连,图中画了一个灯泡的连线作为示范。灯泡的状态可以是亮和灭。假设边沿是回绕连在一起,也就是认为最左边的与最右边的灯泡相邻,最下面的与最上面的灯泡相邻,等等
1701066787
1701066788
图10.2中(左边的盒子),有些灯泡已经点亮(为了简洁,我没有画灯泡的连线)。先设定好灯泡的开关状态,然后各个灯泡开始不断定时“更新状态”——选择开或关,所有灯泡都同步变化。你可以将这个灯泡阵看作萤火虫发光的模型,每只萤火虫都根据周围萤火虫的闪灭来调整自己是亮还是灭;也可以看作神经元的激发模型,各个神经元受周围神经元的状态激发或抑制;或者就当作抽象艺术也行,如果你愿意的话。
1701066789
1701066790
1701066791
1701066792
1701066793
▲图10.2 左:灯泡阵列的初始状态,没有画灯泡之间的连线。右:变化一次之后的状态,规则是“采用邻域占多数的状态”
1701066794
1701066795
灯泡每一步如何“决定”是开还是关呢?它们都遵循一些规则,根据邻域内灯泡的状态——也就是相邻的8个灯泡和它自己的状态——来决定下一步的状态(是开还是关)。
1701066796
1701066797
例如,规则可以是这样:“如果邻域内的灯泡(包括自己)点亮的超过一半,就点亮(如果本来就是亮的,则不变),否则就熄灭(如果本来就是灭的,则不变)。”也就是说,邻域中9个灯泡,如果有5个或5个以上是亮的,中间的灯泡下一步就是亮的。我们来看看灯泡阵列下一步会怎么变。
[
上一页 ]
[ :1.701066748e+09 ]
[
下一页 ]