重庆大学人工智能作业(动物识别系统)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
人工智能及其应用作业姓名:学号:
一、作业题目:设计一个动物识别系统,运用产生式系统的思想,设在综合数据库中存放下列已知事实:该动物身上有暗斑点,长脖子,长腿,奶,蹄,这些事实与规则库中的知识从第一条开始匹配,最终得出该动物是长颈鹿。
二、程序设计分析:根据产生式系统的原理,该系统一般由规则库、综合数据库、控制系统三部分构成。先定义规则库结构体,里面包括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< Ratiocinate(Rnum); } 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;