【问题标题】:how to create an OpenAI Gym Observation space with multiple features如何创建具有多种功能的 OpenAI Gym Observation 空间
【发布时间】:2020-10-29 17:57:36
【问题描述】:

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

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

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 数组中,因为上限和下限会不同,但是,我无法确定如何创建具有多个“功能”的 space.Box 对象。

TIA

【问题讨论】:

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


    【解决方案1】:

    gym.spaces.Dict 是你需要的:

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

    【讨论】:

    • 你知道支持Dict观察空间的RL算法吗?我找不到,而且 StableBaselines3 的文档说,TupleDict 不受支持。
    • @Philipp 我一直在使用 PPO 和来自 Ray RLlib 框架的 Dict 观察结果。据我了解,框架中的所有/大部分算法(有很多!)支持Dict观察。
    • @CGFoX 所以当你训练代理时,Ray RLlib 是直接连接所有的 Dict 观察,还是有一个单独的 NN 用于 Dict 的每个 value()?
    • @SatyaPrakashDash 我不是 100% 确定,但我相信 RLlib 只是将值连接到单个向量并将向量传递给单个 NN。即,字典中的每个条目都没有单独的 NN。通常,这就是您想要的,因为您需要一个基于所有观察的 NN 输出(值、动作等),而不是仅基于部分观察的多个输出。
    • @CGFoX 是的,我也这么认为.. 谢谢。
    【解决方案2】:

    请看gym.spaces.Tupleref

    附:你可以看看我是如何将它用于我自己的 ROS env here

    【讨论】:

    • 我查看了您的源代码以及您如何返回 gym.spaces.Tuple 对象作为观察结果。然而,至少来自 StableBaselines3 的 RL 算法不支持Tuple 观察或动作空间。你能告诉我你用的是什么算法吗?
    猜你喜欢
    • 2020-03-09
    • 2022-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多