山东大学软件学院人工智能导论实验之知识库推理
目录
实验目的:
实验代码:
实验内容:
实验结果
实验目的:
输入相应的条件,根据知识库推理得出相应的知识。
实验代码:
def find_data(input_process_data_list):for epoch, data_process in enumerate(data_process_list):number = 0for i in input_process_data_list:if i in data_process:number += 1if number == len(data_process):if data_result_list[epoch] not in result_list:# 弹出前提和此过程结论,因为该过程已经推理过过,此结果存入需要查找的过程中result = data_result_list.pop(epoch)process = data_process_list.pop(epoch)# 判断临时结论是否已经存在中,存在则重新寻找,不存在则加入到字典中,并将其存入推导结果if result not in input_process_data_list:dict_input[','.join(process)] = result#键为前提,值为结果end_result = find_data(input_process_data_list + [result])if end_result == 1:return 1else:return 0# 存在则直接寻找else:end_result = find_data(input_process_data_list)if end_result == 1:return 1else:return 0# 已经是动物结果,取出结果后返回else:process = data_process_list.pop(epoch)dict_input[','.join(process)] = data_result_list[epoch]return 1if __name__ == '__main__':# 存储IF前提data_process_list = []# 存储THEN结果data_result_list = []# 存储用于查询的数据list_data = []# 用于存储输出结果dict_input = {}# 规则库txt = '''有毛发,哺乳类
产奶,哺乳类
有羽毛,鸟类
会飞,会下蛋,鸟类
吃肉,食肉类
有犬齿,有爪,眼盯前方,食肉类
哺乳类,有蹄,蹄类
哺乳类,反刍,蹄类
哺乳类,食肉类,黄褐色,有斑点,金钱豹
哺乳类,食肉类,黄褐色,有黑色条纹,虎
蹄类,长脖,长腿,有斑点,长颈鹿
蹄类,有黑色条纹,斑马
鸟类,长脖,长腿,不会飞,黑白二色,鸵鸟
鸟类,会游泳,不会飞,黑白二色,企鹅
鸟类,善飞,信天翁'''# 将数据预处理datas = txt.split('\n')for data in datas:data = data.split(',')data_process_list.append(data[:-1])data_result_list.append(data[-1].replace('\n', ''))# 最终结果列表result_list = ['信天翁', '鸵鸟', '斑马', '长颈鹿', '虎', '金钱豹', '企鹅']# 数据库对应的过程database = {'1': '有毛发', '2': '产奶', '3': '有羽毛', '4': '会飞', '5': '会下蛋', '6': '吃肉', '7': '有犬齿','8': '有爪', '9': '眼盯前方', '10': '有蹄', '11': '反刍', '12': '黄褐色','13': '有斑点', '14': '有黑色条纹','15': '长脖', '16': '长腿', '17': '不会飞', '18': '会游泳', '19': '黑白二色', '20': '善飞','21': '哺乳类','22': '鸟类', '23': '食肉类', '24': '蹄类'}# 打印顶部星号边框print('****************************** 输入对应条件前面的数字: ******************************\n')# 打印数据库内容,每6个一行,保持对齐for i, (key, value) in enumerate(database.items(), 1):if i % 6 ==1: # 每6个一行print('*',end='')print(f"{key}:{value:<8}", end=' ') # 保持每列宽度相同,对齐if i % 6 == 0: # 每6个一行print(' *') # 换行,并加上右侧的星号if len(database) % 6 != 0:print(' *') # 如果最后一行不足6个,也加上右侧的星号# 打印底部星号边框和提示信息print('**********************************************************************************')print('****************************** 当输入数字0时,程序结束 ******************************\n')# 循环输入,遇0退出while 1:print('请输入:',end='')term = input("")if term == '0':breakif database[term] not in list_data:list_data.append(database[term])# 打印前提条件print('前提条件为:')print(' '.join(list_data) + '\n')# 进行递归查找,直到找到最终结果,返回1则找到最终结果end_result = find_data(list_data)if end_result == 1:print('推理过程如下:')# 将结果进行打印for i in dict_input.keys():print(f"{i}->{dict_input[i]}")# 得到最终结果即输出所识别动物if dict_input[i] in result_list:print()print(f'所识别的动物为{dict_input[i]}')else:# 将结果进行打印for i in dict_input.keys():print(f"{i}->{dict_input[i]}")
实验内容:
首先,将已知的动物特征及其对应的种类整理成规则库。规则库中的每一条规则都包含两部分:前提(动物的特征)和结果(动物的种类)。

然后通过命令行界面,用户可以输入一系列动物的特征。这些特征从规则库中的前提部分选取,并通过数字进行标识。用户输入的特征被存储在一个列表中,作为推理系统的输入;
推理过程采用递归方法。首先,将用户输入的特征列表作为输入参数传递给递归函数。函数遍历规则库中的每一条规则,检查当前特征列表是否满足规则的前提部分。如果满足,则进一步检查该规则的结果是否已经在之前的结果列表中。如果结果不在结果列表中,则将该结果添加到输入特征列表中,并继续递归调用函数进行推理。如果找到满足所有条件的动物种类,则停止递归并返回结果。

推理完成后,系统输出推理过程及最终结果。推理过程以键值对的形式展示,最终结果是满足所有输入特征的动物种类。

实验结果

相关文章:
山东大学软件学院人工智能导论实验之知识库推理
目录 实验目的: 实验代码: 实验内容: 实验结果 实验目的: 输入相应的条件,根据知识库推理得出相应的知识。 实验代码: def find_data(input_process_data_list):for epoch, data_process in enumerat…...
【Uniapp-Vue3】点击将内容复制到剪切板
具体使用方法在官网: uni-app官网https://uniapp.dcloud.net.cn/api/system/clipboard.html大致使用方法如下: // value是需要复制的值 function copyValue (value) { uni.setClipboardData({data: value,success: res>{// 复制成功逻辑},fail:err&…...
英伟达 Isaac Sim仿真平台体验【2】
一、产品基础信息 仿真平台:NVIDIA Isaac Sim 4.1.0硬件配置:NVIDIA RTX 4090 2 (24GB显存)核心特性: Omniverse内核的多GPU物理加速原生PyTorch/TensorFlow集成支持基于USD的场景构建体系 二、GPU加速仿真实战 ▶ 多球体跌落测试 操作步…...
低代码与开发框架的一些整合[3]
1.基本说明 审批流程是企业内部运营的运行流程,与业务板块进行关联,在企业数智化过程中启动业务串联的作用,与AI业务模型及业务agent整合后,将大大提升企业的运行效率以及降低运营风险。 近期对开源的近40个携带流程平台的项目进…...
deepseek-r1-centos-本地服务器配置方法
参考: 纯小白 Centos 部署DeepSeek指南_centos部署deepseek-CSDN博客 https://blog.csdn.net/xingxin550/article/details/145574080 手把手教大家如何在Centos7系统中安装Deepseek,一文搞定_centos部署deepseek-CSDN博客 https://blog.csdn.net/soso67…...
C语言实现通讯录项目
一、通讯录功能 实现一个可以存放100个人的信息的通讯录(这里采用静态版本),每个人的信息有姓名、性别、年龄、电话、地址等。 通讯录可以执行的操作有添加联系人信息、删除指定联系人、查找指定联系人信息、修改指定联系人信息、显示联系人信…...
Effective Java读书笔记 draft
一、创建和销毁对象 1、静态工厂方法代替构造器 class Person{//构造器public Person(){}//静态工厂方法public static Person getInstance(){return new Person();} } 优势:1、有名字,代码更容易阅读理解;2、不用每次被调用时都创建新对…...
DeepSeek 助力 Vue 开发:打造丝滑的滑块(Slider)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
wordpress使用CorePress主题设置项总结
宝塔面板设置 软件商店中安装的软件有:(宝塔网站加速3.1)(Nginx 1.18.0)(MySql 5.6.50)(PHP-5.6)(phpMyAdmin 4.4)(Python项目管理器 …...
逆向pyinstaller打包的exe软件,获取python源码(6)
在ailx10:逆向pyinstaller打包的exe软件,获取python源码(3)中,我们逆向出了主程序,但是对其依赖的其他python文件并没有给出逆向方法,实际上非常简单,在PYZ-00.pyz_extracted 文件夹中,只要逆向…...
蓝桥杯 五子棋对弈
五子棋对弈 问题描述 “在五子棋的对弈中,友谊的小船说翻就翻?” 不!对小蓝和小桥来说,五子棋不仅是棋盘上的较量,更是心与心之间的沟通。这两位挚友秉承着"友谊第一,比赛第二"的宗旨ÿ…...
【单片机】MSP430MSP432入门
文章目录 0 前言1 开发方式选择2 CCS和开发相关软件3 Keil开发MSP4324 IAR for 430开发MSP4305 总结 0 前言 最近因为想学DSP,所以把之前卸载的CCS给装回来了,手头也还有之前电赛剩下的MSP430和MSP432的板子,由于年代久远,想着花点…...
货车一键启动无钥匙进入手机远程启动的正确使用方法
一、移动管家货车无钥匙进入系统的使用方法 基本原理:无钥匙进入系统通常采用RFID无线射频技术和车辆身份识别码识别系统。车钥匙需要随身携带,当车钥匙靠近货车时,它会自动与货车的解码器匹配。开门操作:当靠近货车后࿰…...
自学c++之类、对象、封装
class 类名{int a;//属性 public://权限操作; } 1、权限 public(公共权限)类内可以访问,类外可以访问protected(保护权限)类内可以访问,类外不可以访问(儿子可以访问父亲中的保护内容…...
在VSCode中安装jupyter跑.ipynb格式文件
个人用vs用的较多,不习惯在浏览器单独打开jupyter,看着不舒服,直接上教程。 1、在你的环境中pip install ipykernel 2、在vscode的插件中安装jupyter扩展 3、安装扩展后,打开一个ipynb文件,并且在页面右上角配置内核 …...
SQL_优化
1 SQL优化 (1) 数据读取 ①分区裁剪:使用时只读取需要的分区. ②列裁剪:读取操作(select、where、join、group by、sort by等),不读取不需要的列,减少IO消耗. (2) 数据筛选 ①分区先过滤,区分度大的字段先过滤. ②不在筛选字段上使用函数和表达式. (3) 分组聚合 ①使用窗口函数…...
Neo4j使用neo4j-admin导入csv数据方法
在neo4j desktop里创建project,创建dbms,创建database。 将csv文件放入如下import路径中,然后就可以使用相对路径来使用csv了。 在neo4j desktop中打开Terminal 键入导入数据语句: neo4j-admin database import full --nodes&qu…...
Node.js 登录鉴权
目录 Session express-session 配置 express-session 函数 ts 要配置声明文件 express-session.d.ts express-session 使用 express-session 带角色 Token 什么是 JWT token jsonwebtoken 使用 jsonwebtoken 带角色 Session express 使用 express-session 管理会话&…...
内存泄漏指什么?常见的内存泄漏有哪些?
内存泄漏是指程序在运行过程中,由于某些原因导致程序无法释放已经不再使用的内存,使得这部分内存持续被占用,最终可能导致系统可用内存逐渐减少,严重时会影响系统性能甚至导致程序崩溃。(内存泄漏是指程序中已经分配的…...
【PromptCoder】使用 package.json 生成 cursorrules
【PromptCoder】使用 package.json 生成 cursorrules 在当今快节奏的开发世界中,效率和准确性至关重要。开发者们不断寻找能够优化工作流程、帮助他们更快编写高质量代码的工具。Cursor 作为一款 AI 驱动的代码编辑器,正在彻底改变我们的编程方式。但如…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
