动物识别系统.docx

上传人:b****1 文档编号:23292220 上传时间:2023-05-16 格式:DOCX 页数:27 大小:537.42KB
下载 相关 举报
动物识别系统.docx_第1页
第1页 / 共27页
动物识别系统.docx_第2页
第2页 / 共27页
动物识别系统.docx_第3页
第3页 / 共27页
动物识别系统.docx_第4页
第4页 / 共27页
动物识别系统.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

动物识别系统.docx

《动物识别系统.docx》由会员分享,可在线阅读,更多相关《动物识别系统.docx(27页珍藏版)》请在冰豆网上搜索。

动物识别系统.docx

动物识别系统

学生实验报告

实验课名称:

人工智能

实验项目名称:

产生式系统实验

专业名称:

计算机科学与技术

班级:

2012240201

学号:

12

学生姓名:

雷彬

教师姓名:

陈亮亮

2014年12月10日

实验日期:

2012年_J2_月J0_日实验室名称:

明远2202

1.实验名称:

产生式系统实验

2.实验目的与要求:

1、确定推理方法(正向还是反向),并根据问题设计实现一个简单的不通用推理机(匹配、冲突消解)

2、规则库要求至少包含15条规则

3、初始事实可以任意给定,输入初始事实后能够得到推理结果

4、设计人机界面,解释模块提供查询规则的功能

5、可以不考虑知识库管理模块

6提交实验报告

7、报告中要有推理树

3.实验内容:

动物识别专家系统是流行的专家系统实验模型,它用产生式规则来表示知识,共15条规则、可以识别七种动物,这些规则既少又简单,可以改造他们,也可以加进新的规则,还可以用来识别其他东西的新规则来取代这些规则。

四.算法描述:

动物识别的15条规则:

规则

1:

如果:

动物有毛发

则:

该动物是哺乳动物

规则

2:

如果:

动物能产奶

则:

该单位是哺乳动物

规则

3:

如果:

该动物有羽毛

则:

该动物是鸟

规则

4:

如果:

动物会飞,且会下蛋

则:

该动物是鸟

规则

5:

如果:

动物吃肉

则:

该动物是肉食动物

规则

6:

如果:

动物有犬齿,且有爪,

且眼盯前方贝该动物是食肉动物

规则

7:

如果:

动物是哺乳动物,

且有蹄

则:

该动物是有蹄动物

规则

8:

如果:

动物是哺乳动物,

且是反刍动物

则:

该动物是有蹄动物

规则

9:

规则

规则

规则

规则

规则

规则

如果:

贝该动物是豹

10:

如果:

动物是黄褐色的,贝该动物是虎

11:

如果:

动物有暗斑点,且有长腿,且有长脖子,且是有蹄类贝该动物是长颈鹿

12:

如果:

动物有黑条纹,且是有蹄类动物贝该动物是斑马

13:

如果:

动物有长腿,且有长脖子,且是黑色的,且是鸟,且不会飞贝该动物是鸵鸟

14:

如果:

动物是鸟,且不会飞,且会游泳,且是黑色的贝该动物是企鹅

15:

如果:

动物是鸟,且善飞则:

该动物是信天翁

动物是哺乳动物,

且是食肉动物,

且是黄褐色的,且有暗斑点

且是哺乳动物,且是食肉,且有黑条纹

 

首先给定初始事实,将初始事实放入动态数组中,并用初始事实与15条规则进行匹配,如果规则匹配成功,将规则的后件存入数组中,再用数组中所有的元素与规则进行匹配,满足即加入数组,直到匹配出动物。

如果给定初始事实能推出多种动物,按照数组中条件的先后顺序,顺序循环匹配规则,先匹配出哪种动物就显示该动物。

5.源程序:

//MFC_AnimalDlg.cpp:

实现文件

#include

"stdafx.h"

#include

"MFC_Animal.h"

#include

"MFC_AnimalDlg.h"

#include"afxdialogex.h"

#ifdef_DEBUG

#definenewDEBUG_NEW

#endif

//用于应用程序“关于”菜单项的CAboutDlg对话框

classCAboutDlg:

publicCDialogEx

{

public:

CAboutDlg。

//对话框数据

enum{IDD=IDD_ABOUTBC}X

protected:

virtualvoidDoDataExchange(CDataExchang@pDX);//DDX/DDV支持

//实现

protected:

DECLAREMESSAGE)MAP

};

CAboutDlg:

:

CAboutDlg():

CDialogEx(CAboutDlg:

:

IDD)

{

}voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX)

{

CDialogEx:

:

DoDataExchange(pDX);

}

BEGIN_MESSAGE_MCPboutDlg,CDialogEx)END_MESSAGE_MAP

//CMFC_AnimalDlg对话框

CMFC_AnimalDlg:

CMFC_AnimalDlg(CWndpParent/*=NULL*/)|:

CDialogEx(CMFC_AnimalDlg:

IDD,pParent)

{

mhlcon=AfxGetApp()->LoadIcon(IDRMAINFRAME

}

voidCMFC_AnimalDlg:

DoDataExchange(CDataExchange*pDX)

{

CDialogEx:

:

DoDataExchange(pDX);

DDXControl(pDX,IDCCOMBOmpoint1);

DDXControl(pDXIDCCOMBOmpoint2);

DDX_Control(pDXIDC_COMBOm_point3);

DDX_Control(pDXIDC_COMBOm_point4);

DDX_Control(pDXIDC_COMBOm_point5);

DDXControl(pDXIDCCOMBOmpoint6);

DDX_Control(pDXIDC_COMBOm_point7);

}

BEGIN_MESSAGE_MAPFC_AnimalDlgCDialogEx)

ON_WM_SYSCOMMAND

ON_WM_PAINT

ON_WM_QUERYDRAG)CON

ONBNCLICKEIDCBUTTON2CMFCAnimalDlg:

OnClickedButton2)ON_BN_CLICKEIDC_BUTTON&CMFC_AnimalDlg:

OnClickedButton1)END_MESSAGE_MAP

//CMFCAnimalDlg消息处理程序BOOLCMFC_AnimalDlg:

OnlnitDialog(){

CDialogEx:

:

OnlnitDialog();

//将“关于…”菜单项添加到系统菜单中。

//IDM_ABOUTBOX必须在系统命令范围内。

ASSERTIDM_ABOUTBOX3xFFFO)==IDM_ABOUTBOXASSER(HDM_ABOUTBOX)xFOOO);

CMenUpSysMenu=GetSystemMenu(FALSE;if(pSysMenu!

=NULL

{

ASSER(bNameValid);

if(!

strAboutMenu.lsEmpty())

{

pSysMenu->AppendMenuMF_SEPARATOR

pSysMenu->AppendMenuMF_STRIN,GIDM_ABOUTBOXrAboutMenu);

}

}

//设置此对话框的图标。

当应用程序主窗口不是对话框时,框架将自动

//执行此操作

SetIcon(mhlcon,TRUE//设置大图标

SetIcon(m_hlcon,FALSE;//设置小图标

//TODO:

在此添加额外的初始化代码

m_point1.SetCurSel(0);

//设置组合框的默认值为第一项

m_point2.SetCurSel(0);

m_point3.SetCurSel(0);

m_point4.SetCurSel(0);

mpoint5.SetCurSel(0);

mpoint6.SetCurSel(0);

mpoint7.SetCurSel(0);

returnTRUE〃除非将焦点设置到控件,否则返回TRUE

}

voidCMFC_AnimalDlg:

OnSysCommandUINTnID,LPARAMParam)if((nID&0xFFF0)==IDM_ABOUTBpX

{

CAboutDlgdlgAbout;

dlgAbout.DoModal();

}

else

{

CDialogEx:

:

OnSysCommand(ilD,IParam);

}

}

//如果向对话框添加最小化按钮,则需要下面的代码

//来绘制该图标。

对于使用文档/视图模型的MFC应用程序,

//这将由框架自动完成。

voidCMFCAnimalDlg:

OnPaint()

{

if(IsIconic())

{

CPaintDCdc(this);//用于绘制的设备上下文

SendMessageWM」CONERASEBKGtemterpret_cast

//使图标在工作区矩形中居中

intcxlcon=GetSystemMetrics(

smcxicon

intcylcon=GetSystemMetrics(

SM_CYICON

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cylcon+1)/2;

//绘制图标

dc.DrawIcon(x,y,mhlcon);

}

else

{

CDialogEx:

:

OnPaint();

}

}

//当用户拖动最小化窗口时系统调用此函数取得光标//显示。

HCURSORMFC_AnimalDlg:

OnQueryDraglcon(){

returnstatic_cast

}

voidCMFC_AnimalDlg:

OnClickedButton2()

{

//TODO:

在此添加控件通知处理程序代码

((CListBox*)GetDlgltem(IDC_LIST1))->ResetContent();inti,j,n;

intflag=1;

boolcheck=true;

CStringmsg;

CStringpoint[7];

CStringFact[10];

intk=-1;

mpoint1.GetWindowText(point[0]);

m_point2.GetWindowText(point[1]);

mpoint3.GetWindowText(point[2]);

mpoint4.GetWindowText(point[3]);

m_point5.GetWindowText(point[4]);

mpoint6.GetWindowText(point[5]);m_point7.GetWindowText(point[6]);

|for(i=0;i<=5;i++)

{

if(point[i]!

="无")

{

|for(j=i+1;j<=6;j++)

匚{

if(point[i]==point[j])

{check=false;

}丨

|}I

}

}

if(check==false)

{

MessageBoXL"特征不能一样!

");

//初始事实放入综合数据库中

}else{

for(i=0;i<=6;i++)

"无")

if(point[i]!

={

k++;

Fact[k]=point[i];

IDC_LIST1))->InsertString(k,point[i]);

((CListBox*)GetDlgltem(

 

}

〃R1

 

if(Fact[i]=="有毛发"){

msg="哺乳动物“;

((CListBox*)GetDlgItem(IDC_LIST1))->InsertString(k+1,msg);k++;

Fact[k]=msg;

}

}

if(Fact[i]=="有奶")

{

msg="哺乳动物“;

((CListBox*)GetDlgItem(IDC_LIST1))->InsertString(k+1,msg);k++;

Fact[k]=msg;

}丨

|}I

}

//Sleep(IOOO);

for(i=0;i<=k;i++)〃R3

{

if(Fact[i]=="有羽毛")

{

msg="鸟";

((CListBox*)GetDlgItem(IDCLIST1))->InsertString(k+1,msg);

k++;

Fact[k]=msg;

}

"鸟")〃R4

for(i=0;i<=k;i++){

if(Fact[i]=="会飞")

if(n==2)

{

msg="鸟";

((CListBox*)GetDlgltem(IDCLIST1))->InsertString(k+1,msg);

k++;

Fact[k]=msg;

}

if(Fact[i]=="吃肉")

{

msg="食肉动物";

((CListBox*)GetDlgItem(IDCLIST1))->InsertString(k+1,msg);

k++;

Fact[k]=msg;

}

n=0;

if(Fact[k]!

="食肉动物“)〃R6

{

for(i=0;i<=k;i++)

{

if(Fact[i]==“有犬齿“)

if(n==3)

{

msg="食肉动物”;

((CListBox*)GetDlgltem(IDC_LIST1))->InsertString(k+1,msg);

k++;

Fact[k]=msg;

}

}

for(j=O;j<=k;j++)〃R7

{

if(Fact[j]=="哺乳动物")

{

for(i=0;i<=k;i++)

I~~!

{

if(Fact[i]=="有蹄")

{I

msg="有蹄动物";

((CListBox*)GetDlgItem(IDCLIST1))->InsertString(k+1,msg);k++;

Fact[k]=msg;

|}I

}丨

}

if(Fact[k]!

="有蹄动物")〃R8

{

for(j=0;j<=k;j++)

{

if(Fact[j]=="哺乳动物“)

for(i=0;i<=k;i++)

{

if(Fact[i]=="反刍动物")

{

msg="有蹄动物";

((CListBox*)GetDlgltem(IDC_LIST1))->InsertString(k+1,msg);

k++;

Fact[k]=msg;

}

}

}

}

}

n=0;

for(j=O;j<=k;j++)〃R9

{

if(Fact[j]=="哺乳动物")

{

for(i=0;i<=k;i++)

if(n==3)

{

msg="金钱豹";

((CListBox*)GetDlgItem(IDC_LIST1))->InsertString(k+1,msg);

Fact[k]=msg;

SetDlgItemText(IDCEDIT2,msg);

CStatic*cwm=(CStatic*)GetDlgltem(IDCSHOWBITMAP

for(i=0;i<=k;i++)〃R10

{

if(Fact[i]=="哺乳动物")

{

n++;

}

if(Fact[i]=="食肉动物")

{

n++;

}

if(Fact[i]=="黄褐色")

{

n++;

}

if(Fact[i]=="有黑色条纹")

{

n++;

}

}

if(n==4)

((CListBox*)GetDlgltem(IDC_LIST1))->InsertString(k+1,msg);Fact[k]=msg;

SetDlgItemText(IDC_EDIT2,msg);

CStatic*cwm=(CStatic*)GetDlgItem(IDCSHOWBITMAPCBitmapbmpload;

bmpload.LoadBitmap(IDB_BITMAP2cwm->ModifyStyle(O,SS_BITMAPcwm->SetBitmap(HBITMA(bmpload.Detach()));

}n=0;

for(i=0;i<=k;i++)〃R11

{

if(Fact[i]=="有蹄动物")

if(n==4)

{

msg="长颈鹿";

((CListBox*)GetDlgltem(IDCLIST1))->InsertString(k+1,msg);

Fact[k]=msg;

SetDlgItemText

(IDC_EDIT2msg);

CStatic*cwm=(CStatic*)GetDlgItem(IDCSHOWBITMAP

CBitmapbmpload;

bmpload.LoadBitmap(IDB_BITMAP3cwm->ModifyStyle(O,SSBITMAPcwm->SetBitmap(HBITMA(bmpload.Detach()));

}n=0;

for(i=0;i<=k;i++)〃R12

{

if(Fact[i]=="有蹄动物")

}

msg="斑马";

((CListBox*)GetDlgltem(IDC_LIST1))->InsertString(k+1,msg);

Fact[k]=msg;

SetDlgItemText(IDC_EDIT2,msg);

CStatic*cwm=(CStatic*)GetDlgItem(IDCSHOWBITMAP

CBitmapbmpload;

}

n=0;

for(i=0;i<=k;i++)〃R13

{

if(Fact[i]=="鸟")

msg="鸵鸟((CListBox*)GetDlgltem(IDC_LIST1))->InsertString(k+1,msg);Fact[k]=msg;

SetDlgItemText(IDC_EDIT2,msg);

CStatic*cwm=(CStatic*)GetDlgItem(IDCSHOWBITMAP

CBitmapbmpload;

bmpload.LoadBitmap(IDB_BITMAP5cwm->ModifyStyle(O,SSBITMAPcwm->SetBitmap(HBITMA(bmpload.Detach()));

}

n=0;

for(i=0;i<=k;i++)〃R14

{

if(Fact[i]=="鸟")

{

n++;

}

if(Fact[i]=="不会飞")

{

n++;

}

if(Fact[i]=="黑白二色")

{

n++;

}

if(Fact[i]=="会游泳")

{

n++;

|}I

}

if(n==4)

{

msg="企鹅";

((CListBox*)GetDlgItem(IDC_LIST1))->InsertString(k+1,msg);

Fact[k]=msg;

SetDlgItemText(IDC_EDIT2,msg);

CStatic*cwm=(CStatic*)GetDlgItem(IDCSHOWBITMAPCBitmapbmpload;

bmpload.LoadBitmap(IDB_BITMAP6cwm->ModifyStyle(0,SSBITMAPcwm->SetBitmap(HBITMA(bmpload.Detach()));

n=0;

for(i=0;i<=k;i++)〃R15

{

if(Fact[i]=="鸟")

{

n++;

}

if(Fact[i]=="善飞")

{

n++;

}

((CListBox*)GetDlgltem(IDC_LIST1))->InsertString(k+1,msg);Fact[k]=msg;

SetDlgItemText(IDC_EDIT2,msg);

CStatic*cwm=(CStatic*)GetDlgItem(IDCSHOWBITMAPCBitmapbmpload;

bmpload.LoadBitmap(IDB_BITMAP7;cwm->ModifyStyle(O,SSBITMAPcwm->SetBitmap(HBITMA(bmpload.Detach()));

}

}

}

voidCMFC_AnimalDlg:

OnClickedButton1()

{

//TODO:

在此添加控件通知处理程序代码

mpoint1.SetCurSel(0);//设置组合框的默认值为第一项

mpoint2.SetCurSel(0);

m_point3.SetCurSel(0);

mpoint4.SetCurSel(0);

mpoint5.SetCurSel(0);

m_point6.SetCurSel(0);

mpoint7.SetCurSel(0);

CStringstr=NULL

SetDlgItemText(IDC_EDIT2str);

//GetDlgItem(IDCSHOWBITMAP)->SetWindowText(NULL);

((CListBox*)GetDlgItem(IDCLIST1))->ResetContent();

CStatic*cwm=(CStatic*)GetDlgltem(IDCSHOWBITM)AP

CBitmapbmpload;

bmpload.LoadBitmap(IDB_BITMAP8;cwm->ModifyStyle(0,SS_BITMAPcwm->SetBitmap(HBITMA(bmpload.Detach()));

}

6.

运行结果与分析:

动物识别系统

 

当只输入某个动物的特征时,动态数据库就只会显示与该动物有关的特征,若是给定事实中既包含了鸟类特征,还包含哺乳类特征时,动态数据库就会显

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1