A. a*演算法求最短路徑和floyd還有dijsktra演算法求最短路徑的區別
A*演算法是啟發式搜索,適合點對點的最短路徑,單源單匯的情況
Floyd是動態規劃的一種,可以求出任意兩點之間的最短路徑
Dijkstra是貪婪演算法的一種,求一點到其他所有點的最短路,即所謂的單源最短路演算法
從時間復雜度來說
Floyd是O(N^3)
Dijkstra是O(N^2)
而啟發式搜索就不好說了……
結果當然是一樣的,都是最短路,但是適用情形和時空開銷就不同了
舉例來說,你做任意兩點間最短路可以用N次Dijkstra或者1次Floyd,時間消耗一樣,顯然用後者,而如果你只用求兩點間的,用Floyd就不合算了
B. 流程規劃區路徑選擇及依據
摘要 您好,很高興為您解答該問題!
C. 求最短路徑的A*演算法的時間復雜度與空間復雜度是多少
從數學上定義,給定演算法A,如果存在函數F(n),當n=k時,F(k)表示演算法A在輸入規模為k的情況下的運行時間,則稱F(n)為演算法A的時間復雜度。這里首先要明確輸入規模的概念。關於輸入規模,不是很好下定義,非嚴格的講,輸入規模是指演算法A所接受輸入的自然獨立體的大小。例如,對於排序演算法來說,輸入規模一般就是待排序元素的個數,而對於求兩個同型方陣乘積的演算法,輸入規模可以看作是單個方陣的維數。為了簡單起見,總是假設演算法的輸入規模是用大於零的整數表示的,即n=1,2,3,……,k,…… 對於同一個演算法,每次執行的時間不僅取決於輸入規模,還取決於輸入的特性和具體的硬體環境在某次執行時的狀態。所以想要得到一個統一精確的F(n)是不可能的。為了解決這個問題,做以下兩個說明: 1.忽略硬體及環境因素,假設每次執行時硬體條件和環境條件是完全一致的。 2.對於輸入特性的差異,將從數學上進行精確分析並帶入函數解析式。
D. a*演算法求最短路徑和floyd還有dijsktra演算法求最短路徑的區別
A*演算法是啟發式搜索,適合點對點的最短路徑,單源單匯的情況
Floyd是動態規劃的一種,可以求出任意兩點之間的最短路徑
Dijkstra是貪婪演算法的一種,求一點到其他所有點的最短路,即所謂的單源最短路演算法
從時間復雜度來說
Floyd是O(N^3)
Dijkstra是O(N^2)
而啟發式搜索就不好說了……
結果當然是一樣的,都是最短路,但是適用情形和時空開銷就不同了
E. A*演算法用於路徑規劃,有什麼缺點
缺點:A*演算法通過比較當前路徑柵格的8個鄰居的啟發式函數值F來逐步確定下一個路徑柵格,當存在多個最小值時A*演算法不能保證搜索的路徑最優。
A*演算法;A*(A-Star)演算法是一種靜態路網中求解最短路徑最有效的直接搜索方法。估價值與實際值越接近,估價函數取得就越好。A*[1] (A-Star)演算法是一種靜態路網中求解最短路最有效的直接搜索方法。注意是最有效的直接搜索演算法。之後涌現了很多預處理演算法(ALT,CH,HL等等),在線查詢效率是A*演算法的數千甚至上萬倍。公式表示為: f(n)=g(n)+h(n),其中 f(n) 是從初始點經由節點n到目標點的估價函數,g(n) 是在狀態空間中從初始節點到n節點的實際代價,h(n) 是從n到目標節點最佳路徑的估計代價。保證找到最短路徑(最優解的)條件,關鍵在於估價函數f(n)的選取:估價值h(n)<= n到目標節點的距離實際值,這種情況下,搜索的點數多,搜索范圍大,效率低。但能得到最優解。並且如果h(n)=d(n),即距離估計h(n)等於最短距離,那麼搜索將嚴格沿著最短路徑進行, 此時的搜索效率是最高的。如果 估價值>實際值,搜索的點數少,搜索范圍小,效率高,但不能保證得到最優解。
F. 常見的路徑規劃方法有那些
最速下降法、部分貪婪演算法, Dijkstra演算法、Floyed演算法、SPFA演算法(Bellman_Ford的改進演算法)、A*演算法、D*演算法、圖論最短演算法,遺傳演算法、元胞自動機、免疫演算法、禁忌搜索、模擬退火、人工神經網路、蟻群演算法、粒子群演算法等
G. 有哪些應用於移動機器人路徑規劃的演算法
機器人家上了解到,在二維二值地圖(FREE or OCCUPIED)場景下進行路徑規劃的方法。我看之前有同學在回答的時候配上了這幅圖:
這幅圖上的演算法羅列的還是很全面的,體現了各個演算法的出生順序。但是並不能很好的對他們進行一個本質的分類。剛剛那位同學說的graph-based和sampling-based的分類方法我感覺有點概念重疊不能夠對規劃演算法進行這樣的分類,下面通過自己這一年多的研究和實踐對規劃演算法進行一個簡單的分類:
這幅圖上的演算法羅列的還是很全面的,體現了各個演算法的出生順序。但是並不能很好的對他們進行一個本質的分類。剛剛那位同學說的graph-based和sampling-based的分類方法我感覺有點概念重疊不能夠對規劃演算法進行這樣的分類,下面通過自己這一年多的研究和實踐對規劃演算法進行一個簡單的分類:
兩大類:
1. 完備的(complete)
2. 基於采樣的(sampling-based)又稱為概率完備的
一 完備的規劃演算法
A*演算法
所謂完備就是要達到一個systematic的標准,即:如果在起始點和目標點間有路徑解存在那麼一定可以得到解,如果得不到解那麼一定說明沒有解存在。
這一大類演算法在移動機器人領域通常直接在occupancy grid網格地圖上進行規劃(可以簡單理解成二值地圖的像素矩陣)以深度優先尋路演算法、廣度優先尋路演算法、Dijkstra(迪傑斯特拉)演算法為始祖,以A*演算法(Dijstra演算法上以減少計算量為目的加上了一個啟發式代價)最為常用,近期的Theta*演算法是在A*演算法的基礎上增加了line-of-sight優化使得規劃出來的路徑不完全依賴於單步的柵格形狀(答主以為這個演算法意義不大,不就是規劃了一條路徑再簡單平滑了一下么)。
完備的演算法的優勢在與它對於解的捕獲能力是完全的,但是由此產生的缺點就是演算法復雜度較大。這種缺點在二維小尺度柵格地圖上並不明顯,但是在大尺度,尤其是多維度規劃問題上,比如機械臂、蛇形機器人的規劃問題將帶來巨大的計算代價。這樣也直接促使了第二大類演算法的產生。
二 基於采樣的規劃演算法
RRT-connect演算法
這種演算法一般是不直接在grid地圖進行最小柵格解析度的規劃,它們採用在地圖上隨機撒一定密度的粒子來抽象實際地圖輔助規劃。如PRM演算法及其變種就是在原始地圖上進行撒點,抽取roadmap在這樣一個拓撲地圖上進行規劃;RRT以及其優秀的變種RRT-connect則是在地圖上每步隨機撒一個點,迭代生長樹的方式,連接起止點為目的,最後在連接的圖上進行規劃。這些基於采樣的演算法速度較快,但是生成的路徑代價(可理解為長度)較完備的演算法高,而且會產生「有解求不出」的情況(PRM的逢Narrow space卒的情況)。這樣的演算法一般在高維度的規劃問題中廣泛運用。
三 其他規劃演算法
除了這兩類之外還有間接的規劃演算法:Experience-based(Experience Graph經驗圖演算法)演算法:基於經驗的規劃演算法,這是一種存儲之前規劃路徑,建立知識庫,依賴之進行規劃的方法,題主有興趣可以閱讀相關文獻。這種方法犧牲了一定的空間代價達到了速度與完備兼得的優勢。此外還有基於廣義Voronoi圖的方法進行的Fast-marching規劃,類似dijkstra規劃和勢場的融合,該方法能夠完備地規劃出位於道路中央,遠離障礙物的路徑。答主最近也在研究此類演算法相關的工作。
APF(人工勢場)演算法
至於D* 、勢場法、DWA(動態窗口法)、SR-PRM屬於在動態環境下為躲避動態障礙物、考慮機器人動力學模型設計的規劃演算法。
H. A*演算法求最短路徑應該怎麼建立模型
請問您的具體需求是什麼?是要通過編程建立模型並模擬,還是只是需要把理論上的模型建立起來?
如果只是建立理論上的模型,那麼建立一個數組,對數組進行運算即可。