基于产生式规则的动物识别系统(Python)

基于产生式规则的动物识别系统(Python)产生式:一组产生式,互相配合/协调,其中一个产生式产生的结论可以作为另一个产生式的事实使用,以求解问题如下图为产生式系统的基本结构:产生式系统的基本结构规则库:用于描述相应领域内过程性知识的产生式集合。对知识进行合…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

产生式:一组产生式,互相配合/协调,其中一个产生式产生的结论可以作为另一个产生式的事实使用,以求解问题

如下图为产生式系统的基本结构:

基于产生式规则的动物识别系统(Python)

                                                                                    产生式系统的基本结构 

规则库:用于描述相应领域内过程性知识的产生式集合。对知识进行合理的组织与管理,提高问题求解效率。

综合数据库: 综合数据库(事实库、上下文、黑板等):存放问题求解过程中的各种信息的数据结构,包括初始状态、原始证据、中间结论、最终结论,其内容在推理过程中在动态、不断变化的。

控制系统(推理机构):由一组程序组成,负责整个产生式系统的运行,实现对问题的求解。

控制系统要做以下几项工作:

              (1)从规则库中选择与综合数据库中的已知事实进行匹配。

              (2)匹配成功的规则可能不止一条,进行冲突消解。

              (3)执行某一规则时,如果其右部是一个或多个结论,则把这些结论加入到综合数                          据库中:如果其右部是一个或多个操作,则执行这些操作。

             (4)对于不确定性知识,在执行每一条规则时还要按一定的算法计算结论的不确定                         性。    

             (5)检查综合数据库中是否包含了最终结论,决定是否停止系统的运行。

问题描述:基于产生式规则的动物识别系统——识别虎、金钱豹、斑马、长颈鹿、鸵鸟、企鹅、信天翁等七种动物的产生式系统。

              1.以动物识别系统的产生规则为例,建造规则库和综合数据库,并能对他们进行添加、删除和修改操作

              2.基于建立的规则库和综合数据库,进行推理

              3.可以使用任何语言,需要有日志说明推理结果的解释

              产生式规则如下:

                                        

基于产生式规则的动物识别系统(Python)

              解决思路如下:

                                     前提条件:将每一个前提条件转换为一个对应的唯一的一个数学数字

基于产生式规则的动物识别系统(Python)

                                    中间结论:

基于产生式规则的动物识别系统(Python)

                                    结论: 

基于产生式规则的动物识别系统(Python)

                                   产生式规则转换如下:

基于产生式规则的动物识别系统(Python)

                                   Python代码如下:

#动物识别系统
#自定义函数,判断有无重复元素
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
#自定义函数,对已经整理好的综合数据库real_list进行最终的结果判断           
def judge_last(list):
    for i in list:
        if(i=='23'):
            for i in list:
                if(i=='12'):
                    for i in list:
                        if(i=='21'):
                            for i in list:
                                if(i=='13'):
                                     print("黄褐色,有斑点,哺乳类,食肉类->金钱豹\n")
                                     print("所识别的动物为金钱豹")
                                     return 0
                                elif(i=='14'):
                                    print("黄褐色,有黑色条纹,哺乳类,食肉类->虎\n")
                                    print("所识别的动物为虎")
                                    return 0

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

        elif(i=='22'):
            for i in list:
                if(i=='4'):
                    for i in list:
                        if(i=='15'):
                            for i in list:
                                if(i=='16'):
                                    print("不会飞,长脖,长腿,鸟类->鸵鸟\n")
                                    print("所识别的动物为鸵鸟")
                                    return 0
        elif(i=='4'):
            for i in list:
                if(i=='22'):
                    for i in list:
                        if(i=='18'):
                            for i in list:
                                if(i=='19'):
                                    print("不会飞,会游泳,黑白二色,鸟类->企鹅\n")
                                    print("所识别的动物企鹅")
                                    return 0
                                
        else:
            if(list.index(i) != len(list)-1):
                continue
            else:
                print("\n根据所给条件无法判断为何种动物")
    
dict_before={'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':'信天翁'}
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:蹄类              *
                                *******************************************************
                                *******************当输入数字0时!程序结束***************
     ''' )
#综合数据库
list_real=[]
while(1):
#循环输入前提条件所对应的字典中的键
    num_real=input("请输入:")
    list_real.append(num_real)
    if(num_real=='0'):
        break
print("\n")
print("前提条件为:")
#输出前提条件
for i in range(0,len(list_real)-1):
    print(dict_before[list_real[i]],end=" ")
print("\n")
print("推理过程如下:")
#遍历综合数据库list_real中的前提条件
for i in list_real:
    if(i=='1'):
        if(judge_repeat('21',list_real)==0):
            list_real.append('21')
            print("有毛发->哺乳类")
    elif(i=='2'):
        if(judge_repeat('21',list_real)==0):
            list_real.append('21')
            print("产奶->哺乳类")
    elif(i=='3'):
        if(judge_repeat('22',list_real)==0):
            list_real.append('22')
            print("有羽毛->鸟类")
    else:
        if(list_real.index(i) !=len(list_real)-1):
            continue
        else:
            break
for i in list_real:
    if(i=='4'):
        for i in list_real:
            if(i=='5'):
                if(judge_repeat('22',list_real)==0):
                    list_real.append('22')
                    print("不会飞,会下蛋->鸟类")
    elif(i=='6'):
        for i in list_real:
            if(i=='21'):
                if(judge_repeat('21',list_real)==0):
                    list_real.append('21')
                    print("食肉->哺乳类")
    elif(i=='7'):
        for i in list_real:
            if(i=='8'):
                for i in list_real:
                    if(i=='9'):
                        if(judge_repeat('23',list_real)==0):
                            list_real.append('23')
                            print("有犬齿,有爪,眼盯前方->食肉类")
    elif(i=='10'):
        for i in list_real:
            if(i=='21'):
                if(judge_repeat('24',list_real)==0):
                    list_real.append('24')
                    print("有蹄,哺乳类->蹄类")
                    
    elif(i=='11'):
        for i in list_real:
            if(i=='21'):
                if(judge_repeat('24',list_real)==0):
                    list_real.append('24')
                    print("反刍,哺乳类->哺乳类")
                    
    else:
        if(i !=len(list_real)-1):
            continue
        else:
            break

judge_last(list_real)

    

Jetbrains全家桶1年46,售后保障稳定

 编者赠语:

这是我大学的一次课堂小作业,就用Python(3.5)实现了一下,其实除此动物识别系统还有一个相似的植物水果识别系统(我也用Python实现了),我就不再次赘余了,如果还有不懂的那就看一下我的实验报告吧!

 

 

 

                                                   

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/206764.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • WebApp 开发框架推荐以及优缺点分析

    WebApp 开发框架推荐以及优缺点分析不用盲目的百度和问大神们WebApp开发使用哪个框架最好?等等问题。在此,小编尽量解答各位的WebApp 问题。根据国内js大神以及有过WebApp 开发经验的前辈们分析,小编推荐下面6款常用的WebApp 开发框架。第一款:Sencha TouchSenchaTouch是世界上第一个支持HTML5和CSS3标准的移动应用框架,你可以使用HTML5来编写音频和视频组件,还可以使用…

  • 不同浏览器中手动启用Flash Player「建议收藏」

    FlashPlayer用户在浏览网页有时会提示:“AdobeFlashPlayer已被屏蔽”等类似界面,当出现该情况时,那么我们如何手动启用FlashPlayer?我们将这个问题分为以下四种类型进行逐一介绍:谷歌Chrome浏览器1点击chrome浏览器右上角图标2在跳出的对话框中单击设置3在页面底部单击高级4在展开的页面中单击内容设置5单击Flash6打开Flash下方的先询问(推荐)开关7“刷新”视频页面。…

  • css绝对定位的参照物是什么_css 清除上定位

    css绝对定位的参照物是什么_css 清除上定位css绝对定位的重新认知所谓的css绝对定位,就是position:absolute;这里记录一个我的错误认知,就是绝对定位的参照物是内容,还是内容+内边距,我一直以为参照物就是内容,但是实际上参照物是内容+内边距看看下面的事例<!DOCTYPEhtml><html><head><metachars…

    2022年10月25日
  • 切蛋糕(贪心 or 优先队列)

    切蛋糕(贪心 or 优先队列)

  • mysql中字符转数字,MYSQL字符数字转换为数字「建议收藏」

    mysql中字符转数字,MYSQL字符数字转换为数字「建议收藏」1、将字符的数字转成数字,比如’0’转成0可以直接用加法来实现例如:将user表中的uid进行排序,可uid的定义为varchar,可以这样解决select*fromuserorderby(uid+0)2、在进行ifnull处理时,比如ifnull(a/b,’0′)这样就会导致a/b成了字符串,因此需要把’0’改成0,即可解决此困扰3、比较数字和varchar时,比如a=11,…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号