日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

用Python实现一个动物识别专家系统--人工智能

發(fā)布時間:2023/12/20 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用Python实现一个动物识别专家系统--人工智能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 考察 產(chǎn)生式系統(tǒng)
  • 代碼沒寫GUI,因為不喜歡這玩意,直接在終端中進行人機交互。使用代碼之前,請根據(jù)自身情況對字符編碼、文件路徑進行修改
  • 代碼寫的很爛,以后有能力了再把算法加進去優(yōu)化代碼吧

產(chǎn)生式系統(tǒng)

  • 規(guī)則庫:用于描述相應(yīng)領(lǐng)域內(nèi)知識的產(chǎn)生式系統(tǒng)
  • 綜合數(shù)據(jù)庫,又稱為事實庫、上下文、黑板:一個用于存放問題求解過程中各種當(dāng)前信息的數(shù)據(jù)結(jié)構(gòu)
  • 控制系統(tǒng),又稱推理機構(gòu):由一組程序組成,負責(zé)整個產(chǎn)生式系統(tǒng)的運行,實現(xiàn)對問題的求解

控制系統(tǒng):

  • 從規(guī)則庫中選擇前提與綜合數(shù)據(jù)庫中的已知事實進行匹配
  • 匹配成功的規(guī)則可能不止一條,進行沖突消解 (出題者對題目進行過設(shè)置,沒有出現(xiàn)沖突)
  • 執(zhí)行某一規(guī)則時,如果其右部是一個或多個結(jié)論,則把這些結(jié)論加入到綜合數(shù)據(jù)庫中;如果其右部是一個或多個操作,則執(zhí)行這些操作
  • 對不確定性知識,在執(zhí)行每一條規(guī)則時還要按一定算法計算結(jié)論的不確定性 (由于只是考察產(chǎn)生式系統(tǒng),出題者對題目進行過簡化,題目中沒有涉及這部分內(nèi)容)
  • 檢查綜合數(shù)據(jù)庫中是否包含了最終結(jié)論,決定是否停止系統(tǒng)的運行
  • 第一問

    先根據(jù)題圖,創(chuàng)建規(guī)則庫(使用了一個文本文件)

    if 有毛發(fā) then 哺乳動物 if 有乳 then 哺乳動物 if 吃肉 then 食肉動物 if 有犬齒 and 有爪 and 眼向前方 then 食肉動物 if 哺乳動物 and 有蹄 then 有蹄類 if 哺乳動物 and 反芻動物 then 有蹄類 if 哺乳動物 and 食肉動物 and 黃褐色 and 暗斑點 then 豹子 if 哺乳動物 and 食肉動物 and 黃褐色 and 黑條紋 then 老虎 if 有蹄類 and 長脖子 and 長腿 and 暗斑點 then 長頸鹿 if 有蹄類 and 黑條紋 then 斑馬

    代碼:

    rules = {} # 以字典形式存儲規(guī)則""" 讀取規(guī)則庫文件中規(guī)則,并存放在rules字典中- 字典的鍵:前提- 字典的值:結(jié)論 """ def readRules(filePath):global rulesfor line in open(filePath, mode = 'r', encoding = 'utf-8'):line = line.replace('if', '').strip()temp = line.split(' then ')premise = temp[0]conclusion = temp[1]rules[premise] = conclusion""" 2. 推理機用這些事實(即:facts變量),依次與知識庫中的規(guī)則的前提匹配- 注意:匹配成功的規(guī)則可能不止一條,進行沖突消解(本代碼沒有這個功能)- 代碼很簡單,沒有對綜合數(shù)據(jù)庫進行設(shè)置 3. 若某規(guī)則的前提全被事實滿足,則規(guī)則可以得到運用 4. 規(guī)則的結(jié)論部分作為新的事實存儲 5. 用更新過的事實再與其它規(guī)則的前提匹配,直到不再有可匹配的規(guī)則為止 """ def matchRules(facts): print()# 循環(huán)匹配isEnd = Falsedef loop():global rulesnonlocal facts, isEndrules_copy = rules.copy()i = 0for premise in rules:flag = True# print(premise+ ':' + rules[premise])pre = premise.split(' and ')for p in pre:if p in facts:passelse:flag = Falseif(flag):print('該動物:' + premise + ' -> ' + rules[premise])for p in pre:facts = facts.replace(p, ' ')facts = facts + rules[premise]rules_copy.pop(premise)else:i += 1if i == len(rules):isEnd = Truerules = rules_copy# 是否推導(dǎo)出最終結(jié)論 while(not isEnd):loop()""" 1. 用戶通過人機界面輸入一批事實 """ def ui():print('----')print('--------動物識別系統(tǒng)--------')print('----')print('注意!請按照規(guī)則庫中的前提來闡述事實', end='\n\n')facts = input('請輸入事實:')matchRules(facts)def main():filePath = r'動物識別系統(tǒng)/rules.txt'readRules(filePath)ui()if __name__ == '__main__':main()

    人機交互示例:

    ---- --------動物識別系統(tǒng)-------- ---- 注意!請按照規(guī)則庫中的前提來闡述事實請輸入事實:該動物有暗斑點、長脖子、長腿、有乳、有蹄。該動物:有乳 -> 哺乳動物 該動物:哺乳動物 and 有蹄 -> 有蹄類 該動物:有蹄類 and 長脖子 and 長腿 and 暗斑點 -> 長頸鹿

    第二問

    把規(guī)則庫換成以下規(guī)則,在看看系統(tǒng)的執(zhí)行情況:

  • 有毛發(fā)的動物是哺乳類;
  • 有奶的動物是哺乳類;
  • 有羽毛的動物是鳥類;
  • 若動物會飛且生蛋,則它是鳥類;
  • 吃肉的哺乳類稱為食肉動物;
  • 犬牙利爪,眼睛向前的是食肉類;
  • 反芻食物的哺乳類是有蹄類;
  • 有蹄的哺乳類是有蹄類;
  • 黃褐色有黑色條紋的食肉類是老虎;
  • 黃褐色有暗斑點的食肉類是金錢豹;
  • 長腿長脖有黃褐色暗斑點的有蹄類是長頸鹿;
  • 有黑白條紋的有蹄類是斑馬;
  • 不會飛腿長脖黑白色的鳥是鴕鳥;
  • 不會飛善游泳黑白色的鳥是企鵝;
  • 善飛的鳥是信天翁.
  • 把規(guī)則庫重新寫一遍就可以了,或者你再新建一個文本文件

    if 有毛發(fā) then 哺乳類 if 有奶 then 哺乳類 if 有羽毛 then 鳥類 if 會飛 and 生蛋 then 鳥類 if 吃肉 and 哺乳類 then 食肉動物 if 犬牙 and 利爪 and 眼睛向前 then 食肉類 if 哺乳類 and 反芻食物 then 有蹄類 if 哺乳類 and 有蹄 then 有蹄類 if 食肉類 and 黃褐色 and 黑色條紋 then 老虎 if 食肉類 and 黃褐色 and 暗斑點 then 金錢豹 if 有蹄類 and 長脖 and 長腿 and 黃褐色 and 暗斑點 then 長頸鹿 if 有蹄類 and 黑白條紋 then 斑馬 if 鳥 and 不會飛 and 長脖子 and 長腿 and 黑白色 then 鴕鳥 if 鳥 and 不會飛 and 善游泳 and 黑白色 then 企鵝 if 鳥 and 善飛 then 信天翁
    • 最后吐槽一句,產(chǎn)生式系統(tǒng)是真的傻,如果不對輸入進行模糊判斷,嘁嘁嘁(我沒有這樣搞,因為搞不好,以后有能力了再加上)

    • 所以呢,我這垃圾代碼,執(zhí)行時輸入一系列事實之前需要先看看規(guī)則庫的的前提;不然,你在事實中輸入’有奶‘,而規(guī)則庫中是’有乳‘,俺這代碼可不認你的’有奶‘


    文章推薦

    • 用Python實現(xiàn)命題邏輯歸結(jié)推理系統(tǒng)–人工智能
    • 合一算法的Python實現(xiàn)–人工智能

    總結(jié)

    以上是生活随笔為你收集整理的用Python实现一个动物识别专家系统--人工智能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。