出租车

../../../_images/taxi.gif

此环境是 Toy Text (玩具文本) 环境的一部分,其中包含有关环境的通用信息。

动作空间

Discrete(6) (离散空间(6))

观测空间

Discrete(500) (离散空间(500))

导入

gymnasium.make("Taxi-v3")

出租车问题涉及在网格世界中导航到乘客,接他们并将其送到四个位置之一。

描述

在 5x5 网格世界中,有四个指定的接送地点(红色、绿色、黄色和蓝色)。出租车从随机方格开始,乘客在指定的地点之一。

目标是驾驶出租车到乘客的位置,接上乘客,移动到乘客想要的目的地,然后放下乘客。一旦乘客被放下,回合结束。

玩家因成功将乘客送到正确位置而获得正奖励。因不正确的尝试接送乘客以及每一步未收到其他奖励而获得负奖励。

地图

    +---------+
    |R: | : :G|
    | : | : : |
    | : : : : |
    | | : | : |
    |Y| : |B: |
    +---------+

来自 Tom Dietterich 的 “具有 MAXQ 值函数分解的分层强化学习” [1]。

动作空间

动作形状为 (1,),范围为 {0, 5},指示出租车移动的方向或接送乘客。

  • 0:向南移动(向下)

  • 1:向北移动(向上)

  • 2:向东移动(向右)

  • 3:向西移动(向左)

  • 4:接乘客

  • 5:放下乘客

观测空间

有 500 个离散状态,因为有 25 个出租车位置,乘客的 5 个可能位置(包括乘客在出租车中的情况)和 4 个目的地位置。

地图上的目的地用颜色的首字母表示。

乘客位置

  • 0:红色

  • 1:绿色

  • 2:黄色

  • 3:蓝色

  • 4:在出租车上

目的地

  • 0:红色

  • 1:绿色

  • 2:黄色

  • 3:蓝色

观测值作为 int() 返回,它编码了相应的状态,计算公式为 ((taxi_row * 5 + taxi_col) * 5 + passenger_location) * 4 + destination

请注意,在一个回合中实际可以达到的状态有 400 个。 缺失的状态对应于乘客与其目的地位于同一位置的情况,因为这通常标志着回合的结束。 在成功回合结束后,当乘客和出租车都在目的地时,可以观察到另外四个状态。 这总共给出了 404 个可到达的离散状态。

起始状态

初始状态从可能的起始状态中均匀采样,其中乘客既不在目的地也不在出租车内。 有 300 个可能的初始状态:25 个出租车位置,4 个乘客位置(不包括在出租车内)和 3 个目的地(不包括乘客当前位置)。

奖励

  • 每步 -1,除非触发其他奖励。

  • +20 交付乘客。

  • -10 非法执行 “接乘客” 和 “放下乘客” 动作。

导致无操作的动作(例如撞墙)将导致时间步惩罚。 可以通过采样 info 中返回的 action_mask 来避免无操作。

回合结束

如果发生以下情况,回合结束

  • 终止:1. 出租车放下乘客。

  • 截断(当使用 time_limit 包装器时):1. 回合长度为 200。

信息

step()reset() 返回一个带有以下键的字典

  • p - 状态的转移概率。

  • action_mask - 动作是否会导致转移到新状态。

由于出租车不是随机的,因此转移概率始终为 1.0。 根据 Dietterich 论文(“The fickle taxi task”)实现转移概率是 TODO。

在某些情况下,采取动作不会对回合状态产生影响。 在 v0.25.0 中,info["action_mask"] 包含一个 np.ndarray,用于指定动作是否会改变状态的每个动作。

要采样一个修改动作,请使用 action = env.action_space.sample(info["action_mask"]) 或使用基于 Q 值的算法 action = np.argmax(q_values[obs, np.where(info["action_mask"] == 1)[0]])

参数

import gymnasium as gym
gym.make('Taxi-v3')

参考文献

[1] T. G. Dietterich, “具有 MAXQ 值函数分解的分层强化学习,” Journal of Artificial Intelligence Research, vol. 13, pp. 227–303, Nov. 2000, doi: 10.1613/jair.639。

版本历史

  • v3:地图更正 + 更清晰的领域描述,v0.25.0 动作掩码添加到 reset 和 step 信息中

  • v2:不允许出租车起始位置 = 目标位置,更新 rollout 中的出租车观测,更新出租车奖励阈值。

  • v1:从 locs 中删除 (3,2),添加 passidx<4 检查

  • v0:初始版本发布