动物专家系统Word文档格式.docx

上传人:b****1 文档编号:3105931 上传时间:2023-05-01 格式:DOCX 页数:16 大小:104.81KB
下载 相关 举报
动物专家系统Word文档格式.docx_第1页
第1页 / 共16页
动物专家系统Word文档格式.docx_第2页
第2页 / 共16页
动物专家系统Word文档格式.docx_第3页
第3页 / 共16页
动物专家系统Word文档格式.docx_第4页
第4页 / 共16页
动物专家系统Word文档格式.docx_第5页
第5页 / 共16页
动物专家系统Word文档格式.docx_第6页
第6页 / 共16页
动物专家系统Word文档格式.docx_第7页
第7页 / 共16页
动物专家系统Word文档格式.docx_第8页
第8页 / 共16页
动物专家系统Word文档格式.docx_第9页
第9页 / 共16页
动物专家系统Word文档格式.docx_第10页
第10页 / 共16页
动物专家系统Word文档格式.docx_第11页
第11页 / 共16页
动物专家系统Word文档格式.docx_第12页
第12页 / 共16页
动物专家系统Word文档格式.docx_第13页
第13页 / 共16页
动物专家系统Word文档格式.docx_第14页
第14页 / 共16页
动物专家系统Word文档格式.docx_第15页
第15页 / 共16页
动物专家系统Word文档格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

动物专家系统Word文档格式.docx

《动物专家系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《动物专家系统Word文档格式.docx(16页珍藏版)》请在冰点文库上搜索。

动物专家系统Word文档格式.docx

2、将动态数据库中的事实/数据,匹配/测试目标条件,若目标条件满足,则推理成功,结束。

3、用规则库中各规则的前提匹配动态数据库中的事实/数据,将匹配成功的规则组成待用规则集。

4、若待用规则集为空,则运行失败,退出。

5、将待用规则集中各规则的结论加入动态数据库,或者执行其动作,转2.

三、源程序:

#defineANIMAL_H

#defineTrue1

#defineFalse0

#defineDontKnow-1

#include<

stdio.h>

math.h>

string.h>

//事实集(概念集)

char*str[]={"

"

"

chew_cud"

/*1*/,"

hooves"

/*2*/,"

mammal"

/*3*/,

forward_eyes"

/*4*/,"

claws"

/*5*/,"

pointed_teeth"

/*6*/,

"

eat_meat"

/*7*/,"

lay_eggs"

/*8*/,"

fly"

/*9*/,

feathers"

/*10*/,"

ungulate"

/*11*/,"

carnivore"

/*12*/,

bird"

/*13*/,"

give_milk"

/*14*/,"

has_hair"

/*15*/,

fly_well"

/*16*/,"

black&

while_color"

/*17*/,"

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"

/*27*/,

giraffe"

/*28*/,"

tiger"

/*29*/,"

cheetah"

/*30*/,

\0"

};

//规则之前件(条件)集,注意与下面对应

intrulep[][6]={{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,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}};

//规则之后件(结论)集,注意与上面对应

intrulec[]={30,29,28,

27,26,25,

24,3,3,

13,13,12,

12,11,11};

//前个是要识别的动物

//事实类

classfact{

private:

intNumber;

//事实ID

charName[21];

//事实名

intActive;

//激活标志

intSucc;

//事实断言:

真、假、不知道三种情况值

public:

fact*Next;

//事实链表后继指针

/*<

Function事实类构造函数,由它激活事实对象集/>

<

para>

Num:

事实ID<

/para>

L:

事实名<

*/

fact(intNum,char*L)

{

strcpy(Name,L);

Number=Num;

Active=False;

//初始不激活

Succ=DontKnow;

//初始断言不确定

Next=NULL;

//初始后继为空

}

char*GetName()//获取事实名

char*L;

L=newchar[21];

strcpy(L,Name);

returnL;

intGetNumber(){returnNumber;

}//获取事实ID

intGetAct(){returnActive;

}//获取事实激活标志

intGetSucc(){returnSucc;

}//获取事实断言值

//设置事实激活标志和断言值

voidPutAct(constintAct0,intSuc0)

Active=Act0;

Succ=Suc0;

//endfact

fact*Fact;

//事实链表

classlist{//前提(前提来源与事实集)链表类

//前提ID,即事实ID

list*Next;

//前提链表后继指针

/*<

Function前提链表类构造函数/>

list(intNum)

}//获取前提ID(也就是事实ID)

//endlist

classrule{//规则类

char*Name;

//规则名

list*Pre;

//规则前件(前提、条件)链表头指针

intConc;

//规则后件(结论)ID(也是事实ID)

rule*Next;

//规则链表后继指针

rule(char*N,intP[],intC);

//规则类构造函数

~rule();

//析构函数

intQuery();

//推理机函数

voidGetName(){printf("

%s%"

Name);

}//输出规则名

/*<

Function规则类构造函数,激活规则对象集/>

<

N:

规则名<

P:

规则前件数组<

C:

规则后件ID<

*/

rule:

:

rule(char*N,intP[],intC)

{

inti;

list*L;

Pre=NULL;

//前提链头指针初始化

Next=NULL;

//规则链后继指针初始化

Name=newchar[strlen(N)+1];

strcpy(Name,N);

i=0;

while(P[i]!

=0){//有前提情况下

L=newlist(P[i++]);

//加入前提链

L->

Next=Pre;

//注意:

前插入

Pre=L;

}

Conc=C;

//填入规则后件(结论)

}

Function释放规则链表节点之前提链空间/>

Note规则链本身空间为释放/>

~rule()

list*L;

while(Pre)

{

L=Pre->

Next;

deletePre;

deleteName;

Function主要实现推理机/>

Return规则使用成功与否/>

intrule:

Query()

//inti;

charc;

//保存用户输入按键符号

//临时前提链

fact*F;

//临时事实链

L=Pre;

//L指向前提链

F=Fact;

if(L==NULL)printf("

\nError!

);

//如果推理时,本规则前提链为空,出错,后面while循环也退出!

while(L!

=NULL)//前提链未处理完

//F指向事实链表

for(;

;

)//以当前前提,在事实链表中查询(根据ID)

{//因为前提为“-事实ID”,表示该事实不成立,所以取绝对值

if(abs(L->

GetNumber())==F->

GetNumber())break;

//一旦查询到,有这样的前提(不管其是否成立)则中止查询。

我们的知识库必须保证一定能查许到,否则deadloop

F=F->

//查询下一事实

}//退出循环时,F指向查询到的事实节点

if(L->

GetNumber()>

0)//如果前提为真

if((F->

GetSucc())==True){//而且事实链表中的这个事实断言也为真

L=L->

//则本规则的当前前提在推理中满足

continue;

//继续下一前提的判断

}

GetSucc())==False)//Sorry,该前提在事实链表中断言不成立

returnFalse;

//该规则推理使用结束,直接返回

else//如果前提为假,表现为-ID

GetSucc())==True)//Sorry,该前提在事实链表中断言却为真

//该规则推理使用结束,直接返回

GetSucc())==False){//同上类似

}//endif-else

printf("

%s(Y/N)"

F->

GetName());

//向用户提问,这里简单以事实名为问题

c=getchar();

//接受用户输入

flushall();

/*注意:

事实链表中节点的Succ域指:

该事实的用户断言或中间推出的断言*/

if((c=='

Y'

)||(c=='

y'

))//回答“是”

if(L->

0)F->

PutAct(1,True);

//且当前规则中的当前前提要求为“真”,置激活和“真”断言

GetNumber()<

0){//且若当前规则中的当前前提要求为“假”

F->

//置激活和用户的断言

//本规则推理结束,不成功;

后面的前提不判断了!

else

{//分析同上

PutAct(-1,False);

0){

L=L->

//用户断言和当前规则的当前前提符合,则取当前规则的下一前提进行判断!

}//endwhile

//只要上述while循环正常退出,表明当前规则的所有前件都满足,下面要得出当前规则的推理结论了

if(Conc==F->

//在事实表中查找与当前规则得后件相同得事实(结论性)

F=F->

if(Conc<

24)//如果规则后件(结论)不是最终最终性得(即不是种要识别得动物)

F->

//那就是中间事实性结论,设置其激活和中间推理确证了的断言

returnFalse;

//然后返回,本规则并不能结束整个推理

//当前规则之后件是最终结论,得出要识别的动物,返回真!

\nThisannimalis%s"

returnTrue;

#endif

#include"

animal.h"

intmain(intargc,char*argv[])

//list*List;

fact*F,*T;

rule*Rule,*R;

charch[8];

inti=1;

Fact=NULL;

//事实链表初始为空

while(str[i][0]!

='

\0'

){//在事实链表中填入事实,注意:

F=newfact(i,str[i++]);

F->

Next=Fact;

Fact=F;

while(F){//倒转上面前插入的事实链表。

invertedtheupperlink

T=F;

T->

Fact=T;

ch[0]='

R'

ch[1]='

U'

ch[2]='

L'

ch[3]='

E'

ch[4]='

_'

ch[5]='

a'

ch[6]='

Rule=NULL;

//规则链表初始为空

for(i=0;

i<

15;

i++)//填入规则

R=newrule(ch,rulep[i],rulec[i]);

R->

Next=Rule;

Rule=R;

ch[5]++;

R=Rule;

)//开始询问用户。

Query

{

i=R->

Query();

if(i==1)break;

//如果返回“真”,则推理成功,并可以给出最后专家答案!

R=R->

if(!

R)break;

//所有规则都扫描完,R为空,则退出!

if(!

R)printf("

\nIdon'

tknow."

//所有规则都扫描完的退出,表明无法得到答案,

\nPressandbartoexit."

getchar();

return0;

四、实验结果:

五、心得体会

通过本次设计与实验,对专家系统有了深刻的理解与掌握。

摆脱了书面上单一的介绍,结合自己的实践过程,对推理机的实现、算法的选择、知识库的构建以及动态数据库的实现都有了比较好的掌握。

利用人工智能语言,编写的程序,具有专家系统所具有的各种有点。

并对语言的学习和理解提供了良好的契机。

巩固和提高了自己的编程能力,强化了编程思想,对数据结构、数据库等知识做到了很好的复习。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2