rllib使用自定义注册环境

问题描述 投票:1回答:1

Rllib文档提供了有关如何create and train a custom environment的一些信息。有一些有关注册该环境的信息,但我想它需要与gym registration不同地工作。

我正在使用SimpleCorridor环境进行测试。如果我将注册码添加到文件中,如下所示:

from ray.tune.registry import register_env

class SimpleCorridor(gym.Env):
   ...


def env_creator(env_config):
    return SimpleCorridor(env_config)

register_env("corridor", env_creator)

然后我就可以使用字符串名称来训练算法了,没问题:

if __name__ == "__main__":
    ray.init()
    tune.run(
        "PPO",
        stop={
            "timesteps_total": 10000,
        },
        config={
            "env": "corridor", # <--- This works fine!
            "env_config": {
                "corridor_length": 5,
            },
        },
    )

但是

将环境注册到您定义环境的同一文件中是没有意义的,因为您只能使用该类。 OpenAI体育馆注册很不错,因为如果您安装了环境,则只需编写

就可以在任何地方使用它
include gym_corridor

我尚不清楚是否有一种方法可以为rllib注册环境。有办法吗?

python openai-gym ray
1个回答
0
投票

ray中的注册表功能令人头疼;我不知道他们为什么不能识别其他环境,例如OpenAI Gym。

无论如何,我解决此问题的方法是将自定义环境包装在另一个自动导入环境的函数中,以便我可以重复使用代码。例如:

def env_creator(env_name):
    if env_name == 'CustomEnv-v0':
        from custom_gym.envs.custom_env import CustomEnv0 as env
    elif env_name == 'CustomEnv-v1':
        from custom_gym.envs.custom_env import CustomEnv1 as env
    else:
        raise NotImplementedError
    return env

然后,要使其与tune.register_env()一起使用,可以将自定义环境与lambda函数一起使用:

env = env_creator('CustomEnv-v0')
tune.register_env('myEnv', lambda: config, env(config))

[从这里开始,tune.run()应该起作用。这很烦人,但这是我发现可以解决此注册表问题的最佳方法。

© www.soinside.com 2019 - 2024. All rights reserved.