当前位置: 首页 > 编程日记 > 正文

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

图片

作者:肖智清

来源: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论文十余篇,多个顶级期刊和会议审稿人。在国内外多项程序设计和数据科学竞赛上获得冠军。

相关文章:

SCOM电子书

SCOM电子书介绍转载于:https://blog.51cto.com/286722/1599625

京东二面的几个问题

1. tcp 连接的最大数量,tcp 用什么来标识 2. 多线程时如何避免互斥 3. protected 关键字 4. 动态库和静态库 5. 线程池 6.多继承时的虚表 网络编程需要加强转载于:https://www.cnblogs.com/simplepaul/p/7865777.html

服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型

服务器集群负载均衡(F5,LVS,DNS,CDN)区别以及选型 下面是“黑夜路人”的《大型网站架构优化(PHP)与相关开源软件使用建议》 F5全称: F5-BIG-IP-GTM 全球流量管理器. 是一家叫F5 Networks的公司开发的四~七层交换机,软硬件捆绑. 据说最初用BSD系统,现在是…

linux下SVN不允许空白日志提交

在svn服务端通过hooks在提交时强制要求写日志。1. 在hooks目录里,复制文件pre-commit.tmpl到pre-commit2. 修改pre-commit文件,如下。#!/bin/shREPOS"$1"TXN"$2"SVNLOOK/usr/bin/svnlook #根据你的SVN目录而定LOGMSG$SVNLOOK log -t…

没有熙熙攘攘,百度VR在世界大会的一场奇妙之旅

你可听过玄奘西行的故事?没有猴子和女儿国,也没有鬼怪和妖魔,在那个故事里有的只是人心的善恶和风雨的折磨。相传,在玄奘走到楼兰时,曾被官兵追捕,他机缘巧合才悄悄逃出大狱。那茫茫大漠里,为避…

Ubuntu下搭建postgresql主从服务器(方法1)

Ubuntu下搭建postgresql主从服务器(方法1) 安装略 postgresql主服务器: $ vi /etc/postgresql/9.1/main/postgresql.conf 按a或i进入编辑模式 listen_addresses ‘*’ (默认为注释的,此处不改从postgresql同步时会报…

利用集群技术实现Web服务器的负载均衡

集群(Cluster)所谓集群是指一组独立的计算机系统构成的一个松耦合的多处理器系统,它们之间通过网络实现进程间的通信。应用程序可以通过网络共享内存进行消息传送,实现分布式计算机。 负载均衡(Load Balance)网络的负载均衡是一种动态均衡技术&#xf…

AI EARTH再立功,达摩院包揽遥感AI领域三项冠军

人类赖以生存的地球表面积大约为5.1亿平方公里,而陆地面积仅占29.2%,这些土地历经数十亿年的演变及人类生活的改造,又被分割成耕地、森林、草地、水域及建筑等等,现在,AI正在成为管理陆地资源的新途径。 8月27日&#…

node.js写一个json服务

待续转载于:https://www.cnblogs.com/progfun/p/4212099.html

试过不用循环语句撸代码吗?

译者按: 通过使用数组的reduce、filter以及map方法来避免循环语句。 原文: Coding Tip: Try to Code Without Loops 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。 在前一篇博…

Linux 命令 top 学习总结

本文简介 概要: 学习总结 Linux 下的 top 命令 版本: Debian 5(Lenny), top: procps version 3.2.7 日期: 2010-11-17 永久链接: http://sleepycat.org/linux/linuxcommand/top.html I. 概述 学习总结 top 命令。主要学习自 man 手册。 Linux 下 top 命令:# toptop…

android 中改变按钮按下时的颜色

原文出处:http://blog.csdn.net/nmsoftklb/article/details/9087233 a、在开发中大家都会遇到这样情况,在一个xxx.xml文件中如果有两个以上的组件有一样的属性功能时,可以把它们共同的内容抽取出来 放在styles.xml文件来声明。 然后在相应的组…

实战:使用 Mask-RCNN 的停车位检测

作者:小白来源:小白学视觉Q如何使用Mask-RCNN检测停车位可用性?我最近做了一个项目,根据安全摄像头的照片来检测停车位是否可用或被占用。我的工作有局限性,我将进一步详细介绍这些局限性,但一旦这些问题得到解决&…

Microsoft Office Communications Server 2007 R2 RTM 简体中文企业版部署速成篇之二

写文章真是件累人的事情.\(^o^)/~.OCS2007R2中的CWA有很多新特性.今天我们来看看,接着昨天的开始.本篇基于速成篇之一.Go!在一中的环境中多了,一台WIN2008的服务器,并加入域.首先在DNS里面建两条别名,指向CWA服务器!完成后,记得重新启动DNS.然后,子啊功能和角色里面添加必要的组…

F5负载均衡会话保持技术及原理技术白皮书

1.什么是会话保持?在大多数电子商务的应用系统或者需要进行用户身份认证的在线系统中,一个客户与服务器经常经过好几次的交互过程才能完成一笔交易或者是一个请求的完成。由于这几次交互过程是密切相关的,服务器在进行这些交互过程…

一文全览机器学习建模流程(Python代码)

作者:泳鱼 来源:算法进阶引言随着人工智能时代的到来,机器学习已成为解决问题的关键工具,如识别交易是否欺诈、预测降雨量、新闻分类、产品营销推荐。我们接下来会详细介绍机器学习如何应用到实际问题,并概括机器学习应…

CSS Selector 3

转载于:https://www.cnblogs.com/dmdj/p/4213159.html

GSM中时隙、信道、突发序列、帧的解释

刚从论坛中看到有人问GSM中时隙、信道、突发序列、帧知识。今天我们数字通信正好上到这一块,我就根据我知道的和网上搜索的回答! 1、时分多路复用技术 FDMA:频分多址 TDMA:时分多址 CDMA:码分多址 为了提高通信道的利用率,使若干彼此独立信号…

网页效率之DNS查找和并行下载

首先,一个页面所需要访问的域名数量为n,那么就需要n次DNS查找,而DNS查找通常是blocking call,就是说在得到结果之后才能继续,所以越多的DNS查找,反应速度就越慢; 雅虎的YSlow插件的规则之一&…

赛门铁克开启“容灾即服务”时代

从本地备份到异地复制再到云容灾,随着云计算技术的快速发展,以及云服务这种模式逐渐被广大企业用户所接受,将数据备份到云已经是一种可行的数据保护解决方案。12 月 16日,赛门铁克公司推出了一款全新的灾难恢复解决方案Symantec D…

再谈“去虚拟化”对深度学习系统的必要性

作者 | 袁进辉上周写了一篇《浅谈GPU虚拟化与分布式深度学习框架的异同》,想不到引起很多关注和讨论。和朋友们讨论之后,觉得这个话题值得再发散一下:首先,文章只讨论了GPU“一分多”这种“狭义”的虚拟化,还存在另外的…

Enable PowerShell script execution policy

Open Windows PowerShell with administrator Run “Set-ExecutionPolicy UnRestricted –Force” 本文转自学海无涯博客51CTO博客,原文链接http://blog.51cto.com/549687/1918870如需转载请自行联系原作者520feng2007

Linux下DNS轮询与Squid反向代理结合

一、安装反向代理服务器 1.下载反向代理服务器软件采用squid,下载地址: http://www.squid-cache.org/Versions/v2/2.2/squid-2.2.STABLE5-src.tar.gz 下载后存放在/usr/local/squid/src目录里,文件名是 squid-2.2.STABLE5 ... 一…

从iOS证书申请到签名文件生成

2019独角兽企业重金招聘Python工程师标准>>> 苹果的应用在发布时(无论是Adhoc发布还是AppStore正式发布)都需要一个签名文件。这个签名文件是由苹果后台生成的,它把用户生成的证书,注册设备,AppID等统统连在…

GitHub 热榜:来膜拜这个流弊的 AI 框架!

近年来,人工智能正在进入一个蓬勃发展的新时期,这主要得益于深度学习和CV领域近年来的发展和成就。在这其中,卷积神经网络的成功也带动了更多学术和商业应用的发展和进步。为了避免“内卷”,更多人选择学习进阶,但是仍…

ASP.net:添加.net(2.0C#)FCKeditor在线编辑器步骤

1.下载本版本的编辑器压缩包。源码下载地址 2.解压缩打开文件夹拥有如下文件&#xff1a;3.在VS中添加“选择项”加载在此文件夹的Bin下FredCK.FCKeditorV2.dll。4.在你的网站的web.config的 <appSettings>枝节中加入&#xff1a;<appSettings><add key"FC…

安装varish作为缓存和代理

1&#xff0c;Varish的使用有两种模式&#xff1a;第1种 Nginx(负载)varish(缓存)WEB第2种 Varish&#xff08;缓存和负载&#xff09;web2&#xff0c;varish是以内存作为共享容器的&#xff1a;内存的大小决定了它的缓存容量。相对于主要以硬盘为存储的squid来说要高效的多…

英伟达 400 亿美元收购 ARM 受阻,不妨考虑 VMware?

作者 | 马超 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;目前半导体行业的发展可以用冰火两重天来形容&#xff0c;传统的桌面及移动SOC&#xff08;System on a Chip&#xff0c;系统级芯片&#xff09;市场已经基本停止增长&#xff0c;而云计算成了各…

单目和双目模式识别---游戏控制

http://v.youku.com/v_show/id_XMzQwMjUwNTY.html http://blog.csdn.net/anthonywanted/article/details/3024535转载于:https://www.cnblogs.com/pengkunfan/p/4220144.html

vsftpd企业应用快速部署文档

系统环境&#xff1a;centos 5.6 vsftpd&#xff1a;2.3.5 vsftpd是UNIX/Linux中非常安全且快速的FTP服务器&#xff0c;目前已经被许多大型站点所采用。vsftpd支持将用户名和口令保存在数据库文件或数据库服务器中。登录FTP有三种方式&#xff0c;匿名登录、本地用户登录和虚拟…