形式化、搜索、執行。
一、形式化
1. 初始狀態
2. 可能行動
3. 轉移模型
4. 目標測試
5. 路徑耗散
二、算法性能
1. 完備性
2. 最優性
3. 時間復雜度
4. 空間復雜度
三、無信息搜索策略
1. 寬度優先搜索
先擴展根結點,接着擴展根結點的所有后繼,然后再擴展它們的后繼。一般地,在下一層的任何結點擴展之前,搜索樹上本層深度的所有結點都應該已經擴展過。使用FIFO隊列。
性能:完備的、最優的。時間和空間需求太大。
2. 一致代價搜索
擴展的是路徑消耗g(n)最小的結點n,也就是對任何單步代價函數都是最優的算法。可以通過將邊緣結點集組合成按g值排序的隊列來實現。目標檢測應用於結點被選擇擴展時,而不是生成時。也就是要先算所有的代價值。
性能:如果沒有為0的代價就是完備的。最優的。時間和空間消耗比寬度優先搜索還要打。
3. 深度優先搜索
總是擴展搜索樹的當前邊緣結點集中最深的結點。使用LIFO隊列。最新生成的結點最早被選擇擴展。效率嚴重依賴於使用圖搜索還是樹搜索。
性能:圖搜索是完備的,樹搜索不完備。不是最優的。時間復雜度受限於狀態空間的規模。空間復雜度性能非常好。當狀態空間分支因子為b最大深度為m,只需存儲O(bm)個結點。
一種變形:回溯搜索。所用內存空間更少。
4. 深度受限搜索
解決了無窮路徑的問題。
性能:不完備。不是最優的。
5. 迭代加深的深度優先搜索
經常和深度優先搜索結合使用來確定最好的深度界限。做法是不斷增大深度限制,直到找到目標。
6. 雙向搜索
同時運行兩個搜索,一個從初始狀態向前搜索同時另一個從目標狀態向后搜索,希望它們在中間某點相遇。可以這樣實現:目標測試替換為檢查兩個方向的搜索的邊緣結點集是否相交;如果交集不為空就找到了一個解。
四、有信息(啟發式)搜索策略
最佳優先搜索,結點是基於評價函數f(n)值被選擇擴展的。大多數的最佳優先搜索算法的f由啟發函數構成:
h(n) = 結點n到目標結點的最小代價路徑的代價估計值。
1. 貪婪最佳優先搜索
試圖擴展離目標最近的結點,理由是這樣可能可以很快找到解。只用啟發式信息,即f(n)=h(n)。
2. A*搜索:縮小總評估代價
它對結點的評價結合了g(n),即到達此結點已經花費的代價,和h(n),從該結點到目標結點所化代價:f(n)=g(n)+h(n)=經過結點n的最小代價解的估計代價。
保證最優性的條件:(1)h(n)是一個可采納啟發式,指它從不會過高估計到達目標的代價。(2)一致性:就是三角不等式,一條邊長度不大於另兩條邊之和。
3. 存儲受限的啟發式搜索
迭代加深A*(IDA*)算法。和典型的迭代加深算法的主要區別是所用的截斷值是f代價(g+h)而不是搜索深度。
遞歸最佳優先搜索(RBFS)。MA*和SMA*算法。這幾種是魯棒的、最優的搜索算法,它們使用有限的內存;只要時間充足,它們能求解A*算法因為內存不足不能求解的問題。