当前位置: 首页 > 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()

结果:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Altium Designer(AD)百度云下载与安装(附安装步骤)
  • 2024年华为杯中国研究生数学建模竞赛E题(高速公路应急车道紧急启用模型)思路
  • 第十二周:机器学习笔记
  • 错题集锦之C语言
  • 六、二分搜索-算法总结
  • 【JavaScript】数据结构之链表(双指针、滑动窗口)
  • PyTorch的特点
  • 编译运行 webAssembly(wasm)
  • C / C++的内存管理
  • 小程序与APP的区别
  • IDEA2023.1添加java虚拟机启动参数,打开断言
  • 与姜妍同款冰箱,容声516WILL养鲜冰箱领“鲜”上市
  • Oracle查询(下)
  • MySQL | 知识 | 从底层看清 InnoDB 数据结构
  • ChromaDB教程_2024最新版(下)
  • 深入了解以太坊
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 4. 路由到控制器 - Laravel从零开始教程
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JAVA并发编程--1.基础概念
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • linux学习笔记
  • python学习笔记-类对象的信息
  • Redux系列x:源码分析
  • Travix是如何部署应用程序到Kubernetes上的
  • vue中实现单选
  • 前端路由实现-history
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 手机端车牌号码键盘的vue组件
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ###C语言程序设计-----C语言学习(6)#
  • #pragma data_seg 共享数据区(转)
  • (07)Hive——窗口函数详解
  • (9)STL算法之逆转旋转
  • (C语言)fgets与fputs函数详解
  • (c语言)strcpy函数用法
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • ***通过什么方式***网吧
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net Application的目录
  • .net dataexcel 脚本公式 函数源码
  • .net Signalr 使用笔记
  • .NET企业级应用架构设计系列之结尾篇