第20行: |
第20行: |
| 考虑一排方格,每个格子都有黑、白两种颜色,如下图: | | 考虑一排方格,每个格子都有黑、白两种颜色,如下图: |
| | | |
− | [[File:image004.gif|300px]] | + | [[File:1.gif|300px]] |
| | | |
| 并且,每个格子都有左右两个邻居,如图: | | 并且,每个格子都有左右两个邻居,如图: |
| | | |
− | [[File:image005.gif|300px]] | + | [[File:2.gif|300px]] |
| | | |
| 其中黑色的方格有左右两个邻居(用灰色进行表示)。那么每个方格就可以根据它的两个邻居以及它自己的颜色按照一定的规则而改变颜色,例如,一个可能的规则如下: | | 其中黑色的方格有左右两个邻居(用灰色进行表示)。那么每个方格就可以根据它的两个邻居以及它自己的颜色按照一定的规则而改变颜色,例如,一个可能的规则如下: |
| | | |
− | [[File:image006.gif|300px]] | + | [[File:3.gif|300px]] |
| | | |
| 这是一个规则列表,第一排为所有可能的三个输入方格的颜色,下面的一排表示根据这些不同情况,中心的方格应该变成什么颜色。例如第三个规则上面是黑白黑,下面是黑,则当一排方格中有三个方格刚好是黑白黑的时候,中心的方格就变成黑色。 | | 这是一个规则列表,第一排为所有可能的三个输入方格的颜色,下面的一排表示根据这些不同情况,中心的方格应该变成什么颜色。例如第三个规则上面是黑白黑,下面是黑,则当一排方格中有三个方格刚好是黑白黑的时候,中心的方格就变成黑色。 |
第36行: |
第36行: |
| 如果我们把每次应用规则得到的方格排成一排一排的,就可以得到下面的图: | | 如果我们把每次应用规则得到的方格排成一排一排的,就可以得到下面的图: |
| | | |
− | [[File:image010.jpg|150px]] | + | [[File:4.jpg|150px]] |
| | | |
| 我们可以很容易将这个游戏的玩法编成程序,在计算机上实现它。这个游戏的学名叫作细胞自动机(又称元胞自动机,英文是:Cellular Automata, 简称CA)。然而这跟我们要探讨的网络游戏、大型计算机虚拟世界有什么关系呢?实际上,这个程序就是一个虚拟世界的简单原型。(有关细胞自动机的详细介绍,请看这里:http://www.swarmagents.com/complex/models/ca.htm) | | 我们可以很容易将这个游戏的玩法编成程序,在计算机上实现它。这个游戏的学名叫作细胞自动机(又称元胞自动机,英文是:Cellular Automata, 简称CA)。然而这跟我们要探讨的网络游戏、大型计算机虚拟世界有什么关系呢?实际上,这个程序就是一个虚拟世界的简单原型。(有关细胞自动机的详细介绍,请看这里:http://www.swarmagents.com/complex/models/ca.htm) |
第44行: |
第44行: |
| 我们所生活的真实宇宙只有一个,它的物理规则也是固定死的。然而,对于人造的虚拟宇宙来说,我们就相当于是上帝,拥有了更改物理规则的权利,这样,我们可以通过改变规则而创造出各种不同的宇宙,例如,我们把规则改为: | | 我们所生活的真实宇宙只有一个,它的物理规则也是固定死的。然而,对于人造的虚拟宇宙来说,我们就相当于是上帝,拥有了更改物理规则的权利,这样,我们可以通过改变规则而创造出各种不同的宇宙,例如,我们把规则改为: |
| | | |
− | [[File:image012.jpg|250px]] | + | [[File:5.jpg|250px]] |
| | | |
| 则能创造出更漂亮的宇宙: | | 则能创造出更漂亮的宇宙: |
| | | |
− | [[File:image014.jpg|500px]] | + | [[File:6.jpg|500px]] |
| | | |
| 显然,不同的规则能够创造不同的虚拟世界。有了虚拟世界的最小的模型,我们就能够进行科学分析来。我们可以像物理学家一样做实验,看看在不同的物理规则下,宇宙会是什么样子的。我们可以像生物学家一样对虚拟世界中的各种花纹“生物”进行分类,等等。就好比当年伽利略发明望远镜一样,有了细胞自动机这个最小的虚拟宇宙,科学家们就可以打开一扇窗,去观察另一种完全不同的虚拟世界了。研究这门科学的学问就叫做[http://www.wolframscience.com/ A New Kind of Science] (一种新科学,简称NKS),他的创始人就是大名鼎鼎的史蒂芬,沃尔弗莱姆([http://www.stephenwolfram.com/ Stephen Wolfram])。 | | 显然,不同的规则能够创造不同的虚拟世界。有了虚拟世界的最小的模型,我们就能够进行科学分析来。我们可以像物理学家一样做实验,看看在不同的物理规则下,宇宙会是什么样子的。我们可以像生物学家一样对虚拟世界中的各种花纹“生物”进行分类,等等。就好比当年伽利略发明望远镜一样,有了细胞自动机这个最小的虚拟宇宙,科学家们就可以打开一扇窗,去观察另一种完全不同的虚拟世界了。研究这门科学的学问就叫做[http://www.wolframscience.com/ A New Kind of Science] (一种新科学,简称NKS),他的创始人就是大名鼎鼎的史蒂芬,沃尔弗莱姆([http://www.stephenwolfram.com/ Stephen Wolfram])。 |
第56行: |
第56行: |
| 任何一门学科的发展都有其历史,而有关细胞自动机这样的虚拟宇宙的研究则可以追溯到上世纪的一名伟大的科学家:冯·诺依曼(von Neumann)。我们都知道冯·诺依曼是第一台计算机的设计师,还是博弈论的创始人,但很少有人知道,在他的晚年(大概1940年左右),他在研究一个有趣的课题:人造机器的自我繁殖。 | | 任何一门学科的发展都有其历史,而有关细胞自动机这样的虚拟宇宙的研究则可以追溯到上世纪的一名伟大的科学家:冯·诺依曼(von Neumann)。我们都知道冯·诺依曼是第一台计算机的设计师,还是博弈论的创始人,但很少有人知道,在他的晚年(大概1940年左右),他在研究一个有趣的课题:人造机器的自我繁殖。 |
| | | |
− | [[File:image016.jpg|250px]] [[File:image017.jpg|200px]] | + | [[File:7.jpg|250px]] [[File:8.jpg|200px]] |
| | | |
| Von Neumann和他的著作《Theory of Self-reproducing Automata》 | | Von Neumann和他的著作《Theory of Self-reproducing Automata》 |
第68行: |
第68行: |
| 冯·诺依曼的这一工作影响了后来的很多人,包括著名的遗传算法之父John Holland,人工生命之父C.G. Langton,还包括当时还很年轻的Wolfram。 | | 冯·诺依曼的这一工作影响了后来的很多人,包括著名的遗传算法之父John Holland,人工生命之父C.G. Langton,还包括当时还很年轻的Wolfram。 |
| | | |
− | [[File:wolfram.jpg|250px]] [[File:bigbook.gif|300px]] | + | [[File:9.jpg|250px]] [[File:10.gif|300px]] |
| | | |
| Wolfram和他的《一种新科学》 | | Wolfram和他的《一种新科学》 |
第88行: |
第88行: |
| === 图灵机 === | | === 图灵机 === |
| | | |
− | [[File:image019.jpg|300px]] | + | [[File:11.jpg|300px]] |
| | | |
| 我们都知道阿兰图灵这个人,他最早提出了计算机的原型:图灵机。所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。 | | 我们都知道阿兰图灵这个人,他最早提出了计算机的原型:图灵机。所谓的图灵机就是指一个抽象的机器,它有一条无限长的纸带,纸带分成了一个一个的小方格,每个方格有不同的颜色。有一个机器头在纸带上移来移去。机器头有一组内部状态,还有一些固定的程序。在每个时刻,机器头都要从当前纸带上读入一个方格信息,然后结合自己的内部状态查找程序表,根据程序输出信息到纸带方格上,并转换自己的内部状态,然后进行移动。 |
第94行: |
第94行: |
| 在NKS中,我们可以把不同时刻的纸带像一维细胞自动机一样排在一起形成一个二维的世界。而机器头可以用一个黑点表示,如图: | | 在NKS中,我们可以把不同时刻的纸带像一维细胞自动机一样排在一起形成一个二维的世界。而机器头可以用一个黑点表示,如图: |
| | | |
− | [[File:image021.jpg|200px]] | + | [[File:12.jpg|200px]] |
| | | |
| 小黑箭头就是图灵机的读写头,它会在纸带上移来移去画出漂亮的折线。机器头的不同状态对应这个小黑箭头的不同朝向,而机器头遵循的规则就对应了这样一组图标: | | 小黑箭头就是图灵机的读写头,它会在纸带上移来移去画出漂亮的折线。机器头的不同状态对应这个小黑箭头的不同朝向,而机器头遵循的规则就对应了这样一组图标: |
| | | |
− | [[File:image023.jpg|300px]] | + | [[File:13.jpg|300px]] |
| | | |
| 这是一个具有两个方格颜色、三个内部状态(分别对应了三种不同的箭头角度)的图灵机。第一条规则表示如果机器头当前读入的方格是黑色的,且内部状态为1,那么机器头就把黑色擦去,并且右移一格,内部状态由1转成2,…… | | 这是一个具有两个方格颜色、三个内部状态(分别对应了三种不同的箭头角度)的图灵机。第一条规则表示如果机器头当前读入的方格是黑色的,且内部状态为1,那么机器头就把黑色擦去,并且右移一格,内部状态由1转成2,…… |
第104行: |
第104行: |
| 传统的计算机科学将图灵机视为一种计算的工具,即给图灵机编写适当的规则表让它完成某种计算任务,例如计算1+3。但是在NKS中,我们关心的不再是计算任务,而就是观察当给定一组规则后,程序如何行为。也就是说,NKS仅仅关心图灵机在一维纸带上写出的图形。因此,不同的程序在相同的纸带上经过多步计算能够形成非常不同的图形。例如,下面就是一个3种颜色,2种状态的图灵机产生的图形: | | 传统的计算机科学将图灵机视为一种计算的工具,即给图灵机编写适当的规则表让它完成某种计算任务,例如计算1+3。但是在NKS中,我们关心的不再是计算任务,而就是观察当给定一组规则后,程序如何行为。也就是说,NKS仅仅关心图灵机在一维纸带上写出的图形。因此,不同的程序在相同的纸带上经过多步计算能够形成非常不同的图形。例如,下面就是一个3种颜色,2种状态的图灵机产生的图形: |
| | | |
− | [[File:image026.jpg|300px]] | + | [[File:14.jpg|300px]] |
| | | |
| 我们看到了一副漂亮的图形,它就是用图灵机画出来的。因此,给定简单的规则,放手让程序演化,这就是NKS研究计算宇宙的方法。(有关图灵机的更详细介绍,请参看:http://www.swarmagents.com/vm/articles/turing.pdf) | | 我们看到了一副漂亮的图形,它就是用图灵机画出来的。因此,给定简单的规则,放手让程序演化,这就是NKS研究计算宇宙的方法。(有关图灵机的更详细介绍,请参看:http://www.swarmagents.com/vm/articles/turing.pdf) |
第112行: |
第112行: |
| 另外一种计算机科学中常用的计算模型就是抽象的重写规则系统,例如,重写规则:A-->AB,B-->BA。从一个字符串开始经过反复重写,可以得到非常复杂的字符串。NKS的研究方法仍然是将不同步骤得到的字符串排成一行一行的,每个字符串都转化成不同颜色的方格,于是,我们仍然能得到一些二维的Pattern(构型),如上面提到的重写规则可以得到: | | 另外一种计算机科学中常用的计算模型就是抽象的重写规则系统,例如,重写规则:A-->AB,B-->BA。从一个字符串开始经过反复重写,可以得到非常复杂的字符串。NKS的研究方法仍然是将不同步骤得到的字符串排成一行一行的,每个字符串都转化成不同颜色的方格,于是,我们仍然能得到一些二维的Pattern(构型),如上面提到的重写规则可以得到: |
| | | |
− | [[File:image027.jpg|300px]] | + | [[File:15.jpg|300px]] |
| | | |
| 变化不同的重写规则能够得到不同的Pattern,如: | | 变化不同的重写规则能够得到不同的Pattern,如: |
| | | |
− | [[File:image029.jpg|300px]] | + | [[File:16.jpg|300px]] |
| | | |
| === 自然数 === | | === 自然数 === |
第122行: |
第122行: |
| 上面讨论的计算系统都是对一些抽象元素的操作,然而传统数学中的计算则强调的是对数的操作。那么NKS能不能讨论对数的运算呢?下面就是一个例子,我们从数字1开始,然后用最简单的运算+1进行反复的迭代。显然,我们会得到序列1,2,3,……。这很平淡无奇,但是如果我们把这些数字表示成二进制数,那么我们仍然可以把它们排列成一行一行的方格,其中黑色表示二进制的1,而白色表示0,这样,我们就可以得到下面的图案: | | 上面讨论的计算系统都是对一些抽象元素的操作,然而传统数学中的计算则强调的是对数的操作。那么NKS能不能讨论对数的运算呢?下面就是一个例子,我们从数字1开始,然后用最简单的运算+1进行反复的迭代。显然,我们会得到序列1,2,3,……。这很平淡无奇,但是如果我们把这些数字表示成二进制数,那么我们仍然可以把它们排列成一行一行的方格,其中黑色表示二进制的1,而白色表示0,这样,我们就可以得到下面的图案: |
| | | |
− | [[File:image031.jpg|100px]] | + | [[File:17.jpg|100px]] |
| | | |
| (注;这张图的二进制数排列是靠右边对齐的) | | (注;这张图的二进制数排列是靠右边对齐的) |
第140行: |
第140行: |
| 如下图,表示了4种不同类型的细胞自动机演化结果: | | 如下图,表示了4种不同类型的细胞自动机演化结果: |
| | | |
− | [[File:image032.jpg|300px]] | + | [[File:18.jpg|300px]] |
| | | |
| 进一步,在NKS书中对这四类细胞自动机又进行了深入研究,例如比较了它们的信息传递情况: | | 进一步,在NKS书中对这四类细胞自动机又进行了深入研究,例如比较了它们的信息传递情况: |
| | | |
− | [[File:image033.jpg|300px]] | + | [[File:19.jpg|300px]] |
| | | |
| 这是四种类型的细胞自动机信息传播的情况。在每一种类型中,我们都运行相同的细胞自动机两次,但是这两次的初始条件略微不同,即唯独中心的方格变化了颜色。那么,我们可以考察这一个变化颜色的方格会对整体细胞自动机的结构产生什么影响。如果在某一时刻某一方格在第二次运行与第一次运行的颜色不同了,则把这个方格涂成黑色。没有变化的方格用白色和灰色表示。 | | 这是四种类型的细胞自动机信息传播的情况。在每一种类型中,我们都运行相同的细胞自动机两次,但是这两次的初始条件略微不同,即唯独中心的方格变化了颜色。那么,我们可以考察这一个变化颜色的方格会对整体细胞自动机的结构产生什么影响。如果在某一时刻某一方格在第二次运行与第一次运行的颜色不同了,则把这个方格涂成黑色。没有变化的方格用白色和灰色表示。 |
第152行: |
第152行: |
| 另外,Wolfram观察到的一个非常普遍的现象是:自相似、自嵌套的分形结构。一个有趣的细胞自动机就是被编号为225的2颜色,2邻居的一维细胞自动机,它在一个黑方格,其他都是白方格的初始条件下能够产生下面的图形: | | 另外,Wolfram观察到的一个非常普遍的现象是:自相似、自嵌套的分形结构。一个有趣的细胞自动机就是被编号为225的2颜色,2邻居的一维细胞自动机,它在一个黑方格,其他都是白方格的初始条件下能够产生下面的图形: |
| | | |
− | [[File:image036.jpg|300px]] | + | [[File:20.jpg|300px]] |
| | | |
| 如果把这个图形作一定的变形:将其以对角线为轴进行反转,并将其扭曲让中间的白色结构靠左边,我们能够得到右边图形: | | 如果把这个图形作一定的变形:将其以对角线为轴进行反转,并将其扭曲让中间的白色结构靠左边,我们能够得到右边图形: |
| | | |
− | [[File:image040.jpg|300px]] | + | [[File:21.jpg|300px]] |
| | | |
| (注,右上角空出来的部分没有任何细胞) | | (注,右上角空出来的部分没有任何细胞) |
第166行: |
第166行: |
| 进一步,Wolfram还对各种计算宇宙进行了穷举试验,包括什么图灵机、替换系统、Tag自动机等等,发现:大致上说,这些系统产生的图形也可以归结为那四种类型。而且,最重要的是,系统产生的Pattern的复杂性似乎并不会随着系统规则复杂性的增长而增长。例如,我们一般认为二维的细胞自动机比一维的细胞自动机规则更复杂。然而,当我们把二维的细胞自动机压缩成一维的时候,会看到和一维细胞自动机非常相似的结构。例如,下面就是对著名的二维细胞自动机:[http://www.swarmagents.com/complex/models/gameoflife.htm 生命游戏]演化图形的一个一维的截面(这里有一个非常好的探索[http://www.swarmagents.com/thesis/detail.asp?id=139 生命游戏的软件]): | | 进一步,Wolfram还对各种计算宇宙进行了穷举试验,包括什么图灵机、替换系统、Tag自动机等等,发现:大致上说,这些系统产生的图形也可以归结为那四种类型。而且,最重要的是,系统产生的Pattern的复杂性似乎并不会随着系统规则复杂性的增长而增长。例如,我们一般认为二维的细胞自动机比一维的细胞自动机规则更复杂。然而,当我们把二维的细胞自动机压缩成一维的时候,会看到和一维细胞自动机非常相似的结构。例如,下面就是对著名的二维细胞自动机:[http://www.swarmagents.com/complex/models/gameoflife.htm 生命游戏]演化图形的一个一维的截面(这里有一个非常好的探索[http://www.swarmagents.com/thesis/detail.asp?id=139 生命游戏的软件]): |
| | | |
− | [[File:image042.jpg|300px]] | + | [[File:22.jpg|300px]] |
| | | |
| (该图是这样得到的:将每个时刻生命游戏的运行形成的平面空间排在一起构成一个有高度的三维柱状体,然后对这个柱状体的纵断面切一个截面出来,这样上图纵向就表示不同时刻这个侧面黑白方格的情况,并且将离此截面更远的黑色方格画成灰色,就得到该图) | | (该图是这样得到的:将每个时刻生命游戏的运行形成的平面空间排在一起构成一个有高度的三维柱状体,然后对这个柱状体的纵断面切一个截面出来,这样上图纵向就表示不同时刻这个侧面黑白方格的情况,并且将离此截面更远的黑色方格画成灰色,就得到该图) |
第172行: |
第172行: |
| 我们看到,它和1维的第四类型(复杂型)细胞自动机很相似。经过大量的实验,我们似乎可以得到这样一个结论:规则复杂性的增长并不一定会导致行为复杂性的增长。定性来说,如果将两者画成关系曲线,会得到下图: | | 我们看到,它和1维的第四类型(复杂型)细胞自动机很相似。经过大量的实验,我们似乎可以得到这样一个结论:规则复杂性的增长并不一定会导致行为复杂性的增长。定性来说,如果将两者画成关系曲线,会得到下图: |
| | | |
− | [[File:image043.gif|600px]] | + | [[File:23.gif|600px]] |
| | | |
| 当规则非常简单(例如所有的方格都变成黑色),它的行为肯定是简单的。这时候我们稍稍增加规则的复杂性,系统的行为也会复杂。然而,当规则的复杂性超过某个特定的程度之后,行为的复杂性就不会增长了。似乎行为复杂性的增长存在一个阈值,系统的复杂性不能超越这个阈值,而无论底层规则多么复杂。这个结论实际上有着非常深刻的内涵,我们在后面的章节中将会指出这个阈值到底是什么。 | | 当规则非常简单(例如所有的方格都变成黑色),它的行为肯定是简单的。这时候我们稍稍增加规则的复杂性,系统的行为也会复杂。然而,当规则的复杂性超过某个特定的程度之后,行为的复杂性就不会增长了。似乎行为复杂性的增长存在一个阈值,系统的复杂性不能超越这个阈值,而无论底层规则多么复杂。这个结论实际上有着非常深刻的内涵,我们在后面的章节中将会指出这个阈值到底是什么。 |
第190行: |
第190行: |
| 考虑一个特定的细胞自动机,例如CA90(对1维的、邻居为两个的细胞自动机的编号,确定了一个编号就确定了它的一组规则),它形成的图形和一个时间序列曲线,如下图: | | 考虑一个特定的细胞自动机,例如CA90(对1维的、邻居为两个的细胞自动机的编号,确定了一个编号就确定了它的一组规则),它形成的图形和一个时间序列曲线,如下图: |
| | | |
− | [[File:image045.gif|400px]] | + | [[File:24.gif|400px]] |
| | | |
− | [[File:image047.gif|500px]] | + | [[File:25.gif|500px]] |
| | | |
| 上面的是CA90的运行情况,下面的是它生成的时间序列曲线 | | 上面的是CA90的运行情况,下面的是它生成的时间序列曲线 |
第200行: |
第200行: |
| 进一步,Jason考虑由两个细胞自动机混合得到的时间序列。例如给定两个细胞自动机CA90和CA110,然后我们把它们进行一定比例的混合。例如混合比例是3:7。具体做法是,从任意一个随机初始条件开始演化3步CA90,然后再演化7步CA110,这样我们得到一个混合的细胞自动机,Jason叫它ICA,用同样的方法,可以画出这个ICA生成的时间序列曲线: | | 进一步,Jason考虑由两个细胞自动机混合得到的时间序列。例如给定两个细胞自动机CA90和CA110,然后我们把它们进行一定比例的混合。例如混合比例是3:7。具体做法是,从任意一个随机初始条件开始演化3步CA90,然后再演化7步CA110,这样我们得到一个混合的细胞自动机,Jason叫它ICA,用同样的方法,可以画出这个ICA生成的时间序列曲线: |
| | | |
− | [[File:image049.gif|400px]] | + | [[File:26.gif|400px]] |
| | | |
| 下面,Jason就用这个生成的时间序列曲线去拟合真实的股票价格数据。具体方法可以是通过调节两种细胞自动机的混合比例,例如从3:7调到8:2,使得生成的序列能够和真实数据在均方误差的条件下拟合的很好,如下图: | | 下面,Jason就用这个生成的时间序列曲线去拟合真实的股票价格数据。具体方法可以是通过调节两种细胞自动机的混合比例,例如从3:7调到8:2,使得生成的序列能够和真实数据在均方误差的条件下拟合的很好,如下图: |
| | | |
− | [[File:image051.gif|400px]] | + | [[File:27.gif|400px]] |
| | | |
| Jason试了很多种两两细胞自动机组合的情况,都能够得到较好的拟合曲线。然而,很奇怪的是,这个方法并没有对股市建立任何显示的模型。 | | Jason试了很多种两两细胞自动机组合的情况,都能够得到较好的拟合曲线。然而,很奇怪的是,这个方法并没有对股市建立任何显示的模型。 |
第214行: |
第214行: |
| == 关于“黑客帝国”的物理学 == | | == 关于“黑客帝国”的物理学 == |
| | | |
− | [[File:image053.jpg|300px]] | + | [[File:28.jpg|300px]] |
| | | |
| 相信读这篇文章的人大部分都应该看过《黑客帝国》这部影片。与其他的好莱坞式的科幻电影不同,这个影片具有非常深刻的哲学、宗教内涵,甚至与科学也密切相关。虽然大众一般认为这是一部有关“人工智能”的片子,但是与该影片更相像的科学倒不是传统意义上的人工智能,而是Wolfram的“一种新科学”。黑客帝国中描述的那个大型的控制人类的计算机模拟系统Matrix究竟有没有可能呢?NKS的第9章“基础物理学”对这一问题进行了一系列的探讨。 | | 相信读这篇文章的人大部分都应该看过《黑客帝国》这部影片。与其他的好莱坞式的科幻电影不同,这个影片具有非常深刻的哲学、宗教内涵,甚至与科学也密切相关。虽然大众一般认为这是一部有关“人工智能”的片子,但是与该影片更相像的科学倒不是传统意义上的人工智能,而是Wolfram的“一种新科学”。黑客帝国中描述的那个大型的控制人类的计算机模拟系统Matrix究竟有没有可能呢?NKS的第9章“基础物理学”对这一问题进行了一系列的探讨。 |
第224行: |
第224行: |
| 量子力学告诉我们,很有可能在非常微小的尺度上,我们所生活的空间是离散的。也就是说,宇宙的空间从本质上讲就是一张离散的大网。然而,网络是没有维度的,它和我们感受到空间的三个维度不同,这个冲突如何解决呢?答案就在于涌现。首先,我们看一个反问题,即由空间得到网络。这个问题对于搞计算机的人来说并不陌生:即我们如何对一个空间进行有限的划分,从而得到一些基本的单元。例如,对二维平面进行划分有多种方法:方格、六角格等等。下面就列出了三种不同空间的划分: | | 量子力学告诉我们,很有可能在非常微小的尺度上,我们所生活的空间是离散的。也就是说,宇宙的空间从本质上讲就是一张离散的大网。然而,网络是没有维度的,它和我们感受到空间的三个维度不同,这个冲突如何解决呢?答案就在于涌现。首先,我们看一个反问题,即由空间得到网络。这个问题对于搞计算机的人来说并不陌生:即我们如何对一个空间进行有限的划分,从而得到一些基本的单元。例如,对二维平面进行划分有多种方法:方格、六角格等等。下面就列出了三种不同空间的划分: |
| | | |
− | [[File:image054.gif|500px]] | + | [[File:29.gif|500px]] |
| | | |
| 它们分别是对一维直线区域、二维平面、三维立体空间的划分。给定了这样的一个划分,我们就能得到一个网络。那么这三个不同维度的空间得到的网络有什么不一样的性质呢? | | 它们分别是对一维直线区域、二维平面、三维立体空间的划分。给定了这样的一个划分,我们就能得到一个网络。那么这三个不同维度的空间得到的网络有什么不一样的性质呢? |
第230行: |
第230行: |
| 我们可以做这样一件事,任意挑选一个网络上的节点,然后挑选出与该节点相邻的那些节点组成一个集合,计算该集合的元素个数计为N(1)。之后,再从开始这个节点出发,找出所有的与它相隔两条边的节点组成一个集合,记这个集合的元素个数为N(2),依此类推……,我们能够得到一个序列:N(1), N(2), ..,N(r)….。如果把相隔半径r作为横轴,把N(r)作为纵轴,不难做出一条r-N(r)的曲线。下面,我们来分别对这三个网络求出r-N(r)曲线: | | 我们可以做这样一件事,任意挑选一个网络上的节点,然后挑选出与该节点相邻的那些节点组成一个集合,计算该集合的元素个数计为N(1)。之后,再从开始这个节点出发,找出所有的与它相隔两条边的节点组成一个集合,记这个集合的元素个数为N(2),依此类推……,我们能够得到一个序列:N(1), N(2), ..,N(r)….。如果把相隔半径r作为横轴,把N(r)作为纵轴,不难做出一条r-N(r)的曲线。下面,我们来分别对这三个网络求出r-N(r)曲线: |
| | | |
− | [[File:image055.gif|500px]] | + | [[File:30.gif|500px]] |
| | | |
| 这三个曲线分别可以看成是常数曲线、直线和二次曲线,也就是说函数关系分别是:N(r)~r0,N(r)~r1和N(r)~r2。而这些网络所在的空间维度分别是1维、2维和3维的,因此,我们能够得到这样一个关系: | | 这三个曲线分别可以看成是常数曲线、直线和二次曲线,也就是说函数关系分别是:N(r)~r0,N(r)~r1和N(r)~r2。而这些网络所在的空间维度分别是1维、2维和3维的,因此,我们能够得到这样一个关系: |
| | | |
− | [[File:image057.gif|300px]] | + | [[File:31.gif|300px]] |
| | | |
| 这里d是网络镶嵌空间的维度。所谓的镶嵌空间,就是指能够把该网络不重叠的画在一个最小维度的空间之中。因此,三维的网络空间是不可能不重叠地画在二维空间之中的。进一步,我们可以把这个结论抽象为对网络的维度定义。即如果网络中任意一点邻居的个数随着距离的增大而呈现上式的关系的话,那么,我们就可以定义该网络的维度。 | | 这里d是网络镶嵌空间的维度。所谓的镶嵌空间,就是指能够把该网络不重叠的画在一个最小维度的空间之中。因此,三维的网络空间是不可能不重叠地画在二维空间之中的。进一步,我们可以把这个结论抽象为对网络的维度定义。即如果网络中任意一点邻居的个数随着距离的增大而呈现上式的关系的话,那么,我们就可以定义该网络的维度。 |
第240行: |
第240行: |
| 下图是各种网络以及与它们对应的N(r)曲线: | | 下图是各种网络以及与它们对应的N(r)曲线: |
| | | |
− | [[File:image058.jpg|300px]] | + | [[File:32.jpg|300px]] |
| | | |
| 我们看到有些网络对应的曲线具有分数的幂律关系如f,因此,也可以说这些网络对应的空间是分数维的。有些网络甚至具有非常不规则的曲线关系,如e,j。 | | 我们看到有些网络对应的曲线具有分数的幂律关系如f,因此,也可以说这些网络对应的空间是分数维的。有些网络甚至具有非常不规则的曲线关系,如e,j。 |
第252行: |
第252行: |
| 在计算机的各种计算宇宙中,也存在这样的因果联系事件。不同的是,我们可以很方便的用计算机算法得到这些因果网络。例如,有这样一个替换系统: | | 在计算机的各种计算宇宙中,也存在这样的因果联系事件。不同的是,我们可以很方便的用计算机算法得到这些因果网络。例如,有这样一个替换系统: |
| | | |
− | [[File:image060.jpg|300px]] | + | [[File:33.jpg|300px]] |
| | | |
| 它也可以写成字符串的形式:A-->AB, BABA-->BB, BBB-->AA,那么从BBB开始,反复应用这三条重写规则,就能得到一个计算宇宙的历史: | | 它也可以写成字符串的形式:A-->AB, BABA-->BB, BBB-->AA,那么从BBB开始,反复应用这三条重写规则,就能得到一个计算宇宙的历史: |
| | | |
− | [[File:image062.jpg|300px]] | + | [[File:34.jpg|300px]] |
| | | |
| 其中灰色的带形区域表示了更新规则的计算作用。白色的带形区域连接了两个时刻没有更新变化的方格。通常情况下,我们关注的是方格,但是当我们考虑因果联系网络的时候,我们不再关心方格,而关心的是方格发生变化的事件本身。在这个图中,这些更新事件就表现为灰色的带形区域。因此,对上图进行一系列连续变换,我们不难得到一系列图: | | 其中灰色的带形区域表示了更新规则的计算作用。白色的带形区域连接了两个时刻没有更新变化的方格。通常情况下,我们关注的是方格,但是当我们考虑因果联系网络的时候,我们不再关心方格,而关心的是方格发生变化的事件本身。在这个图中,这些更新事件就表现为灰色的带形区域。因此,对上图进行一系列连续变换,我们不难得到一系列图: |
| | | |
− | [[File:image064.jpg|300px]] | + | [[File:35.jpg|300px]] |
| | | |
| 我们看到,这一系列拓扑变换可以把原来的带子变成一些分立的节点,而把原来的方格变成了一些不同颜色的条纹,最终,我们可以把它变成一个网络,其中箭头指向了作为结果的事件: | | 我们看到,这一系列拓扑变换可以把原来的带子变成一些分立的节点,而把原来的方格变成了一些不同颜色的条纹,最终,我们可以把它变成一个网络,其中箭头指向了作为结果的事件: |
| | | |
− | [[File:image067.gif|500px]] | + | [[File:36.gif|500px]] |
| | | |
| 其中各个更新事件变成了被标号的节点,而方格则变成了联系各个事件的不同颜色的连线边。最后,我们把得到的网络排列成树,即按照离根节点(1号节点)的距离从小到大,从上到下排开,得到: | | 其中各个更新事件变成了被标号的节点,而方格则变成了联系各个事件的不同颜色的连线边。最后,我们把得到的网络排列成树,即按照离根节点(1号节点)的距离从小到大,从上到下排开,得到: |
| | | |
− | [[File:image068.jpg|300px]] | + | [[File:37.jpg|300px]] |
| | | |
| 这就是前面那个替换系统最终形成的因果网络。这个网络有以下几点特征:1、该网络没有圈状结构。这是因为时间的流逝只能朝一个方向,前面的事件只能影响后面的事件,但反过来则是不可能的。2、该网络存在着一些边是从底下的节点连向上面的节点的。假如我们是一个生活在该网络之中的生物体,我们并不知道宇宙中的各个事件是如何更新的,我们仅仅能看到事件之间的先后因果顺序。一种可能是,我们把纵向从上到下看作是我们所在的这个宇宙的时间顺序。也就是说,树的第一层节点对应的是第一时刻宇宙发生的事件,第二层节点是第二时刻宇宙发生的事件……。那么从上至下的箭头表示上一时刻的宇宙事件对下一时刻宇宙事件的影响。同层次之间的箭头表示同一时刻宇宙中的两个事件的相互影响。这可以理解成这两个事件具有空间上的联系,因此在同一时刻事件A发生会同时影响到B发生。那么,反向的箭头意味着什么?它意味着未来的事件对当前该时刻的事件的影响。等等,这不是意味着时间在倒流吗?而时间倒流是会引起逻辑上的悖论的。比如说未来的你自己通过时间倒流把现在的你杀死。然而因为现在的你是未来的你的原因,所以你死了未来的你也就不能存在了。 | | 这就是前面那个替换系统最终形成的因果网络。这个网络有以下几点特征:1、该网络没有圈状结构。这是因为时间的流逝只能朝一个方向,前面的事件只能影响后面的事件,但反过来则是不可能的。2、该网络存在着一些边是从底下的节点连向上面的节点的。假如我们是一个生活在该网络之中的生物体,我们并不知道宇宙中的各个事件是如何更新的,我们仅仅能看到事件之间的先后因果顺序。一种可能是,我们把纵向从上到下看作是我们所在的这个宇宙的时间顺序。也就是说,树的第一层节点对应的是第一时刻宇宙发生的事件,第二层节点是第二时刻宇宙发生的事件……。那么从上至下的箭头表示上一时刻的宇宙事件对下一时刻宇宙事件的影响。同层次之间的箭头表示同一时刻宇宙中的两个事件的相互影响。这可以理解成这两个事件具有空间上的联系,因此在同一时刻事件A发生会同时影响到B发生。那么,反向的箭头意味着什么?它意味着未来的事件对当前该时刻的事件的影响。等等,这不是意味着时间在倒流吗?而时间倒流是会引起逻辑上的悖论的。比如说未来的你自己通过时间倒流把现在的你杀死。然而因为现在的你是未来的你的原因,所以你死了未来的你也就不能存在了。 |
第276行: |
第276行: |
| 事实上,给定了这样一个网络,我们还有另外的画它的方法。例如我们可以把它画成另外一棵树,处于两条红色曲线之间的节点作为一个层次。 | | 事实上,给定了这样一个网络,我们还有另外的画它的方法。例如我们可以把它画成另外一棵树,处于两条红色曲线之间的节点作为一个层次。 |
| | | |
− | [[File:cnetwork.gif|500px]] | + | [[File:38.gif|500px]] |
| | | |
| 那么,我们就得到了另一个完全不同的时间。以前同时的事件现在不再同时发生了。然而,有趣的是,这个新的树仍然对应了跟以前一模一样的因果网络。如果我们把不同的展开成树的方法看作是不同的观察者对这个宇宙的观察的话。那么我们会很自然的得出类似相对论的结论:时间是对于观察者而变的,但是事件之间的因果关系则是不变的。 | | 那么,我们就得到了另一个完全不同的时间。以前同时的事件现在不再同时发生了。然而,有趣的是,这个新的树仍然对应了跟以前一模一样的因果网络。如果我们把不同的展开成树的方法看作是不同的观察者对这个宇宙的观察的话。那么我们会很自然的得出类似相对论的结论:时间是对于观察者而变的,但是事件之间的因果关系则是不变的。 |
第290行: |
第290行: |
| 为了理解什么是不同计算宇宙之间的模拟,让我们来看一个具体的例子。下面是一个特殊的具有3种内部状态,两种方格颜色的图灵机的规则: | | 为了理解什么是不同计算宇宙之间的模拟,让我们来看一个具体的例子。下面是一个特殊的具有3种内部状态,两种方格颜色的图灵机的规则: |
| | | |
− | [[File:image080.gif|300px]] | + | [[File:39.gif|300px]] |
| | | |
| 当它作用到一个空白纸带上会产生如下的行为: | | 当它作用到一个空白纸带上会产生如下的行为: |
| | | |
− | [[File:image082.jpg|300px]] | + | [[File:40.jpg|300px]] |
| | | |
| 下面的问题是,我们能否找到一个特定的半径为1,颜色数不限的细胞自动机来精确模拟这个图灵机的行为呢?答案是肯定的,根据模拟的定义,我们首先要找到一个将图灵机的所有状态映射到细胞自动机的状态的方法。 | | 下面的问题是,我们能否找到一个特定的半径为1,颜色数不限的细胞自动机来精确模拟这个图灵机的行为呢?答案是肯定的,根据模拟的定义,我们首先要找到一个将图灵机的所有状态映射到细胞自动机的状态的方法。 |
第304行: |
第304行: |
| 下面这个表就是图灵机和8种颜色细胞自动机在一个方格上的对应关系: | | 下面这个表就是图灵机和8种颜色细胞自动机在一个方格上的对应关系: |
| | | |
− | [[File:image083.gif|600px]] | + | [[File:41.gif|600px]] |
| | | |
| 在该列表中,不同的列对应了不同的图灵机纸带的输入情况,以及相应的细胞自动机的方格颜色。不同的行表示了不同的读写头状态,以及对应的细胞自动机的颜色。黑和白对应了没有读写头在上面的图灵机纸带格,浅红和深红对应了读写头分别在白色方格或者黑色方格,且内部状态为1的细胞自动机的方格颜色,等等。 | | 在该列表中,不同的列对应了不同的图灵机纸带的输入情况,以及相应的细胞自动机的方格颜色。不同的行表示了不同的读写头状态,以及对应的细胞自动机的颜色。黑和白对应了没有读写头在上面的图灵机纸带格,浅红和深红对应了读写头分别在白色方格或者黑色方格,且内部状态为1的细胞自动机的方格颜色,等等。 |
第310行: |
第310行: |
| 进一步,要想让细胞自动机模拟图灵机,我们还需要把图灵机的每一步运算都映射到细胞自动机的每一步运算上。一个简单的方法是,针对每一个图灵机的规则,我们都能找到一个或多个细胞自动机的规则与之对应。比如,对于一个图灵机的规则: | | 进一步,要想让细胞自动机模拟图灵机,我们还需要把图灵机的每一步运算都映射到细胞自动机的每一步运算上。一个简单的方法是,针对每一个图灵机的规则,我们都能找到一个或多个细胞自动机的规则与之对应。比如,对于一个图灵机的规则: |
| | | |
− | [[File:image084.jpg|300px]] | + | [[File:42.jpg|300px]] |
| | | |
| 它表示在1状态,读入纸带是1的时候,读写头右移一个方格,并把当前格子改为白色。有了前面的状态对应表,我们不难把这一规则转化成如下多条细胞自动机的规则: | | 它表示在1状态,读入纸带是1的时候,读写头右移一个方格,并把当前格子改为白色。有了前面的状态对应表,我们不难把这一规则转化成如下多条细胞自动机的规则: |
| | | |
− | [[File:image088.gif|300px]] | + | [[File:43.gif|300px]] |
| | | |
| 其中灰色的方格可以是任意一个颜色的方格。因为红色方格模拟了图灵机读写头读到黑色方格的情况,因此对于细胞自动机来说,无论该红色方格的邻居是何种颜色,它都必须在下一时刻变成白色(第一个图标),同时读写头要移动到右边一个方格。这又有两种可能,第一种是右边的方格原来是白色,这就对应了中间的这个图标;第二种是右边的方格是黑色,这对应了第三个图标。因此,有了这三组规则,我们能够保证细胞自动机可以模拟图灵机的这一规则。 | | 其中灰色的方格可以是任意一个颜色的方格。因为红色方格模拟了图灵机读写头读到黑色方格的情况,因此对于细胞自动机来说,无论该红色方格的邻居是何种颜色,它都必须在下一时刻变成白色(第一个图标),同时读写头要移动到右边一个方格。这又有两种可能,第一种是右边的方格原来是白色,这就对应了中间的这个图标;第二种是右边的方格是黑色,这对应了第三个图标。因此,有了这三组规则,我们能够保证细胞自动机可以模拟图灵机的这一规则。 |
第320行: |
第320行: |
| 同样的道理,对于其他的图灵机规则,我们都可以找到一组细胞自动机规则与之对应。所以,我们完全可以通过设定细胞自动机的规则而模拟这台图灵机的动作,下面就是这样一次模拟: | | 同样的道理,对于其他的图灵机规则,我们都可以找到一组细胞自动机规则与之对应。所以,我们完全可以通过设定细胞自动机的规则而模拟这台图灵机的动作,下面就是这样一次模拟: |
| | | |
− | [[File:image091.gif|500px]] | + | [[File:44.gif|500px]] |
| | | |
| 这两个系统的动作精确相同。这就是说我们找到了一个细胞自动机能够模拟这台图灵机。不难看出,上面的这种从图灵机到细胞自动机的对应关系是通用的。也就是说,对于任何一台图灵机都能通过此种方法构造出一个特定的细胞自动机来模拟它。因此我们说,一维邻居半径是1的细胞自动机这'''一类计算宇宙''可以模拟图灵机这'''一类计算宇宙'''。 | | 这两个系统的动作精确相同。这就是说我们找到了一个细胞自动机能够模拟这台图灵机。不难看出,上面的这种从图灵机到细胞自动机的对应关系是通用的。也就是说,对于任何一台图灵机都能通过此种方法构造出一个特定的细胞自动机来模拟它。因此我们说,一维邻居半径是1的细胞自动机这'''一类计算宇宙''可以模拟图灵机这'''一类计算宇宙'''。 |
第326行: |
第326行: |
| 不仅仅细胞自动机可以模拟图灵机,图灵机反过来又可以模拟细胞自动机。例如,针对一个特定的邻居半径是1,有两种颜色的编号为90的细胞自动机: | | 不仅仅细胞自动机可以模拟图灵机,图灵机反过来又可以模拟细胞自动机。例如,针对一个特定的邻居半径是1,有两种颜色的编号为90的细胞自动机: |
| | | |
− | [[File:image094.gif|500px]] | + | [[File:45.gif|500px]] |
| | | |
| 我们可以找到一台6个内部状态、作用到3个颜色的纸带上的图灵机来模拟它。图灵机的工作原理与细胞自动机最大的不同就在于,图灵机是一台串行操作的机器,因为每一时刻读写头只能盯住一个方格,并对它进行改写。但是细胞自动机却可以在一个时刻一下更改所有的方格。如何解决这个矛盾呢?实际上在我们的数字计算机编程实现细胞自动机的过程中,已经可以找到这种利用串行的算法来模拟并行的方法了。基本思想就是让图灵机从左到右扫描所有方格,然后分别对这些方格的颜色进行更新。这样一次来回扫描就刚好完成了一步细胞自动机的运算。也就是说,多步图灵机的运算才对应1步细胞自动机的动作。由于我们允许程序运行任意长时间,所以图灵机可以模拟细胞自动机的全部动作。 | | 我们可以找到一台6个内部状态、作用到3个颜色的纸带上的图灵机来模拟它。图灵机的工作原理与细胞自动机最大的不同就在于,图灵机是一台串行操作的机器,因为每一时刻读写头只能盯住一个方格,并对它进行改写。但是细胞自动机却可以在一个时刻一下更改所有的方格。如何解决这个矛盾呢?实际上在我们的数字计算机编程实现细胞自动机的过程中,已经可以找到这种利用串行的算法来模拟并行的方法了。基本思想就是让图灵机从左到右扫描所有方格,然后分别对这些方格的颜色进行更新。这样一次来回扫描就刚好完成了一步细胞自动机的运算。也就是说,多步图灵机的运算才对应1步细胞自动机的动作。由于我们允许程序运行任意长时间,所以图灵机可以模拟细胞自动机的全部动作。 |
第332行: |
第332行: |
| 下面的示意图就仅仅有6个方格,图灵机模拟CA90的操作: | | 下面的示意图就仅仅有6个方格,图灵机模拟CA90的操作: |
| | | |
− | [[File:image095.jpg|300px]] | + | [[File:46.jpg|300px]] |
| | | |
| 为了简便起见,示意图仅仅画出了图灵机的读写头在第二个方格起步的情况。实际上,该图灵机有6种内部状态,这6种内部状态分成了2组,一组对应的是从左往右移动的,一组对应的是从右往左移动的。为了表示方便,我们把第一组状态表示成了一个红色的圆圈加上一个向上或向右或向下或向左的指针。同样把第二组表示成了绿色的圈加上不同的指针方向。在每种情况下,这些内部状态都起到了对所读方格的记忆的作用。如左图所示,图灵机头从第二个格出发读入一个方格1,内部状态由1转变为2,这个时候读入第二个方格0,因此这两步串起来就对应了10,它的内部状态转变为3,这个状态3相当于一个内部存储器记住了符号序列10,于是就可以根据CA的规则读入第三个格0,那么输出应该是1,它就把这个1输出出来,打印到第5个方格上。实际上,当前时刻,新的方格状态反映的是左边一个方格在下一个CA时刻对应的颜色(即第5个格子反映的应该是第4个格子的颜色),也就是说图灵机要把左边一个方格的信息暂放在这里。然后图灵机继续往右走。 | | 为了简便起见,示意图仅仅画出了图灵机的读写头在第二个方格起步的情况。实际上,该图灵机有6种内部状态,这6种内部状态分成了2组,一组对应的是从左往右移动的,一组对应的是从右往左移动的。为了表示方便,我们把第一组状态表示成了一个红色的圆圈加上一个向上或向右或向下或向左的指针。同样把第二组表示成了绿色的圈加上不同的指针方向。在每种情况下,这些内部状态都起到了对所读方格的记忆的作用。如左图所示,图灵机头从第二个格出发读入一个方格1,内部状态由1转变为2,这个时候读入第二个方格0,因此这两步串起来就对应了10,它的内部状态转变为3,这个状态3相当于一个内部存储器记住了符号序列10,于是就可以根据CA的规则读入第三个格0,那么输出应该是1,它就把这个1输出出来,打印到第5个方格上。实际上,当前时刻,新的方格状态反映的是左边一个方格在下一个CA时刻对应的颜色(即第5个格子反映的应该是第4个格子的颜色),也就是说图灵机要把左边一个方格的信息暂放在这里。然后图灵机继续往右走。 |
第338行: |
第338行: |
| 当从左往右扫描完整个一行之后,读写头开始反着走。这时候,读写头需要做的就是把当前方格的信息(无论是1还是0)都原封不动的拷贝到左边的一个方格去,因此,只要用2个内部状态就可以完成倒着扫描的任务(因为它需要记忆的就是上一时刻0或者1的颜色)。就这样,图灵机一遍一遍的扫描纸带就可以模拟CA的动作了。下图就是该图灵机模拟CA90的情况: | | 当从左往右扫描完整个一行之后,读写头开始反着走。这时候,读写头需要做的就是把当前方格的信息(无论是1还是0)都原封不动的拷贝到左边的一个方格去,因此,只要用2个内部状态就可以完成倒着扫描的任务(因为它需要记忆的就是上一时刻0或者1的颜色)。就这样,图灵机一遍一遍的扫描纸带就可以模拟CA的动作了。下图就是该图灵机模拟CA90的情况: |
| | | |
− | [[File:image098.gif|300px]] | + | [[File:47.gif|300px]] |
| | | |
| 其中灰色的区域表示图灵机头需要扫描的区域(即图灵机走到灰色区域的边缘就可以返回来),因此白色以外的方格是不需要图灵机扫描的。通过这个增加的颜色,就能让图灵机严格、有效地模拟细胞自动机的动作了。箭头所指的一行一行方格表示对应的该图灵机模拟的细胞自动机不同时刻的状态。我们可以把箭头所指的这些行专门挑出来,排在一起,得到: | | 其中灰色的区域表示图灵机头需要扫描的区域(即图灵机走到灰色区域的边缘就可以返回来),因此白色以外的方格是不需要图灵机扫描的。通过这个增加的颜色,就能让图灵机严格、有效地模拟细胞自动机的动作了。箭头所指的一行一行方格表示对应的该图灵机模拟的细胞自动机不同时刻的状态。我们可以把箭头所指的这些行专门挑出来,排在一起,得到: |
| | | |
− | [[File:image100.gif|500px]] | + | [[File:48.gif|500px]] |
| | | |
| 它和CA90的图形是一模一样的。 | | 它和CA90的图形是一模一样的。 |
第372行: |
第372行: |
| 换句话说,通用图灵机就像一条变色龙,它能够在不同的输入条件下变身成为任何一台其它的机器,如下图式: | | 换句话说,通用图灵机就像一条变色龙,它能够在不同的输入条件下变身成为任何一台其它的机器,如下图式: |
| | | |
− | [[File:image101.gif|600px]] | + | [[File:49.gif|600px]] |
| | | |
| 在细胞自动机这个大类里面,也存在着通用的细胞自动机,它可以模拟任何一个其它细胞自动机的行为,这是一个具有19种颜色、邻居半径为2的细胞自动机,通过改变它的初始条件,它就可以模拟任何一个细胞自动机。下图简示了这个通用细胞自动机的工作原理: | | 在细胞自动机这个大类里面,也存在着通用的细胞自动机,它可以模拟任何一个其它细胞自动机的行为,这是一个具有19种颜色、邻居半径为2的细胞自动机,通过改变它的初始条件,它就可以模拟任何一个细胞自动机。下图简示了这个通用细胞自动机的工作原理: |
| | | |
− | [[File:image103.jpg|300px]] | + | [[File:50.jpg|300px]] |
| | | |
| 在这个细胞自动机中,每18个方格代表要模拟的细胞自动机的一个方格。其中在一组18个方格中第三个方格对应的是被模拟的细胞自动机第一个方格的输入(先考虑最简单的仅有两种颜色,邻居半径为1的细胞自动机),如该图示意的输入是010。剩下的2、4~16为待模拟的细胞自动机的规则编码。我们知道,对于细胞自动机来说,我们可以给它进行编码。也就是将一组同类型的细胞自动机(例如颜色数相同,半径相同)按照一定的顺序从小到大排列出来,那么每个细胞自动机对应的序号就是它的编码。反过来,给定一个编码,我们就能得到一个特定规则的细胞自动机。 | | 在这个细胞自动机中,每18个方格代表要模拟的细胞自动机的一个方格。其中在一组18个方格中第三个方格对应的是被模拟的细胞自动机第一个方格的输入(先考虑最简单的仅有两种颜色,邻居半径为1的细胞自动机),如该图示意的输入是010。剩下的2、4~16为待模拟的细胞自动机的规则编码。我们知道,对于细胞自动机来说,我们可以给它进行编码。也就是将一组同类型的细胞自动机(例如颜色数相同,半径相同)按照一定的顺序从小到大排列出来,那么每个细胞自动机对应的序号就是它的编码。反过来,给定一个编码,我们就能得到一个特定规则的细胞自动机。 |
第382行: |
第382行: |
| 因此,如果把一个细胞自动机的编码输入给通用细胞自动机,通用细胞自动机就能计算每一步的状态。通用细胞自动机所要做的就是要根据二进制的编码一个一个计算出在不同的方格输入情况下对应的输出。然后将每个待模拟方格的值与邻近的方格相互作用,得到输出的方格值。这样在经过了多步运算之后(到达虚横线所示的位置)该通用细胞自动机完成一步对被模拟细胞自动机的模拟。下面是通用细胞自动机模拟90号细胞自动机的情况: | | 因此,如果把一个细胞自动机的编码输入给通用细胞自动机,通用细胞自动机就能计算每一步的状态。通用细胞自动机所要做的就是要根据二进制的编码一个一个计算出在不同的方格输入情况下对应的输出。然后将每个待模拟方格的值与邻近的方格相互作用,得到输出的方格值。这样在经过了多步运算之后(到达虚横线所示的位置)该通用细胞自动机完成一步对被模拟细胞自动机的模拟。下面是通用细胞自动机模拟90号细胞自动机的情况: |
| | | |
− | [[File:image105.gif|600px]] | + | [[File:51.gif|600px]] |
| | | |
| 对于更复杂的1维细胞自动机,只要扩大对应被模拟细胞自动机一组方格的个数并经过适当的转换就可以了。这样我们就能够用通用细胞自动机模拟任何一个1维的细胞自动机了。由于1维细胞自动机可以模拟任意一台图灵机,所以,该细胞自动机是通用的。 | | 对于更复杂的1维细胞自动机,只要扩大对应被模拟细胞自动机一组方格的个数并经过适当的转换就可以了。这样我们就能够用通用细胞自动机模拟任何一个1维的细胞自动机了。由于1维细胞自动机可以模拟任意一台图灵机,所以,该细胞自动机是通用的。 |
第390行: |
第390行: |
| 然而正如我们看到的,这个通用细胞自动机非常复杂,能不能找到一个具体的规则简单的通用细胞自动机呢?答案是肯定的,在NKS书中,这样一个目前为止最简单的支持通用计算的系统被找到了,这个发现者是Wolfram的助手Mathew Cook。他找到了一个拥有两个颜色,两个邻居的110号一维细胞自动机。下面展示了110细胞自动机在一个随机的初始条件下的行为: | | 然而正如我们看到的,这个通用细胞自动机非常复杂,能不能找到一个具体的规则简单的通用细胞自动机呢?答案是肯定的,在NKS书中,这样一个目前为止最简单的支持通用计算的系统被找到了,这个发现者是Wolfram的助手Mathew Cook。他找到了一个拥有两个颜色,两个邻居的110号一维细胞自动机。下面展示了110细胞自动机在一个随机的初始条件下的行为: |
| | | |
− | [[File:image107.jpg|300px]] | + | [[File:52.jpg|300px]] |
| | | |
| 下面列出它的规则: | | 下面列出它的规则: |
| | | |
− | [[File:image109.gif|500px]] | + | [[File:53.gif|500px]] |
| | | |
| 我们知道,根据Wolfram的分类,这是一个第四类(复杂类型)的细胞自动机。仔细观察我们会发现,在这个细胞自动机中有许多类似“粒子”的花纹在走来走去。它们可以起到在世界的不同区域传播信息的作用。正是因为这些粒子的作用,Mathew才找到了证明它是通用的的方法。具体的,Mathew开发了一个软件工具,专门检测CA110中的粒子传播和碰撞规律。然后,它将这些粒子传播和碰撞的规律与另外一类特定的计算系统:Tag系统进行比较,发现这些粒子可以模拟Tag系统。而因为我们已知Tag系统是可以模拟任意一台图灵机的,所以这也就证明了CA110的通用性。 | | 我们知道,根据Wolfram的分类,这是一个第四类(复杂类型)的细胞自动机。仔细观察我们会发现,在这个细胞自动机中有许多类似“粒子”的花纹在走来走去。它们可以起到在世界的不同区域传播信息的作用。正是因为这些粒子的作用,Mathew才找到了证明它是通用的的方法。具体的,Mathew开发了一个软件工具,专门检测CA110中的粒子传播和碰撞规律。然后,它将这些粒子传播和碰撞的规律与另外一类特定的计算系统:Tag系统进行比较,发现这些粒子可以模拟Tag系统。而因为我们已知Tag系统是可以模拟任意一台图灵机的,所以这也就证明了CA110的通用性。 |
第404行: |
第404行: |
| 有了110这个目前已知的最简单的通用机器之后,Wolfram甚至猜测任何一种复杂类型的细胞自动机都有可能是支持通用计算的。同时,他提出寻找最小通用机器的号召,甚至悬赏25000美元寻找能够证明一个2状态、3颜色的图灵机是通用图灵机的方法。如果能够证明此结论,那么它将是目前已知的最简单的通用图灵机。 | | 有了110这个目前已知的最简单的通用机器之后,Wolfram甚至猜测任何一种复杂类型的细胞自动机都有可能是支持通用计算的。同时,他提出寻找最小通用机器的号召,甚至悬赏25000美元寻找能够证明一个2状态、3颜色的图灵机是通用图灵机的方法。如果能够证明此结论,那么它将是目前已知的最简单的通用图灵机。 |
| | | |
− | [[File:image111.gif|500px]] | + | [[File:54.gif|500px]] |
| | | |
| === 计算等价性原理 === | | === 计算等价性原理 === |
第418行: |
第418行: |
| 计算等价原理也为复杂性阈值的说法提供了一定的解释,如下图: | | 计算等价原理也为复杂性阈值的说法提供了一定的解释,如下图: |
| | | |
− | [[File:image112.gif|600px]] | + | [[File:55.gif|600px]] |
| | | |
| 也就是说随着系统底层规则的复杂性增长,系统行为的复杂性增长到一定程度就不再增长了。这个阈值就是通用性。即当系统复杂到能够支持通用计算之后,它从原则上讲就与任何一个其它的支持通用计算的系统等价了。因此,继续增加规则的复杂性将是无济于事的。 | | 也就是说随着系统底层规则的复杂性增长,系统行为的复杂性增长到一定程度就不再增长了。这个阈值就是通用性。即当系统复杂到能够支持通用计算之后,它从原则上讲就与任何一个其它的支持通用计算的系统等价了。因此,继续增加规则的复杂性将是无济于事的。 |
第430行: |
第430行: |
| 正如Wolfram所说,计算通用性是一个非常重要的概念。然而,我认为除了计算等价性原理之外,通用计算还具有另外一个更加重要的意义,这就是“虚拟层级”的概念。 | | 正如Wolfram所说,计算通用性是一个非常重要的概念。然而,我认为除了计算等价性原理之外,通用计算还具有另外一个更加重要的意义,这就是“虚拟层级”的概念。 |
| | | |
− | [[File:image114.jpg|300px]] | + | [[File:56.jpg|300px]] |
| | | |
| 有一部类似《黑客帝国》的电影叫十三层楼。影片叙述了一个神奇的故事:一个研究虚拟世界的科学家突然被谋杀了。主人公为了调查这起凶杀案,不得不亲自走进那个科学家建立得惟妙惟肖的虚拟世界中寻找该科学家给主人公留下的一封信。信上说,他发现了一个天大的秘密:即科学家和主人公居住的世界居然也是被人虚拟出来的。主人公不相信这个事实,决定亲自验证一下。他一路开车来到了“世界的尽头”,终于看到了真相:他所生活的世界是被另一个更高层次的世界在计算机中模拟出来的。 | | 有一部类似《黑客帝国》的电影叫十三层楼。影片叙述了一个神奇的故事:一个研究虚拟世界的科学家突然被谋杀了。主人公为了调查这起凶杀案,不得不亲自走进那个科学家建立得惟妙惟肖的虚拟世界中寻找该科学家给主人公留下的一封信。信上说,他发现了一个天大的秘密:即科学家和主人公居住的世界居然也是被人虚拟出来的。主人公不相信这个事实,决定亲自验证一下。他一路开车来到了“世界的尽头”,终于看到了真相:他所生活的世界是被另一个更高层次的世界在计算机中模拟出来的。 |
第436行: |
第436行: |
| 如果我们用一个图形表示这个故事中提到的各种世界之间的逻辑关系的话,我们可以得到: | | 如果我们用一个图形表示这个故事中提到的各种世界之间的逻辑关系的话,我们可以得到: |
| | | |
− | [[File:vl.gif|600px]] | + | [[File:57.gif|600px]] |
| | | |
| 主人公所在的世界是中间一层次的世界,它是被更高一层次的造物主在一个被叫做“真实世界”的世界中创造出来的一个电脑程序。在这个虚拟世界中,那个被谋杀的科学家又创造了一个虚拟世界,我们暂且称它为虚拟世界之中的虚拟世界吧。那么这些不同的世界之间就形成了上图所示的逻辑关系。更深一层次的虚拟世界被包含在上一层次虚拟世界的模拟器之中。 | | 主人公所在的世界是中间一层次的世界,它是被更高一层次的造物主在一个被叫做“真实世界”的世界中创造出来的一个电脑程序。在这个虚拟世界中,那个被谋杀的科学家又创造了一个虚拟世界,我们暂且称它为虚拟世界之中的虚拟世界吧。那么这些不同的世界之间就形成了上图所示的逻辑关系。更深一层次的虚拟世界被包含在上一层次虚拟世界的模拟器之中。 |
第446行: |
第446行: |
| 如果你对这种机器模拟机器的现象很陌生。那么我们来看一个实际的例子:有一个特殊的软件就叫做虚拟机。它是Windows中的一个程序,运行它之后,你会在Windows之上得到一个完全独立的虚拟计算机,它有虚拟的硬件、虚拟的操作系统等等。这种虚拟机器对于程序员来说有很多的好处,例如他可以在虚拟机上试验一些软件而不破坏真实计算机。虚拟机也不会害怕感染病毒,因为即使病毒再厉害它也仅仅是破坏了那台虚拟的机器,而这个虚拟的机器对于真实的计算机来说不过是一些数据罢了。下图就是一个对该虚拟机软件的截图: | | 如果你对这种机器模拟机器的现象很陌生。那么我们来看一个实际的例子:有一个特殊的软件就叫做虚拟机。它是Windows中的一个程序,运行它之后,你会在Windows之上得到一个完全独立的虚拟计算机,它有虚拟的硬件、虚拟的操作系统等等。这种虚拟机器对于程序员来说有很多的好处,例如他可以在虚拟机上试验一些软件而不破坏真实计算机。虚拟机也不会害怕感染病毒,因为即使病毒再厉害它也仅仅是破坏了那台虚拟的机器,而这个虚拟的机器对于真实的计算机来说不过是一些数据罢了。下图就是一个对该虚拟机软件的截图: |
| | | |
− | [[File:image122.jpg|300px]] | + | [[File:58.jpg|300px]] |
| | | |
| 该虚拟机软件运行在一个真实的Windows XP上,而虚拟机上正在运行一个Windows XP操作系统。 | | 该虚拟机软件运行在一个真实的Windows XP上,而虚拟机上正在运行一个Windows XP操作系统。 |
第456行: |
第456行: |
| 然而,似乎有什么东西不对劲了。一个机器正在模拟它自己,这可能吗?我们可以想象一下,通用程序A正在读入A自己的编码,然后在内部模拟层次上创造了一个模拟的A自己。而这个模拟的A正在干什么呢?它正在读入自己的编码,而试图模拟自己。这就会造成一个无穷的怪圈。如果用图形表示的话,这就是一个无穷加深模拟层次的程序: | | 然而,似乎有什么东西不对劲了。一个机器正在模拟它自己,这可能吗?我们可以想象一下,通用程序A正在读入A自己的编码,然后在内部模拟层次上创造了一个模拟的A自己。而这个模拟的A正在干什么呢?它正在读入自己的编码,而试图模拟自己。这就会造成一个无穷的怪圈。如果用图形表示的话,这就是一个无穷加深模拟层次的程序: |
| | | |
− | [[File:image123.gif|300px]] | + | [[File:59.gif|300px]] |
| | | |
| 在理想情况下(提供给这台机器无穷大的空间和运行时间),那么我们的确会得到一个自我包含的无穷序列。它就像宇宙中的黑洞一样,会无穷延伸下去……。因此,我形象的把这样一种虚拟世界中的自指怪圈称为“计算宇宙中的黑洞”。 | | 在理想情况下(提供给这台机器无穷大的空间和运行时间),那么我们的确会得到一个自我包含的无穷序列。它就像宇宙中的黑洞一样,会无穷延伸下去……。因此,我形象的把这样一种虚拟世界中的自指怪圈称为“计算宇宙中的黑洞”。 |