【问题标题】:Fastest-path algorithm最快路径算法
【发布时间】:2010-09-29 19:31:45
【问题描述】:

我目前正在实施一个导航系统,用于通过欧洲进行路由。到目前为止,我已经实现了最短路径(Dijkstra 和 A*)。这是最简单的部分,现在我需要一些最快路径的算法。它必须快速可靠。

我知道这可以通过为道路质量(例如 1 条高速公路、2 条主干道......)分配值来完成,然后将这些值与路线成本相乘,最后使用 Dijkstra 或 A*,但这并不复杂够了。

我正在寻找更准确的算法。地图本身包含各种数据,比如道路质量、限速、红绿灯位置等,我想用它。

有没有什么好的算法呢?或者至少是对 A* 的良好修改?

【问题讨论】:

  • “最快”路径算法只是一种最短路径算法,其中边缘权重是加权旅行时间而不是距离。 A* 仍然是你最好的选择,你只需要想出一个好方法来根据可用数据估计权重(并想出一个启发式方法)。
  • 为什么在计算边缘成本时不能将所有因素都考虑在内(就像您建议的道路质量一样)?
  • 我认为必须有更好的方法。但如果每个人都认为修改后的 A* 是最好的解决方案,那么我会接受它。
  • A* 中没有规定你应该选择什么作为边权重。所以从某种意义上说,它仍然不是 A* 的修改版。

标签: algorithm path-finding


【解决方案1】:

在最短路径的实现中,您选择距离作为边的权重。

现在,如果您想找到最快的路径,您只需选择预期行程时间作为边的权重。同样,如果您想要最可靠的路径,您可以选择一些“可靠性”度量作为边缘的权重。

A*(尽管并不总是最优的,因为它依赖于启发式函数)可能是此类应用程序的最佳选择。如果你的 A* 不够准确,我建议你要么选择 Dijkstras,要么花一些时间调整和改进你的启发式函数。

【讨论】:

  • A* 总是最优的,只要它的启发式是可以接受的,至少按照“最优”的计算机科学定义
  • 嗯.. 我不确定我是否明白在这种情况下可接受的含义。但是,我怀疑对于具有任意边权重的图是否有可能具有这样的启发式函数。
  • 你当然可以 - 这些情况下的可接受函数很容易找到(例如,对于实际距离 - 你只需测量架空线(你是这么称呼它的吗?))
  • 感谢您的回答。将不同的权重与欧几里得距离等简单的启发式方法混合真的可以吗?我想我至少需要调整启发式以加权。
  • 你的启发式函数应该尽可能准确地估计剩余距离/行程时间/什么不是。
【解决方案2】:

这取决于您所说的“最快”路径是什么意思。如果您知道您可以在道路的每一段上行驶的平均速度,那么您可以转换您的图表,使边缘包含“行驶时间”而不是“距离”。然后你可以在新图上做一个最短路径算法。

不过,您似乎提到这还不够好。我认为问题在于您必须定义“最快”的含义。道路质量如何影响速度?红绿灯呢?这些都是你必须找到一种方法来解释的变量。如果您作为人类不知道您将使用的指标,那么计算机将很难做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2019-03-23
    • 1970-01-01
    相关资源
    最近更新 更多