人工智能产生式系统实验—动物识别系统(txt文件导入数据库)python代码实现以及关系图

⼈⼯智能产⽣式系统实验—动物识别系统(txt⽂件导⼊数据库)python代码实
现以及关系图
⼈⼯智能产⽣式系统实验—动物识别系统(txt⽂件导⼊数据库)python代码实现以及关系图
⼤家好!第⼀次写,请⼤家多批评指正!
动物识别系统要求:
运⽤所学知识,设计并编程实现⼀个⼩型动物识别系统,能识别虎、⾦钱豹、斑马、长颈⿅、鸵鸟、企鹅、信天翁等七种动物的产⽣式系统。
规则库:
r1: IF 该动物有⽑发 THEN 该动物是哺乳动物
r2: IF 该动物有奶 THEN 该动物是哺乳动物
r3: IF 该动物有⽻⽑ THEN 该动物是鸟
r4: IF 该动物会飞 AND 会下蛋 THEN 该动物是鸟
r5: IF 该动物吃⾁ THEN 该动物是⾷⾁动物
扫频信号源
r6: IF 该动物有⽝齿 AND 有⽖ AND 眼盯前⽅
THEN 该动物是⾷⾁动物
r7: IF 该动物是哺乳动物 AND 有蹄
THEN 该动物是有蹄类动物
r 8: IF 该动物是哺乳动物 AND 是反刍动物
THEN 该动物是有蹄类动物
r9: IF 该动物是哺乳动物 AND 是⾷⾁动物 AND 是黄褐⾊
AND ⾝上有暗斑点 THEN 该动物是⾦钱豹
r10:IF 该动物是哺乳动物 AND 是⾷⾁动物 AND 是黄褐⾊
AND ⾝上有⿊⾊条纹 THEN 该动物是虎
r11: IF 该动物是有蹄类动物 AND 有长脖⼦ AND 有长腿
AND ⾝上有暗斑点 THEN 该动物是长颈⿅
r 12:IF 该动物有蹄类动物 AND ⾝上有⿊⾊条纹
THEN 该动物是斑马
r13:IF 该动物是鸟 AND 有长脖⼦ AND 有长腿 AND 不会飞
AND 有⿊⽩⼆⾊ THEN 该动物是鸵鸟
r14: IF 该动物是鸟 AND 会游泳 AND 不会飞
AND 有⿊⽩⼆⾊ THEN 该动物是企鹅
r15: IF 该动物是鸟 AND 善飞 THEN 该动物是信天翁
要求给定初始条件,能识别出是哪种动物。
⽐如已知初始事实存放在综合数据库中:
暗斑点,长脖⼦,长腿,奶,蹄
运⾏后得该动物是:长颈⿅
对问题画出关系图
其中箭头之间的波浪线代表所有条件都满⾜才可以推出结果
注:其中规则8属于哺乳动物与反刍动物两个规则同时满⾜才成⽴
代码实现思路
# !/usr/bin/env python
# @Time:2021/4/2 11:38
# @Author:华阳
# @File:动物识别.py
# @Software:PyCharm
rules ={}# 以字典形式存储规则
filePath ='
"""
读取规则库⽂件中规则,并存放在rules字典中
- 字典的键:前提
- 字典的值:结论
"""
def storeRules(filePath):#储存⽼⽂件
file_data =""
with open(filePath,'r', encoding='utf-8')as f:
for line in f:# 将⽂件按⾏读取
file_data += line
with open(r"","w", encoding='utf-8')as d:
d.write(file_data)
f.close()
d.close()cd架
def readRules(filePath):
global rules
fo =open(filePath, mode='r', encoding='utf-8')
for line in fo:#将⽂件按⾏读取
line = place('IF','').strip()#将字符IF替换
temp = line.split(' THEN ')#按照THEN将字符串切⽚
premise = temp[0]#条件
conclusion = temp[1]#结论
rules[premise]= conclusion#以字典形式储存在rules中
fo.close()
def add_txt(filePath,new_premise,new_conclusion):
file_data =""
with open(filePath,'r', encoding='utf-8')as f:
for line in f:# 将⽂件按⾏读取
file_data += line
file_data +="IF"+" "+new_premise+" "+"THEN"+" "+new_conclusion+"\n" with open(filePath,"w", encoding='utf-8')as d:
d.write(file_data)
f.close()
d.close()
def alter_txt(filePath,old_str,new_str):
file_data =""
with open(filePath,'r', encoding='utf-8')as f:
for line in f:#将⽂件按⾏读取
if old_str in line:
line = place(old_str,new_str)
file_data += line
with open(',"w",encoding='utf-8')as d:
d.write(file_data)
f.close()
d.close()
"""
2. 推理机⽤这些事实(即:facts变量),依次与知识库中的规则的前提匹配
- 注意:匹配成功的规则可能不⽌⼀条,进⾏冲突消解(本代码没有这个功能)    - 代码很简单,没有对综合数据库进⾏设置
3. 若某规则的前提全被事实满⾜,则规则可以得到运⽤
4. 规则的结论部分作为新的事实存储
5. ⽤更新过的事实再与其它规则的前提匹配,直到不再有可匹配的规则为⽌"""
def matchRules(facts):
print()
isEnd =False
m =True
# 循环匹配
def loop():#循环函数
global rules#定义全局变量rules
nonlocal facts, isEnd,m
i =0
for premise in rules:#遍历rules的每⼀个条件
flag =True
flag =True
pre = premise.split(' AND ')#根据AND将条件字符切⽚
for p in pre:#遍历条件
if p in facts:#条件存在facts中(遍历成功⼀次,就会少⼀个)
m =False
pass
else:
flag =False#如果有⼀个条件遍历失败,则匹配失败。
if(flag):#该条件完全匹配成功进⾏输出
print('该动物:'+ premise +' -> '+ rules[premise])#得到⼀个⼩推论/结果
for p in pre:
facts = place(p,' ')#去掉得出⼩结论的⼩条件
facts = facts + rules[premise]#加上需要的⼩结论作为下次遍历的条件else:
i +=1
if i ==len(rules):#条件全部不⼀致,遍历结束
isEnd =True
if(m):
print("⼗分抱歉!没有到您所给条件对应的动物,请尝试输⼊信息与数据库对应")
a =eval(input("0. 继续程序 1. 查看数据库内容"))
if(a==1):
print(rules)
# 是否推导出最终结论
while(not isEnd):#循环遍历,解决条件顺序问题
loop()
"""
1. ⽤户通过⼈机界⾯输⼊⼀批事实
"""
def ui():
print('----')
print('--------动物识别系统--------')
print('----')
print('注意!请按照规则库中的前提来阐述事实(实例:鸟善飞)', end='\n\n')
facts =input('请输⼊事实:')#输⼊动物特征
matchRules(facts)#根据特征匹配
def add():
a =input("请输⼊判断条件:")
b =input("请输⼊可以判断的结果:")
rules[a]= b
print(rules)
add_txt(filePath,a,b)
def alter():
磁铁块x =True
a =input("请输⼊判断条件:")
b =input("请输⼊可以判断的结果:")
for item in rules:
if(a==item and b==rules[item]):
print("该条件已存在,添加条件失败")
x =False
elif(a==item and b!=rules[item]):
c型卡环
alter_txt(filePath,rules[item],b)
elif(a!=item and b==rules[item]):
alter_txt(filePath,item,a)
if(x):
rules[a]= b
print(rules)
def main():
global filePath#信息库⽂件路径
storeRules(filePath)#储存⽂件
readRules(filePath)#读取⽂件
print(rules)#打印字典
while(1):
print("\n1. 更改数据库信息"
"2. 添加数据库信息"
"3. 动物识别"
"4. 退出系统\n")#打印⽬录
n =int(input("Please select :"))#选择功能
if(n==1):#未完善
alter()
continue
elif(n==2):
add()
continue
elif(n==3):#匹配直插led灯珠
ui()
elif(n==4):#退出
print("\n成功推出程序!欢迎您下次光临\n")
break
else:#输⼊错误
print("\n输出有误,请重新输⼊!\n")
return1
if __name__ =='__main__':#主函数
main()
txt⽂件
如下所⽰,⼤家可以⾃⼰新建⼀个txt,⽂件名改为和代码放在同⼀个路径就可以正常运⾏了,不必担⼼该规则后txt会改动,不到最早的规则。代码编译运⾏后会⾃动保存原来的规则并存在程序相同路径下名字是大理石清洗剂
IF 有⽑发 THEN 哺乳动物
IF 有奶 THEN 哺乳动物
IF 有⽻⽑ THEN 鸟
IF 会飞 AND 会下蛋 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 斑马
IF 鸟 AND 长脖⼦ AND 长腿 AND 不会飞 AND ⿊⽩⼆⾊ THEN 鸵鸟
IF 鸟 AND 会游泳 AND 不会飞 AND ⿊⽩⼆⾊ THEN 企鹅
IF 鸟 AND 善飞 THEN 信天翁
⾄⼤家
第⼀次写,有不⾜之处还请谅解指正,欢迎各位⼩伙伴和我⼀起交流讨论。在这⾥谢谢⼤家的观看与转载点赞哈哈!
代码⽂件

本文发布于:2024-09-23 03:30:19,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/219091.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:动物   规则   条件   数据库   匹配   结论   事实
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议