Python小实验2—产生式系统实验

2023-11-18

1、实验内容

设已知初始事实存放在综合数据库中:
该动物身上有:暗斑点,长脖子,长腿,奶,蹄·推理机构的工作过程:
( 1)从规则库中取出r,检查其前提是否可与综合数据库中的已知事实匹配。匹配失败则r不能被用于推理。然后取r,进行同样的工作。匹配成功则r,被执行·综合数据库:
该动物身上有:暗斑点,长脖子,长腿,奶,蹄,哺乳动物
(2)分别用r,r4,rs,r,综合数据库中的已知事实进行匹配,均不成功。r,匹配成功,执行r,。
综合数据库:
该动物身上有:暗斑点,长脖子,长腿,奶,蹄,哺乳动物,有蹄类动物
( 3) r.匹配成功,并推出“该动物是长颈鹿”。
在这里插入图片描述
在这里插入图片描述

2、实验目的

1.建立规则库;
2.实现推理,打印推理过程,可文字或画图;
例如:
输入:该动物身上有:暗斑点,长脖子,长腿,奶,蹄输出:前提条件为:
有斑点长脖长腿蹄类产奶
推理过程如下:
产奶->哺乳类
有斑点,有黑色条纹,长脖,蹄类->长颈鹿
所识别的动物为长颈鹿

3、实验思路

1.实验先创建了一个特征数组characteristic ,将特征放进特征数组,方便后面提取特征时对比。
2.定义了一个bf算法BF(s, t)对比特征,可以从一句话里面提取有用的特征。
3.定义了一个描述数组describe 用来存放第二步提取的特征。
4.定义了一个特征搜索函数search(describe),里面包含推理的过程,如果满足某一条条件,就会打印出来。而且在推理过程里面有总结某一个新的特征,也会加到描述数组里面去。
5.最后定义了一个输出结果函数result(describe) 判断最终结果有没有要查找的七种动物,如果有就输出动物名字,没有就输出无法判断是什么动物。

4、源代码


# 特征数组
characteristic = ["毛发","奶","羽毛","会飞","吃肉","犬齿","有爪","眼盯前方","有蹄",
                  "反刍动物","哺乳动物","鸟","善飞","信天翁","食肉动物","黄褐色","暗斑点",
                  "黑色条纹","长腿","长脖子","有蹄类动物","虎","金钱豹","长颈鹿","斑马",
                  "不会飞","黑白二色","会游泳","鸵鸟","企鹅","下蛋"]

# 描述数组
describe = []

def BF(s, t):
    i = 0
    j = 0
    k = 0
    flag = -1
    while (i < len(s) and j < len(t)):

        # 匹配成功
        if (i - k == j) and (j == len(t) - 1) and (s[i] == t[j]):
            flag = k
            break
        # s和t相等就继续向后匹配
        if s[i] == t[j]:
            i = i + 1
            j = j + 1

        # 不相等从k的位置开始匹配
        else:
            k = k + 1
            i = k
            j = 0
            # 假如s中所剩字符小于t中所剩字符
            if (len(s) - i) < len(t):
                flag = -1
                break

    return flag


print("请输入描述语句:")
S = input()

for i in range(len(characteristic)):
    if(BF(S,characteristic[i])!=-1):
        describe.append(characteristic[i])

def search(describe):
    for i in range(len(describe)):
        if(describe[i]=="毛发" or describe[i]=="奶"):
            print(describe[i]+"-->"+"哺乳动物")
            if("哺乳动物" not in describe):
                describe.append("哺乳动物")

        if(describe[i]=="羽毛"):
            print(describe[i]+"-->"+"鸟")
            if("鸟" not in describe):
                describe.append("鸟")

        if(describe[i] == "吃肉"):
            print(describe[i]+"-->"+"食肉动物")
            if ("食肉动物" not in describe):
                describe.append("食肉动物")

    if("会飞" in describe and "下蛋" in describe):
        print("会飞,下蛋--->鸟")
        if("鸟" not in describe):
            describe.append("鸟")

    if("犬齿" in describe and "有爪" in describe and "眼盯前方" in describe):
        print("犬齿,有爪,眼盯前方--->食肉动物")
        if("食肉动物" not in describe):
            describe.append("食肉动物")

    if("哺乳动物" in describe and "有蹄" in describe):
        print("哺乳动物,有蹄--->有蹄类动物")
        if("有蹄类动物" not in describe):
            describe.append("有蹄类动物")

    if("哺乳动物" in describe and "反刍动物" in describe):
        print("哺乳动物,反刍动物--->有蹄类动物")
        if("有蹄类动物" not in describe):
            describe.append("有蹄类动物")

    if("哺乳动物" in describe and "黄褐色" in describe and "食肉动物" in describe):
        if("暗斑点" in describe):
            print("哺乳动物,食肉动物,黄褐色,暗斑点--->金钱豹")
            if("金钱豹" not in describe):
                describe.append("金钱豹")
        if ("黑色条纹" in describe):
            print("哺乳动物,食肉动物,黄褐色,黑色条纹--->金钱豹")
            if ("虎" not in describe):
                describe.append("虎")

    if("有蹄类动物" in describe and "长脖子" in describe and "长腿" in describe and "暗斑点" in describe):
        print("有蹄类动物,长脖子,长腿,暗斑点--->长颈鹿")
        if("长颈鹿" not in describe):
            describe.append("长颈鹿")

    if("有蹄类动物" in describe and "黑色条纹" in describe):
        print("有蹄类动物,黑色条纹--->斑马")
        if("斑马" not in describe):
            describe.append("斑马")

    if ("鸟" in describe and "长脖子" in describe and "长腿" in describe and "不会飞" in describe and "黑白二色" in describe):
        print("鸟,长脖子,长腿,不会飞,黑白二色--->鸵鸟")
        if ("鸵鸟" not in describe):
            describe.append("鸵鸟")

    if ("鸟" in describe and "会游泳" in describe  and "不会飞" in describe and "黑白二色" in describe):
        print("鸟,会游泳,不会飞,黑白二色--->企鹅")
        if ("企鹅" not in describe):
            describe.append("企鹅")

    if("鸟" in describe and "善飞" in describe):
        print("鸟,善飞--->信天翁")
        if("信天翁" not in describe):
            describe.append("信天翁")

def result(describe):
    for i in range(len(describe)):
        if(describe[i]=="虎" or describe[i]=="金钱豹" or describe[i]=="斑马"
            or describe[i]=="长颈鹿" or describe[i]=="鸵鸟" or describe[i]=="企鹅" or describe[i]=="信天翁"):
            print("该动物是:"+describe[i])

    if("虎" not in describe and "金钱豹" not in describe and "斑马" not in describe
            and "长颈鹿" not in describe and "鸵鸟" not in describe
            and "企鹅" not in describe and "信天翁" not in describe):
        print("无法判断是什么动物!")

print()
print("提取或者总结的特征:")
print(describe)
print()
print("推理过程:")
search(describe)
print()
print("结论:")
result(describe)

5、实验结果

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python小实验2—产生式系统实验 的相关文章

随机推荐

  • 软考:中级软件设计师:多媒体基础,音频,图像,颜色,多媒体技术的种类,图像音频视频的容量计算,常见的多媒体标准

    软考 中级软件设计师 多媒体基础 提示 系列被面试官问的问题 我自己当时不会 所以下来自己复盘一下 认真学习和总结 以应对未来更多的可能性 关于互联网大厂的笔试面试 都是需要细心准备的 1 自己的科研经历 科研内容 学习的相关领域知识 要熟
  • 第24讲 Python 复数数据类型详解(complex)

    您的 关注 和 点赞 是认可 是支持 是动力 如意见相佐 可留言 本人必将竭尽全力试图做到准确和全面 终其一生进行修改补充更新 本文首发在IT羊资源网 IT羊资源网 网址 https www ityangzy com IT羊资源网是IT世界
  • 我30岁了,转行学编程可以吗? 排除法告诉你答案 ...

    我30岁了 转行学编程可以吗 排除法告诉你答案 白月黑羽网站的读者在群里问过好几次 这个问题 但是这个问题太笼统了 其实不好回答 白月黑羽的这篇博客将根据的你的自身状况 不断的添加 自身条件的假设 采用排除法 认真的回答这个问题 既然有 转
  • ImageJ按照Little-Endian格式存储raw文件

    opencv图像处理是针对little endian数据 多帧堆叠情况下 否则结果错误 下面介绍如何用imageJ存储raw 参考 https imagej nih gov ij docs menus file html 1 在ImageJ
  • 毕设 STM32的FRID高速收费系统(源码+硬件+论文)

    文章目录 0 前言 1 主要功能 2 系统架构 3 硬件设计原理图 4 软件设计流程 称重模块HX711模块子流程 步进电机子流程 5 关键代码 6 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和
  • Python库这么多,如何记住呢?

    大家不要着急去收藏Python库 了解python的一些常用库就可以了 具体学到什么方向可以找个项目直接做 过程中接触到什么库再去学 下面给大家介绍几种查找Python库的方法 一 查看官方文档 要知道有哪些 大家可以查看官方文档 比如常用
  • 关键字static的理解

    1 概念 像在VB C C C Java PHP Objective C JavaScript中我们可以看到static作为关键字和函数出现 在其他的高级计算机语言如FORTRAN ALGOL COBOL BASIC LISP SNOBOL
  • Kotlin - 文件类 File

    文件操作 遍历 walk 自上而下 深度优先 遍历整个文件夹 walkBottomUp 自下而上的顺序遍历文件目录和内容 walkTopDown 自上而下的顺序遍历文件目录和内容 名称 extension 文件名的后缀格式 不包含 例如 m
  • [激光原理与应用-45]:《焊接质量检测》-2- 常见焊接缺陷与检验方法

    目录 一 概述 二 焊接缺陷的分类 2 1 按产生原因 2 2 按性质分有 2 3 按在焊缝中的位置分有 三 焊接缺陷检验的常用方法 一 概述 对于一个金属结构来说 焊接检验就是对所有焊缝或焊接接头而言的 也就是对焊接缺陷的检验 但焊接接头
  • idea 编译成功启动失败

    环境 Windows10 IntelliJ IDEA 2021 2 3 Ultimate Edition Apache Maven 3 8 3 SpringBoot版本 2 1 13 RELEASE 问题描述 SpringBoot项目启动时
  • html输入浮点型,input框限定输入值为浮点型代码分享

    本文主要为大家带来一篇对于input 框限定输入值为浮点型的js代码 小编觉得挺不错的 现在就分享给大家 也给大家做个参考 一起跟随小编过来看看吧 希望能帮助到大家 在一些项目中 比如金额用到浮点型 对于input 限定可以参考以下 fun
  • 信创-大数据平台CPU架构支持

    一 CDH和HDP CDP CDP数据中心类似于CDH和HDP 直接安装在硬件服务器上 目前支持市面上主流的X86服务器 包括国内海光服务器 CDH不支持ARM 以上两种大数据平台都仅支持x86架构 早在几年期RedHat联手clouder
  • IntelliJ Idea 常用快捷键 列表(实战终极总结!!!!)

    自动代码 常用的有fori sout psvm Tab即可生成循环 System out main方法等boilerplate样板代码 例如要输入for User user users 只需输入user for Tab 再比如 要输入Dat
  • SQL BOY 4 款脚本工具利器

    对于正在运行的mysql 性能如何 参数设置的是否合理 账号设置的是否存在安全隐患 你是否了然于胸 俗话说工欲善其事 必先利其器 定期对你的MYSQL数据库进行一个体检 是保证数据库安全运行的重要手段 今天和大家分享几个mysql 优化的工
  • Java多线程工具类之循环栅栏计数器

    Java多线程下循环计数器 本文主要内容 CyclicBarrier 下文中凯哥就用cycBar来代替 定义介绍 举例说明 代码演示 从源码来看原理及总结 CyclicBarrier与CountDownLatch 下文就用CountDown
  • 多分类SVM支持向量机的matlab仿真

    目录 一 理论基础 二 核心程序 三 仿真结论 一 理论基础 支持向量机 Support Vector Machine SVM 是一种在统计学习基础上发展起来的机器学习方法 其最大特点是根据Vapnik结构风险最小化原则 它的基本模型是定义
  • 从0到1:如何建立一个大规模多语言代码生成预训练模型

    国产AI辅助编程工具CodeGeeX是一个使用AI大模型为基座的辅助编程工具 帮助开发人员更快的编写代码 可以自动完成整个函数的编写 只需要根据注释或Tab按键即可 它已经在Java JavaScript和Python等二十多种语言上进行了
  • 判断机器大端小端的方法

    Big Endian和Little Endian的定义如下 1 Little Endian就是低位字节排放在内存的低地址端 高位字节排放在内存的高地址端 2 Big Endian就是高位字节排放在内存的低地址端 低位字节排放在内存的高地址端
  • DAC0832数模转换芯片介绍及使用教程

    1 芯片简介 DAC0832是采样频率为八位的D A转换芯片 集成电路内有两级输入寄存器 使DAC0832芯片具备双缓冲 单缓冲和直通三种输入方式 D A转换结果采用电流形式输出 若需要相应的模拟电压信号 可通过一个高输入阻抗的线性运算放大
  • Python小实验2—产生式系统实验

    文章目录 1 实验内容 2 实验目的 3 实验思路 4 源代码 5 实验结果 1 实验内容 设已知初始事实存放在综合数据库中 该动物身上有 暗斑点 长脖子 长腿 奶 蹄 推理机构的工作过程 1 从规则库中取出r 检查其前提是否可与综合数据库