算法人工智能課程設(shè)計_第1頁
算法人工智能課程設(shè)計_第2頁
算法人工智能課程設(shè)計_第3頁
算法人工智能課程設(shè)計_第4頁
算法人工智能課程設(shè)計_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

人工智能A算法一、 A算法概述A算法是到目前為止最快的一種計算最短路徑的算法,但它一種‘較優(yōu)’算法,即它一般只能找到較優(yōu)解,而非最優(yōu)解,但由于其高效性,使其在實時系統(tǒng)、人工智能等方面應(yīng)用極其廣泛;A算法結(jié)合了啟發(fā)式方法這種方法通過充分利用圖給出的信息來動態(tài)地作出決定而使搜索次數(shù)大大降低和形式化方法這種方法不利用圖給出的信息而僅通過數(shù)學(xué)的形式分析,如Dijkstra算法;它通過一個估價函數(shù)HeuristicFunctionfh來估計圖中的當(dāng)前點p到終點的距離帶權(quán)值,并由此決定它的搜索方向,當(dāng)這條路徑失敗時,它會嘗試其它路徑;因而我們可以發(fā)現(xiàn),A算法成功與否的關(guān)鍵在于估價函數(shù)的正確選擇,從理論上說,一個完全正確的估價函數(shù)是可以非常迅速地得到問題的正確解答,但一般完全正確的估價函數(shù)是得不到的,因而A算法不能保證它每次都得到正確解答;一個不理想的估價函數(shù)可能會使它工作得很慢,甚至?xí)o出錯誤的解答;為了提高解答的正確性,我們可以適當(dāng)?shù)亟档凸纼r函數(shù)的值,從而使之進(jìn)行更多的搜索,但這是以降低它的速度為代價的,因而我們可以根據(jù)實際對解答的速度和正確性的要求而設(shè)計出不同的方案,使之更具彈性;二、 A算法分析眾所周知,對圖的表示可以采用數(shù)組或鏈表,而且這些表示法也各也優(yōu)缺點,數(shù)組可以方便地實現(xiàn)對其中某個元素的存取,但插入和刪除操作卻很困難,而鏈表則利于插入和刪除,但對某個特定元素的定位卻需借助于搜索;而A算法則需要快速插入和刪除所求得的最優(yōu)值以及可以對當(dāng)前結(jié)點以下結(jié)點的操作,因而數(shù)組或鏈表都顯得太通用了,用來實現(xiàn)A算法會使速度有所降低;要實現(xiàn)這些,可以通過二分樹、跳轉(zhuǎn)表等數(shù)據(jù)結(jié)構(gòu)來實現(xiàn),我采用的是簡單而高效的帶優(yōu)先權(quán)的堆棧,經(jīng)實驗表明,一個1000個結(jié)點的圖,插入而且移動一個排序的鏈表平均需500次比較和2次移動;未排序的鏈表平均需1000次比較和2次移動;而堆僅需10次比較和10次移動;需要指出的是,當(dāng)結(jié)點數(shù)n大于10,000時,堆將不再是正確的選擇,但這足已滿足我們一般的要求;求出2D的迷宮中起始點S到目標(biāo)點E的最短路徑算法:findpath{把S點加入樹根各點所在的樹的高度表示從S點到該點所走過的步數(shù);把S點加入排序隊列按該點到E點的距離排序+走過的步數(shù)從小到大排序;1、 排序隊列sort_queue中距離最小的第一個點出列,并保存入store_queue中2、 從出列的點出發(fā),分別向4個或8個方向中的一個各走出一步3、 并估算第2步所走到位置到目標(biāo)點的距離,并把該位置加入樹,最后把該點按距離從小到大排序后并放入隊列中由trytile函數(shù)實現(xiàn)4、 如果該點從四個方向上都不能移動,則把該點從store_queue中刪除5、 回到第一點,直到找到E點則結(jié)束從目標(biāo)點回溯樹,直到樹根則可以找到最佳路徑,并保存在path中}文末附帶的程序參考了風(fēng)云的最短路徑代碼,并加以改進(jìn)和優(yōu)化:把原來用于存放已處理節(jié)點的堆棧改為隊列store_queue,這樣在從sort_queue隊列出列時可直接放入store_queue中;解除了地圖大小的限制如果有64K內(nèi)存限制時,地圖大小只能是180x180;刪除了原程序中的一些冗余,見程序中的注釋;程序繼續(xù)使用dis_map數(shù)組保存各點歷史歷史最佳距離,也包含了某點是否已經(jīng)經(jīng)過的信息,雖然這樣做可能會比使用鏈表多用一些內(nèi)存,但是在搜索時可以節(jié)省不時間;程序更具有實用性,可直接或修改后運用于你的程序中,但請你使用該代碼后應(yīng)該返回一些信息給我,如算法的改進(jìn)或使用于什么程序等;三、A算法程序本程序可以用BorlandC++或DJGPP編譯include<>include<>include<>include<>definetile_numx,yymap_w+x;}}intreadmap{FILEf;inti,j;f-fopen,r;assertf;fscanff,"%d,%d\n”,&map_w,&map_h;map-mallocmap_wmap_h+1;assertmap;fori-0;ifgetsmap+tile_num0,i,map_w+2,f;fclosef;start_x-T,end_x-T;fori-0;iforj-0;jifmaptile_numj,i--'s'maptile_numj,i-'',start_x-j,start_y-i;ifmaptile_numj,i--'e'maptile_numj,i-'',end_x-j,end_y-i;}assertstart_x>-0&&end_x>-0;dis_map-mallocmap_wmap_hsizeofdis_map;assertdis_map;return0;}voidshowmap{inti,j;clrscr;fori=0;igotoxy1,i+1;forj=0;jifmaptile_numj,i=''cprintf"O";elsecprintf"";}gotoxystart_x+1,start_y+1;cprintf"s";gotoxyend_x+1,end_y+1;cprintf"e";}intmain{intpath;readmap;showmap;getch;path=findpath;printpathpath;ifdis_mapfreedis_map;ifpathfreepath;ifmapfreemap;getch;return0;}<—ifsupportLineBreakNewLine—><——endif——>四、運行結(jié)果79,2-4□□□□□口口口口口□□□□口□□□口口口口□□□□□口口口□口□□口□□□□□口口口口□□□□□□□口口口口口□□□□口□□□口口口□□□□□□□□口口口口□Ci-jOQOOU00000000000000oooooooooaaQoooooQooaooooCCOOOOODOOOOC79,2-4□□□□□口口口口口□□□□口□□□口口口口□□□□□口口口□口□□口□□□□□口口口口□□□□□□□口口口口口□□□□口□□□口口口□□□□□□□□口口口口□Ci-jOQOOU00000000000000oooooooooaaQoooooQooaooooCCOOOOODOOOOCOOOOODDOOOOOOCOOOOODO口口口口口口口口口口□aoODDaooo0000oooaaaaoo口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口OOOQOOODDOOQOOQOOOODOOOO口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口EIDDDD口口口口口口口口口口口口口口口口口口口口口ODQQOOOOOOOo0000000□OOOOODOOOOooooooooaoe000口口口口口口口口口口口口口口口口口口口口OOOOOOQDOOOQaOOOOQOOOOODO口口口口口|□口口口口口口口口口口口口口口口口口口口口口口|□口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口口

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論