Dijkstra演算法和A D 演算法

2021-09-06 20:09:41 字數 1379 閱讀 3228

目前ros中可以使用的global planner主要包括:dijkstra,a*和d*演算法。local planner主要有:dwa、trajectory、teb和eband等。目前、teb local planner效果可能會好點。

一、dijkstra演算法   

dijkstra演算法也即:單源最短路徑 演算法。演算法的基本思想是:每次找到離源點最近的乙個頂點,然後以該頂點為中心進行擴充套件,最終得到源點到其餘所有點的最短路徑。

二、a*演算法  

a*演算法 :它把dijkstra演算法(靠近初始點的結點)和bfs演算法(靠近目標點的結點)的資訊塊結合起來。在討論a*的標準術語中,g(n)表示從初始結點到任意結點n的代價,h(n)表示從結點n到目標點的啟發式評估代價(heuristic estimated cost)。當從初始點向目標點移動時,a*權衡這兩者。每次進行主迴圈時,它檢查f(n)最小的結點n,其中f(n) = g(n) + h(n)。

啟發式函式h(n)告訴a*從任意結點n到目標結點的最小代價評估值。選擇乙個好的啟發式函式是重要的。

a*(a-star)演算法是一種靜態路網中求解最短路最有效的方法。

公式表示為:     

f(n)=g(n)+h(n),   其中:

f(n) 是節點n從初始點到目標點的估價函式,

g(n) 是在狀態空間中從初始節點到n節點的實際代價,

h(n)是從n到目標節點最佳路徑的估計代價。h(n)也就是啟發式函式,一般來講,這個h(n)取兩節點間直線距離作為估價值,也就是:  h(n) = sqrt((x1-x0)^2+(y1-y0)^2)

保證找到最短路徑(最優解的)條件,關鍵在於估價函式h(n)的選取:

估價值h(n)<= n到目標節點的距離實際值,這種情況下,搜尋的點數多,搜尋範圍大,效率低。但能得到最優解。

如果 估價值》實際值, 搜尋的點數少,搜尋範圍小,效率高,但不能保證得到最優解。

估價值與實際值越接近,估價函式取得就越好。

例如對於幾何路網來說,可以取兩節點間歐幾理德距離(直線距離)做為估價值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));這樣估價函式f在g值一定的情況下,會或多或少的受估價值h的制約,節點距目標點近,h值小,f值相對就小,能保證最短路的搜尋向終點的方向進行。明顯優於dijstra演算法的毫無無方向的向四周搜尋。

a*演算法和dijistra演算法的區別在於有無估價值,dijistra演算法相當於a*演算法中估價值為0的情況。

三、動態路網,最短路徑演算法 d*:

靜態路徑最短路徑演算法是外界環境不變,計算最短路徑。主要有dijkstra演算法,a*(a star)演算法。 

動態路徑最短路是外界環境不斷發生變化,即不能計算**的情況下計算最短路。如在遊戲中敵人或障礙物不斷移動的情況下。典型的有d*演算法.

Dijkstra演算法和Floyd演算法

最近做課設的時候用到了這兩個演算法,於是總結在這裡。dijkstra是求解乙個頂點到其他頂點的最短距離,演算法最簡單的實現方法是用乙個鍊錶或者陣列來儲存所有頂點的集合 q,所以搜尋 q 中最小元素的運算 extract min q 只需要線性搜尋 q 中的所有元素。這樣的話演算法的執行時間是 o n...

dijkstra演算法和spfa演算法

void dijkstra s u 1 將這個點標記 證明以後可以使用這個點作為中間點了 for int j 1 j n j spfa模板 struct edge edge maxm 結構體表示靜態鄰接表 void addedge int from,int to,int dis 鄰接表建圖 void...

Dijkstra演算法和SPFA演算法

spfa演算法 include using namespace std const int n 1e4 10,m 5e5 10 int n,m,x,y,z,s,cnt,dis n vis n head n struct edge e m 定義邊的三個資訊,w表示邊權,to表示邊的終點,next表示上...