群居性昆虫是一个生命,鱼群、鸟群是一个生命,社会、城市是一个有机体,人类的措辞是活的,人类的集体行为也是活的。这些繁芜系统是如何设计出来的?天下上最著名的游戏之一,Game of Life生命游戏,为这些最神秘的问题提出了可能的阐明——大概再繁芜的生命,最初也不过是几条最大略的规则。本文从Game of Life的缘起提及,阐明了它这几十年给予数学、打算机、哲学的启示,末了把它作为Python编程的练习。
“匈牙利唯一的天才”——冯诺依曼
我们的故事从上世纪40年代提及。彼时,第一台电子打算机的涌现昭示了打算机领域风起云涌的时期,同时也开启了以信息掌握技能为核心的人类第三次科技革命。冯诺依曼(John von Neumann)则是这段历史中绕不开的开山鼻祖。

能够作为电子打算机理论和博弈论的奠基者,用“天才”这个词再去形容冯诺依曼显得苍白。他是一个精力智力都充足的命运宠儿。在他博士论文答辩时,导师们唯一的问题是:你本日的西装真挺括,是哪个裁缝做的?他喜好在吵杂的环境里事情,在办公室里放进行曲会吵到隔壁的爱因斯坦。普林斯顿研究拜占庭历史的教授说,冯诺依曼在拜占庭史方面比自己更精通。
冯诺依曼以什么著名?一个显示屏可能都放不下(+68More)(来源:维基百科)
人工智能之父——艾伦·图灵
说到当代打算机科学的起源,除了冯·诺依曼,不得不提的是图灵(Alan Turing). 如果说冯·诺依曼是电子打算机的完全呈现者,那图灵则是“证明”了打算机本身。他给出了“用打算机仿照人类的思维过程”这个思路,而图灵测试则是对付”打算机是否能展现等同于人的智力“的验证标准。图灵机(Turing Machine)[1]给出了打算机能力的边界,而算法关心的是如何去逼近打算机的能力边界。图灵并没有刻板印象中的四体不勤——他不仅智力轶群,还是天赋异禀的长跑运动员。图灵5公里能跑进16分钟,马拉松最好成绩2小时46分。冯诺依曼和图灵的第一次在时空中的纠缠可以追溯到1931年,当图灵还在剑桥大学国王学院读本科的时候。他参加了某一个大奖赛,而奖品则是一本冯诺依曼的《量子力学的数学根本》。图灵还评价到:“很故意思,虽然有些运用数学家以为不好读,但我以为还挺随意马虎的。”
人是机器,还是机器是人
随着人工智能技能的发展,人与机器的边界越来越模糊。可以说,人工智能和对付生命边界的探索,从有了打算机这个观点开始就存在。冯诺依曼曾给生命下了一个定义。他认为,生命是一个符合图灵机的定义,同时可以复制自身的有机体。他的朋友,同样是位家境殷实的高富帅,乌拉姆(Ulam)以为这个问题非常故意思,提出了“细胞自动机(cellular automata,CA)”的观点,用程序来仿照成长机制[2]。任何程序或多或少都可以被当作一套规则;这套规则明确了每一步程序的行动。就像一个经典的程序员笑话:女朋友让程序员男友“放工后,买一袋苹果回家。如果看到卖西瓜的,就买一个”[3]。细胞自动机便是一个特定类别的大略程序。它的规则制订在二维的格子(cell)平面上,每一个格子有两个状态黑/白;每一步指令都会明确地给出每一个格子如何按照它的八个隔壁的黑白而变色的规则。比如下图便是一个有十个步骤的细胞自动机[4]。
后来冯·诺依曼和乌拉姆又各忙各的了,等到二十多年后,生平都在游戏的数学家约翰·康威(John Conway),以一种更有趣的形式发扬了“细胞自动机”,并阐释了冯·诺依曼的定义是精确的。这个模型便是风靡环球的“Game of Life”, 生命游戏。
数学魔术师♂——约翰-康威
看《科学美国人》《环球科学》的朋友们看到这个名字一定会以为很亲切,很多人由于康威的“生命游戏”与打算结下了不解之缘。数学家团体对他有这样的评价,“他是一位多才多艺的数学家,他在构建和处理‘非主流’代数构造方面,以完备出乎猜想的办法阐明了各种问题。他在有限群理论、结子理论、数理逻辑和博弈论方面做出了精彩的贡献。”不幸的是,在2020年4月11日,他因传染COVID-19与世长辞。而他创造的细胞生物就一贯留在了二维方格的天下里。
John Conway
生命游戏 the Game of Life
生命游戏算得上是现在盛行的真实天下仿照游戏的鼻祖(也在一定程度上启示了分形数学)。它用特殊大略的规则产生出带有真实感的繁芜性。
生命游戏开始于一张二维的方格纸。初始细胞(有机体)每个霸占一个方格。它们各自有活着或去世去两种状态(live/dead). 每一个细胞是去世是活只取决于周围的环境资源,也便是环绕着它的八个格子。根据规则,就像真实的细胞成长情形,在二维上的这些方格细胞如果太挤或者太稀疏就会去世去;在最得当的群体密度时,它们成长地最好[5]。
康威想要通过这样一个有趣,过程不受外界掌握的游戏,弄明白怎么样的构造可以保持稳定不消亡。生命游戏是对付由有机体构成的社会起伏的简化,就像现在全员在磋商的“穿越周期性”。经由寻思熟虑后,康威非常节制地仅给出了几条最根本的游戏设定[6]。别的,就看每一次游戏开始后的“造化”。
By Saisundar.s - Own work
生命游戏是一代打算机的影象,就像21世纪的超级打算机的回顾一定有机器学习。生命游戏是天下上被玩得最多的电脑游戏之一。上世纪70年代正是微型打算机发达发展的时候,不过当时的打算机还是不善于图像处理和储存,于是生命游戏席卷了环球的打算机。在美国由于在事情韶光偷偷盯着生命游戏发呆的总丢失高达数百万美金。
不难想象为什么这个游戏那么受人欢迎,正犹如变幻莫测的恒星轨迹让那么多《三体》书里书外的人触目惊心:
1.如此大略的初始条件却可以涌现惊人的繁芜行为;
2.达到平衡的构造中有些非常有趣,有些乃至呈现周期性[7];
3.对付打算机专业的人来说,生命游戏的代价在于它是图灵完备(Turing complete)的,也便是说,任何在打算机上可以由算法做到的,都可以在生命游戏里实现。
史蒂芬·霍金的《大设计》
为什么是我们?宇宙的存在故意义吗?聪慧的起源为何?“大设计”曾是一个神学观点,指的是宇宙规律的背后有造物主式的安排。霍金的《大设计》在谈论了这些问题用了生命游戏的模型,“像生命游戏这样规则大略的东西能够创造出高度繁芜的特色,聪慧乃至可能从中出身。而我们的脑中就有数千亿的细胞”。科学界的Google创始人Wolfram更因此为宇宙的实质便是打算,是一套大略的规则天生的繁芜征象。更故意义的是,就算理解了统统规则,我们也无法提前得知这些规则可以蜕变成若何的系统。这对我们有关键的启示,纵然在完备绝对论的天下里,我们依然拥有自由意志。
credit to:Mike Zeng
代码实现
生命游戏的思想上和图像上都有深入浅出特性,我们可以把它当作很好的编程入门问题。像Google这样的企业也会把它作为试题。我们接下来将如何用Python实现这个游戏。⌨️
下图是每一个细胞的死活规则。
入门级:
引入Convolution和Kernel:
SciPy中有一个对付诸如人脸识别等图像处理很主要的功能Convolution(卷积)[8]. Convolution浸染在一个细胞和它的邻居上。
这九个方格的状态(location/weight)用kernel(核)来表示。
比如这个kernel表示了在0的周围8个附近的权重都是1。
在生命游戏中,neighborhood指的是细胞周围相邻的8个格子(这种neighborhood也称为Moore Neighborhood)
可以用以下代码替代上述代码:
“滑翔机”Glider
很多人把滑翔机这个图案作为生命游戏的标示。滑翔机是一种处在稳定的振荡状态,同时会移动的构造。它在1970年被英国数学家Richard Guy创造。与英特网和Unix同期间的出身使得Glider在一代黑客心里有着重要的地位。到现在它还会被当做这个团体的图腾。
我们得到如下的图像,这便是一个glider:
By Xerol at en.wikipedia
Father, give us courage to change what must be altered;
serenity to accept what cannot be helped;
and the insight to know the one from the other.
惠我以安宁,忍所当忍;
赐我以勇毅,为所当为;
更赐我以聪慧,将两者区分。
雷茵霍尔德·尼布尔(Reinhold Niebuhr)
THE SUN NEWS SYNDICATION
注释
[1]图灵机(Turing Machine)
图灵机是一个真实打算机的模型。图灵机可以完成所有打算机可以完成的任务。
[2]细胞自动机(CA)是一种用来思考繁芜系统的极简化打算模型。人类对付聪慧生物的好奇与仿真的激情亲切源源不断地推动着科学技能的发展,不论是细胞自动机,还是飞机,人工智能,都是从真实的繁芜系统中抽象出最核心的要素,再通过一定的逻辑重构。
[3]程序员买了一个苹果回家——由于路上碰着了一个卖西瓜的。
[4]这个CA的详细规则是:第一步,第一行中间的格子是玄色,除此之外均为白色。在紧接着的步骤中,与上一步骤或者任一步骤玄色格子相邻的格子成玄色。
[5]游戏设定
1.避免爆发式的总数上涨
2.存在小的初始状态以达到混沌的、不可预测的结果
3.须要以能在细胞自动机环境里仿照出冯诺依曼的自复制构造(Von Neumann’s Universal Constructor)
4.详细的演化规则在知足1-3的情形下越大略越好
[6]详细程序(演化规则)
1.“总数过少”:任何活细胞如果活邻居少于2个,则去世掉。
2.“正常”:任何活细胞如果活邻居为2个或3个,则保持活的状态。
3.“总数过多”:任何活细胞如果活邻居大于3个,则去世掉。
4.“繁殖”:任何去世细胞如果活邻居恰好是3个,则活过来。
[7]有三种稳定态:静止态(Still Life),震荡态(Oscillator)和以Glider为代表的移动震荡态
[8] 比如有名的卷积神经网络(Convolutional Neural Network, CNN)的核心观点便是它的人工神经元可以相应一部分覆盖范围内的周围单元(neighborhood),对付大型图像处理有出色表现。
参考文献和衍生阅读
1.这个游戏没有玩家,为何在学术圈火了半个世纪?韶光: 2017年01月06日 | 作者: 徐寒易 | 来源: 环球科学
https://huanqiukexue.com/a/qianyan/xinxi__nenyuan/2017/0106/26910.html
2.Introduction to the Theory of Computation 3rd - Michael Sipser
3.https://web.stanford.edu/class/sts145/Library/life.pdf
4. https://commons.wikimedia.org/w/index.php?curid=73877448
5.https://www.csail.mit.edu/event/von-neumann-and-origin-life
Von Neumann and the Origin of Life SPEAKER Hyman Hartman
6.斯蒂芬·沃尔夫勒姆(Wolfram):宇宙的实质是打算
https://m.guokr.com/article/126181
7. Wikipedia:词条-Game of Life; Glider
8. Turing and von Neumann, Professor Raymond Flood
9. A New Kind of Science - Stephen Wolfram
9 ¾: 老胡发言录
10. The Lives of a Cell - Lewis Thomas,李绍明翻译
11. 这些是史上最故意思的GoL Patterns?:
https://conwaylife.com/forums/viewtopic.php?t=1067
代码参考:
https://github.com/madison-python/think-complexity/blob/master/game-of-life.ipynb
https://github.com/madison-python/think-complexity/blob/master/thinkcomplexity/game_of_life.py
https://github.com/madison-python/think-complexity/blob/master/game-of-life.ipynb
https://leetcode-cn.com/problems/game-of-life/
By Raphaelaugusto - Ownwork, CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=52336285
By Lucas Vieira - Own work,CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=101736
关于“墨子沙龙”
墨子沙龙是由中国科学技能大学上海研究院主理、上海市浦东新区科学技能协会及中国科大新创校友基金会协办的***性大型科普论坛。沙龙的科普工具为对科学有浓厚兴趣、热爱科普的普通民众,力争打造具有中学生学力便可以理解当下环球最尖端科学资讯的科普讲坛。