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

标签 java cellular-automata

我正在尝试实现一个模拟波行为的元胞自动机。我正在使用冯·诺依曼邻域和 r=2 like here

我的问题是:我应该如何计算边界上单元的状态?

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

单元格的状态是 (-1,1) 范围内的 float ,其中 0 是陆地。在“常规”单元上,我可以获取邻居的状态,但是当邻居较少时(<12),结果就是错误的,并“生成”新的波。

最佳答案

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

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

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

好的一面:通过平移使晶格不变,从而避免任何“边界效应”,这应该会导致更自然的演化。 坏的一面:在较小的尺度上,这可能会产生不良影响,例如共振。

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

  • 惰性边界条件:考虑晶格的边界具有吸收规则,也就是说,它们模拟始终具有相同惰性状态的“外部”单元。
  • 示例:a[-1][0] = 10e-6 左右,因为 0 表示土地。

    好的一面:可以避免共振效应。 坏的一面:潜在的边界效应,以及缺乏外部波源。

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

  • 要有创意...
  • 示例:所有边界单元都是陆地 (0)。

    关于java - 元胞自动机 - 在边界元上做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34252122/

    相关文章:

    java - Bukkit 将玩家皮肤从服务器更改为 png(无效签名)

    java - 对话框 fragment 无法转换为 android.app.activity

    wolfram-mathematica - Stephen Wolfram 的规则 30 模式说明

    multidimensional-array - 生命处理游戏

    objective-c - 将元胞自动机状态简化为一组向量路径

    java - Cassandra Java ORM

    java - 合并 2 个具有相同元素的 XML 文件并将 id 分配给唯一的项目

    java - 如何启用 Aptana 的 Java 支持?没有 Java 支持或任何插件。添加软件没有 URL

    c - 为什么 C 语言的控制台图形这么慢?

    c - 实现元胞自动机? "Rule 110"