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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • OpenGL入门教程

    概述OpenGLOpenGL是渲染2D、3D矢量图形硬件的一种软件接口。本质上说,它是一个3D图形和模型库,具有高度的可移植性,并且具有非常快的渲染速度。OpenGL并不是一种语言,而是更像一个C运行时函数库。它提供了一些预包装的功能,帮助开发人员编写功能强大的三维应用程序。OpenGL可以再多种操作系统平台上运行,例如各种版本的Windows、UNIX/Linux、MacOS和OS/…

  • 基于arduino的光控窗帘_光控窗帘

    基于arduino的光控窗帘_光控窗帘课程设计报告设计目的:居民对生活采光很重视,但现在的人们越来越“懒”,对智能化的要求越来越高。为了方便居民在白天把窗帘及时拉开,晚上把窗帘及时拉上,我们设计了光控窗帘。本设计硬件主要是光敏传感器,电机以及单片机;软件主要采用C语言进行编程。同时,为了考虑实际我们还额外加了一些手动装置,以防阴天和雨天等特殊天气。硬件介绍:arduinom2560r3单片机,光敏传感器模块(带宽电压LM393比较器…

  • MySQL增删改查_sql where case when

    MySQL增删改查_sql where case whensqlserver数据库中raiserror函数的用法server数据库中raiserror的作用就和asp.NET中的thrownewException一样,用于抛出一个异常或错误。这个错误可以被程序捕捉到。raiserror的常用格式如下:raiserror(‘错误的描述’,错误的严重级别代码,错误的标识,错误的描述中的参数的值(这个可以是多个),一些其它参数),在官方上的格式描述如下:…

    2022年10月31日
  • 安卓 toast_安卓toast使用

    安卓 toast_安卓toast使用概述一个toast是在屏幕上弹出一条信息,它的大小总是包裹着需要显示的内容,并且当前的Activity依然是可见并且可互动的。toast会自动消失,并且不接受任何互动事件。因为toast可以在后台的 Service 中创建,所以即使这个应用程序没有显示在屏幕上,仍然可以弹出toast.toast最好用来显示简要的信息,比如断定用户正在注意屏幕时,弹出”Fil

  • 电源符号:VCC、VDD、VEE、VSS、VBAT各表示什么意思?

    电源符号:VCC、VDD、VEE、VSS、VBAT各表示什么意思?下面是stm32vet6的引脚图:电路设计以及PCB制作中,经常碰见电源符号:VCC、VDD、VEE、VSS、VBAT,他们具有什么样的关系那?  一、解释  (1)VCC:C=circuit表示电路的意思,即接入电路的电压  (2)VDD:D=device表示器件的意思,即器件内部的工作电压;  (3)VSS:S=series表示公共连接的意思,通常指电路公共接地…

  • Django(1)初识Django「建议收藏」

    Django(1)初识Django「建议收藏」前言Django是一个开放源代码的Web应用框架,由Python写成,最初用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站,即CMS(内容管理系统)软件,于2005年7月在BSD许可证下发布,这

发表回复

您的电子邮箱地址不会被公开。

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