我第一次尝试实现协作扩散行为时遇到了一个问题。我知道如何让障碍物不扩散气味,以及如何在其中一个友好代理已经追逐气味时减弱对其他友好代理的气味影响。但是,我不明白如何让气味在矩阵中均匀分布。对我来说,似乎无论以何种方式在矩阵中迭代,都会导致我在迭代后检查的瓦片中气味扩散得更快更好。我的意思是,如果我从i迭代到maxRows,从j迭代到maxCols,然后在每个瓦片上应用扩散方程,那么在目标的‘北’和‘西’侧,我只有一个瓦片具有正确的潜力,而在‘东’和‘南’侧,由于它们的邻居已经分配了潜力,我会有更多的瓦片。如何才能让这些值均匀分布呢?从矩阵的两个极端进行双重迭代然后合并结果似乎会消耗大量内存,目标导向的方法也是如此,因为如果我试图从目标开始并围绕它们工作,我将不得不为每个目标和每个已分配潜力的瓦片执行计算,这意味着每回合我将不得不为4^(自开始扩散的回合数)*目标数量多执行一次,这在大矩阵中有很多目标时似乎效率低下。
我的问题是如何以一种高效的方式在矩阵中均匀分布值。我使用的是AiChallenge Ants,如果这有帮助的话!
我提前感谢你们,并为我在此帖中犯的语法错误表示歉意。
回答:
可能有更好的解决方案,但最简单的做法是使用类似于生命游戏简单实现的方法。
你有两个缓冲区。一个包含当前“代”的气味(如果你是多任务处理,可以锁定它以便只有读取者可以查看它)…另一个是正在计算的下一代气味。你只从当前代“混合”气味。
一旦完成,你只需通过更改指针/引用来交换两个缓冲区。
另一种思考方式是让所有瓦片通过询问它们的邻居并进行平均来计算它们的新气味。当被邻居询问它们的气味水平时,它们报告之前通过的前一轮计算的值。只有在所有人完成计算后,新气味才被锁定。