要進行問題求解,首先要討論的是對問題及其解的精確定義。然後我們介紹一些求解此類問題的通用的搜尋演算法。
首先討論無資訊的(uninformed)搜尋演算法-----無資訊是指除了問題定義本身沒有任何其他資訊。儘管這些演算法可以求解任何問題,但此類演算法效率都不好。另一方面,有資訊的搜尋演算法,利用給定的知識引導能夠更有效地找到解。
貪婪最佳優先搜尋(greedy best-first search)試圖擴充套件離目標最近的結點,理由是這樣可能可以很快找到解。因此,他只用啟發式資訊,即f(n) = h(n)。
將此演算法應用在羅馬尼亞問題中;使用直線距離啟發式,記 為hsl
dh_hsld
,如果目的地是bucharest,我們需要知道到達bucharest的直線距離,如下圖所示。如hsl
d(in
(ara
d))=
366h_(in(arad ))=366
hsld(
in(a
rad)
)=36
6,要注意的是hsl
dh_hsld
不是有問題本身描述計算得到的。而且,有經驗可知,hsl
dh_hsld
和實際路程相關,因此這是乙個有用的啟發式。
arad
366mehadia
241bucharest
0neamt
234craiov
160orade
380drobeta
242pitesti
100eforie
161rimnicu vilcea
193fagaras
176sibiu
253giurgiu
77timisoara
329hirsova
151urziceni
80lasi
226vaslui
199lugoj
244zerind
374圖
3.2圖3.2
圖3.2
圖3.23給出了使用hsl
dh_hsld
的貪婪最佳優先搜尋尋找從arad到 bucharest的路的過程。從arad出發最先擴充套件的結點為 sibiu,因為與 zerind和 timisoara相比,它距離 bucharest最近。下乙個擴充套件的結點是 fagaras,因為它是離目標最近的。 fagaras接下來生成了 bucharest,也就是目標結點。對於這個特殊問題,使用hsd的貪婪最佳優先搜尋在沒有擴充套件任何不在解路徑上的結點前就找到了問題的解;所以,它的搜尋代價是最小的。然而卻不是最優的經過 sibiu到 fagaras到 bucharest i的路徑比經過 rimnicu vilcea到 pitesti到 bucharest的路徑要長32公里。這說明了為什麼這個演算法被稱為「貪夢的」一一在每一步它都要試圖找到離目標最近的結點。
貪婪演算法之所以叫貪婪演算法,是因為他每一步都試圖找到離目標點最近的結點。
最佳優先搜尋的最廣為人知的形式稱為a*搜尋,它對結點的評估結合了g(n),即到達此結點已經花費的代價,和h(n),從該結點到目標結點所花代價
f (n
)=g(
n)+h
(n)f(n) = g(n) + h(n)
f(n)=g
(n)+
h(n)
由於g(n)是從開始結點到結點n的路徑代價,而h(n)是從結點n到目標結點的最小代價路徑的估計值,因此
f (n
)=經過
結點n的
最小代價
解的估計
值f(n) = 經過結點n的最小代價解的估計值
f(n)=經
過結點n
的最小代
價解的估
計值這樣,如果我們想找到乙個最小代價的解,首先擴充套件g(n) + h(n)值得最小的結點是合理的。可以發現這個策略不僅僅合理:假設啟發式函式h(n)滿足特定條件,a* 搜尋既是完備的也是最優的。演算法與一致代價搜尋類似,除了a*使用g+h而不是g。
保證最優性的條件:可採納性和一致性
保障最優性的第乙個條件是h(n)是乙個可採納啟發式。可採納啟發式是指它從不會過高估計到達目標的代價。因為g(n)是當前路徑到達結點n的實際代價,而f(n)=g(n)+h(n),我們可以得到直接結論:f(n)永遠不會超過經過結點n的解的實際代價。可採納的啟發式自然是樂觀的,因為它們認為解決問題所花代價比實際代價小。可採納啟發式的明顯例子就是用來尋找到達 bucharest的路徑的直線距離hsl
dh_hsld
。直線距離是可採納的啟發式,因為兩點之間直線最短,所以用直線距離肯定不會高估。圖3.24給出了通過a*樹搜尋求解到達 bucharest的過程。g值從圖3.2給出的單步代價計算得到,hls
dh_hlsd
值在圖3.22中給出。
特別要注意的是, bucharest首次在步驟(e)的邊緣結點集裡出現,但是並沒有被選中擴充套件,因為它的f值(450)比 pitesti的f值(417)高。換個說法就是可能有個經過 pitesti的解的代價低至417,所以演算法將不會滿足於代價為450的解。
第二個條件,略強於第乙個的條件被稱為一致性(有時也稱為單調性),只作用於在圖搜尋中使用a*演算法。我們稱啟發式h(n)是一致的,
如果對於每個結點n和通過任一行動a生成的n的每個後繼結點n,從結點n到達目標的估計代價不大於從n到n的單步代價與從n到達目標的估計代價之和:h(n)≤c(n,a,n』)+(n)這是一般的三角不等式,它保證了三角形中任何一條邊的長度不大於另兩條邊之和。這裡,三角形是由n,n』和離n最近的目標結點gn構成的。對於可採納的啟發式,這種不等式有明確意義:如果從n經過n』到gn比an)代價小,就違反了加(n)的性質:它是到達gn的下界。很容易證明一致的啟發式都是可採納的。雖然一致性的要求比可採納性更嚴格,要找到滿足可採納性的但可能不一致的啟發式仍然需要艱苦的工作。本章中我們討論的可採納的啟發式都是一致的。例如,考慮hsd。我們知道當每邊都用直線距離來度量時是滿足一般的三角不等式的,而且n
nn和n′n^
n′之間的直線距離不超過c(n
,a,n
′c(n,a,n^
c(n,a,
n′),因此,hsl
dh_hsld
是一致的啟發式。
人工智慧(三)上 通過搜尋進行問題求解
四個基本步驟 1 目標形式化 goal formulation 成功的狀態描述 2 問題形式化 problem formulation 根據所給的目標考慮行動和狀態的描述 3 搜尋 search 通過對行動序列代價計算來選取最佳的行動序列.4 執行 execute 給出 解 執行行動.問題求解 形式...
人工智慧 第三章 通過搜尋進行問題求解
無資訊搜尋演算法 指演算法除了問題定義本身沒有任何其他資訊 有資訊搜尋演算法 可以利用給定的知識引導更有效地找到解。3.1 問題求解agent 1 問題形式化 在給定目標下確定需要考慮哪些行動和狀態的過程 2 搜尋 尋找一組解決問題的行動序列的過程稱為搜尋,搜尋演算法的輸入是問題,輸出是問題的解,以...
IT小妙招之 通過「建立日期」進行搜尋
情景再現 有時我們在搜尋乙個檔案的時候,能記起大概是什麼時間建立的,但遺憾的是,windows 7的搜尋框只有作者 型別 修改日期 大小 名稱等篩選器,如圖1。並沒有關於 建立日期 的篩選器,難道我們只能在資源管理器中,按照 建立日期 排序之後乙個個手工查詢?如果檔案少還好,如果是海量檔案豈不累死?...