《人工智能实验专家系统》由会员分享,可在线阅读,更多相关《人工智能实验专家系统(13页珍藏版)》请在金锄头文库上搜索。
1、基于产生式系统的专家系统一、目的掌握产生式系统的运行机制和基于规则推理的基本方法。通过一个实例了解小型专家系 统的结构、设计和实现过程,使学生初步掌握专家系统的设计和实现方法。二、要求设计并实现一个某领域的小型专家系统(动物识别、医疗诊断、故障诊断、几何问题等) 该系统能对输入的询问回答分类或预测的结果,并根据推理过程回答“为什么”或“怎样得 出该结论”的问题。三、本实验相关专家系统基本知识1.1动物识别专家系统介绍动物识别专家系统是人工智能中一个比较基础的规则演绎系统,是人工智能领域里的一 个大模块的专家系统的一个特定例子。是集知识表与推理为一体的,以规则为基础对用户提 供的事实进行向前、逆
2、向或双向的推理得出结论的一种产生式系统。如果通过良好的分析、 精确地设计和细致的规划会创设出高度灵活和快速有效的识别系统,再加上良好的界面供用 户添加新的事实和规则,反馈详细的错误或信息的话,那就是一个相当完整的识别系统了。1.2 专家系统实际应用目前专家系统已经成功地渗透到生活的各个领域,并且还产生了巨大的社会效益和经济 效益。例如,像车辆传感、药物、纺织服装等重工业和轻工业领域中都会应用到,特别是在 计算机领域里,现在已经是一门非常重要的学科类了。1.3 专家系统的开发专家系统设计与实现的一般过程选题与明确任务 +图 1【3】四、实验基本思路和步骤2.1 知识库2.2.1 知识库作用用产生
3、式系统监别动物,需要一种演绎机制,利用己知事实的集合做出新的结论,一种 方法是替动物园中的每个动物作一个产生式,使用者首先收集所有可利用的事实,然后在产 生式的表中进行扫描,寻找一个状态部分能与之匹配的产生式。一般要经过多少步并生成和 利用一些中间事实才能从基本事实推出结论,这样做所包含的产生式可以比较小,容易理解 容易使用和容易产生。动物识别专家系统中的知识库中的知识通常是用规则表示的。2.1.2 知识库建立知识库所要遵循的规则【1】规则 1:如果:动物有毛发则 :该动物是哺乳动物规则 2:如果:动物能产奶则 :该单位是哺乳动物规则 3:如果:该动物有羽毛则 :该动物是鸟规则 4:如果:动物
4、会飞,且会下蛋则 :该动物是鸟规则 5:如果:动物吃肉则 :该动物是肉食动物规则 6:如果:动物有犬齿,且有爪,且眼盯前方则 :该动物是食肉动物规则 7:如果:动物是哺乳动物,且有蹄则 :该动物是有蹄动物规则 8:如果:动物是哺乳动物,且是反刍动物则 :该动物是有蹄动物规则 9:如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点则:该动物是豹规则10:如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎规则11:如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿规则12:如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马规则13:如果
5、:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟规则14:如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅规则15:如果:动物是鸟,且善飞 则:该动物是信天翁动物分类专家系统由15条规则组成 可以识别七种动物.2.1.3知识库获取知识获取一般是指从某个活某些致使原中获取专家系统问题求解所需要的专门知识,并 以某种形式在计算机中存储、传输与转移。专家系统的知识获取一般是由知识工程师与专家 系统知识的获取机构共同完成的。知识获取的常用方法有以下几种【3】:1. 手工知识获取;2. 半自动获取;3. 自动知识获取;4. 人工神经网络知识获取;选用哪种知识获取方
6、法需要根据当前的系统,以及用户的需求来决定。但在有些大型系 统上还可能会用到不是仅仅一种方法的。2.2数据库2.2.1数据库作用数据库即为事实库【2】在计算机中流出一些存储区间,以存放反应系统当前状态的事 实,存放用户回答的事实、已知的事实和由推理而得的事实,即由已知事实推导出的假设成 立时,也作为事实。其综合数据库的内容是不断变化的。2.2.2数据库建立char *str=”,反刍动物/* 1 */, 蹄类动物/* 2 */, 哺乳动物/* 3 */,目视前方/* 4 */, 有爪子/* 5 */, 有犬齿/* 6 */,吃肉/* 7 */, 下蛋/* 8 */, 会飞/* 9 */,有羽毛
7、/* 10 */, 有蹄/* 11 */, 肉食动物/* 12 */,鸟类/* 13 */, 产奶/* 14 */, 有毛发/* 15 */,善飞/* 16 */, 黑白色/* 17 */, 会游泳/* 18 */,长腿/* 19 */, 长脖子/* 20 */, 有黑色条纹/* 21 */,有暗斑点/* 22 */, 黄褐色/* 23 */, 信天翁/* 24 */,企鹅/* 25 */, 鸵鸟/* 26 */, 斑马/* 27 */,长颈鹿/* 28 */, 老虎/* 29 */, 猎豹/* 30 */,int rulep6=22,23,12,3,0,0,21,23,12,3,0,0, 2
8、2,19,20,11,0,0,int rulec=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;30,29,28,27,26,25,24,3,3,13,13,12,12,11,11;21,11,0,0,0,0,17,19,20,13,-9,0,17,18,13,-9,0,0,0;五、推理机构3.1 推理机介绍3.1.1 推理机作用原理推理机是一组函数【4】,本例既有正向推理机又有反向推理机,都是用精确推理。推理 机是
9、实施问题求解的核心执行机构,它是对知识进行解释的程序,根据知识的语义,对按一 定策略找到的知识进行解释执行,并把结果记录到动态库的适当空间中去。3.1.2 推理网络下图为识别本文中所举的识别七种动物时所规则形成的推理网络食动物有蹄1 0鸟类、哺乳动物反刍动物r图23.2 正向推理3.2.1 正向推理基本思想用户首先提供一批事实,存放到数据库中,然后推理机进行工作。方法是:1. 推理机用这批事实与知识库中规则的前提进行匹配。2. 把匹配成功的规则的结论部分作为新的事实加到数据库中去(这时,数据库中的事实增 加了)。再用更新后的数据库中的所有事实,重复上述二步,如此反复进行,直到得以结 论(答案)
10、或不再有新的事实加到数据库为止。例如,用户输入一批事实:动物有暗斑点、长脖子、长腿、产奶、有蹄子(这批事实存放 在数据库中),要求系统判断这是一个什么动物?推理机利用这批事实来匹配规则。3.2.2正向推理示意图取出规则I的前提部分*这些前提都任 数据阵中山比+足取出规则1的鉛论部分这哇站论兄新事实吗?还能产牛新的事实吗?能结束将这些結论加入数据阡,并込卜规则I图33.2.3正向推理机所要具有功能要设计一个正向推理机,就是设计一组程序,使其至少具有以下的功能:1. 能用数据库中的事实去匹配规则的前提,若匹配不成功,能自动地进行吓一跳规则的 匹配。这里如何匹配最为合适,是设计专家系统者根据专业特点
11、和知识表示等情况, 需要很好考虑的问题,也就是在匹配时到底用什么策略等问题都需要考虑周全;2. 若某条规则匹配成功,系统能将此规则的结论部分自动加入数据库;3. 能判断何时应结束推理;4. 能将匹配成功的规则记录下来;3.3反向推理3.3.1反向推理基本思想由用户或系统首先提出一批假设,然后系统逐一验证这些假设的真假性,方法:1看假设是含在数据库中,若在,则假设成立,推理结束或进行下一个假设的验证,否 则进行下一步。2判断这些假设是否是证据节点,若是,系统提问用户,否则进行下一步。3找出结论部分包含此假设的那些规则,把这些规则的所有前提作为新的假设。4.重复、步。3.3.2反向推理示意图提岀假
12、设*此假设是仰是证拥节心?在此假设成立此假设还在数据库中吗?是提问用户找出结论部分包會此假设的那些规则有此亭实否2结束将此事实记入数据介结束1 1找出规则送-的1个訶提作为新的假设图43.3.3反向推理机所要具有功能1. 能根据用户要求或情况提出假设;2. 能验证此假设是否是在数据库中;3. 能把知识库中将结论部分包含此假设的规则都找出来;4. 能将找出来地规则的前提部分取出,并作为新的假设逐条验证;5. 能判断假设是否是证据接点,若是,能向用户提出相应的问题,并记录结果;6. 能将匹配成功的规则记录下来;7. 能判断何时应结束推理;六、实例系统实现4.1系统介绍此系统是实现了人工智能教程(的
13、二版)专家系统实例里的动物识别系统。此系统是 识别一一老虎、猎豹、斑马、长颈鹿、鸵鸟、企鹅、信天翁等七种动物。是严格遵循了知识 库中的规则,并运用C语言在Visual C+ 6.0环境下实验编译同过的。因为各种原因没能设 计实现出比较精美的界面,但还是体现出了很多专家系统所该具备的东西和功能。4.2 基本思路该系统的知识表示采用产生式表示法。产生式系统由规则库、综合数据库、控制系统三 个部分构成。其中规则库、综合数据库分别对应本系统中的rule类,str指针链表。Rule链表 存放用户输入的事实。用到一个 fact 事实类和 Fact 事实链表,并用 GetName(),GetNumber (
14、),GetAct(),GetSucc ()等函数来获取事实信息。推理控制策略采用精确匹配算法的正 向推理。4.3 程序主要代码/* */rule:rule()list *L;while(Pre)L=Pre-Next;delete Pre;Pre=L;delete Name;/* */int rule:Query()char c;/保存用户输入按键符号list *L;/临时前提链fact *F;/临时事实链L=Pre;/L 指向前提链F=Fact;if(L=NULL) printf(nError!);/如果推理时,本规则前提链为空,出错,后面 while循环也退出!while(L!=NULL) /前提链未处理完F=Fact; /F