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.把所有的前提和结论写入字典并给予序号,作为知识库。

  • 5
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
产生式系统(production system)是一种用于解决问题的人工智能方法,它由一组产生式规则和一个推理机构成。Python语言是一种功能丰富且易于学习的编程语言,因此很适合用来实现这样的产生式系统。下面是一个用于动物分类的示例代码: ```python # 定义产生式规则 rules = [ {'IF': ['has_feather'], 'THEN': 'bird'}, {'IF': ['has_fur'], 'THEN': [ {'IF': ['gives_milk'], 'THEN': 'mammal'}, {'IF': ['lays_eggs'], 'THEN': 'mammal'}, {'IF': ['barks'], 'THEN': 'mammal'} ]}, {'IF': ['lives_in_water'], 'THEN': 'fish'}, {'IF': ['has_scales'], 'THEN': 'reptile'}, {'IF': ['has_legs'], 'THEN': 'spider'}, {'IF': ['has_antenna'], 'THEN': 'insect'} ] # 定义输入事实 facts = { 'has_feather': True, 'has_fur': False, 'gives_milk': False, 'lays_eggs': True, 'barks': False, 'lives_in_water': False, 'has_scales': False, 'has_legs': False, 'has_antenna': False } # 推理机 def production_system(rules, facts): for rule in rules: if all(facts.get(condition, False) for condition in rule['IF']): if isinstance(rule['THEN'], str): return rule['THEN'] elif isinstance(rule['THEN'], list): return production_system(rule['THEN'], facts) return 'unknown' # 执行推理机 result = production_system(rules, facts) print(result) ``` 上述代码中,定义了一组产生式规则,每个规则有一个"IF"条件和一个"THEN"结果。使用递归的推理机制,根据输入的事实和产生式规则进行推理,直到找到满足所有条件的结果,或者返回"unknown"表示无法分类。在本例中,根据给定的事实,得出结果为"bird",即该动物是鸟类。 通过这个示例,我们可以看到使用Python语言可以轻松实现用于动物分类产生式系统。我们可以根据具体的需求定义更多的规则和事实,实现更复杂的分类任务。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值