产生式系统实验

产生式系统

内容:

  1. 建立规则库
  2. 实现推理,打印推理过程,可文字或画图
    例子:
    输入:暗斑点、长脖子、长腿、奶、蹄
    输出:
    在这里插入图片描述
    规则库如下:
    在这里插入图片描述
    在这里插入图片描述
    实验中的条件、中间结论、最终结论:(需要自己分析哦!)
    在这里插入图片描述
    实验原理:
    在这里插入图片描述
    规则库:某一个领域内知识的产生式集合
    综合数据库:存放问题求解过程中各种当前信息的数据结构(问题的初始状态、原始证据、推理的中间结论与最终结论)
    推理解:推理算法,控制产生式系统的运行,实现对问题的求解。

代码如下:

import numpy as np;
# 确定是否有将推理出的中间结论特征加入features(list)中
def judge_repeat(value,list=[]):
    for i in range(0,len(list)):
        if(list[i]==value):
            return 1
        else:
            if(i!=len(list)-1):
                continue
            else:
                return 0

# 综合数据库
dict_data = {
                # 前提条件
               '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': '信天翁'
}

# 特征展示:
def printInfo():
    print('''特征展示:
            *1:有毛发  2:产奶  3:有羽毛  4:会飞  5:会下蛋          *
             *6:吃肉  7:有犬齿  8:有爪  9:眼盯前方  10:有蹄         *
             *11:反刍  12:黄褐色  13:暗斑点  14:有黑色条纹  15:长脖 *
             *16:长腿  17:不会飞  18:会游泳  19:黑白二色  20:善飞   *
             *21:哺乳类  22:鸟类  23:食肉类  24:有蹄类              *
   ''' )

# 用户输入:
def InputFeature():
    print("请输入对应特征数字,并用英文','进行分割!")
    num_real=input("请输入:")
    features=num_real.split(",")
    return features

# 匹配动物,获取最终结论
def matchfeatureanimal(features):
    # 判别是否匹配到动物
    flag=0;
    for i in features:
        if (i == '23'):
            for i in features:
                if (i == '12'):
                    for i in features:
                        if (i == '21'):
                            for i in features:
                                if (i == '13'):
                                    flag=1
                                    print("黄褐色,暗斑点,哺乳类,食肉类->金钱豹\n")
                                    print("所识别的动物为金钱豹")
                                    return 0
                                elif (i == '14'):
                                    flag = 1
                                    print("黄褐色,有黑色条纹,哺乳类,食肉类->虎\n")
                                    print("所识别的动物为虎")
                                    return 0


        elif (i == '14'):
            for i in features:
                if (i == '24'):
                    flag = 1
                    print("有黑色条纹,蹄类->斑马\n")
                    print("所识别的动物为斑马")
                    return 0
        elif (i == '24'):
            for i in features:
                if (i == '13'):
                    for i in features:
                        if (i == '15'):
                            for i in features:
                                if (i == '16'):
                                    flag = 1
                                    print("暗斑点,长腿,长脖,蹄类->长颈鹿\n")
                                    print("所识别的动物为长颈鹿")
                                    return 0
        elif (i == '20'):
            for i in features:
                if (i == '22'):
                    flag = 1
                    print("善飞,鸟类->信天翁\n")
                    print("所识别的动物为信天翁")
                    return 0

        elif (i == '22'):
            for i in features:
                if (i == '17'):
                    for i in features:
                        if (i == '15'):
                            for i in features:
                                if (i == '16'):
                                    flag = 1
                                    print("不会飞,长脖,长腿,鸟类->鸵鸟\n")
                                    print("所识别的动物为鸵鸟")
                                    return 0
        elif (i == '17'):
            for i in features:
                if (i == '22'):
                    for i in features:
                        if (i == '18'):
                            for i in features:
                                if (i == '19'):
                                    flag = 1
                                    print("不会飞,会游泳,黑白二色,鸟类->企鹅\n")
                                    print("所识别的动物企鹅")
                                    return 0

        else:
            if (features.index(i) != len(features)-1):
                continue
    if(flag==0):
        print("\n根据当前所给条件无法判断这些特征构成规则库中七种动物中的哪一种动物\n请增加初始综合数据库的信息!")

# 获取中间结论
def matchfeaturecategory(features) :
    for i in features:
        if (i == '1'):
            if (judge_repeat('21', features) == 0):
                features.append('21')
                print("有毛发->哺乳类")
        elif (i == '2'):
            if (judge_repeat('21', features) == 0):
                features.append('21')
                print("产奶->哺乳类")
        elif (i == '3'):
            if (judge_repeat('22', features) == 0):
                features.append('22')
                print("有羽毛->鸟类")
        else:
            if (features.index(i) != len(features)-1):
                continue
            else:
                break
    for i in features:
        if (i == '4'):
            for i in features:
                if (i == '5'):
                    if (judge_repeat('22', features) == 0):
                        features.append('22')
                        print("会飞,会下蛋->鸟类")
        elif (i == '6'):
            for i in features:
                 if (judge_repeat('23', features) == 0):
                    features.append('23')
                    print("食肉->食肉类")
        elif (i == '7'):
            for i in features:
                if (i == '8'):
                    for i in features:
                        if (i == '9'):
                            if (judge_repeat('23', features) == 0):
                                features.append('23')
                                print("有犬齿,有爪,眼盯前方->食肉类")
        elif (i == '10'):
            for i in features:
                if (i == '21'):
                    if (judge_repeat('24', features) == 0):
                        features.append('24')
                        print("有蹄,哺乳类->有蹄类")

        elif (i == '11'):
            for i in features:
                if (i == '21'):
                    if (judge_repeat('24', features) == 0):
                        features.append('24')
                        print("反刍,哺乳类->蹄类")

        else:
            if (i != len(features)-1):
                continue
            else:
                break

printInfo()
features=InputFeature()
for i in range(0,len(features)):
    print(dict_data[features[i]], end=" ")
print("\n")

# 判断有几个数据
# print(len(features))
matchfeaturecategory(features)
matchfeatureanimal(features)

# 打印最后有多少个特征
# print(features)
# for i in range(0,len(features)):
# 	print(dict_data[features[i]], end=" ")

运行结果:
在这里插入图片描述
小结:
产生式系统的结构简单,表达的比较直观,但是只可以解决比较简单、数据量比较少的推理过程,在现在的大数据时代是不适用的;不然像代码中一堆if-else会疯掉的!

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值