當(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):
第一問
先根據(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í)行情況:
把規(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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言——项目规范
- 下一篇: ros学习-中国大学MOOC---《机器