实验三 简单动物识别系统的产生式推理

一 实验目的

  1. 掌握产生式系统的推理方法。
  2. 能够编程实现推理机。

二 实验原理

基于上个实验了解了动物识别的规则库,这次再来了解一下推理机:

  1. 初始化综合数据库,即把欲解决问题的已知事实送入综合数据库中;
  2. 检查规则库中是否有未使用过的规则,若无转(7);
  3. 检查规则库的未使用规则中是否有其前提可与综合数据库中己知事实相匹配的规则,若有,形成当前可用规则集;杏则转(6);
  4. 按照冲突消解策略,从当前可用规则集中选择-个规则执行,并对该规则作上标记。把执行该规则后所得到的结论作为新的事实放入综合数据库;如果该规则的结论是一些操作,则执行这些操作;
  5. 检查综合数据库中是否包含了该问题的解,若己包含,说明解已求出,问题求解过程结束;否则转(2);
  6. 当规则库中还有末使用规则,但均不能与综合数据库中的己有事实相匹配时,要求用户进一步提供关于该问题的己知事实,若能提供,则转(2):否则,执行下一步;
  7. 若知识库中不再有未使用规则,也说明该问题无解,终止问题求解过程。输出“抱歉,没有相符合的动物” 程序退出。

三 实验环境

Aistudio。

四 实验内容及步骤

  1. 动物识别系统流程图
  2. 动物识别系统产生式推理过程

五 实验流程图

六 实验代码

# 知识库 {特征序号,特征描述}
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.产生式推理

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
产生规则的动物识别系统正反向混合推理是一种基于产生规则的推理方法,通过将正向推理和反向推理结合起来来实现动物识别。在正向推理中,系统根据已知的规则和事实,从前提推导出结论;而在反向推理中,系统通过给定的结论,推导出可能的前提或事实。通过将这两种推理方法结合起来,动物识别系统可以更准确地判断给定输入的动物类别。 在Python中,可以使用产生规则的动物识别系统正反向混合推理的方法来实现动物识别功能。首先,需要定义一组与动物特征相关的产生规则,这些规则描述了动物的各种特征和它们之间的关系。然后,通过正向推理,系统可以根据已知的特征判断动物的类别。反向推理可以用来根据给定的动物类别推导出可能的特征。最后,通过将正向推理和反向推理结合起来,系统可以更全面地进行动物识别。 在实现过程中,可以使用Python的产生规则引擎库,如pyknow,来定义和管理产生规则。通过编写规则和事实的类,并使用规则引擎进行推理,可以实现动物识别系统的正反向混合推理功能。同时,可以使用其他相关的Python库和工具,如OpenCV和深度学习库,来提取和处理动物图像特征,进一步提高动物识别的准确性。 综上所述,通过产生规则的动物识别系统正反向混合推理方法,结合Python编程和相关库和工具的应用,可以实现动物识别功能,并提高识别的准确性和全面性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值