A*算法的介紹

慈雲數據 8個月前 (03-12) 技術支持 131 0

提示:文章寫完後,目錄可以自## 标題動生成,如何生成可參考右邊的幫助文檔

文章目錄

  • 一、A*算法的由來及應用背景
  • 二、A*算法的基本原理
    • 1.基本數學原理
    • 2.啓發函數的選擇
      • 2.1曼哈頓距離
      • 2.2對角距離(切比雪夫距離)
      • 2.3歐幾裏德距離
      • 三、A*算法的程序實現
        • 1.算法邏輯
        • 2.實驗結果
        • 四、A*算法的總結
          • A*算法的優缺點

            一、A*算法的由來及應用背景

            在這裏插入圖片描述

            二、A*算法的基本原理

            1.基本數學原理

            A*算法作爲啓發式搜索算法,其更新估值F來進行搜索

            F = G + H F=G+H F=G+H

            F F F: 當前節點的總代價

            G G G: 開始節點到當前節點的移動距離(實際代價)

            H H H: 從當前節點到終點的估計移動距離(估計代價)

            計算G代價爲從起點到當前節點經過的所有邊的距離之和。

            計算H代價的啓發函數h包括曼哈頓距離、對角距離(切比雪夫距離)、歐幾裏德距離。

            注意點:

            1.計算H時,要忽略路徑中的障礙物。這是對剩餘距離的估算值,而不是實際值,因此H代價爲估計代價。

            2.在進行全局地圖路徑規劃時,将環境信息轉化爲一個網格地圖,其中每個網格表示環境的一個區域,障礙物的區域可以标記爲障礙物網格,因此障礙物節點是已知的。

            3.已知A*算法保證能夠找到最短路徑的條件是滿足以下兩個條件:

            (1)啓發函數h(n)必須滿足單調性(即估計的代價不會超過從節點n到目标節點的實際代價),

            (2)地圖必須是可行的,即不存在無法通過的障礙物或無法到達的區域。

            2.啓發函數的選擇

            2.1曼哈頓距離

            曼哈頓距離: D = ∣ x 2 − x 1 ∣ + ∣ y 2 − y 1 ∣ D=|x_{2}-x_{1}|+|y_{2}-y_{1}| D=∣x2​−x1​∣+∣y2​−y1​∣,如下圖:

            粗=曼哈頓距離

            如果圖形中隻允許朝上下左右四個方向移動,則可以使用曼哈頓距離。計算從當前栅格橫向或縱向移動到達目标所經過的方格數。

            在這裏插入圖片描述

            例如在上圖中中心節點可以朝着上下左右拓展,這時采用曼哈頓距離作爲啓發函數更有效。當拓展節點存在障礙物時:

            在這裏插入圖片描述

            A*算法會根據地圖中的網格來判斷每個節點的狀态,即是否爲障礙物節點。當算法擴展節點時,如果該節點是障礙物節點,則不會将其加入到待擴展節點集合中,從而避免沿着該節點繼續搜索,這樣就能夠有效地避免穿越障礙物。

            2.2對角距離(切比雪夫距離)

            對角距離(切比雪夫距離): D = m a x ( ∣ x 2 − x 1 ∣ + ∣ y 2 − y 1 ∣ ) D=max(|x_{2}-x_{1}|+|y_{2}-y_{1}|) D=max(∣x2​−x1​∣+∣y2​−y1​∣),如下圖:

            對角距離

            如果圖形中允許朝八個方向移動,則可以使用對角距離。對角距離更适合處理允許斜向移動的情況,因爲它考慮了斜向移動時的額外距離,使得估算更加準确。

            在這裏插入圖片描述

            當拓展節點存在障礙物時:

            在這裏插入圖片描述

            2.3歐幾裏德距離

            歐幾裏德距離: D = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 D=\sqrt{(x_{2}-x_{1})^2+(y_{2}-y_{1})^2} D=(x2​−x1​)2+(y2​−y1​)2 ​,如下圖:

            歐幾裏得距離

            允許朝任何方向移動則可以使用歐幾裏德距離。歐幾裏德距離直接計算兩點之間的距離,更符合實際情況.。

            注意:

            啓發函數跟拓展方式沒有一定的捆綁關系,上述隻是建議在哪種拓展節點的方式用何種啓發函數。選擇哪種啓發函數取決于應用場景的具體情況,可以根據實際情況進行選擇或者結合多種啓發函數進行綜合考慮。上述部分内容由ChatGPT-plus4.0給出,如有錯誤請大家自行判斷。

            三、A*算法的程序實現

            1.算法邏輯

            1.初始化開始節點S,最終節點G,初始化列表open,closed,初始化全局地圖(網格地圖)

            2.從開始節點S出發,把S作爲一個待檢查的方格,放入open列表

            3.尋找開始節點S周圍可以到達的方格(最多八個),将它們放入open列表,并設置它們的父節點爲S

            4.從“open列表”中删除開始節點S,并将S放入到closed列表中

            5.計算每個周圍方格的F值 F=G+H

            6.從open列表中選擇F值最小的方格a,将其從open列表放入到closed列表中

            7.檢查a所有鄰近的方格

            1)障礙物和close列表中的方格不考慮

            2)如果這些方格不在open列表中,将它們加入open列表,計算這些方格的F值,并設置父節點爲a

            3)如果某相鄰的方格c已經在open列表中,計算新的路徑從S到達方格c(即經過a的路徑), 判斷是否需要更新父節點和F值:如果新節點c的G值更低,則修改父方格爲方格a,重新計算F值,H值不需要改變(因爲方格到達目标點的預估代價是固定的),如果新節點c的G值比較高,則說明新的路徑代價更高,則值不做改變(G值不變也不更新)

            8.繼續從open列表中找出F值最小的,從open列表中删除,添加到close列表,再繼續找出周圍可以到達的方塊,如此循環

            9.結束判斷:當open列表中出現目标方塊G時,說明路徑已找到;當open列表中沒有了數據,說明沒有合适路徑。

            2.實驗結果

            在 20 ∗ 20 20*20 20∗20的栅格地圖中,障礙物自定産生,啓發函數h分别采用曼哈頓距離和歐幾裏德距離,每個節點可以朝四個方向擴展。得到的路徑規劃如左圖。其中陰影部分爲加入過列表(或搜索過)的方格。

            在這裏插入圖片描述當我們增大網格地圖,此時利用A進行路徑規劃又會得到怎麽的結果呢

            在這裏插入圖片描述 在 200 ∗ 200 200*200 200∗200的栅格地圖中,障礙物随機産生,障礙物覆蓋率占地圖的20%,啓發函數h分别采用曼哈頓距離和歐幾裏德距離,得到的路徑規劃如左圖。

            A算法的啓發式搜索過程中啓發函數的估計值越接近真實值,規劃效率越高。

            在網格地圖中,每個節點可以朝八個方向擴展,此時曼哈頓距離更能準确地反映兩個節點之間的距離。相比之下,歐幾裏德距離計算的H值偏小,同時其需要進行開方運算,耗時較長。

            在這裏插入圖片描述有小夥伴需要程序的可以私我。


            四、A*算法的總結

            A*算法的優缺點

            優點:

            1.最優性:在滿足一定條件下, A算法能夠保證找到最短路徑。

            2.快速性:相對于其他搜索算法, A算法的搜索速度較快,因爲它能夠通過啓發式函數來減少搜索的路徑數。這使得A算法在處理大規模的搜索問題時非常高效

            3.适用性廣泛: A算法可以用于解決各種路徑搜索問題,例如在計算機遊戲中尋找最佳路徑、在機器人導航中尋找最短路徑等等。

            缺點:

            1.啓發式函數不易設計: A算法需要使用啓發式函數來估算每個節點到目标節點的距離,但是啓發式函數2.的設計并不是一件容易的事情。如果啓發式函數設計不好,那麽搜索效率将會受到很大的影響。

            存儲空間占用較大: A算法需要存儲搜索過程中的節點信息,因此當搜索的狀态空間較大時,它需要占用較大的存儲空間。

            3.可能陷入局部最優解:雖然A算法能夠保證找到最短路徑,但是當啓發式函數不夠好時, A算法可能會陷入局部最優解,而無法找到全局最優解。

微信掃一掃加客服

微信掃一掃加客服

點擊啓動AI問答
Draggable Icon