日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

人工智能 一种现代方法 第3章 通过搜索进行问题求解

發布時間:2023/12/31 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人工智能 一种现代方法 第3章 通过搜索进行问题求解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

      • 問題求解Agent
      • 問題形式化
      • 通過搜索求解(樹搜索、圖搜索)
      • 無信息搜索策略(盲目搜索)
        • 寬度優先搜索(廣度優先搜索)(BFS)
        • 一致代價搜索(Uniform-cost Search)
        • 深度優先搜索(DFS)
        • 深度受限搜索(Depth Limited Search:DLS)
        • 迭代加深的深度優先搜索(Iterative Deepening Search:IDS)
        • 雙向搜索(Bidirectional search)
      • 有信息的搜索策略(啟發式搜索)
        • 貪婪最佳優先搜索
        • A*搜索:縮小總評估代價
        • 存儲受限的啟發式搜索
      • 啟發式函數
      • 總結
      • 資源分享

問題求解Agent

有一些問題無法通過單獨的行動得出解,需要行動序列達到目標,則需要使用搜索法。

搜索:尋找能夠達到目標的行動序列
無信息搜索:算法除了問題定義本身沒有任何其他信息。
有信息搜索:利用給定的知識引導能夠更有效地找到解。
問題形式化:在給定目標下確定需要考慮哪些行動和狀態的過程。
抽象:除去細節的過程被稱為抽象。如果執行解中的每個行動比原始問題中的容易,那么這種抽象是有用的。

問題形式化

一個問題形式化由下面5個組成部分組成

  • 初轉狀態
    在羅馬尼亞問題中,初始狀態為In(Arad)
  • 描述可能的行動
  • 給定一個狀態s,ACTIONS(s)返回在狀態s下可以執行的動作集合。稱這些狀態讀s是可用的。
    在羅馬尼亞問題中,考慮狀態In(Arad),可應用的行動為:( { Go(Sibiu) , Go(Timisoara) , Go(Zerind)} )
  • 轉移模型(對每個行動的描述)
    用函數RESULT(s,a)描述:在狀態s下執行行動a后到達的狀態。
  • 目標測試
    確定給定的狀態是否是目標狀態。
    在羅馬尼亞問題中,目標狀態集是一個單元素集合{In(Bucharest)}
  • 路徑耗散
    此函數位每條路徑賦一個耗散值,即邊加權。行動a從狀態s走到s’的單步耗散用c(s, a, s’)表示

可以看出,由初始狀態、行動和轉移模型就定義了問題的狀態空間,即從初始狀態可以到達的所有狀態的集合。

問題實例
玩具問題:滑塊問題,八皇后問題,Knuth
現實世界問題:TSP,VLSI布線,機器人導航,自動裝配

吸塵器問題 (玩具問題)
狀態:由Agent位置和灰塵位置確定,世界狀態有n*2的n次方,有n個位置,而且是有或沒有灰塵
初始行動:任何狀態都能被設計成初始狀態
行動 :行動有3個:左、右、吸
轉移模型:最左邊不能再左,最右邊不能再右
目標測試:檢測所有位置是否干凈
路徑消耗:路徑耗散值為1,因此整個路徑的耗散值是路徑中的步數

通過搜索求解(樹搜索、圖搜索)

羅馬尼亞狀態空間圖如下:(從Arad到Bucuresti)

邊緣(開結點表):在任一給定時間點,所有待擴展的葉節點的集合;
探索集(closed表):記錄每個已擴展過的結點。
一般的樹搜索圖搜索算法的非形式化描述:

樹搜索
樹搜索中有冗余路徑

( frontier:已生成未拓展;closed:已拓展)

圖搜索
避免探索冗余路徑的方法是牢記曾經走過的路。圖搜素在樹搜索算法上增加了一個參數:探索集(closed表):記錄每個已擴展過的結點。新生成的結點若于已經生成的某個結點相匹配的話,即是在探索集或是邊緣集中,那么它將被丟棄而不是加入到邊緣集中。

下圖是羅馬尼亞問題的圖搜索過程:

圖搜索只需三步即可到達目標:

圖搜索的一個特點:邊緣將狀態空間圖分成了已探索區域和未被探索區域,因此從初始狀態出發至任一未被探索狀態的路徑都不得不通過邊緣中的結點。

搜索算法基礎
一個解是一個行動,搜索算法考慮各種可能的行動序列
n.STATE : 對應狀態空間中的狀態
n.PARENT : 搜索樹種產生該結點的結點
n.ACTION : 父結點生成該結點時所采取的行動
n.PATH-COST: 代價,一般用 g(n) 表示,指從初始狀態到該結點的路徑消耗

隊列

  • FIFO隊列:先進先出
  • LIFO隊列:棧,后進先出
  • 優先級隊列:根據函數計算最高優先級,具有最高優先級的隊列出隊

問題求解算法的性能
評價性能的標準

  • 完備性:是否保證找到解
  • 最優性:找到的解是否最優
  • 時間復雜度:找到解需要多少時間
  • 空間復雜度:在執行搜索過程中需要多少內存

復雜度的表達

  • b:分支引子 任何節點的最多后繼數
  • d:深度 目標節點的最淺深度 根節點到目標節點的步數
  • m:狀態空間中任何路徑的最大長度

評價搜索有效性—搜索代價,通常由時間復雜度和空間復雜度決定

無信息搜索策略(盲目搜索)

無信息搜索(盲目搜索):除了問題定義中提供的狀態信息外沒有任何附加信息的搜索。
當搜索空間較大并且不知道解所在深度時,迭代加深的深度優先搜索是首選的無信息搜索方法。

寬度優先搜索(廣度優先搜索)(BFS)

a) 概念:先擴展根結點,接著擴展根結點的所有后繼,每次總是擴展深度最淺的結點,然后再擴展它們的后繼。
b) 評價:

  • 完備的(分支因子b有限時);
  • 最優的(如果路徑代價是基于結點深度的非遞減函數,比如step cost保持是1,則是最優的);
  • 時間復雜度
    如果目標檢測是在選擇擴展的結點時:O(b^d)
    如果選擇要擴展的結點在結點生成時才檢測,那么目標結點到之前深度d時已經被擴展,此時為O(b^(d+1))
  • 空間復雜度 O(b^d) ,有 O(b^(d-1) )個結點在搜索集中,O(b^d)個結點在邊緣集中。

默認:Time and space complexity is 1+b+…+b^d =O(b^d)

  • 使用FIFO隊列實現

一個簡單二叉搜索樹的搜索過程:

一致代價搜索(Uniform-cost Search)

每一步的行動代價都相等時,BFS是最優的。因為它總是選擇先擴展深度最淺但是未擴展的結點。
a) 概念:擴展的是路徑消耗g(n)最小的結點n(g(n)指從初始狀態到該結點的路徑消耗 )。
這可以通過將邊緣結點按路徑代價g值進行排序的隊列來實現
b) 評價:

  • 完備的(如果每一步代價都大于等于某個小的正值常數);
  • 最優的;
  • 時間復雜度和空間復雜度在最壞情況均比寬度優先搜索大(因為可能搜索一些對結果無用的樹,一致代價搜索可能會檢查目標深度所有結點看誰的代價小,在這種情況下一致搜索在深度d無意義地做了更多的工作)。

c)特點(和BFS的區別)

  • 將邊緣結點按路徑代價g值進行排序的隊列來實現
  • 目標檢測應用于結點被選擇拓展時,而不是在結點生成的時候
  • 如果邊緣中的節點有更好的路徑到達該節點,則會引入一個測試

例子:考慮下圖(初始狀態S,目標狀態G)

樹搜索

圖搜索

深度優先搜索(DFS)

a) 概念:總是擴展搜索樹的當前邊緣結點集(葉節點)中最深的結點。
b) 評價:

  • 完備性:避免冗余路徑和重復狀態的圖搜索,在有限空間中是完備的,但樹搜索的DFS則不完備,有可能陷入死循環中。在無限狀態空間中,則均可能陷入死循環中
  • 最優性:無論基于圖搜索還是樹搜索的DF算法都不是最優的
  • 時間復雜度O(b^m)受限于狀態空間的規模(可能是無限的);
    m:葉子結點的最大深度
    b:分支因子
    d:目標結點的最淺深度
  • 空間復雜度O(bm)(只需要存儲一條從根結點到葉結點的路徑,以及該路徑上每個結點的所有未擴展的兄弟結點);

c) 變形——回溯搜索:空間復雜度O(m)(每次只產生一個后繼而不是生成所有后繼,每個被部分擴展的結點要記住下一個要生成的結點);
d)使用LIFO隊列實現(棧)

深度受限搜索(Depth Limited Search:DLS)

a) 概念:在深度優先搜索基礎上設置界限l來避免無限狀態空間深度優先搜索失敗的問題(深度為l被當作沒有后繼對待)。
b) 評價:

  • 完備的(l大于d)|不完備的(l小于d,則最淺的目標結點搜索不到);
  • 不是最優的
  • 時間復雜度O(b^l);
  • 空間復雜度O(bl);
    深度優先搜索可以看作是特殊的深度受限搜索,其深度l=∞
    深度受限搜索可以通過修改一般的樹搜索或圖搜索算法來實現。

迭代加深的深度優先搜索(Iterative Deepening Search:IDS)

定義:不斷地增大深度限制,不斷執行深度受限搜索。當深度界限達到d,即最淺的目標結點所在深度時,就能找到目標。
性能:

  • 完備性:分支引子b有限時完備
  • 最優性:路徑代價是節點深度的非遞減函數時最優
  • 空間復雜度:O(bd)
    d: the depth of the shallowest goal node

問題:當深度為3時,有多少個結點被生成?

雙向搜索(Bidirectional search)

定義:同時運行兩個搜索,一個從初始狀態向前搜索,另一個從目標狀態向后搜索,目標檢測是檢查兩個方向的邊緣結點集是否相交,如果交集不為空就找到了解。
理由是b(d/2)+b(d/2)要比b^d小很多。
性能:

  • 完備性:分支引子有限時完備
  • 最優性:不一定是最優的
  • 時空復雜度:O(b^(d/2))

難點:如何向后搜索,部分問題可以向后搜索,但有些問題向后搜索會使得分子引子很大。

有信息的搜索策略(啟發式搜索)

有信息搜索:使用問題本身的定義之外的特定知識進行搜索
評估函數f(n):代價估計
最佳優先搜索的圖搜索的實現與一直代價搜索類似,不過最佳優先是根據f值而不是g值進行優先級隊列排隊的
啟發式函數(heuristic function):h(n) = 結點n到目標結點的最小代價路徑的代價估計值。若n是目標結點,則h(n)=0

  • f(n):經過結點n的最小代價解的估計代價(有可能略小于真實代價)
  • g(n):到達此結點已經花費的真實代價
  • h(n):從該結點到目標結點所花代價

Evaluation function f(n)

  • f(n) = g(n) ,Uniform Cost 一直代價搜索
  • f(n) = h(n),Greedy Best-First 貪婪最佳優先搜索
  • f(n) = g(n) + h(n),A*搜索

貪婪最佳優先搜索

定義:在每一步擴展時,都試圖擴展離目標最近的結點。只用啟發信息,f(n)=h(n)
評價

  • 完備性:不一定能找到解,容易鉆進離目標節點近的死胡同。
  • 最優性:不一定是最優的,因為其貪婪地每次都尋找離目標結點最近的結點
  • 時空復雜度:羅馬尼亞例子中,直線距離啟發式hSLD均很小,O(h),只搜索一條路徑;但最壞情況下,O(b^m),m是搜索空間的最大深度

A*搜索:縮小總評估代價

定義:f(n) = g(n) + h(n),每次都選擇擴展f(n)最小的結點,在擴展時檢測是否到達目標
f(n):經過結點n的最小代價解的估計值
算法與一致代價搜索類似,除了A*使用g+h而不是g
若啟發式函數h(n)滿足特定條件:A*搜索既是完備的也是最優的

保證最優性的條件:

  • 可采納性:h(n)是一個可采納啟發式(admissible),從不會高估到達目標的代價。例如直線距離啟發式。
  • 一致性(單調性):若對于每一個結點n和通過任一行動a生成的n的每個后繼結點n’,從結點n到達目標的代價估計滿足:h(n) <= c(n, a, n1) + h(n1),即滿足三角不等式,則稱h(n)是一致的(Consistent)

A*算法的最優性
A*算法有如下性質:
如果h(n)是可采納的,那么A*的樹搜索版本是最優的;
如果h(n)是一致的,那么么A*的圖搜素版本是最優的;

存儲受限的啟發式搜索

將迭代加深的思想用在啟發式算法中。迭代加深A*算法,IDA*算法。
原來的迭代加深算法截斷值是搜索深度,現在改為f代價(g+h)。

遞歸最佳優先搜索(RBFS)

  • 定義:f_limit記錄次優路徑的f值,如果當前后繼節點的f值均大于f_limit就暫緩探索該節點,將其后繼節點f的最小值代替該節點的f,轉而探索次優節點,并重復以上步驟。
  • 優點:僅用線性內存
  • 缺點:內存使用過少,導致有很多節點被重復擴展,冗余路徑也會帶來復雜度的指數級增長

內存受限A*(MA*)簡化內存受限A*(SMA*)

  • 定義:探索最佳葉子節點直到內存耗盡,丟棄當前f最大節點,并添加新節點。
  • 權衡時空復雜度成為算法探索的最終目的

啟發式函數

對于八數碼問題的啟發式函數有兩個常用的,兩個啟發式函數都沒有超過實際的解代價

  • h1=不在位置上的棋子數,最大為8
  • h2=所有棋子到其目標位置的距離合(水平距離+垂直距離),最大值在20左右

啟發式的精確度對性能的影響
啟發式的設計對有效分支因子的值有影響。
有效分支因子b*: N+1 = 1 + b* + (b*)^2 + … + (b*)^d,所得b*越小算法性能越好;
一般來說啟發式使用值更大的函數是更好的。

從松弛問題出發設計可采納的啟發式
松弛問題:減少了行動限制的問題,狀態空間是原有狀態空間的超圖,多了很多邊。
意義:一個松弛問題最優解的代價,是原問題的可采納啟發式。
生成:通過去掉經過形式化的原問題的一個或幾個條件可以形成松弛問題。
最優松弛問題:可以比較生成的松弛問題的最優解的代價,選擇最大的最優解代價的松弛問題。

除此之外還可以通過從子問題除法設計可采納的啟發式和從經驗中得到啟發式等。

總結

本章介紹了在確定性的、 可觀察的、靜態的和完全可知的環境下,Agent 可以用來選
擇行動的方法。在這種情況下,Agent可以構造行動序列以達到目標;這個過程稱為搜索

  • 在Agent可以開始搜索解之前, 必須對目標和良定義的問題加以形式化。

  • 一個問題由五個部分組成:初始狀態,行動集合,轉移模型描述這些行動的結果,目標測試函數和路徑代價函數。問題的環境用狀態空間表示狀態空間中從初始狀態到達目標狀態的路徑是一個解

  • 搜索算法將狀態和行動視為原子:不考慮它們可能包含的內部結構。

  • 一般的TREE-SEARCH算法會考慮所有的可能來尋找一個解;GRAPH-SEARCH算法則考慮避免冗余路徑

  • 搜索算法的從完備性、最優性、時間復雜度和空間復雜度等方面來評價。復雜度依賴于狀態空間中的分支因子b,和最淺的解的深度d。

  • 無信息搜索方法只能訪問問題的定義。 基本算法如下:
    寬度優先搜索總是擴展搜索樹中深度最淺的結點。算法是完備的,在單位代價的情況下是最優的,但是具有指數級別的空間復雜度。
    一致代價搜索擴展的是當前路徑代價g(n)最小的結點,對于一般性的步驟代價而言算法是最優的。
    深度優先搜索擴展搜索樹中深度最深的結點。它既不是完備的也不是最優的,但它具有線性的空間復雜度。
    深度受限搜索在深度優先搜索上加了深度限制。
    迭代加深搜索在不斷增加的深度限制上調用深度受限搜索直到找到目標。它是完備的,在單位代價的情況下是最優的, 它的時間復雜度可與寬度優先搜索比較,具備線性的空間復雜度。
    雙向搜索可以在很大程度上降低時間復雜度,但是它并不是總是可行的并且可能需要太多的內存空間。

  • 有信息搜索可能需要訪問啟發式函數h(n)來估算從n到目標的解代價。

    • 一般的最佳優先搜索算法根據評估函數選擇擴展結點。
    • 貪婪最佳優先搜索擴展h(n)最小的結點。它不是最優的,但效率較高。
    • A*搜索擴展 f(n)=g(n)+h(n)最小的結點。如果 h(n)是可采納的(對于TREE-SEARCH)或是一致的(對于 GRAPH-SEARCH),A*算是完備的也是最優的。它的空間復雜度依然很高。
    • RBFS(遞歸最佳優先) 和SMA*(簡單內存受限A*)是魯棒的、最優的搜索算法,它們使用有限的內存;只要時間充足,它們能求解 A*算法因為內存不足不能求解的問題。
  • 啟發式搜索算法的性能取決于啟發式函數的質量。好的啟發式有時可以通過松動間
    題的定義來構造,將子問題的解代價記錄在模式數據庫中,或者通過對問題類的經驗學習得到
  • 9.以下結論成立:
    a. When all step costs are equal, g(n) ∝ depth(n)(正比 ), so uniform-cost search reproduces breadth-first search.
    (depth(n):d(n),即結點深度)
    b. Breadth-first search is best-first search with f (n) = depth(n); depth-first search is best-first search with f (n) = ?depth(n); uniform-cost search is best-first search with f (n) = g(n).
    c. Uniform-cost search is A ? search with h(n) = 0.

    (1)當每一步的代價都相等,且到達此結點已經花費的真實代價g(n)正比于結點深度d(n),則寬度優先搜索是一致代價搜索的特殊情況;
    (2)當f(n)=d(n)時,寬度優先搜索是最佳優先搜索的一種特殊情況;
    (3)當f(n)=-d(n)時,深度優先搜索是最佳優先搜索的一種特殊情況;
    (4)當f(n)=g(n)時,一致代價搜索就是最佳優先搜索;
    (5)當h(n)=0時,一致代價搜索就是A*算法;

    資源分享

    實驗代碼下載:
    https://github.com/yyl424525/AI_Homework
    人工智能-一種現代方法中文第三版pdf、課件、作業及解答、課后習題答案、實驗代碼和報告、歷年考博題下載:https://download.csdn.net/download/yyl424525/11310392

    總結

    以上是生活随笔為你收集整理的人工智能 一种现代方法 第3章 通过搜索进行问题求解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。