A* 路徑搜索算法

2020-12-05 NLP學習筆記

假設地圖中存在起點和終點,路徑搜索算法可以用於搜索起點到終點的路徑。在機器人路徑規劃,或者遊戲中都需要用到路徑搜索算法。本文介紹一種經典的 A* 算法,和 Dijkstra 算法相比,A* 採用啟發式的搜索策略,能夠更快地搜索出最短路徑。

1.前言

圖中的起點和終點

給定一個包含起點 (白色圓點) 和終點 (黑色圓點) 的圖,有很多條路徑可以從起點到達終點,但是很多不是最短路徑。如上圖所示,黑色虛線為最短路徑,紅色虛線不是。

Dijkstra 算法是其中一種求解起點到終點最短路徑的算法,在用於無權重圖時,Dijkstra 算法就是寬度優先 (BFS) 的方法。A* 對 Dijkstra 進行了優化,引入啟發式的搜索策略,可以更快地搜索出最短路徑。

2.Dijkstra算法

假設起點是 s,終點是 e,Dijkstra 算法的主要包括下面的流程。

步驟一:用一個集合 F 保存已經訪問過的節點,初始時 F 只包含起點 s。用一個數組 D 保存起點 s 到其餘所有節點的最短路徑。在開始時,D 的數值用下面的公式計算。

初始距離數組 D

步驟二:找到一個不在 F 中,並且 D[u] 最小的節點 u。D[u] 就是起點 s 到節點 u 的最短距離,把 u 加入 F。步驟三:用節點 u 更新數組 D 中的最短距離,如下面的公式。

更新距離數組 D

步驟四:如果 F 中已經包含終點 e,則最短路徑已找到,否則繼續執行步驟二。Dijkstra 算法可以用於有權重 (即節點之間的距離是不同的) 和無權重 (節點間距離一樣) 的圖,如果用於無權重的圖,Dijkstra 算法就是 BFS 算法。

下圖展示了用 Dijkstra 算法搜索無權重圖最短路徑的過程,橙色表示算法搜索過的區域,顏色由淺到深,表示搜索的深度 (先後順序)。淺橙色表示最先搜索到的節點,而深橙色表示最後搜索到的節點。

Dijkstra 算法搜索過程

3.A* 算法

A* 算法加入了啟發式的搜索策略,在搜索時間上通常優於 Dijkstra 算法。A* 使用了一個估計值 F 代表某一個節點到終點的估計距離,計算公式如下:

A* 算法估計值 F 計算公式

另外 A* 包含兩個列表,open list 和 close list,open list 保存了等待探索的節點,而 close list 表示已經探索過的節點。

A* 算法的流程如下:

步驟一:把起點 s 放入到 open list 裡面。步驟二:檢查 open list,如果終點 e 在 open list 裡面,則路徑搜索完成。如果 open list 為空,則說明不存在路徑。步驟三:在 open list 裡面選擇估計值 F 最小的節點 u,作為當前節點,然後加入 close list 裡面。步驟四:取得所有節點 u 可以直接到達的節點 v,然後更新 open list。更新規則:如果 v 在 close list 裡,則不處理;如果 v 不在 open list 裡面,則把 v 加入 open list,其對應 F 值為 G(u)+distance(u,v)+H(v);如果 v 在 open list 裡面,則檢查 v 是否有更小的 F 值 (如果有更小 F 值,就更新 v 的 F 值); 重複步驟二到步驟四,直到終止。下面是 A* 搜索最短路徑的示例,每一個節點中左邊的數字表示 G(n) 即真實距離,右邊的數字表示 H(n) 即啟發函數計算的距離。F 值就是 G(n)+H(n),在下面的例子中 H(n) 用曼哈頓距離計算 (在下面的例子中等於沒有障礙物時,n 到終點 e 的最短距離)。

A* 算法的例子

4.A* 啟發函數的選擇與區別

如果不設置啟發函數,則 A* 就是 Dijkstra 算法,這時可以找到最短路徑。如果啟發函數 H(n) 的值一定小於等於 n 到終點的實際距離,則 A* 可以保證找到最短路徑。如果 H(n) 的值等於 n 到終點的實際距離,則 A* 會直接找到最短路徑,而不用擴展搜索額外的節點,此時運行是最快的。如果 H(n) 的值有可能大於 n 到終點的實際距離,則 A* 算法不一定可以找到最短路徑,但是運行速度會比較快。5.參考文獻

Amit's A* Pages 地址: http://theory.stanford.edu/~amitp/GameProgramming/

相關焦點

  • RRT路徑規划算法
    " RRT方法的特點是能夠快速有效地搜索高維空間,通過狀態空間的隨機採樣點,把搜索導向空白區域,從而尋找到一條從起始點到目標點的規劃路徑,適合解決多自由度機器人在複雜環境下和動態環境中的路徑規劃。
  • 幾種常見的車輛路徑規划算法
    根據車輛導航系統的研究歷程 , 車輛路徑規划算法可分為靜態路徑規划算法和動態路徑算法。靜態路徑規劃是以物理地理信息和交通規則等條件為約束來尋求最短路徑,靜態路徑規划算法已日趨成熟 , 相對比較簡單 , 但對於實際的交通狀況來說 , 其應用意義不大。
  • golang 調用 python 實戰路徑規劃之 A* 算法
    這樣做可以大大加快路徑的搜索速度,如下圖所示:但這種算法會不會有什麼缺點呢?答案是肯定的。因為,如果起點和終點之間存在障礙物,則最佳優先算法找到的很可能不是最短路徑,下圖描述了這種情況。A*算法對比了上面幾種算法,最後終於可以講解本文的重點:A*算法了。
  • 遺傳算法:組合優化算法,按照進化論的方式啟發搜索尋優解
    二進位編碼採用0/1數字串代表基因,如果011011中每兩個0/1數字串代表一個表現型,那麼表現型就是1,2,3,如果用來解決TSP問題的話,就代表選擇1->2->3這條路徑。二進位編碼使用方便,能夠輕鬆處理基因交叉和變異過程,但是,二進位編碼容易造成編碼過剩和在交叉與變異過程中產生不穩定的新數據導致搜索結果難以收斂。
  • 基於遺傳算法的工廠AGV路徑優化研究
    使用Matlab軟體對算法進行仿真,結果表明:該算法是有效的,能夠直接實現AGV在運輸多種類型物料時所產生的不同種路徑的優化。遺傳算法是模仿自然界生物進化機制發展起來的隨機全局搜索優化方法,具有算法效率高、魯棒性強、可實現並行搜索等特點 [3] ,被廣泛用於解決路徑規劃等領域的問題。
  • 圖的最短路徑算法-Floyd算法-弗洛伊德算法
    Floyd算法又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的算法 在計算機科學中,Floyd-Warshall算法是一種在具有正或負邊緣權重(但沒有負周期)的加權圖中找到最短路徑的算法。算法的單個執行將找到所有頂點對之間的最短路徑的長度(加權)。
  • 量 共振搜索算法有望成為最快算法
    ,實現了和Grover算法等效的搜索算法;在輔助量 特的幫助下還能實現 效的量 計數 (quantum counting)。 量 共振搜索 研究背景 量子計算機雖然比經典計算機強大,但是迄今為止人們只找到了少數比經典算法更優越的量子算法,比如Shor算法和Grover算法。好量子算法少的原因之一是量子計算機的工作原理和人的思維直覺相差太大。
  • 機器人是如何規劃路徑的?動畫演示一下吧
    項目地址:https://github.com/zhm-real/PathPlanning該開源庫中實現的路徑規划算法包括基於搜索和基於採樣的規划算法,具體目錄如下圖所示:基於搜索的路徑規划算法基於搜索的路徑規划算法已經較為成熟且得到了廣泛應用,常常被用於遊戲中人物和移動機器人的路徑規劃
  • 圖論的各種基本算法
    假設:有兩個頂點A和B,存在路徑從A到B,不存在路徑從B到A。 證明:分為兩種情況,情況一,先搜索到A頂點,情況二,先搜索到B頂點。對於情況一,由命題可得,A一定存儲在B之後,那麼取出時先取出的是頂點A。
  • SEO必知:Google算法十年變遷史-Google,搜索,算法,SEO ——快科技...
    Google算法每年的改變都多達500-600次,只不過很多改動都很小,但是每隔幾個月,Google都會做一次比較大的算法升級,這些升級都會直接影響到搜索的排名結果。作為一個搜尋引擎營銷人員,了解這些算法的改變有助於分析網站排名以及流量的變化狀況,下面我們列出了幾次影響比較大的算法升級,熟悉這些算法的變動將會有助於你的SEO工作。
  • 啟發式算法分類 - CSDN
    1.2算法描述   所以,我們需要一個pbest來記錄個體搜索到的最優解,用gbest來記錄整個群體在一次迭代中搜索到的最優解。使用模擬退火算法可以比較快的求出TSP的一條近似最優路徑。模擬退火解決TSP的思路:1. 產生一條新的遍歷路徑P(i+1),計算路徑P(i+1)的長度L( P(i+1) )2. 若L(P(i+1)) < L(P(i)),則接受P(i+1)為新的路徑,否則以模擬退火的那個概率接受P(i+1) ,然後降溫3.
  • 人工智慧之遺傳算法(GA),搜索最優解的方法
    人工智慧之遺傳算法(GA),搜索最優解的方法 工程師8 發表於 2018-05-11 10:35:00 導讀:人們一提到遺傳算法(
  • 編程世界中的18個重要的算法
    該算法像Dijkstra算法一樣,可以找到一條最短路徑;也像BFS一樣,進行啟發式的搜索。Beam Search束搜索(beam search)方法是解決優化問題的一種啟發式方法,它是在分枝定界方法基礎上發展起來的,它使用啟發式方法估計k個最好的路徑,僅從這k個路徑出發向下搜索,即每一層只有滿意的結點會被保留,其它的結點則被永久拋棄,從而比分枝定界法能大大節省運行時間。
  • 基於二進位搜索的RFID標籤防碰撞算法研究
    TDMA法由於應用簡單,容易實現大量標籤的讀寫,所以一般的防碰撞算法主要以TDMA方式實現。對RFID系統來說,TDMA構成了防碰撞算法最大的一類。  最靈活的和應用最廣泛的是「二進位搜索法」。本文對基於二進位搜索的算法做了詳細介紹,包括基本的二進位搜索算法。,動態二進位搜索算法和後退式動態二進位搜索算法。  2 基於二進位搜索的算法  2.1 基本的二進位搜索算法  實現「二進位搜索」算法系統的必要前提是能辨認出在閱讀器中數據碰撞的比特的準確位置。為此,必須有合適的位編碼法。
  • [算法系列]最優化問題綜述
    在各種優化算法中,共軛梯度法是非常重要的一種。其優點是所需存儲量小,具有步收斂性,穩定性高,而且不需要任何外來參數。  具體的實現步驟請參加wiki百科共軛梯度法。  下圖為共軛梯度法和梯度下降法搜索最優解的路徑對比示意圖:
  • JAVA必須掌握的數據結構和算法
    廣度優先搜索會優先從離起點近的頂點開始搜索深度優先搜索深度優先搜索和廣度優先搜索一樣,都是對圖進行搜索的算法,目的也都是從起點開始搜索直到到達指定頂點(終點)。深度優先搜索會沿著一條路徑不斷往下搜索直到不能再繼續為止,然後再折返,開始搜索下一條候補路徑。
  • 百度搜索信風算法上線,為什麼要嚴厲打擊翻頁誘導行為?
    2019年5月22日星期三,百度搜索資源平臺公布百度搜索信風算法即將上線,屆時將對存在問題的站點將會進行嚴厲打擊。一、信風算法的由來百度搜尋引擎技術團隊在運營中發現,有部分網站存在利用翻頁鍵(上一頁、下一頁等)誘導用戶的行為,極大的損害了用戶的瀏覽體驗。
  • 關於圖算法 圖分析的基礎知識概覽
    今天內容很多,坐穩~目錄圖算法 & 圖分析圖基礎知識連通圖與非連通圖未加權圖與加權圖有向圖與無向圖非循環圖和循環圖圖算法路徑搜索算法DFS & BFS最短路徑最小生成樹隨機遊走中心性算法
  • NAS-DIP: 基於神經架構搜索的自監督圖像補全算法
    下圖展示了該工作與監督學習、DIP的比較,以及整個算法的流程。    左圖展示了基於配對圖像進行監督學習的圖像修複方法(上)和原始的DIP模型架構(下);右圖則是本文提出的方法,上半部分利用了基於RNN控制器的NAS算法在配對數據集上進行最佳網絡架構搜索,下半部分則在得到的最佳網絡上對待修復圖像進行處理
  • 用圖形解釋10種圖形算法
    Animation of BFS traversal of a graph (Image by Author)遍歷或搜索是可以在圖形上執行的基本操作之一。 在廣度優先搜索(BFS)中,我們從一個特定的頂點開始,並在當前深度探索其所有鄰居,然後再進入下一級的頂點。 與樹不同,圖可以包含循環(第一個頂點和最後一個頂點相同的路徑)。 因此,我們必須跟蹤訪問的頂點。