专家系统实验报告(MFC实现)

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

学生实验报告

科目名称:人工智能

实验项目名称:专家系统

专业名称:计算机科学与技术

班级:计算机一班

学号: 201124020105

学生姓名:高修

教师姓名:陈亮亮

2013年12月6日

一、实验名称:一个关于球星猜测的专家系统

二、实验环境:VC++6.0

三、实验目的与要求:

目的:

通过实现一个简单的不通用的基于回溯推理的专家系统,来理解产生式系统的推理的基本思想和过程。

要求:

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

用推理机(匹配、冲突消解)

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

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

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

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

6、提交实验报告

7、报告中要有推理树

专家系统结构图

四、实验内容和程序设计思想

我利用产生式系统做了一个球星猜测系统,根据一些条件,推理出某位球星。首先,规定了一些初始事实,然后制定15条推理规则,根据规则库进行正向推理,得出结论。本次实验采用的是正向推理的方法,是从已知事实出发,通过规则库求得结论,也称为自底向上,或称为数据驱动方式。

这种推理方式是正向使用原则,即问题的初始状态作为初始数据库,在仅当数据库中的事实满足某条规则的前提时,这条规则才能够被使用。程序中采用的是基于用户按照规则点击,逐步得出结果的。

正向推理的流程图

五、程序实现过程

初始事实:

1)金球奖热门

2)进攻风格(进攻犀利、传球精准、防守稳健)

3)地区(欧洲、南美、亚洲)

4)性格(张扬、低调)

5)特技(电梯球、各种高难度、手术刀般的传球、马赛回旋)

6)事迹(国际足联主席得罪了他、中国第二个亚洲足球先生、天体之王、

打破年度进球记录、人称足坛吕布)

规则库:

R1:IF进攻犀利 THEN 前场球员

R2:IF传球精准 THEN 中场球员

R3:IF防守稳健 THEN 后场球员

R4:IF金球奖热门 THEN 梅西、C罗、里贝里之一

R5:IF南美 AND 金球奖热门 THEN 梅西

R6:IF欧洲 AND 金球奖 THEN C罗、里贝里之一

R7:IF欧洲 AND 金球奖 AND 张扬 THEN C罗

R8:IF欧洲 AND 金球奖 AND 低调 THEN 里贝里

R9:IF欧洲AND前场球员AND电梯球AND国际足联主席得罪了他THEN C罗

R10:IF南美AND低调AND前场球员AND打破年度进球记录THEN 梅西

R11:IF欧洲AND前场球员AND各种高难度AND人称足坛吕布THEN 伊布R12:IF欧洲AND中场球员AND手术刀般的传球 THEN 厄齐尔

R13:IF欧洲AND中场球员AND马赛回旋THEN齐达内

R14:IF南美AND中场球员AND低调AND天体之王 THEN 孔卡

R15:IF亚洲AND后场球员 AND中国第二个亚洲足球先生 THEN 郑智

推理树(以R9为例):

六、程序演示结果主界面如下:

推理结果如下(以推理规则R9为例):

七、程序关键代码

void CMyDlg::OnOK()

{

// TODO: Add extra validation here

UpdateData(TRUE);

if(m_diqu=="欧洲"&&m_jinqiu==1&&m_xingge=="张扬")

MessageBox("这位球星是C罗");

else if(m_diqu=="欧洲"&&m_jinqiu==1&&m_xingge=="低调")

MessageBox("这位球星是里贝里");

else if(m_diqu=="欧洲"&&m_jinqiu==1)

MessageBox("C罗、里贝里都有可能,请输入更详细的筛选条件");

else if(m_diqu=="南美"&&m_jinqiu==1)

MessageBox("这位球星是梅西");

else if(m_jinqiu==1)

MessageBox("梅西、C罗、里贝里都是热门人选,请输入更详细的筛选条件");

else if(m_diqu=="欧洲"&&m_jingong==1&&m_teji=="电梯球

"&&m_shiji=="国际足联主席得罪了他")

MessageBox("这位球星是C罗");

else if(m_diqu=="南美"&&m_xingge=="低调

"&&m_jingong==1&&m_shiji=="打破年度进球记录")

MessageBox("这位球星是梅西");

else if(m_diqu=="欧洲"&&m_jingong==1&&m_teji=="各种高难度

"&&m_shiji=="人称足坛吕布")

MessageBox("这位球星是伊布");

else if(m_diqu=="欧洲"&&m_zhugong==1&&m_teji=="手术刀般的传球")

MessageBox("这位球星是厄齐尔");

else if(m_diqu=="亚洲"&&m_fangshou==1&&m_shiji=="中国第二个亚洲足球先生")

MessageBox("这位球星是郑智");

else if(m_diqu=="南美"&&m_xingge=="低调

"&&m_zhugong==1&&m_shiji=="天体之王")

MessageBox("这位球星是孔卡");

else if(m_diqu=="欧洲"&&m_zhugong==1&&m_teji=="马赛回旋") MessageBox("这位球星是齐达内");

else if(m_jingong==1)

MessageBox("该球星活动区域为前场");

else if(m_zhugong==1)

MessageBox("该球星活动区域为中场");

else if(m_fangshou==1)

MessageBox("该球星活动区域为后场");

//CDialog::OnOK();

}

八、总结与体会

通过做这次专家系统的实验,我对正向推理方式有了更深的理解。同时,通过做人机界面,我对MFC的编程应用有了进一步的了解。另外,我也从中认识到了自己在编程方面的许多不足,这也给了我动力去扩充自己的知识储备,从而能够更好的应对以后更多的课程作业。

相关文档
最新文档