如何使用 OpenAI 的健身房包注册自定义环境以在 SB3 中使用 make_vec_env()(用于多处理)?



目标:在稳定基线3中,我希望能够在我的环境中并行运行多个工作程序(多处理(来训练我的模型。

方法:如此Google Colab所示,我相信我只需要运行以下代码行:

vec_env=make_vec_env(env_id,n_envs=num_cpu(

但是,我有一个自定义环境,它没有env_id。所以,当我运行它就像";make_vec_env(MyEnvironment((,n_envs=3(";,我收到一个错误,说我的环境不可调用。这方面似乎普遍缺乏文档,但根据我从这个线程中收集到的信息,我需要向Gym注册我的自定义环境,以便我可以使用make_vec_env((函数调用它。

我的第一个问题是:有没有其他方法可以在自定义环境中运行多个工作者?如果不是。。。

我的第二个问题:如何在Gym注册我的自定义环境?

同样,文档似乎有些缺乏。我找到了这一、二、三个概述步骤的帖子。然而,我不明白——我可以把这个文件夹放在我想要的任何地方吗?健身房怎么知道在哪里可以找到它?为什么我需要两个init.py文件?

任何指导都将不胜感激。

您可以通过注册自定义env来解决这个问题,我们称之为myEnv。假设您将先前定义的数据帧传递给类的构造函数,它看起来如下:

class myEnv:
def __init__(self, myFancyDF: pd.DataFrame):
...

...

你可以通过在同一代码中的定义后面有这个来做到这一点:

myEnv_id = 'optionalSpaceName/myEnv-v0' # It is best practice to have a space name and version number.
gym.envs.registration.register(
id=myEnv_id,
entry_point=myEnv,
max_episode_steps=20000, # Customize to your needs.
reward_threshold=500 # Customize to your needs.
)

现在您可以创建一个矢量env与:

vec_env = make_vec_env(myEnv_id, n_envs=100, seed=0, env_kwargs={"myFancyDF": myFancyDF})

相关内容

  • 没有找到相关文章

最新更新