動(dòng)物專家系統(tǒng)_第1頁
動(dòng)物專家系統(tǒng)_第2頁
動(dòng)物專家系統(tǒng)_第3頁
動(dòng)物專家系統(tǒng)_第4頁
動(dòng)物專家系統(tǒng)_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、動(dòng)物分類專家系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 班級:計(jì)算機(jī)0352姓名:劉一飛學(xué)號:200320010220一、 專家系統(tǒng)簡介: 專家系統(tǒng)是一個(gè)智能計(jì)算機(jī)程序系統(tǒng),其內(nèi)部含有大量的某個(gè)領(lǐng)域?qū)<宜降闹R與經(jīng)驗(yàn),能夠利用人類專家的知識和解決問題的方法來處理該領(lǐng)域問題。也就是說,專家系統(tǒng)是一個(gè)具有大量的專門知識與經(jīng)驗(yàn)的程序系統(tǒng),它應(yīng)用人工智能技術(shù)和計(jì)算機(jī)技術(shù),根據(jù)某領(lǐng)域一個(gè)或多個(gè)專家提供的知識和經(jīng)驗(yàn),進(jìn)行推理和判斷,模擬人類專家的決策過程,以便解決那些需要人類專家處理的復(fù)雜問題,簡而言之,專家系統(tǒng)是一種模擬人類專家解決領(lǐng)域問題的計(jì)算機(jī)程序系統(tǒng)。 1.專家系統(tǒng)的特點(diǎn)專家系統(tǒng)具有下列3個(gè)特點(diǎn):(1) 啟發(fā)性專家系統(tǒng)能運(yùn)

2、用專家的知識與經(jīng)驗(yàn)進(jìn)行推理、判斷和決策。世界上的大部分工作和知識都是非數(shù)學(xué)性的,只有一小部分人類活動(dòng)是以數(shù)學(xué)公式為核心的(約占8%)。即使是化學(xué)和物理學(xué)科,大部分也是靠推理進(jìn)行思考的;對于生物學(xué)、大部分醫(yī)學(xué)和全部法律,情況也是這樣。企業(yè)管理的思考幾乎全靠符號推理,而不是數(shù)值計(jì)算。 (2) 透明性 專家系統(tǒng)能夠解釋本身的推理過程和回答用戶提出的問題,以便讓用戶能夠了解推理過程,提高對專家系統(tǒng)的信賴感。例如,一個(gè)醫(yī)療診斷專家系統(tǒng)診斷某病人患有肺炎,而且必需用某種抗生素治療,那么,這一專家系統(tǒng)將會(huì)向病人解釋為什么他患有肺炎,而且必須用某種抗生素治療,就像一位醫(yī)療專家對病人詳細(xì)解釋病情一樣。 (3)

3、靈活性專家系統(tǒng)能不斷地增長知識,修改原有知識,不斷更新。由于這一特點(diǎn),使得專家系統(tǒng)具有十分廣泛的應(yīng)用領(lǐng)域。 2.專家系統(tǒng)的優(yōu)點(diǎn)近十多年來,專家系統(tǒng)獲得迅速發(fā)展,應(yīng)用領(lǐng)域越來越廣,解決實(shí)際問題的能力越來越大,這是專家系統(tǒng)的優(yōu)良性能以及對國民經(jīng)濟(jì)的重大作用決定的。具體地說,包括下列幾個(gè)方面: (1) 專家系統(tǒng)能夠高效率、準(zhǔn)確、周到、迅速和不知疲倦地進(jìn)行工作。 (2) 專家系統(tǒng)解決實(shí)際問題時(shí)不受周圍環(huán)境的影響,也不可能遺漏忘記。(3) 可以使專家的專長不受時(shí)間和空間的限制,以便推廣珍貴和稀缺的專家知識與經(jīng)驗(yàn)。(4) 專家系統(tǒng)能促進(jìn)各領(lǐng)域的發(fā)展,它使各領(lǐng)域?qū)<业膶I(yè)知識和經(jīng)驗(yàn)得到總結(jié)和精煉,能夠廣泛有

4、力地傳播專家的知識、經(jīng)驗(yàn)和能力。(5) 專家系統(tǒng)能匯集多領(lǐng)域?qū)<业闹R和經(jīng)驗(yàn)以及他們協(xié)作解決重大問題的能力,它擁有更淵博的知識、更豐富的經(jīng)驗(yàn)和更強(qiáng)的工作能力。(6) 軍事專家系統(tǒng)的水平是一個(gè)國家國防現(xiàn)代化的重要標(biāo)志之一。(7) 專家系統(tǒng)的研制和應(yīng)用,具有巨大的經(jīng)濟(jì)效益和社會(huì)效益。(8) 研究專家系統(tǒng)能夠促進(jìn)整個(gè)科學(xué)技術(shù)的發(fā)展。專家系統(tǒng)對人工智能的各個(gè)領(lǐng)域的發(fā)展起了很大的促進(jìn)作用,并將對科技、經(jīng)濟(jì)、國防、教育、社會(huì)和人民生活產(chǎn)生極其深遠(yuǎn)的影響。二、算法設(shè)計(jì)本程序采用正向推理作為算法主體。正向推理就是從初始事實(shí)數(shù)據(jù)出發(fā),正向使用規(guī)則進(jìn)行推理(即用規(guī)則前提與動(dòng)態(tài)數(shù)據(jù)庫中的事實(shí)匹配,或用動(dòng)態(tài)數(shù)據(jù)庫中的

5、數(shù)據(jù)測試規(guī)則的前提條件,然后產(chǎn)生結(jié)論或執(zhí)行動(dòng)作),朝目標(biāo)前進(jìn),其算法思想為:1、 將初始事實(shí)/數(shù)據(jù)置入動(dòng)態(tài)數(shù)據(jù)庫。2、 將動(dòng)態(tài)數(shù)據(jù)庫中的事實(shí)/數(shù)據(jù),匹配/測試目標(biāo)條件,若目標(biāo)條件滿足,則推理成功,結(jié)束。3、 用規(guī)則庫中各規(guī)則的前提匹配動(dòng)態(tài)數(shù)據(jù)庫中的事實(shí)/數(shù)據(jù),將匹配成功的規(guī)則組成待用規(guī)則集。4、 若待用規(guī)則集為空,則運(yùn)行失敗,退出。5、 將待用規(guī)則集中各規(guī)則的結(jié)論加入動(dòng)態(tài)數(shù)據(jù)庫,或者執(zhí)行其動(dòng)作,轉(zhuǎn)2.三、 源程序:#define ANIMAL_H#define True 1#define False 0#define DontKnow -1#include<stdio.h>#inc

6、lude<math.h>#include<string.h>/事實(shí)集(概念集)char *str="", "chew_cud" /* 1 */, "hooves" /* 2 */, "mammal" /* 3 */, "forward_eyes"/* 4 */, "claws" /* 5 */, "pointed_teeth" /* 6 */,"eat_meat" /* 7 */, "lay_eggs&

7、quot; /* 8 */, "fly" /* 9 */,"feathers" /* 10 */, "ungulate" /* 11 */, "carnivore" /* 12 */,"bird" /* 13 */, "give_milk" /* 14 */, "has_hair" /* 15 */,"fly_well" /* 16 */, "black&while_color"/* 17 */, "

8、;can_swim" /* 18 */,"long_legs" /* 19 */, "long_neck" /* 20 */, "black_stripes" /* 21 */,"dark_spots" /* 22 */, "tawny_color" /* 23 */, "albatross" /* 24 */,"penguin" /* 25 */, "ostrich" /* 26 */, "zebra"

9、/* 27 */,"giraffe" /* 28 */, "tiger" /* 29 */, "cheetah" /* 30 */,"0"/規(guī)則之前件(條件)集,注意與下面對應(yīng)int rulep6=22,23,12,3,0,0, 21,23,12,3,0,0, 22,19,20,11,0,0,21,11,0,0,0,0, 17,19,20,13,-9,0,17,18,13,-9,0,0,16,13,0,0,0,0, 15,0,0,0,0,0, 14,0,0,0,0,0,10,0,0,0,0,0, 8,7,0,0,0

10、,0, 7,0,0,0,0,0,4,5,6,0,0,0, 2,3,0,0,0,0, 1,3,0,0,0,0;/規(guī)則之后件(結(jié)論)集,注意與上面對應(yīng)int rulec= 30, 29, 28, 27, 26, 25, 24, 3, 3, 13, 13, 12, 12, 11, 11; /前個(gè)是要識別的動(dòng)物/事實(shí)類class factprivate:int Number;/事實(shí)IDchar Name21; /事實(shí)名int Active; /激活標(biāo)志int Succ;/事實(shí)斷言:真、假、不知道三種情況值public:fact *Next;/事實(shí)鏈表后繼指針 /* <Function 事實(shí)類構(gòu)造

11、函數(shù),由它激活事實(shí)對象集/> <para> Num:事實(shí)ID </para> <para> L:事實(shí)名 </para>*/fact(int Num,char *L)strcpy(Name,L);Number=Num;Active=False;/初始不激活Succ=DontKnow;/初始斷言不確定Next=NULL;/初始后繼為空char *GetName()/獲取事實(shí)名char *L;L=new char21;strcpy(L,Name);return L;int GetNumber()return Number; /獲取事實(shí)IDint

12、GetAct()return Active; /獲取事實(shí)激活標(biāo)志int GetSucc()return Succ; /獲取事實(shí)斷言值/設(shè)置事實(shí)激活標(biāo)志和斷言值void PutAct(const int Act0,int Suc0) Active=Act0; Succ=Suc0; /end factfact *Fact; /事實(shí)鏈表class list /前提(前提來源與事實(shí)集)鏈表類private:int Number; /前提ID,即事實(shí)IDpublic:list *Next; /前提鏈表后繼指針/*<Function 前提鏈表類構(gòu)造函數(shù)/> <para> Num:事

13、實(shí)ID </para>*/list(int Num) Number=Num; Next=NULL;int GetNumber()return Number; /獲取前提ID(也就是事實(shí)ID); /end listclass rule /規(guī)則類char *Name; /規(guī)則名list *Pre; /規(guī)則前件(前提、條件)鏈表頭指針int Conc; /規(guī)則后件(結(jié)論)ID(也是事實(shí)ID)public:rule *Next; /規(guī)則鏈表后繼指針rule(char *N,int P,int C); /規(guī)則類構(gòu)造函數(shù)rule(); /析構(gòu)函數(shù)int Query(); /推理機(jī)函數(shù)void

14、GetName() printf("%s%",Name); /輸出規(guī)則名;/* <Function 規(guī)則類構(gòu)造函數(shù),激活規(guī)則對象集/> <para>N:規(guī)則名</para><para>P:規(guī)則前件數(shù)組</para><para>C:規(guī)則后件ID</para>*/rule:rule(char *N,int P,int C)int i;list *L;Pre=NULL; /前提鏈頭指針初始化Next=NULL; /規(guī)則鏈后繼指針初始化Name=new charstrlen(N)+1;strcpy(

15、Name,N);i=0;while(Pi!=0) /有前提情況下L=new list(Pi+); /加入前提鏈L->Next=Pre; /注意:前插入Pre=L;Conc=C; /填入規(guī)則后件(結(jié)論)/* <Function 釋放規(guī)則鏈表節(jié)點(diǎn)之前提鏈空間/> <Note 規(guī)則鏈本身空間為釋放/>*/rule:rule()list *L;while(Pre)L=Pre->Next;delete Pre;Pre=L;delete Name;/* <Function 主要實(shí)現(xiàn)推理機(jī)/> <Return 規(guī)則使用成功與否/>*/int rul

16、e:Query()/ int i; char c; /保存用戶輸入按鍵符號 list *L; /臨時(shí)前提鏈 fact *F; /臨時(shí)事實(shí)鏈 L=Pre; /L指向前提鏈 F=Fact; if(L=NULL) printf("nError!"); /如果推理時(shí),本規(guī)則前提鏈為空,出錯(cuò),后面while循環(huán)也退出! while(L!=NULL) /前提鏈未處理完 F=Fact; /F指向事實(shí)鏈表 for(;) /以當(dāng)前前提,在事實(shí)鏈表中查詢(根據(jù)ID) /因?yàn)榍疤釣椤?事實(shí)ID”,表示該事實(shí)不成立,所以取絕對值 if(abs(L->GetNumber()=F->Get

17、Number() break; /一旦查詢到,有這樣的前提(不管其是否成立)則中止查詢。我們的知識庫必須保證一定能查許到,否則dead loop F=F->Next; /查詢下一事實(shí) /退出循環(huán)時(shí),F(xiàn)指向查詢到的事實(shí)節(jié)點(diǎn) if(L->GetNumber()>0) /如果前提為真 if(F->GetSucc()=True) /而且事實(shí)鏈表中的這個(gè)事實(shí)斷言也為真 L=L->Next; /則本規(guī)則的當(dāng)前前提在推理中滿足 continue; /繼續(xù)下一前提的判斷 if(F->GetSucc()=False) /Sorry,該前提在事實(shí)鏈表中斷言不成立 return

18、False; /該規(guī)則推理使用結(jié)束,直接返回 else/如果前提為假,表現(xiàn)為ID if(F->GetSucc()=True)/Sorry,該前提在事實(shí)鏈表中斷言卻為真 return False; /該規(guī)則推理使用結(jié)束,直接返回 if(F->GetSucc()=False) /同上類似 L=L->Next; continue; /end ifelse printf("%s(Y/N)",F->GetName(); /向用戶提問,這里簡單以事實(shí)名為問題 c=getchar(); /接受用戶輸入 flushall(); /*注意:事實(shí)鏈表中節(jié)點(diǎn)的Succ域指

19、:該事實(shí)的用戶斷言或中間推出的斷言*/ if(c='Y')|(c='y') /回答“是” if(L->GetNumber()>0) F->PutAct(1,True); /且當(dāng)前規(guī)則中的當(dāng)前前提要求為“真”,置激活和“真”斷言 if(L->GetNumber()<0) /且若當(dāng)前規(guī)則中的當(dāng)前前提要求為“假” F->PutAct(1,True); /置激活和用戶的斷言 return False; /本規(guī)則推理結(jié)束,不成功;后面的前提不判斷了! else /分析同上 if(L->GetNumber()<0) F->

20、;PutAct(-1,False);if(L->GetNumber()>0) F->PutAct(-1,False); return False; L=L->Next; /用戶斷言和當(dāng)前規(guī)則的當(dāng)前前提符合,則取當(dāng)前規(guī)則的下一前提進(jìn)行判斷! /end while /只要上述while循環(huán)正常退出,表明當(dāng)前規(guī)則的所有前件都滿足,下面要得出當(dāng)前規(guī)則的推理結(jié)論了 F=Fact; for(;) if(Conc=F->GetNumber() break; /在事實(shí)表中查找與當(dāng)前規(guī)則得后件相同得事實(shí)(結(jié)論性) F=F->Next; if(Conc<24) /如果規(guī)則

21、后件(結(jié)論)不是最終最終性得(即不是種要識別得動(dòng)物) F->PutAct(1,True); /那就是中間事實(shí)性結(jié)論,設(shè)置其激活和中間推理確證了的斷言 return False; /然后返回,本規(guī)則并不能結(jié)束整個(gè)推理 /當(dāng)前規(guī)則之后件是最終結(jié)論,得出要識別的動(dòng)物,返回真! printf("nThis annimal is %s",F->GetName(); return True;#endif#include "animal.h"int main(int argc, char* argv)/list *List;fact *F,*T;rule *Rule,*R;char ch8;int i=1;Fact=NULL; /事實(shí)鏈表初始為空while(stri0!='0') /在事實(shí)鏈表中填入事實(shí),注意:前插入F=new fact(i,stri+);F->Next=Fact;Fact=F;F=Fact;Fact=NULL;while(F) /倒轉(zhuǎn)上面前插入的事實(shí)鏈表。inverted the upp

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論