動(dòng)物識(shí)別系統(tǒng)實(shí)驗(yàn)報(bào)告_第1頁(yè)
動(dòng)物識(shí)別系統(tǒng)實(shí)驗(yàn)報(bào)告_第2頁(yè)
動(dòng)物識(shí)別系統(tǒng)實(shí)驗(yàn)報(bào)告_第3頁(yè)
動(dòng)物識(shí)別系統(tǒng)實(shí)驗(yàn)報(bào)告_第4頁(yè)
動(dòng)物識(shí)別系統(tǒng)實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

人工智能試驗(yàn)匯報(bào)二班級(jí):XXXX姓名:XXXX學(xué)號(hào):XXXXX試驗(yàn)?zāi)康?.理解并掌握基于規(guī)則系統(tǒng)的表達(dá)與推理。2.學(xué)會(huì)編寫小型的產(chǎn)生式系統(tǒng),理解正向推理和反向推理的過3。程以及兩者的差異.4。學(xué)會(huì)設(shè)計(jì)簡(jiǎn)樸的人機(jī)交互界面.試驗(yàn)預(yù)習(xí)內(nèi)容及試驗(yàn)環(huán)境:1.理解動(dòng)物識(shí)別系統(tǒng)問題;2.產(chǎn)生式系統(tǒng)的構(gòu)成部分,正向推理,逆向推理的算法和產(chǎn)生式系統(tǒng)的類型。三、試驗(yàn)內(nèi)容和環(huán)節(jié):內(nèi)容:結(jié)合第五章內(nèi)容,以動(dòng)物識(shí)別系統(tǒng)(或貨品袋裝系統(tǒng))為例,實(shí)現(xiàn)基于規(guī)則的系統(tǒng)構(gòu)造試驗(yàn)。規(guī)定:成果顯示規(guī)定有若干選擇動(dòng)物特性的選擇列表;體現(xiàn)判斷動(dòng)物時(shí),使用了哪些規(guī)則;體現(xiàn)數(shù)據(jù)庫(kù)的變化;(正向推理中體現(xiàn)每使用一次規(guī)則后,產(chǎn)生新事實(shí)。反向推理中體現(xiàn)新的目的事實(shí)有哪些需要證明,哪些已經(jīng)得到證明);顯示規(guī)則的調(diào)用次序;顯示最終的成果,包括動(dòng)物能識(shí)別出來和動(dòng)物不能識(shí)別出來兩種狀況.至少檢查兩個(gè)例子實(shí)現(xiàn)正向推理和反向推理的區(qū)別;老虎的例子如上所示,如下為金錢豹的例子:正向推理:反向推理:指出綜合數(shù)據(jù)庫(kù)和規(guī)則庫(kù)分別使用哪些函數(shù)實(shí)現(xiàn)的?綜合數(shù)據(jù)庫(kù)和規(guī)則庫(kù)均采用數(shù)組完畢。其中的綜合數(shù)據(jù)庫(kù)為一種string類型的數(shù)組,內(nèi)容為事實(shí)的名稱字符串,下標(biāo)則為該事實(shí)的序號(hào)。數(shù)組長(zhǎng)度為33,表達(dá)共有33個(gè)事實(shí)(最終7個(gè)為動(dòng)物名稱)。代碼如下:stringfacts[factnum]={”有爪”,"有犬齒”,"有奶”,"有毛發(fā)”,”目視前方”,"吃肉",”有蹄",”有羽毛”,”會(huì)飛","生蛋",”不會(huì)飛”,”黑白色","會(huì)游泳”,”善飛","不怕風(fēng)浪”,”長(zhǎng)腿","長(zhǎng)脖子",”有暗斑點(diǎn)”,”白色”,”黑色斑點(diǎn)”,”黑色條紋”,”黃褐色”,"食肉動(dòng)物","鳥",”哺乳動(dòng)物",”有蹄動(dòng)物”,"老虎",”金錢豹",”長(zhǎng)頸鹿",”斑馬",”鴕鳥",”企鵝","海燕"};規(guī)則庫(kù)為一種構(gòu)造體數(shù)組。該構(gòu)造體由一種int型數(shù)組(表達(dá)前提條件的序號(hào)集合)和一種int數(shù)據(jù)(表達(dá)由此前提推出的成果)表達(dá)。該數(shù)組長(zhǎng)度為14,表明有14條規(guī)則.該規(guī)則庫(kù)在建立時(shí)有一種內(nèi)在規(guī)定:前提的規(guī)則(子規(guī)則)的序號(hào)必須在父規(guī)則之前。(便于正向推理的實(shí)現(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ī)則庫(kù)的匹配算法是什么?怎樣選用可用規(guī)則集中的規(guī)則?分別使用哪些函數(shù)實(shí)現(xiàn)的?用一種bool型的與數(shù)據(jù)庫(kù)數(shù)組等長(zhǎng)的enfact數(shù)組表達(dá)各事實(shí)與否已經(jīng)滿足(或已經(jīng)推出)。要匹配一種規(guī)則的時(shí)候,只需查看其前提序號(hào)集數(shù)組中每個(gè)元素對(duì)應(yīng)的enfact數(shù)組中的值與否為true,假如所有都為true則可由該規(guī)則推出對(duì)應(yīng)成果。代碼如下:boolenfact[factnum];memset(enfact,false,factnum);//每次輸入時(shí)需對(duì)該數(shù)組進(jìn)行初始化//如下為輸入過程 while(ti!=-1) { if(ti>=0&&ti<=notanimal) enfact[ti]=true; else { cout〈<”輸入錯(cuò)誤!請(qǐng)輸入0~25之間的數(shù)字!”〈<endl;//notanimal=25 cin。clear();//清除流錯(cuò)誤錯(cuò)誤標(biāo)識(shí) cin。sync();////////////清空輸入緩沖區(qū) break; } cin>〉ti; };以上,則完畢了輸入,并對(duì)enfact數(shù)組進(jìn)行了初始化.目前對(duì)正向推理和反向推理的匹配和詳細(xì)推理過程進(jìn)行簡(jiǎn)要闡明。正向推理:從下向上的推理。由于建立規(guī)則庫(kù)時(shí)的內(nèi)在規(guī)定,即子規(guī)則必在父規(guī)則前,故進(jìn)行正向推理的時(shí)候只要將規(guī)則庫(kù)從前到后掃一遍看與否能由規(guī)則推出對(duì)應(yīng)成果即可。假如能匹配推出成果則看該成果與否為動(dòng)物,假如已經(jīng)推出動(dòng)物則推理成功。否則更新數(shù)據(jù)庫(kù),匹配下一種規(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個(gè),必存在-1作為結(jié)束 { if(enfact[ti]==false) break; j++; ti=rules[i]。con[j]; } if(ti==—1) {tres=rules[i].res; enfact[tres]=true; cout〈<"運(yùn)用了規(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í)數(shù)據(jù)庫(kù)的動(dòng)物開始從前去后進(jìn)行匹配,看與否能成功推出,假如都推不出能識(shí)別失敗,若能推出其中一種則中斷搜索,識(shí)別成功。推某一種事實(shí)時(shí),仍然是從該事實(shí)的前提出發(fā),逐一匹配,若所有的前提滿足,則該事實(shí)滿足.不一樣的是,這里以該事實(shí)為成果的前提也許有諸多,我采用了犧牲空間換時(shí)間的措施,即不是將規(guī)則庫(kù)從頭到尾搜一遍來查找以待查事實(shí)為成果的規(guī)則,而是事先將所有的先保留在一種構(gòu)造體數(shù)組中,構(gòu)造體中只有一種數(shù)組,表達(dá)能推出某個(gè)成果的規(guī)則序號(hào)。代碼如下: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}};故要看某個(gè)事實(shí)與否能推出的時(shí)候,只要將它對(duì)應(yīng)的標(biāo)號(hào)的factrules中的數(shù)組中的規(guī)則進(jìn)行匹配即可,只要有一條規(guī)則滿足,即可中斷搜索,推出該事實(shí)可滿足.此外,由于某個(gè)規(guī)則的前提也許是另一種規(guī)則的成果,這相稱于規(guī)則的嵌套.因此在進(jìn)行反向推理時(shí)必須用到遞歸技術(shù),并且是一種回溯.整個(gè)反向推理的代碼如下:boolachieve(intri)//{ intj; intti; cout〈〈endl〈<"目前驗(yàn)證目的為:"<<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]<〈"失??!”<〈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〈<”——---———-—————---——--—由動(dòng)物目的:”〈〈facts[rules[i].res]〈<”進(jìn)行反向推理—-—-—————------—---——--——”〈<endl; if(achieve(i)) { if(noOtiose(i+notanimal-animalfrom+1)) returni+notanimal-animalfrom+1; else return—1; }}return-1;}注:本系統(tǒng)對(duì)輸入事實(shí)冗余的狀況做出了處理。采用的算法是:仍然是空間換時(shí)間的思想,事先將所有動(dòng)物也許有的特性做成一種與特性數(shù)等長(zhǎng)的bool數(shù)組typefact,這樣只需在推出某種動(dòng)物后再將該動(dòng)物對(duì)應(yīng)的數(shù)組typefact與enfact數(shù)組進(jìn)行匹配,看enfact中與否存在多出的錯(cuò)誤特性即可.代碼如下: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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論