人工智能中的搜索策略大體分為兩種:無信息搜索和有信息搜索。無信息搜索是指我們不知道接下來要搜索的狀態哪一個更加接近目標的搜索策略,因此也常被成為盲目搜索;而有信息搜索則是用啟發函數f(n)來衡量哪一個狀態更加接近目標狀態,並優先對該狀態進行搜索,因此與無信息搜索相比往往能夠更加高效得解決問題。
要衡量一個搜索策略的好壞,我們需要從四個方面對其進行判斷:完備性、時間復雜度、空間復雜度和最優性。因此以下通過這四個方面來比較常見搜索策略之間的優劣。
無信息搜索策略
寬度優先搜索(BFS)
首先擴展根節點,然后擴展根節點的所有后繼,接着再擴展它們的后繼,從而一層一層的對節點進行擴展。BFS是一個簡單的搜索策略,在搜索過程中會對所有狀態進行遍歷,因此它是完備的;假設搜索樹每個節點有b個后繼,深度為d,則時間復雜度和空間復雜度均為O(bd);最后考慮最優性,因為我們總會在最淺那一層找到目標狀態,因此當且僅當每一步的代價都一致的時候,BFS可以得到最優解。
一致代價搜索
在BFS的基礎上,一致代價搜索不在擴展深度最淺的節點,而是通過比較路徑消耗g(n),並選擇當前代價最小的節點進行擴展,因此可以保證無論每一步代價是否一致,都能夠找到最優解。
深度優先搜索(DFS)
DFS擴展根節點的一個后繼,然后擴展它的一個后繼,直到到達搜索樹的最深層,那里的節點沒有后繼,於是DFS回溯到上一層,擴展另外一個未被擴展的節點。在有限狀態空間中,DFS是完備的,因為它可以把所有空間遍歷一遍;而在無限空間中,DFS則有可能會進入深度無限的分支,因此是不完備的。DFS的時間復雜度為為O(bd),而空間復雜度僅為O(d),因為我們只需要保存當前分支的狀態,因此空間復雜度遠遠好於BFS。然而DFS並不能保證找到最優解。
深度受限搜索
深度受限搜索設定一個最大深度dmax,當搜索深度大於dmax的時候立即回溯,從而避免了在無窮狀態空間中陷入深度無限的分支。
迭代加深的深度有限搜索
迭代加深的深度有限搜索也設定一個最大深度dmax,開始我們把dmax設為1,然后進行深度受限搜索,如果么有找到答案,則讓dmax加一,並再次進行深度有限搜索,以此類推直到找到目標。這樣既可以避免陷入深度無限的分支,同時還可以找到深度最淺的目標解,從而在每一步代價一致的時候找到最優解,再加上其優越的空間復雜度,因此常常作為首選的無信息搜索策略。
有信息搜索
貪婪最佳優先搜索
貪婪最佳優先搜索總是擴展距離目標最近的節點,其啟發函數f(n)=h(n)其中:
f(n)=節點n到目標節點的最小代價路徑的估計值
貪婪最佳優先搜索的最大問題是它往往不能找到最優解。
A*
為了找到最優解,A*算法對一個節點的評估結合了h(n)和g(n)從開始節點到節點n的路徑代價,即f(n)=g(n)+h(n)
f(n)=經過節點n的最小代價解的估計代價
因為A*搜索總是搜索f(n)最小的點,因此它總能找到最優解。