动物识别专家系统(Java实现已开源)

2023-10-30

产生式系统

在这里插入图片描述

  1. 规则库
    规则库是用于描述相应领域内知识的产生式集合。它是产生式系统求解问题的基础,其中对领域知识表达的完整性、准确性、有效性,将直接影响到系统的性能和效率。因此必须要合理设计和组织规则库中的知识,检测并排除冗余或矛盾的知识。
  2. 事实库。
    事实库用于存放问题的初始事实、当前已知的信息、推理过程中形成的中间结论以及最终结论。显然,事实库的内容是动态的,是不断变化的
  3. 推理机。
    推理机由一组程序组成。它控制并协调着整个生产式系统的运行,从而实现对问题的推理求解。通常分 3 步完成:匹配、冲突解决和操作。

问题定义

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

系统实现

规则、事实和产生式的表示

识别七种动物共需要30个特征和事实,用0~29给它们编号。

String[] features = {"有毛", "产奶", "有羽毛", "会飞", "会下蛋", "吃肉", "有犬齿", "有爪", "眼睛盯前方", "有蹄",
            "反刍", "黄褐色", "有斑点", "有黑色条纹", "长脖", "长腿", "不会飞", "会游泳", "黑白两色", "善飞",
            "哺乳类", "鸟类", "肉食类", "蹄类", "企鹅", "海燕", "鸵鸟", "斑马", "长颈鹿", "虎", "金钱豹"};

产生式规则就用三维数组表示:

int[][][] expr = new int[][][]{
                {{0}, {20}},
                {{1}, {20}},
                {{2}, {21}},
                {{3, 4}, {21}},
                {{20, 5}, {22}},
                {{6, 7, 8}, {22}},
                {{20, 8}, {23}},
                {{20, 9}, {23}},
                {{22, 11, 12}, {30}},
                {{22, 11, 13}, {29}},
                {{23, 14, 15, 12}, {28}},
                // 如果动物是蹄类(23),且有黑色条纹(13),则该动物对应事实数组的第27个“斑马”
                {{23, 13}, {27}},
                {{21, 14, 15, 16}, {26}},
                {{21, 19}, {25}},
                {{21, 17, 18, 16}, {24}}};

类的设计

  1. Rule类:存放一条规则的前提和结论;能根据给定条件判断该条规则是否满足(即是否能得到该条规则的结论);
  2. RuleRepository类:存放事实库、规则库并实现推理机。
  3. AnimalIdentificationExpertSystem类:继承自JFrame,界面类。
// 规则库,存放已知的所有规则(产生式规则)	
List<Rule> rules = new ArrayList<>();
// 事实库,动态变化的
List<Integer> conditions = new ArrayList<>();

使用可变的列表,容易添加和删除已有条件、事实。

匹配顺序

在30个事实中:

    String[] features = {"有毛", "产奶", "有羽毛", "会飞", "会下蛋", "吃肉", "有犬齿", "有爪", "眼睛盯前方", "有蹄",
            "反刍", "黄褐色", "有斑点", "有黑色条纹", "长脖", "长腿", "不会飞", "会游泳", "黑白两色", "善飞",
            "哺乳类", "鸟类", "肉食类", "蹄类", "企鹅", "海燕", "鸵鸟", "斑马", "长颈鹿", "虎", "金钱豹"};

前20个是用户输入的特征,而下面的四个(“哺乳类”, “鸟类”, “肉食类”, “蹄类”)属于推理的中间结果,最后的七个(“企鹅”, “海燕”, “鸵鸟”, “斑马”, “长颈鹿”, “虎”, “金钱豹”)是最终的识别结果。

在用户输入条件到事实库后(这些条件就是事实),事实库并不是不变的

比如用户输入了0(“有毛”)、5(“吃肉”),那么其实真正的事实库是(0、5、20),因为在匹配第一条规则:{{0}, {20}}的时候,有条件0,所以可以得到规则1的结论(20),并且该结论也应当加入事实库,因为这是已经知道的了,然后匹配到规则5:{{20, 5}, {22}}时,就可以得到结论22(“肉食类”)。

所以在从上到下匹配这15条产生式规则的过程中,如果匹配了某一条产生式规则,就该把这条规则的结论加入事实库;而且也发现了匹配规则是要注意顺序的,上面的例子中如果先匹配了规则5,那么此时事实库中只有(0和5),就得不到中间结论22。

这说明规则的摆放是要有顺序的,产生某编号的规则(即结论为某编号规则)应该排在使用该编号的规则(即条件为某编号规则)之前。这15条结论是正好符合这样的顺序的。

推理机

有了上面的顺序意识之后,推理机的实现就很容易了:就是从上到下,从第一条产生式规则开始判断当前的事实库能否匹配每条规则,匹配成功,就把该条规则的结论编号加入事实库,匹配完规则库中所有产生式规则后就可以输出结论了(我的处理):

  • 中间结论(“哺乳类”, “鸟类”, “肉食类”, “蹄类”)输出到推理框中展示正向推理过程;
  • 最终结论(七种动物)框出对应的图片;

结果演示

什么结论都推不出(一条结论都没匹配上):
在这里插入图片描述
推出中间结果:
在这里插入图片描述
推出最终结果,识别到了动物:
在这里插入图片描述
在这里插入图片描述

源代码

源代码已上传至github(Java实现,IDE为IDEA)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动物识别专家系统(Java实现已开源) 的相关文章

  • 更换新硬盘,重新装回正版win10的方法

    1 添加 Microsoft 帐户并将其链接到数字许可证 这一步可以参考微软给出的官方的解决方法https support microsoft com zh cn help 20530 windows 10 reactivating aft
  • Linux 文件权限

    目录 1 查看文件权限 2 rwx 的意义 3 改变文件属性与权限 3 1 rwx 与 421 3 2 改变文件权限 chmod 3 3 改变文件所属组群 chgrp 3 4 改变文件所有者 chown Linux下一切皆文件 Linux中
  • Java JDK 安装及环境配置教程

    一 安装 1 安装包 jdk1 8安装包下载路径 2 创建一个英文的文件夹 注意 整个路径不要有中文 建议文件夹直接命名为JDK 3 在该文件夹下创建两个空文件夹 分别为 jdk1 8 和 jre 其中jdk1 8 是我的JDK版本 这个可
  • 四书 - 中庸

    天命之谓性 率性之谓道 修道之谓教 道也者 不可须臾离也 可离非道也 是故君子戒慎乎其所不睹 恐惧乎其所不闻 莫见乎隐 莫显乎微 故君子慎其独也 喜怒哀乐之未发 谓之中 发而皆中节 谓之和 中也者 天下之大本也 和也者 天下之达道也 致中和
  • 安卓子线程内存问题——有结论

    问题描述 有一套C 库 通过JNI被安卓应用调用 应用中在主线程 UI现场 调用一函数正常 在子线程中调用该函数会导致APP崩溃 APP崩溃时报错信息如下 E libsigchain exiting due to SIG DFL handl
  • 隐私政策

    本应用尊重并保护所有使用服务用户的个人隐私权 为了给您提供更准确 更有个性化的服务 本应用会按照本隐私权政策的规定使用和披露您的个人信息 但本应用将以高度的勤勉 审慎义务对待这些信息 除本隐私权政策另有规定外 在未征得您事先许可的情况下 本
  • 深入理解Java中的字符串驻留机制

    引言 在Java编程中 字符串是最常用的数据类型之一 而Java的字符串驻留 intern 机制则是字符串处理中一个重要且经常被忽视的话题 本文将带您深入探讨Java中字符串驻留机制的原理和影响因素 什么是字符串驻留机制 字符串驻留机制是指
  • module 常用命令

    原文地址 https blog csdn net l471094842 article details 90728411 Envrionment modules工具用来快速的设置和修改用户编译运行环境 Envrionment modules
  • 怎么把ipad中超大文件传输到电脑

    遇到了一个问题就是ipad文件中有几个超大压缩包需要传到电脑 想着上传到网盘在下载不是美滋滋 还特地借到了会员 为了上传大文件 但是网盘就很过分 会员在ipad端上传超过4g的文件也不允许 电脑端就没得问题 很无奈 然后问了度娘 给的各种解
  • Not allowed to load local resource: file:///D:/xxx.jpg

    问题 Not allowed to load local resource file D xxx jpg 出现以上情况的原因是浏览器不允许访问本地路径 所以你需要配置一个虚拟的路径代替本地的路径 解决方法 思路 通过tomcat代理 在to
  • 让你的DBCP连接池连接不超时

    项目使用DBCP连接池 登录系统后 一段时间没有操作 再点击其他页面就报错 the last packet send to mysql was ago 度娘一下 知道是数据库连接超时 怎么解决呢 首先想到的是MySQL数据库配置文件 mys
  • CUID卡写入错误数据被锁死——入坑NFC的一段经历

    最开始想到做NFC是还在学校上自习的时候 学校有种氛围很好的自习室 每个位置都是一个小隔间 小隔间里还有小灯和插座以及网线口 但是需要插卡取电 对就是用很普通的那种校园卡插进去就有电了 这个校园卡是NFC卡 但是学校很nt的一点是只有上一届
  • 今天开始维护个人技术博客

    快下班了才写 从零开始 不管以后技术做到哪种程度 有个记录的习惯总是好的 一起加油 April
  • C++去掉字符串前后的多余空格

    C 中std string 没有可以直接去掉字符串前后多余空格的接口 所以自己实现了一个 借鉴Qt中QString的trimmed 函数源码实现的版本 去掉std string 字符串前后的空格 void string trimmed st
  • volatility内存取证分析与讲解(持续更新)

    volatility内存取证分析与讲解 0x01 volatility的安装 0x02 基本使用 0x03 取证实战 持续更新 0x04 总结 0x01 volatility的安装 本人暂时只使用windows下的volatility进行取
  • ‘settings.xml‘ has syntax errors 解决办法

    settings xml has syntax errors 解决办法 文章目录 settings xml has syntax errors 解决办法 参考链接 又是一个小知识点 pom xml中的
  • 没有权限删除文件

    通过远程发版时 有可能会没有权限删除文件 如下解决方法 1 将user 用户切换root 用户 sudo su root 该方法不一定成功 因为有可能设置权限你不能切换 但成功以后一劳永逸 当方法1没有成功时 采用如下方法 2 将你所操作的
  • Json的float单精度浮点数类型支持Can't assign value '11.88' (type System.Double) to type System.Single

    今天遇到个问题Can t assign value 11 88 type System Double to type System Single litjson不支持单精度浮点数float 只用修改JsonMapper cs脚本就可以 一共
  • tf1.x和tf2.x查看TFRecord数据的方法

    Tensorflow 1 x和Tensorflow 2 x读取tfrecord方法略有不同 下面分别记录两段代码 Tensorflow 1 x for example in tf python io tf record iterator p
  • Java数组复制的四种方法

    数组的复制 有四种方法 for clone System arraycopy arrays copyof 均是浅拷贝 1 for 源数组 int source 10 30 20 40 目标数组 int target new int sour

随机推荐

  • 云计算、大数据、人工智能时代,为什么不能错过Linux?

    随着这些年互联网技术的迅猛发展 在快速步入大数据 云计算 虚拟技术和人工智能时代 技术为王现象在信息科技领域越来越凸显出来 随之而来的是高端Linux运维人才出现了极度紧缺的现象 为什么要选择Linux 说起Linux 大家可能都知道好 优
  • 免费开源的箱包制造行业ERP管理系统介绍

    用Odoo免费开源ERP按需打造可持续商业模型 广东百立皮具是一家集生产 采购 定制 销售为一体的箱包及配饰贸易公司 专营各类箱包皮革制品 产品业务规模遍布全世界 百立皮具距今运营已有十余年之久 拥有千余名员工 且在多国都开设了分公司 多年
  • matplotlib中堆积图、分块图、气泡图的绘制

    本文介绍matplotlib中堆积图 分块图 气泡图的绘制 堆积图的绘制 堆积图常用于综合展示不同分类的指标趋势以及它们的总和的趋势 比如说 我们想看一下5名同学期末的总分情况 同时 我们又想看一下这5名同学的各科成绩以及它们各自的占比 这
  • uni-app——小程序实现本地图片的上传以及身份证的智能识别

    文章目录 前言 一 示例图 二 实现过程 1 完成提交图片的api地址 2 获取本地图片 3 将本地图片上传至开发者服务器 三 具体实现代码 四 身份证的智能识别 总结 前言 上传本地图片的功能很常见 那么具体该如何实现呢 一 示例图 二
  • 顶尖程序员的五种思维模式

    一 勇于研究你不懂的代码 通过研究不同的代码 从而熟悉不同的代码结构和设计模式 二 精通代码调试 几乎所有的代码都不是一遍写好 学会怎么去调试代码 三 重视能够节约时间的工具 工具是很重要的 它们能帮我们节省大量的时间 四 优化你的迭代速度
  • python调用自己写的py文件

    目录 python如何调用自己写的py文件呢 如果是不同目录怎么调用呢 如果需要调用的多个文件在多个目录呢 关于 init py的解释 关于sys path的解释 python如何调用自己写的py文件呢 同一个目录下直接写import xx
  • IP地址网段表示法

    http blog sina com cn s blog 4a1d691b010004qx html 1 IP地址 共分为四类 A B C D类 各类范围详见RFC参考 2 子网掩码 子网掩码的作用是用来表示IP地址中的多少位用来表示主机号
  • 23种设计模式之模板模式

    文章目录 概述 模版模式的优缺点 优点 缺点 模版模式的使用场景 模板模式的结构和实现 模式结构 模式实现 总结 概述 模板模式指 一个抽象类中 有一个主方法 再定义1 n个方法 可以是抽象的 也可以是实际的方法 定义一个类 继承该抽象类
  • 深入学习jquery源码之jQuery的构造函数与实例化

    深入学习jquery源码之jQuery的构造函数与实例化 创建jQuery对象的整个流程如下 1 调用 方法 2 调用jQuery prototype init 构造函数 3 根据选择器不同返回不同的jQuery对象 4 不同jQuery对
  • java web中servlet详解_javaWeb之Servlet详解

    Servlet详解 1 servlet简单介绍 servlet是javaweb三大组件之一 他与filter listener 共同组成了javaweb的三大组件 Servlet Server Applet 是Java Servlet的简称
  • 成员变量和局部变量

    成员变量和局部变量的区别 1 成员变量是独立于方法外的变量 局部变量是类的方法中的变量 成员变量 包括实例变量和类变量 用static修饰的是类变量 不用static修饰的是实例变量 所有类的成员变量可以通过this来引用 2 局部变量 包
  • arthas底层实现原理剖析

    前言 经常在应用的启动或者运行过程中需要动态的查看数据 或者实时的验证我们写的代码的结构与执行过程 此时需要一种工具能够动态的检测程序运行的状态 内存数据 线程情况 最好能够动态的替换代码实时生效 方便我们从日志或者其他埋点断言我们的猜测
  • 机器视觉解决方案 首选诺威特

    机器视觉解决方案 首选诺威特 诺威特简介 诺威特 NOVTEC 成立于2003年 总部位于江苏苏州 是专业从事测试解决方案的高科技企业 为企业和研究机 构提供大量高端的测试仪器设备解决方案 使用人工智能Artificial intellig
  • QT 使用QZXing生成,解析二维码跟条码

    1 下载QZXing库 为什么要下载QZXing库 而不直接使用编译好的库文件 因为每个人使用的编译环境是不一样的 使用的编译器也不尽相同 不同编译器编译出来的库放到不同编译器下则不一定能够使用 至少我是这么理解的 使用别人的也经常出现崩溃
  • 【华为OD机试】告警抑制【2023 B卷

    时间限制 C C 1秒 其他语言 2秒 空间限制 C C 262144K 其他语言524288K 64bit IO Format lld 语言限定 C clang11 C clang 11 Pascal fpc 3 0 2 Java jav
  • vbs中遍历子目录寻找特定文件

    转载 https blog csdn net hywerr article details 70228086 递归函数如下 Function FileExsitInDirectory fso As Object filename As St
  • 64位操作系统(WIN10)+32位LabVIEW(2020)+64位MySQL,Windows10系统下用32位ODBC连接MySQL

    1 首先得安装 Connector ODBC 就是MySQL的ODBC驱动 这个是与应用程序相关的 而不是与操作系统相关的 也就是说 不管你的系统是X64还是X86 只要你的应用程序是X86的那么 Connector ODBC 就要安装X8
  • cordova环境搭建以及打包apk

    1 安装node JS 2 安装ant 载连接 http ant apache org 下载完成之后解压到你想安装的目录 比如D ant 然后将目录添加到系统变量里 步骤如下 右击我的电脑 点击属性 左侧菜单点击高级系统设置 在弹窗中点击环
  • 【发现】国产007里面星爷挖子弹时看的电影~~~~

    Educating Mandy 春潮烂漫海棠红 影片名称 Educating Mandy 春潮烂漫海棠红 主演女优 Traci Lords 翠希 劳艾德 呵呵 今天逛论坛的时候看到了 转载于 https www cnblogs com bo
  • 动物识别专家系统(Java实现已开源)

    动物识别专家系统 产生式系统 问题定义 系统实现 规则 事实和产生式的表示 类的设计 匹配顺序 推理机 结果演示 源代码 产生式系统 规则库 规则库是用于描述相应领域内知识的产生式集合 它是产生式系统求解问题的基础 其中对领域知识表达的完整