Algorithm 类动物细胞自动机。单元格的更新顺序是什么?

Algorithm 类动物细胞自动机。单元格的更新顺序是什么?,algorithm,language-agnostic,synchronization,automata,artificial-life,Algorithm,Language Agnostic,Synchronization,Automata,Artificial Life,不久前,我写了一个类似于细胞自动机(cellularautomata)的程序,但是有更多的物种和更聪明的物种。除了进行大量微调以获得稳定的系统外,它非常简单且工作良好。然而,从那时起,我在问我自己(现在是你)如何“现实地”更新细胞 我的“世界”是一个网格,总是从左上角到右下角进行更新。依我看,这也意味着靠近顶部和左侧的单元格总是更快。例如,单元格[3,3]中的鱼在更新之前可以被[3,2]中的鲨鱼吃掉。如果细胞的位置相反,鱼总是会逃离鲨鱼,因为它可以在更新之前离开鲨鱼 我认为这是一个“问题”(或者

不久前,我写了一个类似于细胞自动机(cellularautomata)的程序,但是有更多的物种和更聪明的物种。除了进行大量微调以获得稳定的系统外,它非常简单且工作良好。然而,从那时起,我在问我自己(现在是你)如何“现实地”更新细胞

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

我认为这是一个“问题”(或者至少是不现实的)对吗

在现实环境中,所有单元格都应该同时更新,但我不知道如何实现这样的功能。我可以想象的另一种方法是以“无序”顺序计算单元格

你将如何解决这个问题

在现实环境中,所有单元格都应该同时更新,但我不知道如何实现这样的功能


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

正如@Rogach提到的,同步更新不起作用。因为你的细胞自动机是不确定的,两条鱼不知道彼此的下一个位置,可能会碰撞


考虑到你的细胞自动机是非确定性的,我认为最好的解决方案是以非确定性的方式更新你的网格,即随机更新。随机选取要更新的单元格。或者随机选取单元格并跟踪更新的单元格,这样每个单元格每勾选一次都会准确更新,或者随机选取单元格而不必跟踪。第二种方法会更简单,但有些单元格可能会更新得稍微频繁一些。如果你有一个均匀分布的随机函数,平均来说所有的单元格都会更新相同的数量。

但是如果两条鱼决定在同一个回合去同一个单元格呢?@Rogach很好,我的答案是基于我对康威《生命游戏》的经验。你是对的,我不认为同样的方法在这里会起作用。我也在想类似的事情,但正如罗格所说,这可能会导致一些棘手的情况。也许可以分多个步骤来完成。比如:首先计划他们想做什么(移动、进食、繁殖等),然后用不会引起冲突的行动更新新网格,然后解决所有冲突,直到没有冲突。那么,最大的问题就是如何解决这些冲突……这也是我更喜欢的方式。但由于阿芬勒也提到了“一个更聪明的物种”,随机更新会使编写人工智能变得更困难:)顺便说一句,“不必费心跟踪”的方式可能更适合“现实”的方式——毕竟,现实世界中每种动物的移动速度都不一样:)抱歉,回复太晚了。。。这听起来比我使用的方法更好!我也在思考生命形式和细胞之间的区别。如果我有一份必须更新的个人名单(不管他们生活在哪个细胞),那么把名单整理一下,然后更新每个人也可以。然而,我不确定这是否仍然被视为细胞自动机。另一方面,如果我用这些单元格来做的话,确实有可能同一个人(但不是同一个单元格)会被更新几次。。。