用搜索法對(duì)問(wèn)題求解

? ? ? 本章將描述一種基于目標(biāo)的智能體瘟裸,稱為問(wèn)題求解智能體浴韭。將會(huì)提出幾個(gè)通用的搜索算法丘喻,但這些算法是無(wú)信息的,除了問(wèn)題的定義念颈,沒(méi)有其他關(guān)于問(wèn)題的信息泉粉,下一章將探討有信息的搜索算法。

1.問(wèn)題求解智能體

? ? ?通過(guò)評(píng)價(jià)多個(gè)未知的行動(dòng)序列來(lái)選擇最佳行動(dòng)序列的智能體叫做問(wèn)題求解智能體榴芳。尋找這樣序列的過(guò)程叫做搜索嗡靡。一個(gè)簡(jiǎn)單的問(wèn)題求解智能體的算法如下。

function SIMPLE-PROBLEM-SOLVING-AGENT(percept) returns action
  inputs percept, a percept
  static seq, an action sequence, initially empty
         state, some description of the current world state
         goal, a goal, initially null
         problem, a problem formulation
 
   state <--- UPDATE-STATE(state,percept)
   if seq is empty then do
      goal <--- FORMULATE-GOAL(state)
      problem <--- FORMULATE-PROBLEM(state,goal)
      seq <- SEARCH(problem)
   action <--- FIRST(seq)
   seq <--- RESET(seq)
   return action

? ? ?該算法輸入當(dāng)前感知窟感,內(nèi)部靜態(tài)量有行動(dòng)序列讨彼、狀態(tài)、目標(biāo)和問(wèn)題柿祈。行動(dòng)序列初始化為空哈误,目標(biāo)初始化為null。智能體每得到一個(gè)感知躏嚎,就調(diào)用該算法進(jìn)行動(dòng)作求解蜜自。每次進(jìn)入該程序時(shí)首先通過(guò)當(dāng)前狀態(tài)和感知更新狀態(tài)。初始seq為空時(shí)卢佣,先格式化目標(biāo)重荠、完成目標(biāo)遇到的問(wèn)題、通過(guò)問(wèn)題來(lái)搜索出最佳序列虚茶,當(dāng)seq不為空時(shí)省略這一步晚缩。之后將序列的第一個(gè)動(dòng)作賦予action,并將該動(dòng)作從seq中刪除(即重置seq)媳危,最后返回action荞彼。

? ? ? ?該算法相當(dāng)于人類有一個(gè)目標(biāo)之后,分析問(wèn)題待笑,指定計(jì)劃鸣皂,一步步實(shí)施。缺點(diǎn)在于不能通過(guò)當(dāng)前狀態(tài)來(lái)時(shí)時(shí)更新計(jì)劃(即seq)。使用環(huán)境屬性來(lái)描述的話寞缝,該智能體的環(huán)境是:靜態(tài)的癌压、可觀察的、離散的荆陆、確定的滩届。本章剩下的篇幅主要介紹SEARCH函數(shù)。

1.1定義明確的問(wèn)題及解

? ? ? ?一個(gè)問(wèn)題可以形式化地定義為四個(gè)組成部分被啼。

  1. 初始狀態(tài)帜消。
  2. 智能體可采納的行動(dòng)的描述,常用的如后繼函數(shù)浓体。
  3. 目標(biāo)測(cè)試泡挺,用來(lái)測(cè)試給定的狀態(tài)是不是目標(biāo)狀態(tài)。
  4. 路徑耗散

1.2把問(wèn)題形式化

? ? ? ?狀態(tài)抽象化命浴、行動(dòng)抽象化娄猫、去除無(wú)關(guān)狀態(tài)與行動(dòng)。通俗的話說(shuō)生闲,把握重點(diǎn)媳溺,蝴蝶效應(yīng)顯然不能考慮在內(nèi)。

2.對(duì)解的搜索

? ? ? ?我們把所有可能的解通過(guò)節(jié)點(diǎn)來(lái)連成樹碍讯,求解實(shí)際上就成為在樹中搜索一個(gè)枝褂删。節(jié)點(diǎn)的表示有很多中,我們可以假設(shè)其含有如下幾個(gè)數(shù)據(jù)結(jié)構(gòu):

  1. STATE 狀態(tài)空間中與節(jié)點(diǎn)相對(duì)應(yīng)的狀態(tài)冲茸。
  2. PARENT-NODE 父節(jié)點(diǎn)。
  3. ACTION 由父節(jié)點(diǎn)產(chǎn)生該節(jié)點(diǎn)所用的行動(dòng)缅帘。
  4. PATH-COST 路徑耗散
  5. DEPTH 初始狀態(tài)到達(dá)該節(jié)點(diǎn)路徑上最少的步驟
? ? ? 樹搜索的非形式化描述為

function TREE-SEARCH(problem,strategy) returns a solution, or failure
     initialize the search tree using the initial state of problem
 
     loop do
         if there are no candidates for expansion then return failure
         choose a leaf node for expansion according to strategy
         if the node contains a goal state the return the corresponding solution
         else expand the node and add the resulting nodes to the search tree 

? ? ?我們還需要表示生成出來(lái)轴术,但沒(méi)有被擴(kuò)展的節(jié)點(diǎn),這些點(diǎn)的集合成為邊緣钦无,邊緣的每個(gè)元素都是葉節(jié)點(diǎn)逗栽,即搜索樹中沒(méi)有后繼的節(jié)點(diǎn)。如果使用一個(gè)集合來(lái)表示邊緣失暂,概念上很直接彼宠,但是計(jì)算代價(jià)是昂貴的,因此我們使用隊(duì)列來(lái)實(shí)現(xiàn)弟塞,下面是對(duì)隊(duì)列的一些操作凭峡。

  1. MAKE-QUEUE(element, ...) 用給定的元素創(chuàng)建一個(gè)隊(duì)列。
  2. EMPTY?(queue) 當(dāng)且僅當(dāng)隊(duì)列為空時(shí)返回一真.
  3. FIRST(queue) 返回隊(duì)列中第一個(gè)元素决记。
  4. REMOVE-FIRST(queue) 返回FIRST(queue)并將其從queue中刪除摧冀。
  5. INSERT(element,queue) 在隊(duì)列中插入一個(gè)元素并返回結(jié)果隊(duì)列,在不同隊(duì)列中插入新元素順序是不同的。
  6. INSERT-ALL(elements,queue) 在隊(duì)列中插入元素集合
? ? ? ? ?通過(guò)一閃定義索昂,可以寫一個(gè)更形式化的搜索算法

function TREE-SEARCH(problem, fringe) returns a solution, or failure
  fringe <--- INSERT(MAKE-NODE(INITIAL-STATE[problem]),fringe)
  loop do
     if EMPTY?(fringe) then return failure
     node <--- REMOVE-FIRST(fringe)
     if GOAL-TEST[problem] applied to STATE[node] succeeds
         then return SOLUTION(node)
     fringe <--- INSERT-ALL(EXPAND(node,problem),fringe)
 

<hr>
function EXPAND(node,problem) returns a set of nodes
  successors <--- the empty set
  for each(action, result) in SUCCESSOR-FN[problem](STATE[node]) do
      s <--- a new node
      STATE[s] <--- result
      PARENT-NODE[s] <--- node
      ACTION[s] <--- action
      PATH-COST[s] <--- PATH-COST[node] + STEP-COST(node,action,s)
      DEPTH[s] <--- DEPTH[node] + 1
      add s to successors
  return successors

度量問(wèn)題求解的性能

  1. 完備性 能否在有解的時(shí)候總能夠到一個(gè)解
  2. 最有性 能夠總是找到最優(yōu)解
  3. 時(shí)間復(fù)雜度 找到解需要多長(zhǎng)時(shí)間
  4. 空間復(fù)雜度 找到解需要多少內(nèi)存

3.無(wú)信息的搜索策略

? ? ? ? 本節(jié)包括無(wú)信息搜索中的五種搜索策略建车。無(wú)信息搜索即除了問(wèn)題定義之外,沒(méi)有狀態(tài)的其他附加信息椒惨。

1.廣度優(yōu)先搜索

? ? ? ? ?廣度優(yōu)先搜索即首先擴(kuò)展根節(jié)點(diǎn)缤至,接著擴(kuò)展根節(jié)點(diǎn)的所有后繼,然后再擴(kuò)展它們的后繼康谆,以此類推领斥。

特點(diǎn)是在下一層任何節(jié)點(diǎn)被擴(kuò)展之前,當(dāng)前層所有節(jié)點(diǎn)都已經(jīng)被擴(kuò)展秉宿。它可以通過(guò)一個(gè)先進(jìn)先出(FIFO)隊(duì)列實(shí)現(xiàn)戒突。

缺點(diǎn):空間復(fù)雜度高、時(shí)間復(fù)雜度高

2.代價(jià)一致搜索

? ? ? 當(dāng)所有單步耗散相等的時(shí)候描睦,廣度優(yōu)先算法是最優(yōu)的膊存,因?yàn)樗偸菙U(kuò)展深度最淺的未擴(kuò)展節(jié)點(diǎn)。將其延伸忱叭,代價(jià)一致搜索是首先擴(kuò)展路徑耗散最低的節(jié)點(diǎn)隔崎。如果單步耗散一致的話,兩種搜索是一致的韵丑。

3.深度優(yōu)先搜索

? ? ? ? ?深度優(yōu)先搜索總是擴(kuò)展搜索樹的當(dāng)前邊緣的最深的節(jié)點(diǎn)爵卒。搜索直接推進(jìn)到搜索樹的最深層,那里的節(jié)點(diǎn)沒(méi)有后繼節(jié)點(diǎn)撵彻。那些節(jié)點(diǎn)擴(kuò)展完之后钓株,它們被從邊緣中去掉,然后搜索算法“向上回到”下一個(gè)還有未擴(kuò)展后繼節(jié)點(diǎn)的 稍淺的節(jié)點(diǎn)陌僵。

? ?這個(gè)搜索策略可以通過(guò)后進(jìn)先出隊(duì)列(LIFO)(棧)來(lái)實(shí)現(xiàn)轴合。

? ?深度優(yōu)先搜索的一個(gè)變形稱之為回溯搜索⊥攵蹋回溯搜素中每個(gè)被部分?jǐn)U展的節(jié)點(diǎn)要記住下一個(gè)要生成的節(jié)點(diǎn)是哪一個(gè)受葛。這兩種算法空間復(fù)雜度小。

4.深度有限搜索

? ? ?即深度優(yōu)先搜索中設(shè)定一個(gè)最大深度偎谁。深度有限搜索可能會(huì)引入不完備总滩,但具體情況通過(guò)給出適合的深度限制,能夠篩除不必要的搜索巡雨。

5.迭代深入深度優(yōu)先搜索

? ? ? 迭代深入搜索是一個(gè)用來(lái)尋找最合適的深度限制的通用策略闰渔。它經(jīng)常和深度優(yōu)先搜索結(jié)合使用。他的做法是不斷的增大深度限制铐望,以此類推澜建,直至找到目標(biāo)節(jié)點(diǎn)向挖。

6.雙向搜索

? ? ? 運(yùn)行兩個(gè)同時(shí)的搜索, 一個(gè)從初始狀態(tài)向前搜索炕舵,一個(gè)從目標(biāo)狀態(tài)向后搜索何之。當(dāng)它們?cè)谥虚g相遇時(shí)終止搜索。

4.去除重復(fù)

? ? ?算法中記錄它訪問(wèn)過(guò)的每一個(gè)狀態(tài)咽筋,相當(dāng)于它直接探索狀態(tài)空間圖溶推。為了做到這一點(diǎn),我們可以在普通搜索算法中加入一個(gè)數(shù)據(jù)結(jié)構(gòu)奸攻,成為closed表蒜危, 用它儲(chǔ)存每一個(gè)擴(kuò)展過(guò)的節(jié)點(diǎn),儲(chǔ)存未擴(kuò)展過(guò)的邊緣的表有時(shí)稱之為open表睹耐。如果當(dāng)前節(jié)點(diǎn)與closed表中的某一個(gè)節(jié)點(diǎn)相匹配辐赞,那么它將被放棄而不是被擴(kuò)展。這個(gè)新的算法稱之為圖搜索——GRAPH-SEARCH硝训。圖搜索很有效响委,在最壞的情況下,它的時(shí)間和空間需求和狀態(tài)空間成正比窖梁。

? ? ? 圖搜索算法的優(yōu)異性能給它帶了一個(gè)棘手的問(wèn)題赘风。當(dāng)一個(gè)重復(fù)狀態(tài)被刪除時(shí),實(shí)際上算法找到了到達(dá)同一狀態(tài)的不同路徑纵刘。GRAPH-SEARCH會(huì)放棄后面找到的路徑邀窃,如果之后找到的路徑其耗散小一些,那么GRAPH-SEARCH就錯(cuò)過(guò)了最佳解假哎。幸運(yùn)的是瞬捕,在單步耗散為常數(shù)的代價(jià)一致搜索和廣度優(yōu)先搜索的情況下這不會(huì)發(fā)生。另一方面舵抹,迭代深入算法使用深度優(yōu)先擴(kuò)展肪虎,很容易在找到最優(yōu)解之前就找到一個(gè)非最優(yōu)解, 因此迭代深入算法需要檢測(cè)新發(fā)現(xiàn)的路徑是否比以前的好掏父,如果是則使用當(dāng)前的代替以前的。

? ? ? ?以下是GRAPH-SEARCH算法的一般版本秆剪。

function GRAPH-SEARCH(problem,fringe) returns a solution, or failure
 
   closed <--- an empty set
   fringe <--- INSERT(MAKE-NODE(INITIAL-STATE[problem]),fringe)
   loop do
       if  EMPTY?(fringe) then return failure
       node <--- REMOVE-FIRST(fringe)
       if GOAL-TEST[problem](STATE[node]) then return SOLUTION(node)
       if STATE[node] is not in closed then
          add STATE[node] to closed
          fringe <--- INSERT-ALL(EXPAND(node,problem),fringe)

5.使用不完全信息的搜索

? ? ? ?不同的不完全會(huì)導(dǎo)致三種不同的情況赊淑。

  1. 無(wú)傳感問(wèn)題(也稱構(gòu)造問(wèn)題)。
  2. 偶發(fā)性問(wèn)題仅讽。如果環(huán)境是部分可觀察的或者行動(dòng)不確定的陶缺,那么智能體在感知每個(gè)行動(dòng)之后將會(huì)提供新的信息。每個(gè)可能的感知信息定義了一個(gè)必須提前準(zhǔn)備處理計(jì)劃的偶發(fā)事件洁灵。如果不確定性是由另外一個(gè)智能體引起的饱岸,就稱其為對(duì)抗性的掺出。
  3. 探索問(wèn)題。當(dāng)感知和行動(dòng)都未知的時(shí)候苫费,稱之為探索問(wèn)題汤锨。探索問(wèn)題可以看做是偶發(fā)性問(wèn)題的一種極端情況。
? ? ?當(dāng)環(huán)境是部分可觀察的百框,智能體可以在信念狀態(tài)空間闲礼,也就是也就是只能所處的可能狀態(tài)集中應(yīng)用搜索算法。在某些情況下铐维,可以構(gòu)造出唯一的序列解柬泽。:而其他情況下,智能體需要一個(gè)偶發(fā)性計(jì)劃來(lái)處理可能出現(xiàn)的未知情況嫁蛇。

以上锨并!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市睬棚,隨后出現(xiàn)的幾起案子第煮,更是在濱河造成了極大的恐慌,老刑警劉巖闸拿,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件空盼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡新荤,警方通過(guò)查閱死者的電腦和手機(jī)揽趾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)苛骨,“玉大人篱瞎,你說(shuō)我怎么就攤上這事⊙髦ィ” “怎么了俐筋?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)严衬。 經(jīng)常有香客問(wèn)我澄者,道長(zhǎng),這世上最難降的妖魔是什么请琳? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任粱挡,我火速辦了婚禮,結(jié)果婚禮上俄精,老公的妹妹穿的比我還像新娘询筏。我一直安慰自己,他們只是感情好竖慧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布嫌套。 她就那樣靜靜地躺著逆屡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪踱讨。 梳的紋絲不亂的頭發(fā)上魏蔗,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音勇蝙,去河邊找鬼沫勿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛味混,可吹牛的內(nèi)容都是我干的产雹。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼翁锡,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蔓挖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起馆衔,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤瘟判,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后角溃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拷获,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年减细,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了匆瓜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡未蝌,死狀恐怖驮吱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情萧吠,我是刑警寧澤左冬,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站纸型,受9級(jí)特大地震影響拇砰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜狰腌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一除破、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧癌别,春花似錦皂岔、人聲如沸蹋笼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至圾笨,卻和暖如春教馆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背擂达。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工土铺, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人板鬓。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓悲敷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親俭令。 傳聞我的和親對(duì)象是個(gè)殘疾皇子后德,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在本章中,我們將看到關(guān)于狀態(tài)空間的信息是如何能夠防止算法在黑暗中跌跌撞撞的抄腔。 1.有信息的搜索策略 我們要考慮的...
    張文峰閱讀 1,697評(píng)論 0 2
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,754評(píng)論 25 707
  • 1 序 2016年6月25日夜瓢湃,帝都,天下著大雨赫蛇,拖著行李箱和同學(xué)在校門口照了最后一張合照绵患,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,081評(píng)論 0 12
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)悟耘,斷路器落蝙,智...
    卡卡羅2017閱讀 134,629評(píng)論 18 139
  • 時(shí)間來(lái)了,我看見了你的方向 你來(lái)時(shí)的燈塔還依然在亮 我作為一個(gè)路人被你的容顏打動(dòng) 我貪念上你的美貌作煌,可是我也知我不...
    導(dǎo)演張升志閱讀 156評(píng)論 0 0