OpenAI Gym 源码阅读:创建自定义强化学习环境

本帖最后由 草莓干 于 2020-12-25 17:24 编辑

本文来源:乐聚机器人王松博士《OpenAI Gym 源码阅读:创建自定义强化学习环境》


Gym 介绍


Gym(https://gym.openai.com/)是一套开发强化学习算法的工具箱,包含了一系列内置的环境(https://gym.openai.com/docs/#environments),结合强化学习算法就可以对内置的环境进行求解。

1.jpg


例如,调用 CartPole-v0 环境的示例如下:

2.png


Gym 仿真主要包括:

  • 导入环境 gym.make(CartPole-v0)

  • 初始化环境 env.reset(),将强化学习环境设置为初始状态

  • 一步仿真 env.step(action),输入动作,获得环境反馈

  • 渲染可视化当前状态 env.render()


虽然 Gym 内置了大量强化学习环境,如果想训练自定义的强化学习问题,就必须要创建自定义的强化学习环境。


源码解析


根据上一节的 Gym 主要函数调用接口,CartPoleEnv(https://github.com/openai/gym/blob/master/gym/envs/classic_control/cartpole.py)继承了基类 gym.Env(https://github.com/openai/gym/blob/master/gym/core.py),里面定义了主要的 API 方法:

  • step

  • reset

  • render

  • close

  • seed


创建了自定义的环境,需要由 gym/envs/init.py(https://github.com/openai/gym/blob/master/gym/envs/__init__.py)进行注册,注册 id 名,指定路径gym.envs.classic_control:CartPoleEnv 和其他参数。

3.png


在 gym/envs/registration.py(https://github.com/openai/gym/blob/master/gym/envs/registration.py#L150)实例化了 1 个全局的 registry = EnvRegistry()

4.png


在 gym/envs/registration.py(https://github.com/openai/gym/blob/master/gym/envs/registration.py)中根据 entry_point 实例化环境 env

5.png


所以,总结一下,如果希望导入自定义环境的话,只需要在自定义的 package 中注册 id,并指定自定义 Env 类的路径

6.png


然后调用 gym.make(custom-env-name) 就能导入自定义的环境



创建自定义环境


根据上面注册环境的流程分析,可知,要引入自定义环境,不必改动 Gym 的源码,只需创建一个 Python 模块 即可。目录结构解释如下:

7.png


为了方便调试调用,以 pip install -e . 安装自定义模块。测试代码中,引入模块时,即可将自定义环境注册到 Gym 环境中。

8.png



自定义环境模块参考代码
  • apoddar573/Tic-Tac-Toe-Gym_Environment(https://github.com/wangshub/Tic-Tac-Toe-Gym_Environment)

  • PyBullet Gymperium(https://github.com/benelot/pybullet-gym)



参考

  • Tic-Tac-Toe-Gym_Environment(https://github.com/apoddar573/Tic-Tac-Toe-Gym_Environment)

  • Create custom gym environments from scratch - A stock market example(https://towardsdatascience.com/creating-a-custom-openai-gym-environment-for-stock-trading-be532be3910e)

  • pybullet-gym(https://github.com/benelot/pybullet-gym)


回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册

  • 0 关注
  • 14 粉丝
  • 115 帖子