生命游戏 the Game of Life

生命游戏 the Game of Life

首页模拟经营生命模拟器中文版更新时间:2024-04-22

引言

群居性昆虫是一个生命,鱼群、鸟群是一个生命,社会、城市是一个有机体,人类的语言是活的,人类的集体行为也是活的。这些复杂系统是如何设计出来的?世界上最著名的游戏之一,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

关于“墨子沙龙”

墨子沙龙是由中国科学技术大学上海研究院主办、上海市浦东新区科学技术协会及中国科大新创校友基金会协办的公益性大型科普论坛。沙龙的科普对象为对科学有浓厚兴趣、热爱科普的普通民众,力图打造具有中学生学力便可以了解当下全球最尖端科学资讯的科普讲坛。

查看全文
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved