当前位置: 首页 > news >正文

人工智能——猴子摘香蕉问题

一、实验目的

求解猴子摘香蕉问题,根据猴子不同的位置,求解猴子的移动范围,求解对应的过程,针对不同的目标状态进行求解。

二、实验内容

根据场景有猴子、箱子、香蕉,香蕉挂天花板上。定义多种谓词描述位置、状态等。

有从一处走到另一处、推箱子、爬到箱子、拿到香蕉 4 种操作。需输出猴子摘香蕉的四步步骤及对应谓词,从初始状态(猴子位置、箱子位置、香蕉位置,香蕉挂天花板、猴手空、猴不在箱上)达到目标状态(猴拿香蕉且在箱上)。

# -*- coding: utf-8 -*-
'''
人工智能:知识表示:谓词公式表示
实验1:猴子摘香蕉问题  Python代码
''''''定义类保存猴子位置、箱子位置、香蕉位置等信息'''
'''
拔高1:输出猴子进行某step之前的状态
拔高2:加入猴子伸手的高度、箱子的高度、香蕉被挂在墙上的高度
拔高3:加入前端代码,增加动画演示
'''
class predicate():monky = 0box = 0banana = 0monbox = 0# 全局变量, 表示步骤Step数量iStep = 0  def __init__(self, monky=0, box=0, banana=0, monbox=0):''' Initialize '''self.monky = monky      # 猴子的位置self.box = box          # 箱子的位置self.banana = banana    # 香蕉的位置self.monbox = monbox    # -1(或<0), 猴子不在箱子上# 1(或>=0), 猴子在箱子上self.monkyName = 'monky'self.boxName = 'box'self.bananaName = 'banana'self.iStep = 0def displayInit(self):''' 输出初始位置信息 '''self.AT(self.monkyName, self.monky)self.BOX(self.box)self.BAN(self.banana)self.OVER(self.bananaName)self.EMPTY(self.monkyName)if self.monbox < 0:self.NOT_ON(self.monkyName, self.boxName)elif self.monbox >= 0:self.ON(self.monkyName, self.boxName)def displayFinal(self):''' 输出最终位置信息 '''self.AT(self.monkyName, self.banana)self.BOX(self.banana)self.BAN(self.banana)self.HOLD(self.monkyName, self.bananaName)if self.monbox < 0:self.NOT_ON(self.monkyName, self.boxName)elif self.monbox >= 0:self.ON(self.monkyName, self.boxName)def AT(self, x, y):'''猴子在y位置上'''print('--------' + str(x) + '在' + str(y) + '位置上--------')def BOX(self, y):'''箱子在y的位置'''print('--------箱子在' + str(y) + '位置上--------')def BAN(self, y):'''香蕉在y的位置'''print('--------香蕉在' + str(y) + '位置上--------')def OVER(self, x):'''x被挂在天花版上'''print('--------' + str(x) + '被挂在天花版上--------')def EMPTY(self, x):'''x手中是空的'''print('--------' + str(x) + '手中是空的--------')def HOLD(self, x, z):'''x拿着z'''print('--------' + str(x) + '拿着' + str(z) + '--------')def ON(self, x, w):'''x在w上面'''print('--------' + str(x) + '在' + str(w) + '的上面--------')def NOT_ON(self, x, w):'''x不在w的上面'''print('--------' + str(x) + '不在' + str(w) + '的上面--------')def monkeyGoBox(self):''' GOTO(x,y):从x处走到y处 '''self.iStep = self.iStep + 1if self.monky != self.box:''' 猴子与箱子不在同一位置 '''print('step' + str(self.iStep) + ': monkey从位置' + str(self.monky) + '走到位置' + str(self.box))if self.monbox < 0:self.AT(self.monkyName, self.box)else:''' 猴子与箱子在同一位置 '''print('step' + str(self.iStep) + ': monkey在位置' + str(self.monky) + ', box在位置' + str(self.box) + \',猴子已经在箱子处')def monkeyMoveBox(self):''' PUSH(x,y):把箱子从x处推到y处 '''self.iStep = self.iStep + 1if self.box != self.banana:''' 箱子与香蕉不在同一位置 '''print('step' + str(self.iStep) + ': monkey把箱子从位置' + str(self.box) + '运到位置' + str(self.banana))self.AT(self.monkyName, self.banana)self.AT(self.boxName, self.banana)else:''' 箱子与香蕉在同一位置 '''print('step' + str(self.iStep) + ': box在位置' + str(self.box) + ', banana在位置' + str(self.banana), \', 箱子已在香蕉处')def monkeyOnBox(self):''' CLIMB(x):从x处爬上箱子 '''self.iStep = self.iStep + 1print('step' + str(self.iStep) + ': monkey从位置' + str(self.banana) + '处爬上箱子')self.ON(self.monkyName, self.boxName)self.monbox = 1def monkeyGetBanana(self):''' GET(x):从x处得到香蕉 '''self.iStep = self.iStep + 1print('step' + str(self.iStep) + ': monkey从位置' + str(self.banana) + '处摘到香蕉')self.HOLD(self.monkyName, self.bananaName)def doWork(self):''' main '''self.monkeyGoBox()self.monkeyMoveBox()self.monkeyOnBox()self.monkeyGetBanana()# 只在当前文件作为脚本直接执行时运行,被其他脚本调用时不执行
if __name__ == '__main__':monkey = input("请输入猴子位置:")banana = input("请输入香蕉位置:")box = input("请输入箱子位置:")# 创建对象p = predicate(monkey, banana, box, -1)print('初始位置信息:')p.displayInit()print('操作步骤如下:')#请用最少步骤完成猴子摘香蕉任务###########开始#############p.doWork()print('最终位置信息:')p.displayFinal()

结果:

相关文章:

人工智能——猴子摘香蕉问题

一、实验目的 求解猴子摘香蕉问题&#xff0c;根据猴子不同的位置&#xff0c;求解猴子的移动范围&#xff0c;求解对应的过程&#xff0c;针对不同的目标状态进行求解。 二、实验内容 根据场景有猴子、箱子、香蕉&#xff0c;香蕉挂天花板上。定义多种谓词描述位置、状态等…...

对ViT 中Patch Embedding理解

借鉴了这个博主的ViT Patch Embedding理解-CSDN博客&#xff0c;再加了一些理解。 就通过代码来理解吧 假设输入图像的维度为HxWxC&#xff0c;分别表示高&#xff0c;宽和通道数。 PatchEmbed 的类&#xff0c;它继承了 nn.Module&#xff0c;实现了将输入的2维图像&#…...

Redis基本命令详解

1. 基本命令 命令不区分大小写&#xff0c;而key是区分大小写的 # select 数据库间的切换 数据库共计16个 127.0.0.1:6379> select 1# dbsize 返回当前数据库的 key 的数量 127.0.0.1:6379[1]> dbsize# keys * 查看数据库所有的key 127.0.0.1:6379[1]> keys *# fl…...

Java之线程篇四

目录 volatile关键字 volatile保证内存可见性 代码示例 代码示例2-&#xff08;volatile&#xff09; volatile不保证原子性 synchronized保证内存可见性 wait()和notify() wait()方法 notify() 理解notify()和notifyAll() wait和sleep的对比 volatile关键字 volati…...

计算机毕业设计之:基于微信小程序的校园流浪猫收养系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…...

SpringBoot:关于Redis的配置失效(版本问题)

我们使用redis时发现yaml配置中的redis相关配置不生效&#xff0c;后面发现将配置修改甚至删除所有相关redis的配置&#xff0c;springboot依然能使用redis里面默认的db0并且不报错。上网查阅了一些文章&#xff0c;也都没有解决今天分享下&#xff0c;我的处理方法, SpringBo…...

halcon 快速定义字典

定义一个名为params的字典 Params : dict{} 等价于用 create_dict (Params ) 为字典添加键值对&#xff0c;在halcon中箭只能是字符串&#xff0c;值可以是任何类型的obj或者tuple Params.remove_outer_edges : true Params.max_gap : 150 等价于用 set_dict_object (true,…...

Sublime text3怎么关闭提示更新

问题 sublime text 3有新版本后,会不停地在每次启动后弹窗提示更新版本 第一步 软件安装之前&#xff0c;切记是软件安装之前&#xff01;&#xff01;&#xff01;需要在hosts中添加以下内容(屏蔽官网联网检测)&#xff1a;hosts的位置一般在C:\Windows\System32\drivers\etc…...

生成式语言模型技术栈

生成式语言模型的最新技术栈正在快速发展&#xff0c;尤其是随着大规模预训练模型&#xff08;LLMs&#xff09;和生成式AI的应用不断扩展。以下是当今最前沿的生成式语言模型技术栈&#xff0c;涵盖从模型开发到优化、推理和部署的各个环节。 1. 基础模型开发 基础模型开发包…...

进程分析工具Process Explorer使用

进程分析工具Process Explorer使用 Process Explorer让使用者能了解看不到的在后台执行的处理程序&#xff0c;能显示目前已经载入哪些模块&#xff0c;分别是正在被哪些程序使用着&#xff0c;还可显示这些程序所调用的DLL进程&#xff0c;以及他们所打开的句柄。Process Expl…...

vue 中如何实现鼠标拖动出发滚动条的跟随移动?

使用场景 在做弹窗、表单或 tab 切换需求的时候&#xff0c;有时候因为内容过长会导致出现滚动条&#xff0c;但是只能拖动滚动条时会导致操作不便&#xff0c;我们会希望实现通过拖动内容区实现滚动条的滑动。这样操作就会简单多了。 实现思路 如果要实现鼠标辅助触发滚动条…...

【Java EE】文件IO

Author&#xff1a;MTingle major:人工智能 --------------------------------------- Build your hopes like a tower! 目录 一、文件是什么&#xff1f; 二、针对文件系统操作的API 1.文件路径&#xff0c;文件名&#xff0c;文件是否存在 2. 创建文件 3.删除文件&#…...

使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息

要使用 React、Material-UI、Spring、MySQL、MyBatis 以及高德 API 模拟实时位置信息&#xff0c;你可以按以下步骤来实现&#xff1a; 目录 1. 前端 (React Material-UI) 2. 后端 (Spring Boot MyBatis MySQL) 3. 模拟实时位置数据 4. 前后端联调 1. 前端 (React Mat…...

UniApp一句话经验: px -> rpx动态转换和动态元素区域的获取

px->rpx转换 在多终端条件下&#xff0c;什么devicePixelRatio&#xff0c;upx2px都是不靠谱的&#xff0c;最直接的是这样&#xff1a; const { screenWidth } uni.getSystemInfoSync()const pixelUnit screenWidth / 750 // rpx->px比例基数 动态元素区域获取 多终…...

Python基于flask框架的智能停车场车位系统 数据可视化分析系统fyfc81

目录 技术栈和环境说明解决的思路具体实现截图系统设计python语言django框架介绍flask框架介绍性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示技术路线操作可行性详细视频演示源码获取 技术栈和环境说明 结合用户的使用需求&…...

海外服务器哪个速度最快且性能稳定

海外服务器的速度与性能稳定性受多种因素影响&#xff0c;包括地理位置、网络架构、基础设施质量以及用户网络路径等。在众多选择中&#xff0c;几个特定地区的服务器因其卓越表现而备受推崇。 首先&#xff0c;美国硅谷(加利福尼亚州)与纽约的服务器以其技术领先、网络连接稳定…...

C/C++通过CLion2024进行Linux远程开发保姆级教学

目前来说&#xff0c;对Linux远程开发支持相对比较好的也就是Clion和VSCode了&#xff0c;这两个其实对于C和C语言开发都很友好&#xff0c;大可不必过于纠结使用那个&#xff0c;至于VS和QtCreator&#xff0c;前者太过重量级了&#xff0c;后者更是不用说&#xff0c;主要用于…...

工程师 - 如何安装Windows 终端

Windows 终端是一款适用于 Windows 的现代命令行应用程序&#xff0c;支持多个终端会话&#xff0c;包括 Command Prompt、PowerShell 和 Windows Subsystem for Linux (WSL)。它具有标签式界面、可定制的设置&#xff08;如主题和按键绑定&#xff09;、改进的文本渲染以及对 …...

UniApp 从Vue2升级为Vue3需要注意哪些方面

Vue官方已经发布了Vue3&#xff0c;Vue2不再维护&#xff0c;也在建议大家都迁移到Vue3&#xff0c;所以Vue2终会被淘汰。 那么UniApp 从Vue2升级为Vue3需要注意哪些方面&#xff1a; 1、main.js 下面请看创建应用实例Vue2与Vue3的不同&#xff1a; Vue2的写法&#xff1a;…...

前端面试CSS常见题目

1. CSS 选择器的优先级 (Specificity) 面试官通常会问你如何计算 CSS 选择器的优先级&#xff0c;这对于避免样式冲突、提高代码可维护性很重要。 优先级计算规则&#xff1a; !important 优先级最高。内联样式&#xff08;例如&#xff1a;<div style"color: red;&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域&#xff0c;无损检测&#xff08;NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统&#xff0c;以非接触式光学麦克风技术为核心&#xff0c;打破传统检测瓶颈&#xff0c;为半导体、航空航天、汽车制造等行业提供了高灵敏…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

2025.6.9总结(利与弊)

凡事都有两面性。在大厂上班也不例外。今天找开发定位问题&#xff0c;从一个接口人不断溯源到另一个 接口人。有时候&#xff0c;不知道是谁的责任填。将工作内容分的很细&#xff0c;每个人负责其中的一小块。我清楚的意识到&#xff0c;自己就是个可以随时替换的螺丝钉&…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...