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

时间:2019-11-20 22:19:30

标签: python python-3.x ros reinforcement-learning openai-gym

使用Python3.6,Ubuntu 18.04,Gym 0.15.4,RoS旋律,Tensorflow 1.14和rl_coach 1.01:

我建立了一个自定义的Gym环境,该环境使用360元素数组作为observation_space。

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)

但是,此状态不足以通过ClippedPPO算法正确训练,我想在状态中添加以下附加功能:

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

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

TIA

2 个答案:

答案 0 :(得分:1)

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

import gym

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

答案 1 :(得分:0)

请查看gym.spaces.Tupleref

P.S。您可以看看我如何将其用于自己的ROS env here