大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
引言
群居性昆虫是一个生命,鱼群、鸟群是一个生命,社会、城市是一个有机体,人类的语言是活的,人类的集体行为也是活的。这些复杂系统是如何设计出来的?世界上最著名的游戏之一,Game of Life生命游戏,为这些最神秘的问题提出了可能的解释——也许再复杂的生命,最初也不过是几条最简单的规则。本文从Game of Life的缘起说起,解释了它这几十年给予数学、计算机、哲学的启发,最后把它作为Python编程的练习。
“匈牙利唯一的天才”——冯诺依曼
我们的故事从上世纪40年代说起。彼时,第一台电子计算机的出现昭示了计算机领域风起云涌的时代,同时也开启了以信息控制技术为核心的人类第三次科技革命。冯诺依曼(John von Neumann)则是这段历史中绕不开的开山鼻祖。
能够作为电子计算机理论和博弈论的奠基者,用“天才”这个词再去形容冯诺依曼显得苍白。他是一个精力智力都充沛的命运宠儿。在他博士论文答辩时,导师们唯一的问题是:你今天的西装真挺括,是哪个裁缝做的?他喜欢在吵杂的环境里工作,在办公室里放进行曲会吵到隔壁的爱因斯坦。普林斯顿研究拜占庭历史的教授说,冯诺依曼在拜占庭史方面比自己更精通。
冯诺依曼以什么著名?一个显示屏可能都放不下(+68More)(来源:维基百科)
人是机器,还是机器是人
随着人工智能技术的发展,人与机器的边界越来越模糊。可以说,人工智能和对于生命边界的探索,从有了计算机这个概念开始就存在。冯诺依曼曾给生命下了一个定义。他认为,生命是一个符合图灵机(Turing Machine)的定义,同时可以复制自身的有机体[1]。他的朋友,同样是位家境殷实的高富帅,乌拉姆(Ulam)觉得这个问题非常有意思,提出了“细胞自动机(cellular automata)”的概念,用程序来模拟生长机制[2]。后来他们又各忙各的了,等到二十多年后,一生都在游戏的数学家约翰-康威(John Conway),以一种更有趣的形式发扬了“细胞自动机”,并阐释了冯诺依曼的定义是正确的。这个模型就是风靡全球的“Game of Life”, 生命游戏。
数学魔术师?♂——约翰-康威
看《科学美国人》《环球科学》的朋友们看到这个名字一定会觉得很亲切,很多人因为康威的“生命游戏”与计算结下了不解之缘。数学家团体对他有这样的评价,“他是一位多才多艺的数学家,他在构建和处理‘非主流’代数结构方面,以完全出乎意料的方式阐明了各种问题。他在有限群理论、结子理论、数理逻辑和博弈论方面做出了杰出的贡献。”不幸的是,在2020年4月11日,他因感染COVID-19与世长辞。而他创造的细胞生物就一直留在了二维方格的世界里。
John Conway
生命游戏 the Game of Life
生命游戏算得上是现在流行的真实世界模拟游戏的鼻祖(也在一定程度上启发了分形数学)。它用特别简单的规则产生出带有真实感的复杂性。康威想要通过这样一个有趣,过程不受外界控制的游戏,弄明白怎么样的结构可以保持稳定不消亡。生命游戏是对于由有机体构成的社会起伏的简化。经过深思熟虑后,康威非常节制地仅给出了四条最基础的游戏设定,以保证有机体的总数变化是变幻莫测的。其余,就看每一次游戏开始后的“造化”。
By Saisundar.s – Own work
生命游戏开始于一张二维的方格纸。初始细胞(有机体)每个占据一个方格。它们各自有活着或死去两种状态(live/dead). 每一个细胞是死是活只取决于周围的环境资源,也就是围绕着它的八个格子。根据规则,就像真实的细胞生长情况,在二维上的这些方格细胞如果太挤或者太稀疏就会死去,在最合适的群体密度时,它们生长得最好[3]。
生命游戏是一代计算机的记忆,就像21世纪的超级计算机的回忆一定有深度学习。生命游戏是世界上被玩得最多的电脑游戏之一。上世纪70年代正是微型计算机蓬勃发展的时候,不过当时的计算机还是不擅长图像处理和储存,于是生命游戏席卷了全球的计算机。在美国因为在工作时间偷偷盯着生命游戏发呆的总损失高达数百万美金。
不难想象为什么这个游戏那么受人欢迎,正如同变幻莫测的恒星轨迹让那么多《三体》书里书外的人惊心动魄:
1. 如此简单的初始条件却可以出现惊人的复杂行为;
2. 达到平衡的结构中有些非常有趣,有些甚至呈现周期性[4];
3. 对于计算机专业的人来说,生命游戏的价值在于它是图灵完备(Turing complete)的,也就是说,任何在计算机上可以由算法做到的,都可以在生命游戏里实现。
史蒂芬·霍金的《大设计》
为什么是我们?宇宙的存在有意义吗?智慧的起源为何?“大设计”曾是一个神学概念,指的是宇宙规律的背后有造物主式的安排。霍金的《大设计》在讨论了这些问题用了生命游戏的模型,“像生命游戏这样规则简单的东西能够创造出高度复杂的特征,智慧甚至可能从中诞生。而我们的脑中就有数千亿的细胞”。科学界的Google创始人Wolfram更是认为宇宙的本质就是计算,是一套简单的规则生成的复杂现象。更有意义的是,就算了解了一切规则,我们也无法提前得知这些规则可以演化成怎样的系统。这对我们有关键的启发,即使在完全绝对论的世界里,我们依然拥有自由意志。
credit to:Mike Zeng
代码实现?
生命游戏的思想上和图像上都有深入浅出特性,我们可以把它当作很好的编程入门问题。像Google这样的企业也会把它作为试题。我们接下来将如何用Python实现这个游戏。⌨️
下图是每一个细胞的生死规则。
入门级:
引入Convolution和Kernel:
SciPy中有一个对于诸如人脸识别等图像处理很重要的功能Convolution(卷积)[5]. Convolution作用在一个细胞和它的邻居上。
这九个方格的状态(location/weight)用kernel(核)来表示。
比如这个kernel表示了在0的周围8个临近的权重都是1。
在生命游戏中,neighborhood指的是细胞周围相邻的8个格子(这种neighborhood也称为Moore Neighborhood)
可以用以下代码替代上述代码:
“滑翔机”Glider?
很多人把滑翔机这个图案作为生命游戏的标示。滑翔机是一种处在稳定的振荡状态,同时会移动的结构。它在1970年被英国数学家Richard Guy发现。与英特网和Unix同时期的诞生使得他在一代黑客心里有着重要的地位。到现在它还会被当做这个团体的图腾。
我们得到如下的图像,这就是一个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]细胞自动机(cellular automata)
细胞自动机(CA)是一种用来思考复杂系统的极简化计算模型。人类对于智慧生物的好奇与仿真的热情源源不断地推动着科学技术的发展,不论是细胞自动机,还是飞机,人工智能,都是从真实的复杂系统中抽象出最核心的要素,再通过一定的逻辑重构。
[3]具体规则
1 “总数过少”:任何活细胞如果活邻居少于2个,则死掉。
2 “正常”:任何活细胞如果活邻居为2个或3个,则继续活。
3 “总数过多”:任何活细胞如果活邻居大于3个,则死掉。
4 “繁殖”:任何死细胞如果活邻居正好是3个,则活过来。
[4]有三种稳定态:静止态(Still Life),震荡态(Oscillator)和以Glider为代表的移动震荡态?
[5] 比如知名的卷积神经网络(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 Computation3rd – Michael Sipser
3.https://web.stanford.edu/class/sts145/Library/life.pdf
4.https://commons.wikimedia.org/w/index.php?curid=73877448
5.https://leetcode-cn.com/problems/game-of-life
6.斯蒂芬·沃尔夫勒姆(Wolfram):宇宙的本质是计算
https://m.guokr.com/article/126181
7. https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
8. 《The Lives of a Cell》
代码参考:
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://leetcode-cn.com/problems/game-of-life/
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/180929.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...