我正在尝试开发细胞自动机模拟,问题是我希望得到每个细胞的近邻和远邻(如蓝色和米色所示)并确定哪些细胞死亡并使用一些规则带来他们生活。因此,在每次迭代中,我将遍历数组中的所有单元格,并且我希望以某种方式有效地获取这些单元格的所有近邻和远邻。
然而,取决于网格上单元格的位置,只有一些邻居可用,而我到目前为止这样做的唯一方法是使用getNeighbours(cell)方法返回一个包含所有内容的列表该单元格的可用邻居,我将不得不迭代以获得非生存的邻居。
getNeighbours(cell):
If cell.row > 0:
neighbours.add((coordinate,value),CLOSE_TOP_MIDDLE)
If cell.row > 1:
neighbours.add((coordinate,value),FAR_TOP_MIDDLE)
[...]
然而,这需要很多开销,并且需要对网格中的每个单元格进行大量比较!
是否存在通常用于细胞自动化的通用方法?也许我可以使用任何数据结构?因为到目前为止,如果网格足够大,每次迭代都会花费很多时间。
答案 0 :(得分:1)
根据您使用的编程语言,可能会有包提供所需的功能。例如,在Java中,存在一个名为JCASim: Cellular automata simulation system的包。
在CA中查找邻居可能是一项非常重要的任务(例如,如果您使用六边形单元格等)。甚至必须定义术语“邻居”:Moore neighborhood或von Neumann neighborhood(这些维基百科文章也提供了一些伪代码)。
在您的情况下,您可以自己实施邻居搜索:
假设您的CA由n
行和n
列(标记为0,...,n-1)组成,如图所示。