元胞自动机 - 在边界单元上做什么?

Cellular automata - what to do on boundary cell?

我正在尝试实现模拟波行为的元胞自动机。我在 r=2 like here

中使用 Von Neumann 邻域

我的问题是:边界上cell的状态应该怎么统计?

例如:我有一个数组 a,我想计算 a[0][0] 的值。

细胞状态在 (-1,1) 范围内浮动,其中 0 是陆地。在 "regular" 个单元格上,我可以获取邻居的状态,但是当邻居较少(<12)时,结果是错误的,"generates" 一个新的浪潮。

您的问题有不同的解决方案。

  1. 周期性边界条件:将晶格视为环面并使用模来循环单元格。

示例:a[-1][0] = a[n-2][0]

好的一面:这避免了任何 "border-effect" 通过平移使晶格不变,这应该会导致更自然的进化。 不好的一面:在较小的尺度下,这可能会产生不良影响,例如共振。

如果您想对模型进行定量研究,例如相变、平均场等,这种方法特别适合。

  1. 惰性边界条件:考虑晶格的边界具有吸收规则,即它们模拟 "external" 始终具有相同惰性状态的单元。

示例:a[-1][0] = 10e-6 左右,因为 0 表示陆地。

好的一面:你避免了共振效应。 不好的一面:潜在的边界效应,以及没有外部波源。

这种方法更适合定性用途:检查您的实施的有效性,寻找模型人工制品(例如,类似漩涡的模式?)或简单地展示一个对观察者来说看起来有机的系统。

  1. 要有创意...

示例:所有边界单元格都是陆地 (0)。