You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

适配Stable Baselines3 PPO:Gym中3D张量状态与动作空间选型咨询

状态空间选择

你的状态是形状为(1, 4, 17)的连续张量,直接使用Gymnasium.spaces.Box即可。Box是Gym专门用于多维连续观测的空间类型,需指定数值范围、形状和数据类型。比如假设状态值范围在0到1之间,定义方式如下:

import gymnasium as gym
import numpy as np

observation_space = gym.spaces.Box(low=0.0, high=1.0, shape=(1, 4, 17), dtype=np.float32)

如果状态内不同位置的数值范围有差异,也可以传入与形状匹配的low和high数组做精细化定义。

动作空间选择

你的动作分三个阶段,每个阶段对应数量不同的离散选项,最优方案是用Gymnasium.spaces.Discrete配合动作掩码:

  1. 先将动作空间定义为所有阶段中最大的动作数(这里是阶段II的7个):
action_space = gym.spaces.Discrete(7)
  1. 在环境内部维护当前所处阶段(该信息建议包含在状态张量中,或作为环境内部变量),每个step生成动作掩码——一个布尔数组,标记当前阶段哪些动作有效。比如阶段I的掩码为[True, True, True, True, True, False, False],表示前5个动作有效,后2个无效。
  2. Stable Baselines3的PPO支持动作掩码,你只需在环境的step或_get_obs方法中返回掩码,或训练时通过回调传入,就能让模型只选择当前阶段的有效动作。

若不想用动作掩码,也可在环境step方法中判断动作是否符合当前阶段:比如阶段I收到动作5/6时,直接执行"Do nothing"并给予负奖励,但这种方式效率低于动作掩码,还需要额外让模型学习无效动作的惩罚逻辑。

内容的提问来源于stack exchange,提问作者Margi Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 06:26:19