作者:肖智清

来源:AI科技大本营

强化学习环境库Gym于2021年8月中旬迎来了首个社区志愿者维护的发布版Gym 0.19。该版本全面兼容Python 3.9,增加了多个新特性。

强化学习环境库的事实标准Gym迎来首个社区发布版

Gym库在强化学习领域可以说是众人皆知。它是OpenAI于2016年推出的Python环境库,内置了冰面滑行FrozenLake、车杆平衡CartPole、小车上山MountainCar、双足机器人BipedalWalker等经典强化学习任务环境,是目前最常见的强化学习环境库。绝大多数人在学习强化学习时第一个接触到的环境库就是Gym库。Gym库也是在各类强化学习教程和学术论文中出现频率最高的环境库。它以压倒性的占有率成为强化学习环境库中无可匹敌的事实标准。

OpenAI Gym徽标(图片来源:http://gym.openai.com/)

近年来,由于OpenAI投入的资源有限,Gym一直处于被动维护状态。特别是Python 3.9在2020年10月发布后,Gym迟迟未能兼容Python 3.9。由于不能兼容Python 3.9,更进一步导致不能兼容其他库的最新版本,为研发过程中采用其他库的新特性带来了困难。由于Gym已经在学术界和工业界广泛应用,希望Gym能够兼容Python 3.9的呼声一直很高。在GitHub仓库中的讨论区中常常有留言希望Gym尽早兼容Python 3.9,并对其中的bug进行修订。

2021年7月,OpenAI将Gym交给由马里兰大学(University of Maryland College Park)博士生Justin Terry(GitHub:jkterry1)领衔的社区志愿者们来维护。在志愿者的合作下,2021年8月14日发布了首个社区维护的发布版Gym 0.19。发布文件已经在2021年8月17日上传到PyPI。

Justin Terry(图片来源:https://github.com/jkterry1)

众望所归,Gym 0.19兼容Python 3.9

让Gym兼容Python 3.9涉及到对其依赖的pyglet、pillow等库的兼容性维护,这也导致了Gym迟迟不能兼容Python 3.9。在Justin Terry等多名社区志愿者的通力合作下,本次发布版终于兼容了Python 3.9。这其中也不乏来自中国内地志愿者的贡献。其中,来自中国内地的GitHub用户ZhiqingXiao提交的PR#2135维护了依赖的pillow的版本。

Zhiqing Xiao(图片来源:http://github.com/zhiqingxiao)

在发布版Gym 0.19中,我们已经可以在Python 3.9中采用一行简单的pip命令来安装Gym。

在Python 3.9中安装Gym的命令(在Python 3.9下,此命令仅适用于Gym 0.19,不适合更早的Gym版本)

pip install –upgrade gym

安装完后,就可以在Python中正常使用Gym了。

下面的代码给出了使用Gym的冰面滑行环境FrozenLake-v1的示例。环境FrozenLake-v1是在Gym 0.19首次出现的环境,它的前身是2016年Gym收录的冰面滑行的环境FrozenLake-v0。2021年3月,GitHub用户ZhiqingXiao发现环境FrozenLake-v0的阈值设置存在错误,提交了PR#2205修复了该问题。

使用Gym的示例代码(此代码示例仅适用于Gym 0.19,更早版本会出现运行错误):

import numpy as np
import gym
env = gym.make("FrozenLake-v1")
print(env.observation_space) # 观测空间
print(env.action_space) # 动作空间
print(env.spec.reward_threshold) # 成功求解的阈值obs, reward, done = env.reset(), 0., False
episode_reward = 0.
while not done:action = np.random.randint(4)obs, reward, done, _ = env.step(action)episode_reward += reward
print(episode_reward) # 回合奖励

Gym 0.19的其他新特性

Gym 0.19还包括了其他新特性。

GitHub用户m-orsini提交的PR#2148使得类gym.spaces.MultiDiscrete类可以自定义数据类型。

为gym.spaces.MultiDiscrete类自定义数据类型的示例代码(该代码仅能用于Gym 0.19,更早版本会有运行错误)

gym.spaces.MultiDiscrete(nvec, dtype=np.bool) # dtype是新增的关键字参数,可传入数据类型。

由GitHub用户vwxyzjn提交的PR#2296使得VectorEnv类也可以使用RecordEpisodeStatistics类。

VectorEnv类和RecordEpisodeStatistics类联合使用的代码示例(该示例来源于vwxyzjn提交的PR#2296。仅适用于Gym 0.19,更早版本会出现运行错误):

import gym
from gym.vector import SyncVectorEnvdef make_env(gym_id, seed):def thunk():env = gym.make(gym_id)env.seed(seed)env.action_space.seed(seed)env.observation_space.seed(seed)return envreturn thunkenvs = SyncVectorEnv([make_env("CartPole-v1", 1 + i) for i in range(2)])
envs = gym.wrappers.RecordEpisodeStatistics(envs)
envs.reset()
for i in range(100):_, _, _, infos = envs.step(envs.action_space.sample())for info in infos:if "episode" in info.keys():print(f"i, episode_reward={info['episode']['r']}")break

由GitHub用户amtamsi提交的PR#2289使得Gym在导入环境时(特别是导入外部环境时)检查导入的环境。由于检查是在库内部进行的,这个更新对用户是透明的,不需要用户修改代码。在我们导入Gym的第三方扩展库(如棋盘游戏库boardgame2等)时,相关功能会自动使用。

尘封数十年的经典环境惊现闭式解,仅需2行代码求解车杆平衡问题

Gym中收录的环境很多是数十年来反复研究的经典问题,特别是像车杆平衡CartPole、小车上山MountainCar、双足机器人BipedalWalker这样的环境更是反复出现在学术论文和教程中。从去年开始,这些环境的闭式解陆续被首次公开,引发研究人员关注。

车杆平衡CartPole是Gym中最著名的环境之一,该问题由强化学习大师级人物Andrew Barto等人在1983年的论文《Neuronlike adaptive elements that can solve difficult learning control problem》里提出,至今仍是GitHub上最受欢迎的环境之一,同时也是强化学习教程最喜欢收录的环境之一。研究人员于近40年来首次发现了能够求解车杆平衡CartPole的闭式解,并在Gym的Wiki里的Leaderboard页面公开。

车杆平衡CartPole问题(图片来源:https://gym.openai.com/envs/CartPole-v0/)

Gym库收录了两个不同版本的车杆平衡CartPole环境:CartPole-v0和CartPole-v1。公开的闭式解用2行代码就可以求解两个环境,其闭式解的简洁程度着实令人感到意外。

车杆平衡CartPole的闭式解代码

position, velocity, angle, angle_velocity = observation
action = int(3. * angle + angle_velocity > 0.)

除了车杆平衡CartPole以外,还有数个经典环境如小车上山MountainCar、双足机器人BipedalWalker都在Gym的Wiki上公布了闭式解。闭式解大都形式简洁,有兴趣的读者可移步Gym的Wiki上的Leaderboard页面查阅。

作者简介

肖智清,清华大学工学博士。

著有《神经网络与PyTorch实战》《强化学习:原理与Python实战》。scipy、sklearn等开源项目源码贡献者。近7年发表SCI/EI论文十余篇,多个顶级期刊和会议审稿人。在国内外多项程序设计和数据科学竞赛上获得冠军。

强化学习环境库 Gym 发布首个社区发布版,全面兼容 Python 3.9相关推荐

  1. 强化学习——环境库OpenAI Gym

    前言 前段时间各大新闻媒体都在报道SpaceX的马斯克,因为其公司成功发射"猎鹰9号"火箭.马斯克是一个极具传奇色彩的人物,其成就也足以让他名垂青史.但今天我们要讨论的不是马斯克这 ...

  2. 强化学习环境全库安装(从mujoco到spinningup)

    强化学习环境全库安装 从mujoco200到spinningup (上篇) 前言 一: 安装Mujoco200物理引擎 二. 创建conda虚拟环境 1:选择python版本 2.创建conda虚拟环 ...

  3. openai的gym baseline spiningup 深度强化学习环境安装 手撸gym环境demo

    按照spiningup我们学习DRL,链接 https://github.com/openai/gym https://github.com/openai/baselines 1. 安装anacond ...

  4. 几行代码轻松实现,Tensorlayer 2.0推出深度强化学习基准库

    2019-11-11 16:37:04 机器之心发布 机器之心编辑部 强化学习通过使用奖励函数对智能体的策略进行优化,深度强化学习则将深度神经网络应用于强化学习算法.深度强化学习由于其可扩展性,受到科 ...

  5. Docker实操3——配置强化学习环境镜像

    手动配置一遍docker中的强化环境 一.安装基本操作 1.1 查看基础信息 1.2 国内换源 1.3 安装nvidia-docker 二.docker基本操作 三.例子:强化学习库的docker环境 ...

  6. PyTorch强化学习实战(1)——强化学习环境配置与PyTorch基础

    PyTorch强化学习实战(1)--强化学习环境配置与PyTorch基础 0. 前言 1. 搭建 PyTorch 环境 2. OpenAI Gym简介与安装 3. 模拟 Atari 环境 4. 模拟 ...

  7. DeepMind开源强化学习环境,灵活可配置,计算资源有限的小型实验室也能用

    铜灵 发自 凹非寺 量子位 出品 | 公众号 QbitAI 想搞强化学习,但算力门槛让不少人望而却步. 想想DeepMind训练的通用棋类AI AlphaZero,碾压一票同类选手,但堆砌了实验室里5 ...

  8. 打造一个投资组合管理的金融强化学习环境

    原创文章第120篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 今天继续金融强化学习环境. 网上的金融学习环境不少,但都太过于"业余",或者离 ...

  9. 星际争霸2 AI 强化学习环境部署

    星际争霸2 AI 强化学习环境部署 PySC2是DeepMind开发的星际争霸Ⅱ学习环境(SC2LE)的Python组件. 它封装Blizzard Entertainment的星际争霸Ⅱ机器学习API ...

最新文章

  1. spyder的输出面板不小心关掉了怎么办?
  2. banner特效php,jQuery自适应通栏宽屏banner幻灯片切换特效
  3. 【前端攻略】最全面的水平垂直居中方案与flexbox布局
  4. python enumeration_python模块之enum_上
  5. kmeanssklearn实例_sklearn实践(一):kmeans聚类
  6. LeetCode之Merge Sorted Array
  7. oracle增量备份0级,oracle_linux自动运行rman增量备份脚本,一、增量备份脚本0级备份脚本...
  8. zipkin brave mysql_zipkin mysql表结构
  9. 【Openstack】实录手动部署Openstack Rocky 双节点(1)- 基础服务
  10. ARM编译中的RO、RW和ZI DATA区段[转]
  11. 计算机二级C语言考试题库软件
  12. 计算机水平居中,excel表格居中设置可数据还是偏左-excel表格,页面设置选水平居中了,为什么预览时它......
  13. 最新表情包小程序+前后端去授权版/最火表情包小程序源码
  14. PE和CDlinux二合一启动盘制作
  15. Houdini图文笔记:VEX知识点小结(一)
  16. leetcode 166分数到小数
  17. C++ std:string 转 LPWSTR
  18. [历史档案]月光如水静静泻
  19. LeetCode每日一题——Day1
  20. CN_以太网规格和传输介质@双绞线@基带同轴电缆

热门文章

  1. hive基本操作与应用
  2. [转]构建基于WCF Restful Service的服务
  3. Linux --进程间通信--共享内存
  4. VMware Tools手动下载
  5. 军哥lnmp一键安装包nginx支持pathinfo配置
  6. 【教程】【FLEX】#004 反射机制
  7. PHP创建日志记录(已封装)
  8. cookie的作用域
  9. Web Developer中文版下载
  10. 应用基于资产的开发到 SOA 的服务中1