• 考察 产生式系统
  • 代码没写GUI,因为不喜欢这玩意,直接在终端中进行人机交互。使用代码之前,请根据自身情况对字符编码、文件路径进行修改
  • 代码写的很烂,以后有能力了再把算法加进去优化代码吧

产生式系统

  • 规则库:用于描述相应领域内知识的产生式系统
  • 综合数据库,又称为事实库、上下文、黑板:一个用于存放问题求解过程中各种当前信息的数据结构
  • 控制系统,又称推理机构:由一组程序组成,负责整个产生式系统的运行,实现对问题的求解

控制系统:

  1. 从规则库中选择前提与综合数据库中的已知事实进行匹配
  2. 匹配成功的规则可能不止一条,进行冲突消解 (出题者对题目进行过设置,没有出现冲突)
  3. 执行某一规则时,如果其右部是一个或多个结论,则把这些结论加入到综合数据库中;如果其右部是一个或多个操作,则执行这些操作
  4. 对不确定性知识,在执行每一条规则时还要按一定算法计算结论的不确定性 (由于只是考察产生式系统,出题者对题目进行过简化,题目中没有涉及这部分内容)
  5. 检查综合数据库中是否包含了最终结论,决定是否停止系统的运行

第一问

先根据题图,创建规则库(使用了一个文本文件)

if 有毛发 then 哺乳动物
if 有乳 then 哺乳动物
if 吃肉 then 食肉动物
if 有犬齿 and 有爪 and 眼向前方 then 食肉动物
if 哺乳动物 and 有蹄 then 有蹄类
if 哺乳动物 and 反刍动物 then 有蹄类
if 哺乳动物 and 食肉动物 and 黄褐色 and 暗斑点 then 豹子
if 哺乳动物 and 食肉动物 and 黄褐色 and 黑条纹 then 老虎
if 有蹄类 and 长脖子 and 长腿 and 暗斑点 then 长颈鹿
if 有蹄类 and 黑条纹 then 斑马

代码:

rules = {} # 以字典形式存储规则"""
读取规则库文件中规则,并存放在rules字典中- 字典的键:前提- 字典的值:结论
"""
def readRules(filePath):global rulesfor line in open(filePath, mode = 'r', encoding = 'utf-8'):line = line.replace('if', '').strip()temp = line.split(' then ')premise = temp[0]conclusion = temp[1]rules[premise] = conclusion"""
2. 推理机用这些事实(即:facts变量),依次与知识库中的规则的前提匹配- 注意:匹配成功的规则可能不止一条,进行冲突消解(本代码没有这个功能)- 代码很简单,没有对综合数据库进行设置
3. 若某规则的前提全被事实满足,则规则可以得到运用
4. 规则的结论部分作为新的事实存储
5. 用更新过的事实再与其它规则的前提匹配,直到不再有可匹配的规则为止
"""
def matchRules(facts): print()# 循环匹配isEnd = Falsedef loop():global rulesnonlocal facts, isEndrules_copy = rules.copy()i = 0for premise in rules:flag = True# print(premise+ ':' + rules[premise])pre = premise.split(' and ')for p in pre:if p in facts:passelse:flag = Falseif(flag):print('该动物:' + premise + ' -> ' + rules[premise])for p in pre:facts = facts.replace(p, ' ')facts = facts + rules[premise]rules_copy.pop(premise)else:i += 1if i == len(rules):isEnd = Truerules = rules_copy# 是否推导出最终结论     while(not isEnd):loop()"""
1. 用户通过人机界面输入一批事实
"""
def ui():print('----')print('--------动物识别系统--------')print('----')print('注意!请按照规则库中的前提来阐述事实', end='\n\n')facts = input('请输入事实:')matchRules(facts)def main():filePath = r'动物识别系统/rules.txt'readRules(filePath)ui()if __name__ == '__main__':main()

人机交互示例:

----
--------动物识别系统--------
----
注意!请按照规则库中的前提来阐述事实请输入事实:该动物有暗斑点、长脖子、长腿、有乳、有蹄。该动物:有乳 -> 哺乳动物
该动物:哺乳动物 and 有蹄 -> 有蹄类
该动物:有蹄类 and 长脖子 and 长腿 and 暗斑点 -> 长颈鹿

第二问

把规则库换成以下规则,在看看系统的执行情况:

  1. 有毛发的动物是哺乳类;
  2. 有奶的动物是哺乳类;
  3. 有羽毛的动物是鸟类;
  4. 若动物会飞且生蛋,则它是鸟类;
  5. 吃肉的哺乳类称为食肉动物;
  6. 犬牙利爪,眼睛向前的是食肉类;
  7. 反刍食物的哺乳类是有蹄类;
  8. 有蹄的哺乳类是有蹄类;
  9. 黄褐色有黑色条纹的食肉类是老虎;
  10. 黄褐色有暗斑点的食肉类是金钱豹;
  11. 长腿长脖有黄褐色暗斑点的有蹄类是长颈鹿;
  12. 有黑白条纹的有蹄类是斑马;
  13. 不会飞腿长脖黑白色的鸟是鸵鸟;
  14. 不会飞善游泳黑白色的鸟是企鹅;
  15. 善飞的鸟是信天翁.

把规则库重新写一遍就可以了,或者你再新建一个文本文件

if 有毛发 then 哺乳类
if 有奶 then 哺乳类
if 有羽毛 then 鸟类
if 会飞 and 生蛋 then 鸟类
if 吃肉 and 哺乳类 then 食肉动物
if 犬牙 and 利爪 and 眼睛向前 then 食肉类
if 哺乳类 and 反刍食物 then 有蹄类
if 哺乳类 and 有蹄 then 有蹄类
if 食肉类 and 黄褐色 and 黑色条纹 then 老虎
if 食肉类 and 黄褐色 and 暗斑点 then 金钱豹
if 有蹄类 and 长脖 and 长腿 and 黄褐色 and 暗斑点 then 长颈鹿
if 有蹄类 and 黑白条纹 then 斑马
if 鸟 and 不会飞 and 长脖子 and 长腿 and 黑白色 then 鸵鸟
if 鸟 and 不会飞 and 善游泳 and 黑白色 then 企鹅
if 鸟 and 善飞 then 信天翁
  • 最后吐槽一句,产生式系统是真的傻,如果不对输入进行模糊判断,嘁嘁嘁(我没有这样搞,因为搞不好,以后有能力了再加上)

  • 所以呢,我这垃圾代码,执行时输入一系列事实之前需要先看看规则库的的前提;不然,你在事实中输入’有奶‘,而规则库中是’有乳‘,俺这代码可不认你的’有奶‘


文章推荐

  • 用Python实现命题逻辑归结推理系统–人工智能
  • 合一算法的Python实现–人工智能

用Python实现一个动物识别专家系统--人工智能相关推荐

  1. python动物专家系统_用Python实现一个动物识别专家系统--人工智能作业分享

    考察 产生式系统 我猜在搜索引擎的茫茫大海中,你能看见我的这篇文章不是缘分,而是你要交作业了(抖机灵) 求点赞,给作者一点分享的鼓励 代码没写GUI,因为不喜欢这玩意,直接在终端中进行人机交互.使用代 ...

  2. python编写的动物识别专家系统_基于Python的动物识别专家系统

    1. 利用pyqt5来设计专家系统的界面. 如下图一: 图一 起始界面 相应的运行过程的界面,如图二: 图二 相应的运行过程界面 2. 设置规则文本 guizhe.txt 有毛发 哺乳动物 有奶 哺乳 ...

  3. python编写的动物识别专家系统_自己写的简单动物识别专家系统

    #include //#include void Birds() // 鸟类识别 { int a; printf( "************************************ ...

  4. 动物识别专家系统PYTHON

    能搜到这个文章的,估计你就是为了想找篇现成的系统抄抄了,我也废话不多说好叭. 下面这些是我们当时的要求和加分项: 1.建立一个动物识别系统的规则库,用以识别虎.豹.斑马.长颈鹿.企鹅.鸵鸟.信天翁等7 ...

  5. 动物识别专家系统 Java 简单实现

    不再BB什么是专家系统了,自行百度,这篇博客专门帮助写作业的,人工智能导论课要求写一个动物识别专家系统,这就是一个很好的实现,编了2天,有界面,有功能,分享给需要的同学. 直接上源代码,开箱即用,包括 ...

  6. 动物识别系统代码python_人工智能-动物识别专家系统算法Python + Pyqt 实现

    #-*- coding: utf-8 -*- #Form implementation generated from reading ui file '动物识别专家系统.ui'# #Created b ...

  7. 人工智能导论-动物识别专家系统

    动物识别专家系统实验 这个人工智能导论实验可算是折磨了我许久,关键是我一直想不明白该如何推理. 在某天的晚上,我去对象那里上晚自习,突然灵感大开.由于电脑没有电了,我就手绘了一个系统结构图,并且想到了 ...

  8. 基于Python的动物识别专家系统

    1.问题陈述 基于产生式规则的动物识别系统--识别虎.金钱豹.斑马.长颈鹿.鸵鸟.企鹅.信天翁等七种动物的产生式系统. 运用以下规则,设计实现一个小型动物识别系统. R1: if 动物有毛发 then ...

  9. python动物专家系统_动物识别专家系统 实验报告

    学 号 XXXXX 姓 名 XXXXX 实验名称 动物识别专家系统 实验目的 本实验的主要目的是熟练使用推理方法, 进行编程完成相应的功 能. 本次试验的预期功能是在系统可以像使用者提出问题, 然后系 ...

  10. matlab——一个简单的动物识别专家系统

    本实验中用matlab实现一个简单的动物识别专家系统,该系统是用来识7种动物的,但在规则库中形成了15条规则.首先将动物分成哺乳动物.鸟.蹄类动物.肉食动物4大类,然后通过继续询问得到要的结果.本程序 ...

最新文章

  1. @Autowired
  2. Servlet3.0 || IDEA与tomcat的相关配置
  3. php生成zip文件,使用PHP处理zip压缩文件之ZipArchive
  4. 如何把视频压缩变小?视频压缩方法介绍
  5. Django03: django加入APP
  6. CGCKD2021大会报告整理(1)--宽度学习
  7. STM32 - 定时器高级应用说明 - 01 - Filtering stage - 波形输入的过滤
  8. Exchange Server 2016 独立部署/共存部署 (八)—— 边缘角色服务器
  9. eclipse中使用maven插件的时候,运行tomcat7:run的时候报错
  10. 关于 DXGI 截图 截屏 获取屏幕
  11. zabbix报警 Lack of free swap space on zabbix
  12. 一年多推行每日构建的经验总结
  13. groovy if 判断字符串_Groovy(二)-字符串
  14. swoole的初步学习
  15. Leetcode_154_Find Minimum in Rotated Sorted Array
  16. 《左耳听风》-ARTS-打卡记录-第二十五周
  17. 深圳金融展 聚焦明朝万达数据防泄密
  18. kafka2.8抛弃zookeeper?
  19. MacBook Air M1硬盘写入量查询
  20. c语言goord函数,php的chr和ord函数实现字符加减乘除运算实现代码

热门文章

  1. 从球衣了解“红魔”曼联历史
  2. 几款杀毒软件下载和升级
  3. QRCode二维码与PDF417码生成与读取JAVA+HTML
  4. 跟着杨中科学习asp.net之dom
  5. windows 10 彻底卸载windows 易升
  6. pringboot+vue 基于springboot房屋租赁管理系统#毕业设计
  7. python自动化框架搭建过程_一步一步教你编写与搭建自动化测试框架——python篇...
  8. vim插件介绍(一)之Tabular
  9. idea 内嵌浏览器 翻译
  10. 【Unity】制作剧情向游戏使用Fungus插件