本帖最后由 草莓干 于 2020-12-25 17:24 编辑 本文来源:乐聚机器人王松博士《OpenAI Gym 源码阅读:创建自定义强化学习环境》
Gym(https://gym.openai.com/)是一套开发强化学习算法的工具箱,包含了一系列内置的环境(https://gym.openai.com/docs/#environments),结合强化学习算法就可以对内置的环境进行求解。
例如,调用 CartPole-v0 环境的示例如下:
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 方法:
创建了自定义的环境,需要由 gym/envs/init.py(https://github.com/openai/gym/blob/master/gym/envs/__init__.py)进行注册,注册 id 名,指定路径gym.envs.classic_control:CartPoleEnv 和其他参数。
在 gym/envs/registration.py(https://github.com/openai/gym/blob/master/gym/envs/registration.py#L150)实例化了 1 个全局的 registry = EnvRegistry()
在 gym/envs/registration.py(https://github.com/openai/gym/blob/master/gym/envs/registration.py)中根据 entry_point 实例化环境 env
所以,总结一下,如果希望导入自定义环境的话,只需要在自定义的 package 中注册 id,并指定自定义 Env 类的路径
然后调用 gym.make(custom-env-name) 就能导入自定义的环境
根据上面注册环境的流程分析,可知,要引入自定义环境,不必改动 Gym 的源码,只需创建一个 Python 模块 即可。目录结构解释如下:
为了方便调试调用,以 pip install -e . 安装自定义模块。测试代码中,引入模块时,即可将自定义环境注册到 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)