1 实验目的
- 理解和掌握产生式知识表示方式。
- 能够通过编程语言实现产生式系统的规则库。
2 实验原理
知识系统的构建依赖于两个基木的技术:一个是知识的表示,另一个则是知识的推理。 知识的表示就是人们对于知识的描达,也就是用一些事先规定好的符号把我们所要描述的知识编码成能够被计算机直接识别,并便于系统使用的数据结构。通常,人工智能对于知识的表示要求主要有一下四个方面:一是知识的表示能力,二是知识可利用性,三是知识的可组织性与可维护性,四是知识的可理解性和的可实现性。为了满足以上几个要求,就必须要找到合适的知识表示方法将知识表示出来,这样才能够让系统方便、准确地运用和管理已有的知识。 常用的确定性知识表示方法主要有调词逻拜表示法、产生式表示法、语义网络表示法和框架表示法。
本次实验主要以识别老虎、金钱豹、斑马、长领鹿、企鹅、鸵鸟、信天翁这种动物为例。用产生式知识表示法构建这七种动物的识别系统的数据库和规则库
3 实验环境
Aistudio。
4 实验内容及步骤
构建动物识别系统的规则库 在动物识别系统中,规则库中的知识采用的是确定性知识,并且用产生式规来表示。本系统需要识别出-七种动物,依据上面得到的信息,则规则库中一共有以下 15 条产生式规则:
- Rulel: IF 该动物有毛发 THEN 该动物是哺乳动物
- Rule2: IF 该动物有奶TIEN 该动热是哺乳动物
- Rule3: IF 该动物有羽毛 THEN 该动物是鸟
- Rule4:IF 该动物会飞 AND 会下蛋THEN 该动物是鸟
- Rule5:IF 该动物吃肉 TIIEN 该动物是肉食动物
- Rulc6:IF 该动物有大齿 AND 有爪 AND 眼盯前方 THEN 该动物是肉食动物
- Rule7:IF 该动物足哺乳动物 AND 有蹄THEN 该动物足有蹄类动物
- Rule8: IF 该动物是哺乳动物 AND 是嚼反当动物THEN 该动物是有蹄类动物
- Rule9: IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色 AND 身上有暗点 THEN 该动物是金钱豹
- Rule10:IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色 AND身上有黑色条纹THEN 该动物是老虎
- Rule11: IF 该动物是有蹄类动物 AND 有长脖子 AND 有长腿 AND 身上有暗斑点 THEN 该动物是有长颈鹿
- Rule12: IF 该动物是有帝类动物 AND 身上有黑色条纹THEN 该动物是斑马
- Rule13:IF 该动物是鸟 AND 有长脖子 AND 有长腿AND不会飞THEN该动物是鸵鸟
- Rulel4:IF 该动物是鸟 AND 会游泳 AND 有黑白二色 AND 不会飞THEN 该动物是企鹅
- Rule15:IF 该动物是鸟 AND 善飞 THEN 该动物是信天翁
5 流程图
6 实验代码
#在这里写上你的代码并运行成功,显示运行结果
# 知识库 {特征序号,特征描述}
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':'信天翁'}
# 二维列表:规则的集合
# 其中一维列表:一条规则;下标 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, 22]]
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])])
# 提示信息
print("************* 动物识别系统 ****************")
# 循环调用
while (1):
# 提示信息
print("\n请选择:\n0.退出程序\n1.打印知识库\n2.打印规则")
# 选择需要的操作
choice = int(input())
# 退出程序
if choice == 0:
break
# 动物分类
elif choice == 1:
# 打印知识库
printBase()
elif choice == 2:
# 打印规则
printRule()
else:
print("输入错误!!!")
print("\nEND !")
7 实验结果截图
************* 动物识别系统 ****************
请选择:
0.退出程序
1.打印知识库
2.打印规则
2
****************** 规则 *********************
Rule1: IF 该动物有毛发 THEN 该动物是哺乳动物
Rule2: IF 该动物有奶 THEN 该动物是哺乳动物
Rule3: IF 该动物有羽毛 THEN 该动物是鸟类
Rule4: IF 该动物善飞 AND 会下蛋 THEN 该动物是鸟类
Rule5: IF 该动物吃肉 THEN 该动物是肉食动物
Rule6: IF 该动物有大齿 AND 有爪 AND 眼盯前方 THEN 该动物是肉食动物
Rule7: IF 该动物有蹄 AND 哺乳动物 THEN 该动物是蹄类动物
Rule8: IF 该动物反刍 AND 哺乳动物 THEN 该动物是蹄类动物
Rule9: IF 该动物黄褐色 AND 身上有暗点 AND 哺乳动物 AND 肉食动物 THEN 该动物是金钱豹
Rule10: IF 该动物黄褐色 AND 身上有黑色条纹 AND 哺乳动物 AND 肉食动物 THEN 该动物是老虎
Rule11: IF 该动物身上有暗点 AND 长脖子 AND 长腿 AND 蹄类动物 THEN 该动物是长颈鹿
Rule12: IF 该动物身上有黑色条纹 AND 蹄类动物 THEN 该动物是斑马
Rule13: IF 该动物不会飞 AND 长脖子 AND 长腿 AND 鸟类 THEN 该动物是鸵鸟
Rule14: IF 该动物不会飞 AND 会游泳 AND 黑白二色 AND 鸟类 THEN 该动物是企鹅
Rule15: IF 该动物善飞 AND 鸟类 THEN 该动物是信天翁
请选择:
0.退出程序
1.打印知识库
2.打印规则
1
****************** 知识库 *********************
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:信天翁
请选择:
0.退出程序
1.打印知识库
2.打印规则
0
END !