导语
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的回答(引自果壳网):
这是个好问题。水有向下流的“目的”,你可以为物理世界赋予各种各样的“目的”,但所谓的目的其实有两种,一种是遵循物理机制自然会产生的结果,另一种则是努力要去实现的目标。自然界的计算能力完全可以和人脑像匹敌,但自然界的目的全都是前者,而如果我们希望得到类人智能,必须要有类人的目的。比如湍流,或者木星大气表面的漩涡,它在做各种各样繁复的计算,恐怕比我们的大脑更加复杂——至少是运算量更大,但它看起来并未获得我们所说的智能,因为我们唯一知道的智能,就是人类智能。
领取专属 10元无门槛券
私享最新 技术干货