悬崖漫步(湿滑版)

_static/videos/toy_text/cliff_walking_slippery.gif

此环境属于文本玩具环境系列,其中包含有关该环境的通用信息。

动作空间

离散 (4)

观察空间

离散 (48)

导入

gymnasium.make("CliffWalkingSlippery-v1")

悬崖漫步是指穿过一个网格世界,从起点到目标,同时避免从悬崖上掉落。

描述

游戏开始时,玩家位于 4x12 网格世界的 [3, 0] 位置,目标位于 [3, 11]。如果玩家到达目标,则回合结束。

悬崖沿着 [3, 1..10] 分布。如果玩家移动到悬崖位置,则返回起始位置。

玩家持续移动,直到到达目标。

改编自 Sutton 和 Barto 的《强化学习:导论》例 6.6(第 132 页)[1]。

可以选择让悬崖变得湿滑(默认禁用),这样玩家有时可能会垂直于预期方向移动(参见 is_slippery)。

灵感来源于:https://github.com/dennybritz/reinforcement-learning/blob/master/lib/envs/cliff_walking.py

动作空间

动作形状为 (1,),范围为 {0, 3},表示玩家的移动方向。

  • 0: 向上移动

  • 1: 向右移动

  • 2: 向下移动

  • 3: 向左移动

观察空间

共有 3 x 12 + 1 种可能的状体。玩家不能处于悬崖位置,也不能处于目标位置,因为后者会导致回合结束。剩下的所有位置是前 3 行的所有位置加上左下角的单元格。

观察值是一个表示玩家当前位置的值,计算方式为 current_row * ncols + current_col(其中行和列都从 0 开始)。

例如,起始位置可以这样计算:3 * 12 + 0 = 36。

观察值以 int() 类型返回。

起始状态

回合开始时,玩家处于状态 [36](位置 [3, 0])。

奖励

每个时间步都会产生 -1 的奖励,除非玩家踩到悬崖,此时会产生 -100 的奖励。

回合结束

当玩家进入状态 [47](位置 [3, 11])时,回合结束。

信息

step()reset() 返回一个包含以下键的字典

  • “p” - 状态的转移概率。

由于悬崖漫步不是随机的,返回的转移概率始终为 1.0。

参数

import gymnasium as gym
gym.make('CliffWalking-v1')

参考文献

[1] R. Sutton 和 A. Barto,《强化学习:导论》,2020 年。[在线]。获取地址:http://www.incompleteideas.net/book/RLbook2020.pdf

版本历史

  • v1: 添加悬崖漫步的湿滑版本

  • v0: 初始版本发布