动物识别专家系统研究与设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
动物识别专家系统研究与设计
摘要:动物识别专家系统是将人的思维过程转化为计算机语言的逻辑过程,其关键在于知识和信息的表示,智能推理或求解的基础——知识库的创建和管理,以及基于某种知识和信息表示的智能推理或求解过程。专家系统已有很广泛而又重要的应用,它对人类所作出的贡献,使它越来越为更多人所接受,专家系统有着广泛的应用,遍及化学、医学、地质学、气象学、教育乃至军事等方面。本论文所做的研究与设计是以识别七种动物为设计思路所写的。通过输入一些已知事实,然后运用规则进行推理,最终判断出动物。
关键字:动物识别,人工智能,产生式系统
一、专家系统基本知识
1.1动物识别专家系统介绍
动物识别专家系统是人工智能中一个比较基础的规则演绎系统,是人工智能领域里的一个大模块的专家系统的一个特定例子。是集知识表与推理为一体的,以规则为基础对用户提供的事实进行向前、逆向或双向的推理得出结论的一种产生式系统。如果通过良好的分析、精确地设计和细致的规划会创设出高度灵活和快速有效的识别系统,再加上良好的界面供用户添加新的事实和规则,反馈详细的错误或信息的话,那就是一个相当完整的识别系统了。
1.2专家系统实际应用
目前专家系统已经成功地渗透到生活的各个领域,并且还产生了巨大的社会效益和经济效益。例如,像车辆传感、药物、纺织服装等重工业和轻工业领域中都会应用到,特别是在计算机领域里,现在已经是一门非常重要的学科类了。
1.3专家系统的开发
专家系统设计与实现的一般过程
图1 专家系统开发流程
二、设计基本思路
2.1知识库
2.2.1知识库作用
用产生式系统鉴别动物,需要一种演绎机制,利用己知事实的集合做出新的结论,一种方法是替动物园中的每个动物作一个产生式,使用者首先收集所有可利用的事实,然后在产生式的表中进行扫描,寻找一个状态部分能与之匹配的产生式。一般要经过多少步并生成和利用一些中间事实才能从基本事实推出结论,这样做所包含的产生式可以比较小,容易理解,容易使用和容易产生。动物识别专家系统中的知识库中的知识通常是用规则表示的。
2.1.2 知识库建立
在本文中我们多建立的知识库所要遵循的规则如下:
规则1:
如果:动物有毛发
则:该动物是哺乳动物
规则2:
如果:动物能产奶
则:该单位是哺乳动物
规则3:
如果:该动物有羽毛
则:该动物是鸟
规则4:
如果:动物会飞,且会下蛋
则:该动物是鸟
规则5:
如果:动物吃肉
则:该动物是肉食动物
规则6:
如果:动物有犬齿,且有爪,且眼盯前方
则:该动物是食肉动物
规则7:
如果:动物是哺乳动物,且有蹄
则:该动物是有蹄动物
规则8:
如果:动物是哺乳动物,且是反刍动物
则:该动物是有蹄动物
规则9:
如果:动物是哺乳动物,且是食肉动物,且是黄褐色的,且有暗斑点
则:该动物是豹
规则10:
如果:如果:动物是黄褐色的,且是哺乳动物,且是食肉,且有黑条纹
则:该动物是虎
规则11:
如果:动物有暗斑点,且有长腿,且有长脖子,且是有蹄类
则:该动物是长颈鹿
规则12:
如果:动物有黑条纹,且是有蹄类动物
则:该动物是斑马
规则13:
如果:动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞
则:该动物是鸵鸟
规则14:
如果:动物是鸟,且不会飞,且会游泳,且是黑色的
则:该动物是企鹅
规则15:
如果:动物是鸟,且善飞
则:该动物是信天翁
在本系统中一共有15条规则,可以识别七种动物。这些规则既少又简单,在今后我们完善系统时可以以此为蓝本来改造这些规则,也可以加进新的规则,同时,也可以替换这些规则来识别其他的事物,如花、草、鸟等。我们把规则定义为对象,把规则的结构以及关于规则的推理使用定义成规则类,由规则类生成的所有规则对象组成知识库,对知识库的操作方法由规则类的操作方法提供。
图2 规则的结构
规则类定义:
class rule
{
char *Name;
list *Pre;
int Conc;
public:
rule *Next;
rule(char *N,int P[],int C);
~rule();
int Query();
void GetName()
{
cout< }; 规则由规则类的构造函数建立,规则动态节点的存储单元由析构函数释放。一条规则是一个知识实体,它本身具有咨询推理功能,这由规则类的函数Query实现。在本系统中,除了知识库外,还有一个事实库,记录用户与系统对话的结果及推理的中间结果。 事实库的结构下: 图3 事实的结构 事实的定义如下: class fact { private: int Number; char Name[21]; int Active; int Succ; public: fact *Next; fact(int Num,char *L) { strcpy(Name,L); Number=Num; Active=False; //-1 是已经推理,不符合。1 是已经推理,符合。 Succ=DontKnow; //0 是无,-1 是不知道,1 是有。 Next=NULL; } char *GetName() { char *L; L=new char[21]; strcpy(L,Name); return L; } int GetNumber() { return Number; } int GetAct() { return Active;