最佳路徑搜尋(二):啟發式搜尋(代價一致搜尋(Dijkstra search),貪心搜尋,A*搜尋)

Arwin & Luisa發表於2021-01-02


前言

啟發式搜尋(Heuristically Search)又稱為有資訊搜尋(Informed Search),它是利用問題擁有的啟發資訊來引導搜尋,達到減少搜尋範圍、降低問題複雜度的目的,這種利用啟發資訊的搜尋過程稱為啟發式搜尋。簡單來說,就是已知起點和終點位置,尋找最佳路徑。


一、啟發式搜尋(heuristic search)

方法(Dijkstra search,Greedy Search,A* )

代價一致搜尋 (Uniform Cost Search or Dijkstra search)
貪心搜尋 (Greedy Search)
A星搜尋 (A* Search)

首先, 使用評價函式 f(x) 來對上述的節點選擇順序進行排序
下面先定義兩個函式

g(x) 為從根節點到x節點的代價總和

h(x) 為從x節點到目標節點的估計代價總和

這類應用演算法有

代價一致搜尋 (Uniform Cost Search or Dijkstra search) f(x) = g(x)

貪心搜尋 (Greedy Search) f(x) = h(x)

A星搜尋 (A* Search) f(x) = g(x) + h(x)

這個網址對演算法進行了視覺化表示,解釋和例子非常具體的有助於理解,強烈推薦!!!!!link~~~~~~~~~~

性質(Admissible & Consistent & dominate)

Admissible heuristic

admissibility是啟發式搜尋的一個性質,如果滿足這個性質,那麼,啟發函式一定能得到最佳solution。

A*搜尋能找到最優解的充分條件:

  1. 搜尋樹上存在著從起始點到目標點的最優路徑
  2. 問題域是有限的
  3. 所有結點的子結點的成本>0
  4. h(n) =< h*(n) (h*(n)為從節點n到目標點的實際成本)

1 2 3易滿足,第4條中這樣的啟發函式被稱為Admissible heuristic,也就是說在A*中我們對目標的估計必須小於或等於其實際值,不然可能會出現找不到最優路徑或者根本找不到路徑的情況

Consistent heuristic
在這裡插入圖片描述
N是開始節點,綠色的是目標節點,h(N)則是從N到目標節點的啟發函式,N’為任意不同於N的節點
A star with tree能找到最優解的充分條件:

  1. 搜尋樹上存在著從起始點到目標點的最優路徑
  2. 問題域是有限的
  3. 所有結點的子結點的成本>0
  4. h(N’) + c(N, N’) < h(N)
    這樣的啟發函式被稱為Consistent heuristic,只有滿足了這個才能保證A*演算法在圖搜尋中能找到最優解。

一個啟發函式是consistent,它也是admissible。反之,不可。

dominate

Dominance(用於表現不同啟發函式的關係)
two admissible heuristics ha, hb:如果對於所有n, ha(n) >hb(n),那麼,我們可以說 ha dominates hb,對於這個search問題,我們最好使用ha作為啟發函式。

總結

A star演算法的特點(考慮g(x)+h(x),注意樹搜尋滿足Admissible heuristic,圖搜尋滿足Consistent heuristic時)

  1. 完備性:肯定能找到最優解
  2. 最優性:找到的解花費最小
  3. 快:擴充套件更少的節點

UCS(代價一致搜尋,只考慮g(x))

  1. 完備性:肯定能找到最優解
  2. 最優性:找到的解花費最小
  3. 比A*慢一些
    廣度優先搜尋是代價一致搜尋的特例

貪婪搜尋(啟發式搜尋,但只考慮h(x))

  1. 不完備性:不保證能找到最優解
    深度優先搜尋是貪婪搜尋的特例(令h(n)===0,A*搜尋退化為寬度優先搜尋(BFS),不估計成本,肯定能找到最優解)

相關文章