生命游戏程序_生命游戏怎么玩

生命游戏程序_生命游戏怎么玩引言群居性昆虫是一个生命,鱼群、鸟群是一个生命,社会、城市是一个有机体,人类的语言是活的,人类的集体行为也是活的。这些复杂系统是如何设计出来的?世界上最著名的游戏之一,GameofLife生命游戏,为这些最神秘的问题提出了可能的解释——也许再复杂的生命,最初也不过是几条最简单的规则。本文从GameofLife的缘起说起,解释了它这几十年给予数学、计算机、哲学的启发,最后把它作为P…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

引言

群居性昆虫是一个生命,鱼群、鸟群是一个生命,社会、城市是一个有机体,人类的语言是活的,人类的集体行为也是活的。这些复杂系统是如何设计出来的?世界上最著名的游戏之一,Game of Life生命游戏,为这些最神秘的问题提出了可能的解释——也许再复杂的生命,最初也不过是几条最简单的规则。本文从Game of Life的缘起说起,解释了它这几十年给予数学、计算机、哲学的启发,最后把它作为Python编程的练习。

24bc0e89ac3bb90f7b3dc71284b5f704.png

“匈牙利唯一的天才”——冯诺依曼

我们的故事从上世纪40年代说起。彼时,第一台电子计算机的出现昭示了计算机领域风起云涌的时代,同时也开启了以信息控制技术为核心的人类第三次科技革命。冯诺依曼(John von Neumann)则是这段历史中绕不开的开山鼻祖。

能够作为电子计算机理论和博弈论的奠基者,用“天才”这个词再去形容冯诺依曼显得苍白。他是一个精力智力都充沛的命运宠儿。在他博士论文答辩时,导师们唯一的问题是:你今天的西装真挺括,是哪个裁缝做的?他喜欢在吵杂的环境里工作,在办公室里放进行曲会吵到隔壁的爱因斯坦。普林斯顿研究拜占庭历史的教授说,冯诺依曼在拜占庭史方面比自己更精通。

91f262720484ba523657ab52a2867740.png

冯诺依曼以什么著名?一个显示屏可能都放不下(+68More)(来源:维基百科)

人是机器,还是机器是人

随着人工智能技术的发展,人与机器的边界越来越模糊。可以说,人工智能和对于生命边界的探索,从有了计算机这个概念开始就存在。冯诺依曼曾给生命下了一个定义。他认为,生命是一个符合图灵机(Turing Machine)的定义,同时可以复制自身的有机体[1]。他的朋友,同样是位家境殷实的高富帅,乌拉姆(Ulam)觉得这个问题非常有意思,提出了“细胞自动机(cellular automata)”的概念,用程序来模拟生长机制[2]。后来他们又各忙各的了,等到二十多年后,一生都在游戏的数学家约翰-康威(John Conway),以一种更有趣的形式发扬了“细胞自动机”,并阐释了冯诺依曼的定义是正确的。这个模型就是风靡全球的“Game of Life”, 生命游戏。

数学魔术师?‍♂——约翰-康威

看《科学美国人》《环球科学》的朋友们看到这个名字一定会觉得很亲切,很多人因为康威的“生命游戏”与计算结下了不解之缘。数学家团体对他有这样的评价,“他是一位多才多艺的数学家,他在构建和处理‘非主流’代数结构方面,以完全出乎意料的方式阐明了各种问题。他在有限群理论、结子理论、数理逻辑和博弈论方面做出了杰出的贡献。”不幸的是,在2020年4月11日,他因感染COVID-19与世长辞。而他创造的细胞生物就一直留在了二维方格的世界里。

fd1f8cb5f7ded86dc3a8b6922b6546b8.png

John Conway

生命游戏 the Game of Life

生命游戏算得上是现在流行的真实世界模拟游戏的鼻祖(也在一定程度上启发了分形数学)。它用特别简单的规则产生出带有真实感的复杂性。康威想要通过这样一个有趣,过程不受外界控制的游戏,弄明白怎么样的结构可以保持稳定不消亡。生命游戏是对于由有机体构成的社会起伏的简化。经过深思熟虑后,康威非常节制地仅给出了四条最基础的游戏设定,以保证有机体的总数变化是变幻莫测的。其余,就看每一次游戏开始后的“造化”。

5b7d13d1e4b52f85e93642fc5c8b3e4e.png

By Saisundar.s – Own work

生命游戏开始于一张二维的方格纸。初始细胞(有机体)每个占据一个方格。它们各自有活着或死去两种状态(live/dead). 每一个细胞是死是活只取决于周围的环境资源,也就是围绕着它的八个格子。根据规则,就像真实的细胞生长情况,在二维上的这些方格细胞如果太挤或者太稀疏就会死去,在最合适的群体密度时,它们生长得最好[3]。

11e454b015ad0d595ba1332193be07e5.gif

生命游戏是一代计算机的记忆,就像21世纪的超级计算机的回忆一定有深度学习。生命游戏是世界上被玩得最多的电脑游戏之一。上世纪70年代正是微型计算机蓬勃发展的时候,不过当时的计算机还是不擅长图像处理和储存,于是生命游戏席卷了全球的计算机。在美国因为在工作时间偷偷盯着生命游戏发呆的总损失高达数百万美金。

不难想象为什么这个游戏那么受人欢迎,正如同变幻莫测的恒星轨迹让那么多《三体》书里书外的人惊心动魄:

1. 如此简单的初始条件却可以出现惊人的复杂行为;

2. 达到平衡的结构中有些非常有趣,有些甚至呈现周期性[4];

3. 对于计算机专业的人来说,生命游戏的价值在于它是图灵完备(Turing complete)的,也就是说,任何在计算机上可以由算法做到的,都可以在生命游戏里实现。

5fa6d54b635a05ac906d824526f3b353.png

史蒂芬·霍金的《大设计》

为什么是我们?宇宙的存在有意义吗?智慧的起源为何?“大设计”曾是一个神学概念,指的是宇宙规律的背后有造物主式的安排。霍金的《大设计》在讨论了这些问题用了生命游戏的模型,“像生命游戏这样规则简单的东西能够创造出高度复杂的特征,智慧甚至可能从中诞生。而我们的脑中就有数千亿的细胞”。科学界的Google创始人Wolfram更是认为宇宙的本质就是计算,是一套简单的规则生成的复杂现象。更有意义的是,就算了解了一切规则,我们也无法提前得知这些规则可以演化成怎样的系统。这对我们有关键的启发,即使在完全绝对论的世界里,我们依然拥有自由意志。

90aaf485e7c7f2bddfa51e7eba1715a5.png

credit to:Mike Zeng

代码实现?

生命游戏的思想上和图像上都有深入浅出特性,我们可以把它当作很好的编程入门问题。像Google这样的企业也会把它作为试题。我们接下来将如何用Python实现这个游戏。⌨️

下图是每一个细胞的生死规则。

f8b7c506b51290db6acaa8753aa89fde.png

入门级:

f8630fcc9e3c1caa1d070f7054c067a6.png

3228a4e19ea024704ca30363dfdac381.png

引入Convolution和Kernel:

SciPy中有一个对于诸如人脸识别等图像处理很重要的功能Convolution(卷积)[5]. Convolution作用在一个细胞和它的邻居上。

这九个方格的状态(location/weight)用kernel(核)来表示。

0e1902488a7ef63df3d6f1ed8dc1fab6.png

比如这个kernel表示了在0的周围8个临近的权重都是1。

在生命游戏中,neighborhood指的是细胞周围相邻的8个格子(这种neighborhood也称为Moore Neighborhood)

6cab115c485b301556e8254932792012.png

可以用以下代码替代上述代码:

a2848636b914d21a82205bcc8d62c718.png

“滑翔机”Glider?

4c381414fb6be3c911735e05f3d55032.gif

很多人把滑翔机这个图案作为生命游戏的标示。滑翔机是一种处在稳定的振荡状态,同时会移动的结构。它在1970年被英国数学家Richard Guy发现。与英特网和Unix同时期的诞生使得他在一代黑客心里有着重要的地位。到现在它还会被当做这个团体的图腾。

de567e381d8f421adfa6542dcafc700e.png

我们得到如下的图像,这就是一个glider:

111044b693712db2403eb64fd7509585.png
874e04c8129a77aee8183c710ca72e03.png

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)

c582eefc24392e2aa50fdb69e1f3f5d7.png

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/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180929.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Postman安装教程_postman需要联网吗

    Postman安装教程_postman需要联网吗1.官网安装(别看)打开官网,https://www.getpostman.com安装很麻烦还很容易安装失败(先请擦掉眼泪,不要忧伤,我们依然可以好好的)2.非官网安装这是一种直接通过打包已经安装的扩展程序的方式,来进行我认为的「非法安装」,但没办法,只能这样。我会给你一个安装包,见附件。你应该下载下来,解压缩到你喜欢的位置。(解压的位置自己要记得)安装包(Postman4.1.2下载地址:http://files.cnblogs.com/files/mafly/postman-4

    2025年12月16日
    6
  • OCP-1Z0-051-名称解析-文章12称号

    OCP-1Z0-051-名称解析-文章12称号

    2022年1月12日
    53
  • redis RDB持久化方式的工作原理是怎样的_杜兰特挽留纳什

    redis RDB持久化方式的工作原理是怎样的_杜兰特挽留纳什我们已经知道对于一个企业级的redis架构来说,持久化是不可减少的,持久化主要是做灾难恢复,数据恢复,也可以归类到高可用的一个环节里面,比如你redis整个挂了,然后redis就不可用了,你要做的事情是让redis变得可用,尽快变得可用,重启redis,尽快让它对外提供服务。………

    2025年6月6日
    5
  • HelixServe搭建局域网流媒体服务器

    HelixServe搭建局域网流媒体服务器查了两天资料,有了些眉目,在成功搭建数次之后把这篇博客补上    但成功搭建并不是一蹴而就的,从开始的一脸懵逼,到中途的困难频繁造访几欲放弃打算转向研究其他实现方式,再到最后的豁然开朗,真应了秀娟说的那句话:    学习的乐趣就在于前期为伊消得人憔悴的酝酿,在于中期一知半解的朦胧,在于后期柳暗花明的顿悟。    不多说了,感谢自己挺过来了,坚持下来,尝到了胜利的喜悦…

    2022年6月6日
    166
  • Shiro框架:缓存、session会话、自定义FormAuthenticationFilter、RemenberMe

    Shiro框架:缓存、session会话、自定义FormAuthenticationFilter、RemenberMe

    2021年9月26日
    43
  • redis和memcache区别_redis和数据库的区别

    redis和memcache区别_redis和数据库的区别1redis做存储,可以持久化,memcache做缓存,数据易丢失。2redis支持多数据类型,memcache存放字符串。3redis服务端仅支持单进程、单线程访问,也就是先来后到的串行模式,避免线程上下文切换,自然也就保证数据操作的原子性。Memcache服务端是支持多线程访问的。4redis虽然是单进程单线程模式,但是redis使用了IO多路复用技术做到一个线程可以处理很多个请求来保证高性能。Redis的主从复制1在Slave启动并连接到Master之后,它将主动发送

    2025年8月21日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号