华院计算 | 简单而复杂的“生命游戏”

news2024/10/5 18:30:15

人类是社会动物,而人类的社会活动则既简单又复杂。长期以来,数学家、计算机科学家和社会学家们一直试图用简单明了的方式方法去刻画错综复杂的社会现象,其中“生命游戏”提供了一个“寓科学于娱乐”的活动框架。

【一】导引

让我们先来玩一个简单的棋子游戏。

在一个充分大的围棋棋盘上,为简单起见每个空格表示已经放有一个白子(而白子就不标画出来了)。如果空格内出现一个黑子,就表示黑子取代了原有的白子。现在,让黑子表示“生”而白子表示“死”。另外,在棋盘上的任何9个格子组成的正方形区域里(见图1),对处于中心位置的黑子或白子来说,它上下左右和两对角线外的8个黑子(如果它们存在的话)都称为是它的邻居。

我们的棋子游戏有4条规则,在整个过程中每一步都同时应用于棋盘上所有的黑子和白子上。规则如下:

(1)如果一个黑子只有1个或者没有黑子邻居的话,它在下一步就会死去,如图1(a) 所示。这操作表示该黑子在社会里太孤单了,它不能继续生存下去。

(2)如果一个黑子有2个或者3个黑子邻居的话,它在下一步就继续存在,如图1(b) 的第一步所示。这操作表示该黑子有合适的社会环境,它可以继续生存下去。

(3)如果一个黑子有4个或者更多黑子邻居的话,它在下一步也会死去,如图1(c) 的中心黑子(为了不影响这一说明,其它黑子和白子同时发生的变化暂且不表示出来)。这操作表示该黑子所处的社会环境太拥挤了,它不能继续生存下去。

(4)如果一个白子有恰好3个黑子邻居的话,它在下一步就会变成黑子,如图1(d) 所示。这操作表示该白子具有良好的社会环境,它可以诞生或复活。

明白了这几条简单规则之后,你就可以开始玩这个棋子游戏了。当然,只放少许几个黑棋子的话,你可以在书桌上玩一阵子,但棋子数目稍多,你就得编程在电脑上玩了。

你很自然会有一个感觉,就是开始时放入多少个黑子以及怎样放置它们,这对于游戏如何一步一步地演变下去会有决定性的影响。比如图1(d)中四个黑子处于稳定状态,它们永远都不会死去,即是“长生不老”,而其它初始放置方式(图1(a)、(b)、(c))则会让黑子在若干步之内全部死光。

你这个感觉是对的:游戏的初始条件(即放入多少个黑子以及怎样放置它们)的确很重要,它们会生成各式各样的黑子组合斑图以及许多不同的最终结果。比如图1(d) 就生成一个永远不变的斑图,称为“静物”(still life);图2(a) 则生成周期-2的“振荡器”(oscillator);图2(b) 却生成一种会移动的周期“宇航船”(spaceship)。后面这种情形特别有趣,它在一步一步变化的过程中,起始的5个黑子不会减少也不会增多,但会频繁地改变位置,像一艘不断变形的宇航船一直往右方和下方移动。在第四步,它变回到了初始状态,不过整个斑图的位置向右方和下方各移动了一格。之后,它继续往前移动,期间斑图的变化不断重复前面的过程。这是一艘移动的周期-4振荡宇航船,称为“滑翔机”(glider),它永远不停地向右下方滑翔前进。你看,这个滑翔机会永远无休止地生存并移动下去,期间代表“生”和“死”的黑子和白子交替出没,整个族群在发展和演变过程中就像有“生命”一样,对吧?

5dbeb70f44ef447917d9665b7aced46e.jpeg

图1  游戏4条规则

48f09ed1be1b06011281a64f1c97f97f.jpeg

图2 “振荡器”和“滑翔机”例子

至此,你看到了,这个棋子游戏的规则是固定的,但初始条件(黑子的个数和位置)可以有许多不同的选择。因此,容易想象,你能够尝试着去生成多种多样的“最终趋于死亡”、“不同周期振荡”和“永远变化生存”斑图。由于这个游戏可以用来描绘一些社会生命现象,故此设计师把它叫做“生命游戏”(Game of Life)。

上面介绍的这个趣味横生的生命游戏简单而复杂,它的设计师是数学家约翰·康威(John Horton Conway,1937–2020)。关于康威的生平和贡献,笔者曾有过简单介绍 [1]。康威在开发这个有趣的生命游戏时是英国剑桥大学数学讲师。1970年10月,科普作家马丁·加德纳(Martin Gardner,1914–2010)在《科学美国人》杂志的“数学游戏”专栏对这个生命游戏作了详细介绍。从此,学界和民间对游戏的兴趣和热情一发而不可收拾。据说,在那个生命游戏风靡世界的年代,全球有四分之一的电脑都在玩这个游戏。

2010年,物理学家史蒂芬·霍金(Stephen W. Hawking,1942–2018)在他的科普著作《大设计》(The Grand Design)中写道:“我们可以想象,像‘生命游戏’这样的玩儿,它只有一些基本规则,便可以产生高度复杂的功能,甚至智慧。当然它可能需要包含数十亿个正方形的网格。但这并不困难,我们大脑中就有数千亿个细胞。”

【二】简史

现在,我们来说说“生命游戏” 的前世今生。

康威并不是构思出这类具有深刻数学原理和社会学意义的生命游戏的第一人。游戏的基本思想要追溯到两位美国数学家:波兰裔的斯塔尼斯拉夫·烏拉姆(Stanislaw Ulam,1909–1984)和匈牙利裔的约翰·冯·诺伊曼(John von Neumann,1903–1957),他们在上世纪40–50年代为模拟生物细胞的自我复制提出了“元胞自动机理论”(Cellular Automata)的雏形。当年,由于没有高速大型电脑,他们的构想没有得到验证因而未受学术界的重视。1970年,马丁·加德纳在《科学美国人》杂志介绍了康威的生命游戏之后,元胞自动机理论才受到了越来越广泛的关注。

在众多卓有成效的元胞自动机理论研究者中,特别值得提及的是美国电脑科学家史蒂芬·沃尔夫勒姆(Stephen Wolfram,1959–)。

沃尔夫勒姆是个很有故事的人物。他1959年出生于伦敦,12岁编写了一部关于物理学的词典草稿,13–14岁间写了三本关于粒子物理的手稿,15岁发表了第一篇学术论文,17岁进入了牛津大学。1978年,19岁的沃尔夫勒姆接到美国物理学家默里·盖尔曼(Murray Gell-Mann,1929–2019)的电话邀请,来到了加州理工学院就读研究生。盖尔曼因发现基本粒子夸克在1969年获诺贝尔物理学奖,他是圣塔菲研究所首任所长。1979年,在加州理工学院读书期间,沃尔夫勒姆便开创了自己的第一个大型电脑语言 SMP,用以辅助物理学研究。该语言是后来著名数学软件Mathematica和电脑Wolfram语言的前身。1980年,21岁的沃尔夫勒姆获得了理论物理学博士学位,其答辩委员会成员包括有诺贝尔物理奖得主理查德·费曼(Richard P. Feynman,1918–1988)。之后,沃尔夫勒姆留校任教,随即获得MacArthur 奖。接下来,23岁的他开始推动并主导了关于“复杂系统”的科学研究,并在27岁时创立了自己的Stephen Wolfram公司,从事数学软件和电脑软件开发。如所周知,他获得了巨大成功,不过那是后话了。

1983年,由于知识产权纠纷,沃尔夫勒姆离开了加州理工学院,到了普林斯顿大学自然科学学院工作。没过多久,他就发明了元胞自动机的计算程序。沃尔夫勒姆后来回忆说:“我开始时并不觉得简单的元胞自动机有什么有趣之处,不过还是利用电脑试着对它们做了些试验。令我十分惊讶的是,就算是构造极为简单的元胞自动机,它们仍然有着极其复杂的行为,这对传统的科学教条是个莫大的冲击。过了些日子,我才意识到它的巨大潜力。那是我写这本《一种新科学》(A New Kind of Science)的最早动机。”我们知道,该书实际上代表了一条与圣塔菲研究所不一样的复杂性科学研究路线。

当年,沃尔夫勒姆使用电脑模拟对基本元胞自动机的类别进行了系统性的分析,对一维基本元胞自动机的256种规则所产生的模型进行了深入的研究,并用熵(entropy)的概念来描述元胞自动机的演化行为。他根据复杂性理论将元胞自动机大致分为平稳型、周期型、混沌型和复杂型。从几乎所有的随机初始模式开始,平稳型将演化为稳定静止状态,周期型将演化为稳定振荡状态,混沌型将演化为伪随机混沌状态,复杂型将变化为相互作用繁复状态且其局部结构会在长时间内甚至永远地存在。沃尔夫勒姆发现,绝大多数的生命游戏演化是无法被决定的(undecidable):即使给定了初始模式,依然找不到或者根本就不存在一个算法可以用来判断后续模式是否会出现和何时会出现。沃尔夫勒姆指出,第 110号规则对应的元胞自动机具有图灵完备性(Turing completeness)。在电脑科学中,图灵完备性是指具有无限存储能力的通用编程语言,它可以通过一系列数据操作规则来模拟图灵数学逻辑机。沃尔夫勒姆发现,凡是可以通过编写程序去计算的复杂系统演化行为,都可以用元胞自动机来实现。顺便提及,沃尔夫勒姆从分类开始时就已经看到了元胞自动机理论和美国数学家史蒂芬·斯梅尔(Stephen Smale,1930–)的艰深混沌数学理论的内在联系,因为生命游戏的无法决定性和混沌的长期不可预测性 [2] 是类似的。

上面讨论的只是平面上的生命游戏和元胞自动机理论。对于任意一条游戏规则,每个格点的黑子和白子邻居的组合共有  种,而每种组合都可以用二进制的0–1序列来表示并且是各自独立变化的,于是总共有  种可能。即便排除了那些没有静止、旋转和反射对称可能的不重要情形,剩下来的依然是一个天文数字。至于三维和更高维数的生命游戏和元胞自动机理论,那就复杂得无法描述了,只能用几个简单文字来概括:超乎想象的丰富多彩!

【三】应用

故事讲到这里,你一定会好奇,这迷人的元胞自动机理论及其计算程序会有什么实际应用呢?

作为回应,我们简单地介绍一下元胞自动机技术在电脑科学、生物学、化学、物理学和音乐艺术方面的几个具体应用或潜在应用 [3]。

99d2f5211c17a826c643dcf66bcfacaa.jpeg       d327cac783f7f4a616303eee5609ae80.jpeg

图3 芋螺贝壳和Wolfram 30号规则生成的班图4]

(1)电脑科学:

元胞自动机处理器是该概念的物理实现,它通过计算方式来处理信息。元胞的状态仅通过与相邻邻居元胞的相互作用来确定,而不需要也不存在与更远的元胞进行直接通信。一种典型的元胞自动机处理器具有脉动阵列配置,其中元胞相互作用通过电荷、磁性、振动或其他物理手段来实现。

Wolfram 30号规则最初被建议作为一种可能的分组密码用于密码学。二维元胞自动机可用于构建伪随机数发生器,而且元胞自动机的演化是单向函数,其逆很难破解,即容易计算未来状态,但回算先前的状态却异常困难。元胞自动机后来也被提议用于公钥密码学并用来设计各种纠错码。

(2)生物学:

一些漂亮的海螺贝壳图案可以用元胞自动机生成,例如分布广泛的芋螺纤维(conus textile)具有类似于 Wolfram 30号规则的班图(图3),因而元胞自动机理论能够用来解释和研究贝壳的颜色细胞自然生长内在规律。

动物体内的成纤维细胞(fibroblast)与元胞自动机有很多相似之处,例如每个成纤维细胞只与其邻居相互发生作用。

植物调节气体吸入和呼出的机制类似于元胞自动机的演化过程,例如树叶上的每个气孔有呼和吸两个动作,对应于一个元胞的两种状态。

头足类(cephalopod)动物例如乌贼的皮肤班图中,每个状态对应于色素细胞的展开和收缩,可以用二维元胞自动机进行模拟和解释。

生物神经元的活动甚至动物识别和学习等复杂行为都可以用阈值自动机来模拟。

(3)化学:

化学中的Belousov–Zhabotinsky 反应是一种时空化学振荡过程,它可以通过元胞自动机来进行模拟和分析。例如一层单薄而均匀的丙二酸、酸化溴酸盐和高铈盐混合在一起时,迷人的几何图案如同心圆和螺旋曲线便在介质中传播,所产生的波形与某种元胞自动机生成的图案非常相似。

(4)物理学:

概率元胞自动机可用于统计学和凝聚态物理学的研究中,去分析流体动力学和相变等现象。伊辛(Ising)模型是一个典型的例子,其中每个单元格可以处于“向上”或“向下”状态,从而用于理想化地表示磁铁。通过调整元胞自动机模型参数,可以改变处于相同状态的元胞比例,解释了为何对铁磁体加热可以消磁。物理学中还有一种格子气体元胞自动机,可以用来模拟液体流动并对之给予合理解释。

(5)音乐艺术:

元胞自动机可用来生成一些新颖动听的音乐作品和设计电子游戏。某些类型的元胞自动机还可用于生成各种迷宫。两个著名的元胞自动机迷宫 Maze 和 Mazectric类似于前面介绍的“生命游戏”,复杂而有趣。此外,元胞自动机还能生成丰富多彩的图案用于艺术设计。

今天,元胞自动机理论及各种数学游戏的研究仍在继续。我们期待在不久的将来会得到更丰富更有趣的成果。

参考文献

[1] 陈关荣(2023),爱玩的天才数学家康威,《数学文化》第14卷第4 期,36-46页https://www.global-sci.com/intro/article_detail/mc/22165. html

[2] 陈关荣(2022 年),这门复杂性科学有个别致的名称―混沌,《复杂学》第1 卷第1 期,69-75页

[3] Wikipedia: Cellular automaton,https://en.wikipedia.org/wiki/Cellular_automaton

[4] Stephen Wolfram (2019), Announcing the rule 30 prizes,  

https://writings.stephenwolfram.com/2019/10/announcing-the-rule-30-prizes/

(原文发表在《复杂学》2024年第2卷第2期45-52页,经作者授权转载)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口自动化测试Requests库实战超细详解

一、requests库 Requests is an elegant and simple HTTP library for Python, built for human beings. Requests库就是一个使用Python语言发送HTTP请求的一个类库。 github地址:GitHub - psf/requests: A simple, yet elegant, HTTP library. 中文地址&#xff…

【华为】将eNSP导入CRT,并解决不能敲Tab问题

华为】将eNSP导入CRT,并解决不能敲Tab问题 eNSP导入CRT打开eNSP,新建一个拓扑右键启动查看串口号关联CRT成功界面 SecureCRT连接华为模拟器ensp,Tab键不能补全问题选择Options(选项)-- Global Options (全局选项&#…

民国漫画杂志《时代漫画》第6期.PDF

时代漫画06.PDF: https://url03.ctfile.com/f/1779803-1247397790-72c351?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络!

MySQL慢查询原因总结

文章目录 一.SQL没加索引二. SQL 索引不生效2.1 隐式的类型转换,索引失效2.2 查询条件包含or,可能导致索引失效2.3 like通配符可能导致索引失效2.4 查询条件不满足联合索引的最左匹配原则2.5 在索引列上使用mysql的内置函数2.6 对索引进行列运算&#xf…

低耦合双写一致性方案-使用canal+MQ

需求:继上一篇使用xxljob实现数据的全量同步到es后,当数据库中新增、删除、修改数据时,应该对es中的对应索引库实现增量同步。 本文介绍了2种双写一致性方案,对其中使用MQ的方案进行了实现。 1. 方案设计 1.1 数据一致性问题分析…

QT7_视频知识点笔记_5_线程,数据库

多线程 两种办法:第一种:Qt4.7之前的线程使用的方法(简单);第二种:Qt4.7之后的(灵活–推荐)----connect最后一个参数的作用:默认连接,队列连接,直…

vue3使用mitt.js进行各种组件间通信

我们在vue工程中,除开vue自带的什么父子间,祖孙间通信,还有一个非常方便的通信方式,类似Vue2.x 使用 EventBus 进行组件通信,而 Vue3.x 推荐使用 mitt.js。可以实现各个组件间的通信 优点:首先它足够小&…

从业务角度来看,DevOps 是什么?

如果您在我们的应用程序名称中看到“DevOps”,这意味着我们必须正确解释该术语,我们会这样做,但角度会有所不同。让我们从业务角度看看 DevOps 是什么。 通用名称 首先你应该知道,DevOps 没有明确的定义。是的。 大多数情况下&a…

分类和品牌关联

文章目录 1.数据库表设计1.多表关联设计2.创建表 2.使用renren-generator生成CRUD1.基本配置检查1.generator.properties2.application.yml 2.生成代码1.进入localhost:81生成代码2.将main目录覆盖sunliving-commodity模块的main目录 3.代码检查1.注释掉CategoryBrandRelationC…

使用xsd验证xml格式的正确性

1.1 基础知识介绍 XML简介:XML是可扩展标记语言(eXtensible Markup Language)的缩写,它是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据。xml文件、xml消息。XSD简介:是X…

JS对象超细

目录 一、对象是什么 1.对象声明语法 2.对象有属性和方法组成 二、对象的使用 1.对象的使用 (1)查 (2)改 (3)增 (4)删(了解) (5&#xf…

九州未来十二周年丨聚力同行,奔赴智能新未来

九州未来迎来十二周年! 从国内首批提供 OpenStack 云服务的专业公司, 经过十二年的发展, 现今成长为开放智能云边架构引领者。 在这十二年的时间中, 九州未来持续创新,步履不停, 打造成熟的云基础设施…

【软件测试】软件测试基础理论

目录 软件测试简介软件产生过程小结 主流测试掌握技能功能测试功能测试的注意事项 自动化测试自动化测试的优势自动化测试的限制和适用性:自动化测试的注意事项 接口测试接口测试通常可以涵盖以下方面接口测试的注意事项 性能测试性能测试的几个方面性能测试的注意事…

JavaSE:Clonable接口、浅拷贝与深拷贝

1、引言 我们在学习的数组时,就了解到了数组克隆方法,可以通过数组克隆方法来拷贝一个一模一样的数组: 那对于自定义类型中有没有克隆方法呢?答案是有的! 就让这篇文章来帮助大家学习自定义类型的拷贝! …

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展,表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

docker redis 持久化

1、拉取redis镜像 docker pull redis:latest 2、 mkdir /data/redis 3、填充redis.conf文件及根据需求修改相应的配置 •通过官网地址找到对应版本的配置文件 •将配置信息复制到redis.conf中 •常见的修改配置 https://redis.io/docs/latest/operate/oss_and_stack/managem…

K8s 高级调度

文章目录 K8s 高级调度CronJobinitContainerTaint 和 Toleration污点(Taint)容忍(Toleration) AffinityNodeAffinityPodAnffinity 和 PodAntiAffinity 总结 K8s 高级调度 CronJob 在 k8s 中周期性运行计划任务,与 li…

获取支持Windows7的最新Edge离线版本

从110版本开始,微软Edge和谷歌停止了对Win7、Win8/8.1的支持,后续又发布了几版安全更新,截止目前为止,能支持Win7的版本是 109.0.1518.140。 如果你想用最新版本谷歌浏览器,可以考虑下Supermium,这个浏览器…

Flask CORS: 解决跨域资源共享问题的利器

文章目录 安装和启用 CORS配置 CORS拓展 在本文中,我们介绍了如何使用 Flask-CORS 扩展来解决跨域问题。Flask-CORS 是一个方便的工具,可以帮助我们轻松地实现跨域资源共享支持。 安装和启用 CORS 要开始使用 Flask-CORS,我们需要先安装它。…

一些常见的程序设计问题

秒杀 redis缓存库存 1.判断库存名额是否充足,2.进行扣减 为了防止超卖,必须保证这两部的原子性 库存扣减后发送mq消息,去异步执行创建订单流程,创建订单失败会造成少卖。可加重试机制,对多次重试依旧失败的&#xff…