路徑規劃演算法 A

2021-10-09 08:51:52 字數 1517 閱讀 1132

a*演算法是啟發式搜尋,是一種盡可能基於現有資訊的搜尋策略,也就是說搜尋過程中盡量利用目前已知的諸如迭代步數,以及從初始狀態和當前狀態到目標狀態估計所需的費用等資訊。

a*演算法可以選擇下乙個被檢查的節點時引入了已知的全域性資訊,對當前結點距離終點的距離作出估計,作為評價該節點處於最優路線上的可能性的量度,這樣可以首先搜尋可能性大的節點,從而提高了搜尋過程的效率。

a*演算法的基本思想如下:引入當前節點j的估計函式f*,當前節點j的估計函式定義為:

f*(j)= g(j)+h*(j)

其中g(j)是從起點到當前節點j的實際費用的量度,h*(j)是從節點j到終點的最小費用的估計,可以依據實際情況,選擇h*(j)的具體形式,h*(j)要滿足乙個要求:不能高於節點j到終點的實際最小費用。從起始節點點向目的節點搜尋時,每次都搜尋f*(j)最小的節點,直到發現目的節點。a*演算法的核心是設計估價函式,設計估價函式h(j)有很多方法,下面介紹其中的兩種。

估價函式1:歐幾里德距離

在和起點距離相等的中間節點集合裡,與終點直線距離(歐幾里德距離)越小的節點,方向夾角越小。

估價函式2:曼哈頓距離

利用歐幾里德距離計算估價函式的計算量很大,因此考慮將兩點之間的曼哈頓距離作為估價函式。其中a點的經緯度為(ax,ay),b點的經緯度是(bx,by),則a、b之間的manhattan距離可以表示為:

f(j)=g(j)+(|ax-bx|+|ay-by|) a*

演算法在搜尋中設定兩個表:open表和close表。open表儲存了所有已生成而未被考察的節點,close表中記錄已被考察過的節點。演算法中有一步是根據估計函式重排open表中的節點,這樣,迴圈的每一步只考慮open表中狀態最好(代價最小)的節點,如果被發現在open表中存在同乙個節點,就應比較兩個節點代價的大小,如擴充套件得到的新節點代價大於已有的節點代價,可以放棄擴充套件得到的新節點,否則就以新節點代替原來的節點。如果在close表中存在同乙個節點號,則新新生成的路徑的代價肯定大於原來路徑的代價,可以淘汰新生成的節點。

演算法步驟如下:

步1:生成空的open表、close表,將起點s放入open表

步2:如果open表為空,則失敗退出。

步3:從open表中,找出頭節點u,作為當前節點,將它從open表中移除。

步4:判斷u是否為終點,如果是,則通過節點u的父指標,一直遍歷到起點,找到到最優路徑,演算法結束。否則,轉步5.

步5:擴充套件當前節點u,找到其擴充套件的後繼節點集合v,遍歷集合v中的節點,如果節點即不在open表也不在close表,計算該節點的估計值,將節點加入到open表,設定父節點為u.如果節點在open表、close表,比較當前節點的代價g(v)和open表、close表中代價,如果當前節點的代價g(v)小,更新表中的代價和父節點指標。

步6:按估價值遞增的順序,對open表中所有節點進行排序。

步7:轉步2.

路徑規劃演算法 A 演算法

a a star 演算法是一種靜態路網中求解最短路徑最有效的直接搜尋方法,也是解決許多搜尋問題的有效演算法。演算法中的距離估算值與實際值越接近,最終搜尋速度越快 astar演算法是從起點開始一步步的往終點探索。他有兩個鍊錶open鍊錶和close鍊錶。每探索 本文稱之為 擴充套件 乙個點n時,就獲取...

路徑規劃演算法高階

最早是在大學期間學習路徑規劃演算法,嚴蔚敏 吳偉民的 資料結構 講的最短路徑。當時感到有些晦澀難懂,並沒有理解演算法思想。回頭看,主要是因為應付考試,沒有和實際應用場景建立連線,所以體會不深。畢業後,因為從事地圖有關工作,又想到這些內容,然後複習 研究,總算明白其中道理。這些演算法能解決我們生活中遇...

路徑規劃演算法 路徑規劃演算法學習Day3

2.函式解讀 演算法原理 參考路徑規劃演算法學習day1 路徑規劃演算法學習day1 此方法會結合網路占用法 柵格法來進行實現 總所周知 柵格法生成地圖常規是的自己乙個乙個打,這樣既麻煩還浪費時間 這裡介紹幾種方法 way1 在命令框中碼 map rand k 0.7 k代表多少維地圖 way2 在...