赞
踩
基于上个实验了解了动物识别的规则库,这次再来了解一下推理机:
Aistudio。
- # 知识库 {特征序号,特征描述}
- base = {'1': '有毛发', '2': '有奶', '3': '有羽毛', '4': '不会飞',
- '5': '会下蛋', '6': '吃肉', '7': '有大齿', '8': '有爪',
- '9': '眼盯前方', '10': '有蹄', '11': '反刍', '12': '黄褐色',
- '13': '身上有暗点', '14': '身上有黑色条纹', '15': '长脖子',
- '16': '长腿', '17': '不会飞', '18': '会游泳', '19': '黑白二色',
- '20': '善飞', '21': '哺乳动物', '22': '鸟类', '23': '肉食动物',
- '24': '蹄类动物', '25': '金钱豹', '26': '老虎', '27': '长颈鹿',
- '28': '斑马', '29': '鸵鸟', '30': '企鹅', '31': '信天翁', '32': '善飞'}
- # 二维列表:规则的集合
- # 其中一维列表:一条规则;下标 0:结论;其他下标:该结论的前提
- rules = [[21, 1], [21, 2], [22, 3], [22, 20, 5], [23, 6],
- [23, 7, 8, 9], [24, 10, 21], [24, 11, 21], [25, 12, 13, 21, 23],
- [26, 12, 14, 21, 23], [27, 13, 15, 16, 24], [28, 14, 24],
- [29, 4, 15, 16, 22], [30, 4, 18, 19, 22], [31, 20, 32]]
- def printBase():
- # 打印知识库
- print("\n****************** 知识库 *********************")
- for key, value in base.items():
- print(key + ':' + value)
- def printRule():
- # 打印规则
- print("\n****************** 规则 *********************")
- i = 1
- for rule in rules:
- print("Rule" + str(i) + ": ", end="")
- i += 1
- for msg in rule[1:]:
- if msg == rule[1]:
- print("IF", "该动物" + base[str(msg)], end=' ')
- if msg == rule[-1]:
- print("THEN", "该动物是" + base[str(rule[0])])
- break
- else:
- print("AND", base[str(msg)], end=' ')
- if msg == rule[-1]:
- print("THEN", "该动物是" + base[str(rule[0])])
- def codeRule():
- print("\n****************** 产生式推理 *********************")
- ls = []
- for key, value in base.items():
- print(key + ':' + value)
- while 1:
- know = int(input("每次输入一个知识序号,输入0结束:"))
- if know == 0:
- break
- if know in ls:
- print("该条件已存在,请重新输入")
- else:
- ls.append(know)
- print("前提条件为:", [base[str(i)] for i in ls])
- for rule in rules:
- num = 0
- for know in rule[1:]:
- if know not in ls:
- break
- else:
- num += 1
- if num == len(rule[1:]):
- print("匹配规则", [i+1 for i,j in enumerate(rules) if j==rule])
- for know in rule[1:]:
- print(base[str(know)], end=' ')
- # 用过的知识消解
- value_to_remove = know
- ls = [x for x in ls if x != value_to_remove]
- if rule[0] not in ls:
- ls.append(rule[0])
- if know == rule[-1]:
- print("->", base[str(rule[0])])
- else:
- print(',', end='')
- print("冲突消解后的条件:", [base[str(i)] for i in ls])
- for i in ['金钱豹', '老虎', '长颈鹿', '斑马', '鸵鸟', '企鹅', '信天翁']:
- if i in [base[str(j)] for j in ls]:
- print("匹配成功,该动物是:", i)
- return
- print("抱歉,没有相符合的动物")
- # 提示信息
- print("************* 动物识别系统 ****************")
- # 循环调用
- while 1:
- # 提示信息
- print("\n请选择:\n0.退出程序\n1.打印知识库\n2.打印规则\n3.产生式推理")
- # 选择需要的操作
- choice = int(input())
- # 退出程序
- if choice == 0:
- break
- # 动物分类
- elif choice == 1:
- # 打印知识库
- printBase()
- elif choice == 2:
- # 打印规则
- printRule()
- elif choice == 3:
- # 产生式推理
- codeRule()
- else:
- print("输入错误!!!")
-
- print("\nEND !")

- ************* 动物识别系统 ****************
-
- 请选择:
- 0.退出程序
- 1.打印知识库
- 2.打印规则
- 3.产生式推理
- 3
- ****************** 产生式推理 *********************
- 1:有毛发
- 2:有奶
- 3:有羽毛
- 4:不会飞
- 5:会下蛋
- 6:吃肉
- 7:有大齿
- 8:有爪
- 9:眼盯前方
- 10:有蹄
- 11:反刍
- 12:黄褐色
- 13:身上有暗点
- 14:身上有黑色条纹
- 15:长脖子
- 16:长腿
- 17:不会飞
- 18:会游泳
- 19:黑白二色
- 20:善飞
- 21:哺乳动物
- 22:鸟类
- 23:肉食动物
- 24:蹄类动物
- 25:金钱豹
- 26:老虎
- 27:长颈鹿
- 28:斑马
- 29:鸵鸟
- 30:企鹅
- 31:信天翁
- 32:善飞
- 每次输入一个知识序号,输入0结束: 1
- 每次输入一个知识序号,输入0结束: 6
- 每次输入一个知识序号,输入0结束: 12
- 每次输入一个知识序号,输入0结束: 14
- 每次输入一个知识序号,输入0结束: 0
- 前提条件为: ['有毛发', '吃肉', '黄褐色', '身上有黑色条纹']
- 匹配规则 [1]
- 有毛发 -> 哺乳动物
- 冲突消解后的条件: ['吃肉', '黄褐色', '身上有黑色条纹', '哺乳动物']
- 匹配规则 [5]
- 吃肉 -> 肉食动物
- 冲突消解后的条件: ['黄褐色', '身上有黑色条纹', '哺乳动物', '肉食动物']
- 匹配规则 [10]
- 黄褐色 ,身上有黑色条纹 ,哺乳动物 ,肉食动物 -> 老虎
- 冲突消解后的条件: ['老虎']
- 匹配成功,该动物是: 老虎
-
- 请选择:
- 0.退出程序
- 1.打印知识库
- 2.打印规则
- 3.产生式推理
- 3
- ****************** 产生式推理 *********************
- 1:有毛发
- 2:有奶
- 3:有羽毛
- 4:不会飞
- 5:会下蛋
- 6:吃肉
- 7:有大齿
- 8:有爪
- 9:眼盯前方
- 10:有蹄
- 11:反刍
- 12:黄褐色
- 13:身上有暗点
- 14:身上有黑色条纹
- 15:长脖子
- 16:长腿
- 17:不会飞
- 18:会游泳
- 19:黑白二色
- 20:善飞
- 21:哺乳动物
- 22:鸟类
- 23:肉食动物
- 24:蹄类动物
- 25:金钱豹
- 26:老虎
- 27:长颈鹿
- 28:斑马
- 29:鸵鸟
- 30:企鹅
- 31:信天翁
- 32:善飞
- 每次输入一个知识序号,输入0结束: 1
- 每次输入一个知识序号,输入0结束: 2
- 每次输入一个知识序号,输入0结束: 3
- 每次输入一个知识序号,输入0结束: 4
- 每次输入一个知识序号,输入0结束: 5
- 每次输入一个知识序号,输入0结束: 6
- 每次输入一个知识序号,输入0结束: 7
- 每次输入一个知识序号,输入0结束: 8
- 每次输入一个知识序号,输入0结束: 9
- 每次输入一个知识序号,输入0结束: 0
- 前提条件为: ['有毛发', '有奶', '有羽毛', '不会飞', '会下蛋', '吃肉', '有大齿', '有爪', '眼盯前方']
- 匹配规则 [1]
- 有毛发 -> 哺乳动物
- 冲突消解后的条件: ['有奶', '有羽毛', '不会飞', '会下蛋', '吃肉', '有大齿', '有爪', '眼盯前方', '哺乳动物']
- 匹配规则 [2]
- 有奶 -> 哺乳动物
- 冲突消解后的条件: ['有羽毛', '不会飞', '会下蛋', '吃肉', '有大齿', '有爪', '眼盯前方', '哺乳动物']
- 匹配规则 [3]
- 有羽毛 -> 鸟类
- 冲突消解后的条件: ['不会飞', '会下蛋', '吃肉', '有大齿', '有爪', '眼盯前方', '哺乳动物', '鸟类']
- 匹配规则 [5]
- 吃肉 -> 肉食动物
- 冲突消解后的条件: ['不会飞', '会下蛋', '有大齿', '有爪', '眼盯前方', '哺乳动物', '鸟类', '肉食动物']
- 匹配规则 [6]
- 有大齿 ,有爪 ,眼盯前方 -> 肉食动物
- 冲突消解后的条件: ['不会飞', '会下蛋', '哺乳动物', '鸟类', '肉食动物']
- 抱歉,没有相符合的动物
-
- 请选择:
- 0.退出程序
- 1.打印知识库
- 2.打印规则
- 3.产生式推理

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。