出租车¶

此环境属于文字游戏环境,其中包含关于环境的一般信息。
动作空间 |
|
观察空间 |
|
导入 |
|
出租车问题涉及在网格世界中导航至乘客,接载他们并将其送至四个位置之一。
描述¶
在 5x5 的网格世界中有四个指定的接送地点(红色、绿色、黄色和蓝色)。出租车从一个随机方格开始,乘客位于一个指定位置。
目标是将出租车移动到乘客所在位置,接载乘客,移动到乘客所需目的地,然后放下乘客。一旦乘客被放下,回合结束。
成功将乘客送达正确位置会获得正奖励。错误尝试接载/放下乘客以及在未收到其他奖励的每个步骤都会获得负奖励。
地图
+---------+
|R: | : :G|
| : | : : |
| : : : : |
| | : | : |
|Y| : |B: |
+---------+
摘自 Tom Dietterich 的《Hierarchical Reinforcement Learning with the MAXQ Value Function Decomposition》[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 - 动作是否会导致状态转移。
在某些情况下,执行一个动作对回合的状态没有影响。在 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')
is_raining=False
:如果为 True,出租车将以 80% 的概率沿预期方向移动,否则将以各 10% 的等概率向目标方向的左侧或右侧移动。
fickle_passenger=False
:如果为 True,当出租车离乘客起始位置移动一个方格后,乘客有 30% 的几率改变目的地。乘客反复无常只发生在第一次接载和成功移动后。如果乘客在起始位置被放下并再次接载,则不会再次触发。
参考文献¶
[1] T. G. Dietterich,《Hierarchical Reinforcement Learning with the MAXQ Value Function Decomposition》,Journal of Artificial Intelligence Research,第 13 卷,第 227–303 页,2000 年 11 月,doi: 10.1613/jair.639。
版本历史¶
v3:地图修正 + 更清晰的领域描述,v0.25.0 在 reset 和 step 信息中添加了动作掩码
在 Gymnasium
1.2.0
中,添加了is_rainy
和fickle_passenger
参数以与 Dietterich (2000) 对齐
v2:不允许出租车起始位置 = 目标位置,更新运行中的出租车观察,更新出租车奖励阈值。
v1:从 locs 中移除 (3,2),添加 passidx<4 检查
v0:初始版本发布