3

前段时间我写了一个像元胞自动机一样的 Wa-Tor(参见 Wikipedia),但是有更多的物种和更聪明的物种。除了进行大量微调以获得稳定的系统外,它非常简单并且运行良好。然而,从那时起,我问自己(现在是你)如何“真实地”更新单元格。

我的“世界”是一个网格,总是从左上角到右下角更新。IMO 这也意味着靠近顶部和左侧的单元格总是更快。因此,例如单元格 [3, 3] 中的一条鱼可以在更新之前被 [3, 2] 中的鲨鱼吃掉。如果单元格的位置相反,鱼总是会从鲨鱼身上逃脱,因为它可以在鲨鱼更新之前离开鲨鱼。

我是否正确认为这是一个“问题”(或至少不现实)?

IMO 在现实环境中应该同时更新所有单元格,但我不知道如何实现类似的东西。我可以想象的另一种方法是以“打乱”的顺序评估单元格。

你会如何解决这个问题/这些问题通常是如何解决的?

4

2 回答 2

1

IMO 在现实环境中应该同时更新所有单元格,但我不知道如何实现类似的东西。

这是我建议的方法。有两个网格,一个“旧”网格和一个“新/当前”网格。计算下一代时,以旧网格为基础进行计算,并将结果写入新网格。然后显示新的网格。现在交换指针,使新网格现在是“旧”网格,旧网格变成新网格。重复。

于 2012-01-13T17:01:31.080 回答
1

正如@Rogach 提到的,同时更新是行不通的。因为您的元胞自动机是非确定性的,所以两条鱼不会知道彼此的下一个位置并可能发生碰撞。

鉴于您的元胞自动机是非确定性的,我认为最好的解决方案是以非确定性的方式更新您的网格,即。随机。选择随机单元格进行更新。要么随机选择单元格并跟踪您更新了哪个单元格,因此每个单元格在每个刻度上准确更新一次,或者随机选择单元格并且不打扰跟踪。第二种方法会更容易,但有可能会更频繁地更新某些单元。如果您有一个均匀分布的随机函数,则平均所有单元格都会更新相同的数量。

于 2012-01-15T13:19:32.723 回答