2

我试图让多个代理同时移动到 2d 地图上的指定点,并且对一个代理可以移动的最大距离有一个上限。如果可能,所有代理都应移动最大距离,否则应减少。如果可能,不同代理的路径不应该交叉,但如果没有,它们仍然可以交叉。

我的想法是某种调整后的 A* 算法。这是一个好方法还是有更好的算法来解决这类问题?(老实说,我目前在我的雷达上有 A* 和 dijkstra 作为解决这个问题的可能性,所以如果有更好的东西,朝着正确的方向推进会很棒)

感谢您的帮助

PS:我还没有任何类型的基础图,所以我仍然对任何想法持开放态度,但当然可以创建一个适用于 dijkstra/A* 的图

4

1 回答 1

2

您的问题接近顶点/边不相交路径问题,通常是 NP-Complete,您的受限版本似乎也是 NP-Complete,因为网格图中最短的不相交路径是 NP-Hard,这与您的受限版本有关。但是网格中有很多不相交路径的算法(即使你有不同的层),所以我建议的最佳选择是使用精确算法之一,找到顶点不相交路径,然后增加路径的大小(如果需要),通过遍历一些相邻的顶点。

同样对于网格,您不需要 Dijkstra 来查找两个节点之间的路径(甚至是最短路径或具有特定长度的路径),您可以简单地通过运行 BFS 并且是 O(n) 来完成(从顶点 v 开始 BFS,并设置其相邻的数量为 1,然后为每个相邻的 1 将新值设置为 2,...请参阅答案和编号算法部分)。

如果您在动态情况下寻找一些启发式方法,这个问题可能也会有所帮助。

于 2013-10-17T16:26:33.010 回答