为什么在创建自定义环境时使用 OpenAI Gym 的 Env class 而不是什么都不用?

Why use Env class from OpenAI Gym as opposed to nothing when creating a custom environment?

这是一个关于使用 gym.Env 作为 superclass 的优势的一般性问题(相对于什么都不做):

我正在考虑为一个小实验构建我自己的强化学习环境。我已经阅读了几篇关于如何使用 OpenAI Gym 包中的 Env class 构建一个的博客文章(例如 https://medium.com/@apoddar573/making-your-own-custom-environment-in-gym-c3b65ff8cdaa)。但似乎我可以创建一个 environmnet 而根本不需要使用 class。例如。如果我想创建一个名为 Foo 的环境,教程建议我使用类似

的东西
class FooEnv(gym.Env)

不过我也可以用

class FooEnv()

我的环境仍将以完全相同的方式工作。我看到了使用 OpenAI Gym 的一个小好处:我可以以更简洁的方式启动不同版本的环境。但除此之外,任何人都可以描述或指出任何关于 gym.Env superclass 提供的巨大优势的资源吗?我想确保我充分利用了它们 :) 谢谢!

我认为这更像是一种确保社区将产生标准化环境的方法,在这种环境中,与环境对象的交互总是以相同的方式进行。

如果每个开发人员都对相同的基本概念使用不同的术语,那将很烦人。例如,如果没有人创建一个标准来遵守,你可以让人们以非常不同的方式定义 step 方法(make_stepforward_steptake_actionenv_step, 等), 或者甚至通过修改它的参数给它一个不同的签名。

当您从 gym.Env 继承时,请确保您将实现所需的方法,否则您将获得 NotImplementedError,请参阅 source file:

    def step(self, action):
    """Run one timestep of the environment's dynamics. When end of
    episode is reached, you are responsible for calling `reset()`
    to reset this environment's state.

    Accepts an action and returns a tuple (observation, reward, done, info).

    Args:
        action (object): an action provided by the agent

    Returns:
        observation (object): agent's observation of the current environment
        reward (float) : amount of reward returned after previous action
        done (bool): whether the episode has ended, in which case further step() calls will return undefined results
        info (dict): contains auxiliary diagnostic information (helpful for debugging, and sometimes learning)
    """
    raise NotImplementedError

这样,强化学习代理更容易重用并连接到不同的环境,而无需修改代码。

但总的来说你是对的,你从这个父 class 中几乎没有“直接”好处,除了你的代码将更可重用,这很重要!