我正在尝试让多个代理同时移动到2d地图上的指定点,并且具有一个代理可以移动的最大距离的上限。 如果可能,所有代理商都应该移动最大距离,否则更少。 如果可能的话,不同代理人的路径不应该交叉,但如果没有,他们仍然可以交叉。
我的想法是某种经过调整的A *算法。 这是一个很好的方法还是有更好的算法来解决这类问题? (老实说,我目前在我的雷达上有A *和dijkstra作为解决这个问题的可能性,所以如果有更好的方法,那么推进正确的方向会很棒)
感谢您的帮助
PS:我还没有任何基础图,所以我仍然对任何想法持开放态度,但当然可以创建一个适用于dijkstra / A *的图表
答案 0 :(得分:2)
您的问题接近于顶点/边缘不相交路径问题,一般来说是NP-Complete,您的受限制版本似乎也是NP-Complete,因为shortest disjoint path in grid graph is NP-Hard与您的受限制版本相关。但是对于网格中的不相交路径有lots of algorithms(即使你有不同的层),所以我建议的最佳选择是使用精确算法之一,找到顶点不相交路径,之后增加大小路径(如果需要),通过遍历一些相邻的顶点。
同样对于网格,你不需要Dijkstra来寻找两个节点之间的路径(即使是最短的路径或具有特定长度的路径),你可以通过运行BFS来实现它并且是O(n)(从顶点v开始BFS) ,并将其相邻数设置为1,然后对于每个相邻的1设置新值为2,...请参阅this答案和编号算法部分。)
如果你在动态情境中寻找一些启发式方法,那么this问题也会有所帮助。