Java康威生命游戏的进化版:SproutLife


SproutLife是复杂生命进化的模型。它扩展了康威的生命游戏,它以从简单的规则中出现栩栩如生的模式而闻名。Sprout Life 将这种出现更进一步,创造了繁殖、变异和进化的模式。
 
Sprout Life 令人兴奋的原因有几个:

  • 集体行为,而不仅仅是个人健康——Sprout Life 独特地模拟了集体行为的演变。元胞自动机模式很脆弱,对中断很敏感。为了使有机体成功,它需要成为其后代、父母和亲戚的好邻居。生物体通过形成模式来生存和竞争,而这些模式本身又竞争并结合成更复杂的结构。
  • 隐喻的丰富来源——进化是隐喻的丰富来源。除了生物学之外,新突变的成功与创业世界中新想法的成功之间也有很强的相似之处。甚至政治革命或股票市场的繁荣与萧条周期等现象也可能通过模拟进化的潮起潮落来揭示它们。
  • 为速度而生- 速度是模拟进化的关键。理想的情况是有一个美丽的故事实时展开。元胞自动机是为计算机的快速计算而完美设计的。获得游戏的下一个状态几乎就像将两个二进制数相加一样。这就是计算机的用途。以计算机为载体,我们可以探索元胞自动机不断发展的世界,并从我们的发现中学习。

 
关键思想:
  • 细胞- SproutLife中的细胞仅在处于“存活”状态时才被视为细胞。Conway's Game of Life (GOL) 使用术语“死”细胞来指代空坐标。Sprout Life 只是将其视为空白。
  • 种子- 种子是我们用新细胞替换的细胞集合。静态 2x2 块模式是种子的自然选择,因为在典型的游戏中产生了很多这样的块。其他小模式也同样有效,而且在某些情况下效果更好。
  • 萌芽Sprout- 萌芽是一种替代种子的图案。一个R-五格骨牌为芽图案的自然的选择,因为它小而产生了很大的增长。
  • 有机体- 有机体是细胞的集合。生物体以新芽的形式开始生命,从这种模式中生长出来的每个细胞都成为生物体的一部分。稍后将讨论不同生物体细胞之间的碰撞。
  • 繁殖- 来自父母的种子发芽成为新的子有机体。我们知道每个孩子的父母的身份。因此,我们可以支持遗传,即基因从父母传给孩子。现在每个生物体都有一个单亲。由于亲本与其他生物之间的接触,也可以很容易地添加有性繁殖。
  • 自我强加的寿命- 事实证明,让旧有机体自我毁灭对他们的孩子有益。从板上移除父级的所有单元格为其子代和后代创造更多成长空间。新生物以可预测的模式发展,从而产生稳定性,而旧生物会因碰撞和突变而受损。令人兴奋的是,让生物控制自己的寿命并不会导致失控的生长。有机体通常更喜欢小。最大寿命被编码为一个整数值,可以代代相变。
  • 突变- 有很多方法可以实现遗传密码和突变。一个效果很好的选项是让突变成为一对 (x,y) 坐标,以及每个坐标的时间值 ((x,y),t)。如果在 t 年龄,一个生物体发生了突变 ((x,y),t) 并且它在坐标 (x,y) 处有一个活细胞,那么该细胞就会被杀死。关闭细胞会改变生物体从那时起的生长方式。
  • 基因组- 一组突变构成了生物体的基因组。可以将突变添加到生物体的基因组中,或者删除现有的突变。我们在有机体的一生中偶然地做到了这一点。突变必须在所有条件下都有益。例如,第一个孩子和第二个孩子出生在不同的时间,周围的细胞配置不同。在我们的案例中,它们都遵循相同的遗传蓝图,尽管很容易将出生顺序考虑在内。
  • 可视化基因组- 一次幸运的事故导致以一种美丽的方式展示生物体的基因组。GIF 中的眼睛、三角形和爪印图案实际上是生物体最近突变的直接表示。突变具有 (x,y) 坐标,并且对应于与生物体相同的空间。幸运的事故正在缩小这些突变的尺寸,导致它们在生物体的中心聚集在一起,而不是散布在受影响的细胞上。同时显示不同时间点的所有生物体突变。标志性的图案与生物体的行为有着很深的联系,它们大致勾勒出生物体在其一生中将具有的形状。
  • 旋转和反射- 重要的是要跟踪 R-Pentomino 或潜在的其他萌芽模式在生物体出生时所面对的方向。有 8 种方法可以旋转图案,大多数图案有 4 种旋转和 2 种镜像。突变的 (x,y) 坐标必须相对于种子模式的定向方式进行旋转。让父母有机体决定发芽的孩子面向哪个方向也很好。一个 2x2 的块种子给我们带来了一个棘手的困境,因为我们不知道它面向哪个方向。我们可以通过检查父母出生时面向的方向,并将其与种子相对于父母的上方、下方、左侧、右侧或其他方向相结合来解决这个问题。

进化 - 一场逐底竞赛?
开发 Sprout Life 最初的兴奋之处在于它奏效了!生物体确实会出现、繁殖和变异以改善自身。但是对于进化似乎采取的方向,我们能看到什么?

  • 有机体想要变小- 事实证明,基本实现创建了想要更小的有机体。有机体从大而笨拙的开始,并想出一种变小而高效的方法。随着它们变小,生物体能够更快地繁殖并增加它们在网格内的数量。

小型化的方向并不是直截了当的,我们仍然可以从新能力如何被引入并在人群中传播中学到很多东西。但总的来说,趋势是简单的,简单是无聊的。简单也是一个固定的边界,超出这个边界是不可能的。
 
克服简单性——保持复杂性的初始技术
有几种方法可以鼓励我们的进化模型保持复杂性,从而使事情变得有趣。
  • 成熟到生育成年- 我们可以添加一个参数,说明生物体在达到特定年龄之前无法繁殖。年龄是根据 GOL 的周期数来衡量的。例如,我们可以说一个有机体在 20 个周期过去之前不能生育。这确保了生物体在这段时间内生长并存活下来。更大的生物体意味着有更多机会产生有益的突变,从而创造有趣的行为。
  • 孩子之间的时间- 我们还可以设置一个数字,表示一个有机体在生一个孩子之后必须经过多长时间才能有另一个孩子。我们可以控制一个有机体一次可以有多少个孩子。我们还可以控制每颗种子发芽必须投入多少能量。能量可以是年龄、大小或其他组合的函数。

  
竞争碰撞模式——最终实现增长
为了追求更大、更复杂的生物,让更大的生物赢得碰撞似乎很自然。较大的生物应该完好无损地出来并继续繁殖,而较小的生物有一些细胞被破坏,可能无法繁殖。
  • 竞技模式 - 最大的生存- 竞技模式保持了GOL的基本B3/S23规则,但有以下区别。如果单元格正好有 2 或 3 个朋友(上面定义了“朋友”),它就会存活下来。一个细胞可以存活超过 3 个邻居,只要它的生物体是所有邻居中最大的一个。如果细胞有 2 个朋友和一个来自更大有机体的邻居,它就会死亡,即使它总共有或 3 个邻居。类似地,对于出生,要出生在空旷的空间中,一个细胞需要正好有 3 个朋友,只要出生的细胞属于与该空间相邻的最大生物,其他邻居将被忽略。
  • 超过 8 个邻居中最大的- 检查8 个以上的邻居,看看细胞是否属于最大的生物体,获胜者获得额外奖励,失败者获得额外惩罚。为了获得更好的效果,我们检查每个细胞周围的 5x5 正方形,看看是否有更大的生物体占据了 25 个细胞中的一个。如果是这样,那么细胞就会死亡或不会出生。
  • 尊重亲属——在竞争模式下,细胞不与相关生物竞争。与近亲(共享祖父母的生物)相距甚远的关系不会破坏对方的细胞,即使它们的大小指标不同。
  • 最后增长,缓慢增长- 采取所有这些措施后,当竞争性碰撞模式开启时,我们终于得到了明显的影响。成长是令人兴奋的。向增长的进化是开放式的。一个有机体的大小没有限制,它可以表现出的行为范围也没有限制。

Jar包下载