专家系统实验
- 格式:doc
- 大小:160.50 KB
- 文档页数:11
学生实验报告2010 年10 月27 日一、实验名称:一个关于爱情之路的测试的小型专家系统二、实验目的与要求:目的:通过实现一个简单的不通用的基于回溯推理的专家系统,来理解产生式系统的推理的基本思想和过程。
要求:1、确定推理方法(正向还是反向),并根据问题设计实现一个简单的不通用推理机(匹配、冲突消解)2、规则库要求至少包含15条规则3、初始事实可以任意给定,输入初始事实后能够得到推理结果4、设计人机界面,解释模块提供查询规则的功能5、可以不考虑知识库管理模块6、提交实验报告7、报告中要有推理树三、实验内容:本实验我是设计了一个关于爱情之路的测试的小型专家系统,主要是根据一些观察到的事实,依据系统给出的一系列规则来进行回溯处理,逐渐的推导出结果。
本次实验设计了一个简单的不通用推理机,推理机给出的推理结果是“”。
专家系统的系统结构包括:知识库,推理机,动态数据库,人机界面,解释模块,知识库管理模块。
专家系统结构图四、程序设计思想本次实验采用的是正向推理的方法,是从已知事实出发,通过规则库求得结论,也称为自底向上,或称为数据驱动方式。
这种推理方式是正向使用原则,即问题的初始状态作为初始数据库,在仅当数据库中的事实满足某条规则的前提时,这条规则才能够被使用。
程序中采用的是基于用户按照规则点击,逐步得出结果的。
正向推理的步骤步1 将初始事实置入动态数据库;步 2 用动态数据库中的事实,匹配目标条件,若目标条件满足,则推理成功,结束。
步3 用规则库中各规则的前件匹配动态数据库中的事实,将匹配成功的规则组成冲突集;步4 若冲突集为空,则运行失败,退出。
步5 对冲突集做冲突消解,对选择执行的各规则,将其结论加入动态数据库,或执行其动作,转步2。
正向推理的流程图五、程序实现过程初始事实:设计邂逅体贴容让送花有责任心勤奋努力明确表示不百依百顺规则:R1:if请人介绍then认识R2:if参加聚会 then认识R3:if搭讪 then 认识R4:if设计邂逅 then 认识R5:if认识∧一起自习then交往R6:if认识∧送花then交往R7:if认识∧约会then 交往R8:if 交往∧(有责任心Ⅴ踏实可靠) then赢得好感R9:if 交往∧(温柔善良Ⅴ善解人意) then赢得好感R10:if交往∧勤奋努力 then 赢得好感R11:if交往∧阳关活泼then 赢得好感R12:if赢得好感∧暗示then确立恋爱关系R13:if赢得好感∧明示then确立恋爱关系R14:if赢得好感∧牵手then确立恋爱关系R15:if恋爱关系∧体贴容让∧不百依百顺then建立长期关系推理过程:初始事实写入动态数据库{设计邂逅,体贴容让,送花,有责任心,勤奋努力,明确表示,不百依百顺}推理过程:(推理树)六、 程序显示结果主界面如下:结果如下:七、体会与总结八、程序片段void CRengongDlg::OnCheck1(){// TODO: Add your control notification handler code here//shishi[0]=1;int state = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();if(state==BST_CHECKED){shishi[0]=1;}elseif(state==BST_UNCHECKED){shishi[0]=0;shishi[7]=0;}}void CRengongDlg::OnCheck2(){// TODO: Add your control notification handler code here//shishi[1]=1;int state = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();if(state==BST_CHECKED){shishi[1]=1;//MessageBox("sdf","dafadsf",MB_OK);}elseif(state==BST_UNCHECKED){shishi[1]=0;shishi[8]=0;}}void CRengongDlg::OnCheck3(){// TODO: Add your control notification handler code here//shishi[2]=1;int state = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();if(state==BST_CHECKED){shishi[2]=1;}elseif(state==BST_UNCHECKED){shishi[2]=0;shishi[8]=0;}}void CRengongDlg::OnCheck4(){// TODO: Add your control notification handler code here //shishi[3]=1;int state = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();if(state==BST_CHECKED){shishi[3]=1;}elseif(state==BST_UNCHECKED){shishi[3]=0;shishi[8]=0;}}void CRengongDlg::OnCheck5(){// TODO: Add your control notification handler code here //shishi[4]=1;int state = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();if(state==BST_CHECKED){shishi[4]=1;//MessageBox("sdf","dafadsf",MB_OK);}elseif(state==BST_UNCHECKED){shishi[4]=0;shishi[9]=0;}}void CRengongDlg::OnCheck6(){// TODO: Add your control notification handler code here //shishi[5]=1;int state = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();if(state==BST_CHECKED){shishi[5]=1;//MessageBox("sdf","dafadsf",MB_OK);}elseif(state==BST_UNCHECKED){shishi[5]=0;shishi[10]=0;}}void CRengongDlg::OnCheck7(){// TODO: Add your control notification handler code here//shishi[6]=1;int state = ((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck();if(state==BST_CHECKED){shishi[6]=1;//MessageBox("sdf","dafadsf",MB_OK);}elseif(state==BST_UNCHECKED){shishi[6]=0;shishi[11]=0;}}void CRengongDlg::OnOK(){// TODO: Add extra validation hereif(shishi[0]==1){MessageBox("认识!");shishi[7]=1;}if((shishi[7]==1)&&(shishi[2]==1)){MessageBox("交往!");shishi[8]=1;}if((shishi[8]==1)&&(shishi[4]==1)){MessageBox("赢得好感!");shishi[9]=1;}if((shishi[9]==1)&&(shishi[5]==1)){MessageBox("确立恋爱关系!");shishi[10]=1;}if((shishi[10]==1)&&(shishi[1]==1)&&(shishi[6]==1)){MessageBox("建立长期关系!");shishi[11]=1;}// CDialog::OnOK();}void CRengongDlg::OnCancel(){// TODO: Add extra cleanup hereCDialog::OnCancel();/*for(int i=0;i<15;i++){shishi[i]=0;}*/}。