1.4 生命游戏
第一个例子是一个非常著名的游戏,叫作“生命游戏”。这个游戏并不是人和计算机玩的,而是计算机自己跟自己玩的。这个游戏的开发目的既不是为了供人们娱乐,也不是为了模拟现实中的实际场景,而是为了展示简单的互动规则就足以产生丰富多彩的复杂现象。
这是一个由大量黑白方格组成的世界,每一个方格都可以看成一个主体,每一个主体都可以跟它周围的8个邻居发生相互作用。我们不妨做一个比喻,假设黑色方格表示这个生命体是活的,白色方格表示这个生命体是死的,而且这些生命体都不能移动,只能在自己的方格里待着,如图1-3所示。
图1-3 生命游戏
生命游戏的规则如下。
- 出生:如果某方格为白,周围的8个邻居中有3个方格为黑,则该方格变黑。
- 过分拥挤而死亡:如果某方格为黑,周围的8个邻居中黑色方格的数量超过或等于3个,则该方格变白。
- 过分孤独而死亡:如果某方格为黑,周围的8个邻居中黑色方格的数量少于2个,则该方格变白。
- 其他情况颜色不变。
根据上述简单规则,生命游戏就可以产生非常复杂的现象。下面我们通过模拟程序展示用NetLogo做出来的生命游戏。
打开NetLogo软件,在“文件”菜单下单击“模型库”,如图1-4所示。
图1-4 NetLogo软件界面
模型库中就有我们要展示的生命游戏,如图1-5所示,这是一个绿红相间的方格世界。
图1-5 NetLogo自带的生命游戏
开始的时候,只要单击“setup
”按钮,就会用一些随机的红色方格和绿色方格来进行填充。
接下来,单击“go-forever
”按钮,整个世界就会按照前述简单规则运转。我们很快就会看到一个类似于沸腾的屏幕,上面闪烁着各种各样的花纹。
开始时你可能觉得这些花纹比较随机,但是随着游戏演化,你会发现,慢慢地大量随机的花纹消失了,出现了一些看起来比较对称的花纹,有时候甚至会产生一些令人非常惊叹的结构,如图1-6所示。
图1-6 运行中的生命游戏
这就是所谓的生命游戏世界。别小看这样一个生命游戏世界,数学家们花费了大量精力就证明了一件事:这个生命游戏世界理论上可以模拟任意的计算过程。也就是说,你在计算机中可以计算的任何程序和内容,都可以让生命游戏来完成计算。所以生命游戏的发明者约翰·康威曾经说过这样一段豪言壮语:“如果给我充足的时间和空间,我将能够用生命游戏创造出任何你能想到的复杂事物,包括能够撰写博士论文的智慧生命。”