0


实验二、人工智能:产生式系统(动物识别系统)

产生式系统(动物识别系统)

一、相关知识

  • 把一组产生式放在一起,让它们互相配合、协同作用,一个产生式生成的结果可以供另一个产生式作为已知事实使用,以求得问题的解,这样的系统成为产生是系统。

产生式系统的例子:动物识别系统

  • 本系统为识别虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等七种动物的产生式系统。
  • 根据这些动物识别的专家知识,建立如下规则库: r1:IF 该动物有毛发 THEN 该动物是哺乳动物 r2:IF 该动物有奶 THEN 该动物是哺乳动物 r3:IF 该动物有羽毛 THEN 该动物是鸟 r4:IF 该动物会飞 AND 会下蛋 THEN 该动物是鸟 r5:IF 该动物吃肉 THEN 该动物是肉食动物 r6:IF 该动物有犬齿 AND 有爪 AND 眼盯前方 THEN 该动物是食肉动物 r7:IF 该动物是哺乳动物 AND 有蹄 THEN 该动物是有蹄类动物 r8:IF 该动物是哺乳动物 AND 是咀嚼反刍动物 THEN 该动物是有蹄类动物 r9:IF 该动物是哺乳动物 AND 是食肉动物 AND 是黄褐色 AND 身上有暗斑点 THEN 该动物是金钱豹 r10:IF 该动物是哺乳动物 AND 是肉食动物 AND 是黄褐色 AND 身上有黑色条纹 THEN 该动物是虎 r11:IF 该动物是蹄类动物 AND 有长脖子 AND 有长腿 AND 身上有暗斑点 THEN 该动物是长颈鹿 r12:IF 该动物是蹄类动物 AND 身上有黑色条纹 THEN 该动物是斑马 r13:IF 该动物是鸟 AND 有长脖子 AND 有长腿 AND 不会飞 AND 有黑白二色 THEN 该动物是鸵鸟 r14:IF 该动物是鸟 AND 会游泳 AND 不会飞 AND 有黑白二色 THEN 该动物是企鹅 r15:IF 该动物是鸟 AND 善飞 THEN 该动物是信天翁

二、实验目的

  1. 根据已知规则建立规则库
  2. 根据输入的规则进行推理
  3. 得到最终结果

三、实验要求

  1. 有推理过程
  2. 对结果进行打印
  3. 若得到最终结果,即虎、金钱豹、斑马、长颈鹿、企鹅、鸵鸟、信天翁等输出,需输出此判断结果。
  4. 例如: 1 10 14 0 前提条件为: 有毛发 有蹄 身上有黑色条纹推理过程如下: 有毛发->是哺乳动物 是哺乳动物,有蹄->是蹄类动物 是蹄类动物,身上有黑色条纹->斑马 所识别的动物为斑马

四、源代码

# 通过传入的列表寻找结果deffind_data(process_data_list):# 依次进行循环查找并对过程排序for epoch, data_process inenumerate(data_process_list):# 用于判断此过程是否成立
        num =0for i in process_data_list:if i in data_process:
                num +=1# 过程成立则数值相同,可以进入下一步if num ==len(data_process):# 此过程中结果是否为最终结果,不是将此过程结果加入到过程中if data_result_list[epoch]notin result_list:# 弹出过程和此过程结果,因为此过程已经进行过,此结果存入需要查找的过程中
                result = data_result_list.pop(epoch)
                process = data_process_list.pop(epoch)# 判断结果是否已经存在过程中,存在则重新寻找,不存在则加入过程,并将其存入最终结果if result notin process_data_list:
                    dict_input[','.join(process)]= result
                    end_result = find_data(process_data_list +[result])if end_result ==1:return1else:return0# 存在则直接寻找else:
                    end_result = find_data(process_data_list)if end_result ==1:return1else:return0# 找到最终结果,取出结果后返回else:
                process = data_process_list.pop(epoch)
                dict_input[','.join(process)]= data_result_list[epoch]return1if __name__ =='__main__':# 用于储存中间过程
    data_process_list =[]# 用于存储过程对应的结果
    data_result_list =[]# 存储用于查询的数据
    list_data =[]# 用于存储输出结果
    dict_input ={}# 规则库
    txt ='''有毛发,是哺乳动物
有奶,是哺乳动物
有羽毛,是鸟
会飞,会下蛋,是鸟
吃肉,是肉食动物
有犬齿,有爪,眼盯前方,是食肉动物
是哺乳动物,有蹄,是蹄类动物
是哺乳动物,是咀嚼反刍动物,是蹄类动物
是哺乳动物,是食肉动物,是黄褐色,身上有暗斑点,金钱豹
是哺乳动物,是肉食动物,是黄褐色,身上有黑色条纹,虎
是蹄类动物,有长脖子,有长腿,身上有暗斑点,长颈鹿
是蹄类动物,身上有黑色条纹,斑马
是鸟,有长脖子,有长腿,不会飞,有黑白二色,鸵鸟
是鸟,会游泳,不会飞,有黑白二色,企鹅
是鸟,善飞,信天翁'''# 将数据预处理
    datas = txt.split('\n')for data in datas:
        data = data.split(',')
        data_process_list.append(data[:-1])
        data_result_list.append(data[-1].replace('\n',''))# 最终结果列表
    result_list =['信天翁','鸵鸟','斑马','长颈鹿','虎','金钱豹','企鹅']# 数据库对应的过程
    database ={'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后退出while1:
        term =input("")if term =='0':breakif database[term]notin list_data:
            list_data.append(database[term])# 打印前提条件print('前提条件为:')print(' '.join(list_data)+'\n')# 进行递归查找,直到找到最终结果,返回1则找到最终结果
    end_result=find_data(list_data)if end_result ==1:print('推理过程如下:')# 将结果进行打印for i in dict_input.keys():print(f"{i}->{dict_input[i]}")# 得到最终结果即输出所识别动物if dict_input[i]in result_list:print(f'所识别的动物为{dict_input[i]}')else:# 将结果进行打印for i in dict_input.keys():print(f"{i}->{dict_input[i]}")

五、实验结果

在这里插入图片描述

标签: 人工智能 python

本文转载自: https://blog.csdn.net/wllll1434/article/details/124903773
版权归原作者 wllll1434 所有, 如有侵权,请联系我们删除。

“实验二、人工智能:产生式系统(动物识别系统)”的评论:

还没有评论