1. 程式人生 > >4.8 Best-First Search最佳優先搜尋

4.8 Best-First Search最佳優先搜尋

在由回溯演算法遍歷的搜尋樹中,假設節點的分支按照值排序啟發式排序,最左邊的分支最有希望(或者至少不比右邊的任何分支更沒有希望)。然後回溯演算法對搜尋樹進行深度優先遍歷,按從左到右的順序訪問節點的分支。當CSP例項不能滿足要求,必須遍歷整個搜尋樹時,深度優先搜尋顯然是最佳選擇。然而,當已知或可以安全地假設CSP例項是可滿足的時,其他搜尋策略(如最佳優先搜尋)就變得可行。在本節中,我將調查基於差異的搜尋策略,這些策略可以看作是最佳優先搜尋的變體。

Harvey和Ginsberg[64,65]首先提出了一種基於差異的搜尋策略,其演算法稱為有限差異搜尋。不一致的情況是,搜尋不遵循值排序啟發式,也不從節點中提取最左邊的分支。有限差異搜尋背後的思想是通過增加差異的數量迭代地搜尋樹,更喜歡發生在樹的根部附近的差異。這允許搜尋從搜尋早期所犯的錯誤中恢復(請參見定義4.11)。與此相反,對於回溯(或深度優先)搜尋,在樹的根附近所犯的錯誤要發現和撤銷可能代價高昂。在第i次迭代中,有限差異演算法訪問從根到葉的路徑中有最多i個差異的所有葉節點。

當找到解決方案或迭代結束時,演算法終止。有限差異搜尋迭代呼叫i = 0,1,…,k。如果k≥n,其中n是搜尋樹的深度,該演算法完成;否則就是不完整的。Harvey和Ginsberg從理論和實驗兩方面證明,當存在較好的值序啟發式時,有限差異搜尋優於深度優先搜尋

Korf[80]提出了一種對有限差異演算法的修改,使其在後續迭代中訪問的重複節點更少。在第i次迭代中,Korf演算法訪問了所有葉子節點,從根到葉子的路徑恰好有i個出入。然而,為了實現這些節省,Korf的演算法更喜歡樹中更深層次的差異。Korf指出,有限的差異搜尋可以看作是最佳優先搜尋的一種變體,其中節點p的成本是搜尋樹從根到p的路徑中的差異數量。在best-first搜尋中,選擇成本最低的節點作為下一個要擴充套件的節點。

在Harvey和Ginsberg的提議中,通過選擇離根最近的節點來打破成本最低的關係。在Korf的提議中,通過選擇離根最遠的節點來打破連線。

Walsh[133](獨立Meseguer[95])認為,價值排序啟發式往往資訊較少,而且更容易在搜尋樹的頂部附近出錯。Walsh提出了深度有界差異搜尋 depth-bounded discrepancy search ,它使搜尋偏向樹頂附近的差異,但訪問的冗餘節點比有限差異搜尋要少。在第i次迭代中,深度有界差異搜尋演算法訪問所有葉子節點,其中從根到葉子的路徑中的所有差異都發生在深度i以下。Meseguer[95]提出了交錯深度優先搜尋 interleaved depth-first search 

,這也使得搜尋偏向於接近樹頂的差異。基本思想是使用迴圈排程的變體來劃分節點外分支的搜尋時間。每個分支——或者更確切地說,根在分支上的每個子樹——使用深度優先搜尋來搜尋給定的時間片。如果在時間片內沒有找到解決方案,搜尋將暫停,下一個分支將啟用。在暫停對最後一個分支的搜尋後,第一個分支再次啟用。這種情況會一直持續下去,直到找到解決方案或者徹底搜尋所有子樹為止。該策略可以在子樹中遞迴應用。

Meseguer和Walsh[96]實驗比較了使用傳統深度優先搜尋的回溯演算法和上述四種基於差異的搜尋策略。在一個由隨機二進位制、擬群補全和數字分割槽csp組成的測試平臺上,發現基於差異的搜尋策略比深度優先的搜尋策略要好得多。與隨機化和重新啟動一樣,基於差異的搜尋策略是一種克服搜尋早期出現的值排序錯誤的方法