码迷,mamicode.com
首页 > 编程语言 > 详细

算法系列:导航/路径规划算法

时间:2017-10-20 10:05:57      阅读:2576      评论:0      收藏:0      [点我收藏+]

标签:pdf   hive   无法   提前   根据   运用   csdn   语言   神经网络   

5 导航/路径规划
智能手机的定位和导航功能:
1、利用卫星定位;
2、地址的识别;
3、根据用户输入的起点和终点,在地图上规划最短路线和最快路线。
5.1 卫星定位


5.2 地址分析和有限状态机
地址的描述虽然看上去简单,但是他依然是比较复杂的上下文有关的文法。有许多识别和分析的方法,最有效的是有限状态机。
有限状态机是一个特殊的有向图,它包括一些状态(节点)和连接这些状态的有向弧。下图所示是一个识别中国地址的有限状态机的简单例子。

 

每一个有限状态机都有一个开始状态和一个终止状态,以及若干中间状态。每一条弧上带有从一个状态进入下一个状态的条件。如果一条地址能从状态机的开始状态经过状态机的若干中间状态,走到终止状态,则这条地址有效,否则无效。
使用有限状态机识别地址,关键要解决两个问题,即通过一些有效的地址建立状态机,以及给定一个有限状态机后,地址字串的匹配算法。这两个问题都有现成的方法。
上述方法在实用中会有一些问题:当用户输入的地址不太标准或有错别字时,有限状态机会束手无策,因为它只能进行严格匹配。
为了解决这个问题,我们希望看到可以进行模糊匹配,并给出一个字串为正确地址的可能性。为了实现这一目的,科学家们提出了基于概率的有限状态机。这种基于概率的有限状态机和离散的马尔可夫链基本上等效。
AT&T 的三位科学家编写成一个通用的基于概率的有限状态机 C 语言工具库,后来开放了源代码。另外,Google Now 的引擎和 AT&T 的有限状态机工具库从功能上讲完全等价。
www.cs.nyu.edu/~mohri/pub/csl01.pdf


5.3 全球导航和动态规划
全球导航的关键算法是动态规划算法。


5.4 算法列举
感觉DP解路径规划问题划分一直是个大麻烦,相对于经典的路径规划算法,也没体现出巨大优势。
早上在cnki下了一些相关论文(只讨论主干方法,因为学术界喜欢在算法上做优化以及几种算法的桥接,比如基于dijkstra与遗传免疫算法的XX研究当做为dijkstra)
1.对于静态路径规划,大多采用dijkstra,A,floyd,dp等
2.对于NP难问题,如TSP及变形(物流配送等),则采用遗传算法,蚁群算法,模拟退火,神经网络等

问题:
1.在实际的商业应用中,采用的是哪些算法或者理论呢?
2.路径规划是提前规划好以后存储(像网页的索引),还是收到请求后实时规划的结果?


1、
明确一点,基本的图搜索算法dijkstra是无法满足互联网地图检索实时响应这种性能要求,所以各家公司都有各自的预处理方法:分层或者预计算。具体采用何种方式,这取决于采取的加速算法相关。在2008年前后,以KIT(http://algo2.iti.kit.edu/routeplanning.php)为主的研究院产出了多个路径规划加速算法,其中以contraction hierarchies 和 highway hierarchies较出名,加之微软研究院提出的Customizable Route Planning,与传统的A-star,基本上支撑了目前工业界地图产品的路径规划服务。

A-star:https://en.wikipedia.org/wiki/A*_search_algorithm


CH:http://algo2.iti.kit.edu/schultes/hwy/contract.pdf

HH:http://algo2.iti.kit.edu/documents/routeplanning/esa06HwyHierarchies.pdf

CRP:http://research.microsoft.com/pubs/145688/crp-sea.pdf


2、
题主提到的那些主要是路径规划最基础的算法,在实际商业运用中,这些公司会在它们的基础上作一些改进,下面简单补充两点。

由于请求量巨大,一些比较经典的路径规划请求(如天安门-鸟巢)就没有必要再实时规划,而是直接使用别的用户请求过的、已经存储好的规划结果。(典型的空间换时间,为了用户的响应速度,google等公司是舍得花这点硬盘钱的)

再考虑一下路径的优化问题。由于现实中的道路情况还要考虑路况、环境等更多的因素,基础算法单纯基于图得到的“最优”路径,往往不一定是用户最想要的。这时候导航提供商可能会给出一些次优的路径,加入到检索结果中,供给用户选择。再通过用户的反馈进行学习,从而得到更加符合用户需求的路径规划结果。一个例子是,google map会同时给出不同的几条线路,供给用户选择,其中包含了路径最短、换乘最少等等。还有,google map中得到检索结果后,用户可以在地图上“拖动”路线,以得到更合适的路线,这些用户“拖动”的信息,都是会发送到服务器的


3、
Dijkstra是一种非常经典的方法,这种方法已经很成熟。通过对权值的计算,可以一次性计算出所有出发点到目的地的所有路径信息,目前在一个城市里,基本使用这种方法已经足够。但是,实现路径规划只是基本的,想要将导航做的精确,需要对行驶在路段上的车辆进行统计,故障路段进行判断,并实时调整路径。

5.4.1 Dijkstra 算法
http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html

 


5.4.2 A* 算法
http://blog.csdn.net/zgwangbo/article/details/52078338

http://blog.csdn.net/hitwhylz/article/details/23089415

http://blog.csdn.net/b2b160/article/details/4057781

 

5.4.3 Floyd 算法
http://developer.51cto.com/art/201403/433874.htm

 

5.4.4 SPFA 算法
http://www.cnblogs.com/bofengyu/p/5004398.html

算法系列:导航/路径规划算法

标签:pdf   hive   无法   提前   根据   运用   csdn   语言   神经网络   

原文地址:http://www.cnblogs.com/noryes/p/7696668.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!