如何创建具有多种功能的 OpenAI Gym 观察空间

lea*_*fly 10 python reinforcement-learning python-3.x ros openai-gym

使用Python3.6、Ubuntu 18.04、Gym 0.15.4、RoS melodic、Tensorflow 1.14 和 rl_coach 1.01:

我构建了一个自定义 Gym 环境,它使用 360 元素数组作为观察空间。

high = np.array([4.5] * 360) #360 degree scan to a max of 4.5 meters
low = np.array([0.0] * 360)
self.observation_space = spaces.Box(low, high, dtype=np.float32)
Run Code Online (Sandbox Code Playgroud)

但是,这还不足以通过 ClippedPPO 算法进行正确训练,我想向我的状态添加其他功能,包括:

世界中的位置(x,y 坐标)
世界中的方向(四元数:x,y,z,w) 线性轨迹(x,y,z 坐标) 角轨迹(x,y,z 坐标)。

我将上面的四个特征放入自己的 np.arrays 中,并尝试将它们全部作为状态对象传递回来,但显然它与观察空间不匹配。space.Box 让我困惑。我假设我无法将所有这些功能转储到单个 np 数组中,因为上限和下限会有所不同,但是,我无法确定如何创建具有多个“功能”的 space.Box 对象。

TIA

CGF*_*FoX 10

gym.spaces.Dict是你所需要的:

import gym

spaces = {
  'position': gym.spaces.Box(low=0, high=100, shape=(2,),
  'orientation': ...
}
dict_space = gym.spaces.Dict(spaces)
Run Code Online (Sandbox Code Playgroud)

  • 你知道支持“Dict”观察空间的强化学习算法吗?我找不到,StableBaselines3 的文档说,不支持“Tuple”和“Dict”。 (2认同)
  • @Philipp我一直在使用 PPO 和来自 [Ray RLlib](https://docs.ray.io/en/master/rllib.html) 框架的“Dict”观察。据我了解,框架中的所有/大多数算法(有很多!)都支持“Dict”观察。 (2认同)

小智 1

请查看gym.spaces.Tuple课程 参考

PS 你可以在这里查看我如何将它用于我自己的 ROS 环境