通常,当我们对一个目标进行 A* 搜索时,使用曼哈顿距离作为启发式函数就足够了。但是,对于多个目标,这似乎不是最有用的方法。当我们有多个目标时,我们必须使用哪种启发式方法?
对多个目标进行 A* 搜索时使用什么启发式方法?
如果通过“访问多个目标”,您的意思是“以最快的顺序访问多个点”,那么您不再是一个简单的寻路式搜索问题,而是一个优化问题。这大致是Russell 和 Norvig 的搜索部分的第 3 章和第 6 章之间的区别。
为此,您不能只更改启发式方法,而是需要重新构建问题:
而不是您搜索中的状态是位置,它们应该是tours。每个州都是您需要访问的所有地点的列表,按特定顺序排列。
与其说动作是从一个地方到另一个地方的运动,不如说是从一个旅行到另一个旅行的转变。例如,如果您交换访问两个相邻位置的顺序,那么您将获得不同的游览。这为您提供了一种在旅行之间“移动”的方式。
解决方案意味着尽快访问所有位置。如果您知道如何在两个地点之间穿梭,只需存储距离,然后将所有距离相加即可得出游览费用。如果你不知道,你可以从每个地方到另一个地方运行一次 A*,然后缓存距离。
启发式将取决于您的域。一个合理的开始可能是假设您可以从您已经访问过的最近的其他位置访问每个位置。一般来说,基于最小生成树思想的启发式算法对于这个领域是有效的。
不过,真正的答案是尝试一种针对此类问题的技术,例如局部搜索算法。请注意,如果我们知道在任何两点之间移动的成本,我们就可以采用一种贪婪的方法:每次都做出最大程度的改进。如果您只想要一个好的解决方案,这通常比在实践中等待 A* 更快,但它不需要是最好的解决方案。
遗传算法正在为具有多个目标[目标]的问题提供有希望的结果。
http://www.iitk.ac.in/kangal/Deb_NSGA-II.pdf 上述论文将为多目标提供最佳算法
我看到目标是使用 A* 算法实现多个目标。因此,如果您的问题更像是旅行推销员问题,听起来就是这样,您可以参考这篇文章: https ://stackoverflow.com/questions/4453477/using-a-to-solve-travelling-销售员 该问题可以转化为图搜索问题,并且可以利用最小生成树。A-star 可用于计算边缘权重。