考察 产生式系统

我猜在搜索引擎的茫茫大海中,你能看见我的这篇文章不是缘分,而是你要交作业了(抖机灵)

求点赞,给作者一点分享的鼓励

代码没写GUI,因为不喜欢这玩意,直接在终端中进行人机交互。使用代码之前,请根据自身情况对字符编码、文件路径进行修改

代码写的很烂,以后有能力了再把算法加进去优化代码吧

第一问

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

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 rules

for 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 = False

def loop():

global rules

nonlocal facts, isEnd

rules_copy = rules.copy()

i = 0

for premise in rules:

flag = True

# print(premise+ ':' + rules[premise])

pre = premise.split(' and ')

for p in pre:

if p in facts:

pass

else:

flag = False

if(flag):

print('该动物:' + premise + ' -> ' + rules[premise])

for p in pre:

facts = facts.replace(p, ' ')

facts = facts + rules[premise]

rules_copy.pop(premise)

else:

i += 1

if i == len(rules):

isEnd = True

rules = 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 暗斑点 -> 长颈鹿

第二问

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

有毛发的动物是哺乳类;

有奶的动物是哺乳类;

有羽毛的动物是鸟类;

若动物会飞且生蛋,则它是鸟类;

吃肉的哺乳类称为食肉动物;

犬牙利爪,眼睛向前的是食肉类;

反刍食物的哺乳类是有蹄类;

有蹄的哺乳类是有蹄类;

黄褐色有黑色条纹的食肉类是老虎;

黄褐色有暗斑点的食肉类是金钱豹;

长腿长脖有黄褐色暗斑点的有蹄类是长颈鹿;

有黑白条纹的有蹄类是斑马;

不会飞腿长脖黑白色的鸟是鸵鸟;

不会飞善游泳黑白色的鸟是企鹅;

善飞的鸟是信天翁.

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

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实现一个动物识别专家系统--人工智能作业分享相关推荐

  1. python 时间序列预测_使用Python进行动手时间序列预测

    python 时间序列预测 Time series analysis is the endeavor of extracting meaningful summary and statistical ...

  2. python 概率分布模型_使用python的概率模型进行公司估值

    python 概率分布模型 Note from Towards Data Science's editors: While we allow independent authors to publis ...

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

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

  4. 用python读取股票价格_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  5. python网页版_经典python学习教程:20行代码打造一个微信群聊助手,解放双手

    今天的Python学习教程教大家如何用20行Python代码实现微信群聊助手,可以用来活跃群气氛,好多群主创建完群后,拉完一群人,之后就一片寂静,有个群聊助手,就可以帮忙活跃群里气氛,通过今天在自己的 ...

  6. python自动上传图片_使用Python实现一个简单的图片上传存储服务

    使用flask实现的一个简单的图片上传服务 设计初衷 对于图片的存储,有很多选择,一般采用云服务如(七牛,又拍等),但是国内的服务像七牛 自定义域名竟然需要域名备案(Excuse me,当初就是因为备 ...

  7. 一个星期学会python可能吗_学习python的一周

    int.float complex: z.real; z.imag 复数不可以直接转换成整数或者浮点数 算术运算符(x//y取整:x%y取余:x**y: x的y次幂=pow(x,y):divmod(x ...

  8. python编写登录_通过Python编写一个简单登录功能过程解析

    通过Python编写一个简单登录功能过程解析 需求: 写一个登录的程序, 1.最多登陆失败3次 2.登录成功,提示欢迎xx登录,今天的日期是xxx,程序结束 3.要检验输入是否为空,账号和密码不能为空 ...

  9. python宣传海报_用Python做一个令人发疯的海报

    Python可以做海报? Python真的可以做海报吗? Python做海报,你确定不是在逗我? 重要的问题问了三遍,答案是真的可以! 今天我们就来用Python的一个比较好玩的模块来进行创作---- ...

  10. python写炒股软件_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

最新文章

  1. hive 列转行_掌握这个SQL技巧超越80%的人——行转列/列转行
  2. 学习笔记(七)——jQuery(一)
  3. 架构模式_Index
  4. Python中表示偶数_蒙特卡洛模拟(Python)深入教程
  5. 面向对象 封装 集成 特性
  6. [转载] Bitmap的秘密
  7. netlink的内核实现原理
  8. 美国特勤局发布十大网络通缉犯名单
  9. python2添加pip,无法在python2.6中使用PIP更新/添加任何包
  10. 测试集的准确率为什么高于训练集的准确率?
  11. Atitit 微服务的一些理论 目录 1. 微服务的4个设计原则和19个解决方案 1 2. 微服务应用4个设计原则 1 2.1. AKF拆分原则 2 2.2. 前后端分离 2 2.3. 无状态服务
  12. 时间序列分类算法ST及其实现代码
  13. java pdf 阅读器_纯Java文档阅读器(word、pdf等)
  14. java更新word目录_java aspose.words 生成word目录和更新目录
  15. 爆款预订,2022 年最值得关注的后台框架 —— Fantastic-admin
  16. 没有项目经验找工作处处碰壁怎么办
  17. Unity3d物理引擎
  18. SLAM导航技术原理
  19. MySQL对多个条件分别计数
  20. Unity3D UNET 模仿局域网游戏

热门文章

  1. UI设计素材,聪明的设计师关注字体的运用
  2. html识别文字转语音,万能君工具箱v1.8 - 基于百度AI实现语音转文字/文字转语音/文字识别OCR/翻译...
  3. 2022春节放假7天 2022春节放假调休安排来了用日历便签记录
  4. 微信小程序 java网上宠物用品商城系统springboot
  5. 电脑软件删除了还能恢复吗?四种方法帮助恢复
  6. 如何提升树莓派的操作流畅度和视频播放流畅度?
  7. [RK3288][Android6.0] WiFi之开机自动连接过程
  8. 华为ICT大赛实践赛备赛经验总结
  9. jupyter python视频教程_【邢不行|量化小讲堂22】优雅的Python编程方式:Jupyter Notebook视频教程...
  10. 中国电信电信综合业务管理平台ISMP和移动业务网络综合业务接入网关ISAG