确定最快路线的算法?


17

假设我们要从1转到5。最短的路线将是1-4-3-5(总计:60公里)。

图形

我们可以使用Dijkstra的算法来做到这一点。

现在的问题是,由于交通拥堵或其他因素,最短的路线不一定总是最快的路线。

例如:

  • 1-2被认为经常发生交通拥堵,因此应避免这种情况。
  • 突然在4-3发生车祸,因此也应该避免。
  • 等等...

因此,由于没有交通阻塞/事故,我们大概可以在1-4-5号路线上加速行驶,因此速度会更快达到5。

好吧,这是总体思路,我还没有考虑更多细节。

有没有解决这个问题的算法?


3
这是作业吗?这不只是en.wikipedia.org/wiki/Travelling_salesman_problem遍历加权图吗?
StuperUser 2011年

9
@StuperUser:不,TSP是所有节点的电路,没有重复。在示例情况下,例如,无需命中节点2。
David Thornley

2
@DavidThornley我明白了。那么Dijkstra是加权图中最短的路线?TSP是否遍历每个节点?
StuperUser 2011年

1
@Stuper:最短遍历,是的
BlueRaja-Danny Pflughoeft 2011年

2
@StuperUser,仅供参考,TSP是一个NP完全问题,没有可以在多项式时间内运行的解决方案。...所以现在你知道了。
riwalk

Answers:


5

由于您将拥塞带入了画面,因此请小心不要被Braess'Paradox抓住。如果每个人都选择最佳路径,则将导致每个人的旅行时间变差。


49

是:Dijkstra

迪克斯特拉(Dijkstra)在这种情况下也一样有效。
您仅使用时间而不是距离作为每个弧的权重。


9
通常,对迪克斯特拉(Dijkstra)的“距离”进行加权,以考虑各种情况,成本/通行费,高速公路偏好,速度限制-仅使用距离只是最简单的方法。这就是使算法如此聪明的原因
Martin Beckett

6
尽管Dijsktra会这样做,但我通常会选择A *进行任何严肃的寻路工作;启发式方法将有很大帮助。
Mircea Chirea 2011年

6
链接:A *搜索算法。这是Dijkstra方法的扩展。
mgkrebbs 2011年

只要有适用的启发式方法,就性能而言,A *将优于Dijkstra。
bummzack 2011年

考虑到我们似乎已经考虑到许多因素(例如交通拥堵),在这里找到可允许的启发式方法将有些困难。
pwny 2012年

16

是。Dijkstra的算法将解决此问题。

您遇到的问题是,您自动假定最短路径等于行进的距离,而实际上它更恰当地等于采取路线的成本。

如果一条路径有障碍,则其COST应该更高,并且该算法仍然适用。


是的,抱歉,如果我没有使用正确的措词。我的意思是“最便捷的路线”(最省钱)
anta40 2011年

11

您应该只能够用节点之间的时间替换您的距离,并以相同的方式解决它。


10

迪克斯特拉

如前所述,它不仅用于最短距离。我相信该动画可以很好地理解Dijkstra的“力量”(因为缺少更好的词):

迪克斯特拉

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.