人工智能导论-动物识别专家系统

动物识别专家系统实验

这个人工智能导论实验可算是折磨了我许久,关键是我一直想不明白该如何推理。
在某天的晚上,我去女朋友(ex-girlfriend right now, updated at 2024/6/4)那里上晚自习,突然灵感大开。由于电脑没有电了,我就手绘了一个系统结构图,并且想到了解决问题的方案。
当晚回宿舍我就立马打开电脑,写完了一半。第二天清早又逐渐完善了一些bug.
后来。。。老师说让我们把动物特征信息保存到数据库中,但是我们那时候还没学数据库,于是我把动物信息保存到了文件中。
如果你认为老师的折磨到现在就结束的话,那你就太天真了。没过多久。老师又提出了图形界面的要求,我那个时候真的。。。写不出来,现在想想,大不了就设计一个比较好看web应用,对接数据库进行增删改查。但是那时还是年轻,我就按照这个不加图形界面的交上去了,最后成绩还是过九十了,结果很满意。
展示代码之前,需要先写运行代码所需要的推理文件。

f1.csv的内容如下:
有毛
有奶
有羽毛
会飞
会生蛋
吃肉
犬牙利爪
眼睛向前
反刍食物
有蹄
黄褐色
有暗斑点
黑条纹
长腿长脖子
黄褐色暗斑
有黑白条纹
不会飞
善游泳
黑白色
f2.csv的内容如下:
哺乳类
鸟类
肉食类
有蹄类
蜘蛛毒
长毛象
阿拉斯加犬
f3.csv的内容如下:
肉食动物
偶蹄类
有蹄类
金钱豹
老虎
长颈鹿
斑马
鸵鸟
企鹅
信天翁
higher1.csv的内容如下:
吃肉	哺乳类	肉食动物		
犬牙利爪	眼睛向前	肉食动物		
反刍食物	哺乳类	偶蹄类		
黄褐色	有暗斑点	肉食类	金钱豹	
黄褐色有黑条纹	肉食类	老虎		
长腿长脖子	黄褐色暗斑	有蹄类	长颈鹿	
有黑白条纹	有蹄类	斑马		
不会飞	长腿长脖子	鸟类	鸵鸟	
不会飞	善游泳	黑白色	鸟类	企鹅
善飞	鸟类	信天翁		

middle1.csv的内容如下:
有毛	哺乳类	
有奶	哺乳类	
有羽毛	鸟类	
会飞	会生蛋	
有蹄	哺乳类	
红色	有毒	毒蜘蛛
体型巨大	长长牙	长毛象
灰白色	有毛	阿拉斯加犬

RDsort.txt的内容如下:
有毛发 哺乳动物
有奶 哺乳动物
有羽毛 鸟
会飞 下蛋 鸟
吃肉 食肉动物
有犬齿 有爪 眼盯前方 食肉动物
哺乳动物 有蹄 有蹄类动物
哺乳动物 嚼反刍动物 有蹄类动物
哺乳动物 食肉动物 黄褐色 暗斑点 金钱豹
哺乳动物 食肉动物 黄褐色 黑色条纹 虎
有蹄类动物 长脖子 长腿 暗斑点 长颈鹿
有蹄类动物 黑色条纹 斑马
鸟 善飞 信天翁
鸟 会游泳 不飞 黑白二色 企鹅
鸟 长脖子 长腿 黑白二色 不飞 鸵鸟

想要运行程序,需要将上述文件和代码放在同一文件目录下。
下面展示一下我的代码:

'''
动物识别系统
时间 2019/12
开发者:时彦钊
'''
#检测f是否在t中的条件方法
def isinf(f,t):
    i=0
    for thing in f:
        if thing in t:
            i+=1
        else:
            return False
    if i==len(f):
        return True
#删除list的element元素
def listpop(list,element):
    list2=[]
    for i in list:
        if i!=element:
            list2.append(i)
    return list2
#系统开始执行
print("欢迎进入动物识别系统 ")
print("功能包括:1动物识别、2增加特征、3更改特征、4特征查询")
fun=eval(input("请选择功能:"))
while(True):
    #首先,从文件中读取信息f1 f2 f2 middle higher
    f11 = open("f1.csv")
    f1= []
    for i in f11:
        i = i.replace("\n", "")
        f1.append(i)
    f11.close()
    f22 = open("f2.csv")
    f2 = []
    for i in f22:
        i = i.replace("\n", "")
        f2.append(i)
    f22.close()
    f33 = open("f3.csv")
    f3 = []
    for i in f33:
        i = i.replace("\n", "")
        f3.append(i)
    f33.close()
    # 推理列表
    middle1 = open("middle1.csv")
    middle = []
    for i in middle1:
        m = ""
        middle0 = []
        for j in i:
            if (j == ","):
                if m!="":
                    middle0.append(m)
                    m = ""
            if (j == "\n"):
                break
            if (j != ',' and j != "\n"):
                m += j
        middle.append(middle0)
    middle1.close()
    higher1 = open("higher1.csv")
    higher = []
    for i in higher1:
        m = ""
        higher0 = []
        for j in i:
            if (j == ","):
                if (m != ''):
                    higher0.append(m)
                m = ""
            if (j == "\n"):
                break
            if (j != ',' and j != "\n"):
                m += j
        higher.append(higher0)
    higher1.close()
    #读取成功
    if(fun==1):
        character=[]
        #输入特征信息
        while(True):
            inputs=input("输入特征信息:")
            if inputs == "0":
                break
            character.append(inputs)
        #输入完成
        #推理机
        for lists in middle:
            t=sorted(lists[:-1])
            if isinf(t,character):
                print(t,end="")
                print("推导出{}".format(lists[-1]))
                for delet in t:
                    character=listpop(character,delet)
                character.append(lists[-1])
        for lists in higher:
            t = sorted(lists[:-1])
            if t==sorted(character):
                print(t, end="")
                print("推导出{}".format(lists[-1]))
                for delet in t:
                    character=listpop(character,t)
                character.append(lists[-1])
        #推理完成
    elif(fun==2):
        addcharacter = []
        #输入需要添加的信息
        while (True):
            inputs3 = input("输入需要添加的特征信息:")
            if inputs3 == "0":
                break
            addcharacter.append(inputs3)
        print("输入完成")
        a=addcharacter[-1]
        #如果新加的规则是在中级推理中的
        if a in f2:
            middle.append(addcharacter)
            renewmid = open("1.csv", "w")
            m = ""
            for i in middle:
                for h in range(len(i)):
                    if (i[h] == i[-1]):
                        m += i[h]
                        m += "\n"
                    else:
                        m += i[h]
                        m += ","
            renewmid.write(m)
            renewmid.close()
            print("添加完成")
        #如果新加的规则是在高级推理中的
        elif a in f3:
            higher.append(addcharacter)
            renewhig = open("higher1.csv", "w")
            m = ""
            for i in higher:
                for h in range(len(i)):
                    if (i[h] == i[-1]):
                        m += i[h]
                        m += "\n"
                    else:
                        m += i[h]
                        m += ","
            renewhig.write(m)
            renewhig.close()
            print("添加完成")
        #新加的是面向新事物的规则
        else:
            f2.append(addcharacter[-1])
            #在f2中增加新名称
            renewf0=open("f2.csv","a")
            renewf0.write("\n"+addcharacter[-1])
            renewf0.close()
            #在中级推理中加入新规则
            middle.append(addcharacter)
            renewmid = open("middle1.csv", "w")
            m = ""
            for i in middle:
                for h in range(len(i)):
                    if (i[h] == i[-1]):
                        m += i[h]
                        m += ",\n"
                    else:
                        m += i[h]
                        m += ","
            renewmid.write(m)
            renewmid.close()
            print("添加完成1")
    #改变化规则
    elif(fun==3):
        print(middle)
        k=1
        #输入待改规则进行匹配
        addcharacter = []
        while (True):
            inputs3 = input("输入需要改造的特征信息:")
            if inputs3 == "0":
                break
            addcharacter.append(inputs3)
        if addcharacter[-1] in f2:
            for i in range(len(middle)):
                if addcharacter==middle[i]:
                    print("找到对应公式")#匹配成功
                    changecharacter = []
                    while (True):
                        inputs4 = input("输入改造后的特征信息:")
                        if inputs4 == "0":
                            break
                        changecharacter.append(inputs4)
                    #在文件中加入改造后的规则
                    middle[i]=changecharacter
                    renewmid = open("middle1.csv", "w")
                    m = ""
                    for i in middle:
                        for h in range(len(i)):
                            if (i[h] == i[-1]):
                                m += i[h]
                                m += ",\n"
                            else:
                                m += i[h]
                                m += ","
                    renewmid.write(m)
                    renewmid.close()
                else:
                    k=0
        elif addcharacter[-1] in f3:
            for i in range(len(higher)):
                if addcharacter == higher[i]:
                    print("找到对应公式")
                    k=1
                    changecharacter = []
                    while (True):
                        inputs5 = input("输入改造后的特征信息:")
                        if inputs5 == "0":
                            break
                        changecharacter.append(inputs5)
                    higher[i] = changecharacter
                    renewhig = open("higher1.csv", "w")
                    m = ""
                    for i in higher:
                        for h in range(len(i)):
                            if (i[h] == i[-1]):
                                m += i[h]
                                m += ",\n"
                            else:
                                m += i[h]
                                m += ","
                    renewhig.write(m)
                    renewhig.close()
    # 用户提示
    elif (fun == 4):
        print("*****************************")
        print("动物的信息如下:")
        for i in middle:
            for l in range(len(i)):
                if (i[l] != i[-1] and i[l] != i[-2]):
                    print(i[l], end=",")
                elif i[l] == i[-2]:
                    print(i[l], end=" 推理出 ")
                elif i[l] == i[-1]:
                    print(i[l], end="\n")
        for i in higher:
            for l in range(len(i)):
                if (i[l] != i[-1] and i[l] != i[-2]):
                    print(i[l], end=",")
                elif i[l] == i[-2]:
                    print(i[l], end=" 推理出 ")
                elif i[l] == i[-1]:
                    print(i[l], end="\n")
        print("**********************************************")
    elif(fun==0):
        break;
    print("功能包括:1动物识别、2增加特征、3更改特征、4特征查询")
    fun = eval(input("请选择功能:"))










  • 10
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值