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

人工智能-状态空间-猴子摘香蕉

一、实验目的

1. 利用计算机仿真整体流程;

2. 深入了解状态空间在实际问题中的应用;

3. 熟练 python 代码;

二、实验内容

这段Python代码旨在模拟一个经典的“猴子摘香蕉”问题场景,通过定义一系列函数来描述猴子为了摘到香蕉所执行的不同动作(如移动箱子、爬上箱子、摘取香蕉等),并根据用户输入的猴子、香蕉和箱子的初始位置,按照一定顺序调用这些函数,以展示猴子完成摘香蕉任务的步骤。

三、实验设备

笔记本电脑 (内存不低于 4G)

四、实验原理

1、全局变量初始化​​

i = 0  # 初始化全局变量i

定义了一个全局变量 i 并初始化为 0,用于记录猴子在执行摘香蕉任务过程中的动作步骤序号。

2、函数定义​​

Monkey_go_box(x, y):

def Monkey_go_box(x, y):

    global i

    i = i + 1

    print('step:', i,'monkey从', x, '走到', y)

该函数接受两个参数 x 和 y,分别表示箱子的起始位置和目标位置。函数内部首先将全局变量 i 加 1 以更新步骤序号,然后打印出猴子从位置 x 走到位置 y 运输箱子的步骤信息。

- `Monkey_move_box(x, y)`:

def Monkey_move_box(x, y):

    global i

    i = i + 1

    print('step:', i,'monkey把箱子从', x, '运到', y)

此函数同样接受两个位置参数 x 和 y,功能是将箱子从位置 x 移动到位置 y,并更新步骤序号和打印相应的操作步骤信息。它与 Monkey_go_box 功能类似,但更明确地表示是移动箱子这一动作。

- `Monkey_on_box()`:

def Monkey_on_box():

    global i

    i = i + 1

    print('step:', i,'monkey爬上箱子')

该函数不接受参数,作用是让猴子爬上箱子,更新步骤序号并打印猴子爬上箱子的步骤信息。

- `Monkey_get_banana()`:

def Monkey_get_banana():

    global i

    i = i + 1

    print('step:', i,'monkey摘到香蕉')

此函数用于表示猴子摘到香蕉的动作,更新步骤序号并打印相应的步骤信息。

3、用户输入部分​​

print("请输入 monkey、banana、box 的位置(空格分隔,如 A B C):")

monkey, banana, box = input().split()  # 读一行并分隔

首先通过 print 函数向用户输出提示信息,告知用户需要按照特定格式(空格分隔)输入猴子、香蕉和箱子的位置(位置用单个字符表示,如 A、B、C 等)。然后使用 input() 函数读取用户输入的一行字符串,并通过 split() 方法将其按空格分割成三个部分,分别赋值给 monkey、banana 和 box 变量。

​​操作步骤输出及函数调用​​

print('操作步骤如下:')

# 请用最少步骤完成猴子摘香蕉任务

# ##############开始###############

Monkey_move_box(monkey, box)

Monkey_on_box()

Monkey_move_box(box, banana)

Monkey_get_banana()

先通过 print 函数输出提示信息,告知用户接下来会展示猴子摘香蕉的操作步骤。然后依次调用上述定义的四个函数,按照“先将箱子从猴子所在位置移动到香蕉所在位置,接着猴子爬上箱子,再将箱子从猴子所在位置移动到香蕉所在位置,最后猴子摘到香蕉”的顺序来模拟猴子摘香蕉的过程,并在每次函数调用时打印出相应的操作步骤信息。

五、实验步骤与结果

代码模块:

i = 0  # 初始化全局变量i

def Monkey_go_box(x, y):

    global i

    i = i + 1

    print('step:', i,'monkey从', x, '走到', y)


 

def Monkey_move_box(x, y):

    global i

    i = i + 1

    print('step:', i,'monkey把箱子从', x, '运到', y)

def Monkey_on_box():

    global i

    i = i + 1

    print('step:', i,'monkey爬上箱子')


 

def Monkey_get_banana():

    global i

    i = i + 1

    print('step:', i,'monkey摘到香蕉')


 

# 直接使用input()读取一行输入,按回车结束

print("请输入 monkey、banana、box 的位置(空格分隔,如 A B C):")

monkey, banana, box = input().split()  # 读一行并分隔

print('操作步骤如下:')

# 请用最少步骤完成猴子摘香蕉任务

# ##############开始###############

Monkey_move_box(monkey, box)

Monkey_on_box()

Monkey_move_box(box, banana)

Monkey_get_banana()

实现结果:

1、程序开始,初始化全局变量 i 为 0,用于记录步骤序号。

2、定义一系列函数,分别描述猴子在不同操作(移动箱子、爬上箱子、摘取香蕉)时的行为以及步骤序号的更新和信息打印。

3、提示用户输入猴子、香蕉和箱子的位置,并读取用户输入,将其分割后赋值给相应变量。

4、输出操作步骤提示信息,然后按照预设的顺序依次调用相关函数,模拟猴子摘香蕉的过程,并在控制台打印每一步骤的信息。

六、本次实验总结

本次实验从状态空间的角度模拟了“猴子摘香蕉”问题,通过位置的变换实现。实验中,将猴子、香蕉和箱子的位置作为状态表示(如初始状态 (Monkey, Banana, Box)),并通过猴子移动(Monkey_go_box)、推箱(Monkey_move_box)、爬箱(Monkey_on_box)、摘香蕉(Monkey_get_banana)等动作实现状态转换。

​​状态表示:使用 (M, F, L) 描述猴子(M)、香蕉(F)、箱子(L)的当前位置。

​​初始状态:用户输入的初始位置(如 Monkey=A, Banana=B, Box=C)。

​​目标状态:猴子在香蕉位置且摘到香蕉(M=F, F=C)。

​​动作空间:定义四个操作动作,每次动作对应状态的唯一转换(如移动箱子后状态变为 (M', F, L')。

​​通过函数调用实现状态转移,并用步骤序号(i)标记过程。当前为固定顺序执行,但是没有找到全局最短路径。

评阅人:                    日期:                   

相关文章:

  • 【蓝桥杯省赛真题50】python字母比较 第十五届蓝桥杯青少组Python编程省赛真题解析
  • 【Qt】PyQt5 为什么Qt中的字体显示会模糊或呈现像素化
  • 排序01:多目标模型
  • Redisson 四大核心机制实现原理详解
  • 多模块,依赖android.car.jar后,能调用接口但是没有回调的问题
  • 关于Redisson分布式锁的用法
  • 计算机网络 : Socket编程
  • Java(基础) day01 初识Java
  • window 显示驱动开发-分页视频内存资源
  • 从 Vue3 回望 Vue2:生命周期的清晰化——从混乱钩子到明确时机
  • 分布式锁: Redis和ZooKeeper两种分布式锁对比
  • 操作系统之进程和线程听课笔记
  • IOP出版|第二届人工智能、光电子学与光学技术国际研讨会(AIOT2025)
  • 深入解析ZAB协议:ZooKeeper的分布式一致性核心
  • 济南超算研究所面试问题
  • Elasticsearch 索引副本数
  • Git基础使用方法与命令总结
  • Python线性回归:从理论到实践的完整指南
  • 【时空图神经网络 交通】相关模型2:STSGCN | 时空同步图卷积网络 | 空间相关性,时间相关性,空间-时间异质性
  • vue复杂数据类型多层嵌套的监听
  • 圆桌丨全球化博弈与人工智能背景下,企业如何落地合规体系
  • 上海博物馆展览进校园,“小先生”传递文物知识
  • 俄乌官员即将在土耳其会谈,外交部:支持俄乌开启直接对话
  • 上海市税务局:收到对刘某某存在涉税问题的举报,正依法依规办理
  • 中拉互联网发展与合作论坛在西安开幕
  • 魔都眼|锦江乐园摩天轮“换代”开拆,新摩天轮暂定118米