動物識別系統(tǒng)實驗報告_第1頁
動物識別系統(tǒng)實驗報告_第2頁
動物識別系統(tǒng)實驗報告_第3頁
動物識別系統(tǒng)實驗報告_第4頁
動物識別系統(tǒng)實驗報告_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

人工智能試驗匯報二班級:XXXX姓名:XXXX學(xué)號:XXXXX試驗?zāi)康?.理解并掌握基于規(guī)則系統(tǒng)的表達與推理。2.學(xué)會編寫小型的產(chǎn)生式系統(tǒng),理解正向推理和反向推理的過3。程以及兩者的差異.4。學(xué)會設(shè)計簡樸的人機交互界面.試驗預(yù)習(xí)內(nèi)容及試驗環(huán)境:1.理解動物識別系統(tǒng)問題;2.產(chǎn)生式系統(tǒng)的構(gòu)成部分,正向推理,逆向推理的算法和產(chǎn)生式系統(tǒng)的類型。三、試驗內(nèi)容和環(huán)節(jié):內(nèi)容:結(jié)合第五章內(nèi)容,以動物識別系統(tǒng)(或貨品袋裝系統(tǒng))為例,實現(xiàn)基于規(guī)則的系統(tǒng)構(gòu)造試驗。規(guī)定:成果顯示規(guī)定有若干選擇動物特性的選擇列表;體現(xiàn)判斷動物時,使用了哪些規(guī)則;體現(xiàn)數(shù)據(jù)庫的變化;(正向推理中體現(xiàn)每使用一次規(guī)則后,產(chǎn)生新事實。反向推理中體現(xiàn)新的目的事實有哪些需要證明,哪些已經(jīng)得到證明);顯示規(guī)則的調(diào)用次序;顯示最終的成果,包括動物能識別出來和動物不能識別出來兩種狀況.至少檢查兩個例子實現(xiàn)正向推理和反向推理的區(qū)別;老虎的例子如上所示,如下為金錢豹的例子:正向推理:反向推理:指出綜合數(shù)據(jù)庫和規(guī)則庫分別使用哪些函數(shù)實現(xiàn)的?綜合數(shù)據(jù)庫和規(guī)則庫均采用數(shù)組完畢。其中的綜合數(shù)據(jù)庫為一種string類型的數(shù)組,內(nèi)容為事實的名稱字符串,下標則為該事實的序號。數(shù)組長度為33,表達共有33個事實(最終7個為動物名稱)。代碼如下:stringfacts[factnum]={”有爪”,"有犬齒”,"有奶”,"有毛發(fā)”,”目視前方”,"吃肉",”有蹄",”有羽毛”,”會飛","生蛋",”不會飛”,”黑白色","會游泳”,”善飛","不怕風(fēng)浪”,”長腿","長脖子",”有暗斑點”,”白色”,”黑色斑點”,”黑色條紋”,”黃褐色”,"食肉動物","鳥",”哺乳動物",”有蹄動物”,"老虎",”金錢豹",”長頸鹿",”斑馬",”鴕鳥",”企鵝","海燕"};規(guī)則庫為一種構(gòu)造體數(shù)組。該構(gòu)造體由一種int型數(shù)組(表達前提條件的序號集合)和一種int數(shù)據(jù)(表達由此前提推出的成果)表達。該數(shù)組長度為14,表明有14條規(guī)則.該規(guī)則庫在建立時有一種內(nèi)在規(guī)定:前提的規(guī)則(子規(guī)則)的序號必須在父規(guī)則之前。(便于正向推理的實現(xiàn))代碼如下:structrule{ intcon[10]; intres;};Rulerules[rulenum]={{{2,—1},24},{{3,—1},24},{{7,—1},23},{{8,9,-1},23},{{24,0,1,4,—1},22},{{24,5,-1},22},{{24,6,—1},25},{{22,21,20,—1},26},{{22,21,19,—1},27},{{25,15,16,21,17,—1},28},{{25,18,20,—1},29},{{23,10,15,16,11,—1},30},{{23,10,12,11,-1},31},{{23,13,14,-1},32}};規(guī)則庫的匹配算法是什么?怎樣選用可用規(guī)則集中的規(guī)則?分別使用哪些函數(shù)實現(xiàn)的?用一種bool型的與數(shù)據(jù)庫數(shù)組等長的enfact數(shù)組表達各事實與否已經(jīng)滿足(或已經(jīng)推出)。要匹配一種規(guī)則的時候,只需查看其前提序號集數(shù)組中每個元素對應(yīng)的enfact數(shù)組中的值與否為true,假如所有都為true則可由該規(guī)則推出對應(yīng)成果。代碼如下:boolenfact[factnum];memset(enfact,false,factnum);//每次輸入時需對該數(shù)組進行初始化//如下為輸入過程 while(ti!=-1) { if(ti>=0&&ti<=notanimal) enfact[ti]=true; else { cout〈<”輸入錯誤!請輸入0~25之間的數(shù)字!”〈<endl;//notanimal=25 cin。clear();//清除流錯誤錯誤標識 cin。sync();////////////清空輸入緩沖區(qū) break; } cin>〉ti; };以上,則完畢了輸入,并對enfact數(shù)組進行了初始化.目前對正向推理和反向推理的匹配和詳細推理過程進行簡要闡明。正向推理:從下向上的推理。由于建立規(guī)則庫時的內(nèi)在規(guī)定,即子規(guī)則必在父規(guī)則前,故進行正向推理的時候只要將規(guī)則庫從前到后掃一遍看與否能由規(guī)則推出對應(yīng)成果即可。假如能匹配推出成果則看該成果與否為動物,假如已經(jīng)推出動物則推理成功。否則更新數(shù)據(jù)庫,匹配下一種規(guī)則.代碼如下:intobverse(){ outputf(1); intti; inti,j; inttres; cout<<endl; for(i=0;i〈rulenum;i++) { j=0; ti=rules[i].con[j]; while(ti!=—1)//假設(shè)前提數(shù)不超過9個,必存在-1作為結(jié)束 { if(enfact[ti]==false) break; j++; ti=rules[i]。con[j]; } if(ti==—1) {tres=rules[i].res; enfact[tres]=true; cout〈<"運用了規(guī)則”〈<i〈<":”; j=0; while(rules[i].con[j]!=—1) { cout〈〈facts[rules[i]。con[j]]〈<”"; j++; } cout<〈"====〉"〈<facts[tres]〈<endl; if(isAnimal(tres)) { if(noOtiose(tres)) returntres; else return-1; } } } return—1;}反向推理:從上向下的推理。反向推理比正向推理要復(fù)雜某些。采用的算法是從事實數(shù)據(jù)庫的動物開始從前去后進行匹配,看與否能成功推出,假如都推不出能識別失敗,若能推出其中一種則中斷搜索,識別成功。推某一種事實時,仍然是從該事實的前提出發(fā),逐一匹配,若所有的前提滿足,則該事實滿足.不一樣的是,這里以該事實為成果的前提也許有諸多,我采用了犧牲空間換時間的措施,即不是將規(guī)則庫從頭到尾搜一遍來查找以待查事實為成果的規(guī)則,而是事先將所有的先保留在一種構(gòu)造體數(shù)組中,構(gòu)造體中只有一種數(shù)組,表達能推出某個成果的規(guī)則序號。代碼如下:structfactrule{ intrulen[5];};factrulefactrules[factnum]={{-1},{—1},{-1},{—1},{-1},{—1},{—1},{-1},{—1},{-1},{-1},{-1},{-1},{-1},{—1},{-1},{-1},{-1},{—1},{—1},{-1},{—1},{4,5,-1},{2,3,-1},{0,1,-1},{6,-1},{7,—1},{8,-1},{9,-1},{10,—1},{11,—1},{12,-1}};故要看某個事實與否能推出的時候,只要將它對應(yīng)的標號的factrules中的數(shù)組中的規(guī)則進行匹配即可,只要有一條規(guī)則滿足,即可中斷搜索,推出該事實可滿足.此外,由于某個規(guī)則的前提也許是另一種規(guī)則的成果,這相稱于規(guī)則的嵌套.因此在進行反向推理時必須用到遞歸技術(shù),并且是一種回溯.整個反向推理的代碼如下:boolachieve(intri)//{ intj; intti; cout〈〈endl〈<"目前驗證目的為:"<<facts[rules[ri].res]〈<endl; cout<〈"嘗試規(guī)則”<〈ri〈〈":"; j=0; while(rules[ri]。con[j]!=-1) { cout<〈facts[rules[ri]。con[j]]〈〈””; j++; } cout〈〈"==?==>”〈〈facts[rules[ri].res]<〈endl;j=0; ti=rules[ri].con[j]; while(ti!=—1) { if(enfact[ti]==false) { intki=0;if(factrules[ti].rulen[ki]==—1) { cout〈〈"條件"<<facts[ti]<<”不滿足!"<<endl; cout<〈"使用規(guī)則”<<ri<〈":”; j=0; while(rules[ri]。con[j]!=-1) { cout<<facts[rules[ri].con[j]]<〈"”; j++; } cout〈<”=====〉"<〈facts[rules[ri].res]<〈"失??!"<〈endl; returnfalse; }else { cout<<"條件”〈<facts[ti]〈<"未知,繼續(xù)推理..."〈〈endl; boolok=false; for(ki=0;factrules[ti]。rulen[ki]!=—1&&!ok;ki++) { ok=achieve(factrules[ti].rulen[ki]); } if(ok) { cout<〈”條件"<<facts[ti]<〈”滿足!”〈〈endl; j++; ti=rules[ri].con[j]; } else { cout<〈"條件"〈<facts[ti]<〈"不滿足!"<〈endl; cout<〈”使用規(guī)則"<<ri〈<”:"; j=0; while(rules[ri]。con[j]!=-1) { cout<〈facts[rules[ri]。con[j]]<〈"”; j++; } cout<<”=====〉"〈〈facts[rules[ri].res]<〈"失?。 ?lt;〈endl<<endl; returnfalse; } } } else { cout〈<”條件"<<facts[ti]〈〈”滿足!”<<endl; j++; ti=rules[ri].con[j]; } } { cout〈<”使用規(guī)則"<<ri<<":"; j=0; while(rules[ri].con[j]!=-1) { cout〈<facts[rules[ri]。con[j]]<<"”; j++; } cout〈<"=====〉”<〈facts[rules[ri]。res]<〈"成功!"〈〈endl; returntrue; }}intreverse(){ outputf(2);inti;for(i=animalfrom;i〈rulenum;i++){ cout〈<endl〈<”——---———-—————---——--—由動物目的:”〈〈facts[rules[i].res]〈<”進行反向推理—-—-—————------—---——--——”〈<endl; if(achieve(i)) { if(noOtiose(i+notanimal-animalfrom+1)) returni+notanimal-animalfrom+1; else return—1; }}return-1;}注:本系統(tǒng)對輸入事實冗余的狀況做出了處理。采用的算法是:仍然是空間換時間的思想,事先將所有動物也許有的特性做成一種與特性數(shù)等長的bool數(shù)組typefact,這樣只需在推出某種動物后再將該動物對應(yīng)的數(shù)組typefact與enfact數(shù)組進行匹配,看enfact中與否存在多出的錯誤特性即可.代碼如下:booltypefact[factnum-notanimal-1][factnum]={{1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,1,0,1,0,0,0,0,0,0},{1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,1,0,0,1,0,0,0,0,0},{0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,1,1,0,0,1,0,0,0,0},{0,0,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,1,1,0,0,0,1,0,0,0},{0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0},{0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,1,0},{0,0,0,0,0,0,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,1}};boolnoOtiose(intfi){ intki=fi—notanimal-1; boolok=true; for(inti=1;i〈factnum;i++) { if(enfact[i]=

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論