Rllib文档提供了一些关于如何创建和培训自定义环境的信息。有一些关于注册该环境的信息,但我想它需要与健身房注册不同的工作方式。
我正在用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的环境,我还不清楚是否有同样的方法。有办法这样做吗?
发布于 2020-03-21 20:22:48
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()一起工作,可以使用自定义env和一个lambda函数:
env = env_creator('CustomEnv-v0')
tune.register_env('myEnv', lambda: config, env(config))从那里开始,tune.run()应该可以工作。这很烦人,但这是我找到的解决注册表问题的最好方法。
发布于 2020-08-12 15:58:07
下面是一个示例,说明如何定义一个Gym自定义环境并注册它,以便在Gym和RLlib 示例中使用。
请参见Python示例代码:
环境的Git的文件结构很棘手,但这允许Python从Git、pip、conda等导入环境--与您所要求的内容相关。我同意SimpleCorridor示例几乎没有意义,因为它在定义环境类的同一个文件中注册和使用自定义环境。同样,该示例展示了如何使用RLlib度量学习,但未能说明如何使用策略,即如何在用例中恢复和部署经过训练的策略的检查点。Ray的一篇即将发布的博文更详细地探讨了gym_example。
https://stackoverflow.com/questions/58551029
复制相似问题