实验二 产生式系统

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

实验二动物识别专家系统(产生式系统)

一、实验目的

1、掌握专家系统的基本原理和实现方法;

2、构建简单的专家系统。

二、实验内容

构建一简单的动物识别系统。该系统向用户提问该动物是否具有的属性,根据用户的回答,来判断是哪一种动物。该系统可识别albatross(信天翁),penguin(企鹅),ostrich(鸵鸟),zebra(斑马),giraffe(长颈鹿),tiger(老虎),cheetah(印度豹)。

动物属性有:"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","blac k_stripes"(黑条纹),"dark_spots","tawny_color"(茶色)

三、基本要求

1. 用产生式规则作为知识表示,用产生系统实现该专家系统。

3. 所实现的专家系统必须上机运行演示;程序运行时,应有人机对话过程。

5. 系统完成后,要提交实验报告。

四、实验步骤

具体工作及步骤为:

1. 选题。

2. 系统分析。

3. 知识获取与知识表示选择/设计。

4. 知识库组建。

5. 推理机选择/编制。

6. 系统调试与测试。

7. 撰写实验报告。

五、思考题

专家系统用c++语言+数据库的解决方案如何实现?

下例用C++实现了一个简易的源程序,仅供参考:

#include

#include

#include

#include

#define True 1

#define False 0

#define DontKnow -1

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};

int rulep[][6]={{22,23,12,3,0,0},{21,23,12,3,0,0},{22,19,20,11,0,0},

{21,11,0,0,0,0},{17,19,20,13,-9,0},{17,18,13,-9,0,0},{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}};

int rulec[]={30,29,28,27,26,25,24,3,3,13,13,12,12,11,11,0};

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; }

int GetSucc()

{ return Succ; }

void PutAct(const int Act0,int Suc0) { Active=Act0;

Succ=Suc0; }

};

fact *Fact;

class list

{ private:

int Number;

public:

list *Next;

list(int Num)

{ Number=Num;

Next=NULL;

}

int GetNumber()

{ return Number; }

};

class rule

{ char *Name;

list *Pre;

int Conc;

public:

rule *Next;

rule(char *N,int P[],int C);

~rule();

int Query();

void GetName()

{ cout<

};

rule::~rule()

{ list *L;

while(Pre)

相关文档
最新文档