小言_互联网的博客

基于产生式规则的动物识别系统

514人阅读  评论(0)

基于产生式规则的动物识别系统

先放效果图

  • 控制台

推理失败截图:
推理成功截图:

  • MFC

    推理失败截图:

    推理成功界面:


    实验目的:
    熟悉一阶谓词逻辑和产生式表示法,掌握产生式系统的运行机制,以及基于规则推理的基本方法。运用所学知识,设计并编程实现一个基于产生式系统的小型专家系统
    实验要求:
    具体实验内容根据自己兴趣设计并实现一个基于产生式系统的某领域的小型专家系统。
    1.具体应用领域根据自己兴趣选择;具体系统名称自定;编程语言不限,使用自己擅长的语言。
    2.确定推理方法,根据问题设计并实现一个简单的推理机(要求涉及:匹配、冲突消解)。
    3.规则库要求至少包含15条规则;查询资料了解:知识规则如何存储,都有哪些可行方案和方法,选择、比较后确定适合自己系统的知识规则存储方法。
    4.推理机和知识库必须分离,在不修改推理机程序的前提下,能够向知识库添加、删除、修改规则。
    5.设计合理的人机交互界面。

功能设计与实现

  1. 建立规则库与目标库
    规则库与目标库是在程序运行之前,由专家提供,以txt文本方式保存在运行目录下。
    目标库如图所示:

    规则库如图所示:

  2. 建立与显示知识库
    知识库包括规则库中所有的特征信息,建立动态数组feature,逐行逐个读取规则库的特征,判断特征是否已存在数组feature中,若不存在,则将该特征加入动态数组feature中。
    建立Listbox Control用于显示知识库,并对该控件添加变量,变量名为m_feature。

  3. 读取已知事实
    创建动态数组message,将用户选择的已知事实放入数组message中。

  4. 推理
    用动态数据库message中的事实与目标库animal匹配,若匹配成功,则输出目标,推理成功。取待测试规则与动态数据库进行匹配,若规则的前件全部在动态数据库中,则将该规则加入冲突集,并且标记该规则已测试。若冲突集为空,则推理失败,若冲突集为1,则将该规则加入临时动态数据库,若冲突集大于1,说明产生冲突,选择前件最长的规则加入临时动态数据库。若动态数据库中的特征不在已知事实库中,则加入,否则不加入。

流程图:

算法描述:

  1. 将初始事实置入动态数据库;
  2. 用动态数据库中的事实,匹配目标条件,若目标条件满足,则推理成功,结束;
  3. 用待测试规则集中各规则的前件匹配动态数据库中的事实,将匹配成功的规则组成冲突集;
  4. 若冲突集为空,则运行失败,退出;
  5. 对冲突集做冲突消解,对选择执行的各规则,将其结论加入动态数据库,或执行其动作,转至2。

源码下载地址:
控制台代码:
https://download.csdn.net/download/weixin_39644536/11422033
MFC代码:
https://download.csdn.net/download/weixin_39644536/11422085


转载:https://blog.csdn.net/weixin_39644536/article/details/97019752
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场