【问题标题】:How to implement custom environment in keras-rl / OpenAI GYM?如何在 keras-rl / OpenAI GYM 中实现自定义环境?
【发布时间】:2017-06-10 03:38:43
【问题描述】:

我是强化学习的新手,一直在寻找一个框架/模块来轻松驾驭这个险恶的地形。在我的搜索中,我遇到了两个模块 keras-rl 和 OpenAI GYM。

我可以让他们两个都完成他们在 WIKI 上共享的示例,但是它们带有预定义的环境,并且很少或根本没有关于如何设置我自己的自定义环境的信息。

如果有人能给我指点教程或者只是向我解释如何设置非游戏环境,我将非常感激?

【问题讨论】:

    标签: keras reinforcement-learning openai-gym keras-rl


    【解决方案1】:

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

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

    对于自定义环境,应该定义几件事。

    1. 构造函数__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
    

    此外,为了更好的代码灵活性,您可以在 _get_reward 方法中定义奖励的逻辑,并在 _take_action 方法中通过采取行动来更改观察空间。

    【讨论】:

    • _seed 方法不是强制性的。如果未实现,自定义环境将从gym.Env 继承_seed。同样,_render 似乎也可以选择实现,尽管一个(或至少我)似乎仍然需要包含一个类变量 metadata,它是一个字典,其单个键 - render.modes 的值是允许的渲染模式。如果不实现_render,正确的值似乎是['human']
    • @Andriy Lazorenko 你能详细说明一下吗?我需要训练一个 RL 代理来学习如何在办公室内导航。这里作为状态表示,我想对视觉信息(Real Visuals)进行采样。但是我怎样才能创建一个环境呢??
    • 是否可以为 openai 健身房的现有环境添加自定义奖励?
    • @Anakin 也许这会有所帮助:stackoverflow.com/questions/45068568/…
    猜你喜欢
    • 1970-01-01
    • 2020-03-15
    • 1970-01-01
    • 2019-06-04
    • 1970-01-01
    • 2019-09-21
    • 2021-11-25
    • 2019-01-14
    • 2020-10-18
    相关资源
    最近更新 更多