基於移動設備的路徑規劃的思考

一、算法

 

      在GPS導航應用中,路徑規劃是個最基本也是最重要的功能。常用的最短路徑算法是迪傑斯特拉(Dijkstra)算法,以及基於該算法的一些改進算法,比如引入Buckets的迪傑斯特拉算法,和引入Heap的迪傑斯特拉算法,這些算法在不同的應用環境下對Dijkstra算法有相應的效率的提升,還有Graph Growth,Topological Ordering,啓發式搜索(A*)等算法。在此不做一一列舉,有興趣的可以參考文章後面的參考文獻。  

      Dijkstra算法是按路徑長度遞增次序產生最短路徑的算法,藉助一個輔助向量空間記錄源點到其餘各頂點的最短距離,個人認爲該算法思路很奇妙,算法最終肯定可以求解出一條最短路徑。而A*因爲引進了啓發函數,啓發函數的設計直接決定了搜索出來的最短路徑,以及是否可以搜索到最短路徑,A*算法效率相對於Dijkstra算法有一些提高。但是在實際道路網絡路徑導航中用A*算法,很多情況下都無法找到最短路徑(當然這和啓發函數的設計有很大關係),而且,當起始點和終點之間有一個湖泊的話,用A*算法算出來的最終結果可能會是兜圈子的一條“最短路徑”,這無疑是一條無法令人滿意的路徑。因此個人認爲用Dijkstra算法算出來的路徑才能保證正確。      

      然而實際道路網絡有很多的限制,比如U-turn, one way, no left turn等。用Dijkstra算法的時候,每確定了一個頂點以後即加入S集合,這意味着加入S集合的頂點無法被重新訪問,那麼此時問題就出來了,明明真正的最短路徑是這個頂點處做個U-turn,而因爲這個頂點已經加入S集合而導致無法二次訪問,最後算出來的結果卻還是繞了個圈兒。國外有學者做了研究,基於以頂點方式給出的道路網絡的U-turn問題的解決。還有另外一種方法就是以弧段的方式給出道路網絡,每個弧段都有一個start和end,這樣通過記錄這條弧段start和end的訪問狀態就可以有效解決U-turn問題。

 

二、內存

 

      路徑規劃需要的內存是相當可觀的,在手機上做路徑,城市或是國家小的話不會凸顯內存的問題。當國家大,路徑多的時候,內存的問題就會凸顯了,其實Dijkstra算法對內存需求過大。但是目前沒有什麼好的方法去解決,可以做的就是對數據做預處理,想法設法減少潛在的路徑數目,這樣不但可以節約內存還可以一定程度提高算法的效率。

 

 

參考文獻:

1.Shortest paths algorithms: Theory and experimental evaluation. Boris V. Cherkassky,Andrew V.Goldberg,

  Tomasz Radzik. August3, 1993  

2.Implementations of Dijkstra's Algorithm Based on Muti-Level Buckets. Andrew V.Goldberg, Craig

  Silverstein, November 1995.  

3.Three shortest path algorithms on real road networks:Data Structures and Procedures, F. Benjamin Zhan 

4.An Experimental Study of a Parallel Shortest Path Algorithm for Solving Large-Scale Graph

  Instances,Kamesh Madduri David A. Bader Jonathan W.Berry? Joseph R. Crobak  

5.基於城市道路網的最短路徑分析解決方案, 劉雲翔 陳 犖 李 軍 陳宏盛

6.智能交通中的高效最短路徑搜索算法, 葉 青。陳閎中

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章