码迷,mamicode.com
首页 > 其他好文 > 详细

细胞自动机【转】

时间:2014-06-12 11:05:33      阅读:3852      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   ext   com   width   

 

另类科学的核心技术是细胞自动机。

乌尔姆(Stanislaw M. Ulam)和冯·诺伊曼(John von Neumann)为了研究机器人自我复制的可能性,在上个世纪50年代提出一种叫做细胞自动机(Cellular Automaton)的离散型动力系统(Discrete Dynamical Systems)。细胞自动机是研究复杂系统行为的理论框架之一,也是人工智能在这个领域的雏形之一。

在一个平面上(这里以平面为例,但不限于二维平面)纵横相交的多条直线构成了许多网格,每一个网格被看作一个细胞。这些细胞可以具有一些特征状态,譬如被染成不同颜色。在每个特定的时刻每个细胞只能处于一种特征状态。随着计算机迭代计算过程的进行,全体细胞各自根据周围细胞的状态,按照相同的规则同时自动改变它本身的状态,这就构成了一台细胞自动机。

决定一台细胞自动机的先决条件有四个:1、决定细胞活动的空间维度,譬如一维的、二维的或三维的,等等;2、定义细胞可能具有的状态;3、定义细胞改变状态的规则;4、设定细胞自动机中各细胞的初始状态。

1982年Wolfram发表了第一篇关于细胞自动机的学术论文,由此开始了对细胞自动机的研究。Wolfram着重研究空间维度为二维的细胞自动机。细胞可能具有的状态只有两种,用颜色表示成黑色或白色。全体细胞中的每一个只根据上一迭代过程中与该细胞紧相邻的三个细胞的状态来决定自己下一步的状态,所有细胞在根据上一步结果确定自己在这一步中将有的状态后,全体细胞同时改变自己的状态到新状态。其结果和细胞自动机的初始条件很有关系。被这样设定的细胞自动机叫做一维细胞自动机。

科学的道路来不得半点虚伪和骄傲。这没错。但是,如果你的切入点选对了,也许你在一条新的路上可以成为先行者,而并不一定要先把自己的知识的背囊装的满满的之后才去开始攀登科学高峰的步伐。Wolfram就是一个好例子。虽然他确是很聪明,但按照他现在发表的成果看来,他15岁就能发表论文,不完全因为他那时候有多么渊博的学问,更有可能是因为他选了一个很好的切入点。

下面为你设计实现了一台最简单的细胞自动机,请你亲手来做一下。这是学习的最好方式,同时也可以体验到,有时候进入研究最前沿也不是那么高不可攀的事情。我这里说的是进入。跨出这一步后,到你做出成果来,就会有无数的书本等着你去翻开,有无数的实验等着你去完成,有一段很长的距离要走。但是你已经入门了。你享受门外汉不可能体验的乐趣,你在科学的某一条小路上攀登着并沿途拿自己的幼稚和汗水去交换路边的小石、头顶的野花。不知不觉间,你就登上了一座小山包,背上的背包已经有点重了。俯视走过的路,自豪与快乐溢于心间。而前面总有更美的景色在召唤你前行……

下面的例子不需要使用计算机,我们用手画图来完成这个简单的细胞自动机。请你亲手来画一下:

想象有一根无限长的线,线上布满可以变色的点,每个点的颜色或黑或白。初始条件可以简单设为除一个黑点外其余的点全白,或者设为黑白相间。我们按照黑、白相间的简单起始规则,画出下图中的‘起始图’部分。

 

起始    ○ ● ○ ● ○ ● ○ ● ○ ● 

 

然后对所有的点施行应用某种规则,比如最近邻规则:对线上任意一点,如果在该点最右侧及最左侧的点均为黑色,而该点本身为白色,则把该点变成黑点。否则该点就保留或改变成白点。

按照上述规定反复迭代,就得到了下面的迭代图的全体。

我们从‘起始图’开始来推导出‘第一步迭代图’,请拿一张纸一支笔自己动手画一画:‘起始图’中的第一个点是白点,按照迭代规定,这个点在‘第一步迭代图’中保留原来的白色;‘起始图’中的第二个点是黑点,根据规定它将在‘第一步迭代图’中改变成白色;‘起始图’中的第三个点的最右侧及最左侧的点均为黑色,而该点本身为白色,故把该点变成黑点画在‘第一步迭代图’中……,依此把‘起始图’中所有的点检查一遍,并记住所有点在‘第一步迭代图’中的新颜色,然后就按照得到的全体点的结果,画出‘第一步迭代图’。

 

起始               ○ ● ○ ● ○ ● ○ ● ○ ●

第一步迭代      ○ ○ ● ○ ● ○ ● ○ ● ○

 

现在针对‘第一步迭代图’,按照同样的方法画出‘第二步迭代图’,‘第三步迭代图’,……,等等,如下图所示:

起始             ○ ● ○ ● ○ ● ○ ● ○ ●

第一步迭代    ○ ○ ● ○ ● ○ ● ○ ● ○

第二步迭代    ○ ○ ○ ● ○ ● ○ ● ○ ● 

第三步迭代    ○ ○ ○ ○ ● ○ ● ○ ● ○ 

 

由图中可以看到,每迭代一次,白点就向右側移动一位。这样就得到了一个点的动态移动的模式。

怎么样?简单吧?你刚刚做了一台细胞自动机哪!

 

请你在这里暂停阅读并想一想在计算机上实现这个简单的一维细胞自动机的情景。能替它找到一些相关的应用吗?

 

我找了几个如下:

如果在计算机上实现上述的简单一维细胞自动机,并在一根直线上画出每次的迭代过程,就可以看到一个白点向右侧运动的动态过程。如果把直线画成螺旋状,这个点就会沿螺旋运动。如果画成环状,点就沿着环跑个不停。

如果只把图中改变颜色的点画出来,并且把点画成宇宙飞船的形状而不是圆点的形状,直线画成某种空间轨迹。那么在程序运行时,就得到了一艘宇宙飞船沿轨迹飞行的动态画面。如果画两艘敌对的宇宙飞船并设计它们的相撞的轨迹,就可以得到一个简单的星球大战的游戏。

怎么样?挺好玩的吧?您再想点别的花样?

下面是一个从《另类科学》中取来的、更具体的、也更复杂一点的例子。如果您有耐心又有兴趣的话,通过它可以更深入了解Wolfram的工作的基本原理。如果没有兴趣,就跳过去不读它即可。作者的饶舌是自己兴之所至的塗鸦,读者大可不必跟着给弄得晕头转向。当然如果我的作品有这么大的魔力让你跟着我的思想转悠,我会很有成就感的。谢谢了。

考虑并排的三个格子,它们分别被赋予黑白两种状态。考虑各种可能的排列方式,我们不难得到共有8种组合状态。这8种组合状态的每一种都各自决定下一个细胞是黑色或白色,这样算下来的排列总共有256种可能性。因此在Wolfram考虑的细胞自动机种类中,细胞改变状态的规则有256种。Wolfram把这256种规则一一编号。譬如下面的图就代表110号规则:

bubuko.com,布布扣

图9-4 Wolfram的细胞自动机110号规则

 

用文字来叙述就是:当某细胞的上一行相邻三个细胞为全黑、全白或者左侧一个细胞为黑时,该细胞为白色,否则为黑色。设定一个简单的细胞初始状态,譬如在第一行只有一个黑色细胞,根据规则110,细胞自动机就可以自动把其余的细胞变成黑色或保留白色。下图就是根据规则110运行了前20步的情况,在这里似乎看不出什么有趣的东西。但运行到几百步后,就出现了一些有趣的特征,一些结构开始既不是周期性地也不是完全随机地出现在画面上。下图是按规则110运行到700步的情况。

 

bubuko.com,布布扣           bubuko.com,布布扣 

图9-5 110号规则运行了前20步的情况                  图9-6 110号规则运行了前700步的情况

 

从上面的两个例子中我们可以看到,在这样的模式中,确实没有用到经典的数学公式。

Wolfram用类似的方法,得到了除量子力学外经典物理学中的所有公式。

也就是说,不用数学公式也可以借助计算机来描述自然界。不用数学公式也可以借助计算机来研究宇宙。

1984年Wolfram把256种规则分成了四类:第一类只生成简单重复的图案,比如全黑、全白、或黑白相间如国际象棋棋盘等等;第二类规则产生一些自相似的分形图案,形成稳定的嵌套结构;第三类规则产生的图案具有明显的随机性;第四类规则产生复杂的图案,但不简单重复。

这些图案既不是规则的也不是完全随机的。它们呈现出某种有序性,但却不能被预言。

Wolfram关注较多的是第四类规则。第110号规则及30号规则是第四类规则中的精粹。通过它们可以从简单的初始条件产生出复杂的图形。这是Wolfram对细胞自动机理论所做出的巨大贡献。

Wolfram所用的软件计算本身并不复杂,复杂的是怎样处理输出结果。有了适当的软件后,就可以开展对细胞自动机的研究。

 

Cited from:http://blog.china.com.cn/home.php?mod=space&uid=1235952&do=blog&id=232854

 

Note:cellular automaton 通过对问题进行编码使其更加直观,可以表示传统方法难以表达的特征。 比如展示同源 nucleotide sequence 之间的差别,可以将一维的序列转化为二维的数组,然后将数组以图像的形式反映出来,于是将序列的特征反映到二维图像上,可以用直观的方式发现其特征。

 

细胞自动机【转】,布布扣,bubuko.com

细胞自动机【转】

标签:style   blog   http   ext   com   width   

原文地址:http://www.cnblogs.com/easoncheng/p/3782460.html

(0)
(5)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!