如何在keras-rl/OpenAI GYM中实现自定义环境?

Man*_*ing 9 reinforcement-learning keras openai-gym keras-rl

我是强化学习的完全新手,并一直在寻找一个框架/模块,以轻松导航这个危险的地形.在我的搜索中,我遇到了两个模块keras-rl和OpenAI GYM.

我可以让他们两个在他们的WIKI上共享的示例上工作,但是它们带有预定义的环境,并且几乎没有关于如何设置我自己的自定义环境的信息.

如果有人能指出我的教程,或者只是向我解释如何设置非游戏环境,我真的很感激?

And*_*nko 16

我已经在这些库上工作了一段时间,可以分享我的一些实验.

让我们首先考虑作为自定义环境的示例文本环境,https://github.com/openai/gym/blob/master/gym/envs/toy_text/hotter_colder.py

对于自定义环境,应该定义一些东西.

  1. Constructor__init__方法
  2. 行动空间
  3. 观察空间(请参阅https://github.com/openai/gym/tree/master/gym/spaces了解所有可用的健身房空间(这是一种数据结构))
  4. _seed方法(不确定它是否必须)
  5. _step方法接受作为参数的动作并返回观察(动作后的状态),奖励(转换到新的观察状态),完成(布尔标志)和一些可选的附加信息.
  6. _reset方法实现剧集新开始的逻辑.

或者,您可以使用类似的方法创建_render方法

 def _render(self, mode='human', **kwargs):
        outfile = StringIO() if mode == 'ansi' else sys.stdout
        outfile.write('State: ' + repr(self.state) + ' Action: ' + repr(self.action_taken) + '\n')
        return outfile
Run Code Online (Sandbox Code Playgroud)

而且,为了更好的代码灵活性,您可以在_get_reward方法中定义奖励的逻辑,并通过_take_action方法中的操作更改为观察空间.

  • _seed方法不是强制性的.如果未实现,自定义环境将从gym.Env继承_seed.类似地,_render似乎也是可选的实现,尽管一个(或者至少我)似乎仍然需要包含一个类变量`metadata`,这是一个单词键的字典 - "render.modes"的值是一个列表允许的渲染模式.如果你没有实现_render,正确的值似乎是['human'] (2认同)