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

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

《人工智能导论》实验报告

实验一:产生式系统

——动物识别系统

一、实验目的

1、掌握知识的产生式表示法

2、掌握用程序设计语言编制智能程序的方法

二、实验内容

1、所选编程语言:C语言;

2.拟订的规则:

(1)若某动物有奶,则它是哺乳动物。

(2)若某动物有毛发,则它是哺乳动物。

(3)若某动物有羽毛,则它是鸟。

(4)若某动物会飞且生蛋,则它是鸟。

(5)若某动物是哺乳动物且有爪且有犬齿且目盯前方,则它是食肉动物。

(6)若某动物是哺乳动物且吃肉,则它是食肉动物。

(7)若某动物是哺乳动物且有蹄,则它是有蹄动物。

(8)若某动物是哺乳动物且反刍食物,则它是有蹄动物。

(9)若某动物是食肉动物且黄褐色且有黑色条纹,则它是老虎。

(10)若某动物是食肉动物且黄褐色且有黑色斑点,则它是金钱豹。

(11)若某动物是有蹄动物且长腿且长脖子且黄褐色且有暗斑点,则它是长颈鹿。(12)若某动物是有蹄动物且白色且有黑色条纹,则它是斑马。

(13)若某动物是鸟且不会飞且长腿且长脖子且黑白色,则它是驼鸟。

(14)若某动物是鸟且不会飞且会游泳且黑白色,则它是企鹅。

(15)若某动物是鸟且善飞,则它是海燕。

2、设计思路:

用户界面:采用问答形式;

知识库(规则库):存放产生式规则,推理时用到的一般知识和领域知识,比如动物的特征,动物的分类标准,从哺乳动物、食肉动物来分,再具体地添加一些附加特征得到具体动物;建立知识库的同时也建立了事实库。事实库是一个动态链表,一个事实是链表的一个结点。知识库通过事实号与事实库发生联系。

数据库:用来存放用户回答的问题,存放初始状态,中间推理结果,最终结果;

推理机:采用正向推理,推理机是动物识别的逻辑控制器,它控制、协调系统的推理,

并利用知识库中的规则对综合数据库中的数据进行逻辑操作。推理机担负两项基本任务:一是检查已有的事实和规则,并在可能的情况下增加新的事实;二是决定推理的方式和推理顺序。将推理机制同规则对象封装在一起,事实对象记录了当前的状态,规则对象首先拿出前提条件的断言(只有这些前提都有符合时才会做这条规则的结论),询问事实对象集,如事实对象集不知道,则询问用户,如所有前提条件都被证实为真则结论为真,否则系统不知道结论真假。

3、程序流程图:

程序运行如下:

以老虎,金钱豹,长颈鹿为例画出程序流程图如下:

三、程序编制:

程序包括知识库,数据库,推理机:

#include "Fact.h"

#include "Rule.h"

#include

fact *Fact;

//事实集(概念集)

char *str[]={"",

"反刍" /* 1 */, "有蹄" /* 2 */, " 哺乳类" /* 3*/,

"眼前" /* 4 */, "有爪" /* 5 */, "犬齿" /* 6 */,

"吃肉" /* 7 */, "下蛋 " /* 8 */, " 能飞" /* 9*/,

"羽毛" /* 10 */, "有蹄类" /* 11 */, "食肉类" /* 12 */,

"鸟类" /* 13 */, "有奶" /* 14 */, "毛发" /* 15 */,

"善飞" /* 16 */, "黑色白条纹"/* 17 */, "游泳" /* 18 */,

"长腿" /* 19 */, "长脖子" /* 20 */, "黑条纹" /* 21 */,

"暗斑点" /* 22 */, "黄褐色" /* 23 */, "海燕" /* 24 */,

"企鹅" /* 25 */, "鸵鸟" /* 26 */, "斑马" /* 27 */,

"长颈鹿" /* 28 */, "老虎" /* 29 */, "金钱豹" /* 30 */, "\0"

};

//规则之前件(条件)集,注意与下面对应

int rulep[][6]={

{22,23,12,3,0,0}, /*金钱豹30*/ {21,23,12,3,0,0}, /*老虎29*/ {22,19,20,11,0,0}, /*长颈鹿 28*/

21,17,0,0,0,0}, /*斑马27*/ {17,19,20,13,-9,0}, /*鸵鸟26*/ {17,18,13,-9,0,0}, /*企鹅 25*/

{13,16,0,0,0,0}, /* 海燕24*/ {15,0,0,0,0,0}, /*哺乳类 3*/ {14,0,0,0,0,0}, /*哺乳类 3*/

{10,0,0,0,0,0}, /*鸟类 13*/ {8,9,0,0,0,0}, /*鸟类 13*/ {3,7,0,0,0,0}, /*食肉类 12*/

{3,4,5,6,0,0}, /*食肉类12*/ {3,2,0,0,0,0}, /*有蹄类 11*/ {3,1,0,0,0,0} /*有蹄类 11*/

};

//规则之后件(结论)集,注意与上面对应

int rulec[]={

30, 29, 28,

27, 26, 25,

24, 3, 3,

13, 13, 12,

12, 11, 11

}; //前7个是要识别的动物

int main()

{ fact *F,*T;

rule *Rule,*R;

char ch[8];

int i=1;

Fact=NULL; //事实链表初始为空

while(strcmp(str[i], "\0")!=0) //在事实链表中填入事实,注意:前插入 { F=new fact(i,str[i++]);

F->Next=Fact;

Fact=F;

}

F=Fact;

Fact=NULL;

while(F)

{ //倒转上面前插入的事实链表。inverted the upper link

T=F;

F=F->Next;

T->Next=Fact;

Fact=T;

}

ch[0]='R';ch[1]='U';ch[2]='L';ch[3]='E';ch[4]='_';ch[5]='a';ch[6]='\0';

Rule=NULL; //规则链表初始为空

for (i=0;i<15;i++) //link the rule

{

R=new rule(ch,rulep[i],rulec[i]);

R->Next=Rule;

Rule=R;

ch[5]++;

}

R=Rule;

for (;;) //开始询问用户。Query

{ i=R->Query(Fact);

if((i==1)) break; //如果返回“真”,则推理成功,并可以给出最后专家答案!

R=R->Next;

if(!R) break; //所有规则都扫描完,R为空,则退出!

}

if(!R) cout<

cout<

getchar();

return True;

}

五、实验总结

本次识别型专家系统可以采用多种语言编程,如vc,vb,prolog等等,我通过认真阅读了实验指导书后,选用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 = "这个动物是金钱豹";

动物专家识别系统

运行环境: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; } }

实验一产生式系统

实验一产生式系统——动物识别系统 一、实习目的和意义 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,mar k ) 规则符合检测 showCategory function showCategory( ) 类别选项打印函数 showFeature function showFeature() 特征选项打印函数 showResult function showResult(mark) 结果显示 b.测试 测试数据一 1 0 0 0 1 arr_category[ 5] arr_feature[2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0]

实验一--产生式系统实验

实验一产生式系统实验 一、实验目的 1.熟悉一阶谓词逻辑和产生式表示法。 2.掌握产生式系统的运行机制。 3.以及基于规则推理的基本方法。 二、实验内容 运用所学知识,设计并编程实现一个小型的水果识别人工智能系统。 三、实验步骤 1. 基于产生式系统实验程序,设计并实现一个小型人工智能系统: (1)系统设置,包括设置系统名称和系统谓词,给出谓词名及其含义。 (2)编辑知识库,通过输入规则或修改规则等,完成整个规则库的建立。 (3)建立事实库(综合数据库),输入多条事实或结论。 (4)运行推理,包括正向推理和反向推理,给出相应的推理过程、事实区和规则区。 2. 撰写实验报告。 四、实验结果 1. 系统名称及谓词定义 (1)系统名称:水果识别系统 (2)谓词定义: ①水果是:fruit ②类别是:is ③事实:positive 2. 系统知识库 (1)fruit("菠萝"):-is("温热性水果"),positive("酸甜的"),positive("也称凤梨") (2)fruit("甘蔗"):-is("平性水果"),positive("甜的"),positive("有节的") (3)fruit("火龙果"):-is("寒凉性水果"),positive("仙人掌科水果") (4)fruit("梨"):-is("寒凉性水果"),positive("药用功效强的"),positive("蔷薇科水果") (5)fruit("荔枝"):-is("温热性水果"),positive("需冷藏的") (6)fruit("柠檬"):-is("平性水果"),positive("酸的"),positive("黄色的") (7)fruit("苹果"):-is("平性水果"),positive("红色的") (8)fruit("桑葚"):-is("平性水果"),positive("紫色的") (9)fruit("西瓜"):-is("寒凉性水果"),positive("多汁的"),positive("葫芦科水果") (10)fruit("香蕉"):-is("寒凉性水果"),positive("黄色的"),positive("剥皮的") (11)fruit("樱桃"):-is("温热性水果"),positive("大红色的"),positive("甜的") (12)is("寒凉性水果"):-positive("清热降火") (13)is("平性水果"):-positive("寒热偏性不明,开胃健脾") (14)is("温热性水果"):-positive("驱寒补虚") 3. 系统正反向推理过程、事实区和规则区。 (1)正向推理过程 ①事实区:

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

一.题目:动物识别专家系统 二.实验目的 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: 如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞

第一章 产生式系统

第一章 产生式系统 本章主要内容: ● 产生式系统的三个组成部分及其作用* ● 产生式系统解题的基本过程 ● 产生式系统的三类控制策略* ● 问题的计算机表示原则 ● 可分解的产生式系统的意义* (*为重点内容) 是AI 中最典型/最普遍的一种结构,大多数专家系统都用它来构造。 特点:解题过程与人类思维很相似。 1.1产生式系统的组成部分 1.一个综合数据库(Global Database ) 用来描述问题的状态或有关事实。一般随着解题过程不断变化。 像棋局一样 2.一组产生式规则(Set of Rules ) 一般表示为 if ……. then ……形式。 规则使用的条件 采取的行动或结论 某规则使用后,可使综合数据库的状态发生变化,形成新的状态。 即数据库变化的规则 3.控制策略(Control System of strategies ) 即控制如何使用这些规则去搜索解(决定着解题过程或推理路线);还要记住使用过 即使用规则的流程 的规则,以便找到解路径。 例题1:八数码游戏(似华容道) 让学生课后思考如何 存储,制定规则100min 可以经过思索,看出走步为:上上左下右。问题似怎样让计算机来解。 用产生式系统解题,须先建立问题的产生式系统描述,即给定综合数据库、规则集, 再利用某种控制策略求解。 (1)综合数据库 可见用二维数组较直观:(S ij ),1≤i, j ≤3, S ij ∈{0,1,…,8}且不等 《数据结构》中的各 一个具体的矩阵就表示一个棋局状态。对八数码游戏,显然有9!个状态,构成其 种结构都可用。 状态空间――解题过程中所有可能出现的状态的集合。 (2)规则集 每一张牌的移动,都可归结为空格的移动(上、下、左、右),用4条规则描述: if j 0-1≥1 then (左移)Si 0j 0=Si 0(j 0-1),Si 0(j 0-1)=0; if i 0-1≥1 then (上移)Si 0j 0=S (i 0-1)j 0,S (i 0-1)j 0=0; if j 0+1≤3 then (右移)Si 0j 0=Si 0(j 0+1),Si 0(j 0+1)=0; if i 0+1≤3 then (下移)Si 0j 0=S (i 0+1)j 0,S (i 0+1)j 0=0. (3)搜索策略 按某种策略(如爬山法)从规则集中不断选用规则,最终得到解路径。如(上、上、此处以“靠近目标法” 左、下、右)走步序列就是一个解。(其解题思路与人的思维相似) 演示,导出解路。 可见,用产生式系统解题,就是在问题的状态空间中去搜索一条从初态到终态的路径。

动物识别系统__代码

动物识别专家系统 动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知 识,共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中选出一条知识进行推理,并将推出的新事实加入到数据库中作为下一步推理的已知事实,在此之后再在知识库中选取可适用的知识进行推理,如此重复,直到求得了所要求的解,或者知识库中再

人工智能产生式系统实验报告解读

实验报告 【实验名称】______________产生式系统_______________________ 【实验目的】 1. 理解产生式系统的结构原理与实际应用。 2. 掌握产生式规则表示及规则库组建的实现方法。 3. 熟悉和掌握产生式系统的运行机制,掌握基于规则推理的基本方法。 【实验原理】 产生式系统用来描述若干个不同的以一个基本概念为基础的系统,这个基本概念就是产生式规则或产生式条件和操作对。在产生式系统中,论域的知识分为两部分:用事实表示静态知识;用产生式规则表示推理过程和行为。 【实验内容】 1.自己建造产生式系统(包括规则库和事实库),然后进行推理,即可以自己输入任何的事实,并基于原有的规则和输入的事实进行推理。 2.建造动物识别系统,能根据输入的动物特征判断是那种动物或给出相应的回答。 3.算法设计 ①首先建立事实库 事实库是在程序的开始直接输入的,用户根据需要选择,即要求用户先输入特征个数,然后输入动物的特征,进行识别。如果未识别出来,则可以重新选择,或者退出。 动物的特征如下: 1有奶2有毛发3有羽毛4会飞5生蛋6有爪7有犬齿 8目盯前方9吃肉10有蹄11反刍食物12黄褐色13黑色条纹 14黑色斑点15长腿16长脖子17暗斑点18白色19不会飞 20黑白色21会游泳22善飞23不怕风浪 24哺乳动物25鸟26食肉动物27有蹄动物28偶蹄动物

29海燕30老虎31金钱豹32长颈鹿33斑马34鸵鸟35企鹅 ②建立静态规则库 即建立产生式规则,本算法采用了产生中间事实的方法,便于建立和使用规则。为了便于设计,我们把要识别的动物限于7种,这样所需要的产生式规则就比较少。本算法共有15种规则,如下: R1: 如果动物有奶,则它是哺乳动物 R2: 如果动物有毛发,则它是哺乳动物 R3: 如果动物有羽毛,则它是鸟 R4: 如果动物会飞且生蛋,则它是鸟 R5: 吃肉的哺乳动物是食肉动物 R6: 有爪有犬齿木钉前方的哺乳动物是食肉动物 R7: 有蹄的哺乳动物是有蹄动物 R8: 反刍食物的有蹄动物是偶蹄动物 R9: 黄褐色有黑条纹的食肉动物是老虎 R10:黄褐色有黑色斑点的食肉动物是金钱豹 R11:长腿长脖子有黄褐色暗斑点的有蹄动物是长颈鹿 R12:有黑白条纹的有蹄动物是斑马 R13:不会飞长腿长脖的鸟是鸵鸟 R14:不会飞会游泳黑白色的鸟是企鹅R15:善飞不怕风浪的鸟是海燕具体表示如下: R1: 1->24 R2: 2->24 R3: 3->25 R4: 4*5->25 R5: 6*7*8*24->26 R6: 9*24->26 R7: 10*24->27 R8: 11*27->28 R9: 12*13*24->30 R10: 12*14*24->31 R11: 12*15*16*17*27->32 R12: 13*18*27->33 R13: 15*16*19*25->34 R14: 19*20*21*25->35 R15: 22*23*25->29 ③正向推理过程 从已知事实出发,通过规则库求得结论,或称数据驱动方式。推理过程是: 规则集中的规则前件与事实库中的事实进行匹配,得匹配的规则集合。 从匹配规则集合中选择一条规则作为使用规则。 执行使用规则的后件,将该使用规则的后件送入事实库中。 重复这个过程直至达到目标。 如有多条匹配规则需从中选一条作为使用规则,本算法是根据规则的顺序依次选择,且规则中不存在同一组事实对应多条匹配规则。

人工智能动物识别系统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 )推理机设计:采用正向推理。

知识表示与产生式系统

一、知识表示 1、知识表示的目的知识表示的重要性(为什么要研究知识表示?) 通过知识的有效表示,使人工智能程序能利用这些知识做出决策、制定计划、识别状况、分析事件以及获取结论等。 知识表示不仅是人工智能的重要研究内容,而且已经形成了一个独立的子领域(知识工程)。 2、什么是知识表示? 知识表示是知识的符号化过程 知识表示是选择合适的形式表示知识 知识表示就是将知识编码成一种适当的数据结构 3、知识的概念 4、知识的类型 5、知识表示方法 第一:利用自然语言表示知识可以吗? 困难之处:1)自然语言的二义性;2)不能很好地描述自然语言的语法和语义;3)自然语言的句子结构缺乏一致性 第二:以前用过哪些知识表示方法 1)记录和数据库系统 2)高级程序设计语言提供的数据结构:整数、实数、字符、数组、记录、指针等。每一种语言都有自己的语法规则。 第三:如何衡量知识表示方法的优劣?

二、产生式表示法与产生式系统 (一)实验内容和目的 1. 熟悉和掌握产生式系统的运行机制; 2. 掌握基于产生式系统的正向推理的基本方法。 3. 系统可以识别老虎、金钱豹、斑马、长颈鹿、企鹅、信天翁这6种 动物。其规则库包含15条规则 (二)实验要求 1. 能根据输入的动物特征判断是那种动物或给出相应的回答,如果根据 初始输入的动物特征不能判断,则可以动态由用户增加新动物特征来 判断属于那种动物---第一种方法 2. 能根据输入的动物特征判断是那种动物或给出相应的回答,如果根据 初始输入的动物特征不能判断,则可以向用户提示所要识别的动物是 否具有某种特征,然后根据用户的回答继续判断属于哪种动物----第二 种方法 3. 使用C++,VC6.0编程 (三)界面要求 1、提示用户可以识别的动物以及可以输入的动物特征 2、如果有没有使用的规则,则提示用户输入新动物特征(两种方法) 3、显示最后判断出的动物名称或者本系统不能识别这种动物 4、显示解决问题的路径(规则序列) 5、界面美观实用 (四)算法设计 1、如何实现规则库和综合数据库的建立 2、正向推理过程中如何实现规则的匹配、规则的选择(冲突解决策略), 即控制系统的具体实现方法(P39)要求采用两种以上的冲突解决策 略。 (五)实验设计与结果分析 1、设计实验,分析所采用的冲突解决策略的优缺点(根据解决问题的路 径分析、综合分析) 2、设计实验,比较实验要求中,新输入动物特征的两种实现方方法的异 同。 (六)系统改进方案设计 1、能否使系统具有动态增加新规则的功能,使其更符合实际情况 2、其它 (七)实验报告内容与要求 1、介绍算法设计思想(包括第四部分的内容) 2、关键代码说明 3、实验设计与结果分析(包括第五部分的内容) 4、分析界面的优缺点

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

简单动物识别系统的知识表示实验报告 一、实验目的: 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 该动物是信天翁

相关文档
最新文档