版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第一章搜索問題內(nèi)容: 狀態(tài)空間的搜索問題。搜索方式:盲目搜索啟發(fā)式搜索關(guān)鍵問題: 如何利用知識,盡可能有效地找到問題的解(最佳解)。1搜索問題題(續(xù)1)S0Sg問題全狀狀態(tài)空間間搜索空間間解路徑2搜索問題題(續(xù)2)討論的問問題:有哪些常常用的搜搜索算法法。問題有解解時能否否找到解解。找到的解解是最佳佳的嗎??什么情況況下可以以找到最最佳解??求解的效效率如何何。31.1回回溯策策略例:皇后后問題4()5()Q((1,,1)))6()QQ((1,,1)))((1,,1)((2,,3)))7()Q((1,,1)))((1,,1)((2,,3)))8()QQ((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))9()QQ((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))Q((1,,1)((2,,4)((3..2)))10()QQ((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))((1,,1)((2,,4)((3..2)))11()Q((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))((1,,1)((2,,4)((3..2)))12()((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))((1,,1)((2,,4)((3..2)))13()((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))((1,,1)((2,,4)((3..2)))Q((1,,2)))14()((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))((1,,1)((2,,4)((3..2)))Q((1,,2)))Q((1,,2)((2,,4)))15()((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))((1,,1)((2,,4)((3..2)))Q((1,,2)))Q((1,,2)((2,,4)))Q((1,,2)((2,,4)((3,,1)))16()((1,,1)))((1,,1)((2,,3)))((1,,1)((2,,4)))((1,,1)((2,,4)((3..2)))Q((1,,2)))Q((1,,2)((2,,4)))Q((1,,2)((2,,4)((3,,1)))Q((1,,2)((2,,4)((3,,1)((4,,3)))17回溯策略略屬于盲盲目搜索索的一種種?;厮莶呗月允沁@樣樣一種策策略:首先將規(guī)規(guī)則給出出一個固固定排序序,在搜搜索時,,對當(dāng)前前狀態(tài)依依次檢查查每條規(guī)規(guī)則,在在當(dāng)前狀狀態(tài)未使使用過的的規(guī)則中中找到第第一條可可應(yīng)用規(guī)規(guī)則應(yīng)用用于當(dāng)前前狀態(tài),,得到的的新狀態(tài)態(tài)設(shè)置為為當(dāng)前狀狀態(tài),并并重復(fù)以以上搜索索。如果當(dāng)前前狀態(tài)無無規(guī)則可可用,或或者所有有規(guī)則已已經(jīng)用過過仍未找找到問題題的解,,則將當(dāng)當(dāng)前狀態(tài)態(tài)的前一一個狀態(tài)態(tài)(即直直接生成成該狀態(tài)態(tài)的狀態(tài)態(tài))設(shè)置置為當(dāng)前前的狀態(tài)態(tài)。重復(fù)復(fù)以上搜搜索,直直到找到到問題的的解?;厮莶呗月?8遞歸的思思想回溯有多多種實現(xiàn)現(xiàn)方法,,其中遞遞歸是一一種最直直接的實實現(xiàn)方法法.從前有座山……從前有座山……
從前有座山……19回溯搜索索算法遞歸過程程:BACKTRACK(DATA)
DATA:當(dāng)前前狀態(tài)。。返回值::從當(dāng)前前狀態(tài)到到目標(biāo)狀狀態(tài)的路路徑(以規(guī)則則表的形形式表示示)或FAIL。20回溯搜索索算法遞歸過程程BACKTRACK(DATA))1,IFTERM(DATA)RETURNNIL;///滿足結(jié)束束條件時時返回2,IFDEADEND(DATA)RETURNFAIL;///不合法狀狀態(tài)的回回溯點3,RULES::=APPRULES(DATA));///可應(yīng)用規(guī)規(guī)則集4,LOOP:IFNULL((RULES))RETURNFAIL;///全部規(guī)則則均失敗敗的回溯溯點5,R:=FIRST(RULES);;6,RULES::=TAIL((RULES));///刪去第一一條規(guī)則則,減少少可應(yīng)用用規(guī)則表表的長度度7,RDATA:=GEN(R,DATA);///調(diào)用規(guī)則則R作用用于當(dāng)前前狀態(tài),,生成新新狀態(tài)8,PATH:==BACKTRACK(RDATA);///對新狀態(tài)態(tài)遞歸調(diào)調(diào)用9,IFPATH=FAILGOLOOP;10,RETURNCONS((R,PATH);;///返回解路路徑規(guī)則則表21遞歸的思思想(續(xù)續(xù))當(dāng)前狀態(tài)態(tài)n目標(biāo)狀態(tài)態(tài)tr1r2ri-1rim1m2mi-1mi22存在問題題及解決決辦法解決辦法法:對搜索深深度加以以限制記錄從初初始狀態(tài)態(tài)到當(dāng)前前狀態(tài)的的路徑當(dāng)前狀態(tài)問題:深度問題題死循環(huán)問問題23一些深入入問題在回溯策策略中,,也可以以引入一一些與問問題有關(guān)關(guān)的信息息來加快快搜索解解的速度度?;舅枷胂?以皇皇后問題題為例)):盡可能選選取劃去去對角線線上位置置數(shù)最少少的。QQQQ322324回溯搜索索算法1BACKTRACK1(DATALIST)
DATALIST:從從初始到到當(dāng)前的的狀態(tài)表表(逆向向)返回值::從當(dāng)前前狀態(tài)到到目標(biāo)狀狀態(tài)的路路徑(以規(guī)則則表的形形式表示示)或FAIL。25回溯搜索索算法11,DATA:=FIRST(DATALIST)//設(shè)置DATA為當(dāng)前狀狀態(tài)2,IFMENBER((DATA,TAIL(DATALIST)))RETURNFAIL;//TAIL取尾操作作,取DATALIST中除第一一個以外外的所有有元素,,如果DATA在TAIL(DATALIST)中存在在,則說說明有回回路,返返回FAIL,必須回回溯.3,IFTERM(DATA))RETURNNIL;;//找到目標(biāo)標(biāo),結(jié)束束4,IFDEADEND(DATA))RETURNFAIL;//狀態(tài)不合合法,返返回FAIL,必須回回溯.5,IFLENGTH((DATALIST))>BOUNDRETURNFAIL;//LENGTH計算DATALIST的長度,,即搜索索深度,,當(dāng)搜索索深度大大于BOUND值時,搜搜索失敗敗,返回回FAIL,必須回回溯.6,RULES:==APPRULES((DATA);;//APPRULES計算DATA的可應(yīng)用用規(guī)則集集,依某某種原則則(任意意排列或或啟發(fā)式式排列))排列后后附給RULES.7,LOOP:IFNULL(RULES)RETURNFAIL;//規(guī)則用完完沒找到到目標(biāo),,返回FAIL,必須回溯溯。26回溯搜索索算法1(續(xù)))8,R::=FIRST(RULES);//取第第一條規(guī)規(guī)則9,RULES:=TAIL(RULES);//刪去去第一條條規(guī)則,,減少可可應(yīng)用規(guī)規(guī)則表的的長度10,RDATA::=GEN(R,DATA);//調(diào)用用規(guī)則R作用于于當(dāng)前狀狀態(tài),生生成新狀狀態(tài)11,RDATALIST:=CONS(RDATA,DATALIST);;//將新新狀態(tài)加加入到表表DATALIST中中12,PATH:==BACKTRCK1(RDATALIST)//遞歸歸調(diào)用本本過程13,IFPATH=FAILGOLOOP;;//遞歸歸調(diào)用失失敗,轉(zhuǎn)轉(zhuǎn)移調(diào)用用另一規(guī)規(guī)則進(jìn)行行測試14,RETURNCONS((R,PATH);;//返回回解路徑徑規(guī)則表表27分析這個算法法與BACKRACK的差別別是遞歸歸過程自自變量是是狀態(tài)的的鏈表。。在過程BACKRACK1中中,形參參DATALIST是是從初始始狀態(tài)到到當(dāng)前狀狀態(tài)的逆逆序表,,即初始始狀態(tài)排排在表的的最后,,當(dāng)前狀狀態(tài)排在在表的最最前面。。在第2、、5步增增設(shè)了兩兩個回溯溯點以檢檢驗是否否重新訪訪問已出出現(xiàn)過的的狀態(tài)和和限定搜搜索深度度范圍。。
281.2圖圖搜索索策略問題的引引出回溯搜索索:只保保留從初初始狀態(tài)態(tài)到當(dāng)前前狀態(tài)的的一條路路徑。圖搜索::保留所所有已經(jīng)經(jīng)搜索過過的路徑徑。
29一些基本本概念節(jié)點深度度:根節(jié)點深深度=0其它節(jié)點點深度==父節(jié)點點深度++1012330一些基本本概念((續(xù)1))路徑設(shè)一節(jié)點點序列為為(n0,n1,…,nk),對于于i=1,…,,k,若若任一節(jié)節(jié)點ni-1都具有一一個后繼繼節(jié)點ni,則該節(jié)節(jié)點序列列稱為從從n0到nk的長度為為k的一一條路徑徑。路徑的耗耗散值一條路徑徑的耗散散值等于于連接這這條路徑徑各節(jié)點點間所有有耗散值值的總和和。用C(ni,nj)表示從ni到nj的路徑的的耗散值值.路路徑耗散散值可按按如下遞遞推公式式計算::C(ni,t))=C(ni,nj)+C(nj,t)31一些基本本概念((續(xù)1))擴(kuò)展一個個節(jié)點生成出該該節(jié)點的的所有后后繼節(jié)點點,并給給出它們們之間的的耗散值值。這一一過程稱稱為“擴(kuò)擴(kuò)展一個個節(jié)點””。32一般的圖圖搜索算算法1,G=G0(G0=s),,OPEN::=(s);///設(shè)置open表表,最初初只含有有初始點點s2,CLOSED::=());//設(shè)置置closed表,初初始為空空表3,LOOP:IFOPEN==())THENEXIT(FAIL);4,n:=FIRST(OPEN),REMOVE(n,,OPEN)),ADD((n,CLOSED);//n為為當(dāng)前節(jié)節(jié)點5,IFGOAL(n))THENEXIT(SUCCESS);6,EXPAND((n)→→{mi},G:=ADD((mi,G));//子節(jié)節(jié)點集{{mi}中不包包含n的的父輩節(jié)節(jié)點33一般的圖圖搜索算算法(續(xù)續(xù))7,標(biāo)標(biāo)記和修修改指針針:ADD((mj,OPEN)),并標(biāo)記mj到n的指指針;//mj為open表表和closed表中中未出現(xiàn)現(xiàn)過的子子結(jié)點計算是否否要修改改mk、ml到n的指指針;//mk為已出現(xiàn)現(xiàn)在open表表中的子子結(jié)點,,ml為已出現(xiàn)現(xiàn)在closed表中中的子結(jié)結(jié)點,{{mj}={mj}∪{mk}∪{ml}計算是否否要修改改ml到其后繼繼節(jié)點的的指針;8,對對OPEN中的的節(jié)點按按某種原則則重新排序序;9,GOLOOP;34說明這里給出出的是一一個圖搜搜索的一一般框架架,不是是一個具具體的算算法,關(guān)關(guān)鍵是算算法的第第8步,按不不同的原原則對OPEN表進(jìn)行排排序,將將得到不不同的圖圖搜索算算法。算法中有有兩個表表:OPEN表和CLOSED表。其中中OPEN表記錄的的是已經(jīng)經(jīng)被生成成出來,,但還沒沒有被擴(kuò)擴(kuò)展的節(jié)節(jié)點;CLOSED表記錄的的是已經(jīng)經(jīng)被擴(kuò)展展過的節(jié)節(jié)點。35幾類節(jié)點點的圖例例說明如上圖所所示,假假設(shè)n是當(dāng)前被被擴(kuò)展的的節(jié)點。。在n被擴(kuò)展之之前,節(jié)節(jié)點mk和ml已經(jīng)被生生成出來來了,其其中mk還沒有被被擴(kuò)展,,他們在在OPEN表中,而而ml已經(jīng)被擴(kuò)擴(kuò)展了,,他們在在CLOSED表中。當(dāng)當(dāng)n被擴(kuò)展時時,它生生成了節(jié)節(jié)點mi,mi由mj、mk和ml三部分組組成,其其中mj是新出現(xiàn)現(xiàn)的節(jié)點點。36算法解釋釋圖搜索算算法,簡簡單地說說就是,,每次從從OPEN表中中取出第第一個節(jié)節(jié)點進(jìn)行行擴(kuò)展,,生成的的新節(jié)點點放到OPEN表中,,然后按按照某種種原則對對OPEN表進(jìn)進(jìn)行排序序。不同的排排序原則則構(gòu)成了了不同的的圖搜索索算法。。值得注意意的是算算法成功功結(jié)束的的判斷方方法,是是當(dāng)從OPEN表中取取出一個個節(jié)點后后,再判判斷該節(jié)節(jié)點是否否是目標(biāo)標(biāo)節(jié)點,,而不是是在擴(kuò)展展節(jié)點,,生成新新節(jié)點時時判斷。。這一點點一定要要注意,,在后面面將可以以看到,,這是構(gòu)構(gòu)成某些些最優(yōu)算算法的關(guān)關(guān)鍵所在在。37算法解釋釋這個過程程是在第第8步要要對OPEN表表上的節(jié)節(jié)點進(jìn)行行排序,,以便在在第4步步能選出出一個““最好””的節(jié)點點優(yōu)先擴(kuò)擴(kuò)展。不不同的排排序方法法便可構(gòu)構(gòu)成形式式多樣的的專門搜搜索算法法,這在在后面還還要進(jìn)一一步討論論。如果選出出待擴(kuò)展展的節(jié)點點是目標(biāo)標(biāo)節(jié)點,,則算法法在第5步成功功結(jié)束,,并可根根據(jù)回溯溯到s的的指針給給出解路路徑。如如果某個個循環(huán)中中,搜索索樹不再再剩有待待選的節(jié)節(jié)點,即即OPEN表變變空時,,則過程程失敗結(jié)結(jié)束,問問題找不不到解。。38算法解釋釋現(xiàn)在說明明一下第第7步中中標(biāo)記和和修改指指針的問問題。如果要搜搜索的隱隱含圖是是一棵樹樹,則可可肯定第第6步生生成的后后繼節(jié)點點不可能能是以前前生成過過的,這這時搜索索圖就是是搜索樹樹,不存存在mk、ml這種類型型的子節(jié)節(jié)點,因因此不必必進(jìn)行修修改指針針的操作作。如果要搜搜索的隱隱含圖不不是一棵棵樹,則則有可能能出現(xiàn)這這樣的的子節(jié)點點,就是是說這時時又發(fā)現(xiàn)現(xiàn)了到達(dá)達(dá)的新通通路,這這樣就要要比較不不同路徑徑的耗散散值,把把指針修修改到具具有較小小耗散值值的路徑徑上。39例如,下下圖所示示的兩個個搜索圖圖中,實實心圓點點在CLOSED表中(已已擴(kuò)展過過的節(jié)點點),空空心圓點點則在OPEN表中(待待擴(kuò)展點點)。先設(shè)下一一步輪到到要擴(kuò)展節(jié)點點6,并設(shè)生生成的兩兩個子節(jié)節(jié)點,其其中有一一個4已在OPEN中,那么么原先路路徑(s→3→→2→4)耗散值值為5(設(shè)每段段路徑均均為單位位耗散)),新路路徑(s→6→→4)的耗散散值為4,所以4的指針應(yīng)應(yīng)由指向向2修正到指指向6,如圖2.5(a)所示。。接著設(shè)下下一循環(huán)環(huán)要擴(kuò)展節(jié)點點1,若節(jié)點點1只生成一一個子節(jié)節(jié)點2(它已在在CLOSED上),顯顯然這時時節(jié)點2原先指向向節(jié)點3的指針,,要修改改到指向向節(jié)點1,由此又又引起子節(jié)點3的指針又又修改為為指向2,如圖2.5(b)所示。。401.3無無信息息圖搜索索過程無信息圖圖搜索屬屬于盲目目搜索,,這里給給兩種常常用的無無信息圖圖搜索方方法:深度優(yōu)先先搜索寬度優(yōu)先先搜索41所謂深度度優(yōu)先搜搜索,就就是在每每次擴(kuò)展展一個節(jié)節(jié)點時,,選擇到到目前為為止深度度最深的的節(jié)點優(yōu)優(yōu)先擴(kuò)展展。第7步中中的ADD(mj,OPEN)表表示將被被擴(kuò)展節(jié)節(jié)點n的的所有新新子節(jié)點點mj加到OPEN表表的前面面。開始始時,OPEN表中只只有一個個初始節(jié)節(jié)點s,,s被擴(kuò)擴(kuò)展,其其子節(jié)點點被放入入OPEN表中中。在算法的的第3步步,OPEN表表的第一一個元素素(設(shè)為為n)被被取出擴(kuò)擴(kuò)展,這這時節(jié)點點n的深深度在OPEN表中是是最大的的,OPEN表表中的其其他節(jié)點點的深度度都不會會超過n的深度度。n的的子節(jié)點點被放到到OPEN表的的最前面面。由于于子節(jié)點點的深度度要大于于父節(jié)點點的深度度,實際際上OPEN表表是按照照節(jié)點的的深度進(jìn)進(jìn)行排序序的,深深度深的的節(jié)點被被排在了了前面,,而深度度淺的節(jié)節(jié)點被放放在了后后面。這這樣當(dāng)下下一個循循環(huán)再次次取出OPEN表的第第一個元元素時,,實際上上選擇的的就是到到目前為為止深度度最深的的節(jié)點,,從而實實現(xiàn)了深深度優(yōu)先先的搜索索策略。。42一般情況況下,當(dāng)當(dāng)問題有有解時,,深度優(yōu)優(yōu)先搜索索不但不不能保證證找到最最優(yōu)解,,也不能能保證一一定能找找到解。。如果問問題的狀狀態(tài)空間間是有限限的,則則可以保保證找到到解,當(dāng)當(dāng)問題的的狀態(tài)空空間是無無限的時時,則可可能陷入入"深淵淵",而而找不到到解。為為此,像像回溯算算法一樣樣,可以以加上對搜搜索的深深度限制制。其方法法是在算算法的第第7步,,當(dāng)節(jié)點點的深度度達(dá)到限限制深度度時,則則不將其其子節(jié)點點加入到到OPEN表中中,從而而實現(xiàn)對對搜索深深度的限限制。當(dāng)當(dāng)然,這這個深度度限制應(yīng)應(yīng)該設(shè)置置的合適適,深度度過深影影響搜索索的效率率,而深深度過淺淺,則可可能影響響找到問問題的解解。43回溯和深深度優(yōu)先先的區(qū)別別在有些書書上所講講的深度度優(yōu)先實實際上指指的是我我們這里里所說的的回溯策策略,在在本書中中還是將將二者區(qū)區(qū)分開來來。從形形式上來來說,二二者確實實很相似似,所表表現(xiàn)出來來的都是是每次選選擇深度度最深的的節(jié)點首首先擴(kuò)展展。但二二者還是是有區(qū)別別的,這這里所說說的深度度優(yōu)先屬屬于圖搜搜索策略略,不足足是占用用較多的的存儲空空間,好好處是對對于特殊殊的問題題,可能能會提高高搜索的的效率。。44設(shè)某問題題的狀態(tài)態(tài)空間如如圖所示示。從圖圖中可以以看出該該問題的的特點::初始節(jié)節(jié)點有若若干個子子節(jié)點,,每個子子節(jié)點都都鏈接到到三條很很深的路路徑中,,而目標(biāo)標(biāo)假定在在最右邊邊的路徑徑中。當(dāng)當(dāng)采用回回溯策略略時,由由于回溯溯策略只只保留從從初始節(jié)節(jié)點到當(dāng)當(dāng)前節(jié)點點的一條條路徑,,所以從從第一個個子節(jié)點點(從左左數(shù))進(jìn)進(jìn)入第一一條路徑徑搜索((從左遍遍數(shù)),,回溯后后,又進(jìn)進(jìn)入第二二條路徑徑。由于于沒有找找到解,,又回溯溯到第二二個子節(jié)節(jié)點。從從第二個個子節(jié)點點,同樣樣要搜索索第一條條路徑、、第二條條路徑。。第三個個字節(jié)點點、第四四個子節(jié)節(jié)點………也都同同樣。這這樣,第第一和第第二條路路徑將被被多次搜搜索,影影響了搜搜索的效效率。而而對于深深度優(yōu)先先策略((單指這這里所說說的圖搜搜索深度度優(yōu)先)),由于于保留了了所有已已經(jīng)搜索索過的路路徑,當(dāng)當(dāng)通過第第一個節(jié)節(jié)點搜索索了第一一、第二二條路徑徑后,當(dāng)當(dāng)通過第第二個子子節(jié)點搜搜索時,,由于第第一、第第二條路路徑已經(jīng)經(jīng)被搜索索,并且且被記錄錄了,所所以就不不必重復(fù)復(fù)搜索了了,提高高了搜索索的效率率。這一一點在算算法中是是如何體體現(xiàn)出來來的呢??關(guān)鍵是是算法的的第7步步,在n的子節(jié)節(jié)點中,,只將mj類節(jié)點加加入到了了OPEN表中中,而對對于mk類節(jié)點和和ml類節(jié)點則則不予考考慮。45深度優(yōu)先先搜索1,G:=G0(G0=s),,OPEN::=(s),CLOSED:=(();;2,LOOP:IFOPEN=())THENEXIT((FAIL));3,n:=FIRST(OPEN);4,IFGOAL(n))THENEXIT((SUCCESS);;5,REMOVE((n,OPEN),,ADD(n,CLOSED));6,IFDEPTH(n)≥DmGOLOOP;7,EXPAND((n)→→{mi},G:=ADD((mi,G));8,IF目目標(biāo)在{{mi}中THENEXIT((SUCCESS);;9,ADD((mj,OPEN)),并并標(biāo)記mj到n的指指針;10,GOLOOP;46231847652318476528314765231847652831476528316475283147652831647528316475283714658321476528143765283145761237846512384765283641752831675483214765283714652814376528314576123456789abcd12384765目標(biāo)47深度優(yōu)先先搜索的的性質(zhì)一般不能能保證找找到最優(yōu)優(yōu)解當(dāng)深度限限制不合合理時,,可能找找不到解解,可以以將算法法改為可可變深度度限制最壞情況況時,搜搜索空間間等同于于窮舉與回溯法法的差別別:圖搜搜索是一個通通用的與與問題無無關(guān)的方方法48寬度優(yōu)先先搜索同深度優(yōu)優(yōu)先算法法一樣,,寬度優(yōu)優(yōu)先算法法也是從從一般的的圖搜索索算法變變化而成成。在深深度優(yōu)先先搜索中中,每次次選擇深深度最深深的節(jié)點點首先擴(kuò)擴(kuò)展,而而寬度優(yōu)優(yōu)先搜索索則正好好相反,,每次選選擇深度最淺淺的節(jié)點優(yōu)優(yōu)先擴(kuò)展展。與深深度優(yōu)先先算法不不同的只只是第7步,這里里ADD(OPEN,mj)表示將將mj類子節(jié)點點放到OPEN表的后邊邊,從而而實現(xiàn)了了對OPEN表中的元元素按節(jié)節(jié)點深度度排序,,只不過過這次將將深度淺淺的節(jié)點點放在OPEN表的前面面了,而而深度深深的節(jié)點點被放在在了OPEN表的后邊邊。當(dāng)問問題有解解時,寬寬度優(yōu)先先算法不不但能一一定找到到解,而而且在單單位耗散散的情況況下,可可以保證證找到最最優(yōu)解。。49寬度優(yōu)先先搜索1,G:=G0(G0=s),OPEN:==(s)),CLOSED::=());2,LOOP:IFOPEN=())THENEXIT((FAIL));3,n:=FIRST(OPEN);4,IFGOAL(n))THENEXIT((SUCCESS);;5,REMOVE((n,OPEN),,ADD(n,CLOSED));6,EXPAND((n)→→{mi},G:=ADD((mi,G));7,IF目目標(biāo)在{{mi}中THENEXIT((SUCCESS);;8,ADD((OPEN,mj),并標(biāo)記mj到n的指指針;9,GOLOOP;5023184765231847652831476523184765283147652831647528314765283164752831647528371465832147652814376528314576123784651238476512567312384765目標(biāo)823418765451寬度優(yōu)先先搜索的的性質(zhì)當(dāng)問題有有解時,,一定能能找到解解當(dāng)問題為為單位耗耗散值,,且問題題有解時時,一定定能找到到最優(yōu)解解方法與問問題無關(guān)關(guān),具有有通用性性效率較低低屬于圖搜搜索方法法521.4啟啟發(fā)式式圖搜索索利用知識識來引導(dǎo)導(dǎo)搜索,,達(dá)到減減少搜索索范圍,,降低問問題復(fù)雜雜度的目目的。啟發(fā)信息息的強(qiáng)度度強(qiáng):降低低搜索工工作量,,但可能能導(dǎo)致找找不到最最優(yōu)優(yōu)解解弱:一般般導(dǎo)致工工作量加加大,極極限情況況下變?yōu)闉槊っつ克阉魉?,但可可能可以以找到最最?yōu)解53希望:引入啟發(fā)發(fā)知識,,在保證證找到最最佳解的的情況下下,盡可可能減少少搜索范范圍,提提高搜索索效率。。54基本思想想啟發(fā)式搜搜索過程程中,要要對OPEN表表進(jìn)行排排序,這這就需要要有一種種方法來來計算待待擴(kuò)展節(jié)節(jié)點有希希望通向向目標(biāo)節(jié)節(jié)點的不不同程度度,我們們總是希希望能找找到最有有希望通通向目標(biāo)標(biāo)節(jié)點的的待擴(kuò)展展節(jié)點優(yōu)優(yōu)先擴(kuò)展展。一種最常常用的方方法是定定義一個個評價函函數(shù)f((Evaluationfunction)對對各個子子節(jié)點進(jìn)進(jìn)行計算算,其目目的就是是用來估估算出““有希望望”的節(jié)節(jié)點來。。定義一個個評價函函數(shù)可以以參考的的原則有有:一個個節(jié)點處處在最佳佳路徑上上的概率率;求出出任意一一個節(jié)點點與目標(biāo)標(biāo)節(jié)點集集之間的的距離度度量或差差異度量量;根據(jù)據(jù)格局((博弈問問題)或或狀態(tài)的的特點來來打分。。即根據(jù)據(jù)問題的的啟發(fā)信信息,從從概率角角度、差差異角度度或記分分法給出出計算評評價函數(shù)數(shù)的方法法。551.啟啟發(fā)式搜搜索算法法A(A算法))啟發(fā)式搜搜索算法法A,一般簡簡稱為A算法,是是一種典典型的啟啟發(fā)式搜搜索算法法。其基本思思想是::定義一一個評價價函數(shù)f,對當(dāng)前前的搜索索狀態(tài)進(jìn)進(jìn)行評估估,找出出一個最最有希望望的節(jié)點點來擴(kuò)展展。評價函數(shù)數(shù)的格式式:f(n))=g(n)++h((n)f(n)):評價價函數(shù)h(n)):啟發(fā)發(fā)函數(shù)56符號的意意義g*(n):從s到n的最短路路徑的耗耗散值h*(n):從n到g的最短路路徑的耗耗散值f*(n)=g*(n)+h*(n):從s經(jīng)過n到g的最短路路徑的耗耗散值g(n))、h(n))、f(n))分別是g*(n)、h*(n)、f*(n)的估計值值,是一種預(yù)預(yù)測。A算法就是是利用這這種預(yù)測測,來達(dá)達(dá)到有效效搜索的的目的的的。它每每次按照照f(n)值的大小小對OPEN表中的元元素進(jìn)行行排序,,f值小的節(jié)節(jié)點放在在前面,,而f值大的節(jié)節(jié)點則被被放在OPEN表的后面面,這樣樣每次擴(kuò)擴(kuò)展節(jié)點點時,都都是選擇擇當(dāng)前f值最小的的節(jié)點來來優(yōu)先擴(kuò)擴(kuò)展。57A算法利用評價價函數(shù)f(n))=g((n)++h(n)來排排列OPEN表表節(jié)點順順序的圖圖搜索算算法稱為為A算法法。58A算法過程
1,OPEN:=((s),,f((s)::=g((s)++h(s);2,LOOP:IFOPEN=())THENEXIT((FAIL);;3,n:=FIRST(OPEN);4,IFGOAL(n))THENEXIT(SUCCESS);5,REMOVE((n,OPEN),,ADD(n,CLOSED));6,EXPAND((n)→→{mi},//{mi}={mj}∪{mk}∪{ml}①計算f((n,mi):=g(n,,mi)+h((mi);//g(n,mi)是從s通過n到mi的耗散值值,f(n,mi)是從s通過n、mi到目標(biāo)節(jié)節(jié)點耗散散值的估估計。59A算法((續(xù))②ADD((mj,OPEN)),標(biāo)標(biāo)記mj到n的指指針;③IFf(n,,mk)<f((mk)THENf(mk):=f(n,,mk),標(biāo)記mk到n的指指針;//比比較f(n,,mk)和f((mk),f(mk)是擴(kuò)展展n之前前計算的的耗散值值。④IFf(n,,ml)<f((ml)THENf(ml):=f(n,,ml),標(biāo)記ml到n的指指針,ADD(ml,OPEN));7,OPEN中的節(jié)點點按f值值從小到到大排序序;8,GOLOOP;60A算法同同樣由一一般的圖圖搜索算算法改變變而成。。在算法法的第7步,按按照f值值從小到到大對OPEN表中的的節(jié)點進(jìn)進(jìn)行排序序,體現(xiàn)現(xiàn)了A算算法的含含義。算法要計計算f((n)、、g(n)和h(n))的值,,g(n)根據(jù)據(jù)已經(jīng)搜搜索的結(jié)結(jié)果,按按照從初初始節(jié)點點s到節(jié)節(jié)點n的的路徑,,計算這這條路徑徑的耗散散值就可可以了。。而h((n)是是與問題題有關(guān)的的,需要要根據(jù)具具體的問問題來定定義。有有了g((n)和和h(n)的值值,將他他們加起起來就得得到f((n)的的值。注意A算算法的結(jié)結(jié)束條件件:當(dāng)從從OPEN中取取出第一一節(jié)點時時,如果果該節(jié)點點是目標(biāo)標(biāo)節(jié)點,,則算法法成功結(jié)結(jié)束。而而不是在在擴(kuò)展一一個節(jié)點點時,只只要目標(biāo)標(biāo)節(jié)點一一出現(xiàn)就就立即結(jié)結(jié)束。我我們在后后面將會會看到,,正是由由于有了了這樣的的結(jié)束判判斷條件件,才使使得A算算法有很很好的性性質(zhì)。61算法中f(n))規(guī)定為為對從初初始節(jié)點點s出發(fā)發(fā),約束束通過節(jié)節(jié)點n到到達(dá)目標(biāo)標(biāo)點t,,最小耗耗散值路路徑的耗耗散值f*(n)的估估計值,,通常取取正值。。f(n))由兩個個分量組組成,其其中g(shù)((n)是是到目前前為止,,從s到到n的一一條最小小耗散值值路徑的的耗散值值,是作作為從s到n最最小耗散散值路徑徑的耗散散值g**(n))的估計計值,h(n))是從n到目標(biāo)標(biāo)節(jié)點t,最小小耗散值值路徑的的耗散值值h*((n)的的估計值值。62一個A算算法的例例子定義評價價函數(shù)::f(n))=g(n)++h((n)g(n))為從初初始節(jié)點點到當(dāng)前前節(jié)點的的耗散值值h(n))為當(dāng)前前節(jié)點““不在位位”的將將牌數(shù)
283164751238476563h計算舉舉例h(n))=42831647512345768642831647528314765283164752831647523184765283147652831476528371465832147652318476523184765123847651238476512378465s(4))A(6))B(4))C(6))D(5))E(5))F(6))G(6))H(7))I(5))J(7))K(5))L(5))M(7))目標(biāo)12345665根據(jù)目標(biāo)標(biāo)節(jié)點L返回到s的指針,,可得解解路徑S(4)),B(4)),E(5)),I(5)),K(5)),L(5))662.爬山山法爬山法((局部搜搜索算法法)672.爬山山法過程Hill--climbing①n::=s;;s為初初始節(jié)點點
②LOOP:IFGOAL(n))THENEXIT(SUCCESS);③③EXPAND((n)→→{mi},計算算h(mi),nextn:=m(minh(mi)的節(jié)點點);④④IFh(n))<h((nextn))THENEXIT(FAIL);⑤⑤n:=nextn;⑥⑥GOLOOP;顯顯然如果果將山頂頂作為目目標(biāo),h(n))表示山山頂與當(dāng)當(dāng)前位置置n之間間高度之之差,則則該算法法相當(dāng)于于總是登登向山頂頂,在單單峰的條條件下,,必能到到達(dá)山峰峰。683.分支支界限法法分支界限限法是優(yōu)優(yōu)先擴(kuò)展展當(dāng)前具具有最小小耗散值值分支路路徑的端端節(jié)點n,其評評價函數(shù)數(shù)為f((n)==g(n)。該該算法的的基本思思想很簡簡單,實實際上是是建立一一個局部部路徑((或分支支)的隊隊列表,,每次都都選耗散散值最小小的那個個分支上上的端節(jié)節(jié)點來擴(kuò)擴(kuò)展,直直到生成成出含有有目標(biāo)節(jié)節(jié)點的路路徑為止止。69過程Branch-Bound①Q(mào)UEUE:=((s-s),g(s))=0;;
②LOOP:IFQUEUE=(()THENEXIT(FAIL));③③PATH::=FIRST(QUEUE),n:=LAST(PATH));④④IFGOAL((n)THENEXIT(SUCCESS));⑤⑤EXPAND(n)→{{mi}},計算算g(mi)==g(n,mi),REMOVE((s--n,,QUEUE)),ADD((s-mi,QUEUE);;
⑥QUEUE中中局部路路徑g值值最小者者排在前前面;⑦⑦GOLOOP;70應(yīng)用分支支界限法法求下圖圖的最短短路徑,,求解過過程中QUEUE的結(jié)結(jié)果簡記記如下((D(4)代表表耗散值值為4的的s-D分支,,其余類類推)::g=771初始(s(0)))1.(A(3))D(4))2.((D(4)B((7)D(8)))3.(E(6))B(7)D((8)A(9)))4.(B(7))D(8)A((9)F(10)B((11)))5.(D(8))A(9)F((10))B(11)C(11)E((12)))6.(A(9))E(10)F(10)B((11))C(11)E(12))7.((E(10)F(10)B((11))C(11)E(12)B((13)))8.(F(10)B((11))C(11)E(12)B((13))F(14)B(15))9.((B(11)C(11)E((12))t(13)B(13)F((14))B(15)))
10.(C(11)E((12))t(13)B(13)F((14))A(15)B(15)C((15)))11.((E(12)t(13)B((13))F(14)A(15)B((15))C(15)))
12.(t(13)B((13))F(14)D(14)A((15))B(15)C(15)F((16)))13.結(jié)結(jié)束。724.動態(tài)態(tài)規(guī)劃法法在A算法法中,當(dāng)當(dāng)h(n)≡0時,則則A算法法演變?yōu)闉閯討B(tài)規(guī)規(guī)劃算法法。由于于在A算算法中,,很多問問題的啟啟發(fā)函數(shù)數(shù)h難于于定義,,因此動動態(tài)規(guī)劃劃算法是是至今一一直被經(jīng)經(jīng)常使用用的算法法。734.動態(tài)態(tài)規(guī)劃法法動態(tài)規(guī)劃劃法實際際上是對對分支界界限法的的改進(jìn)。。從圖2.9看出,第第二循環(huán)環(huán)擴(kuò)展A(3)后生成成的D(8)節(jié)點((D(4)已在QUEUE上)和第第三循環(huán)環(huán)擴(kuò)展D(4)之后生生成的A(9)節(jié)點((A(3)已以QUEUE上)都是是多余的的分支,,因為由由s-D到達(dá)目標(biāo)標(biāo)的路徑徑顯然要要比s-A-D到達(dá)目標(biāo)標(biāo)的路徑徑要好。。因此刪刪去類似似于s-A-D或s-D-A這樣一些些多余的的路徑將將會大大大提高搜搜索效率率。動態(tài)態(tài)規(guī)劃原原理指出出,求s→t的最佳路路徑時,,對某一一個中間間節(jié)點I,只要考考慮s到I中最小耗耗散值這這一條局局部路徑徑就可以以,其余余s到I的路徑是是多余的的,不必必加以考考慮。74動態(tài)規(guī)劃劃st第一階段段第二階段段第三階段段第四階段段第五階段段754.動態(tài)態(tài)規(guī)劃法法過程Dynamic--Programming①Q(mào)UEUE:=((s-s),g(s))=0;;
②LOOP:IFQUEUE=(()THENEXIT(FAIL));③③PATH::=FIRST(QUEUE),n:=LAST(PATH));④④IFGOAL((n)THENEXIT(SUCCESS));⑤⑤EXPAND(n)→{{mi}},計算算g(mi)==g(n,mi),REMOVE((s-n,QUEUE),ADD((s-mi,QUEUE);;
⑥若若QUEUE中有多多條到達(dá)達(dá)某一公公共節(jié)點點的路徑徑,則只只保留耗耗散值最最小的那那條路徑徑,其余余刪去,,并重新新排序,,g值最最小者排排在前面面;⑦⑦GOLOOP;;765.最佳佳圖搜索索算法A*(OptimalSearch))當(dāng)在算法法A的評價函函數(shù)中,,使用的的啟發(fā)函函數(shù)h(n)是處在h﹡(n)的下界界范圍,,即滿足足h(n)≤h*(n)時,則我我們把這這個算法法稱為算算法A﹡。775.A*算法法A﹡算法實際際上是分分支界限限和動態(tài)態(tài)規(guī)劃原原理及使使用下界界范圍的的h相結(jié)合的的算法。。當(dāng)問題有有解時,,A﹡一定能找找到一條條到達(dá)目目標(biāo)節(jié)點點的最佳佳路徑。。例如在在極端情情況下,,若h(n))≡0(肯定滿滿足下界界范圍條條件),,因而一一定能找找到最佳佳路徑;若g≡d,則算法法等同于于寬度優(yōu)優(yōu)先算法法。前面面已提到到過,寬寬度優(yōu)先先算法能能保證找找到一條條到達(dá)目目標(biāo)節(jié)點點最小長長度的路路徑,因因而這個個特例從從直觀上上就驗證證了A﹡的一般結(jié)結(jié)論。一般地說說對任意意一個圖圖,當(dāng)s到目標(biāo)節(jié)節(jié)點有一一條路徑徑存在時時,如果果搜索算算法總是是在找到到一條從從s到目標(biāo)節(jié)節(jié)點的最最佳路徑徑上結(jié)束束,則稱稱該搜索索算法是是可采納納的(Admissibility)。A﹡就具有可可采納性性。78對于以下下的定理理、引理理和推論論,我們們只要求求掌握其其結(jié)論和和含義,,不要求求掌握其其具體的的證明過過程。但但是證明明過程有有助于你你對算法法的理解解。以下定理理的證明明,正文文部分是是嚴(yán)格的的,而解解釋部分分,則不不是嚴(yán)格格的證明明,只是是從直觀觀上,或或者從思思路上進(jìn)進(jìn)行說明明。在以下的的定理證證明過程程中,要要明確這這樣幾個個關(guān)系::f*(s)=f*(t)=h*(s),其中s是初始節(jié)節(jié)點,t是目標(biāo)節(jié)節(jié)點(有有時也用用g表示)。。當(dāng)n是從初始始節(jié)點到到目標(biāo)節(jié)節(jié)點t的最優(yōu)路路徑上的的節(jié)點時時,f*(n)=f*((s)==f*((t)==h*((s)。5.A*算法法79A*算法法的性質(zhì)質(zhì)(續(xù)1)定理1..1:對有限圖圖,如果果從初始始節(jié)點s到目標(biāo)標(biāo)節(jié)點t有路徑徑存在,,則算法法A一定定成功結(jié)結(jié)束。證明:設(shè)設(shè)A搜索索失敗,,則算法法在第2步結(jié)束束,OPEN表表變空,,而CLOSED表中中的節(jié)點點是在結(jié)結(jié)束之前前被擴(kuò)展展過的節(jié)節(jié)點。由由于圖有有解,令令(n0=s,,n1,,n2,,…,nk=t)表示示某一解解路徑,,我們從從nk開開始逆向向逐個檢檢查該序序列的節(jié)節(jié)點,找找到出現(xiàn)現(xiàn)在CLOSED表中中的節(jié)點點ni,,即niCLOSED,ni+1CLOSED(ni一定定能找到到,因為為n0CLOSED,nkCLOSED)。。由于ni在CLOSES中中,必定定在第6步被擴(kuò)擴(kuò)展,且且ni++1被加加到OPEN中中,因此此在OPEN表表空之前前,ni+1已已被處理理過。若若ni++1是目目標(biāo)節(jié)點點,則搜搜索成功功,否則則它被加加入到CLOSED中中,這兩兩種情況況都與搜搜索失敗敗的假設(shè)設(shè)矛盾,,因此對對有限圖圖不失敗敗則成功功。[證證畢]80A*算法法的性質(zhì)質(zhì)(續(xù)2)引理1..1::對無限圖圖,若有有從初始始節(jié)點s到目標(biāo)標(biāo)節(jié)點t的路徑徑,則A*不結(jié)結(jié)束時,,在OPEN表表中即使使最小的的一個f值也將將增到任任意大,,或有f(n))>f**(s))。該引理的的證明中中,隱含含了兩個個假設(shè)::(1))任何兩兩個節(jié)點點之間的的耗散值值都大于于某個給給定的大大于零的的常量;;(2))h(n)對于于任何n來說,,都大于于等于零零。由由于當(dāng)當(dāng)問題有有解存在在時,從從初始節(jié)節(jié)點到目目標(biāo)節(jié)點點的路徑徑的耗散散值總是是一個有有限的常常量。那那么在該該解路徑徑上的任任何一個個節(jié)點n,由于于f(n)=g(n))+h((n),,而g((n)是是有限的的,h((n)≤≤h*((n)也也是有限限的(因因為h**(n))有限)),所以以f(n)也是是有限的的。而對對于一個個無限圖圖來說,,那些不不在解路路徑上的的無限路路徑,隨隨著搜索索的進(jìn)行行,其耗耗散值總總會趨于于無窮大大,因此此那些在在解路徑徑上的節(jié)節(jié)點的f值值總會變變得最小小,總會會有機(jī)會會被排在在OPEN表的的第一個個位置,,從而被被A*擴(kuò)擴(kuò)展。而而目標(biāo)節(jié)節(jié)點也是是解路徑徑上的一一個節(jié)點點,這樣樣它同樣樣會有機(jī)機(jī)會被排排在OPEN表表的第一一個位置置,從而而使得算算法成功功結(jié)束,,找到問問題的解解路徑。。81A*算法法的性質(zhì)質(zhì)(續(xù)2)引理1..2::對無限圖圖,若有有從初始始節(jié)點s到目標(biāo)標(biāo)節(jié)點t的路徑徑,則A*不結(jié)結(jié)束時,,在OPEN表表中即使使最小的的一個f值也將將增到任任意大,,或有f(n))>f**(s))。證明:設(shè)設(shè)d﹡((n)是是A﹡生生成的搜搜索樹中中,從s到任一一節(jié)點n最短路路徑長度度的值((設(shè)每個個弧的長長度均為為1),,搜索圖圖上每個個弧的耗耗散值為為C(ni,ni+1)(C取正))。令e=minC(ni,ni+1)),則g﹡(n)≥d﹡(n)e。。而g((n)≥≥g﹡((n)≥≥d﹡((n)e,故有有:f(n))=g((n)++h(n)≥g(n))≥d﹡﹡(n))e(設(shè)設(shè)h(n)≥0)若若A﹡不不結(jié)束,,d﹡((n)趨趨向于∞,f值將將增到任任意大。。82A*算法法的性質(zhì)質(zhì)(續(xù)2)該引理可可以這樣樣來理解解:如果果問題從從初始節(jié)節(jié)點s到到目標(biāo)節(jié)節(jié)點g的的路徑存存在時,,則一定定有一個個最短路路徑存在在。在A*沒有有結(jié)束之之前,OPEN表中的的節(jié)點不不會為空空。由于于總是從從OPEN表中中取出節(jié)節(jié)點來擴(kuò)擴(kuò)展,所所以最優(yōu)優(yōu)路徑肯肯定要通通過OPEN表表中的某某個節(jié)點點,設(shè)該該節(jié)點為為n。那那么n有有兩個特特點,一一是n是是從s到到g的最最優(yōu)路徑徑上的節(jié)節(jié)點,二二是到目目前為止止已經(jīng)找找到了從從s到n的最優(yōu)優(yōu)路徑。。第一點點會比較較容易接接受,第第二點是是如何保保證的呢呢?如果果到目前前為止找找到的不不是從s到n的的最優(yōu)路路徑,同同樣的理理由,在在OPEN表中中一定有有一個節(jié)節(jié)點---假定為為n'---在從從s到n的最優(yōu)優(yōu)路徑上上,當(dāng)然然他也一一定在從從s到g的最優(yōu)優(yōu)路徑上上。用n'來代代替n,,重復(fù)下下去,一一直找到到滿足以以上兩個個特點的的n為止止。當(dāng)然然,我們們不一定定明確的的知道到到底OPEN表表中的哪哪個節(jié)點點滿足這這樣的特特點,但但從以上上的敘述述可以知知道,這這樣的節(jié)節(jié)點一定定存在。。
對于于具有這這樣特點點的n,,由于以以上所說說的第一一個特點點有g(shù)((n)==g*((n),,所以有有f(n)=g*(n)+h(n)),而由由于算法法是A**的,所所以有h(n))≤h**(n)),所以以f(n)=g*(n)+h(n))≤g**(n))+h**(n))=f**(n))=f**(s))。對于于最后一一個等式式,是由由于對于于任何兩兩個最優(yōu)優(yōu)路徑上上的節(jié)點點n1和和n2,,都有f*(n1)==f*((n2)),而n和s都都是最優(yōu)優(yōu)路徑上上的節(jié)點點。引理理1.2得證。。83A*算法法的性質(zhì)質(zhì)(續(xù)3)引理1..3:A*結(jié)束前,,OPEN表中中必存在在f(n)≤f*(s)的節(jié)節(jié)點(n是在最最佳路徑徑上的節(jié)節(jié)點)。證明:設(shè)設(shè)從初始始節(jié)點s到目標(biāo)節(jié)節(jié)點t的一條最最佳路徑徑序列為為:(n0==s,n1,…,nk=t)算法初始始化時,,s在OPEN中,由于于A﹡沒有結(jié)束束,在OPEN中存在最最佳路徑徑上的節(jié)節(jié)點。設(shè)設(shè)OPEN表中的某某節(jié)點n是處在最最佳路徑徑序列中中(至少少有一個個這樣的的節(jié)點,,因s一開始是是在OPEN上),顯顯然n的先輩節(jié)節(jié)點np已在CLOSED中,因此此能找到到s到np的最佳路路徑,而而n也在最佳佳路徑上上,因而而s到n的最佳路路徑也能能找到,,因此有有f(n)=g(n))+h((n)=g**(n)+h(n))≤g*(n)+h*(n))=f**(n))而最佳路路徑上任任一節(jié)點點均有f*(n)=f*((s)(f*(s)是最佳路路徑的耗耗散值)),所以以f(n))≤f*(s))。[證畢]84A*算法法的性質(zhì)質(zhì)(續(xù)3)定理1..2:對無限圖圖,若從從初始節(jié)節(jié)點s到到目標(biāo)節(jié)節(jié)點t有有路徑存存在,則則A*一一定成功功結(jié)束。。證明:假假定A*不結(jié)束,,由引理理2.1有f(n)>f*(s),或OPEN表中最小小的一個個f值也變成成無界,,這與引引理2.2的結(jié)論矛矛盾,所所以A*只能成功功結(jié)束。。[證畢]85A*算法法的性質(zhì)質(zhì)(續(xù)4)推論1..1:OPEN表上任任一具有有f(n)<f*(s)的節(jié)節(jié)點n,,最終都都將被A*選作作擴(kuò)展的的節(jié)點。。由定理1.2,知A*一定結(jié)束束,由A*的結(jié)束條條件,OPEN表中f(t))最小時才才結(jié)束。。而f(t))≥f*(t)=f*(s)所以f(n))<f**(s))的n,均被擴(kuò)展展。得證證。86A*算法法的性質(zhì)質(zhì)(續(xù)5)定理1..3((可采納納性定理理):若存在從從初始節(jié)節(jié)點s到到目標(biāo)節(jié)節(jié)點t有有路徑,,則A**必能找找到最佳佳解結(jié)束束。87可采納性性的證明明由定理1.1、、1.2知A**一定找找到一條條路徑結(jié)結(jié)束設(shè)找到的的路徑s→t不是最最佳的((t為目目標(biāo))則:f((t)==g(t))>f*((s)由引理1.2知知結(jié)束前前OPEN中存存在f((n)≤≤f*((s)的的節(jié)點n,所以以f(n))≤f*((s)<<f(t))因此A**應(yīng)選擇擇n擴(kuò)展展,而不不是t。。與假設(shè)設(shè)A*選選擇t結(jié)結(jié)束矛盾盾。得證證。注意:A*的的結(jié)束條條件88A*算法法的性質(zhì)質(zhì)(續(xù)6)推論1..2:A*選作作擴(kuò)展的的任一節(jié)節(jié)點n,,有f((n)≤≤f*((s)。。由引理2.2知知在A**結(jié)束前前,OPEN中中存在節(jié)節(jié)點n’’,f(n’’)≤f*(s)設(shè)此時A*選擇擇n擴(kuò)展展。如果n==n’,,則f((n)≤≤f*((s),,得證。。如果n≠≠n’’,由于于A*選選擇n擴(kuò)擴(kuò)展,而而不是n’,所所以有f(n))≤f(n’)≤≤f*((s)。。得證。。89A*算法法的性質(zhì)質(zhì)(續(xù)7)定理1..4:設(shè)設(shè)對同一一個問題題定義了了兩個A*算法法A1和A2,若A2比A1有較多的的啟發(fā)信信息,即即對所有有非目標(biāo)標(biāo)節(jié)點有有h2(n)>>h1(n),,則在具具有一條條從s到到t的路路徑的隱隱含圖上上,搜索索結(jié)束時時,由A2所擴(kuò)展的的每一個個節(jié)點,,也必定定由A1所擴(kuò)展,,即A1擴(kuò)展的節(jié)節(jié)點數(shù)至至少和A2一樣多。。簡寫:如如果h2(n)>h1(n)((目標(biāo)標(biāo)節(jié)點除除外),,則A1擴(kuò)展的節(jié)節(jié)點數(shù)≥A2擴(kuò)展的節(jié)節(jié)點數(shù)90A*算法法的性質(zhì)質(zhì)(續(xù)7)注意:在定理1.4中中,評價價指標(biāo)是是“擴(kuò)展展的節(jié)點點數(shù)”,,也就是是說,同同一個節(jié)節(jié)點無論論被擴(kuò)展展多少次次,都只只計算一一次。91定理1..4的證證明使用數(shù)學(xué)學(xué)歸納法法,對節(jié)節(jié)點的深深度進(jìn)行行歸納(1)當(dāng)當(dāng)d(n)=0時,即即只有一一個節(jié)點點,顯然然定理成成立。(2)設(shè)設(shè)d(n)≤k時定理理成立。。(歸納納假設(shè)))(3)當(dāng)當(dāng)d(n)=k+1時時,用反反證法。。設(shè)存在一一個深度度為k++1的節(jié)節(jié)點n,,被A2擴(kuò)展,但但沒有被被A1擴(kuò)展。而而由假設(shè)設(shè),A1擴(kuò)展了n的父節(jié)節(jié)點,即即n已經(jīng)經(jīng)被生成成了。因因此當(dāng)A1結(jié)束時,,n將被被保留在在OPEN中。。92定理1..4的證證明(續(xù)續(xù)1)所以有::f1(n)≥≥f*(s)即:g1(n)++h1(n)≥≥f*(s)所以:h1(n)≥≥f*(s)--g1(n)另一方面面,由于于A2擴(kuò)展了n,有f2(n)≤≤f**(s))即:h2(n)≤≤f*(s)––g2(n)((A)由于d((n)==k時,,A2擴(kuò)展的節(jié)節(jié)點A1一定擴(kuò)展展,有g(shù)1(n)≤≤g2(n)((因為A2的路A1均走到了了)所以:h1(n)≥≥f*(s)--g1(n)≥≥f*(s)––g2(n)((B)比較A、、B兩式式,有h1(n)≥≥h2(n),,與定定理條件件矛盾。。故定理理得證。。933,A**算法的的改進(jìn)問題的提提出:因A算法法第6步步對ml類節(jié)點可可能要重重新放回回到OPEN表表中,因因此可能能會導(dǎo)致致多次重重復(fù)擴(kuò)展展同一個個節(jié)點,,導(dǎo)致搜搜索效率率下降。。94s(10)A(1)B(5)C(8)G目標(biāo)631118一個例子子:OPEN表CLOSED表s(10)s(10)A(7))B((8)C(9)A(7))s((10))B(8))C((9)G(14)A(5))C((9)G(14)C(9))G((12))
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 司機(jī)貨運(yùn)合同范例
- 政府廣告制作合同范例
- 電力供應(yīng)設(shè)備采購招標(biāo)合同三篇
- 杉鋸材購銷合同范例
- 舞廳服務(wù)合同(2篇)
- 土雞合作養(yǎng)殖合同
- 集體合同協(xié)商函
- 共同建設(shè)用地合同范例
- 安能物流加盟合同范例
- 藥店員工勞動合同范例
- 2023甘肅蘭州生物制品研究所限責(zé)任公司招聘77人歷年高頻難易度、易錯點模擬試題(共500題)附帶答案詳解
- 光伏清潔機(jī)器人行業(yè)報告
- 中國平安體育營銷品牌策略
- 《汽車銷售禮儀》課件
- 《小小主持人》課件
- 安全教育為快樂成長保駕護(hù)航
- 關(guān)于初中學(xué)生計算能力的培養(yǎng)的探究課題實施方案
- 2024青海高校大學(xué)《輔導(dǎo)員》招聘考試題庫
- 培智五年級上次數(shù)學(xué)期末考試題
- 旅游2010級酒店規(guī)劃與設(shè)計課程復(fù)習(xí)思考題
- 窨井抬升施工方案
評論
0/150
提交評論