当前位置:   article > 正文

动物识别专家系统PYTHON_python 专家系统

python 专家系统

能搜到这个文章的,估计你就是为了想找篇现成的系统抄抄了,我也废话不多说好叭。

下面这些是我们当时的要求和加分项:

1.建立一个动物识别系统的规则库,用以识别虎、豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等7种动物 (至少7种动物和15条规则,规则和动物种类可增加)。

n 1. 具有人机交互界面
n 2. 提示 / 允许用户补充事实
n 3. 知识 库可进行增添、修改、删除新 的规则和动物种类
n 4. 冲突消解
n 5. 可以对得到的结论进行解释(比如:得到的结论是“信天翁”,程序可以解释之所以得到的结论是“信天翁”是因为具有“羽毛”和“善飞”这两个事实。)
n 6 综合数据库动态展示

还有诸如,调换规则库顺序后要求输出依旧正确等要求。我不介绍了,你有无法被我满足的需求你自己改代码吧。

除了冲突消解我懒得搞了,其他的都实现了!

这个是主要的交互界面

 

 界面上的功能都能实现。

好了,该放代码了,1

  1. import sys
  2. from tkinter import messagebox
  3. from PyQt5 import QtWidgets
  4. from PyQt5.QtWidgets import QMessageBox
  5. import MAIN
  6. import alert
  7. import bye
  8. def get_rules():
  9. # 获取规则库 并将结论和前提分开存储
  10. RD = open("RD.txt", 'r')
  11. P = []
  12. Q = []
  13. for line in RD:
  14. line = line.strip('\n') # 删除开头或是结尾的回车字符
  15. if line == '': # 处理空行 跳过
  16. continue
  17. line = line.split(' ') # 切片
  18. Q.append(line[line.__len__() - 1]) # 分开存储,Q存放每条推理结论
  19. del (line[line.__len__() - 1])
  20. P.append(line) # P存放每条推理条件
  21. RD.close() # 关闭文件
  22. return P, Q
  23. # 判断list中所有元素是否都在集合set中
  24. def ListInSet(li, se):
  25. for i in li:
  26. if i not in se:
  27. return False
  28. return True
  29. # 设置退出页面
  30. class bye_ui(QtWidgets.QMainWindow, bye.Ui_MainWindow):
  31. def __init__(self):
  32. QtWidgets.QMainWindow.__init__(self) # 创建主界面对象
  33. bye.Ui_MainWindow.__init__(self) # 主界面对象初始化
  34. self.setupUi(self) # 配置主界面对象
  35. # 设置提示界面
  36. class alert_ui(QtWidgets.QMainWindow, alert.Ui_MainWindow):
  37. def __init__(self):
  38. QtWidgets.QMainWindow.__init__(self) # 创建主界面对象
  39. alert.Ui_MainWindow.__init__(self) # 主界面对象初始化
  40. self.setupUi(self) # 配置主界面对象
  41. # 设置主界面
  42. class MAIN_ui(QtWidgets.QMainWindow, MAIN.Ui_MainWindow):
  43. def __init__(self):
  44. QtWidgets.QMainWindow.__init__(self) # 创建主界面对象
  45. MAIN.Ui_MainWindow.__init__(self) # 主界面对象初始化
  46. self.setupUi(self) # 配置主界面对象
  47. self.pushButton.clicked.connect(self.add_rule) # 添加规则
  48. self.pushButton_3.clicked.connect(self.del_rule) # 添加规则
  49. self.pushButton_4.clicked.connect(self.find_rule) # 查询规则
  50. self.pushButton_2.clicked.connect(self.inference)
  51. self.alert_window = alert_ui()
  52. for line in open('RD.txt'): # 将规则库放入显示框
  53. self.textBrowser.append(line)
  54. def add_rule(self):
  55. # 添加新规则
  56. new_rule = self.lineEdit.text()
  57. if new_rule != " ":
  58. self.textBrowser.append(new_rule)
  59. RD = open('RD.txt', 'a')
  60. RD.write(new_rule)
  61. RD.write('\n')
  62. def del_rule(self):
  63. # 删除规则
  64. new_rule = self.lineEdit.text()
  65. if new_rule != " ":
  66. lines = [l for l in open("RD.txt", "r") if l.find(new_rule) != 0]
  67. fd = open("RD.txt", "w")
  68. fd.writelines(lines)
  69. fd.close()
  70. self.textBrowser.clear()
  71. for line in open('RD.txt'): # 将规则库放入显示框
  72. self.textBrowser.append(line)
  73. def find_rule(self):
  74. # 查询规则
  75. new_rule = self.lineEdit.text()
  76. if new_rule != " ":
  77. for line in open('RD.txt'):
  78. a = line.find(new_rule)
  79. if a == -1:
  80. msg_box = QMessageBox(QMessageBox.Question, '查询结果', '没找到!!!!!!!!!')
  81. else:
  82. msg_box = QMessageBox(QMessageBox.Question, '查询结果', '找到了!!!!!!!!')
  83. msg_box.exec_() # 执行弹出框
  84. def no(self):
  85. self.bye_window = bye_ui()
  86. self.bye_window.show()
  87. self.alert_window.close()
  88. self.close()
  89. def inference(self):
  90. # 推理
  91. input = self.textEdit.toPlainText() # 获取输入的事实
  92. input = input.split('\n')
  93. DB = set(input) # 将综合数据库以集合的形式存放
  94. [P, Q] = get_rules() # 获取规则库
  95. self.process = '' # 用于存储推理过程
  96. self.animal = '' # 存储结论
  97. DB_list = []
  98. strr = []
  99. for p in input:
  100. DB_list.append(p)
  101. strr.append(p)
  102. # 下面开始正式推理
  103. flag = 0
  104. n = 3 # 遍历两遍
  105. while n != 0:
  106. for premise in P: # 对前提条件进行遍历
  107. if ListInSet(premise, DB) and Q[P.index(premise)] not in DB:
  108. # 能够找到一个前提条件全部存在于数据库
  109. DB.add(Q[P.index(premise)]) # 把结论放入综合数据库
  110. self.animal = Q[P.index(premise)] # 更新结论
  111. self.process += "%s --> %s\n" % (premise, Q[P.index(premise)])
  112. flag = 1 # 至少有一个能够推出来的结论
  113. DB_list.append(Q[P.index(premise)]) # 用于数据库的显示
  114. for i in DB_list:
  115. self.textEdit_3.insertPlainText(i)
  116. self.textEdit_3.insertPlainText(" ")
  117. self.textEdit_3.insertPlainText("\n")
  118. # print(DB_list)
  119. # print(Q[P.index(premise)])
  120. n -= 1
  121. if flag == 0:
  122. # 一个结论也推不出来,询问用户是否进行补充
  123. self.alert_window.show()
  124. self.alert_window.pushButton.clicked.connect(self.alert_window.close)
  125. self.alert_window.pushButton_2.clicked.connect(self.no)
  126. else: # flag!=0说明有结论生成
  127. # 显示出推理过程
  128. self.textEdit_2.setText(self.process)
  129. # 显示出结论
  130. self.lineEdit_2.setText(self.animal)
  131. strrr = ""
  132. strrr += "之所以得到的结论是" + self.animal + "是因为具有"
  133. strrr += " ".join(map(str, strr))
  134. self.textEdit_4.setText(strrr)
  135. app = QtWidgets.QApplication(sys.argv) # 新建窗体
  136. MAIN_window = MAIN_ui() # 创建主菜单的窗口对象
  137. MAIN_window.show() # 显示主菜单
  138. sys.exit(app.exec_()) # 保持显示

这个是主要的py,其他的文件我都打包放在CSDN上了,欢迎下载!地址我到时候放在评论区里

另外!!!本文件参考了

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:基于Python/PYQT5的动物识别专家系统(人工智能实验)_xiaotang_sama的博客-CSDN博客z

 这篇文章。如果原作者看到这篇文章不爽或者觉得侵权,请一定要联系我,我马上删!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/375565
推荐阅读
相关标签
  

闽ICP备14008679号