资源描述:
《人工智能及专家系统 教学课件 作者 敖志刚 第13章 基于Prolog程序实现的专家系统开发实例.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、敖志刚编制第13章基于Prolog程序实现的专家系统开发实例第13章基于Prolog程序实现的专家系统开发实例13.1基于规则的动物识别专家系统13.1.1动物识别专家系统的基本组成13.1.2系统的PDCProlog源程序及运行13.2基于逻辑的液压故障诊断专家系统13.2.1液压故障诊断专家系统的构建13.2.2液压故障诊断系统的编程与运行状态第13章基于Prolog程序实现的专家系统开发实例13.1.1动物识别专家系统的基本组成动物识别ES从结构上可以分成六个基本部分:知识库、数据库、知识表示、推理机、解释部分、知识获取
2、部分。1.动物识别专家系统的知识库10条规则用TurboProlog语言表示如下:it_is(“哺乳动物”):-positive(“产奶”).it_is(“哺乳动物”):-positive(“有毛发”).it_is(“食肉动物”):-positive(“吃肉”).it_is(“食肉动物”):-positive(“有犬齿”),positive(“有爪”),positive(“眼前视”).it_is(“有蹄动物”):-positive(“有蹄子”),it_is(“哺乳动物”).it_is(“有蹄动物”):-positive(“反刍
3、食物”),it_is(“哺乳动物”).animal_is(“老虎”):-it_is(“哺乳动物”),it_is(“食肉动物”),positive(“黄褐色”),positive(“有黑条纹”).animal_is(“金钱豹”):-it_is(“哺乳动物”),it_is(“食肉动物”),positive(“黄褐色”),positive(“有暗斑点”).animal_is(“斑马”):-it_is(“有蹄动物”),positive(“有黑条纹”).animal_is(“长颈鹿”):-it_is(“有蹄动物”),positive(“
4、有长脖子”),positive(“有长腿”),positive(“有暗斑点”).2.数据库positive(X):-ask(X).ask(X):-write(X,"吗?"),readln(Reply),remember(X,Reply).3.知识表示rule(1,“老虎”,[1,2,3,4]).rule(2,“金钱豹”,[1,2,3,5]).rule(3,“斑马”,[4,6]).rule(4,“长颈鹿”,[5,6,7,8]).condition(1,“哺乳动物”).condition(2,“食肉动物”).condition(3
5、,“黄褐色”).condition(4,“有黑条纹”).condition(5,“有暗斑点”).condition(6“有蹄动物”).condition(7,“有长脖子”).condition(8,“长腿”).4.推理机推理机是一组函数,本例既有正向推理机又有反向推理机,都是用精确推理。⑴正向推理用户首先提供一批事实,存放到数据库中,然后推理机进行工作。方法是:①推理机用这批事实与知识库中规则的前提进行匹配。②把匹配成功的规则的结论部分作为新的事实加到数据库中去(这时,数据库中的事实增加了)。再用更新后的数据库中的所有事实,重
6、复上述①、②二步,如此反复进行,直到得出结论(答案)或不再有新的事实加到数据库为止。⑴正向推理图13-1正向推理机示意图开始令I=1取出规则I的前提部分将这些结论加入数据库,并记下规则I这些前提都在数据库中吗?取出规则I的结论部分这些结论是新事实吗?令I=I+1还能产生新的事实吗?结束是是能否否否⑵反向推理由用户或系统首先提出一批假设,然后系统逐一验证这些假设的真假性,方法是:①看假设是否在数据库中,若在,则假设成立,推理结束或进行下一个假设的验证,否则,进行下一步。②判断这些假设是否是证据节点,若是,系统提问用户,否则进行下
7、一步。③找出结论部分包含此假设的那些规则,把这些规则的所有前提作为新的假设。④重复①、②、③步。图13-2反向推理机示意图开始提出假设此假设还在数据库中吗?有此事实否?结束在是否有无此假设是否是证据节点?找出结论部分包含此假设的那些规则找出规则之一的1个前提作为新的假设此假设成立结束提问用户将此事实记入数据库否或或⑵反向推理设计一个反向推理机所具有的功能①能根据用户要求或情况提出假设。②能验证此假设是否是在数据库中。③能把知识库中将结论部分包含此假设的规则都找出来。④能将找出来的规则的前提部分取出,并作为新的假设逐条验证。⑤能
8、判断假设是否是证据节点,若是,能向用户提出相应的问题,并记录结果。⑥能将匹配成功的规则记录下来。⑦能判断何时应结束推理。⑶反向推理机的实现positive(X):-xpositive(X),!.positive(X):-not(negative(X)),!,ask(X).ne