1.实验目的

1.熟悉知识的表示方法
2.掌握产生式系统的运行机制
3.产生式系统推理的基本方法。

2.实验内容

运用所学知识,设计并编程实现一个小型动物识别系统,能识别虎、金钱豹、斑马、长颈鹿、鸵鸟、企鹅、信天翁等七种动物的产生式系统。
规则库:
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 该动物是有蹄类动物
r 8: IF 该动物是哺乳动物 AND 是反刍动物
THEN 该动物是有蹄类动物
r9: IF 该动物是哺乳动物 AND 是食肉动物 AND 是黄褐色
AND 身上有暗斑点 THEN 该动物是金钱豹
r10:IF 该动物是哺乳动物 AND 是食肉动物 AND 是黄褐色
AND 身上有黑色条纹 THEN 该动物是虎
r11: IF 该动物是有蹄类动物 AND 有长脖子 AND 有长腿
AND 身上有暗斑点 THEN 该动物是长颈鹿
r 12:IF 该动物有蹄类动物 AND 身上有黑色条纹
THEN 该动物是斑马
r13:IF 该动物是鸟 AND 有长脖子 AND 有长腿 AND 不会飞
AND 有黑白二色 THEN 该动物是鸵鸟
r14: IF 该动物是鸟 AND 会游泳 AND 不会飞
AND 有黑白二色 THEN 该动物是企鹅
r15: IF 该动物是鸟 AND 善飞 THEN 该动物是信天翁
要求给定初始条件,能识别出是哪种动物。
比如已知初始事实存放在综合数据库中:
暗斑点,长脖子,长腿,奶,蹄
运行后得该动物是:长颈鹿

3.实验原理

产生式通常用于表示事实、规则以及它们的不确定性度量,适合于表示事实性知识和规则性知识。

  1. 确定性规则知识的产生式表示
  2. 不确定性规则知识的产生式表示
  3. 确定性事实性知识的产生式表示
  4. 不确定性事实性知识的产生式表示

产生式与谓词逻辑中的蕴含式的区别:

  • 除逻辑蕴含外,产生式还包括各种操作、规则、变换、算子、函数等。例如,“如果炉温超过上限,则立即关闭风门”是一个产生式,但不是蕴含式。
  • 蕴含式只能表示精确知识,而产生式不仅可以表示精确的知识,还可以表示不精确知识。蕴含式的匹配总要求是精确的。产生式匹配可以是精确的,也可以是不精确的,只要按某种算法求出的相似度落在预先指定的范围内就认为是可匹配的。

产生式的形式描述及语义——巴科斯范式BNF(backus normal form)

符号“::=”表示“定义为”;符号“|”表示“或者是”;符号“[ ]”表示“可缺省”。
产生式系统的基本结构

产生式系统

  1. 规则库:用于描述相应领域内知识的产生式集合
  2. 综合数据库:一个用于存放问题求解过程中各种当前信息的数据结构
  3. 控制系统:由一组程序组成,负责整个产生式系统的运行,实现对问题的求解。控制系统要做以下几项工作:
  • 从规则库中选择与综合数据库中的已知事实进行匹配。
  • 匹配成功的规则可能不止一条,进行冲突消解。
  • 执行某一规则时,如果其右部是一个或多个结论,则把这些结论加入到综合数据库中:如果其右部是一个或多个操作,则执行这些操作。
  • 对于不确定性知识,在执行每一条规则时还要按一定的算法计算结论的不确定性。
  • 检查综合数据库中是否包含了最终结论,决定是否停止系统的运行
    产生式表示法的特点
    优点:自然性、模块性、有效性、清晰性
    缺点:效率不高、不能表达结构性知识

4.解题思路

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

中间结论:

结论:

产生式规则转换如下:

5.Python实现

#动物识别系统
#自定义函数,判断有无重复元素
def judge_repeat(value,list=[]):for i in range(0,len(list)):if(list[i]==value):return 1else:if(i!=len(list)-1):continueelse: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 0elif(i=='14'):print("黄褐色,有黑色条纹,哺乳类,食肉类->虎\n")print("所识别的动物为虎")return 0elif(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 0elif(i=='20'):for i in list:if(i=='22'):print("善飞,鸟类->信天翁\n")print("所识别的动物为信天翁")return 0elif(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 0elif(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 0else:if(list.index(i) != len(list)-1):continueelse: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):continueelse: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):continueelse:breakjudge_last(list_real)

6.实验结果

7.实验分析

遇到困难是多层次映射(例如有毛与哺乳动物等效,则可以替换哺乳动物)难以解决,由于自身水平受限和时间约束,采用了暴力枚举把情况补充到了数据库中做出对应。
改进:可以使用Vector与map映射解决情况的出入

产生式系统实验(AI实验一)相关推荐

  1. 哥伦比亚大学AI实验室主任Hod Lipson:阻碍无人驾驶技术发展的7个误区

    来源:智车科技 摘要:我们发现有些针对无人驾驶的误解还在广泛肆意传播,并且这些信息会被反对者拿来和对抗无人驾驶的推广政策. 每年,全世界都有将近120万人死于车祸,这个死亡率相当于每年释放10个广岛级 ...

  2. c语言实验四报告,湖北理工学院14本科C语言实验报告实验四数组

    湖北理工学院14本科C语言实验报告实验四 数组.doc 实验四 数 组实验课程名C语言程序设计专业班级 14电气工程2班 学号 201440210237 姓名 熊帆 实验时间 5.12-5.26 实验 ...

  3. linux实验下载,linux实验linux实验.doc

    linux实验linux实验 嵌入式操作系统 实 验 指 导 书 苗暹 黄连丽 目 录 实验一 Linux命令使用 实验二 vi编辑器的使用 实验三 shell编程实验(一) 实验四 shell编程实 ...

  4. 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...

    周信东主编最新版C语言程序设计基础实验一实验报告.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我 ...

  5. c语言实验七实验报告,C语言实验七 数 实验报告.doc

    C语言实验七 数 实验报告 C语言程序设计 实 验 报 告 实验题目 实验七 函数 实验目的 掌握函数定义的方法: 掌握函数实参与形参的对应关系,以及值传递的方式. 掌握函数的嵌套调用和递归调用的方法 ...

  6. 上海大学matlab实验报告,实验中心

    自动化系实验中心介绍 一.基本情况 自动化系实验中心负责自动化系本科实验课程教学工作,现有专业实验室9个,面积共计790平方米,承担基础实验.专业实验等实验课程共11门(其中上海市精品实验课程1门). ...

  7. 计算机网络数据分析报告,贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式...

    贵州大学计算机网络实验报告-实验四-分析IP协议数据包格式 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.9 积分 贵州大学GUIZHOU UN ...

  8. 计算机交换机配置实验心得,实验六 三层交换机的配置实验报告

    实验报告 实验名称 三层交换机的配置 同组同学 实验成绩 一. 实验目的 (1)深入了解三层交换机的功能.特点及工作原理. (2)掌握三层交换机实现路由功能的方法. 二. 实验仪器设备及软件 Pack ...

  9. 2017-2018-1 20162306 实验五实验报告

    2017-2018-1 20162306 实验五实验报告 实验五-0-分析系统架构 精灵类ISprite:所有的类都继承精灵类. 战斗机类CombatAircraft:首先定义一架战斗机,通过获取坐标 ...

  10. 计算机网络实验设计应用题,计算机网络实验三实验报告.doc

    计算机网络实验三实验报告 实验综合成绩 (百分制) 实验评阅教师签名其中实验态度优良中及格不及格实验报告优良中及格不及格 实 验 报 告 实验时间: 2015年 12 月 24日 实验运行环境 win ...

最新文章

  1. 张正友平面标定法的一些注意事项
  2. 用于视频超分辨率的可变形三维卷积
  3. 关于 iOS 10 中 ATS 的问题
  4. python3 socket shutdown 简介
  5. 论文阅读: Direct Monocular Odometry Using Points and Lines
  6. PowerDesigner的下载及安装
  7. 增长量计算n+1原则_土方量计算方法
  8. Linux基础命令---findfs
  9. 会计电算化的重要物质基础计算机和,湖北工业大学工程技术学院会计电算化管理办法...
  10. asp.net引入一个js文件名为JScript的js脚本 报错 缺少对象
  11. java 正则 html 标签_Java正则 HTML 标签 得到 纯文本
  12. java5、java6、java7、java8的新特性
  13. Python之OpenGL笔记(31):扭动的软糖
  14. sirikit_iOS 12 Siri捷径SiriKit
  15. 按键拨号声音 DTMF MATLAB程序样例
  16. css 细线表格,如何在Dreamweaver中制作细线表格?
  17. iPhone 定位记录「重要地点」有多危险?用这招秒查另一半行踪
  18. 计算机应用计术,计算机应用技术.ppt
  19. Pascal 过程与函数
  20. PAT 乙级 1100 校庆

热门文章

  1. 各种电子面单-Api接口(顺丰、快递鸟、菜鸟)
  2. 欧瑞变频器800参数设置_欧瑞变频器E800说明书(中文)2014080504A(2014.08.05).pdf
  3. 虚拟偶像发展史:TA们到底如何成功?万字复盘
  4. 软件测试项目经验案例,项目经验又多了一些
  5. wwwscan批处理配置
  6. iTunes驱动程序缺少用于导入和刻录CD与DVD的注册设置
  7. 前端H5面试题(vue为主)
  8. 关于hibernate的mappedBy的使用:
  9. java数据库字段中文名称_如何得到数据库中所有表字段及字段中文描述
  10. FOC项目知识点总结三 | 完全搞懂 Clarke 与 Park 变换(附动图,仿真文件以及详细讲解数学推导过程)