Python实现生命游戏

导语

T_T跑模型的时候无聊翻到的一篇文章。

里面介绍的生命游戏似乎很有意思的样子。

于是打算用Python简单复现一下~~~

顺便过来水篇文章?

Let's Go~

开发工具

Python版本:3.6.4

相关模块:

matplotlib模块;

numpy模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

主要思路

游戏简介:

想象一下,一望无际的太平洋被分成了许许多多方格子。每个格子里正好能放下一个“细胞”。这个细胞不能运动,它可以是死的,也可以是活的。但它的状态,是由它周围8个细胞的死活决定的。

决定的规则为:

(1)“人口过少”:任何活细胞如果活邻居少于2个,则死掉;

(2)“正常”:任何活细胞如果活邻居为2个或者3个,则继续活;

(3)“人口过多”:任何活细胞如果活邻居大于3个,则死掉;

(4)“繁殖”:任何死细胞如果活邻居正好是3个,则活过来。

题外话:

上面这几条规则大概是元胞自动机中最出名的一套规则了。“麦克阿瑟天才奖”最年轻的得主Stephen Wolfram正是元胞自动机的忠实粉丝。其发现的“Rule 30”规则组,可以从一个活细胞出发,生成一套极其复杂的无尽花纹。后来Mathematica里使用的随机数生成器,就是基于“Rule 30”的。

250次迭代后的“Rule 30”:

据说结果神似织锦芋螺的花纹。

Wolfram认为这正是我们宇宙的本质;我们的世界就是计算,就是一套简单的规则生成的复杂现象。其关于元胞自动机的研究获得了超过一万次引用。

随手附上xkcd的一幅漫画:

生命游戏具体实现过程详见相关文件中的源代码。

使用演示

在cmd窗口运行GameOfLife.py文件即可。

随机填充的效果视频演示:

更多

为什么人类有目的,机器就没有呢?你觉得区别在哪里呢?

Wolfram的回答(引自果壳网):

这是个好问题。水有向下流的“目的”,你可以为物理世界赋予各种各样的“目的”,但所谓的目的其实有两种,一种是遵循物理机制自然会产生的结果,另一种则是努力要去实现的目标。自然界的计算能力完全可以和人脑像匹敌,但自然界的目的全都是前者,而如果我们希望得到类人智能,必须要有类人的目的。比如湍流,或者木星大气表面的漩涡,它在做各种各样繁复的计算,恐怕比我们的大脑更加复杂——至少是运算量更大,但它看起来并未获得我们所说的智能,因为我们唯一知道的智能,就是人类智能。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180420G029PC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券