0

我正在研究细胞自动化模拟。规则如下:

  • 每个单元与其摩尔邻域交互以更新其值。
  • 单元格位于任何无限维网格中。
  • 单元格可以具有随机的初始值。
  • 规则是稳定的,经过一定的迭代,会收敛到一个统一的状态。

对于某种编程语言来说,这不是必需的,所以在这个算法中我们只有基本的数据类型,即 bool、int、它们的 n 维数组等。

我有一个可以随时加载到内存中的任何单元格的初始值。是否有任何算法可以在不循环整个无限网格的情况下计算其稳定值?

具体来说,我正在研究的是规则 B5678/S45678 2 维栩栩如生的细胞自动化。

4

1 回答 1

0

是否有任何算法可以在不循环整个无限网格的情况下计算 [特定单元格的] 稳定值?

对于这个特定的 CA 规则,是的,有点。特别是,您几乎可以肯定地通过仅检查有限数量的周围单元来确定晶格上任何给定单元的最终稳定状态。但是,您可能需要检查的单元数可以任意大。


首先,让我注意到,栩栩如生的元胞自动机规则代码“B5678/S45678”表示“多数投票”规则,其中每个单元在下一个时间步的状态是由其自身组成的九个单元中的当前多数状态,并且它的八个邻居。

该规则恰好满足单调性:将一个或多个细胞的初始状态从“关闭”翻转到“打开”不会导致任何细胞的未来状态从“打开”翻转到“关闭”,反之亦然。换句话说,晶格的未来状态是当前状态的单调递增函数。

这种单调性有一些重要的后果。特别是,这意味着如果您有一个处于“开”状态的细胞簇,四周被处于“关闭”状态的细胞包围(反之亦然),并且如果这个簇当前是稳定的(在某种意义上应用 CA 更新规则一次不会导致集群中的任何单元改变状态),那么它实际上将永远稳定,无论晶格上的其他地方发生什么。

这是因为其他地方的事件可能影响集群的唯一方法是改变它周围的一个或多个细胞的状态。并且由于所有周围的单元格都处于“关闭”状态,而集群中的单元格处于“开启”状态,单调性确保将任何周围单元格的状态更改为“开启”状态不会导致任何单元格的未来状态群集更改为“关闭”。(当然,同样的论点也适用被“开”细胞包围的“关”细胞簇。)

(事实上​​,你并不真的需要“开”的细胞簇实际上被“关”的细胞包围,反之亦然——稳定所需要的只是,即使它周围的所有细胞都是稳定的,簇也是稳定的处于相反状态。)

因此,一般来说,要确定一个细胞的最终状态,只需模拟其周围细胞的时间演化,直到它成为这样一个稳定集群的一部分。

在(几乎可以肯定)有限时间内做到这一点的一种方法是将连续时间步长的 2D 晶格序列视为形成堆叠 2D 切片的 3D 晶格,并计算此 3D 晶格的连续“金字塔形”部分,包括中心单元的状态到时间步n,它的邻居到时间步n - 1,它们的邻居到时间步n - 2,等等。每隔一段时间,检查这个不断增长的金字塔的每一层,看看它们中的任何一层是否包含一个包含中心细胞的稳定簇(在上述意义上)。


假设中心单元实际上最终成为这样一个稳定的有限簇的一部分(随机初始化的晶格上的几乎所有单元最终都遵循此规则;证明留作练习!),此方法最终将找到该簇。然而,根据周围细胞的初始状态,这种稳定可能需要任意长的时间,并且细胞的最终状态可能取决于任意远的其他细胞的状态。

例如,假设我们感兴趣的单元恰好位于格子的一个区域中,其中初始单元状态偶然地排列成棋盘上的正方形:每个单元的四个正交邻居是处于相反状态,而四个对角线邻居都处于与中心单元相同的状态。显然,这种棋盘格排列是局部稳定的,因为每个单元格(几乎没有!)在其邻居中占多数,但是任何方向上的偏离棋盘边缘周围不稳定平衡的任何偏差都将作为连锁反应传播到整个单元格。因此,棋盘上任何特定单元的最终稳定状态将取决于棋盘区域周围的单元的状态,该区域可以任意远。

于 2021-04-28T15:43:22.480 回答