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

news/2024/11/15 0:43:07/

一、实验目的

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

二、实验内容

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

有从一处走到另一处、推箱子、爬到箱子、拿到香蕉 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.ppmy.cn/news/1527912.html

相关文章

深度学习中常见的损失函数

在机器学习和深度学习中&#xff0c;损失函数用于衡量模型预测值与真实值之间的差异。根据任务的类型&#xff08;如回归、分类等&#xff09;&#xff0c;可以使用不同的损失函数。下面列举了一些常见的损失函数&#xff1a; 1. 回归问题中的损失函数 回归任务的目标是预测连…

信息安全数学基础(9)素数的算数基本定理

前言 在信息安全数学基础中&#xff0c;素数的算数基本定理&#xff08;也称为唯一分解定理或算术基本定理&#xff09;是一个极其重要的定理&#xff0c;它描述了正整数如何唯一地分解为素数的乘积。这个定理不仅是数论的基础&#xff0c;也是许多密码学算法&#xff08;如RSA…

微信小程序开发第五课

一 vant-app # https://vant-contrib.gitee.io/vant-weapp/#/home1.1 集成步骤 # 0 必须使用专门为小程序提供的npm包&#xff0c;通常好多包用不了&#xff0c;比如第三方包用了dom&#xff0c;小程序没有 https://developers.weixin.qq.com/miniprogram/dev/devtools/npm.h…

超详细PS2019安装教程与安装步骤图文解析!保姆级教程!(附赠PS下载地址)

步骤1&#xff1a;下载Adobe Photoshop PS CC 2023下载链接&#xff1a;https://pan.quark.cn/s/f997e116f327 下载完成后&#xff0c;解压文件到当前文件夹&#xff08;随便用什么解压软件都行&#xff0c;现在解压软件都是免费的&#xff0c;没有的到360官网下载360压缩&am…

Verilog学习之旅~

记录Verilog的学习日常~ 第一阶段&#xff1a;牛客网刷题 1.Verilog快速入门 基础语法 VL1:四选一多路器&#xff1a;case语句、条件表达符&#xff1b; VL2:异步复位的串联T触发器:T触发器的基本功能及代码实现、异步复位的概念&#xff1b; VL3:奇偶校验&#xff1a;缩…

Django 聚合查询

文章目录 一、聚合查询二、使用步骤1.准备工作2.具体使用3.分组查询&#xff08;annotate&#xff09;1.定义2.使用3.具体案例 4.F() 查询1.定义2.使用 5.Q() 查询1.定义2.查询 一、聚合查询 使用聚合查询前要先从 django.db.models 引入 Avg、Max、Min、Count、Sum&#xff0…

QT开发:C++ Qt 信号与槽机制概括性总结

引言 在上一篇文章中&#xff0c;我们详细介绍了 Qt 中信号与槽的概念以及它们的使用方法&#xff0c;相信大家已经对 Qt 信号和槽机制有了一定的理解。当然我们要想学好开发技术&#xff0c;就得打好基础&#xff0c;从现在开始掌握每一个知识点。本文将基于前一篇内容&#x…

大语言模型-教育方向数据集

大语言模型-教育方向数据集 编号论文数据集1Bitew S K, Hadifar A, Sterckx L, et al. Learning to Reuse Distractors to Support Multiple-Choice Question Generation in Education[J]. IEEE Transactions on Learning Technologies, 2022, 17: 375-390.Televic, NL, https…