A *的不止一条路径?

时间:2011-11-17 13:54:51

标签: a-star

我写了一个很好用的A *。它给了我两个节点之间的最短路径。但是,我希望有两条甚至三条路径。最好的,第二个最好的和第三个路径(如果有多个路径可用)。有点像Google地图上的路线,您可以在两个城市之间看到多个选项。

这可能是A *还是我坚持只获得最好的结果?如果有可能,请指出正确的方向。如果用A *不可能,我应该看看哪种算法可以做到这一点?

我对A *的实现来自维基百科上的伪代码(http://en.wikipedia.org/wiki/A * _ search_algorithm#Pseudocode),并且是用VB .NET编写的。如果这是重要的。

谢谢。

3 个答案:

答案 0 :(得分:1)

执行A *搜索时,您可以更改优先级队列的状态。当你完成时,你会把最接近终点的最佳顶点收起来。还有一些其他顶点已经接近完成,你也可以从队列中偷看它们并获得“另一条最佳路径”。

但是你可以得到不同的结果:有时路径只能在最后一个边缘区分。 像这样:-------< =>完成。如果真的有另一条长度相近的最佳路径,那么你会发现它。

我认为Google提供了许多路径,因为它们同时使用不同的指标。度量标准给出了不同的结果,并使用不同的参数解决了路径优化问题。

答案 1 :(得分:0)

获得确切的第二短路径需要this

如果您不关心这种精确度,那么您可以在最短路径中引入一些随机性:

  1. 从最短路径剪切顶点或边缘并重新计算。
  2. 在最短路径的某个地方,在某个地方故意转错并从那里重新计算。

答案 2 :(得分:0)

使用相同的图表重新计算A *算法,但权重不同。对于最快的旅程,每个弧的加权应该是遍历该弧的时间,即弧的长度除以沿其行进的预期速度。

您可以仅使用距离而不是预期速度创建一组新的权重(为每个弧指定相同的速度会更方便)。这将是最短的路径,而不是最快的路径。

然后,您可以在最短和最快之间创建折衷方案。您现在有三条(可能)不同的路线。

其他选择:

(i)在每个弧上加一个权重,以考虑开始和结束时的交叉点;修补这个重量,让你创造最小化转弯的路线。您还可以为非常急转弯添加额外的重量,或者在交通流量上转弯(在英国,澳大利亚,印度等地右转;在美国,法国等地转弯)。

(ii)通过将高速公路/高速公路的成本设定为非常高的价值,创建一条避开高速公路/高速公路的路线。

(iii)使用一天中的时间或实际的在线信息来估算交通流量并根据该数据修改权重。

相关问题