产生式动物识别系统

产生式动物识别系统
产生式动物识别系统

实验7:产生式动物识别系统

一、实验目的

理解和掌握产生式系统的推理方法,能够用选定的编程语言实现推理机。

二、编程环境

本文主要编译环境是Windows 10 Visual Studio 2015

三、问题描述

设计一个用于动物识别的产生式系统,该系统通过规则库识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁、鸵鸟7种动物。

四、解决方案

1.规则库:

用于描述相应领域内知识的产生式集合称为规则库。

本规则库包括以下规则

R1:if 动物有毛发 then 动物是哺乳动物

R2:if 动物有奶 then 动物是哺乳动物

R3:if 动物有羽毛 then 动物是鸟

R4:if 动物会飞 and 会生蛋then 动物是鸟

R5:if 动物吃肉then 动物是食肉动物

R6:if 动物有犀利牙齿and 有爪and 眼向前方 then 动物是食肉动物

R7:if 动物是哺乳动物and有蹄then动物是有蹄类动物

R8:if 动物是哺乳动物and反刍then动物是有蹄类动物

R9:if 动物是哺乳动物and是食肉动物and有黄褐色 and 有暗斑点then 动物是豹

R10:if 动物是哺乳动物and是食肉动物and有黄褐色and 有黑色条纹then 动物是虎

R11:if动物是有蹄类动物 and 有长脖子and有长腿and有暗斑点then 动物是长颈鹿

R12:if 动物是有蹄类动物and有黑色条纹then 动物是斑马

R13:if 动物是鸟and不会飞and有长脖子and有长腿and有黑白二色then 动物是鸵鸟

R14:if 动物是鸟and不会飞and会游泳and有黑白二色 then 动物是企鹅

R15:if 动物是鸟and善飞then 动物是信天翁

2.综合数据库

char *ans0 = "抱歉,我也不知道这是什么动物";

char *ans1 = "这个动物是金钱豹";

char *ans2 = "这个动物是老虎";

char *ans3 = "这个动物是长颈鹿";

char *ans4 = "这个动物有斑马";

char *ans5 = "这个动物是企鹅";

char *ans6 = "这个动物是鸵鸟";

char *ans7 = "这个动物是信天翁";

3.推理机

(1) 初始化综合数据库,即把欲解决问题的已知事实送入综合数据库中;

(2) 检查规则库中是否有未使用过的规则,若无转(7);

(3) 检查规则库的未使用规则中是否有其前提可与综合数据库中已知事实相匹配的规则,若有,形成当前可用规则集;否则转(6);

(4) 按照冲突消解策略,从当前可用规则集中选择一个规则执行,并对该规则作上标记。把执行该规则后所得到的结论作为新的事实放入综合数据库;如果该规则的结论是一些操作,则执行这些操作;

(5) 检查综合数据库中是否包含了该问题的解,若已包含,说明解已求出,问题求解过程结束;否则,转(2);

(6) 当规则库中还有未使用规则,但均不能与综合数据库中的已有事实相匹配时,要求用户进一步提供关于该问题的已知事实,若能提供,则转(2);否则,执行下一步;

(7) 若知识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。输出“抱歉,没有相符合的动物”,程序退出。

4.流程图

五、源代码

#include

int main()

{

char a1;

char flag0 ;//是否识别出动物的标志

char *str0 = "本系统可识别七种动物,请用Y和N表示是和否\n";

char *str1 = "这个动物有毛发吗?";

char *str2 = "这个动物有奶吗?";

char *str3 = "这个动物有羽毛吗?";

char *str4 = "这个动物会下蛋吗?";

char *str5 = "这个动物吃肉吗?";

char *str6 = "这个动物有犬齿有爪吗?";

char *str7 = "这个动物有蹄吗?";

char *str8 = "这个动物是嚼反刍动物吗?";

char *str9 = "这个动物身上是黄褐色而且有暗斑点吗?";

char *str10 = "这个动物身上是黄褐色而且有黑色条纹?";

char *str11 = "这个动物长腿长脖子且身上有暗斑点吗?";

char *str12 = "这个动物身上有黑色条纹吗?";

char *str13 = "这个动物长腿长脖子?";

char *str14 = "这个动物会游泳并有黑白两色\t";

char *str15 = "这个动物擅飞";

char *str16 = "这个动物会不会飞";

char *ans0 = "抱歉,我也不知道这是什么动物";

char *ans1 = "这个动物是金钱豹";

char *ans2 = "这个动物是老虎";

char *ans3 = "这个动物是长颈鹿";

char *ans4 = "这个动物有斑马";

char *ans5 = "这个动物是企鹅";

char *ans6 = "这个动物是鸵鸟";

char *ans7 = "这个动物是信天翁";

char *a[4] = { str1,str2,str3,str4 }; //判断哺乳动物和鸟类

char *bl[4] = { str5,str6,str7,str8 }; //bL判断是食草动物还是食肉动物

char *b2[] = { str16 }; //判断鸟类会不会飞

/****************判断具体是那种动物*************************/

char *cl[] = { str9,str10 }; //CL判断金钱豹和老虎char *c2[] = { str11,str12 }; //判断长颈鹿和斑马

char *c3[] = { str13,str14 }; //判断企鹅和鸵鸟

char *c4[] = { str15 }; //判断是不是信天翁puts(str0);

for (int k = 0; k < 4; k++) {

puts(a[k]);

scanf_s("%c", &a1, 1);

getchar();

if (a1 == 'Y')//区分哺乳动物和鸟类

{

if (k == 1) {

printf_s("初步判定是哺乳动物\n"); flag0 = 0; break;

}

else if (k > 2){

printf_s("初步判定是鸟类\n"); flag0 = 1; break;

}

}

}

if (flag0 == 0) { //判定是哺乳动物

for (int k = 0; k < 4; k++) {

puts(bl[k]);

scanf_s("%c", &a1, 1);

getchar();

if (a1 == 'Y')//区分食肉动物和食草类动物

{

if (k == 1) {

printf_s("初步判定是食肉动物\n");

for (int k = 0; k < 2; k++) {

puts(cl[k]);

scanf_s("%c", &a1, 1);

getchar();

if (a1 == 'Y') //区分金钱豹和老虎

{

printf_s("这是是金钱豹"); break;

}

else if (a1 == 'N'&&k == 1) {

printf_s("这是老虎"); break;

}

}

break;

}

else if (k > 2){

printf_s("初步判定是食草类动物\n");

for (int k = 0; k < 2; k++) {

puts(c2[k]);

scanf_s("%c", &a1, 1);

getchar();

if (a1 == 'Y') //确定是长颈鹿还是斑马

{

printf_s("这是长颈鹿"); break;

}

else if (a1 == 'N'&&k == 1) {

printf_s("这是斑马"); break;

}

}

break;

}

}

}

}

else if (flag0 == 1) {//判定是鸟类

puts(b2[0]);

scanf_s("%c", &a1, 1);

getchar();

if (a1 == 'Y')//判断鸟类会不会飞

{

puts(c4[0]);

scanf_s("%c", &a1, 1);

getchar();

if (a1 == 'Y') { //判断是不是信天翁

printf_s("这是信天翁");

}

else if(a1 == 'N') {

puts(ans0);

}

}

else if (a1 == 'N') {

for (int k = 0; k < 2; k++) {

puts(c3[k]);

scanf_s("%c", &a1, 1);

getchar();

if (a1 == 'Y') //确定是企鹅和鸵鸟

{

printf_s("这是鸵鸟"); break;

}

else if (a1 == 'N'&&k == 1) {

printf_s("这是企鹅"); break;

}

}

}

}

getchar();

return 0;

}

六、实验结果相关截图

截图一

截图二

七、心得体会

通过这次实验,我学会了如何用产生式系统的推理方法,并用c语言实现了动物识别的产生式系统,该系统通过规则库可以添加规则,通过数据库来更新数据,通过推理机给出最终的结果,通过编程体会到学习的乐趣,对逻辑的培养也有很大的帮助,希望今后更加努力,写出可视化的,更高效的程序。

人工智能课程设计报告--动物识别系统

计算机科学与技术学院 《人工智能》课程设计报告设计题目:动物识别系统 设计人员:学号: 学号: 学号: 学号: 学号: 学号: 指导教师: 2015年7月

目录 目录 (1) 摘要 (2) Abstract (2) 一、专家系统基本知识 (3) 1.1专家系统实际应用 (3) 1.2专家系统的开发 (3) 二、设计基本思路 (4) 2.1知识库 (4) ....................................................................................................... 错误!未定义书签。 2.1.2 知识库建立 (4) 2.1.3 知识库获取 (5) 2.2 数据库 (6) ....................................................................................................... 错误!未定义书签。 ....................................................................................................... 错误!未定义书签。 三、推理机构 (7) 3.1推理机介绍 (7) 3.1.1 推理机作用原理 (7) ....................................................................................................... 错误!未定义书签。 3.2 正向推理 (7) 3.2.1 正向推理基本思想 (7) 3.2.2 正向推理示意图 (8) 3.2.3 正向推理机所要具有功能 (8) 3.3反向推理 (8) ....................................................................................................... 错误!未定义书签。 3.3.2 反向推理示意图 (8) ....................................................................................................... 错误!未定义书签。 四、实例系统实现 (9)

简单动物识别系统的知识表示

?简单动物识别系统的知识表示 ? 1. 实验目的 ?理解产生式知识表示方法,能够用选定的编程语言设计产生式系统的规则库和综合数据库。 ? 2. 实验环境 ?在微型计算机上,选一种编程语言。 ? 3. 实验要求 ?(1) 以动物识别系统的产生式规则为例。 ?(2) 用选定的编程语言建造知识库和综合数据库,并能对它们进行增加、删除和修改操作。 ?学习任务 ?通过网络搜索,以“专家系统的作用”为主题进行调查。搜集各种应用专家系统的实例,分析其用途,并根据不同的用途进行分类。 ?请上网查找专家系统的相关资料,从不同的角度追溯专家系统的发展史。 ?作品结果:把上面两个任务结果,形成一个WORD文档。其中对专家系统的用途分类形成一个表格。 ?用Intermodeller设计一个小型的专家系 MYCIN是一个通过提供咨询服务来帮助普通内科医生诊治细菌感染性疾病的专家系统,其于1972年开始研制,74年基本完成,并投入实际应用。MYCIN的取名来自多种治疗药物的公共后缀,如clindamycin、erythromycin、kanamycin等。如果说能推测有机化合物分子结构的DENDRAL是世界上第一个有重要实用价值的专家系统,那末MYCIN则是最有影响力的专家系统。围绕着MYCIN的各种研究工作一直沿续了10年,对于推动知识工程以及专家系统学科的建立和发展具有重要影响。可以说,早期的专家系统,尤其是医疗诊断和咨询型专家系统,许多都参照了MYCIN系统的技术,如知识表示、不确定推理、推理解释、知识获取等。 MYCIN也设计为典型的产生式系统,由规则库、综合数据库和控制系统三个部分组成;只是基于规则的推理采用逆向方式,即从问题求解

人工智能实验报告-产生式系统推理-动物识别

人工智能第二次实验报告 产生式系统推理 班级:姓名:学号: 一、实验目的 1. 理解并掌握产生式系统的基本原理; 2. 掌握产生式系统的组成部分,以及正向推理和逆向推理过程。 二、实验要求 1. 结合课本内容, 以动物识别系统为例,实现小型产生式系统; 2. 要求: 正向推理中能根据输入的初始事实,正确地识别所能识别的动物;逆向推理中 能根据所给的动物给出动物的特征。 三、实验算法 1. 如何表示事实和特征的知识; 在本程序中,我将动物的特征写入data.txt,将规则记入rules.txt,将动物种类记为goal.txt。

通过函数void readFiles() { readGoal(); readCod(); readRule(); }读入所有数据分别存放于goal[],rule[],cod[]自定义数组中。 2. 指出综合数据库和规则库分别使用哪些函数实现的? 综合数据库(包括特征和目标) typedef struct { int xuh;//存放编号 char valu[50];//存放具体内容 }Node; Node goal[20]; Node cod[50];

规则库 typedef struct { int rslt; int codNum;//记载前提的个数 int cod[10];//记载前提的序号 int used;//记载是否已匹配成功 }Nrule; Nrule rule[50]; void readRule() { FILE *fp; int i; int tempxuh,tempcodn; char ch; if((fp=fopen("rules.txt","r"))==NULL) { printf("cannot open data\n"); exit(0); } i=0; rule[i].codNum=0; while((ch=fgetc(fp))!=EOF) { if(i==14) i=i; tempcodn=0; while(ch!='\n'&&ch!=EOF) //每一条规则 { tempxuh=0; while(ch<='9'&&ch>='0') { tempxuh=tempxuh*10+ch-'0';

产生式动物识别系统word版本

实验7:产生式动物识别系统 一、实验目的 理解和掌握产生式系统的推理方法,能够用选定的编程语言实现推理机。 二、编程环境 本文主要编译环境是Windows 10 Visual Studio 2015 三、问题描述 设计一个用于动物识别的产生式系统,该系统通过规则库识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁、鸵鸟7种动物。 四、解决方案 1.规则库: 用于描述相应领域内知识的产生式集合称为规则库。 本规则库包括以下规则 R1:if 动物有毛发 then 动物是哺乳动物 R2:if 动物有奶 then 动物是哺乳动物 R3:if 动物有羽毛 then 动物是鸟 R4:if 动物会飞 and 会生蛋then 动物是鸟 R5:if 动物吃肉then 动物是食肉动物 R6:if 动物有犀利牙齿and 有爪and 眼向前方 then 动物是食肉动物 R7:if 动物是哺乳动物and有蹄then动物是有蹄类动物 R8:if 动物是哺乳动物and反刍then动物是有蹄类动物 R9:if 动物是哺乳动物and是食肉动物and有黄褐色 and 有暗斑点then 动物是豹 R10:if 动物是哺乳动物and是食肉动物and有黄褐色and 有黑色条纹then 动物是虎 R11:if动物是有蹄类动物 and 有长脖子and有长腿and有暗斑点then 动物是长颈鹿 R12:if 动物是有蹄类动物and有黑色条纹then 动物是斑马 R13:if 动物是鸟and不会飞and有长脖子and有长腿and有黑白二色then 动物是鸵鸟 R14:if 动物是鸟and不会飞and会游泳and有黑白二色 then 动物是企鹅 R15:if 动物是鸟and善飞then 动物是信天翁 2.综合数据库 char *ans0 = "抱歉,我也不知道这是什么动物"; char *ans1 = "这个动物是金钱豹";

人工智能动物识别专家系统

一.题目:动物识别专家系统 二.实验目的 1.理解并掌握基于规则系统的表示与推理 2.学会编写小型的生产式系统,理解正向推理和反向推理的过程以及两 者的区别 3.学会设计简单的人机交互界面 三.实验内容 动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知识,共15条规则、可以识别七种动物,这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。 四.实验要求 1、确定推理方法(正向还是反向),并根据问题设计实现一个简单的不通用推理机(匹配、冲突消解) 2、规则库要求至少包含15条规则 3、初始事实可以任意给定,输入初始事实后能够得到推理结果 4、设计人机界面,解释模块提供查询规则的功能 5、可以不考虑知识库管理模块 6、提交实验报告, 7、报告中要有推理树 五.实验原理 动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知识,共15条规则、可以识别七种动物,这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。动物识别15条规则: 规则1: 如果:动物有毛发 则:该动物是哺乳动物

规则2: 如果:动物能产奶 则:该单位是哺乳动物 规则3: 如果:该动物有羽毛 则:该动物是鸟 规则4: 如果:动物会飞,且会下蛋 则:该动物是鸟 规则5: 如果:动物吃肉 则:该动物是肉食动物 规则6: 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则7: 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则8: 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点则:该动物是豹 规则10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹则:该动物是虎 规则11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则12: 如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马 规则13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞

动物专家识别系统

运行环境:Windows XP + VC6.0

逻辑:

代码: #include #include #include #include #include #include using namespace std; struct CAUSE_TYPE{ //事实 string cause; //事实字符串描述 bool flag; //是否已经使用,防止输入的事实重复 //其他省略 }; struct RULE_TYPE{ //结论 string result; //结论字符串描述 vector cause; //判断依据的事实 int count; //结论的前件有多少个吻合 bool finded; //是否匹配好所有前件 //其他省略 }; class AniDist{ public: bool load(string str); //根据文件创建结论队列和它们的事实,str为文件路径(知识获取机构) void clear(); //将所有结论的possible清零,所有flag清空 RULE_TYPE* find(vector str); //推理过程(推理机) vector split(string str); //将输入的事实字符串转换为队列,字符串以空格分割(用于人机接口) void print(RULE_TYPE* rul); //打印判断的信息 void print_table(); //打印从文件中读取的的结论队列 void clearmem(); //清理内存 friend bool operator !(AniDist ad); private: bool isload; vector queue; //结论队列链表 CAUSE_TYPE* create_cause(string str); //根据输入的字符串创建单个事实 RULE_TYPE* create_rule(string str); //根据输入的字符串创建单个结论

基于WEB的动物识别系统 实验报告

基于web的动物识别系统 一、实验目的 理解和掌握产生式知识表示方法及产生式系统的基本过程,能够利用Web编程技术建立一个基于产生式知识表示的简单的智能系统。 二、实验环境 (1) 硬件环境:网络环境中的微型计算机。 (2) 软件环境:Windows操作系统,Microsoft Visual Studio C#语言。 三、实验原理 该系统用到的表示方法是产生式表示方法,是陈述性知识表示方法的一种。 3.1 产生式表示的基本方法 (1)事实的表示

在产生式表示方法中,事实通常是用三元组或四元组来表示的。对确定性知识,一个事实可用一个三元组 (对象,属性,值)或(关系,对象1,对象2) 来表示。这种表示方式,在机器内部可用一个表来实现。 (2)规则的表示 规则描述的事物间的因果关系。规则的产生式表示形式常称为产生式规则,简称为产生式,或规则。其基本形式为 P→Q 或者 IF P THEN Q 其中,P是产生式的前提,也称为产生式的前件,它给出了该产生式可否使用的先决条件,用事实的逻辑组合来构成;Q是一组结论或操作,也成为产生式的后件,它指出当前提P满足时应该推出的结论或应该执行的操作。产生式的含义是:如果前提P满足,则可推出结论Q或执行Q所规定的操作。 2.产生式系统的基本结构及过程 通常,把用产生式知识表示方法构造的智能系统统称为产生式系统。一个产生式系统的基本结构包括综合数据库、规则库和控制系统这三个主要部分。 2.1综合数据库 综合数据库也称为事实库,是一个用来存放与求解问题有关的各

种当前信息的数据结构。在推理过程中,当规则库中某条规则的前提可以和综合数据库中的已知事实相匹配时,该规则被激活,由它推出的结论将被作为新的事实放入综合数据库,成为后面推理的已知事实。 2.2规则库 规则库是一个用来存放与求解问题有关的所有规则的集合。它包含了将问题从初始状态转换成目标状态所需要的所有变换规则。 2.3控制系统 控制系统也成为推理机,它由一组程序组成,用来控制整个产生式系统的运行,决定问题求解过程的推理路线,实现对问题的求解。其主要工作如下: (1)按一定策略从规则库中选择规则与综合数据库的已知事实进行匹配。 (2)当匹配成功的规则多于一条时,推理机构应该能够按照某种策略从中选出一条规则去执行。 (3)对要执行的规则,如果该规则的后件不是问题的目标,则当其为一个或多个结论时,把这些结论加入到综合数据库中;当其为一个或多个操作时,执行这些操作。 (4)对要执行的规则,如果该规则的后件满足问题的结束条件,则停止推理。 (5)在问题求解过程中,记住应用过的规则序列,以便最终能够给出问题的解路径。

动物识别系统代码

简易动物识别专家系统源代码(调试无错!) #include void birds() { int a; printf("**************************************\n"); printf("1.长腿,长脖子,黑色,不会飞。\n"); printf("2.不会飞,会游泳,黑色.\n"); printf("3.善飞\n"); printf("4.无上述特征\n"); printf("**************************************\n\n"); printf("请选择该动物特点:\n"); scanf_s("%d", &a); switch(a) { case 1: printf("该动物为\"鸵鸟\"\n\n"); break; case 2: printf("该动物为\"企鹅\"\n\n"); break; case 3: printf("该动物为\"信天翁\"\n\n"); break; case 4: printf("\"我们将会尽快升级系统,谢谢使用。\"\n\n"); break; default: printf("错误选择!\n"); break; } } void carnivore()//食肉动物识别 { int d; printf("**************************************\n"); printf("1.黄褐色有暗斑\n2.黄褐色有褐色条纹\n3.无上述特点\n");

printf("**************************************\n\n"); printf("请选择该动物特点:\n"); scanf_s("%d", &d); switch(d) { case 1: printf("该动物为\"猎豹\"\n\n"); break; case 2: printf("该动物为\"老虎\"\n\n"); break; case 3: printf("\"我们将会尽快升级系统,谢谢使用。\"\n\n"); break; default: printf("错误选择!\n"); break; } } void ungulate()//哺乳动物识别 { int e; printf("**************************************\n"); printf("1.黑白条纹\n2.有暗斑点,且长腿,长脖子\n3.无上述特点\n"); printf("**************************************\n"); printf("请选择该动物特点:\n\n"); scanf_s("%d", &e); switch(e) { case 1: printf("该动物为\"斑马\"\n\n"); break; case 2: printf("该动物为\"长颈鹿\"\n\n"); break; case 3: printf("\"我们将会尽快升级系统,谢谢使用。\"\n\n"); break; default: printf("错误选择!\n"); break; } }

小型动物分类专家系统的设计与实现_2016

小型动物分类专家系统的设计与实现 一、实验目的 通过本实验可使学生能够综合利用高级程序设计语言、面向对象程序设计、数据结构、数据库原理、人工智能、软件工程等课程的相关知识,设计并实现小型动物分类专家系统,培养学生综合运用所学计算机软件知识解决实际问题的能力,为今后从事计算机软件开发及应用打下基础。 二、实验内容 运用下列规则,设计并实现一个小型动物分类专家系统。 规则1: 如果:动物有毛发 则:该动物是哺乳动物 规则2: 如果:动物有奶 则:该单位是哺乳动物 规则3: 如果:该动物有羽毛 则:该动物是鸟 规则4: 如果:动物会飞,且会下蛋 则:该动物是鸟 规则5: 如果:动物吃肉 则:该动物是肉食动物 规则6: 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则7: 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则8: 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则:该动物是豹 规则10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎 规则11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则12:

如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马 规则13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟 规则14: 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅 规则15: 如果:动物是鸟,且善飞 则:该动物是信天翁 动物分类专家系统由15条规则组成,可以识别七种动物. 三、工具 四、例子

动物识别系统__代码

动物识别专家系统 动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知 识,共15 条规则、可以识别七种动物,这些规则既少又简单,可以改造他 们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。动物识别15 条规则的中文表示是: 规则1: 如果:动物有毛发 则:该动物是哺乳动物 规则2: 如果:动物有奶 则:该单位是哺乳动物 规则3: 如果:该动物有羽毛 则:该动物是鸟 规则4: 如果:动物会飞,且会下蛋 则:该动物是鸟 规则5: 如果:动物吃肉 则:该动物是肉食动物 规则6: 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则7: 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则8: 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则9: 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则:该动物是豹 规则10: 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎 规则11: 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则12: 如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马

规则13: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟 规则14: 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅 规则15: 如果:动物是鸟,且善飞 则:该动物是信天翁 动物分类专家系统由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_weil”(善飞),如果也成立,则查找结论断言编号数组{30,29,28, 27,26,25,24,3,3,13,12,12,11,11,0}中第七个“24”,这里24 对应事实数组中的“albatross”(信天翁)。 上述就是程序的推理过程,也是程序中的重点,该部分是由规则类(类rul e)中的Query 方法实现。 程序完整代码: #include #include #include #include #define True 1 #define False 0 #define DontKnow -1 char *str[]={"chew_cud反刍动物","hooves蹄类动物","mammal哺乳动物","forward_eyes眼盯前方",

人工智能动物识别系统 实验报告

人工智能导论 实验报告 题目动物识别专家系统 学院信息科学与工程学院 专业计算机科学与技术 姓名侯立军 学号 20131222036 班级计信1301 二O一五年十一月二十六日

1 设计内容 题目:动物识别专家系统 内容:动物识别专家系统是流行的专家系统实验模型,他用产生是规则来表示知识可以识别不同的动物。这些规则既少又简单,可以改造他们,也可以加入新的规则,还可以用来识别其他新规则来取代这些规则。 2 基本原理 2.1 产生式系统的问题求解基本过程: (1) 初始化综合数据库,即把欲解决问题的已知事实送入综合数据库中; (2) 检查规则库中是否有未使用过的规则,若无转 (7); (3) 检查规则库的未使用规则中是否有其前提可与综合数据库中已知事实相匹配的规则,若有,形成当前可用规则集;否则转(6); (4) 按照冲突消解策略,从当前可用规则集中选择一个规则执行,并对该规则作上标记。把执行该规则后所得到的结论作为新的事实放入综合数据库;如果该规则的结论是一些操作,则执行这些操作; (5) 检查综合数据库中是否包含了该问题的解,若已包含,说明解已求出,问题求解过程结束;否则,转(2); (6) 当规则库中还有未使用规则,但均不能与综合数据库中的已有事实相匹配时,要求用户进一步提供关于该问题的已知事实,若能提供,则转(2);否则,执行下一步; (7) 若知识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。 2.2 正向推理 正向推理是以已知事实作为出发点的一种推理,又称数据驱动推理、前向链推理及前件推理等。 2.2.1 正向推理的基本思想: 从用户提供的初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适用知识集KS,然后按某种冲突消解策略从KS中选出一条知识进行推理,并将推出的新事实加入到数据库中作为下一步推理的已知事实,在此之后再在知识库中选取可适用的知识进行推理,如此重复,直到求得了所要求的解,或者知识库中再

人工智能动物识别系统JAVA

经典文档下载后可编辑复制 工 作存储器 用户界面 实验报告 课程名称人工智能与专家系统实验名称动物分类专家系统设计 系别电子信息科学学院专业班级指导教师 学号____________姓名____________实验日期2016.4.1 实验成绩___________ 一、实验目的 1、加深理解专家系统的结构原理与实际应用。 2、初步掌握知识获取的基本方法。 3、掌握产生式规则知识表示方法及其编程实现方法。 4、初步掌握知识库的组建方法。 5、加深理解推理机的算法原理并初步掌握其编程实现方法。 二、实验环境 1 、硬件环境:微机 2 、编程语言不限 三、实验原理 一个基于规则专家系统的完整结构示于图 1 。其中,知识库、推理机和工作存储器是构成专家系统的核心。系统的主要部分是知识库和推理引擎。知识库由谓词演算事实和有关讨论主题的规则构成。推理引擎由所有操纵知识库来演绎用户要求的信息的过程构成-如消解、前向链或反向链。用户接口可能包括某种自然语言处理系统,它允许用户用一个有限的自然语言形式与系统交互;也可能用带有菜单的图形接口界面。解释子系统分析被系统执行的推理结构,并把它解释给用户。 用户知识工程师 图1 一个基于规则专家系统的完整结构 发 外部程序

三、实验内容 运用下列规则,设计并实现一个小型动物分类专家系统。 规则 1 : 如果:动物有毛发 则:该动物是哺乳动物 规则 2 : 如果:动物有奶 则:该单位是哺乳动物 规则 3 : 如果:该动物有羽毛 则:该动物是鸟 规则 4 : 如果:动物会飞,且会下蛋 则:该动物是鸟 规则 5 : 如果:动物吃肉 则:该动物是肉食动物 规则 6 : 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则 7 : 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则 8 : 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则 9 : 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则:该动物是豹 规则 10 : 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎 规则 11 : 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则 12 : 如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马 规则 13 : 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟 规则 14 : 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅 规则 15 : 如果:动物是鸟,且善飞 则:该动物是信天翁 利用上述15 条规则,可区分7 种动物。 ( 2 )推理机设计:采用正向推理。

人工智能动物识别系统JAVA

精品文档 工作存储器解释器 用户界面 实验报告 课程名称人工智能与专家系统实验名称动物分类专家系统设计 系别电子信息科学学院专业班级指导教师 学号____________姓名____________实验日期2016.4.1 实验成绩___________ 一、实验目的 1、加深理解专家系统的结构原理与实际应用。 2、初步掌握知识获取的基本方法。 3、掌握产生式规则知识表示方法及其编程实现方法。 4、初步掌握知识库的组建方法。 5、加深理解推理机的算法原理并初步掌握其编程实现方法。 二、实验环境 1 、硬件环境:微机 2 、编程语言不限 三、实验原理 一个基于规则专家系统的完整结构示于图 1 。其中,知识库、推理机和工作存储器是构成专家系统的核心。系统的主要部分是知识库和推理引擎。知识库由谓词演算事实和有关讨论主题的规则构成。推理引擎由所有操纵知识库来演绎用户要求的信息的过程构成-如消解、前向链或反向链。用户接口可能包括某种自然语言处理系统,它允许用户用一个有限的自然语言形式与系统交互;也可能用带有菜单的图形接口界面。解释子系统分析被系统执行的推理结构,并把它解释给用户。 推理机 知识库 用户知识工程师 图1 一个基于规则专家系统的完整结构 开发界面 外部程序

三、实验内容 运用下列规则,设计并实现一个小型动物分类专家系统。 规则 1 : 如果:动物有毛发 则:该动物是哺乳动物 规则 2 : 如果:动物有奶 则:该单位是哺乳动物 规则 3 : 如果:该动物有羽毛 则:该动物是鸟 规则 4 : 如果:动物会飞,且会下蛋 则:该动物是鸟 规则 5 : 如果:动物吃肉 则:该动物是肉食动物 规则 6 : 如果:动物有犬齿,且有爪,且眼盯前方 则:该动物是食肉动物 规则 7 : 如果:动物是哺乳动物,且有蹄 则:该动物是有蹄动物 规则 8 : 如果:动物是哺乳动物,且是反刍动物 则:该动物是有蹄动物 规则 9 : 如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点 则:该动物是豹 规则 10 : 如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹 则:该动物是虎 规则 11 : 如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类 则:该动物是长颈鹿 规则 12 : 如果:动物有黑条纹,且是有蹄类动物 则:该动物是斑马 规则 13 : 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞 则:该动物是鸵鸟 规则 14 : 如果:动物是鸟,且不会飞,且会游泳,且是黑色的 则:该动物是企鹅 规则 15 : 如果:动物是鸟,且善飞 则:该动物是信天翁 利用上述15 条规则,可区分7 种动物。 ( 2 )推理机设计:采用正向推理。

动物识别专家系统

动物识别专家系统 摘要:专家系统是具有人工智能和推理功能的知识系统。本系统用15条规则,可识别7种动物,用C编程实现,并对结果进行了分析。该系统把规则的前提与推理机构结合起来,规则的前提作为推理的情况,规则的结论作为推理过程的状态,推理出最终结果后,就能直接处理,不需要判断。 关键字:专家系统;动物;推理 Animal recognition expert system Abstract: Expert systems are knowledge systems with artificial intelligence and reasoning function. The system uses 15 rules, and can identify seven kinds of animals, using C programming, and the results were analyzed. The system is the premise and reasoning mechanism combining rules, rules for reasoning rule conclusion as the reasoning process , reasoning out the final result , can directly handle, without judge. Key words: Expert systems; Animals; Reasoning

1 引言 1.1 专家系统简介 专家系统是人工智能中最重要的也是最活跃的一个应用领域,它实现了人工智能从理论研究走向实际应用、从一般推理策略探讨转向运用专门知识的重大突破。专家系统是早期人工智能的一个重要分支,它可以看作是一类具有专门知识和经验的计算机智能程序系统,一般采用人工智能中的知识表示和知识推理技术来模拟通常由领域专家才能解决的复杂问题 [1]。 自第1个专家系统1965年问世以来,经过30多年的发展,专家系统在全世界得到广泛的应用,甚至渗透到政治、经济、军事以及人类生活的各个领域。[2] 1.2 专家系统结构 专家系统包括构造、知识库、推理机三部分内容。 其中构造包括:专家系统通常由人机交互界面、知识库、推理机、解释器、综合数据库、知识获取等6个部分构成。其中尤以知识库与推理机相互分离而别具特色。专家系统的体系结构随专家系统的类型、功能和规模的不同,而有所差异。知识库用来存放专家提供的知识。专家系统的问题求解过程是通过知识库中的知识来模拟专家的思维方式的,因此,知识库是专家系统质量是否优越的关键所在,即知识库中知识的质量和数量决定着专家系统的质量水平。一般来说,专家系统中的知识库与专家系统程序是相互独立的,用户可以通过改变、完善知识库中的知识内容来提高专家系统的性能。推理机针对当前问题的条件或已知信息,反复匹配知识库中的规则,获得新的结论,以得到问题求解结果。在这里,推理方式可以有正向和反向推理两种[3]。 专家系统的核心是知识库和推理机,其基本工作过程为:系统根据知识库中的知识和用户提供的事实进行推理,不断地由已知前提推出一些初步结论,并将这些初步结论作为中间结果存放在数据库中,然后将其作为新的已知事实进行下一步推理,往复循环,逐步逼近求解目标。在这个过程中,系统可以通过人机接口不断地与用户交流,向用户提问,或对用户提出的问题做出解释[4]。 下图为专家系统的基本构成。

实验一产生式系统

实验一产生式系统——动物识别系统 一、实习目的和意义 1、掌握人工智能的知识表示技术,能用产生式表示法表示知识; 2、掌握基于规则推理的基本方法; 3、掌握产生式系统的运行机制。 二、实习内容 参考教材规则库包含15条规则,开发一个专家系统可以识别老虎,金钱豹,斑马,长颈鹿,企鹅,鸵鸟等6种动物。 三、实习要求 1、本次实验语言MATLAB; 2、系统能通过正向推理得到正确的动物识别结果。 四、实习过程 1.实验原理 正向推理(事实驱动推理) 1)从初始已知事实出发,在知识库KB中找出当前可适用的知识,构成可适 用知识集KS; 2)按某种冲突消解策略,从KS中选出一条知识进行推理,并将推出的新事 实加入到数据库DB中,作为下一步推理的已知事实,再在KB中选取可 适用知识构成KS; 3)重复步骤二,直到求得问题的解,或KB中再无可适用的知识。 2.问题背景 根据课本P33的15调动物识别的专家知识,建立规则库。 3.算法设计 主要利用数组下标和元素的0,1值表示知识,规则,及相关标记。

4.Matlab实现 a.算法 函数名函数说明 learn function learn(arr_category, arr_feature)主函数checkRule function [arr_category,arr_feature,arr_rule,ifMore,mark]= checkRule(arr_category,arr_feature,arr_rule,ifMore,mark ) 规则符合检测 showCategory function showCategory( ) 类别选项打印函数 showFeature function showFeature() 特征选项打印函数 showResult function showResult(mark) 结果显示 b.测试 测试数据一 arr_category[5] 1 0 0 0 1 arr_feature[20] 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 测试数据二

简单动物识别系统的知识表示实验报告

简单动物识别系统的知识表示实验报告 一、实验目的: 1、理解和掌握产生式知识表示方法。 2、能够用选定的编程语言实现产生式系统的规则库。 二、实验内容和要求: 1、以动物识别系统的产生式规则为例。 2、用选定的编程语言建造规则库和综合数据库,并能对它们进行增 加、删除和修改操作。 三、实验步骤: 1、确定需要识别的动物及其属性: 本次实验的简单动物识别系统总共能识别7种动物,即:老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁。 2、建立识别七种动物识别系统的规则: 由于实验要求系统的规则库和综合数据库能够进行增加、删除和修改操作,因此可以采取逐步添加条件,压缩范围的方法进行识别,即:先跟据一些动物的共性进行大致分类,然后在添加约束条件,将范围缩小,直到能够识别出每一种不同的动物为止。这样,我们在需要添加识别其他动物的功能时,只需要添加那些动物的个性方面的信息即可,这样也可以简化系统的结构和内容。识别老虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁这7种动物的简单动物识别系统规则一共可以写成以下15条: Rule1:IF 该动物有毛发 THEN 该动物是哺乳动物

Rule2:IF 该动物有奶 THEN 该动物是哺乳动物 Rule3:IF 该动物有羽毛 THEN 该动物是鸟 Rule4:IF 该动物会飞 AND 会下蛋 THEN该动物是鸟 Rule5:IF 该动物吃肉 THEN 该动物是肉食动物 Rule6:IF 该动物有犬齿 AND 有爪 AND 眼盯前方 THEN该动物是肉食动物 Rule7:IF 该动物是哺乳动物 AND 有蹄 THEN 该动物是有蹄类动物Rule8:IF 该动物是哺乳动物 AND 是嚼反刍动物 THEN 该动物是有蹄类动物 Rule9:IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色AND 身上有暗斑点THEN该动物是金钱豹 Rule10:IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色AND 身上有黑色条纹 THEN 该动物是老虎 Rule11:IF 该动物是有蹄类动物 AND 有长脖子 AND 有长腿 AND 身上有暗斑点 THEN 该动物是有长颈鹿 Rule12:IF 该动物是有蹄类动物 AND 身上有黑色条纹 THEN 该动物是斑马 Rule13:IF 该动物是鸟 AND 有长脖子 AND 有长腿 AND不会飞 THEN 该动物是鸵鸟 Rule14:IF 该动物是鸟 AND 会游泳 AND 有黑白二色 AND不会飞THEN 该动物是企鹅 Rule15:IF 该动物是鸟 AND 善飞 THEN 该动物是信天翁

基于规则的动物识别系统

实验报告 信工学院 系:智能科学与技术班级:08级6班姓名:于欢学号:1081000230 课程名称:人工智能原理及其应用实验 实验题目:基于规则的动物识别系统 实验目的: 1.熟悉产生式的特点,基本结构和设计思想 2.掌握基于规则推理的基本过程和方法 3.学会用高级程序设计语言开发基于规则的动物识别系统 实验要求: 1.根据动物识别系统的规则建立合理的数据结构或数据库来表示知识。 2.利用所选开发语言来建立推理过程。 3.利用控制台或者图形界面给出合理的交互接口,实现基本演示功能。 4.提交实验报告和源程序,总结实验结论和经验教训。 实验原理: 1.基于规则产生式系统结构: 基于规则的产生式系统一般由规则库(知识库)、综合数据库和推理引擎(推理机)三部分组成,规则库中它的基本组成框架如下图1所示。 知识库由谓词演算事实和有关讨论主题的规则构成,综合库又称为上下文,用来暂时存储推理过程中的结论和数据。推理机是用规则进行推理的过程和行为,。知识采集系统是领域专家把相关领域的知识表示成一定的形式,并输入到知识库中。解释系统通过用户输入的条件来分析被系统执行的推理结构,并将专家知识以易理解的方式并把知识解释给用户。 图1 规则产生式系统的基本结构 2. 简单动物识别产生式系统结构: ⑴知识库ANIMAL的知识库非常小,仅仅包含16条规则(一 般说来,一个产生式系统的知识库应包含≥几百条规则); ⑵解空间很小,仅仅包含8个解,或8个最高假设(在一个特定 的动物园里,共有虎、豹、长颈鹿、斑马、鸵鸟、企鹅和信天 翁、八哥等8种动物); ⑶初始事实集合很小,仅仅包含21个事实,如图中的F1至F21;

动物识别系统实验报告

人工智能实验报告二 班级:XXXX 姓名:XXXX 学号:XXXXX 一.实验目的 1. 理解并掌握基于规则系统的表示与推理。 2. 学会编写小型的产生式系统,理解正向推理和反向推理的过 3. 程以及两者的差别。 4. 学会设计简单的人机交互界面。 二.实验预习内容及实验环境: 1. 了解动物识别系统问题; 2. 产生式系统的组成部分,正向推理,逆向推理的算法和产生式系统的类型。 三、实验内容和步骤: 1.内容:结合第五章内容,以动物识别系统(或货物袋装系统)为例,实现基于规则的系统构造实验。2.要求: 1>结果显示要求 (1)有若干选择动物特征的选择列表; (2)表现判断动物时,使用了哪些规则;

(3)表现数据库的变化;(正向推理中表现每使用一次规则后,产生新事实。反向推理中表现新的目标事实有哪些需要证明,哪些已经得到证实); (4)显示规则的调用次序; (5)显示最后的结果,包含动物能识别出来和动物不能识别出来两种情况。

(6)至少检查两个例子实现正向推理和反向推理的区别;老虎的例子如上所示,以下为金钱豹的例子: 正向推理: 反向推理:

2>指出综合数据库和规则库分别使用哪些函数实现 的? 综合数据库和规则库均采用数组完成。其中的综合数据库为一个string类型的数组,内容为事实的名称字符串,下标则为该事实的序号。数组长度为33,表示共有33个事实(最后7个为动物名称)。代码如下: string facts[factnum]={"有爪","有犬齿","有奶","有毛发","目视前方","吃肉","有蹄","有羽毛","会飞","生蛋","不会飞","黑白色","会游泳","善飞","不怕风浪","长腿","长脖子","有暗斑点","白色","黑色斑点","黑色条纹","黄褐色","食肉动物","鸟","哺乳动物","有蹄动物","老虎","金钱豹","长颈鹿","斑马","鸵鸟","企鹅","海燕"}; 规则库为一个结构体数组。该结构体由一个int型数组(表示前提条件的序号集合)和一个int数据(表示由此前提推出的结果)表示。该数组长度为14,表明有14条规则。该规则库在建立时有一个内在要求:前提的规则(子规则)的序号必须在父规则之前。(便于正向推理的实现)代码如下: struct rule { int con[10]; int res; }; Rule rules[rulenum]={{{2,-1},24},{{3,-1},24},{{7,-1},23},{{8,9,-1},23},{{24,0,1,4,-1},22 }, {{24,5,-1},22},{{24,6,-1},25},{{22,21,20,-1},26},{{22,21,19,-1},27},{{25,15,16,21,17,-1},28},{{25,18,20,-1},29},{{23,10,15,16,11,-1},30},{{23,10,12,11,-1},31},{{23,13,14,-1},32}}; 3>规则库的匹配算法是什么?如何选用可用规则集中 的规则?分别使用哪些函数实现的? 用一个bool型的与数据库数组等长的enfact数组表示各事实是否已经满足(或已经推出)。要匹配一个规则的时候,只需查

相关文档
最新文档