专家系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图1 工作过程
三、程序框图
2
图2 规则集 规则 1: 如果:动物有毛发 则 :该动物是哺乳动物 规则 2: 如果:动物有奶 则 :该动物是哺乳动物 规则 3: 如果:该动物有羽毛 则 :该动物是鸟 规则 4: 如果:动物会飞,且会下蛋 则 :该动物是鸟 规则 5: 如果:动物吃肉 则 :该动物是肉食动物 规则 6: 如果:动物有犬齿,且有爪,且眼盯前方 则 :该动物是食肉动物 规则 7: 如果:动物是哺乳动物,且有蹄 则 :该动物是有蹄动物 规则 8: 如果:动物是哺乳动物,且是反刍动物 则 :该动物是有蹄动物
反向推理:
4
正向推理:
5
四、源程序附录 正向推理:#include<stdio.h> #include<stdlib.h>
int main(int argc,char *argv){ int x1; int x2; int x3; int x4; int a1,a2;//哺乳动物判断 int b1,b2,b3;//鸟判断 int c1,c2,c3,c4;//食肉动物判断 int d1,d2;//有蹄类动物判断 int n1,n2,n3,n4,n5,n6,n7,n8; printf("-------------人工智能-----------\n"); printf("----------动物专家识别系统------\n"); printf("现在开始识别:\n"); //哺乳动物判断 printf("Q1: 有 毛 发 吗
小型专家系统的设计与实现
一、实验目的 1. 熟悉产生式表示法; 2. 掌握产生式系统工作原理和基于规则的推理; 3. 能够利用编程技术建立基于产生式表示法的小型专家系统; 二、实验内容及原理 实验内容:运用所学内容,根据课本130页~131页的例6.1和例6.2的规则库 和事实, 基 于产生式表示法,编程实现小型专家系统--动物识别系统。任意选 择一种熟悉的 编程语言, 实现动物识别系统。 能够完成以下功能: 1.正向推理: 根据输入的初始事实,正确识别出相应的动物; 2.逆向推理:根据已知动物, 给出该动物的特征。 实验原理:知识库中的知识源于领域专家,它是问题求解所需要的领域知识 的集合, 包括基本事实、 规则和其它有关信息。 其中利用的产生式规则为IF THEN 产生式的一般形式为 <前件> <后件> 其中前件就是前提,后件是结论或动作,前件和后件可以是由逻辑运算符 AND,OR,NOT组成的表达式。 步骤一:知识获取与知识表示选择/设计 1. 知识的获取 获取专业领域所涉及到的知识内容。上图是从规则集所形成的(部分)推理 网络。 2、知识的表达 由步骤1获取的知识集合中的内容,包括定性信息和定量信息,对于定性信 息必须制定相应的规则来表达知识的含义。也是知识库建立的重点。 3、建立知识库 步骤二:简单推理机设计 推理机是实施问题求解的核心执行机构,它是对知识进行解释的程序,根据 知识的语义,对按一定策略找到的知识进行解释执行,并把结果记录到动态库的 适当空间中去。 推理策略包括: 1、正向(数据驱动) 2、反向(目标驱动) 3、双向 本实验用正向推理策略来完成,实现推理机的程序与知识库的具体内容无 关,对知识库的修改不需要改动推理机。 本步骤具体包括: 1、充分理解知识库现有知识,提出待解决问题 2、建立规则库
9

wk.baidu.com






else if(x1==1&&x2==0&&x3==0&&x4==1&&n1==0&&n2==0&&n3==1&&n4==0&&n5==0&&n6= =0&&n7==1&&n8==0)printf("----------该动物是斑马----------");//r13 else if(x1==0&&x2==1&&x3==0&&x4==0&&n1==0&&n2==0&&n3==0&&n4==1&&n5==1&&n6= =0&&n7==1&&n8==0)printf("----------该动物是鸵鸟----------");//r14 else if(x1==0&&x2==1&&x3==0&&x4==0&&n1==0&&n2==0&&n3==0&&n4==0&&n5==0&&n6= =0&&n7==1&&n8==1)printf("----------该动物是企鹅----------");//r15 else if(x1==0&&x2==1&&x3==0&&x4==0&&n1==0&&n2==0&&n3==0&&n4==0&&n5==0&&n6= =1&&n7==0&&n8==0)printf("----------该动物是信天翁----------"); else printf("没见过"); printf("\n\n\n\n\n"); getchar(); getchar(); printf("判断完毕,按任意键退出\n"); return(EXIT_SUCCESS); }
1
3、从规则库中获取可用规则集 4、确定搜索控制策略(例如:估价函数策略) 5、通过搜索控制策略,从规则集中选出最优规则 6、执行最优规则,更新知识库 7、反复多次以上步骤 8、获得解决方案或无解 步骤三:系统调试与测试 先熟悉语言环境;接着运行示例程序;然后编辑、调试、测试自己的系统程 序。 程序的流程主要是: 1、实例化各个类 2、初始化事实集 3、初始化规则集 4、使用规则对事实进行推导 规则类:规则名只是用来表示规则的一个名称,前提链由前提类生成的单链 表, 结论则是存放结论断言编号, 表示由该规则的到的结论在事实数组中的编号。 事件类:事实号和规则数据和结论断言数据的数字相对应。激活标志表示这 个时候有没有被处理过。断言保存推理后的结论,在重复查询这个事实条件时不 用反复询问用户。
6
//鸟判断 printf("Q3:有羽毛吗\n1:YES\n0:NO\n"); scanf("%d",&b1); printf("Q4:会飞吗\n1:YES\n0:NO\n"); scanf("%d",&b2); printf("Q5:会下蛋吗\n1:YES\n0:NO\n"); scanf("%d",&b3); printf("\n\n\n 初步结果:\n"); if(b1==1){ printf("----------是鸟----------\n\n");x2=1; } else if(b2==1&&b3==1){ printf("----------是鸟----------\n\n");x2=1; } else{ printf("----------不是鸟----------\n\n");x2=0; } printf("\n\n"); //食肉动物判断 printf("Q6:吃肉吗\n1:YES\n0:NO\n"); scanf("%d",&c1); printf("Q7:有犬齿吗\n1:YES\n0:NO\n"); scanf("%d",&c2); printf("Q8:有爪吗\n1:YES\n0:NO\n"); scanf("%d",&c3); printf("Q9:眼盯前方吗\n1:YES\n0:NO\n"); scanf("%d",&c4); printf("\n\n\n 初步结果:\n");
7
if(c1==1){ printf("----------是食肉动物----------\n\n"); x3=1; }else if(c2==1&&c3==1&&c3==1){ printf("----------是食肉动物----------\n\n"); x3=1; } else{ printf("----------不是食肉动物----------\n\n"); x3=0; } printf("\n\n"); //有蹄类动物判断 printf("Q10:有蹄吗\n1:YES\n0:NO\n"); scanf("%d",&d1); printf("Q11:反刍吗\n1:YES\n0:NO\n"); scanf("%d",&d2); printf("\n\n\n 初步结果:\n"); if(d1==1&&x1==1){ printf("----------是有蹄类动物----------\n\n");x4=1; } else if(d2==1&&x1==1){ printf("----------是有蹄类动物----------\n\n"); x4=1; } else{ printf("----------不是有蹄类动物----------\n\n"); x4=0; }
3
规则 9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则 :该动物是豹 规则 10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则 : 该动物是虎 规则 11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则 :该动物是长颈鹿 规则 12: 如果:动物有黑条纹,且是有蹄类动物 则 :该动物是斑马 规则 13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则 :该动 物是鸵鸟 规则 14: 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则 :该动物是企鹅 规则 15: 如果:动物是鸟,且善飞 则 :该动物是信天翁
8
printf("\n\n\n\n"); printf("下面进行详细判断:\n\n"); printf("Q12:是黄褐色吗\n1:YES\n0:NO\n"); scanf("%d",&n1); printf("Q13:身上有暗斑点\n1:YES\n0:NO\n"); scanf("%d",&n2); printf("Q14:有黑色条纹吗\n1:YES\n0:NO\n"); scanf("%d",&n3); printf("Q15:有长脖子吗\n1:YES\n0:NO\n"); scanf("%d",&n4); printf("Q16:有长腿吗\n1:YES\n0:NO\n"); scanf("%d",&n5); printf("Q17:善飞吗\n1:YES\n0:NO\n"); scanf("%d",&n6); printf("Q18:有黑白二色吗\n1:YES\n0:NO\n"); scanf("%d",&n7); printf("Q19(最后一个问题):会游泳吗\n1:YES\n0:NO\n"); scanf("%d",&n8); printf("\n\n"); printf("最终结果:\n");//r9 if(x1==1&&x2==0&&x3==1&&x4==0&&n1==1&&n2==1&&n3==0&&n4==0&&n5==0& &n6==0&&n7==0&&n8==0)printf("-------------------");//r10 else if(x1==1&&x2==0&&x3==1&&x4==0&&n1==0&&n2==0&&n3==1&&n4==0&&n5==0&&n6= =0&&n7==0&&n8==0)printf("----------该动物是虎----------");//r11 else if(x1==1&&x2==0&&x3==0&&x4==1&&n1==1&&n2==1&&n3==0&&n4==1&&n5==1&&n6= =0&&n7==0&&n8==0)printf("----------该动物是长颈鹿----------");//r12
\n1:YES\n0:NO\n");scanf("%d",&a1);//printf("%d",a1); printf("Q2: 有 奶 吗
\n1:YES\n0:NO\n");scanf("%d",&a2);//printf("%d",a2); printf("\n\n\n 初步结果:\n"); if(a1==1&&a2==1){ printf("----------是哺乳动物----------\n\n");x1=1; } else{ printf("----------不是哺乳动物----------\n\n");x1=0; } printf("\n\n");
相关文档
最新文档