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

一、实验目的

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

二、实验内容

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

有从一处走到另一处、推箱子、爬到箱子、拿到香蕉 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()

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/428466.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python语言初识(二)】

一、分支结构 1.1、if语句 在Python中&#xff0c;要构造分支结构可以使用if、elif和else关键字。所谓关键字就是有特殊含义的单词&#xff0c;像if和else就是专门用于构造分支结构的关键字&#xff0c;很显然你不能够使用它作为变量名&#xff08;事实上&#xff0c;用作其他…

Python编码系列—Python适配器模式:无缝集成的桥梁

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

UGit:腾讯自研的Git客户端新宠

UGit 是一款专门针对腾讯内部研发环境特点量身定制的 Git 客户端&#xff0c;其目标在于大幅提升开发效率以及确保团队协作的高度流畅性。UGit 能够良好地支持 macOS 10.11 及以上版本、Apple Silicon 以及 Win64 位系统。 可以下载体验一把。 https://ugit.qq.com/zh/index.…

稀土抗菌剂:厨房用品中的安全卫士

稀土抗菌剂的抗菌机制是基于稀土的光催化半导体特性&#xff0c;通过光生氧自由基ROS机理杀灭细菌&#xff1b;稀土化合物与细菌表面静电结合&#xff0c;造成直接的杀灭&#xff1b;稀土化合物破坏细胞膜通透性&#xff0c;造成破损导致细胞质流出杀灭细菌;稀土离子跨膜后与细…

【Text2SQL】PET-SQL:在Spider基准测试中取得了SOTA

解读&#xff1a;PET-SQL: A Prompt-enhanced Two-stage Text-to-SQL Framework with Cross-consistency 这篇论文介绍了一个名为 PET-SQL 的文本到 SQL&#xff08;Text-to-SQL&#xff09;框架&#xff0c;旨在通过增强提示&#xff08;prompt&#xff09;和利用不同大型语言…

数据结构--双链表

目录 一、引言 二 、链表的分类 1.单向或双向 2.带头或不带头 3.循环或不循环 三、双链表的概念与基本结构 1.概念 2.基本结构 三、双链表的常见操作 1.创建节点 2.初始化 3.头插 4.尾插 5.头删 6.尾删 7.打印 8.查找 9.插入节点 10.删除节点 11.销毁链…

OpenAi assistant run always fails when called from PHP

题意&#xff1a;从 PHP 调用时&#xff0c;OpenAI 助理运行总是失败。 问题背景&#xff1a; The runs I create with the openai-php library fail direct in 100% of cases. What am I doing wrong? I do not have much experience with php but this is the test script.…

Codeforces Round 973 (Div. 2) - D题

传送门&#xff1a;Problem - D - Codeforces 题目大意&#xff1a; 思路&#xff1a; 尽量要 最大值变小&#xff0c;最小值变大 即求 最大值的最小 和 最小值的最大 -> 二分答案 AC代码&#xff1a; 代码有注释 #include<bits/stdc.h> using namespace std; #…

neo4j(spring) 使用示例

文章目录 前言一、neo4j是什么二、开始编码1. yml 配置2. crud 测试3. node relation 与java中对象的关系4. 编码测试 总结 前言 图数据库先驱者 neo4j&#xff1a;neo4j官网地址 可以选择桌面版安装等多种方式,我这里采用的是docker安装 直接执行docker安装命令: docker run…

Git之如何删除Untracked文件(六十八)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

基于Springboot的助学金管理系统设计与实现

文未可获取一份本项目的java源码和数据库参考。 一、研究背景 利用计算机来实现助学金管理系统&#xff0c;已经成为一种趋势&#xff0c;相比传统的手工管理方式&#xff0c;利用软件进行助学金管理系统&#xff0c;有着执行快&#xff0c;可行性高、容量存储大&#xff0c;…

【C#】内存的使用和释放

在 C# 中&#xff0c;内存管理主要是由 .NET 的垃圾回收器&#xff08;Garbage Collector, GC&#xff09;自动处理的。然而&#xff0c;了解如何正确地使用和释放内存对于编写高效且可靠的代码非常重要。以下是一些关键点和最佳实践&#xff1a; 1. 内存分配 托管资源&#x…

CSS——弹性盒子布局(display: flex)

CSS——弹性盒子布局&#xff08;display: flex&#xff09; 我们经常听说一种布局&#xff1a;Flexbox或者是弹性布局&#xff0c;它的全称叫做弹性盒子布局&#xff08;Flexible Box Layout&#xff09;&#xff0c;那么它到底该如何实现呢&#xff1f;从我们熟悉的 display…

大模型训练实战经验总结

在当今AI技术飞速发展的背景下&#xff0c;定制化大模型的自主训练已成为满足特定行业需求、保障数据安全、提升模型应用效能的关键途径。本文将深度剖析这一过程的核心价值与实践智慧&#xff0c;从数据隐私保护、模型透明度增强&#xff0c;到数据预处理的精细操作&#xff0…

Packet Tracer - IPv4 ACL 的实施挑战(完美解析)

目标 在路由器上配置命名的标准ACL。 在路由器上配置命名的扩展ACL。 在路由器上配置扩展ACL来满足特定的 通信需求。 配置ACL来控制对网络设备终端线路的 访问。 在适当的路由器接口上&#xff0c;在适当的方向上 配置ACL。…

Python编码系列—Python外观模式:简化复杂系统的快捷方式

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

ZYNQ FPGA自学笔记~操作PLL

一 时钟缓冲器、管理和路由 垂直时钟中心&#xff08;clock backbone&#xff09;将设备分为相邻的左侧和右侧区域&#xff0c;水平中心线将设备分为顶部和底部两侧。clock backbone中的资源镜像到水平相邻区域的两侧&#xff0c;从而将某些时钟资源扩展到水平相邻区域。BUFG不…

windows下编译MicroRTS-Py

1.microRTS&#xff08;java&#xff09; microRTS是java写的跨平台的小型即时战略模拟器。 Farama-Foundation/MicroRTS: A simple and highly efficient RTS-game-inspired environment for reinforcement learning (github.com)https://github.com/Farama-Foundation/Micr…

Kubeadm快速安装 Kubernetes集群

1. Kubernetes简介 Kubernetes&#xff08;k8s&#xff09;是谷歌开源的容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它具有以下特点&#xff1a; 开源容器化自动部署扩展高可用 2. Kubernetes架构 Kubernetes遵循主从式架构设计&#xff0c;主要分…

Python用TOPSIS熵权法重构粮食系统及期刊指标权重多属性决策MCDM研究|附数据代码...

原文链接&#xff1a;https://tecdat.cn/?p37724 在当今世界&#xff0c;粮食系统的稳定性至关重要。尽管现有的全球粮食系统在生产和分配方面表现出较高的效率&#xff0c;但仍存在大量人口遭受饥饿以及诸多粮食安全隐患。与此同时&#xff0c;在学术领域&#xff0c;准确评估…