实验一产生式系统实验Word文档格式.docx
《实验一产生式系统实验Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验一产生式系统实验Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。
2.自己建造产生式系统(包括规则库和事实库),然后进行推理,即可以自己输入任何的规则和事实,并基于这种规则和事实进行推理。
这为学生亲手建造产生式系统并进行推理提供了一种有效的实验环境。
五、实验步骤:
1.定义变量,包括变量名和变量的值。
2.建立规则库,其方法是,(a)输入规则的条件:
每条规则至少有一个条件和一个结论,选择变量名,输入条件(符号);
选择变量值,按确定按钮就完成了一条条件的输入。
重复操作,可输入多条条件;
(b)输入规则的结论:
输入完规则的条件后,就可以输入规则的结论了,每条规则必须也只能有一个结论。
选择变量名,输入条件(符号),选择变量值,按确定按钮就完成了一个结论的输入。
重复以上两步,完成整个规则库的建立。
3.建立事实库(总数据库):
建立过程同步骤2。
重复操作,可输入多条事实。
4.然后按“开始”或“单步”按钮即可。
此外,利用实例演示,可以运行系统默认的产生式系统,并且可以进行正反向推理。
其他的可参见其帮助文件。
六、实验流程图和结果:
七、程序清单:
#include<
iostream>
iomanip>
usingnamespacestd;
char*animal[]={"
企鹅"
"
海燕"
鸵鸟"
斑马"
长颈鹿"
虎"
金钱豹"
};
char*feature[]={"
有毛"
产奶"
有羽毛"
会飞"
会下蛋"
吃肉"
有犬齿"
有爪"
眼睛盯前方"
有蹄"
反刍"
黄褐色"
有斑点"
//0123456789101112"
有黑色条纹"
长脖"
长腿"
不会飞"
会游泳"
黑白两色"
善飞"
哺乳类"
鸟类"
肉食类"
蹄类"
//1314151617181920212223
"
//24252627282930
typedefstruct//存放规则的结构体
{
intrelation[5];
intname;
}Rule;
Rulerule[15]={
{{0,-1},20},//规则0
{{1,-1},20},//规则1
{{2,-1},21},//规则2
{{3,4,-1},21},//规则3
{{20,5,-1},22},//规则4
{{6,7,8,-1},22},//规则5
{{20,8,-1},23},//规则6
{{20,9,-1},23},//规则7
{{22,11,12,-1},30},//规则8
{{22,11,13,-1},29},//规则9
{{23,14,15,12,-1},28},//规则10
{{23,13,-1},27},//规则11
{{21,14,15,16,-1},26},//规则12
{{21,19,-1},25},//规则13
{{21,17,18,16,-1},24}};
//规则14
intflag[23]={0};
//标记各个特征是否选择
intIsAnimal(inta);
intinference();
voidinput();
voidmenu();
voidmenu()
inti=0;
for(i=0;
i<
24;
i++)
{
if(i%4==0&
&
i!
=0)
cout<
<
endl;
}
printf("
%-3d.%-15s"
i,feature[i]);
}
voidinput()
intti=0;
for(inti=0;
flag[i]=0;
while(ti!
=-1)
"
\n输入选择(-1结束):
;
cin>
>
ti;
if(ti>
=0&
ti<
=23)
flag[ti]=1;
elseif(ti!
{
输入错误!
请输入0~23之间的数字!
endl;
//tanimal=25
cin.clear();
//清除流错误错误标记
cin.sync();
////////////清空输入缓冲区
intIsAnimal(inta)
if(a>
=24&
a<
=30)
return1;
return0;
intinference()//正向推理
intti;
inti,j;
inttres;
15;
j=0;
ti=rule[i].relation[j];
=-1)//-1作为结束
if(flag[ti]==0)
break;
j++;
ti=rule[i].relation[j];
if(ti==-1)//ti==-1代表规则满足
tres=rule[i].name;
flag[tres]=1;
运用了规则%d:
i);
while(rule[i].relation[j]!
feature[rule[i].relation[j]]<
====>
feature[tres]<
if(IsAnimal(tres))
if(i==15)
{cout<
没有这种动物"
return-1;
charq;
voidmain()
{
while(q!
='
n'
)
menu();
input();
inference();
\n继续?
(Y/N)"
q;
system("
cls"
);