产生式系统实验报告.docx
- 文档编号:10640530
- 上传时间:2023-02-22
- 格式:DOCX
- 页数:12
- 大小:1.14MB
产生式系统实验报告.docx
《产生式系统实验报告.docx》由会员分享,可在线阅读,更多相关《产生式系统实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
产生式系统实验报告
学生实验报告
实验课名称:
人工智能
实验项目名称:
动物识别系统
专业名称:
计算机科学与技术
班级:
2012240201
学号:
201224020102
学生姓名:
张璐
教师姓名:
陈亮亮
2014年12月13日
实验日期:
2014年12月4日实验室名称:
明远2202
一.实验名称:
动物识别系统
2.实验目的与要求:
利用产生式规则构建一个简单的专家系统
1、确定推理方法(正向还是反向),并根据问题设计实现一个简单的不通用推理机(匹配、冲突消解)
2、规则库要求至少包含15条规则
3、初始事实可以任意给定,输入初始事实后能够得到推理结果
4、设计人机界面,解释模块提供查询规则的功能
5、可以不考虑知识库管理模块
6、提交实验报告
7、报告中要有推理树
3.实验内容:
产生式系统是由一组规则组成的、能够协同作用的推理系统。
其模型是设计各种智能专家系统的基础.产生式系统主要由规则库、综合数据库和推理机三大部分组成。
本实验环境主要提供一个能够实现模拟产
生式专家系统的验证、设计和开发的可视化操作平台。
学生既能用本系统提供的范例进行演示或验证性实验,也能够用它来设计并调试自己的实验模型。
产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。
在产生式系统中,论域的知识分为两部分:
用事实表示静态知识;用产生式规则表示推理过程和行为。
自己建造产生式系统(包括规则库和事实库),然后进行推理,即可以自己输入任何的规则和事实,并基于这种规则和事实进行推理。
这为学生亲手建造产生式系统并进行推理提供了一种有效的实验环境。
4.算法描述:
1、定义变量,包括变量名和变量的值。
2、建立规则库,其方法是,(a)输入规则的条件:
每条规则至少有一个条件和一个结论,选择变量名,输入条件(符号);选择变量值,按确定按钮就完成了一条条件的输入。
重复操作,可输入多条条件;(b)输入规则的结论:
输入完规则的条件后,就可以输入规则的结论了,每条规则
必须也只能有一个结论。
选择变量名,输入条件(符号),选择变量值,按确定按钮就完成了一个结论的输入。
重复以上两步,完成整个规则库的建立。
3、建立事实库(总数据库):
建立过程同步骤2。
重复操作,可输入多条事实。
4、然后按“确定”按钮即可。
此外,利用实例演示,可以运行系统默认的产生式系统,并且可以进行正反向推理。
五.源程序:
主要函数代码如下:
intCAnimalDlg:
:
inference(void)
{
intn=2;
intti;
inti,j;
inttres;
for(i=0;i<15;i++)
{
j=0;
ti=rule[i].relation[j];
while(ti!
=-1)//-1作为结束
{
if(flag[ti]==0)
break;
else
{
j++;
ti=rule[i].relation[j];
}
}
if(ti==-1)//ti==-1代表规则满足
{
tres=rule[i].name;
flag[tres]=1;
j=0;
while(rule[i].relation[j]!
=-1)
{
j++;
}
if(feature[tres]=="这是企鹅哦"||feature[tres]=="这是信天翁哦"||feature[tres]=="这是鸵鸟哦"||feature[tres]=="这是斑马哦"||feature[tres]=="这是长颈鹿哦"||feature[tres]=="这是虎哦"||feature[tres]=="这是金钱豹哦")
{
n=1;
UpdateData(true);
m_print1=feature[tres];
UpdateData(false);
}
else
{
n=0;
}
}
}
if(n==0)
{
UpdateData(true);
m_print1="这是什么动物?
人家不知道啦";
UpdateData(false);
}
return0;
}
voidCAnimalDlg:
:
input(void)
{
intti=0;
for(inti=0;i<24;i++)
{
flag[i]=0;
}
}
voidCAnimalDlg:
:
OnBnClickedButton1()
{
inference();
}
voidCAnimalDlg:
:
OnBnClickedButton2()
{
for(inti=0;i<24;i++)
{
flag[i]=0;
}
((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK2))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK3))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK4))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK5))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK6))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK7))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK8))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK9))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK10))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK11))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK12))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK13))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK14))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK15))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK16))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK17))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK19))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK20))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK21))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK22))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK23))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK24))->SetCheck(BST_UNCHECKED);
((CButton*)GetDlgItem(IDC_CHECK25))->SetCheck(BST_UNCHECKED);
GetDlgItem(IDC_CHECK1)->EnableWindow(true);
GetDlgItem(IDC_CHECK2)->EnableWindow(true);
GetDlgItem(IDC_CHECK3)->EnableWindow(true);
GetDlgItem(IDC_CHECK4)->EnableWindow(true);
GetDlgItem(IDC_CHECK5)->EnableWindow(true);
GetDlgItem(IDC_CHECK6)->EnableWindow(true);
GetDlgItem(IDC_CHECK7)->EnableWindow(true);
GetDlgItem(IDC_CHECK8)->EnableWindow(true);
GetDlgItem(IDC_CHECK9)->EnableWindow(true);
GetDlgItem(IDC_CHECK10)->EnableWindow(true);
GetDlgItem(IDC_CHECK11)->EnableWindow(true);
GetDlgItem(IDC_CHECK12)->EnableWindow(true);
GetDlgItem(IDC_CHECK13)->EnableWindow(true);
GetDlgItem(IDC_CHECK14)->EnableWindow(true);
GetDlgItem(IDC_CHECK15)->EnableWindow(true);
GetDlgItem(IDC_CHECK16)->EnableWindow(true);
GetDlgItem(IDC_CHECK17)->EnableWindow(true);
GetDlgItem(IDC_CHECK19)->EnableWindow(true);
GetDlgItem(IDC_CHECK20)->EnableWindow(true);
GetDlgItem(IDC_CHECK21)->EnableWindow(true);
GetDlgItem(IDC_CHECK22)->EnableWindow(true);
GetDlgItem(IDC_CHECK23)->EnableWindow(true);
GetDlgItem(IDC_CHECK24)->EnableWindow(true);
GetDlgItem(IDC_CHECK25)->EnableWindow(true);
OnBnClickedButton1();
}
voidCAnimalDlg:
:
OnEnChangeEdit1()
{
}
voidCAnimalDlg:
:
OnBnClickedButton3()
{
UpdateData(true);
m_print2="若某动物产奶,则它是哺乳动物。
\r\n若某动物有毛,则它是哺乳动物。
\r\n若某动物有羽毛,则它是鸟。
\r\n若某动物会飞且生蛋,则它是鸟。
\r\n若某动物有爪且有犬齿且目盯前方,则它是食肉动物。
\r\n若某动物吃肉,则它是食肉动物。
\r\n若某动物是哺乳动物且有蹄,则它是有蹄动物。
\r\n若某动物是哺乳动物且反刍食物,则它是有蹄类动物。
\r\n若某动物是哺乳动物并且食肉动物且黄褐色且有黑色条纹,则它是老虎。
\r\n若某动物是哺乳动物且食肉动物且黄褐色且有暗斑点,则它是金钱豹。
\r\n若某动物是有蹄动物且长腿且长脖子且有暗斑点,则它是长颈鹿。
\r\n若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。
\r\n若某动物是鸟且不会飞且长腿且长脖子且有黑白两色,则它是驼鸟。
\r\n若某动物是鸟且不会飞且会游泳且有黑白两色,则它是企鹅。
\r\n若某动物是鸟且善飞,则它是信天翁。
";
UpdateData(false);
}
voidCAnimalDlg:
:
OnEnChangeEdit2()
{
}
structRule//存放规则的结构体
{
intrelation[100];
intname;
};structRule//存放规则的结构体
{
intrelation[100];
intname;
};
char*animal[]={"企鹅","海燕","鸵鸟","斑马","长颈鹿","虎","金钱豹"};
char*feature[]={"有毛","产奶","有羽毛","会飞","会下蛋","吃肉","有犬齿","有爪","眼睛盯前方","有蹄","反刍","黄褐色","有斑点",
"有黑色条纹","长脖","长腿","不会飞","会游泳","黑白两色","善飞","哺乳类","鸟类","肉食类","蹄类","这是企鹅哦","这是信天翁哦",
"这是鸵鸟哦","这是斑马哦","这是长颈鹿哦","这是虎哦","这是金钱豹哦"};
Rulerule[15]={
{{0,-1},20},//规则0
{{1,-1},20},//规则1
{{2,-1},21},//规则2
{{3,4,-1},21},//规则3
{{5,-1},22},//规则4
{{6,7,8,-1},22},//规则5
{{20,8,-1},23},//规则6
{{20,10,-1},23},//规则7
{{22,11,12,-1},30},//规则8
{{22,11,13,-1},29},//规则9
{{23,14,15,12,-1},28},//规则10
{{23,18,-1},27},//规则11
{{21,14,15,16,18,-1},26},//规则12
{{21,19,-1},25},//规则13
{{21,17,18,16,-1},24}};//规则14
intflag[23]={0};//标记各个特征是否选择
6.运行结果与分析:
推理树:
运行截图:
7.实验中遇到的问题、解决方法及体会:
1.对人工智能的产生式系统有了进一步的认识,特别是对正向推理和反向推理有更深的了解。
2.本次实验是单独完成的,通过查找资料,最终圆满的完成了实验。
这次实验充分培养了我独立解决问题的能力。
3.实验的关键是对正向推理算法的掌握和对数据库的设计,由于前期我们花了比较多的时间进行算法的理解和数据库的设计,大量查找资料,因此最终我们能更快更好的完成了实验。
4.通过这次实验,使我熟悉了mfc。
5.该系统还有许多不尽如人意的地方,因此有待进一步改进。
总的来说,这次实验我收益颇多,通过这个独立完成的小型项目,培养了我软件开发设计的能力,熟悉了软件开发的过程步骤,为以后我进行软件开发奠定了基础。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 产生 系统 实验 报告