专家系统实验报告(MFC实现)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的编程应用有了进一步的了解。另外,我也从中认识到了自己在编程方面的许多不足,这也给了我动力去扩充自己的知识储备,从而能够更好的应对以后更多的课程作业。