更改
无编辑摘要
效
效
果了。
果了。
<gallery>
File:屏幕快照 2015-12-11 23.06.21.png|一个窗户和它的
八
个
邻
居,
分别
是
左
上、上、
右
上、
左
、
右
、
左
下、
右
下
</gallery>
具
体
邻
居的开灯
与否
如
何影响
该朋友是
否
开灯呢?这仍然需要我们为该朋友定
义规则
,
比如
“只有当
八
个
邻
居的灯都亮了我
才能
开灯”
,
这就是一
条规则
,
“只要我这个时刻亮
着
灯,
那么下一时刻
无论邻
居们什么
情况
我仍然亮灯”
也是一
条规则......
。
另外
,
还
有一个
初
始状态
的问题,
也就是在一开
始
第一秒内
哪
些窗户应该开灯,
那些应该关灯呢?我们
完全
可
以让窗户
后
面的每个朋友自己
随便决
定,也就是
初始
时刻窗户的开灯
状态
是
随
机的。
== 生命游戏 ==
好了,
上面
基本讲清楚
了大楼霓虹灯的
工作原理
了,
下面我们开
始
设
计
一个
切
实的动画。
按照刚才讲
到的聪明的霓虹灯动画设
计
方法,我们为每个窗户
后
面的朋友设
计规则
如下:
规则
1
:
如果我现在开着灯,
只要
八
个
邻
居中有
2
个
或者
3
个
人开灯了,
那么下一时刻
我
才
开灯,
否则邻
居亮灯
数超
过
3
个
或者少于
2
个,我都会把灯关
掉
;
规则
2
:
如果我现在关着灯,
那么当
邻
居中有
3
个人开灯,
那么下一个时刻我就把灯打
开。
比如
某
个窗户和他
邻
居窗户的开灯
状态
如下图示:
<gallery>
File:屏幕快照 2015-12-11 23.08.20.png|
</gallery>
其中中
心位置
的窗户为你
所
在的窗户(也就是图中的
4
号
)
,在这个时刻,你观察
旁边
的
八
个
邻
居中有
左
上、
右
上、
下三个窗户是亮灯的,
那么
按照规则
2
,
你在下一个时刻应该
把灯打开。
这样,
每个窗户
后
面的朋友都
按照
这
两条规则
行
事
,比
如
左
上方
1
号
这个
邻
居下
一个时刻是
否
应该开灯呢?那么我们就应该
考
察这个窗户的
8
个
邻
居,
以
1
号
窗户
为中
心
的
9
个方格如下图:
<gallery>
File:屏幕快照 2015-12-11 23.09.16.png|
</gallery>
那么
根据规则
1
,
下个时刻应该
继续
开着灯。
注
意,
这个图中的
右
下
部分标
有
1
、
2
、
3
、
4
的
4
个窗户
与
上图中
左
上
角标
有
1
、
2
、
3
、
4
的
4
个窗户的开灯
状态
是一样的。他们都是
同样的
4
个窗户。
这样,
当我们用同样的
规则考虑
大楼中
所
有的窗户的时候,
整体大楼的动画就可以
产生
了。
我们以一个
随
机的
初始状态
开
始
,
根据
那
两条规则
会
产生
什么样的大楼霓虹灯动画呢?
让我们把
镜
头
拉远
,
观察整个大楼:
哇
,
一个奇
妙
的动画
诞生
了。
下面是
两张
动画的
截
图
(由
50
行
50
列窗户构成的大楼)
:
<gallery>
File:屏幕快照 2015-12-11 23.10.13.png|
</gallery>
很怪
异
不是么?如果你看到
能够运
动的动画你会
感
觉
更
怪
异
,
整个大楼的窗户就像
沸腾
了。
实
际
上,
我们可以把整个大楼霓虹灯游戏
做
在
电脑
里,
让
电脑程序代替
那些居住在大楼
里,
不停机械的开灯关灯来
完
成你设
计
的
无聊
动画的可
怜
的朋友们。
你可以到以下
网址
观看
程序
:
gam
e
oflife/
。在
程序
中,
方格就
代
表窗户,
黄
色的格子就是亮灯的窗户,
黑色的就是
关灯的。
你会
发
现,整个
电脑屏幕
像
煮
开了一样,不停的有方格变成
黄
色,也有方格变成黑色,
而由这些亮方格构成的图案是
五花八门
,奇
形
怪
状
,看这是几个
截
图:
<gallery>
File:屏幕快照 2015-12-11 23.10.58.png|
</gallery>
这些图案有
风筝
、
蝴蝶
、
桃心
。如果观察动
态结
果,你会
发
现不可
思议
的
东西
还
更
多。
首
先,
你会
发
现一种
被
人们
称作
“
滑翔
机”
的
结
构,
他是由几个格子构成的一个动
态
的
结
构,
随
着时间的
推移
,他会
从屏幕
的一
段走
到
另
一
端
,下面是“
滑翔
机”行
走
的
原理
:
<gallery>
File:屏幕快照 2015-12-11 23.12.12.png|
</gallery>
1
2
3
4
5
在
5
步
内,
“
滑翔
机”
结
构
往右
下方行
走
了一个格子。你可以看到,在第
五步
内
黄
色亮
点组成的
结
构
与
第一
步
的
结
构
完全
一样,只不
过
位置完全
平移
了。
“
滑翔
机”会
偶尔
在
屏幕
的一个
角落
里闪现出来,
步态缓慢
的
移
动到
另
一
角
,
就好像一个
悠闲
的
散步者
,
在楼宇的窗
户间
移
动着
。
值
得
注
意
的是,你可
以
推敲
一下,
“
滑翔
机”
的每一
步移
动都
完全符
合我们上
面定
义
的
两条
动画
规则
。
我们的游戏还有其他的
壮
观
景象
:看
这
边
由多个亮窗子构成的
两
个“
村落
”
分处于
大楼
的
角落彼此
没有来
往
,
然而一个
“
村落
”
发射
了一个
“
滑翔
机”
对另
一个
“
村落
”
展
开了
进
攻
,而
另
一个
“
村落
”
则
由
于
这个
“
滑翔
机”
的到来
被
打
破
了
原
先的
寂静
开
始沸腾
起来。
偶
尔
你会看到一个
村落逐渐
变大、
分化
成
两
个
部分分别进
行
繁衍......
,
这里的
语言
不
能穷尽
这
个游戏的
所
有可
能情况
。
该游戏有一个好
听
的
别名
:
“
生命
游戏
”
,
这是由
计算
机
科
学
家
Joh
n
c
onw
ay
在上个
世纪
50
年代发
明的。为什么
叫做
“
生命
游戏”呢?
其实你不妨
大
胆运
用你
的想
象力
,
认
为这个
游戏
创造
了一个
“
活生生
的”
宇宙。
也就是
说
你和你的朋友们
遵循
简单的
规则产生
的集体楼
宇霓虹灯动画
创造
了一个宇宙,
这个宇宙就
镶嵌
在你们的楼宇的窗户之间。
该宇宙
按照
自己
的
规律
不断
演化
着。
我们可以把闪亮的格子看
作
是这个
虚拟
宇宙中的
生命
体,
这样,
它们不
停的
演化
、
繁殖
、
灭亡
。
== 从霓虹灯到方格宇宙 ==
这一
切又
意味
着
什
么呢?
从
霓
虹灯的
例
子
中我们
体
会
到了系
统
的
深层含
义
。什
么是
系
统
?由多个
部分
组成的整体就是一个系
统
,上
面
提
到的霓虹灯的
例
子就是一个系
统
,
它是由
多个小灯泡的组合
形
成的一个霓虹灯整体;
人类
社
会也是一个系
统
,
各
种
各
样的人构成了这
个系
统
;
“
生命
游戏”也
是一个系
统
,多个方格
格子组成了
它。
仅仅
了
解
系
统
的
部分
并不
能
了
解
整个系
统
。
这就好像你
能
很
清楚
的了
解
到每个单
独
灯泡的闪烁
状态
并不
能
帮助
你
理
解
多
个小灯泡构成的霓虹灯图案如
何
的
道
理
一样。
要想
知道
霓虹灯整体的图案,
你
必须
要“
跳
出
来”
,
也就是
站
在一个
更
高
的
角度
来观察这个霓虹灯的整体,
而
忽略
每一个
具
体灯泡的
细节
。
我们
常
说
的只
见树
木
不
见森林
正是
揭露
了观
察系
统
的时
候太
重视
局
部
而
忽略
整体
的这个
弊
端
。
我们学到的
科
学方法一
直
在
运
用
分
解
、还
原
的方法。
比如要
研究
一
台
电
视
机,
我们就需
要把这
台
电
视
机
拆
开,
看看每一个
部
件
的
工作
机
理
,这
显
然是有
效
的,
但
是正如你
仅仅
有一
大
堆
电
子
元件
而不会正
确
的组合它们就不
能
组
装
一
台
电
视
机一样,
单
纯
运
用
分
解
还
原
的
老
方
法是不
能够
理
解
系
统
。这
又
是为
什么
呢
?
原
因是
系
统
的
特性
一方
面体
现在组
成
部分
的
性质
上,
而
更
多的
则
取
决于
系
统各
个
部分
的
相互
之间的关系上。
正是由
于
系
统
中
各部分
的
相互
关
系的复杂
性
才
导致
了系
统
的复杂
性
和不可
理
解性
。观察下面的图:
<gallery>
File:屏幕快照 2015-12-11 23.13.33.png|
</gallery>
我们可以
认
为多个
蓝
色的点构成了一个系
统
,
而每个点之间的
连线
就是系
统
组成
部分
之
间的
联
系。
为什么系
统
很难
理
解
呢?
原
因是点之间的
连线
太复杂了。
假
如一个系
统
由
n
个点
组成,
那么
所
有可
能
的点之间的
连线
关系就有
2
(n-
1
)(
n-2)/2
种
情况
,比
如
n=
1
0
0
,那
么
连线
的可
能
性
就是
2
48
51
,不用
算
了
,这个
数
字已经
远远超
过了当
前
的宇宙
年
龄
。我们之
所
以
对
系
统
概念
感
到很难
理
解
正是由
于
系
统
组成
部分
之间关系的复杂
性
。
而当我们用还
原
的方法
研究
系
统
的时候,
也就是要
研究
系
统
中单个点的
性质
,
我们就
必须
切
断该点
与
其他点的
联
系,
这当
然方
便
我们
研究
该点,
但
是当
切
断它
与
其它点的
联
系的时候,
我们已经
严重
破
坏
了系
统
的
性
质
,
看不到了系
统各部分
之间的
联
系了。
在霓虹灯的
例
子中,
当我们把
目光
集中到单个灯泡
上的时候,
我们就是
采
用还
原分
解
的方法把
注
意
力
集中到了一个点,
而没有看到该灯泡
与
其
它灯泡之间的
联
系,
所
以我们不
能够清楚
整体霓虹灯的图案
与
动画。
好了,
到这里如果你已经
完全理
解
或者
隐约
理
解
了上面
所讲
的系
统
概念
,
那么你已经
取
得了一个
重
大的
进步
。
下面我们
再
来看看系
统
的
另外
一个
性质
。
我们都
知道
计算
机是由
硬件
和
软件
组成的。
什么是
硬件
什么
又
是
软件
呢?
运
用我们
刚刚
熟悉
的系
统
的
概念
不难回答,
广
义
上来
讲
构成系
统
的
各
个单点就是
硬件
,
而点
与
点之间的
连线
关系以
及
这些关系的变
化
就是
软件
。比
如一
台
计算
机系
统
的
硬件
部分
是由
CPU
、内
存
、
硬盘
、
显
示
器
、
键盘
鼠
标
等等
部
分
组成,
那么
软件
就是
运
用这些
硬件
的一种组合方法。
比如
Wo
r
d
程序
这个
软件
就是把
键盘
输入
的
信息
经过
CPU
和内
存
的
处理显
示到
显
示
器
上,这整个过
程
就是一个
软件
。当然我们
这里的
叙述忽略
了很多
技
术
细节
,而
仅仅
在
概念
形
式
上
进
行
讨
论
。我
们
知道硬件
构成了
软件
的
基
础
,
显
然你没有
硬盘
、内
存
、
CPU
这些
硬件
是不可
能
执
行
任
何
软件
程序
的,
但
反过来,
软件
又
是
独立
于
硬件
的
某
种
特
有的
东西
。因
此
你在一
台
PIII
的机
器
上
运
行
Wo
r
d
程序
和在
另
一
台
PII
上
运
行该
程序
一样(
除
了
速
度
不同)
。
知道
了
硬件
与
软件
之间的关系有什么用
处
呢?它可以
帮助
我们
解
答关
于生命
、
智
能
、
社
会
等等
难以
理
解
的复杂
事
物
。
比如上面
介绍
的“
生命
游戏”
就是一个很好的
例
子。
因为整个
游戏的过
程
就是一个
软件
,这
个
软件
无论运
行在
何
种
硬件介质
中都是
无
关
紧
要的。
所
以我们
用大楼窗户
的开灯
与
关
灯可以
完
成“
生命
游戏”
,而
运
用
电
脑屏幕
中的
闪烁的方格
也可以来
完
成该游戏。
显
然,
我们现实的
生命
过
程
要
远远
比
生命
游戏复杂得多,
然而它也很有可
能
是
一种
软件
的过
程
,而
与运
行该
软件
的
硬件
没有关系。
同样的,
人类的
智
能
也是一种复杂的
软
件
过
程
,
用人类的头
脑能够完
成的
思
维智
能
过
程
也同样
能
在
另
一种
介质
:
计算
机中实现。
这
也正是“人
工
智
能
”的
理论
来
源
。
进
一
步
,
我们可以大
胆
设想:
把整个宇宙都
理
解
为一种
运算
的
软件
过
程
,
这样,
完
成该
运算
过
程
的
硬件介质
是
无
关
紧
要的,
而关
键
是
软件
过
程
。在“
生命
游戏”
中,
我们
正是
创造
了一种宇宙
演化
的过
程
。
在游戏中,
不同的方格可以
理
解
为
抽
象
的宇宙
空
间,
而
程序运
行的
嘀嗒声
正是这个
虚拟
宇宙中的时间。在“
生命
游戏”中,我们
规
定了每个格子的
运
行
规则
而得出了一个
虚拟
的宇宙,如果我
们设
计
其他不同的
规则
会得到什么样的宇宙呢?
进
一
步
的,在大楼霓虹灯的比
喻
中,如果我
们
允许
每个窗户里面灯的颜色有多种,每个窗户的
邻
居窗户不
仅仅
是
8
个,而可以是
24
个
或者
48
个
能演化
出什么样的宇宙呢?
更进
一
步
设想,如果我们
运
行的游戏是在一个三
维空
间中
或者四
维空
间中
又
是什么样的呢?
所
有这一系列的问题几
乎
可以
写
成一
本
教
科
书
了,当
然这
本
教
科
书
中并不
教
我们
牛顿
定
律
,而是一
套
关
于
我们自己的
虚拟
宇宙的
物
理
学
知识
。我
们为什么一定要学
习
这个宇宙的
科
学?难
道
我们不
能
自己
作
上
帝
创造
一个
全
新
的宇宙么?
嗯
,我们就把我们的宇宙
叫做
“方格宇宙”吧,下面就来看看这个“方格宇宙”有什么
性质
。
== 细胞自动机 ==
下面的
篇幅
我们
将
具
体
讨
论
我们的“方格宇宙”的
细节性质
和
规律
。实
际
上,
“方格宇
宙”有一个学
名叫作
“
细胞
自动机”
或者
“
元胞
自动机”,
英文
名
字是“
Cellular Automata
”,
下面的
讨
论
中,“方格宇宙”和“
细胞
自动机”这
两
个
名
字我
将混
合
使
用,你要
知道
这
两
个
指同一个
东西
就可以了。
一
般
的,一个
细胞
自动机是由这几个要
素
构成的:
细胞
、
细胞空
间、
邻
居、
规则
。下面
分别
叙述
。<br />
(
1
)
细胞<br />
在
细胞
自动机中,一个小格子就是一个
细胞
。在大楼霓虹灯动画中的窗户就是一个
细胞
。
细胞
具
有
状态
,比如大楼霓虹灯中每个窗户的开灯还是关灯就是
细胞
的
状态
。我们把每一个
细胞
的
所
有可
能状态
的集合
叫做
细胞
的
状态
集。在大楼霓虹灯中每个窗户有开灯关灯
两
个
状
态
,我们可以用集合的
符号
表示为
{
开灯,关灯
}
,因
此
这是一个
两状态
的集合。
更
一
般
的,
一个
细胞
可
能
有
n
种
状态
。
每一个
状态
都可以给他
赋予
不同的
含义
,比如在“
生命
游戏”中,我们可以用
状态
集
{0
,
1}
表示一个
细胞
的
状态
。也可以用
{
生
,
死
}
表示一个
细胞
(
生命
体)的
状态
,当然也可以用
{
开
灯,关灯
}
表示
运
行在大楼霓虹灯上的“
生命
游戏”这个
软件
。
对于
有
n
个
状态
的
细胞
自动
机,我们不妨把这
n
种
状态
想
象
成
n
种不同的颜色,这
毫
不
影响
我们
对
n
状态
细胞
自动机的
理
解
。仍然用大楼霓虹灯
做
比
喻
,如果每个窗户
后
面的灯是有颜色的,比如有
红
、
蓝
两
种颜
色,那么每个窗户就有
{
红
色灯,
蓝
色灯,关灯
}
三种
状态
。当然我们也可以把关灯
理
解
为黑
颜色灯的
状态
,
所
以这和用
{
红
灯,
蓝
灯,黑灯
}
的表示是一样的。<br />
(
2
)
细胞空
间<br />
简单
地
说
细胞
自动机中
细胞
分
布
的
空
间就是
细胞空
间。在“
生命
游戏”中,
细胞空
间就
是一个二
维
的大方
块
,并且
所
有的
细胞
都是以
水
平
和
竖直
两
个方
向
整齐排列的。关
于
细胞空
间有以下几个
概念
:<br />
a
、
维
度
:
也就是
细胞空
间的
维
度
。
常见
的
细胞空
间都是一
维
或者
二
维
的,一
维
的
细胞空
间就是在
一
条
直线
上的方格,如下图:
<gallery>
File:屏幕快照 2015-12-11 23.16.31.png|
</gallery>
二
维
的
细胞空
间就是一个
平
面,我们
前
面
介绍
的“
生命
游戏”就是一个二
维
的
细胞空
间。
三
维
的
细胞空
间是一个
立
体的
立
方体,下面给出了示意:
<gallery>
File:屏幕快照 2015-12-11 23.17.26.png|
</gallery>
当然我们还可以给出
4
维细胞空
间、
5
维细胞空
间
等等
,
但
那已经
远远超
出了图
形
表
达
的
能力
极限
了。<br />
B
、
细胞空
间的几
何
划
分
:<br />
细胞
的
形状
以
及
细胞
之间的排列方
式
。我
们
常见
的是
横
平
竖直
的
四
方格排列方
式
,当
然
还可以有其他的几
何
划
分
,如下面的几个
例
子:
<gallery>
File:屏幕快照 2015-12-11 23.19.14.png|
</gallery>
这些几
何
划
分分别
是三
角
构
形
,
四
方构
形
和
四
方
网
格还有
六
边形网
格。
一
般
的,
只要
某
种图
形能够形
成
对
一个
平
面
区域
的
覆盖
就可以
认
为是一种
细胞空
间的几
何
划
分
。
==== 边界处理方法 ====
细胞空
间
边
界
处
细胞
的
处理
方法。
无论
是
哪
一种
细胞空
间,
为了
能
在
计算
机上
进
行
模
拟
它都
必须
是一个有
限
的
区域
,因
此
我们
必须
考虑
在
边
界
上的
细胞空
间
处理
方法。
比如在
“
生
命
游戏”
中,
它的
空
间是一个方
块
,
那么在方
块
四
个
边
上的
细胞
应该如
何处理
呢?要
知道
左
边
的方格没有
更左边
的
邻
居了。
一种很自然的想法就是把
最
右边边
界
处
的
细胞
当
作
是这个
细
胞
的
左邻
居,
而
右边边
界
处
的那个
细胞
的
右邻
居是该
细胞
。
也就是
说
细胞空
间的
左右两端被
连接
在了一起,就好像是一个
圆柱
面。同样的方法也可以应用到上下
两
个
边
界
上。
在
细胞
自动机的实
际
应用中,
还可以用反
射
型
、
固
定
值
型
的方法
处理边
界
这里不
再
多
说
了。
=== 邻居 ===
细胞
自动机的
运
行
规律
不
仅仅取
决于某
一个
细胞
自
身
的
状态
,
而且也
取
决于
它
周围
的多
个
细胞
的
状态
,这些
细胞
就是该
细胞
的
邻
居。我们可以
采
用多种方法定
义
一个
细胞
的
邻
居。
在方格
细胞空
间中,
常
用的
邻
居类
型包括
下面几种:
<gallery>
File:屏幕快照 2015-12-11 23.21.38.png|
</gallery>
这其中,
黑色的方格表示当
前
的
细胞
,
灰色的表示它的
邻
居。
上面的三种类
型
都是人们
常
用的类
型
。在
实
际
应用中,
还有很多
邻
居的类
型
。
另外
,
邻
居的类
型
也
跟细胞空
间的几
何
划
分
和
维
度
有关系。
在一
维
的
细胞
自动机中,
我们
常常
用一个
细胞
在一个方
向相
邻
的
细胞
个
数
定为该
细胞
自动机的
邻
居
半径
,
比如
邻
居
半径
为
1
的一
维细
胞
自动机的
邻
居
区域
如下图示