algorithm - 如何从A 指向点B 地图算法计算路线?

  显示原文与译文双语对照的内容

地图提供商( 如谷歌或者雅虎) ! 地图) 建议方向?

对于业务金额反射distances,我是说,他们很可能有现实世界的某种形式的数据,当然包括距离同时也可能是诸如驾驶速率,是否存在有人行道,火车班次,等等 但首先假设数据是以一种更简单的格式,假设有一个非常大的有向 graph. 我希望能够快速计算从任意一点到另一个点的方向。 有时近( 在一个城市内) 虽然有时,他们也会因更拆开( cross-country ) 这些特征点。

像 代克思托演算法 (Dijkstra's algorithm) 这样的图形算法将无法工作,因为图形是巨大的。 幸运的是,像A*这样的启发式算法可能会工作。 然而,我们的数据是非常结构化的,也许某种分层方法可以工作? ( 例如在相距很远的"密钥"点之间存储预计算方向) 。 然后两个far-away点的方向将涉及到指向一个关键点的局部方向,指向另一个关键点的全局方向,然后再指向局部方向。)

实际使用了哪些算法?

这个问题是通过寻找在线映射方向中的怪癖而产生的。 三角形不等式相反,有时 谷歌地图 认为 X-Z 需要更长的时间,并且比在 X-Y-Z中使用中间点还要远。 但是也许他们的行走方向也为另一个参数优化了?

这是另一个三角形不等式,建议( 给我) 使用某种分层方法: X-ZX-Y-Z 。 前者似乎使用了著名的Boulevard Sebastopol,尽管它有点偏离了方向。

当时的原始 post, 编辑: 这两个这些例子的工作似乎了,而是两者都砍价

时间:

作为一个在一个映射公司工作 18月的人,它包括在路由算法上工作。 是的,是工作的,有几个修改:

  • 从源到dest的一次,你从两端开始,两边展开直到它们相遇。 这消除了大约一半的工作( 2 *pi* ( R/2 ) ^2 vs pi*r^2.
  • 为了避免在源和目标之间搜索每个城市的back-alleys,你可以有几个图层数据: 一个只包含公路的'公路'层,一个只包含二级街道的'次要'层等等。 然后,你只浏览较详细层的较小部分,根据需要展开。 显然,这个描述省去了很多细节,但是你得到了。

随着这些线路的修改,你可以在一个非常合理的时间内进行跨域路由。

这个问题在过去的几年中一直是一个活跃的研究领域。 它的主要原理是先做一个图形上的预处理,它们一旦加快所有 以下查询。 通过这个额外的信息路由,可以快速计算出。 然而,代克思托演算法 (Dijkstra's algorithm) 是所有优化的基础。

蜘蛛描述了基于分层信息的双向搜索和边缘修剪的用法。 这些加速技术工作得很好,但是最近的算法在所有方面都优于这些技术。 在大陆上道路network,与现有算法中的一个最短路径可以计算相当耗时少于一毫秒. 未经修改的一种快速实现的Dijkstra算法需要大概 10秒

文章工程快速路线规划算法给出了该领域研究的进展。 有关更多信息,请参阅纸张参考。

最快速的已知算法不使用关于数据的等级状态的信息,换句话说,如果是一个公路或者一个本地道路。 相反,他们在预处理步骤中计算一个自己的层次,优化路线规划。 然后可以使用这个预定位来修剪搜索: 在远离起点和目标慢速道路时,在 代克思托演算法 (Dijkstra's algorithm) 期间不需要考虑。 于该result,相关的好处是能很好的在 性能和正确性 guarantee.

第一个优化的路线规划算法只处理静态路网,这意味着图中的边缘具有固定的成本值。 这在实践中是不正确的,因为我们想要考虑到诸如交通堵塞或者车辆依赖restrictrions之类的动态信息。 最近的算法也可以处理此类问题,但仍然存在问题,研究正在进行。

如果你需要的最短路径的距离来计算一个矩阵中的的货郎担问题的解决方案,然后你可能感兴趣的,它包含了所有你的源和目标之间的距离。 为此,你可以考虑计算Many-to-Many最短路径使用 Highway 。 注意,最近 2年的更新方法已经改进了。

仅仅解决三角形不等式冲突,希望它们优化的额外因素是常识。 你不一定要最短的还是最快的方法,因为这样会导致混沌销毁 。 如果你想让你的方向要更喜欢种族的航线都还truck-friendly并能对付每个sat-nav-following驱动程序送走他们,你很快放弃三角不等式 [1] 。

于相关如果Y 是X 和Z 之间的一个狭窄的住宅街道,则通常可以通过Y 如果用户只想使用快捷明确 asks. 他们问你要X-Z主要道路,他们应该坚持,即使它有点进一步,要多花费一点时间。 于任何人的任何more,它类似于悖论相关 braess - 如果每个人都试图让电影最短,最快的路径,则导致拥塞意味着它不是最快的route. 从这里我们从图论中脱离到博弈论理论中。

[1] 事实上,任何希望,对产生的距离将是一个距离函数在数学意义上死去当你允许单向道路和失去的对称性要求。 失去三角形不等式也只是在伤口中摩擦盐。

我做了很多次,实际上,尝试几种不同的方法。 根据映射的大小( 地理),你可能想考虑使用haversine函数作为启发。

我所做的最好的解决方案是使用带直线距离作为启发函数的A* 。 但是你需要在地图上的每个点( 相交或者顶点) 坐标。 你也可以为启发函数 i.e. 尝试不同的权重


f(n) = k*h(n) + g(n)

其中k 是大于 0的常量。

...