进击的生命游戏

作者: LostAbaddon | 来源:发表于2016-01-29 10:24 被阅读390次

    生命游戏,是数学家Conway所提出的一个规则非常简单但却能衍生出众多有趣内容的游戏。

    PS一下:这位Conway也是一个非常有趣的老爷子,比如有趣的“超现实数”就是他提出的,而他提出的另一个有趣的概念是量子理论中的“自由意志定理”,用比较充满噱头的话来说就是:倘若人是有自由意志的,那么基本粒子也有。

    这篇文章就是从传统的生命游戏开始,介绍一下这次我个人对它所做的拓展——当然了,这类拓展以前还在学校的时候每年都会搞搞,当时用的还是VB与VB.net,现在用的是Vue+ES6。


    最初的生命游戏,规则只有这么两条:

    1. 如果一个有生命的格子周围的8个邻居中有小于2个或者大于3个格子是有生命的,那么这个格子的生命就会死亡,在下一刻变成无生命格子;
    2. 如果一个无生命的格子周围的8歌邻居中有正好三个格子是有生命的,那么这个格子的生命就会复苏,在下一刻变成有生命的格子。

    在如此简单的规则下,我们一般认为最终的情况会是稳定在几个特定的模式下——比如全部死光当然是一个稳定模式了,或者四个格子饱成一个“田”字当然也算一个稳定模式,这类还有很多。

    但,出乎意料的是,生命游戏中除了上述静态稳定模式外,还有不少动态模式,会呈现出非常有趣的状态。

    其中最简单的,就是三个连成一条横线,此时这条横线会绕着中间的那个点不断地横竖摇摆。

    这个模型虽然是动态的,但却不够“动”。

    另一个,是一个歪斜的“Y”字型,这个造型会不断“扭动”身体,然后朝着一个固定的方向一直走下去,不会停歇——这就是一个足够“动”的动态模式了,可以稳定地匀速运动。

    网上大家可以找到许多别的模式,都很有趣。

    那么,为什么规则会是这样的?

    比如说,我们将复苏的规则修改为1或者2,不是3,那会怎么样?

    当我们将复苏规则就该为1的时候,这其实就是说每个点的外围都可以“长”出新的店来,从而整体是非常容易生长的。

    同理,当复苏规则为2的时候,只要是连在一起的两个点就可以孕育出新的点来,也是很容易生长的。

    但复苏规则为3则不同——它不像1和2那么容易达成,而是需要一定的“结构性”,而这一要求就导致了整个容器内的生命需要高度“有序化”,同时又不至于将这种有序化彻底僵死。

    规则为4的时候就是彻底僵死了,因为8个邻居中4个有生命,这样的要求还是较难达成的。

    既然有了最基础的生命游戏,我们下一个想法当然就是通过恰当的编码来控制这种极简单生命的行为了。

    这就是行为的基因化。

    一旦我们可以通过简单编码来控制生命的行为规则,那也就是说,我们可以通过改写编码来修改这种生命的行为。

    于是,我们下一步可以引入“变异”,从而改变生命行为。

    另一方面,我们又注意到这种生命游戏中的生命是没有“寿命”这个概念的,即只要没有达成死亡规则的要求,那么一个有生命的格子中的生命就不会死去。

    因此,为了更加有趣一点,我们引入了“寿命”的概念。

    基因化,随机变异,有限寿命,这是能区别于传统生命游戏的第一步。

    我们可以更进一步引入对“邻居”中生命计数规则的“量子化”,使用会随着时间而变的一个模为1的复数来代表“生命数”,这样在统计的时候就会出现更多有趣的现象了。

    接着,我们要求有生命的格子的复生命值在时间的演化过程中是会给变的,而且这个概念的幅度与这个生命的“能量”成正比,而这个“能量”又与邻居8个点的总“复生命的模”相关,那么情况就会变得非常复杂了。

    此时,如果两个格点的邻居数不同,那么基本就宣告了这两个格点是“不同频”的,因此在一定时间后,原本幅角接近的两个复生命值可能就变成相反的了,这对于计算一个格点周围复生命量的工作来说就非常有趣了。

    这里有一个有趣的现象,就是上述不同频的格点如果在一起,那么最后会因为不同频而“退相干”,从而使得其中一个格子更快地死亡。

    因此,在“量子化”之后的版本里,两个格点的“同频”成了非常有趣的一项工作。

    我们也可以问这么一个问题:

    在量子化版本的生命游戏中,是否存在某些稳定的动态模型?

    个人在此的认为是:对于相连生命数量超过一定阀值的这种量子生命游戏,最终的结果必然是大部分细胞死于退相干而别的细胞死于自然至死。

    事实上,这里的关键信息是:生命可以通过“不可观测”的手段彼此交流,从而衍生出一些不可观测情况下不可思议的行为。

    比如说,在某个已经看上去稳定的模式下,突然某个格子就消失或者出现了,从而破坏了整个模式的稳定性——而,这种突然出现于消失在一个已经在一段运行周期内稳定的经典模式中,是不可想象的,因为规则告诉了我们:如果这一个运行周期里这个格子没有消失或者出现,且整个模式没有发生任何改变,那么下一个运行周期里这个格子也不会消失或者出现。

    经典版的规则是死的。

    但在量子版中,这点却受到了冲击,因为量子版中格子上的生命数不是0或1的实数,而是模为0或1的复数,这里多出来的相位信息是不可见的,但却可以改变整个模式中的每个格子的最终决策——尤其在模式的不同格点上一个生命可能因为周围生命数的不同而具有不同的相改变速度的时候,这种决策就很难达到稳定。

    这点,或许还是很有启发意义的吧——不可见的隐变量参与到最终决策中,这也算是量子理论隐变量诠释的一种复辟?


    下面就是这个游戏的网址:

    BT版生命游戏


    在之后的版本中,会引入一个以前就做过的功能:竞技场。以及一个以前没做过的功能:多细胞与细胞吞噬。

    竞技场模式中,用户可以指定不同原始基因组的生命,然后让他们相互厮杀。这个其实主要就是娱乐性。

    这里的一个关键,就是利用生命的基因构成来计算一个生命的“战斗力”,基本来说,就是可适应的环境越多的生命,战斗力越弱,从而达到一个平衡。

    而战斗所发生的场所,只能是在无生命格子中,当条件符合从而要转入有生命状态时,可能就会有多个不同生命都可以进入这个状态,从而就需要引入竞争机制——这点在随机变异版中其实已经引入了。

    而在多细胞模式中,一个生命可以拥有多个基因组,然后根据所处环境的不同而在多个基因组中切换,用来“模拟”多细胞生命对不同环境的应对。

    而,既然可以有多细胞模式,那么我们自然可以使用考虑一个生命“吞噬”另一个生命的细胞的过程,从而就会有细胞吞噬。

    因此,最后我们将获得的,是一群具有隐变量策略的会变异的有寿命的多细胞生命,在一个二维小空间里相互厮杀。

    想想也是挺美的。


    最后验证申明一下:
    这个小游戏基于Vue.js与ES6制作,算是对着两项技术的试手作。其中,由于采用的是ES6,所以并非所有浏览器都支持,如果你打开后发现一片空白,请赶快换用最新的现代浏览器,烧掉手上的IE,谢谢。


    本文遵守创作共享CC BY-NC-SA 4.0协议

    通过本协议,您可以分享并修改本文内容,只要你遵守以下授权条款规定:姓名标示非商业性相同方式分享
    具体内容请查阅上述协议声明。

    本文禁止一切纸媒,即印刷于纸张之上的一切组织,包括但不限于转载、摘编的任何应用和衍生。网络平台如需转载必须与本人联系确认。


    如果喜欢简书,想要下载简书App的话,轻戳这里~~
    <small>私人推荐订阅专题:《有意思的文章》《严肃码匠圈》</small>

    相关文章

      网友评论

      • Travlight:那个所谓“最初的生命游戏”是像元胞自动机那样的东西吗?
        LostAbaddon:@Travlight 对的,就是CONWAY最早推出的那个生命游戏。

      本文标题:进击的生命游戏

      本文链接:https://www.haomeiwen.com/subject/gcejkttx.html