搜索
盲目搜索
深度優先搜索 (Depth-first Search)
廣度優先搜索(Breadth-first Search)
迭代加深搜索(iterative deepning)
啓發式搜索
啓發式搜索是利用啓發信息作指導所進行的搜索。
啓發信息是用評價函數f(n)對結點n的“有希望”程度建立一種數值的評估。
f(n)由兩部分組成:f(n)=g(n)+h(n)
- 從S到n的最佳代價的估計g(n)
g(n)選取迄今爲止搜索的從S到n的各條路徑代價的最小值 - 從n到t的最佳代價的估計h(n)
h(n)涉及對未搜索路徑的估計,精度依賴於問題的啓發信息,h(n)也稱爲啓發函數
即作爲的估計,估計值越小的結點,被認爲希望度越高,應該優先擴展。
最佳優先搜索(Best-first Search)
對於搜索過程中遇到的每個新狀態(或說新結點),按評價函數計算出它的最佳代價估計值,從當前估計值的最小狀態開始繼續搜索,這就是以結點的代價估計值爲標準的最佳優先搜索。
-
搜索策略
將結點表按距目標的估計距離進行排序,再以結點的估計距離爲標準選擇待擴展節點 -
算法步驟
- 用N表示已經排序的初始結點表(從小到大)
- 如果N爲空集,則退出並給出失敗信號
- n取爲N的首結點,並在N中刪除結點n,放入已訪問結點列表
- 如果n爲目標結點,則退出並給出成功信號
- 否則,將n的後繼結點加到N中,記爲N’,對N’中的結點按距目標的估計距離排序,並返回2步
啓發式圖搜索算法
啓發式圖搜索算法的搜索空間處理的是圖結構(而非樹結構)
用G表示當前已生成的顯式搜索圖
- 用一張open表存放已生成而尚未進行擴展的結點
- 用一張closed表存放已生成且處理過的結點
這兩張表除了結點的描述狀態外,還包括結點的代價估計值f和g、後繼元素、主鏈的前驅指針:指明該結點在通向初始結點的最優通路上的父節點
圖搜索過程(A算法):
- 建立一個只由初始結點S組成的搜索圖G,open=(S); closed=() 空表
- If open爲空表 then 退出並給出失敗信息
- n = first(open); remove(n, open); add(n, closed);
- If n爲目標結點 then 退出(成功) (可給出S到n的路徑)
- 否則,擴展結點n,生成不是n的祖先的後繼結點集M={m} 把每個m作爲n的後繼結點加入G
- If m沒有在open和closed表中出現過
Then add(m, open) - If m在open表中有重複結點k,且g(m)<g(k)
Then remove(k,open); add(m, open) - If m在closed表中有重複結點k,且g(m)<g(k) then
①將closed表中的結點k改爲結點m(只需修改主鏈指針和f、g)
②按後繼元素,修改k在open表和closed表中的後繼元素f,g
的值 - 按f值,自小到大對open表中的結點重新排序,並返回2步
若對所有結點n,都有h(n)≤h*(n),則算法A一定能找到一條到達目標結點的最佳路徑,此時算法A稱爲算法A*。
當啓發函數h(n)=0,即毫無啓發信息,g(n)=d(n),其中d(n)表示結點n的深度,此時A算法退化爲廣度優先搜索。
優化與搜索
爬山搜索
- 搜索策略
爬山搜索是最佳優先搜索的變形,爬山搜索不保存搜索過的所有結點,而只保存當前遇到的那些最佳結點 - 算法步驟
- 取n爲初始結點
- 如果n的估計值大於其所有子結點的值,則返回n並退出
- 否則,取n爲其具有最大值的子結點,返回第二步
- 算法特點
得到的是局部最優解,不能保證是全局最優解,依賴於初始解的選擇
梯度搜索
梯度搜索是目標函數具有連續可微性質的爬山搜索方法
算法步驟:
- 選取初始值
- 當時,停止搜索
博弈搜索
博弈樹的極小極大搜索
第一步:先生成博弈樹(2-4)
第二步:進行結點靜態估價(6-8)
α-β剪枝
- α值、β值的計算方法
- α值
一個MAX結點的α值等於其後繼結點當前最大的最終推導值 - β值
一個MIN結點的β值等於其後繼結點當前最小的最終推導值
- α-β兼職的規則
-
α剪枝
若MIN結點的β值小於等於其任何父結點MAX的α值,則可以終止該MIN結點以下的搜索,並且這個MIN結點的最終倒推值可取爲它的β值 -
β剪枝
若任意MAX結點的α值大於等於其父結點MIN的β值,則可以終止該MAX結點以下的搜索,且這個MAX結點的最終推導值可取爲它的α值
- 例題