人工智能产生式系统实验报告解读.docx
- 文档编号:27432166
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:21
- 大小:106.58KB
人工智能产生式系统实验报告解读.docx
《人工智能产生式系统实验报告解读.docx》由会员分享,可在线阅读,更多相关《人工智能产生式系统实验报告解读.docx(21页珍藏版)》请在冰豆网上搜索。
人工智能产生式系统实验报告解读
实验报告
【实验名称】______________产生式系统_______________________
【实验目的】
1.理解产生式系统的结构原理与实际应用。
2.掌握产生式规则表示及规则库组建的实现方法。
3.熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法。
【实验原理】
产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。
在产生式系统中,论域的知识分为两部分:
用事实表示静态知识;用产生式规则表示推理过程和行为。
【实验内容】
1.自己建造产生式系统(包括规则库和事实库),然后进行推理,即可以自己输入任何的事实,并基于原有的规则和输入的事实进行推理。
2.建造动物识别系统,能根据输入的动物特征判断是那种动物或给出相应的回答。
3.算法设计
首先建立事实库
事实库是在程序的开始直接输入的,用户根据需要选择,即要求用户先输入特征个数,然后输入动物的特征,进行识别。
如果未识别出来,则可以重新选择,或者退出。
动物的特征如下:
1有奶2有毛发3有羽毛4会飞5生蛋6有爪7有犬齿
8目盯前方9吃肉10有蹄11反刍食物12黄褐色13黑色条纹
14黑色斑点15长腿16长脖子17暗斑点18白色19不会飞
20黑白色21会游泳22善飞23不怕风浪
24哺乳动物25鸟26食肉动物27有蹄动物28偶蹄动物
29海燕30老虎31金钱豹32长颈鹿33斑马34鸵鸟35企鹅
建立静态规则库
即建立产生式规则,本算法采用了产生中间事实的方法,便于建立和使用规则。
为了便于设计,我们把要识别的动物限于7种,这样所需要的产生式规则就比较少。
本算法共有15种规则,如下:
R1:
如果动物有奶,则它是哺乳动物
R2:
如果动物有毛发,则它是哺乳动物
R3:
如果动物有羽毛,则它是鸟
R4:
如果动物会飞且生蛋,则它是鸟
R5:
吃肉的哺乳动物是食肉动物
R6:
有爪有犬齿木钉前方的哺乳动物是食肉动物
R7:
有蹄的哺乳动物是有蹄动物
R8:
反刍食物的有蹄动物是偶蹄动物
R9:
黄褐色有黑条纹的食肉动物是老虎
R10:
黄褐色有黑色斑点的食肉动物是金钱豹
R11:
长腿长脖子有黄褐色暗斑点的有蹄动物是长颈鹿
R12:
有黑白条纹的有蹄动物是斑马
R13:
不会飞长腿长脖的鸟是鸵鸟
R14:
不会飞会游泳黑白色的鸟是企鹅
R15:
善飞不怕风浪的鸟是海燕
具体表示如下:
R1:
1->24
R2:
2->24
R3:
3->25
R4:
4*5->25
R5:
6*7*8*24->26
R6:
9*24->26
R7:
10*24->27
R8:
11*27->28
R9:
12*13*24->30
R10:
12*14*24->31
R11:
12*15*16*17*27->32
R12:
13*18*27->33
R13:
15*16*19*25->34
R14:
19*20*21*25->35
R15:
22*23*25->29
正向推理过程
从已知事实出发,通过规则库求得结论,或称数据驱动方式。
推理过程是:
Ø规则集中的规则前件与事实库中的事实进行匹配,得匹配的规则集合。
Ø从匹配规则集合中选择一条规则作为使用规则。
Ø执行使用规则的后件,将该使用规则的后件送入事实库中。
Ø重复这个过程直至达到目标。
如有多条匹配规则需从中选一条作为使用规则,本算法是根据规则的顺序依次选择,且规则中不存在同一组事实对应多条匹配规则。
实验流程图
实验结果及分析
如输入如下事实:
有羽毛、善飞、不怕风浪。
系统的推理过程如下:
先从规则库中取出第一条规则R1,检查其前提是否可与事实库中的已知事实相匹配。
R1的前提是“有奶”,但事实库中无此事实,故匹配失败;然后取R2,匹配失败;接着取R3,该前提与已知事实“有羽毛”相匹配,故R3被执行,并将其结论“鸟”作为新的事实加入到事实库中。
此时,事实库的内容变为:
有羽毛、善飞、不怕风浪、鸟;此后,R4~R14均匹配失败,接着取R15,该前提“善飞+不怕风浪+鸟”与已知事实相匹配,R15被执行,并推出“该动物是海燕”。
由于“海燕”已是目标集合中的一个结论,即已推出最终结果,故问题求解过程结束。
下面是程序运行的结果:
【实验程序】
#include
#defineN23
voidmain()
{
inti,j,k,a,b,c;
intnum;
intfact[N],temp[N];
intflag=1;
while(flag==1)
{
printf("动物的特征如下:
\n");
printf("1有奶2有毛发3有羽毛4会飞5生蛋\n6有爪7有犬齿8目盯前方9吃肉10有蹄\n11反刍食物12黄褐色13黑色条纹14黑色斑点15长腿\n16长脖子17暗斑点18白色19不会飞20黑白色\n21会游泳22善飞23不怕风浪\n");
printf("请输入描述该动物特征的个数:
");
scanf("%d",&num);
printf("请输入对这只动物的特征描述的序号(按序号由小到大):
\n");
for(i=0;i { scanf("%d",&a); fact[i]=a; } //********************************for(i=0;i { if(fact[i]==1) { fact[num]=24; num++; printf("使用规则1,新增加的事实为: 哺乳动物\n"); break; } } //********************************for(i=0;i { if(fact[i]==2) { fact[num]=24; num++; printf("使用规则2,新增加的事实为: 哺乳动物\n"); break; } } //********************************for(i=0;i { if(fact[i]==3) { fact[num]=25; num++; printf("使用规则3,新增加的事实为: 鸟\n"); break; } } //********************************k=0; for(i=0;i { if(fact[i]==4) { temp[k]=fact[i]; k++; continue; } if(fact[i]==5) { temp[k]=fact[i]; break; } } if(temp[0]==4&&temp[1]==5) { fact[num]=25; num++; printf("使用规则4,新增加的事实为: 鸟\n"); } //********************************k=0; for(i=0;i { if(fact[i]==6) { temp[k]=fact[i]; k++; continue; } if(fact[i]==7) { temp[k]=fact[i]; k++; continue; } if(fact[i]==8) { temp[k]=fact[i]; k++; continue; } if(fact[i]==24) { temp[k]=fact[i]; break; } } if(temp[0]==6&&temp[1]==7&&temp[2]==8&&temp[3]==24) { fact[num]=26; num++; printf("使用规则5,新增加的事实为: 食肉动物\n"); } //********************************k=0; for(i=0;i { if(fact[i]==9) { temp[k]=fact[i]; k++; continue; } if(fact[i]==24) { temp[k]=fact[i]; break; } } if(temp[0]==9&&temp[1]==24) { fact[num]=26; num++; printf("使用规则6,新增加的事实为: 食肉动物\n"); } //********************************k=0; for(i=0;i { if(fact[i]==10) { temp[k]=fact[i]; k++; continue; } if(fact[i]==24) { temp[k]=fact[i]; break; } } if(temp[0]==10&&temp[1]==24) { fact[num]=27; num++; printf("使用规则7,新增加的事实为: 有蹄动物\n"); } //********************************k=0; for(i=0;i { if(fact[i]==11) { temp[k]=fact[i]; k++; continue; } if(fact[i]==27) { temp[k]=fact[i]; break; } } if(temp[0]==11&&temp[1]==27) { fact[num]=28; num++; printf("使用规则8,新增加的事实为: 偶蹄动物\n"); } //********************************k=0; for(i=0;i { if(fact[i]==12) { temp[k]=fact[i]; k++; continue; } if(fact[i]==13) { temp[k]=fact[i]; k++; continue; } if(fact[i]==24) { temp[k]=fact[i]; break; } } if(temp[0]==12&&temp[1]==13&&temp[2]==24) { fact[num]=30; //num++; printf("使用规则9,新增加的事实为: 老虎\n该动物为老虎\n"); } //********************************k=0; for(i=0;i { if(fact[i]==12) { temp[k]=fact[i]; k++; continue; } if(fact[i]==14) { temp[k]=fact[i]; k++; continue; } if(fact[i]==24) { temp[k]=fact[i]; break; } } if(temp[0]==12&&temp[1]==14&&temp[2]==24) { fact[num]=31; //num++; printf("使用规则10,新增加的事实为: 金钱豹\n该动物为金钱豹\n"); } //********************************k=0; for(i=0;i { if(fact[i]==12) { temp[k]=fact[i]; k++; continue; } if(fact[i]==15) { temp[k]=fact[i]; k++; continue; } if(fact[i]==16) { temp[k]=fact[i]; k++; continue; } if(fact[i]==17) { temp[k]=fact[i]; k++; continue; } if(fact[i]==27) { temp[k]=fact[i]; break; } } if(temp[0]==12&&temp[1]==15&&temp[2]==16&&temp[3]==17&&temp[4]==27) { fact[num]=32; //num++; printf("使用规则11,新增加的事实为: 长颈鹿\n该动物为长颈鹿\n"); } //********************************k=0; for(i=0;i { if(fact[i]==13) { temp[k]=fact[i]; k++; continue; } if(fact[i]==18) { temp[k]=fact[i]; k++; continue; } if(fact[i]==27) { temp[k]=fact[i]; break; } } if(temp[0]==13&&temp[1]==18&&temp[2]==27) { fact[num]=33; //num++; printf("使用规则12,新增加的事实为: 斑马\n该动物为斑马\n"); } //********************************k=0; for(i=0;i { if(fact[i]==15) { temp[k]=fact[i]; k++; continue; } if(fact[i]==16) { temp[k]=fact[i]; k++; continue; } if(fact[i]==19) { temp[k]=fact[i]; k++; continue; } if(fact[i]==25) { temp[k]=fact[i]; break; } } if(temp[0]==15&&temp[1]==16&&temp[2]==19&&temp[3]==25) { fact[num]=34; //num++; printf("使用规则13,新增加的事实为: 鸵鸟\n该动物为鸵鸟\n"); } //********************************k=0; for(i=0;i { if(fact[i]==19) { temp[k]=fact[i]; k++; continue; } if(fact[i]==20) { temp[k]=fact[i]; k++; continue; } if(fact[i]==21) { temp[k]=fact[i]; k++; continue; } if(fact[i]==25) { temp[k]=fact[i]; break; } } if(temp[0]==19&&temp[1]==20&&temp[2]==21&&temp[3]==25) { fact[num]=35; //num++; printf("使用规则14,新增加的事实为: 企鹅\n该动物为企鹅\n"); } //********************************k=0; for(i=0;i { if(fact[i]==22) { temp[k]=fact[i]; k++; continue; } if(fact[i]==23) { temp[k]=fact[i]; k++; continue; } if(fact[i]==25) { temp[k]=fact[i]; break; } } if(temp[0]==22&&temp[1]==23&&temp[2]==25) { fact[num]=29; //num++; printf("使用规则15,新增加的事实为: 海燕\n该动物为海燕\n"); } //********************************if(fact[num]<29) printf("现有事实无法推断出结果! \n"); printf("\n"); printf("继续请按1,退出按其它数字键: "); scanf("%d",&c); if(c==1) flag=c; elsebreak; } } 【小结或讨论】 本系统的规则库是静态的,不能动态增加新的规则。 这使得在规则变化的情况下不能及时改变,但是该系统已经能基本满足需要,对输入的事实能给出相应的回答,判断出是何种动物。 读书的好处 1、行万里路,读万卷书。 2、书山有路勤为径,学海无涯苦作舟。 3、读书破万卷,下笔如有神。 4、我所学到的任何有价值的知识都是由自学中得来的。 ——达尔文 5、少壮不努力,老大徒悲伤。 6、黑发不知勤学早,白首方悔读书迟。 ——颜真卿 7、宝剑锋从磨砺出,梅花香自苦寒来。 8、读书要三到: 心到、眼到、口到 9、玉不琢、不成器,人不学、不知义。 10、一日无书,百事荒废。 ——陈寿 11、书是人类进步的阶梯。 12、一日不读口生,一日不写手生。 13、我扑在书上,就像饥饿的人扑在面包上。 ——高尔基 14、书到用时方恨少、事非经过不知难。 ——陆游 15、读一本好书,就如同和一个高尚的人在交谈——歌德 16、读一切好书,就是和许多高尚的人谈话。 ——笛卡儿 17、学习永远不晚。 ——高尔基 18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。 ——刘向 19、学而不思则惘,思而不学则殆。 ——孔子 20、读书给人以快乐、给人以光彩、给人以才干。 ——培根
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 人工智能 产生 系统 实验 报告 解读