日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

路线规划算法设计要点

發布時間:2023/12/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 路线规划算法设计要点 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

路線規劃算法設計要點

? (2012-08-25 10:42:14) 轉載
標簽:?

lbs

?

gis

?

路線規劃

?

手機導航

?

在線地圖

?

導航

?

路線

?

it

?
?

?????????路線規劃算法真的是太多了,基本上每一種算法都有自己的優勢和劣勢。路線算法永遠是導航研發的主題之一,從過去到未來。網上路線規劃算法的資料很多,但講述算法有劣勢的文檔很少,所以在實際開發中,會積累到血與淚的經驗,哈哈,題外話了。

1 ?D算法與A*算法

?????????Dijkstra算法是最基本的算法,是算法教科書上的經典教程,是所有入門路線規劃必須精通的算法,是大多數導航引擎路線規劃初級版本所使用的算法,還是最容易被算法高手忽略的算法。為什么會忽略它呢,因為在簡單的驗證后,會發現D算法耗時耗空間。最后許許多多的高手把目光轉向的其他高效的算法。的確,幾乎其它所有算法都比D算法來的高效。在經過一段血與淚的付出后,發現其它所有高效的算法幾乎都有自己在路線合理性上的弊病,可是,在不考慮用戶習慣路線的前提下,D算法卻絲毫沒有路線合理性的問題。路線規劃算法的最難點是在路線合理性、時間消耗、空間消耗、硬件成本上做出合理的取舍。

?????????只要路段權值設計的對,D算法的合理性不成問題(這里所說的合理性是在不考慮用戶習慣路線的前提下。結合用戶習慣路線的規劃不在這里進行討論),但其效率非常低下,時間復雜度和空間復雜度都非常高。

?????????A*算法在時間復雜度和空間復雜度上對比D算法都提升了很多很多,但其有固有的先天缺陷,在大量測試后暴露的尤為明顯。對于下圖從起點到終點,有兩條路線,一條是路段序列A、C,一條是路段序列B、D,在使用A*算法時,路段序列B、D是沒有機會被計算到的,而路段序列B、D卻優于A、C。這是A*的一大弊端。

?

2 規劃算法耗時點

?????????路線規劃算法的耗時主要由參與計算的路段數量、拓撲數據的讀取效率、臨時表的排序效率這三部分組成。在路線算法層面,大部分的算法都是在滿足路線合理性的基礎上,盡量減少參與計算路段的數目。拓撲數據的讀取效率由硬件、文件系統和拓撲數據的設計格式讀取方式決定,讀取方式如預加載、區域加載、動態緩存池等。臨時表的排序效率,在初期設計時是容易忽視的,冒泡排序、斐波那契堆、最小堆等,其中堆排序效率要高。有一點需要特別注意,不要迷信網上的已有的效率評測,一定要根據的自己數據和算法實測,比如在一些環境下實測,最小堆的效率要高于斐波那契堆,這說明需要根據自己的代碼場景實測、選擇、優化不同的排序算法。

?

3 分區規劃思路思路簡析

?????????在路線規劃時,從起點到終點一次規劃完畢,耗時耗資源。如果時間復雜度是O(nlogn),那么可知遍歷的路段越多,開銷越大,或者說越到計算后期,耗時的增量越大。一種改進思路是把規劃分成幾個區域或部分,如起點區域、中間區域和終點區域,這幾個區域相對獨立。起點區域和終點區域分別通過正向鄰接表和逆向鄰接表來進行規劃,當預設條件成立時終止起點和終點區域的規劃,再進行中間段的規劃,最后整合路線。這里涉及了兩個概念,一是逆向鄰接表,簡單的說就是從到達路段到出發路段的鄰接關系;二是終止起點和終點規劃的條件,這是重點所在。對于終止條件好的設計是既要滿足整合后的路線是近似最優路線,又要滿足在和中間區域路線的銜接上不要有過多的冗余。

?????????在路線規劃中,起點區域規劃路線的道路等級總體上是向上升級,就是由低等級路段過渡到高等級路段;終端區域路線規劃的道路等級總體上是向下降級,就是由高等級路段過渡到低等級路段;中間區域的規劃總體上保持在高等級路段上。這就是常說的規劃要處理的升降級機制,這樣的處理可以有效減少要遍歷路段的數量,提高規劃效率。

?????????有一種情況需要特別注意,如下圖,中間區域規劃中高等級道路有可能存在不連通情況,這種情況需要一定的策略進行處理,一種比較好的方式是在預處理中進行邏輯升級。



?

4 抽象層規劃思路簡析

?????????拓撲數據抽象的概念是吧數據分成主干、枝干、詳細等幾個層次(一般3~5層)后,逐層規劃。有兩個難點,一是如何抽象,而是層次之間的連接。

?????????抽象層的劃分,一般是在數據預處理中完成。最簡單的抽象層劃分就是按照道路等級或者路線功能/經路等級來劃分。在實做過程中會遇到抽象層連通性的問題,需要適當升高或降低部分路段的層級。層次間的連接,主要是高低抽象層次間路段的映射關系。

?

5 ?M2M路線的設計要點

?????????這里之所以單提出了M2M(宏觀到微觀)思想,是因為這一思路是在路線規劃應用上,是精彩所在。

?????????基于M2M的基本路線規劃算法,在網上有資料介紹,這里就不多說了。在實際開發中,由于一個圖幅內有成千上萬條路段,面臨如何抽象節點或抽象成高等級圖層的問題。一種方法是在圖幅內進行連通性分析;一種方法是再次細分網格,逐層抽象,一種方法是圖幅作為最底層,也就是最子層,而用圖幅出入度來構建圖幅連通拓撲關系。

?????????當然每一種方法都有自己的優劣勢,其中有幾個可能的提升點。一是各個抽象層是可以被抽稀和合并的,抽稀后會減少抽象層的數目,而增加抽象節點的節點數目,至于去除多少抽象層,取決于那種方案計算效率最優。另一是容差的RV值的確定,這是個經驗數值,實做中可以根據不同的層級設計不同的RV值或函數。RV值要在路線合理性和計算效率上做權衡。

????????

6 路線規劃實做幾點注意

?????????產品級路線規劃往往不是使用一個的算法,而是一套互相結合和支持的策略和算法。比如M2M、抽象層、分區等這些是可以有效結合在一起的。再比如短途的規劃算法可以采用和長途規劃不同算法,以使路線更合理、效率更高。

?????????線程的使用可以提升單次路線的規劃效率。線程可以使用在分區、分層的規劃策略中,也可以使用在雙向規劃的算法中。雙向規劃對拓撲有一定的要求,就是需要建立必要的逆向鄰接表。對于服務端路線服務來說,使用線程可以提升用戶響應時間,但并不能提升并發用戶數。

?????????基本的路線規劃條件一般是距離最短和時間最少。距離是可度量的,而時間確實估值,這其中收到路面狀況、車流量、駕駛習慣、紅綠燈等因素影響。在不考慮實時路況和道路不同等級花銷固定的條件下,影響規劃耗時的因素主要是紅綠燈、復雜路口和岔路口、出入主輔路等。

?????????不同的人和駕駛習慣對道路是否最優的評定會有所不同,路線合理是指能符合絕大部分的駕駛習慣。路線合理性測試十分重要,一是測試要上量,達到一定的測試量才能暴露問題,而是要和主流引擎的路線結果做對比,評估優缺點并改正。

?????????路線規劃算法在設計時要留適當的擴展接口,如接入實時路況、指定避讓路段等,這下算法本身沒有難度,只是最好在設計之初予以考慮未來可能的需求。同樣,路線服務協議的設計也要有足夠的擴展性,其中唯一用戶標識一定要有,更高級的規劃算法是和用戶當前路線以及駕駛習慣相結合的。

總結

以上是生活随笔為你收集整理的路线规划算法设计要点的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。