需要一个具有多个目标的星型搜索算法的想法

时间:2012-03-04 14:49:29

标签: algorithm a-star

具有指定目标的星型搜索算法非常简单。但是,如果图表中有多个目标,该怎么办?例如;您可能希望找到必须包含先前指定节点的最短路径。这里的约束是说你的路径必须包括A,B和C节点(或更多),而不仅仅是找到节点A或B或C的路径。当然,该图包括一个或多个A,B,C类型节点。所以有一个问题我如何适应 A星搜索算法多个目标

编辑:我们可以访问不止一个节点。

3 个答案:

答案 0 :(得分:3)

您描述的是路径条件而非目标条件。像所有搜索算法一样,A *正在寻找目标的路径[可能在一组,目标,没有问题]。

您的问题[针对一般情况]至少与Traveling Salesman Problem一样困难,因此此问题为NP-Hard

减少很简单:给定一个TSP实例 - 找到从某个vv的最短路径,这样路径就会经过所有顶点[约束]。您只需使用不同的标记标记每个顶点即可。

但请注意,A*算法在目标顶点集中找到到顶点的最短路径没有问题。请记住,A *基于Dijkstra's Algorithm,它从单个来源找到所有顶点的最短路径。

答案 1 :(得分:2)

您有一组z的所有节点,目标节点G,并设置a个子目标节点y。从S开始节点开始,指向ay中所有节点的路径。然后,从那些路径到ay中的节点,但是如果路由已经通过c节点,例如忽略该分支的所有c个节点。剔除从最终目标移开的分支,直到您阅读最终目标状态并且具有贯穿所有已知子目标状态的路径。

希望这是有道理的。我很快就会得到一个图表,这可能有所帮助。

答案 2 :(得分:2)

嗯..计算从S-> A,S-> B,S-> C的最短路径,选择最短路径(比如说B),计算从B-> C和B-的最短路径; A,选择最短(比如C),将最短路径C计算为A.然后将路径一起添加。

[编辑] 好吧,不是那么简单。我认为您可以使用A *来评估Start,A,B,C之间所有排列的最短路径(其中包括S->目标集中的每个节点,A中的每个节点到B中的每个节点等)并选择最短的组合。