人工智能 课程设计报告 课设报告.docx

上传人:b****1 文档编号:13817860 上传时间:2023-06-17 格式:DOCX 页数:29 大小:489.28KB
下载 相关 举报
人工智能 课程设计报告 课设报告.docx_第1页
第1页 / 共29页
人工智能 课程设计报告 课设报告.docx_第2页
第2页 / 共29页
人工智能 课程设计报告 课设报告.docx_第3页
第3页 / 共29页
人工智能 课程设计报告 课设报告.docx_第4页
第4页 / 共29页
人工智能 课程设计报告 课设报告.docx_第5页
第5页 / 共29页
人工智能 课程设计报告 课设报告.docx_第6页
第6页 / 共29页
人工智能 课程设计报告 课设报告.docx_第7页
第7页 / 共29页
人工智能 课程设计报告 课设报告.docx_第8页
第8页 / 共29页
人工智能 课程设计报告 课设报告.docx_第9页
第9页 / 共29页
人工智能 课程设计报告 课设报告.docx_第10页
第10页 / 共29页
人工智能 课程设计报告 课设报告.docx_第11页
第11页 / 共29页
人工智能 课程设计报告 课设报告.docx_第12页
第12页 / 共29页
人工智能 课程设计报告 课设报告.docx_第13页
第13页 / 共29页
人工智能 课程设计报告 课设报告.docx_第14页
第14页 / 共29页
人工智能 课程设计报告 课设报告.docx_第15页
第15页 / 共29页
人工智能 课程设计报告 课设报告.docx_第16页
第16页 / 共29页
人工智能 课程设计报告 课设报告.docx_第17页
第17页 / 共29页
人工智能 课程设计报告 课设报告.docx_第18页
第18页 / 共29页
人工智能 课程设计报告 课设报告.docx_第19页
第19页 / 共29页
人工智能 课程设计报告 课设报告.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

人工智能 课程设计报告 课设报告.docx

《人工智能 课程设计报告 课设报告.docx》由会员分享,可在线阅读,更多相关《人工智能 课程设计报告 课设报告.docx(29页珍藏版)》请在冰点文库上搜索。

人工智能 课程设计报告 课设报告.docx

人工智能课程设计报告课设报告

学生实验报告

 

实验课名称:

人工智能

实验项目名称:

基于回溯推理的小型专家系统

题目:

一个关于植物分类的小型专家系统

专业名称:

计算机科学与技术

班级:

24020704

学号:

2402070427

学生姓名:

杨孟拓

教师姓名:

慕晨

 

2010年10月27日

一、实验名称:

一个关于植物分类的小型专家系统

二、实验目的与要求:

1、确定推理方法(正向还是反向),并根据问题设计实现一个简单的不通用推理机(匹配、冲突消解)

2、规则库要求至少包含15条规则

3、初始事实可以任意给定,输入初始事实后能够得到推理结果

4、设计人机界面,解释模块提供查询规则的功能

5、可以不考虑知识库管理模块

6、提交实验报告

7、报告中要有推理树

三、实验内容:

本次实验将做一个关于植物分类的小型专家系统,在植物分类系统中,要区分各种植物,可以对每种植物构造一条识别规则,其中规则右部为识别出的植物名,左部为该植物的特征。

本次实验设计了一个简单的不通用推理机。

推理机给出的推理结果是“苹果”。

系统结构:

知识库,推理机,动态数据库,人机界面,解释模块,知识库管理模块。

 

专家系统结构图

四、程序设计思想

本次实验采用的推理方法为正向推理,正向推理是从已知事实出发,通过规则库求的结论。

这种推理方式是正向使用规则,即问题的初始状态作为初始数据库,仅当数据库中的事实满足某条规则的前提时,该规则才能被使用。

正向推理的推理基础是逻辑演绎的推理链。

从一组事实出发,使用一组规则,来证明目标的成立。

正向推理的步骤

步1将初始事实置入动态数据库;

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

步3用规则库中各规则的前件匹配动态数据库中的事实,将匹配成功的规则组成冲突集;

步4若冲突集为空,则运行失败,退出。

步5对冲突集做冲突消解,对选择执行的各规则,将其结论加入动态数据库,或执行其动作,转步2。

正向推理的流程图

五、程序实现过程

初始事实:

它的果肉为乳黄色

它的果实里无石细胞

它的果实为梨果

它的果实无毛

它的花托呈杯形

它种子的胚有两个子叶

规则:

R1:

if它种子的胚有两个子叶∨它的叶脉为网状then它是双子叶植物R2:

if它种子的胚只有一个子叶then它是单子叶植物

R3:

if它的果肉为白色then它是梨

R4:

if它的叶脉平行then它是单子叶植物

R5:

if它是双子叶植物∧它的花托呈杯形then它是蔷薇科植物

R6:

if它的花托呈圆柱形∧它的花瓣有5枚then它是蔷薇科植物

R7:

if它是双子叶植物∧它的花托呈圆柱形then它是蔷薇科植物

R8:

if它是蔷薇科植物∧它的果实为核果then它是李亚科植物

R9:

if它是蔷薇科植物∧它的果实为梨果then它是苹果亚科植物

R10:

if它是李亚科植物∧它的果实有毛then它是桃

R11:

if它是李亚科植物∧它的果实无毛then它是李

R12:

if它的果实为扁圆形∧它的果实外有纵沟then它是桃

R13:

if它是苹果亚科植物∧它的果实里无石细胞then它是苹果

R14:

if它是苹果亚科植物∧它的果实里有石细胞then它是梨

R15:

if它的果肉为乳黄色∧它的果肉质脆then它是苹果

推理过程:

初始事实写入动态数据库

{果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶}

第一次循环

用动态数据库的事实匹配目标条件,目标条件不成立

用规则库中的规则逐一与数据库匹配

R1:

if它种子的胚有两个子叶∨它的叶脉为网the它是双子叶植物

“双子叶胚”匹配成功,加入冲突集

R2:

if它种子的胚只有一个子叶then它是单子叶植物

匹配失败,该条规则放弃

R3:

if它的果肉为白色then它是梨

匹配失败,该条规则放弃

R4:

if它的叶脉平行then它是单子叶植物

匹配无结果,该条规则加入待测试规则集

R5:

if它是双子叶植物∧它的花托呈杯形then它是蔷薇科植物

“双子叶植物”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集

R6:

if它的花托呈圆柱形∧它的花瓣有5枚then它是蔷薇科植物

匹配失败,该条规则放弃

R7:

if它是双子叶植物∧它的花托呈圆柱形then它是蔷薇科植物

匹配失败,该条规则放弃

R8:

if它是蔷薇科植物∧它的果实为核果then它是李亚科植物

“果实为核果”匹配失败,该条规则放弃

R9:

if它是蔷薇科植物∧它的果实为梨果then它是苹果亚科植物

“蔷薇科植物”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集

R10:

if它是李亚科植物∧它的果实有毛then它是桃

“果实有毛”匹配失败,该条规则放弃

R11:

if它是李亚科植物∧它的果实无毛then它是李

“李亚科植物”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集

R12:

if它的果实为扁圆形∧它的果实外有纵沟then它是桃

“果实为扁圆形”和“果实外有从纵沟”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集

R13:

if它是苹果亚科植物∧它的果实里无石细胞then它是苹果

“苹果亚科植物”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集

R14:

if它是苹果亚科植物∧它的果实里有石细胞then它是梨

“果实有石细胞”匹配失败,该条规则放弃

R15:

if它的果肉为乳黄色∧它的果肉质脆then它是苹果

“果肉质脆”目前的动态数据库无法匹配,匹配无结果,该条规则加入待测试规则集

冲突消解

冲突集{R1}无冲突,则将后件加入动态数据库

{果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶}

第二次循环

用动态数据库的事实匹配目标条件,目标条件不成立

用待测试规则库中的规则与数据库匹配

{R4,R5,R9,R11,R12,R13,R15}

{果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶}

R5:

if它是双子叶植物∧它的花托呈杯形then它是蔷薇科植物

匹配成功,加入冲突集

R4、R9、R11、R12、R13、R15:

匹配无结果,新待测试规则集{R4、R9、R11、R12、R13、R15}

冲突消解

冲突集{R5}无冲突,则将后件加入动态数据库

{果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶,蔷薇科}

第三次循环

用动态数据库的事实匹配目标条件,目标条件不成立

用待测试规则库中的规则与数据库匹配

{R4,R9,R11,R12,R13,R15}

{果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶,蔷薇科}

R9:

if它是蔷薇科植物∧它的果实为梨果then它是苹果亚科植物

匹配成功,加入冲突集

R4、R11、R12、R13、R15:

匹配无结果,新待测试规则集{R4、R11、R12、R13、R15}

冲突消解

冲突集{R9}无冲突,则将后件加入动态数据库

{果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶,蔷薇科,苹果亚科}

第四次循环

用动态数据库的事实匹配目标条件,目标条件不成立

用待测试规则库中的规则与数据库匹配

{R4、R11、R12、R13、R15}

{果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶,蔷薇科,苹果亚科}

R13:

if它是苹果亚科植物∧它的果实里无石细胞then它是苹果

匹配成功,加入冲突集

R4、R11、R12、R15:

匹配无结果,新待测试规则集{R4、R11、R12、R15}

冲突消解

冲突集{R13}无冲突,则将后件加入动态数据库

{果肉为乳黄色,果实里无石细胞,果实为梨果,果实无毛,花托呈杯形,种子的胚有两个子叶,双子叶,蔷薇科,苹果亚科,苹果}

第五次循环

动态数据库的事实没有变化,推理结束,即结束循环

结果为苹果

 

 

 

推理树图

 

六、程序显示结果

七、体会与总结

通过这次实验,使我更加深了对产生式系统的推理方式(正向推理)的理解。

正向推理是从已知事实出发,通过规则库求的结论。

这种推理方式是正向使用规则,即问题的初始状态作为初始数据库,仅当数据库中的事实满足某条规则的前提时,该规则才能被使用。

正向推理的推理基础是逻辑演绎的推理链。

从一组事实出发,使用一组规则,来证明目标的成立。

这次实验需要编程,我使用的语言是VC++,编写的程序有些麻烦,人机界面也不算太友好,但是这是自己慢慢敲出来的,以后会慢慢改进,争取使自己的编程能力更进一步。

通过这次实验,我相信,只要自己在每一次实践中都能仔细思考,其实都不会很难,关键在于自己能不能认真思考,能不能亲自动手去做;其次还要多操作,只有多操作才能从中发现问题,才能及时向老师和同学请教,解决问题,从而更好的掌握书本中知识。

我会更加努力。

附录(部分代码):

/*比较两个字符串*/

boolequals(chara[255],charb[255])

{

inti;

if(strlen(a)==strlen(b))

{

for(i=0;i<(int)strlen(a);i++)

{

if(a[i]!

=b[i])

returnfalse;

}

returntrue;

}

return0;

}

/*显示事实*/

voidshowfact()

{

intn;

n=sizeof(fact)/4;

cout<<"事实:

{";

for(inti=0;i

{

cout<

}

cout<<"}"<

}

/*显示规则*/

voidshowrule()

{

intm;

m=sizeof(rule)/4;

cout<<"规则库中的规则:

"<

for(intk=0;k

{

cout<<"{"<

}

}

/*第一次单条件匹配*/

voidone_match()

{

charm[255];

charn[255];

charb[255];

cout<<"输入模糊条件m(前四个字符):

";

cin>>m;

cout<<"输入条件n:

";

cin>>n;

intk;

k=sizeof(fact)/4;

intsuccessCount=0;

charc1[255],c2[255],c3[255],c4[255];

memcpy(c1,fact2[0],strlen(fact2[0])+1);

memcpy(c2,fact2[1],strlen(fact2[1])+1);

memcpy(c3,fact2[2],strlen(fact2[2])+1);

memcpy(c4,fact2[3],strlen(fact2[3])+1);

if((equals(m,c1)==1)||(equals(m,c2)==1)||(equals(m,c3)==1)||(equals(m,c4)==1))

{

for(intj=0;j

{

memcpy(b,fact[j],strlen(fact[j])+1);

if(equals(n,b)==1)

{

++successCount;

}

}

if(successCount==1)

{

cout<<"匹配成功"<

}

else

cout<<"匹配失败,该条规则放弃"<

}

else

cout<<"匹配无结果,该条规则加入待测试规则集"<

}

/*第一次双条件(关系为或)匹配*/

voidtwo_or_match()

{

charm[255];

charn[255];

charb[255];

cout<<"输入第一条件m:

";

cin>>m;

cout<<"OR";

cout<<"输入第二条件n:

";

cin>>n;

intk;

k=sizeof(fact)/4;

intsuccessCount=0;

for(intj=0;j

{

memcpy(b,fact[j],strlen(fact[j])+1);

if(equals(m,b)==1)

{

++successCount;

}

if(equals(n,b)==1)

{

++successCount;

}

}

if((successCount==1)||(successCount==2))

{

cout<<"匹配成功,加入冲突集"<

}

else

cout<<"匹配无结果,该条规则加入待测试规则集"<

}

/*第一次双条件(关系为与)匹配1(模糊条件不同)*/

voidtwo_and_match1()

{

charm[255];

charn[255];

chara[255];

charb[255];

charc[255];

cout<<"输入模糊条件m:

";

cin>>m;

cout<<"输入模糊条件n:

";

cin>>n;

cout<<"输入第一条件a:

";

cin>>a;

cout<<"AND";

cout<<"输入第二条件b:

";

cin>>b;

intk;

k=sizeof(fact)/4;

intsuccessCount=0;

charc1[255],c2[255],c3[255],c4[255];

memcpy(c1,fact2[0],strlen(fact2[0])+1);

memcpy(c2,fact2[1],strlen(fact2[1])+1);

memcpy(c3,fact2[2],strlen(fact2[2])+1);

memcpy(c4,fact2[3],strlen(fact2[3])+1);

if(((equals(m,c1)==1)||(equals(m,c2)==1)||(equals(m,c3)==1)||(equals(m,c4)==1))||((equals(n,c1)==1)||(equals(n,c2)==1)||(equals(n,c3)==1)||(equals(n,c4)==1)))

{

for(intj=0;j

{

memcpy(c,fact[j],strlen(fact[j])+1);

if(equals(a,c)==1)

{

++successCount;

}

if(equals(b,c)==1)

{

++successCount;

}

}

if(successCount==1)

cout<<"匹配无结果,该条规则加入待测试规则集"<

else

cout<<"匹配失败,该条规则放弃"<

}

else

cout<<"匹配无结果,该条规则加入待测试规则集"<

}

/*第一次双条件(关系为与)匹配2(模糊条件相同)*/

voidtwo_and_match2()

{

charm[255];

charn[255];

chara[255];

charb[255];

charc[255];

cout<<"输入模糊条件m:

";

cin>>m;

cout<<"输入模糊条件n:

";

cin>>n;

cout<<"输入第一条件a:

";

cin>>a;

cout<<"AND";

cout<<"输入第二条件b:

";

cin>>b;

intk;

k=sizeof(fact)/4;

intsuccessCount=0;

charc1[255],c2[255],c3[255],c4[255];

memcpy(c1,fact2[0],strlen(fact2[0])+1);

memcpy(c2,fact2[1],strlen(fact2[1])+1);

memcpy(c3,fact2[2],strlen(fact2[2])+1);

memcpy(c4,fact2[3],strlen(fact2[3])+1);

if(((equals(m,c1)==1)||(equals(m,c2)==1)||(equals(m,c3)==1)||(equals(m,c4)==1))&&((equals(n,c1)==1)||(equals(n,c2)==1)||(equals(n,c3)==1)||(equals(n,c4)==1)))

{

for(intj=0;j

{

memcpy(c,fact[j],strlen(fact[j])+1);

if(equals(a,c)==1)

{

++successCount;

}

if(equals(b,c)==1)

{

++successCount;

}

}

if((successCount==0)||(successCount==1))

cout<<"匹配无结果,该条规则加入待测试规则集"<

else

cout<<"匹配失败,该条规则放弃"<

}

}

/*添加新的规则集*/

voidaddrule()

{

intn=0;

cout<<"规则库中的规则:

"<

cin>>n;

while(n<15)

{

cout<<"{"<

cin>>n;

}

cout<<"*********新的规则集添加完成*********"<

}

/*添加新的事实*/

voidaddfact()

{

intm,n,k,j;

chara[255];

charb[255];

k=sizeof(fact)/4;

cout<

cout<<"冲突集无冲突,则将后件加入动态数据库"<

cout<<"请输入下标n:

";

cin>>n;

cout<<"输入待添加的事实:

";

cin>>a;

fact1[n]=newchar[strlen(a)+1];

memcpy(fact1[n],a,strlen(a)+1);

cout<<"事实:

{";

for(inti=0;i

{

cout<

}

cout<<"}"<

j=sizeof(fact2)/4;

cout<

cout<<"请输入下标m:

";

cin>>m;

cout<<"模糊条件:

";

cin>>b;

fact3[m]=newchar[strlen(b)+1];

memcpy(fact3[m],b,strlen(b)+1);

}

/*添加冲突集*/

voidaddconf()

{

intn;

cout<<"请输入下标n:

";

cin>>n;

chara[255];

cout<<"输入待添加的事实:

";

cin>>a;

conf[n]=newchar[strlen(a)+1];

memcpy(conf[n],a,strlen(a)+1);

cout<<"冲突集:

{";

for(inti=0;i

{

cout<

}

cout<<"}"<

}

评语

 

评阅人:

日期:

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

当前位置:首页 > 考试认证 > IT认证

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

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