人人范文网 范文大全

人工智能产生式系统实验报告解读

发布时间:2020-03-03 02:43:25 来源:范文大全 收藏本文 下载本文 手机版

实 验 报 告

【实验名称】______________产生式系统_______________________ 【实验目的】

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

④实验流程图

开始初始化欲加入的事实的个数及事实令i=1取出规则i的前提条件部分Ni=i+1事实库中有相应的事实Y取出规则i结论部分结论为新事实Y将该规则加入到事实库中该事实是结论性事实Y将该规则的结论作为最终的结论结束NN ⑤实验结果及分析

如输入如下事实:有羽毛、善飞、不怕风浪。系统的推理过程如下:

先从规则库中取出第一条规则R1,检查其前提是否可与事实库中的已知事实相匹配。 R1的前提是“有奶”,但事实库中无此事实,故匹配失败;然后取R2,匹配失败;接着取R3,该前提与已知事实“有羽毛”相匹配,故R3被执行,并将其结论“鸟”作为新的事实加入到事实库中。此时,事实库的内容变为:有羽毛、善飞、不怕风浪、鸟;此后,R4~R14均匹配失败,接着取R15,该前提“善飞+不怕风浪+鸟”与已知事实相匹配,R15被执行,并推出“该动物是海燕”。由于“海燕”已是目标集合中的一个结论,即已推出最终结果,故问题求解过程结束。

下面是程序运行的结果:

【实验程序】

#include #define N 23 void main() {

int i,j,k,a,b,c; int num; int fact[N],temp[N]; int flag=1; while(flag==1) { printf(\"动物的特征如下:\\n\"); printf(\"1有奶

2有毛发

3有羽毛

4会飞

20黑白色\\n21会游泳

22善飞

23不怕风浪\\n\");

printf(\"请输入描述该动物特征的个

数:\");

scanf(\"%d\",&num);

printf(\"请输入对这只动物的特征描述

的序号(按序号由小到大):\\n\");

for(i=0;i

}

//********************************for(i=0;i

if(fact[i]==1) scanf(\"%d\",&a); fact[i]=a; 会飞

5生蛋\\n6有爪

7有犬齿

8目盯前方

9吃肉

10有蹄\\n11反刍食物

12黄褐色

13黑色条纹

14黑色斑点

15长腿\\n16长脖子

17暗斑点

18白色

19不

{

fact[num]=24; num++; printf(\"使用规则1,新增加的

}

}

//********************************k=0;

for(i=0;i

}

if(temp[0]==4&&temp[1]==5) {

fact[num]=25; num++;

printf(\"使用规则4,新增加的事实if(fact[i]==4) {

}

if(fact[i]==5) {

}

temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue; 事实为: 哺乳动物\\n\");

} //********************************for(i=0;i

if(fact[i]==2) {

fact[num]=24; num++; printf(\"使用规则2,新增加的 } break;

事实为: 哺乳动物\\n\");

} //********************************for(i=0;i

if(fact[i]==3) {

fact[num]=25; num++; printf(\"使用规则3,新增加的 } break;

为:鸟\\n\");

}

//********************************

k=0;

for(i=0;i

if(fact[i]==6) 事实为:鸟\\n\");

break;

} {

} if(fact[i]==7) {

} if(fact[i]==8) {

} if(fact[i]==24) {

} temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue; temp[k]=fact[i]; k++; continue; temp[k]=fact[i]; k++; continue;

}

//********************************k=0;

for(i=0;i

}

if(temp[0]==9&&temp[1]==24) {

fact[num]=26; num++;

printf(\"使用规则6,新增加的事实if(fact[i]==9) {

}

if(fact[i]==24) {

}

temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue;

为:食肉动物\\n\");

fact[num]=26; num++; printf(\"使用规则5,新增加的事实

6 if(temp[0]==6&&temp[1]==7&&temp[2}

//********************************k=0;

for(i=0;i

if(fact[i]==10) { ]==8&&temp[3]==24)

{

为:食肉动物\\n\");

}

} temp[k]=fact[i]; k++; continue;

}

}

break;

if(temp[0]==11&&temp[1]==27) {

fact[num]=28; num++;

printf(\"使用规则8,新增加的事实if(fact[i]==24) {

} temp[k]=fact[i]; break;

为:偶蹄动物\\n\");

}

//********************************k=0;

for(i=0;i

if(fact[i]==12) {

}

if(fact[i]==13) {

}

if(fact[i]==24) {

temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue; temp[k]=fact[i]; k++; continue; if(temp[0]==10&&temp[1]==24) {

fact[num]=27; num++; printf(\"使用规则7,新增加的事实

为:有蹄动物\\n\");

} //********************************k=0; for(i=0;i

if(fact[i]==11) {

} if(fact[i]==27) { temp[k]=fact[i];

temp[k]=fact[i]; k++; continue;

} }

}

} if(temp[0]==12&&temp[1]==13&&tempif(temp[0]==12&&temp[1]==14&&temp[2]==24)

{

fact[num]=30; //num++; printf(\"使用规则9,新增加的事实

[2]==24)

{

fact[num]=31; //num++;

printf(\"使用规则10,新增加的事实为:老虎\\n该动物为老虎\\n\");

为:金钱豹\\n该动物为金钱豹\\n\");

}

//********************************k=0;

for(i=0;i

if(fact[i]==12) {

}

if(fact[i]==15) {

}

if(fact[i]==16) {

temp[k]=fact[i]; k++;

temp[k]=fact[i]; k++; continue; temp[k]=fact[i]; k++; continue; } //********************************k=0; for(i=0;i

if(fact[i]==12) {

} if(fact[i]==14) {

} if(fact[i]==24) { temp[k]=fact[i]; break;

temp[k]=fact[i]; k++; continue;

temp[k]=fact[i]; k++; continue;

} } continue;

}

}

continue; if(fact[i]==17) {

} if(fact[i]==27) {

} temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue;

if(fact[i]==18) {

}

if(fact[i]==27) {

}

temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue;

if(temp[0]==12&&temp[1]==15&&tempif(temp[0]==13&&temp[1]==18&&temp[2]==16&&temp[3]==17&&temp[4]==27)

{

fact[num]=32; //num++; printf(\"使用规则11,新增加的事实

[2]==27)

{

fact[num]=33; //num++;

printf(\"使用规则12,新增加的事实为:长颈鹿\\n该动物为长颈鹿\\n\");

为:斑马\\n该动物为斑马\\n\");

}

//********************************k=0;

for(i=0;i

if(fact[i]==15) {

temp[k]=fact[i]; k++; } //********************************k=0; for(i=0;i

if(fact[i]==13) { temp[k]=fact[i]; k++;

} } continue;

for(i=0;i

}

if(temp[0]==19&&temp[1]==20&&temp

if(fact[i]==19) {

}

if(fact[i]==20) {

}

if(fact[i]==21) {

}

if(fact[i]==25) {

}

temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue; temp[k]=fact[i]; k++; continue; temp[k]=fact[i]; k++; continue; if(fact[i]==16) {

} if(fact[i]==19) {

} if(fact[i]==25) {

} temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue; temp[k]=fact[i]; k++; continue;

if(temp[0]==15&&temp[1]==16&&temp[2]==19&&temp[3]==25)

{

fact[num]=34; //num++; printf(\"使用规则13,新增加的事实

为:鸵鸟\\n该动物为鸵鸟\\n\");

} //********************************k=0;

[2]==21&&temp[3]==25)

{

fact[num]=35;

//num++; printf(\"使用规则14,新增加的事实

}

} 为:企鹅\\n该动物为企鹅\\n\");

} //********************************k=0; for(i=0;i

if(fact[i]==22) {

} if(fact[i]==23) {

} if(fact[i]==25) { temp[k]=fact[i]; break; temp[k]=fact[i]; k++; continue; temp[k]=fact[i]; k++; continue;

if(temp[0]==22&&temp[1]==23&&temp

[2]==25)

{

fact[num]=29; //num++;

printf(\"使用规则15,新增加的事实

为:海燕\\n该动物为海燕\\n\");

}

//********************************if(fact[num]

printf(\"现有事实无法推断出结

果!\\n\");

printf(\"\\n\");

printf(\"继续请按1,退出按其它数字

键:\");

}

scanf(\"%d\",&c); if(c==1)

flag=c;

else break; } 【小结或讨论】

本系统的规则库是静态的,不能动态增加新的规则。这使得在规则变化的情况下不能及时改变,但是该系统已经能基本满足需要,对输入的事实能给出相应的回答,判断出是何种动物。

11

读书的好处

1、行万里路,读万卷书。

2、书山有路勤为径,学海无涯苦作舟。

3、读书破万卷,下笔如有神。

4、我所学到的任何有价值的知识都是由自学中得来的。——达尔文

5、少壮不努力,老大徒悲伤。

6、黑发不知勤学早,白首方悔读书迟。——颜真卿

7、宝剑锋从磨砺出,梅花香自苦寒来。

8、读书要三到:心到、眼到、口到

9、玉不琢、不成器,人不学、不知义。

10、一日无书,百事荒废。——陈寿

11、书是人类进步的阶梯。

12、一日不读口生,一日不写手生。

13、我扑在书上,就像饥饿的人扑在面包上。——高尔基

14、书到用时方恨少、事非经过不知难。——陆游

15、读一本好书,就如同和一个高尚的人在交谈——歌德

16、读一切好书,就是和许多高尚的人谈话。——笛卡儿

17、学习永远不晚。——高尔基

18、少而好学,如日出之阳;壮而好学,如日中之光;志而好学,如炳烛之光。——刘向

19、学而不思则惘,思而不学则殆。——孔子

20、读书给人以快乐、给人以光彩、给人以才干。——培根

人工智能_实验报告

人工智能实验报告

人工智能发展史解读

人工智能论文解读

人工智能TSP旅行商问题实验报告

人工智能与电子商务解读

人工智能导论论文解读

人工智能大作业解读

人工智能课程论文解读

人工智能课程设计(五子棋)解读

人工智能产生式系统实验报告解读
《人工智能产生式系统实验报告解读.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
点击下载本文文档