人工智能动物产生式报告解读.docx
《人工智能动物产生式报告解读.docx》由会员分享,可在线阅读,更多相关《人工智能动物产生式报告解读.docx(14页珍藏版)》请在冰豆网上搜索。
人工智能动物产生式报告解读
人工智能第三次实验报告
1.实验名称:
动物识别产生式系统
2.实验目的:
通过本实验让学生理解并体会知识的产生式表示以及推理策略,为以后设计并实现复杂的专家系统奠定基础。
3.实验内容:
知识表示为产生式知识表示方法,设计并实现具有15条规则能自动识别7种动物的产生式系统。
规则1:
如果:
动物有毛发
则:
该动物是哺乳动物
规则2:
如果:
动物有奶
则:
该动物是哺乳动物
规则3:
如果:
该动物有羽毛
则:
该动物是鸟
规则4:
如果:
动物会飞,且会下蛋
则:
该动物是鸟
规则5:
如果:
动物吃肉
则:
该动物是肉食动物
规则6:
如果:
动物有犬齿,且有爪,且眼盯前方
则:
该动物是食肉动物
规则7:
如果:
动物是哺乳动物,且有蹄
则:
该动物是有蹄动物
规则8:
如果:
动物是哺乳动物,且是反刍动物
则:
该动物是有蹄动物
规则9:
如果:
动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点
则:
该动物是豹
规则10:
如果:
动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹
则:
该动物是虎
规则11:
如果:
动物有暗斑点,且有长腿,且有长脖子,且是有蹄类
则:
该动物是长颈鹿
规则12:
如果:
动物有黑条纹,且是有蹄类动物
则:
该动物是斑马
规则13:
如果:
动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞
则:
该动物是鸵鸟
规则14:
如果:
动物是鸟,且不会飞,且会游泳,且是黑色的
则:
该动物是企鹅
规则15:
如果:
动物是鸟,且善飞
则:
该动物是信天翁
例如:
该系统输入:
有奶吃肉黑色条纹黄褐色系统输出:
是虎
4.实验代码
#include
#include
#include
#include
char*FacAndRes[]={"反刍","蹄类","哺乳类","眼向前方",
"有爪","犬齿","吃肉","会下蛋","会飞",
"有羽毛","有蹄","食肉动物","鸟类","能产奶",
"有毛发","善飞","黑白色条纹","会游泳",
"长腿","长脖子","黑条纹","黑斑点",
"黄褐色","信天翁","企鹅","驼鸟","斑马",
"长颈鹿","虎","豹",0};
intrulePilcine[][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}};
intrc[]={30,29,28,27,26,25,24,3,3,13,13,12,12,11,11,0};//断言编号数组
classfact
{private:
intnumber;
charname[21];
intact;
intsuc;
public:
fact*next;
fact(intnum,char*L)
{
strcpy(name,L);
number=num;
act=0;
suc=-1;
next=NULL;
}
char*getName()
{
char*L;
L=newchar[21];
strcpy(L,name);
returnL;
}
intgetNumber()
{
returnnumber;
}
intgetAct()
{
returnact;
}
intgetSuc()
{
returnsuc;
}
voidputAct(constinttempAct,inttempSuc)
{
act=tempAct;
suc=tempSuc;
}
};
fact*f;
classList
{private:
intnumber;
public:
List*next;
List(intnum)
{
number=num;
next=NULL;
}
intgetNumber()
{
returnnumber;
}
};
classrule
{
char*name;
List*Pre;
intcon;
public:
rule*next;
rule(char*N,intP[],intC);
~rule();
intquery();
voidgetName()
{
cout<}
};
rule:
:
~rule()
{
List*L;
while(Pre)
{
L=Pre->next;
deletePre;
Pre=L;
}
deletename;
}
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;
}
con=C;
}
intrule:
:
query()
{
charc;
intTag=0;
List*L;
fact*F;
F=f;
L=Pre;
if(L==NULL)
cout<<"\nError";
while(L!
=NULL)
{
F=f;
for(;;)
{
if(abs(L->getNumber())==F->getNumber())
break;
F=F->next;
}
if(L->getNumber()>0)
{
if((F->getSuc())==true){L=L->next;continue;}
if((F->getSuc())==false)returnfalse;
}
else
{
if((F->getSuc())==1)
return0;
if((F->getSuc())==0)
{
L=L->next;
continue;
}
}
cout<getName()<<"(Y/N)"<c=getchar();
flushall();
if((c=='Y')||(c=='y'))
{
if(L->getNumber()>0)
F->putAct(1,1);
if(L->getNumber()<0)
{
F->putAct(1,1);
Tag=-1;
return0;
}
}
else
{
if(L->getNumber()<0)
F->putAct(-1,0);
else
{
F->putAct(-1,0);
Tag=-1;
return0;
}
}
L=L->next;
}
F=f;
for(;;)
{
if(con==F->getNumber())
break;
F=F->next;
}
if(con<24)
{
F->putAct(1,1);
return0;
}
if(Tag!
=-1)
{
F=f;
for(;;)
{
if(con==F->getNumber())
break;
F=F->next;
}
if(con<24)
{
F->putAct(1,1);
return0;
}
cout<<"\n这个动物是"<getName()<return1;
}
return0;
}
intmain()
{
fact*F,*T;
rule*r1,*r2;
charch[8];
inti=1;
f=NULL;
while(FacAndRes[i-1])
{
F=newfact(i,FacAndRes[i-1]);
F->next=f;
f=F;
i++;
}
F=f;
f=NULL;
while(F)
{
T=F;
F=F->next;
T->next=f;
f=T;
}
i=0;
r1=NULL;
for(i=0;i<15;i++)
{
r2=newrule(ch,rulePilcine[i],rc[i]);
r2->next=r1;
r1=r2;
ch[5]++;
}
r2=r1;
for(;;)
{
i=r2->query();
if((i==1)||(i==-1))
break;
r2=r2->next;
if(!
r2)
break;
}
if(!
r2)
cout<<"没有这种动物."<getchar();
return1;
}
5.实验结果:
6实验心得:
通过本次实验深刻体会到产生式推理的魅力,推理的过程已经基本了解和掌握,对代码的控制输出表达能力也有了很大的提高,流程的控制加深了我对逻辑控制的体会和强化。
本次算法还算比较简单,特别是数据结构的设计,在设计过程中用了空间换时间的方法,使算法过程十分简洁,运行效率也比较高,数据的冗余也得到很好控制,实验过程还有很多小问题以及在前期的数据库设计也存在很多事物,总之,算法的过程表达的不够清晰,系统的规则和数据的扩展性不好等等,还有就是规则库和事实库是静态,应该使用户动态输入,然后使用链表插入动态增加链表的规则,使其及时改变。
读书的好处
1、行万里路,读万卷书。
2、书山有路勤为径,学海无涯苦作舟。
3、读书破万卷,下笔如有神。
4、我所学到的任何有价值的知识都是由自学中得来的。
——达尔文
5、少壮不努力,老大徒悲伤。
6、黑发不知勤学早,白首方悔读书迟。
——颜真卿
7、宝剑锋从磨砺出,梅花香自苦寒来。
8、读书要三到:
心到、眼到、口到
9、玉不琢、不成器,人不学、不知义。
10、一日无书,百事荒废。
——陈寿
11、书是人类进步的阶梯。
12、一日不读口生,一日不写手生。
13、我扑在书上,就像饥饿的人扑在面包上。
——高尔基
14、书到用时方恨少、事非经过不知难。
——陆游
15、读一本好书,就如同和一个高尚的人在交谈——歌德
16、读一切好书,就是和许多高尚的人谈话。
——笛卡儿
17、学习永远不晚。
——高尔基
18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。
——刘向
19、学而不思则惘,思而不学则殆。
——孔子
20、读书给人以快乐、给人以光彩、给人以才干。
——培根