Python语言实现用于动物分类的产生式系统

文章目录

    • 代码实现
    • 个人总结

代码实现

  • productionSystem.py
# 知识库 {特征序号,特征描述}
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, 4, 5], [23, 6, 21],
         [23, 7, 8, 9], [23, 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 classAnimal():
    # 提示输入
    print("\n请输入前提特征的序号:")
    # 输入,分割,化为整数,转化为列表
    premise = list(map(int, input().split()))
    # 对输入的特征序号排序
    premise.sort()
    
    # 设置知识库中的全部特征的标志量,0:无该特征,1: 有该特征
    basenum = [0 for i in range(32)]
    # 输入的特征对应的标志量赋值 1
    for i in premise:
        basenum[i] = 1
    
    # 遍历所有的规则
    for rule in rules:
        # 设置当前规则是否成立的标志量
        flag = True
        # 输出信息
        msg = ""
        
        # 遍历当前规则的所有前提
        for r in range(1, len(rule)):
            # 输出信息
            msg = msg + " " + base.get(str(rule[r]))
            # 判断当前的前提的标志量是否为 0,即不成立
            if (basenum[rule[r]] == 0):
                # 其中一个前提不成立,则当前规则不成立
                flag = False
                # 退出循环
                break
        
        # 判断当前规则是否成立
        if (flag):
            # 结论特征的标志量赋值 1
            basenum[rule[0]] = 1
            # 输出信息
            msg = msg + " -> " + base.get(str(rule[0]))
            # 输出
            print(msg)

# 提示信息
print("*************  动物识别系统   ****************")

# 循环调用
while (1):
    # 提示信息
    print("\n请选择:\n0.退出程序\n1.动物分类")
    # 选择需要的操作
    choice = int(input())
    # 退出程序
    if choice == 0:
        break
    # 动物分类
    elif choice == 1:
        # 打印知识库
        printBase()
        # 分类
        classAnimal()
    else:
        print("输入错误!!!")

print("\nEND !")

个人总结

1.产生式,是知识表示的一种方法。
2.一个或多个前提得出一个结论,称为一个产生式。
3.用一组产生式求解问题的系统,称为产生式系统。
4.产生式具有一对多的关系,一组产生式具有多对多的关系,适用于数据结构当中的"网"。
5."网"可以用邻接矩阵来存储,此处使用二维列表,表示规则集。
6.把所有的前提和结论写入字典并给予序号,作为知识库。

你可能感兴趣的:(人工智能实验,python)