OpenAI Gym:如何从自定义 OPenvironment 中访问环境注册数据(例如 max_episode_steps)?

OpenAI Gym: How do I access environment registration data (for e.g. max_episode_steps) from within a custom OPenvironment?

我使用 OpenAI Gym 创建了一个自定义环境。我想访问 init.py 中指定的 max_episode_steps 和 reward_threshold 例如:

from gym.envs.registration import registry, register, make, spec
register(
    id='myenv-v0',
    entry_point='gym.envs.algorithmic:myenv',
    tags={'wrapper_config.TimeLimit.max_episode_steps': 200},
    reward_threshold=25.0,
)

但是如何从 gym_myenv.py 访问它? 如果我先创建环境并使用 env._max_episode_steps,我就可以访问。但是,我无法从 [=33 中访问 _max_episode_steps =].

目前看来唯一的方法是在 init 方法之外访问它们,即在创建 gym 环境对象之后,即在任何其他方法中,如 reset( ) 或 render() 或其他。

可以使用 self.spec.max_episode_stepsself._max_episode_steps

访问

我不确定它是故意这样还是可能是一个错误。

如果您在此处看到 make() 的代码:

https://github.com/openai/gym/blob/c33cfd8b2cc8cac6c346bc2182cd568ef33b8821/gym/envs/registration.py#L76

Environmentspec 成为其 属性 之前实例化。我认为 max_timesteps 不是环境的固有 属性,目的是让环境具有任意数量的可能 max_timesteps,用于您可以为同一基础环境注册的各种环境 ID。

顺便说一句,如果您在该文件中看到第 51 行,则您在上面提供的标签将不起作用,因为该值已被您为 max_episode_steps 传递给 register() 的值覆盖。我刚刚测试了它。

这是您通过名称访问给定环境的 EnvSpec 的方式:

>>> spec = gym.envs.registration.spec('CartPole-v0')
>>> spec
EnvSpec(CartPole-v0)

根据the source。传递给 env 构造函数的 kwargs 应该存储在 spec._kwargs.

我只是想知道如何获得 reward_threshold,这是您可以从规范中获得的另一个例子:

>>> spec.reward_threshold
195.0

您还可以通过 env.spec.

访问环境规范