更改

跳到导航 跳到搜索
添加261字节 、 2016年7月15日 (五) 18:45
无编辑摘要
第1行: 第1行:  +
{{#seo:
 +
|keywords=元胞自动机, 计算理论
 +
|description=元胞自动机, 计算理论
 +
}}
 +
 +
* 作者:[[Jake]]
 +
 +
 
== 大楼霓虹灯动画 ==
 
== 大楼霓虹灯动画 ==
−
:你看过夜晚都市街头的霓虹灯么?它们是多么变幻莫测、色彩缤纷!然而你想没想过,这些霓虹灯的动画图案都是由很多单个的灯泡不停闪烁构成的,你不觉得奇怪么?让我们定睛观察其中的一个灯泡,它只会机械的闪烁变换几种不同的颜色,没有什么稀奇的;然而当你观察由这些小灯泡构成的集体的时候,霓虹灯整体的动画图案就会像变魔术一样突然表现出来。这意味着什么?不忙回答这个问题,让我们先来玩一个类似霓虹灯的游戏。<br />
+
你看过夜晚都市街头的霓虹灯么?它们是多么变幻莫测、色彩缤纷!然而你想没想过,这些霓虹灯的动画图案都是由很多单个的灯泡不停闪烁构成的,你不觉得奇怪么?让我们定睛观察其中的一个灯泡,它只会机械的闪烁变换几种不同的颜色,没有什么稀奇的;然而当你观察由这些小灯泡构成的集体的时候,霓虹灯整体的动画图案就会像变魔术一样突然表现出来。这意味着什么?不忙回答这个问题,让我们先来玩一个类似霓虹灯的游戏。
−
:设想你和你的朋友居住在一幢大楼里面,大楼的一个侧面有很多的窗户,他们整齐的排列成一个大方阵,就像下面的图一样:
+
 
−
[[File:屏幕快照 2015-12-11 16.01.02.png]]<br />
+
设想你和你的朋友居住在一幢大楼里面,大楼的一个侧面有很多的窗户,他们整齐的排列成一个大方阵,就像下面的图一样:
 +
 
 +
[[File:屏幕快照 2015-12-11 16.01.02.png]]
    
这里黑色表示的是窗户,灰色是窗户之间的隔断。为什么窗户是黑色的?太难看了吧?哦,这是晚上,而且屋子里都没有开灯。没关系,反正大楼里面住的都是自己的朋友,你可以让一些人把灯打开,下面的图表示的是有些屋子亮灯的图案(好看多了):
 
这里黑色表示的是窗户,灰色是窗户之间的隔断。为什么窗户是黑色的?太难看了吧?哦,这是晚上,而且屋子里都没有开灯。没关系,反正大楼里面住的都是自己的朋友,你可以让一些人把灯打开,下面的图表示的是有些屋子亮灯的图案(好看多了):
−
<gallery>
+
 
−
File:屏幕快照 2015-12-11 16.01.08.png|
+
[[File:屏幕快照 2015-12-11 16.01.08.png|屏幕快照 2015-12-11 16.01.08.png]]
−
</gallery><br />
      
聪明的人已经想到了,其实这就是一个简单的霓虹灯!我们可以让不同的窗户开灯来组成不同的图案。比如要想用这种方法组合出一个“十”字图案,我们可以让第7列的窗户都开灯,并让第13行的窗户也都开灯
 
聪明的人已经想到了,其实这就是一个简单的霓虹灯!我们可以让不同的窗户开灯来组成不同的图案。比如要想用这种方法组合出一个“十”字图案,我们可以让第7列的窗户都开灯,并让第13行的窗户也都开灯
−
<gallery>
  −
屏幕快照 2015-12-11 16.04.02.png|
  −
</gallery><br />
     −
:如果是复杂点的图案呢?我们仍然可以如法炮制,不过麻烦了点,因为你需要告诉这幢大楼里的每一个同学是开灯还是关灯。<br />
+
[[屏幕快照 2015-12-11 16.04.02.png|屏幕快照 2015-12-11 16.04.02.png]]
−
:如果要让霓虹灯图案动起来呢?比如每1秒钟就变换一下图案,那么你就需要给每个朋友编制一些指令,告诉他们在什么时刻是开灯还是关灯。我们不妨用0表示关灯,用1表示开灯,那么比如指令011011001指派给了住在第三行第4列的朋友,那么他应该在第1秒内关灯,在第二秒、第三秒都开灯,第四秒关...。汗,这恐怕太麻烦了,你算算,如果要展示一个10分钟的动画(600秒)那就需要为每个窗户后面的朋友编制长度600的指令。何况很可能这里有100扇窗户呢!<br />
+
 
 +
如果是复杂点的图案呢?我们仍然可以如法炮制,不过麻烦了点,因为你需要告诉这幢大楼里的每一个同学是开灯还是关灯。
 +
 
 +
如果要让霓虹灯图案动起来呢?比如每1秒钟就变换一下图案,那么你就需要给每个朋友编制一些指令,告诉他们在什么时刻是开灯还是关灯。我们不妨用0表示关灯,用1表示开灯,那么比如指令011011001指派给了住在第三行第4列的朋友,那么他应该在第1秒内关灯,在第二秒、第三秒都开灯,第四秒关...。汗,这恐怕太麻烦了,你算算,如果要展示一个10分钟的动画(600秒)那就需要为每个窗户后面的朋友编制长度600的指令。何况很可能这里有100扇窗户呢!
 +
 
 +
如果你够聪明,可以换一种方法来制作你的大楼霓虹灯动画。让居住在大楼里面的每个朋友密切观察他的邻居,根据上一秒内他邻居的开灯状况决定下一秒内该朋友的动作。显然每个窗户后的朋友都会有上、下、左、右、左上、右上、左下、右下八个邻居(如下图),那么每个人的开灯状态就会被他的邻居们以及他自己的上一时刻的开灯状态所影响,并且翻过来这位朋友是否开灯又会影响他的邻居们,整个大楼的各个窗户就会不停的闪烁,这也能达到动画的效果了。
 +
 
 +
[[File:屏幕快照 2015-12-11 23.06.21.png|一个窗户和它的八个邻居,分别是左上、上、右上、左、右、左下、右下]]
 +
 
 +
具体邻居的开灯与否如何影响该朋友是否开灯呢?这仍然需要我们为该朋友定义规则,比如“只有当八个邻居的灯都亮了我才能开灯”,这就是一条规则,“只要我这个时刻亮着灯,那么下一时刻无论邻居们什么情况我仍然亮灯”也是一条规则......另外,还有一个初始状态的问题,也就是在一开始第一秒内哪些窗户应该开灯,那些应该关灯呢?我们完全可以让窗户后面的每个朋友自己随便决定,也就是初始时刻窗户的开灯状态是随机的。
   −
:如果你够聪明,可以换一种方法来制作你的大楼霓虹灯动画。让居住在大楼里面的每个朋友密切观察他的邻居,根据上一秒内他邻居的开灯状况决定下一秒内该朋友的动作。显然每个窗户后的朋友都会有上、下、左、右、左上、右上、左下、右下八个邻居(如下图),那么每个人的开灯状态就会被他的邻居们以及他自己的上一时刻的开灯状态所影响,并且翻过来这位朋友是否开灯又会影响他的邻居们,整个大楼的各个窗户就会不停的闪烁,这也能达到动画的效果了。
  −
<gallery>
  −
File:屏幕快照 2015-12-11 23.06.21.png|一个窗户和它的八个邻居,分别是左上、上、右上、左、右、左下、右下
  −
</gallery><br />
  −
:具体邻居的开灯与否如何影响该朋友是否开灯呢?这仍然需要我们为该朋友定义规则,比如“只有当八个邻居的灯都亮了我才能开灯”,这就是一条规则,“只要我这个时刻亮着灯,那么下一时刻无论邻居们什么情况我仍然亮灯”也是一
  −
条规则......另外,还有一个初始状态的问题,也就是在一开始第一秒内哪些窗户应该开灯,那些应该关灯呢?我们
  −
完全可以让窗户后面的每个朋友自己随便决定,也就是初始时刻窗户的开灯状态是随机的。
   
== 生命游戏 ==
 
== 生命游戏 ==
−
:好了,上面基本讲清楚了大楼霓虹灯的工作原理了,下面我们开始设计一个切实的动画。按照刚才讲到的聪明的霓虹灯动画设计方法,我们为每个窗户后面的朋友设计规则如下:<br />
+
 
−
# 规则1.如果我现在开着灯,只要八个邻居中有2个或者3个人开灯了,那么下一时刻我才开灯,否则邻居亮灯数超过3个或者少于2个,我都会把灯关掉;<br />
+
好了,上面基本讲清楚了大楼霓虹灯的工作原理了,下面我们开始设计一个切实的动画。按照刚才讲到的聪明的霓虹灯动画设计方法,我们为每个窗户后面的朋友设计规则如下:
 +
 
 +
# 规则1.如果我现在开着灯,只要八个邻居中有2个或者3个人开灯了,那么下一时刻我才开灯,否则邻居亮灯数超过3个或者少于2个,我都会把灯关掉;
    
# 规则2:如果我现在关着灯,那么当邻居中有3个人开灯,那么下一个时刻我就把灯打开。比如某个窗户和他邻居窗户的开灯状态如下图示:
 
# 规则2:如果我现在关着灯,那么当邻居中有3个人开灯,那么下一个时刻我就把灯打开。比如某个窗户和他邻居窗户的开灯状态如下图示:
−
<gallery>
  −
File:屏幕快照 2015-12-11 23.08.20.png|
  −
</gallery><br />
     −
:其中中心位置的窗户为你所在的窗户(也就是图中的4号),在这个时刻,你观察旁边的八个邻居中有左上、右上、下三个窗户是亮灯的,那么按照规则2,你在下一个时刻应该把灯打开。这样,每个窗户后面的朋友都按照这两条规则
+
[[File:屏幕快照 2015-12-11 23.08.20.png|屏幕快照 2015-12-11 23.08.20.png]]
−
行事,比如左上方1号这个邻居下一个时刻是否应该开灯呢?那么我们就应该考察这个窗户的8个邻居,以1号窗户为中
+
 
−
心的9个方格如下图:
+
其中中心位置的窗户为你所在的窗户(也就是图中的4号),在这个时刻,你观察旁边的八个邻居中有左上、右上、下三个窗户是亮灯的,那么按照规则2,你在下一个时刻应该把灯打开。这样,每个窗户后面的朋友都按照这两条规则行事,比如左上方1号这个邻居下一个时刻是否应该开灯呢?那么我们就应该考察这个窗户的8个邻居,以1号窗户为中心的9个方格如下图:
−
<gallery>
+
 
−
File:屏幕快照 2015-12-11 23.09.16.png|
+
[[File:屏幕快照 2015-12-11 23.09.16.png|屏幕快照 2015-12-11 23.09.16.png]]
−
</gallery><br />
      
:那么根据规则1,下个时刻应该继续开着灯。注意,这个图中的右下部分标有1、2、3、4的4个窗户与上图中左上角标有1、2、3、4的4个窗户的开灯状态是一样的。他们都是同样的4个窗户。这样,当我们用同样的规则考虑大楼中所有的窗户的时候,整体大楼的动画就可以产生了。我们以一个随机的初始状态开始,根据那两条规则会产生什么样的大楼霓虹灯动画呢?让我们把镜头拉远,观察整个大楼:哇,一个奇妙的动画诞生了。下面是两张动画的截图(由50行50列窗户构成的大楼):
 
:那么根据规则1,下个时刻应该继续开着灯。注意,这个图中的右下部分标有1、2、3、4的4个窗户与上图中左上角标有1、2、3、4的4个窗户的开灯状态是一样的。他们都是同样的4个窗户。这样,当我们用同样的规则考虑大楼中所有的窗户的时候,整体大楼的动画就可以产生了。我们以一个随机的初始状态开始,根据那两条规则会产生什么样的大楼霓虹灯动画呢?让我们把镜头拉远,观察整个大楼:哇,一个奇妙的动画诞生了。下面是两张动画的截图(由50行50列窗户构成的大楼):
−
<gallery>
  −
File:屏幕快照 2015-12-11 23.10.13.png|
  −
</gallery><br />
     −
:很怪异不是么?如果你看到能够运动的动画你会感觉更怪异,整个大楼的窗户就像沸腾了。实际上,我们可以把整个大楼霓虹灯游戏做在电脑里,让电脑程序代替那些居住在大楼里,不停机械的开灯关灯来完成你设计的无聊动画的可怜
+
[[File:屏幕快照 2015-12-11 23.10.13.png|屏幕快照 2015-12-11 23.10.13.png]]
−
的朋友们。你可以到以下网址观看程序:gameoflife/。在程序中,方格就代表窗户,黄色的格子就是亮灯的窗户,黑色的就是关灯的。你会发现,整个电脑屏幕像煮开了一样,不停的有方格变成黄色,也有方格变成黑色,而由这些亮方格构成的图案是五花八门,奇形怪状,看这是几个截图:
+
 
−
<gallery>
+
很怪异不是么?如果你看到能够运动的动画你会感觉更怪异,整个大楼的窗户就像沸腾了。实际上,我们可以把整个大楼霓虹灯游戏做在电脑里,让电脑程序代替那些居住在大楼里,不停机械的开灯关灯来完成你设计的无聊动画的可怜的朋友们。你可以到以下网址观看程序:gameoflife/。在程序中,方格就代表窗户,黄色的格子就是亮灯的窗户,黑色的就是关灯的。你会发现,整个电脑屏幕像煮开了一样,不停的有方格变成黄色,也有方格变成黑色,而由这些亮方格构成的图案是五花八门,奇形怪状,看这是几个截图:
−
File:屏幕快照 2015-12-11 23.10.58.png|
+
 
−
</gallery><br />
+
[[File:屏幕快照 2015-12-11 23.10.58.png|屏幕快照 2015-12-11 23.10.58.png]]
 +
 
 +
这些图案有风筝、蝴蝶、桃心。如果观察动态结果,你会发现不可思议的东西还更多。首先,你会发现一种被人们称作“滑翔机”的结构,他是由几个格子构成的一个动态的结构,随着时间的推移,他会从屏幕的一段走到另一端,下面是“滑翔机”行走的原理:
 +
 
 +
[[File:屏幕快照 2015-12-11 23.12.12.png|屏幕快照 2015-12-11 23.12.12.png]]
   −
:这些图案有风筝、蝴蝶、桃心。如果观察动态结果,你会发现不可思议的东西还更多。首先,你会发现一种被人们称作“滑翔机”的结构,他是由几个格子构成的一个动态的结构,随着时间的推移,他会从屏幕的一段走到另一端,下面是“滑翔机”行走的原理:
+
12345在5步内,“滑翔机”结构往右下方行走了一个格子。你可以看到,在第五步内黄色亮点组成的结构与第一步的结构完全一样,只不过位置完全平移了。“滑翔机”会偶尔在屏幕的一个角落里闪现出来,步态缓慢的移动到另一角,就好像一个悠闲的散步者,在楼宇的窗户间移动着。值得注意的是,你可以推敲一下,“滑翔机”的每一步移动都完全符合我们上面定义的两条动画规则。<br />
−
<gallery>
+
:我们的游戏还有其他的壮观景象:看这边由多个亮窗子构成的两个“村落”分处于大楼的角落彼此没有来往,然而一个“村落”发射了一个“滑翔机”对另一个“村落”展开了进攻,而另一个“村落”则由于这个“滑翔机”的到来被打破了原先的寂静开始沸腾起来。偶尔你会看到一个村落逐渐变大、分化成两个部分分别进行繁衍......,这里的语言不能穷尽这个游戏的所有可能情况。该游戏有一个好听的别名:“生命游戏”,这是由计算机科学家Johnconway在上个世纪50年代发明的。为什么叫做“生命游戏”呢?其实你不妨大胆运用你的想象力,认为这个游戏创造了一个“活生生的”宇宙。也就是说你和你的朋友们遵循简单的规则产生的集体楼宇霓虹灯动画创造了一个宇宙,这个宇宙就镶嵌在你们的楼宇的窗户之间。该宇宙按照自己的规律不断演化着。我们可以把闪亮的格子看作是这个虚拟宇宙中的生命体,这样,它们不停的演化、繁殖、灭亡。
−
File:屏幕快照 2015-12-11 23.12.12.png|
  −
</gallery><br />
     −
:12345在5步内,“滑翔机”结构往右下方行走了一个格子。你可以看到,在第五步内黄色亮点组成的结构与第一步的结构完全一样,只不过位置完全平移了。“滑翔机”会偶尔在屏幕的一个角落里闪现出来,步态缓慢的移动到另一角,就好像一个悠闲的散步者,在楼宇的窗户间移动着。值得注意的是,你可以推敲一下,“滑翔机”的每一步移动都完全符合我们上面定义的两条动画规则。<br />
  −
:我们的游戏还有其他的壮观景象:看这边由多个亮窗子构成的两个“村落”分处于大楼的角落彼此没有来往,然而一个“村落”发射了一个“滑翔机”对另一个“村落”展开了进攻,而另一个“村落”则由于这个“滑翔机”的到来被打破了原先的
  −
寂静开始沸腾起来。偶尔你会看到一个村落逐渐变大、分化成两个部分分别进行繁衍......,这里的语言不能穷尽这
  −
个游戏的所有可能情况。该游戏有一个好听的别名:“生命游戏”,这是由计算机科学家Johnconway在上个世纪50年代发明的。为什么叫做“生命游戏”呢?其实你不妨大胆运用你的想象力,认为这个游戏创造了一个“活生生的”宇宙。也就是说你和你的朋友们遵循简单的规则产生的集体楼宇霓虹灯动画创造了一个宇宙,这个宇宙就镶嵌在你们的楼宇的窗户之间。该宇宙按照自己的规律不断演化着。我们可以把闪亮的格子看作是这个虚拟宇宙中的生命体,这样,它们不
  −
停的演化、繁殖、灭亡。
   
== 从霓虹灯到方格宇宙 ==
 
== 从霓虹灯到方格宇宙 ==
−
:这一切又意味着什么呢?从霓虹灯的例子中我们体会到了系
+
 
−
统
+
:这一切又意味着什么呢?从霓虹灯的例子中我们体会到了系统的深层含义。什么是
−
的
  −
深层含
  −
义
  −
。什
  −
么是
   
系
 
系
 
统
 
统
第7,432行: 第7,427行:  
发
 
发
 
现呢!
 
现呢!
 +
 +
 +
[[category:旧网站]]
 +
[[category:旧网站-虚拟世界]]
 +
[[category:科普文章]]
 +
[[category:Jake的文章]]

导航菜单