




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一:动物识别专家系统设计一、实验目的与要求1、掌握专家系统的基本构成2、掌握用人工智能程序设计语言编制智能程序的方法二、实验内容 1、所选编程语言:C语言;2、拟订的规则:规则1:如果:动物有毛发则 :该动物是哺乳动物规则2: 如果:动物有奶 则 :该单位是哺乳动物规则3: 如果:该动物有羽毛 则 :该动物是鸟规则4: 如果:动物会飞,且会下蛋 则 :该动物是鸟规则5: 如果:动物吃肉 则 :该动物是肉食动物规则6: 如果:动物有犬齿,且有爪,且眼盯前方 则 :该动物是食肉动物规则7: 如果:动物是哺乳动物,且有蹄 则 :该动物是有蹄动物规则8: 如果:动物是哺乳动物,且是反刍动物 则 :该动物是有蹄动物规则9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则 :该动物是豹规则10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则 :该动物是虎规则11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则 :该动物是长颈鹿规则12: 如果:动物有黑条纹,且是有蹄类动物 则 :该动物是斑马规则13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则 :该动物是鸵鸟规则14: 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则 :该动物是企鹅规则15: 如果:动物是鸟,且善飞 则 :该动物是信天翁三、实验原理用户界面:采用问答形式;知识库(规则库):存放产生式规则,推理时用到的一般知识和领域知识,比如动物的特征,动物的分类标准,从哺乳动物、食肉动物来分,再具体地添加一些附加特征得到具体动物;建立知识库的同时也建立了事实库。事实库是一个动态链表,一个事实是链表的一个结点。知识库通过事实号与事实库发生联系。数据库:用来存放用户回答的问题,存放初始状态,中间推理结果,最终结果;推理机:采用正向推理,推理机是动物识别的逻辑控制器,它控制、协调系统的推理,并利用知识库中的规则对综合数据库中的数据进行逻辑操作。推理机担负两项基本任务:一是检查已有的事实和规则,并在可能的情况下增加新的事实;二是决定推理的方式和推理顺序。将推理机制同规则对象封装在一起,事实对象记录了当前的状态,规则对象首先拿出前提条件的断言(只有这些前提都有符合时才会做这条规则的结论),询问事实对象集,如事实对象集不知道,则询问用户,如所有前提条件都被证实为真则结论为真,否则系统不知道结论真假。 四、实验步骤(1)知识获取:黄褐色老虎有黑色条纹食肉动物有毛发有奶吃肉有爪有犬齿目盯前方金钱豹有黑色斑点长颈鹿有蹄动物有蹄长腿序华序华(2)知识表示:提示:动物分类专家系统由15条规则组成,可以识别七种动物,在15条规则中,共出现 30个概念(也称作事实),共30个事实,每个事实给一个编号,从编号从1到30,在规则对象中不存储事实概念,只有该事实的编号,同样规则的结论也是事实概念的编号,事实与规则的数据以常量表示,其结构如下:Char *str=chew_cud,hooves,mammal,forward_eyes,claws,pointed_teeth,eat_meat,lay_eggs,fly,feathers,ungulate,carnivore,bird,give_milk,has_hair,fly_well,black&white_color,can_swim,long_legs,long_neck,black_stripes,dark_spots,tawny_color,albatross,penguin,ostrich,zebra,giraffe,tiger,cheetah,0程序用编号序列的方式表达了产生式规则,如资料中规则15,如果动物是鸟,且善飞,则该动物是信天翁。相应的规则数组第七条是16,13,0,0,0,0,第十三个是“bird”(鸟),如果事实成立,询问使用者下一个事实,第十六个“fly_well”(善飞),如果也成立,则查找结论断言编号数组30,29,28,27,26,25,24,3,3,13,12,12,11,11,0中第七个“24”,这里24对应事实数组中的“albatross”(信天翁)。(3)推理机设计:正向推理原理:正向推理又称数据驱动推理,是按照由条件推出结论的方向进行的推理方式,它从一组事实出发,使用一定的推理规则,来证明目标事实或命题的成立。一般的推理过程是先向综合数据库提供一些初始已知事实,控制系统利用这些数据与知识库中的知识进行匹配,被触发的知识,将其结论作为新的事实添加到综合数据库中。重复上述过程,用更新过的综合数据库中的事实再与知识库中另一条知识匹配,将其结论更新至综合数据库中,直到没有可匹配的新知识和不再有新的事实加入到综合数据库中为止。然后测试是否得到解,有解则返回解,无解则提示运行失败。正向推理的步骤1) 将用户提供的初始已知事实送入综合数据库;2) 检查综合数据库中是否已经包含问题的解,若有则求解结束,否则执行下一步;3)将初始已知事实与知识库中的知识做匹配,若有,则转4),否则转6);4)将所有的匹配成功的知识构建成一个知识集;5)若知识集不为空,则按某种冲突消解策略选择一条规则进行推理,并将其推出的新事实更新至综合数据库,然后转2);若知识集为空,则转6)6)询问用户是否可提供新的事实,若有则将其添加至综合数据库,转3);否则表示问题求解失败,退出。 正向推理的流程图五、附程序7#include #include #include #include #define True 1#define False 0#define DontKnow -1/事实集(概念集)-char *str=chew_cud反刍动物,hooves蹄类动物,mammal哺乳动物,forward_eyes眼盯前方,claws有爪,pointed_teeth有犬齿,eat_meat吃肉,lay_eggs会下蛋,fly会飞,feathers有羽毛,ungulate有蹄,carnivore食肉动物,bird鸟,give_milk能产奶,has_hair有毛发,fly_well善飞,black&white_color黑白色,can_swim会游泳,long_legs长腿,long_neck长脖子,black_stripes黑条纹,dark_spots黑斑点,tawny_color黄褐色,albatross信天翁,penguin企鹅,ostrich驼鸟,zebra斑马,giraffe长颈鹿,tiger老虎,cheetah猎豹,0;/规则之前件(条件)集-int rulep6=22,23,12,3,0,0,21,23,12,3,0,0,22,19,20,11,0,0,21,11,0,0,0,0,17,19,20,13,-9,0,17,18,13,-9,0,0,16,13,0,0,0,0,15,0,0,0,0,0,14,0,0,0,0,0,10,0,0,0,0,0,8,7,0,0,0,0,7,0,0,0,0,0,4,5,6,0,0,0,2,3,0,0,0,0,1,3,0,0,0,0;/规则之后(结论)集,注意与上面对应-int rulec=30,29,28,27,26,25,24,3,3,13,13,12,12,11,11,0;class factprivate: int Number; char Name21; int Active; int Succ; public: fact *Next; fact(int Num,char *L) strcpy(Name,L); Number=Num; Active=False; /-1 是已经推理,不符合。1 是已经推理,符合。 Succ=DontKnow; /0 是无,-1 是不知道,1 是有。 Next=NULL; char *GetName() char *L; L=new char21; strcpy(L,Name); return L; int GetNumber() return Number; int GetAct() return Active; int GetSucc() return Succ; void PutAct(const int Act0,int Suc0) Active=Act0; Succ=Suc0; ;/-fact *Fact;class listprivate: int Number; public: list *Next; list(int Num) Number=Num; Next=NULL; int GetNumber() return Number; ;/-class rule char *Name; list *Pre; int Conc; public: rule *Next; rule(char *N,int P,int C); rule(); int Query(); void GetName() coutNext; delete Pre; Pre=L; delete Name;/-rule:rule(char *N,int P,int C) int i; list *L; Pre=NULL; Next=NULL; Name=new charstrlen(N)+1; strcpy(Name,N); i=0; while(Pi!=0) L=new list(Pi+); L-Next=Pre; Pre=L; Conc=C;/-int rule:Query() char c; int Tag=0; list *L; fact *F; F=Fact; L=Pre; if(L=NULL) coutGetNumber()=F-GetNumber() break; F=F-Next;/查找与规则前提号相同的事实 if(L-GetNumber()0) if(F-GetSucc()=True) L=L-Next;continue; if(F-GetSucc()=False) return false; /如果事实的断言为真则判断下一个前提,为假,则表示该规则不适合 else if(F-GetSucc()=True) return False; if(F-GetSucc()=False) L=L-Next; continue; coutGetName()(Y/N)GetNumber()0) F-PutAct(1,True);/设置事实的断言和激活标志 if(L-GetNumber()PutAct(1,True); Tag=-1; return False; else if(L-GetNumber()PutAct(-1,False); else F-PutAct(-1,False); Tag=-1; /已经推理,不符合。 return False; L=L-Next; F=Fact; for(;) if(Conc=F-GetNumber() break;/查找结论断言对应的事实 F=F-Next; if(ConcPutAct(1,True); return False; if(Tag!=-1) F=Fact; for(;) if(Conc=F-GetNumber() break; F=F-Next; if(ConcPutAct(1,True); return False; coutnThis aniamal is GetName()Next=Fact; Fact=F; i+;F=Fact;Fact=NULL;while(F) /把倒序排列正过来。倒转上面前插入的事实链表 T=F; F=F-Next; T-Next=Fact; Fact=T;i=0;ch0=R;ch1=U;ch2=L;ch3=E;ch4=_;ch5=a;ch6=0;Rule=NULL;/规则链表初始为空for(i=0;iNext=Rule; Rule=R; ch5+;R=Rule;for(;)/开始询问用户 i=R-Query(); if(i=1)|(i=-1) break;/如果返回真,则推理成功,并可以给出最后专家答案! R=R-Next; if(!R) break;/所有规则都扫描完,R为空,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年工业互联网平台数据清洗算法在智能客服中的应用对比报告001
- 2025至2030年中国海南旅游业市场供需预测及投资战略研究咨询报告
- 2025版智慧社区物业管理及设施更新及安保服务合同
- 2025年度特殊技能人才法人技术顾问聘用合同
- 2025版专业级挖掘机械设备采购与售后服务合同
- 2025版企业师徒结对技术研发与市场合作合同
- 2025版数据中心空调系统维保及能效提升合同范本
- 2025年新型稻谷加工技术合作合同
- 2025年度项目可行性研究报告保密协议书
- 2025年度高端装修贷款合同文本
- 风电发电机组电控系统知识-安全链部分课件
- PMBOK指南第6版中文版
- 第五章-针织服装设计与样板制作经典版课件
- 肿瘤的介入治疗课件最新版
- 医疗质量管理工具课件
- 急性上呼吸道感染病人的护理
- 小学教师量化考核表
- 房建监理平行检查记录表格模板(参考版)
- 计算机操作系统(第四版)-汤小丹-课后习题答案
- 12生物分子网络ppt课件
- 手术室护士长工作手册-精品完整版
评论
0/150
提交评论