文档库 最新最全的文档下载
当前位置:文档库 › 重庆大学人工智能作业(动物识别系统)

重庆大学人工智能作业(动物识别系统)

重庆大学人工智能作业(动物识别系统)
重庆大学人工智能作业(动物识别系统)

人工智能及其应用作业姓名:学号:

一、作业题目:设计一个动物识别系统,运用产生式系统的思想,设在综合数据库中存放

下列已知事实:该动物身上有暗斑点,长脖子,长腿,奶,蹄,这些事实与规则库中的知识从第一条开始匹配,最终得出该动物是长颈鹿。

二、程序设计分析:根据产生式系统的原理,该系统一般由规则库、综合数据库、控制

系统三部分构成。先定义规则库结构体,里面包括Condition[6][20],result[20]和规则数Cnum,再定义综合数据库即事实库,里面包括item[20][20],和事实数Fnum,主要用到的参数就是这些。然后初始化规则库和综合数据库,编辑规则库。之后就是主程序,也就是推理机的作用:先让用户输入事实,然后与规则库中的知识从第一条开始逐条匹配,当匹配成功时,将结论插入事实库并更新事实库,再逐条匹配,依次循环..最终如果能匹配成功就显示‘该动物是..’,否则显示‘无法识别该动物’,程序结束。

三、程序流程图如下图:

图一、系统程序流程图四、我的源程序如下:

#include "iostream.h"

#include "stdio.h"

#include "conio.h"

#include "string.h"

typedef struct Rule//定义规则库

{

char Condition[6][20];

char Result[20];

int Cnum;

bool used;

}rule;

typedef struct Fact//定义综合数据库

{

char item[20][20];

int Fnum;

}fact;

rule r[100];

fact f;

void Create_Rules();//初始化规则库void Create_Facts();//初始化综合数据库int Get_RulesNum();

void Ratiocinate(int n);

void main()

{

int Rnum=0;

Create_Rules();

Create_Facts();

Rnum=Get_RulesNum();

//cout<

}

void Create_Rules()

{

strcpy(r[0].Condition[0],"有毛发"); strcpy(r[0].Result,"哺乳动物");

r[0].Cnum=1;

r[0].used=false;

strcpy(r[1].Condition[0],"奶");

strcpy(r[1].Result,"哺乳动物");

r[1].Cnum=1;

r[1].used=false;

strcpy(r[2].Condition[0],"有羽毛"); strcpy(r[2].Result,"鸟");

r[2].Cnum=1;

r[2].used=false;

strcpy(r[3].Condition[0],"会飞");

strcpy(r[3].Condition[1],"会下蛋"); strcpy(r[3].Result,"鸟");

r[3].Cnum=2;

r[3].used=false;

strcpy(r[4].Condition[0],"吃肉");

strcpy(r[4].Result,"食肉动物");

r[4].Cnum=1;

r[4].used=false;

strcpy(r[5].Condition[0],"有犬齿"); strcpy(r[5].Condition[1],"有爪");

strcpy(r[5].Condition[2],"眼盯前方"); strcpy(r[5].Result,"食肉动物");

r[5].Cnum=3;

r[5].used=false;

strcpy(r[6].Condition[0],"哺乳动物"); strcpy(r[6].Condition[1],"蹄");

strcpy(r[6].Result,"有蹄动物");

r[6].Cnum=2;

r[6].used=false;

strcpy(r[7].Condition[0],"有蹄动物"); strcpy(r[7].Condition[1],"嚼反刍动物"); strcpy(r[7].Result,"有蹄动物");

r[7].Cnum=2;

r[7].used=false;

strcpy(r[8].Condition[0],"哺乳动物"); strcpy(r[8].Condition[1],"食肉动物"); strcpy(r[8].Condition[2],"黄褐色"); strcpy(r[8].Condition[3],"身上有暗斑点"); strcpy(r[8].Result,"金钱豹");

r[8].Cnum=4;

r[8].used=false;

strcpy(r[9].Condition[0],"哺乳动物"); strcpy(r[9].Condition[1],"食肉动物"); strcpy(r[9].Condition[2],"黄褐色"); strcpy(r[9].Condition[3],"有黑色条纹"); strcpy(r[9].Result,"虎");

r[9].Cnum=4;

r[9].used=false;

strcpy(r[10].Condition[0],"有蹄动物");

strcpy(r[10].Condition[1],"长腿");

strcpy(r[10].Condition[2],"长脖子");

strcpy(r[10].Condition[3],"身上有暗斑点");

strcpy(r[10].Result,"长颈鹿");

r[10].Cnum=4;

r[10].used=false;

strcpy(r[11].Condition[0],"有蹄类动物");

strcpy(r[11].Condition[1],"身上有黑色条纹");

strcpy(r[11].Result,"斑马");

r[11].Cnum=2;

r[11].used=false;

strcpy(r[12].Condition[0],"鸟");

strcpy(r[12].Condition[1],"有长脖子");

strcpy(r[12].Condition[2],"长腿");

strcpy(r[12].Condition[3],"不会飞");

strcpy(r[12].Condition[4],"有黑白两色");

strcpy(r[12].Result,"鸵鸟");

r[12].Cnum=5;

r[12].used=false;

strcpy(r[13].Condition[0],"鸟");

strcpy(r[13].Condition[1],"会游泳");

strcpy(r[13].Condition[2],"不会飞");

strcpy(r[13].Condition[3],"有黑白两色");

strcpy(r[13].Result,"企鹅");

r[13].Cnum=4;

r[13].used=false;

strcpy(r[14].Condition[0],"鸟");

strcpy(r[14].Condition[1],"善飞");

strcpy(r[14].Result,"海燕");

r[14].Cnum=2;

r[14].used=false;

}

void Create_Facts()

{

printf("请输入该动物特性(中间加空格,Enter键结束)\n");

scanf("%s%s%s%s%s",&f.item[0],&f.item[1],&f.item[2],&f.item[3],&f.item[4]);

f.Fnum=5;

int Get_RulesNum()

{

int num=0;

int i=0;

while(1)

{

if(r[i].Condition[0][0]=='\0')

{

break;

}

i++;

num++;

}

return num;

}

void Ratiocinate(int n)

{

bool FindFact(char * str);

void InsertIntoFact(char * str);

int i=0,j;/// i用来控制查找的是第几条规则,j用来控制查找的规则中的第几条while(1)

{

if(r[i].used==false)

{

for(j=0;j

{

if(FindFact(r[i].Condition[j]))

{

continue;

}

else

{

cout<<"规则"<

break;

}

}

}

if(j==r[i].Cnum) ///如果所有的前件都满足

{

r[i].used=true;

cout<<"规则"<

if(!FindFact(r[i].Result))

{

InsertIntoFact(r[i].Result);///插入事实

cout<<"新增加的事实为:"<

}

i=0;

//continue;

}

else i++;//查看下条规则

if(i==n)

{

cout<<"没有你要找符合要求的动物,请增加新的规则"<

break;

}

else if(strcmp(f.item[f.Fnum-1],"老虎")==0||strcmp(f.item[f.Fnum-1],"金钱豹")==0||strcmp(f.item[f.Fnum-1],"长颈鹿")==0||strcmp(f.item[f.Fnum-1],"斑马")==0||strcmp(f.item[f.Fnum-1],"鸵鸟")==0||strcmp(f.item[f.Fnum-1],"企鹅")==0||strcmp(f.item[f.Fnum-1],"海燕")==0)

{

cout<<"与你给的事实匹配的动物:"<

break;

}

}

}

//查看综合数据库中的事实否否等于前件,或者是存在这条事实,那么新的结论就不用加到综合数据库中

bool FindFact(char * str)

{

int i;

for(i=0;i

{

if(strcmp(f.item[i],str)) continue;

else return true;

}

return false;

}

//插入新的事实

void InsertIntoFact(char * str)

{

相关文档