1、产生式系统实验报告学生实验报告实验课名称: 人工智能实验项目名称: 动物识别系统专业名称: 计算机科学与技术班级: 2012240201学号: 201224020102学生姓名: 张璐教师姓名: 陈亮亮 2014 年 12 月 13 日实验日期: 2014 年 12 月 4 日 实验室名称: 明远2202 一实验名称:动物识别系统2实验目的与要求:利用产生式规则构建一个简单的专家系统1、确定推理方法(正向还是反向),并根据问题设计实现一个简单的不通用推理机(匹配、冲突消解)2、规则库要求至少包含15条规则3、初始事实可以任意给定,输入初始事实后能够得到推理结果4、设计人机界面,解释模块提供查询
2、规则的功能5、可以不考虑知识库管理模块6、提交实验报告7、报告中要有推理树3实验内容:产生式系统是由一组规则组成的、能够协同作用的推理系统。其模型是设计各种智能专家系统的基础 .产生式系统主要由规则库、综合数据库和推理机三大部分组成。本实验环境主要提供一个能够实现模拟产生式专家系统的验证、设计和开发的可视化操作平台。学生既能用本系统提供的范例进行演示或验证性实验,也能够用它来设计并调试自己的实验模型 。产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。在产生式系统中,论域的知识分为两部分:用事实表示静态知识;用产生式规则表示推理过程和行为
3、。自己建造产生式系统(包括规则库和事实库),然后进行推理,即可以自己输入任何的规则和事实,并基于这种规则和事实进行推理。这为学生亲手建造产生式系统并进行推理提供了一种有效的实验环境。4算法描述:1、定义变量,包括变量名和变量的值。2、建立规则库,其方法是,(a) 输入规则的条件:每条规则至少有一个条件和一个结论,选择变量名,输入条件(符号);选择变量值,按确定按钮就完成了一条条件的输入。重复操作,可输入多条条件;(b) 输入规则的结论:输入完规则的条件后,就可以输入规则的结论了,每条规则必须也只能有一个结论。选择变量名,输入条件(符号),选择变量值,按确定按钮就完成了一个结论的输入。重复以上两
4、步,完成整个规则库的建立。3、建立事实库(总数据库):建立过程同步骤2。重复操作,可输入多条事实。4、然后按“确定”按钮即可。此外,利用实例演示,可以运行系统默认的产生式系统,并且可以进行正反向推理。五源程序:主要函数代码如下:int CAnimalDlg:inference(void) int n=2; int ti; int i,j; int tres; for(i=0;i15;i+) j=0;ti=rulei.relationj; while(ti!=-1) /-1作为结束 if(flagti=0) break; else j+; ti=rulei.relationj; if(ti=-1
5、)/ti=-1代表规则满足 tres=rulei.name; flagtres=1; j=0; while(rulei.relationj!=-1) j+; if(featuretres=这是企鹅哦|featuretres=这是信天翁哦|featuretres=这是鸵鸟哦|featuretres=这是斑马哦|featuretres=这是长颈鹿哦|featuretres=这是虎哦|featuretres=这是金钱豹哦) n=1; UpdateData(true); m_print1=featuretres; UpdateData(false); else n=0; if(n=0) UpdateD
6、ata(true); m_print1=这是什么动物?人家不知道啦; UpdateData(false); return 0;void CAnimalDlg:input(void) int ti=0;for(int i=0;i24;i+) flagi=0; void CAnimalDlg:OnBnClickedButton1() inference();void CAnimalDlg:OnBnClickedButton2() for(int i=0;iSetCheck(BST_UNCHECKED); (CButton*)GetDlgItem(IDC_CHECK2)-SetCheck(BST_U
7、NCHECKED); (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);
8、 (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); (CButt
9、on*)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*)G
10、etDlgItem(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*)GetDlg
11、Item(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)-Ena
12、bleWindow(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)
13、-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_
14、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();void CAnimalDlg:OnEnChangeEdit
15、1()void CAnimalDlg:OnBnClickedButton3() UpdateData(true); m_print2=若某动物产奶,则它是哺乳动物。rn若某动物有毛,则它是哺乳动物。rn若某动物有羽毛,则它是鸟。rn若某动物会飞且生蛋,则它是鸟。rn若某动物有爪且有犬齿且目盯前方,则它是食肉动物。rn若某动物吃肉,则它是食肉动物。rn若某动物是哺乳动物且有蹄,则它是有蹄动物。rn若某动物是哺乳动物且反刍食物,则它是有蹄类动物。rn若某动物是哺乳动物并且食肉动物且黄褐色且有黑色条纹,则它是老虎。rn若某动物是哺乳动物且食肉动物且黄褐色且有暗斑点,则它是金钱豹。rn若某动物是有蹄动
16、物且长腿且长脖子且有暗斑点,则它是长颈鹿。rn若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。rn若某动物是鸟且不会飞且长腿且长脖子且有黑白两色,则它是驼鸟。rn若某动物是鸟且不会飞且会游泳且有黑白两色,则它是企鹅。rn若某动物是鸟且善飞,则它是信天翁。; UpdateData(false);void CAnimalDlg:OnEnChangeEdit2()struct Rule/存放规则的结构体 int relation100; int name;struct Rule/存放规则的结构体 int relation100; int name;char *animal=企鹅,海燕,鸵鸟,斑马,
17、长颈鹿,虎,金钱豹;char *feature=有毛,产奶,有羽毛,会飞,会下蛋,吃肉,有犬齿,有爪,眼睛盯前方,有蹄,反刍,黄褐色,有斑点, 有黑色条纹,长脖,长腿,不会飞,会游泳,黑白两色,善飞,哺乳类,鸟类,肉食类,蹄类,这是企鹅哦,这是信天翁哦, 这是鸵鸟哦,这是斑马哦,这是长颈鹿哦,这是虎哦,这是金钱豹哦;Rule rule15= 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
18、,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;/规则14int flag23=0;/标记各个特征是否选择6运行结果与分析:推理树:运行截图:7实验中遇到的问题、解决方法及体会:1.对人工智能的产生式系统有了进一步的认识,特别是对正向推理和反向推理有更深的了解。2.本次实验是单独完成的,通过查找资料,最终圆满的完成了实验。这次实验充分培养了我独立解决问题的能力。3.实验的关键是对正向推理算法的掌握和对数据库的设计,由于前期我们花了比较多的时间进行算法的理解和数据库的设计,大量查找资料,因此最终我们能更快更好的完成了实验。4.通过这次实验,使我熟悉了mfc。5.该系统还有许多不尽如人意的地方,因此有待进一步改进。总的来说,这次实验我收益颇多,通过这个独立完成的小型项目,培养了我软件开发设计的能力,熟悉了软件开发的过程步骤,为以后我进行软件开发奠定了基础。
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2