Pytorch深度强化学习:Gym安装与环境搭建教程(附基本指令表)

news2024/9/30 23:24:19

目录

  • 1 Gym介绍
  • 2 Gym安装
  • 3 基本指令
    • 3.1 `make()`
    • 3.2 `reset()`
    • 3.3 `step()`
    • 3.4 `close()`
  • 4 常见问题
  • 参考资料

1 Gym介绍

强化学习是在潜在的不确定复杂环境中,训练一个最优决策指导一系列行动实现目标最优化的机器学习方法。自从AlphaGo的横空出世之后,确定了强化学习在人工智能领域的重要地位,越来越多的人加入到强化学习的研究和学习中。

OpenAI Gym是一个研究和比较强化学习相关算法的开源工具包,包含了许多经典的仿真环境(各种游戏),兼容常见的数值运算库,使用户无需过多了解游戏的内部实现,通过简单地调用就可以用来测试和仿真。OpenAI Gym由以下两部分组成:

  • Gym开源库:测试仿真环境,这些环境有一个公共的接口且允许用户设计通用的算法
  • OpenAI Gym服务:提供一个站点和API,允许用户对他们的测试结果进行比较

在这里插入图片描述

2 Gym安装

gym中从简单到复杂,包含了许多经典的仿真环境:

  • 入门级:经典控制和文字游戏

在这里插入图片描述

  • 雅达利游戏:是雅达利游戏公司出品的小游戏合集,比入门游戏难度更高

在这里插入图片描述

  • 2D/3D的机器人:机器人仿真环境,需要利用第三方的物理引擎如 MuJoCo

建议在虚拟环境中安装,虚拟环境相关知识请看:Anaconda安装与Python虚拟环境配置保姆级图文教程(附速查字典)

  • 激活虚拟环境

    conda activate pytorch
    
  • 安装gym相关库

    # 安装基本gym库,只含有入门级环境
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gym
    # 安装Box2D环境支持组件
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gym[box2d]
    
  • 安装gym雅达利环境库

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple gym[atari]
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple autorom
    AutoROM --accept-license
    

    需要注意,这里执行AutoROM --accept-license时可能较慢,是因为要进入外网下载游戏包,建议到atarimania.com直接下载Roms.rar并移动到路径~\Anaconda\envs\pytorch\Lib\site-packages\AutoROM\roms中,显示

    AutoROM will download the Atari 2600 ROMs.
    They will be installed to:
            ~\Anaconda\envs\pytorch\Lib\site-packages\AutoROM\roms
    
    Existing ROMs will be overwritten.
    Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\adventure.bin
    Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\air_raid.bin
    Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\alien.bin
    Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\amidar.bin
    Installed ~\Anaconda\envs\pytorch\lib\site-packages\AutoROM\roms\assault.bin
    ...
    Done!
    

    说明安装完成

  • 测试环境

    import gym
    
    env = gym.make('Tennis-v4', render_mode="human")
    print("Observation Space: ", env.observation_space)
    print("Action Space       ", env.action_space)
    
    obs = env.reset()
    for i in range(1000):
        env.render()
        action = env.action_space.sample()
        obs, reward, done, info, _ = env.step(action)
    env.close()
    
    print(gym.envs.registry.keys())
    

3 基本指令

gym中最核心的接口就是env环境类,智能体与环境的交互如图所示,这就是强化学习的基本流程:在每个时间点上,智能体选择一个动作(action),环境返回上一次action的观测(Observation)奖励(Reward)

在这里插入图片描述
常用指令如下:

3.1 make()

作用:生成环境对象

'''
* @breif: 生成环境对象
* @param[in]: id            ->  启用环境的名称
* @param[in]: render_mode   ->  渲染模式
* @retval: 环境对象
'''
env = gym.make(id:str, render_mode:str)

通过make()创建完环境对象后,可以查看环境的属性和当前状态

env = gym.make('Tennis-v4', render_mode="human")
print('观测空间:', env.observation_space)
print('动作空间:', env.action_space)
print('动作数:', env.action_space.n)

>>> 观测空间: Box(0, 255, (210, 160, 3), uint8)
>>> 动作空间: Discrete(18)
>>> 动作数: 18

gym的仿真环境中,有运动空间action_space和观测空间observation_space两个Space类型接口,用于描述有效的运动和观测的格式和范围

渲染模式支持:

  • human:在显示器或终端上渲染
  • rgb_array:返回像素图像的RGB阵列作为返回值
  • ansi:将文本作为返回值返回

3.2 reset()

作用:重置环境的状态,返回初始观测状态

'''
* @breif: 重置环境,回到初始状态
* @param[in]: seed	-> 随机种子
* @retval: 环境初始观测状态
'''
state = env.reset(seed=None)

查看reset()的状态信息

state = env.reset()
print("初始状态:", state)
print("当前状态:", env.state)

>>> 初始状态: (array([ 0.03745903, -0.02521806, -0.01444992, -0.01588714], dtype=float32), {})
>>> 当前状态: [ 0.03745903 -0.02521806 -0.01444992 -0.01588714]

在仿真开始前必须调用reset()以初始化环境。 seed可以指定环境的随机数种子,如果想要训练的再现性,或者想要根据不同的环境使用不同的随机数种子,可以使用该参数

3.3 step()

作用:单步执行环境动力学过程

'''
* @breif: 单步执行环境动力学过程
* @param[in]: 动作
* @retval: 五元组(当前状态, 奖励, 是否结束, 额外限制, 日志)
'''
state, reward, done, truncated, info = env.step(action)

查看五元组

for i in range(5):
    action = env.action_space.sample()
    state, reward, done, truncated, info = env.step(action)
    print('动作:', action, '当前状态:', state, '奖励:', reward, '是否结束:', done, '额外限制:', truncated, '日志:', info)

>>> 动作: 1 当前状态: [-0.01200642  0.18693487  0.02998236 -0.23828246] 奖励: 1.0 是否结束: False 额外限制: False 日志: {}
>>> 动作: 1 当前状态: [-0.00826773  0.38161597  0.02521671 -0.5213593 ] 奖励: 1.0 是否结束: False 额外限制: False 日志: {}
>>> 动作: 0 当前状态: [-0.00063541  0.18614829  0.01478953 -0.22083813] 奖励: 1.0 是否结束: False 额外限制: False 日志: {}
>>> 动作: 0 当前状态: [ 0.00308756 -0.00918191  0.01037276  0.07647308] 奖励: 1.0 是否结束: False 额外限制: False 日志: {}
>>> 动作: 0 当前状态: [ 0.00290392 -0.20445101  0.01190223  0.3724105 ] 奖励: 1.0 是否结束: False 额外限制: False 日志: {}

具体而言,五元组的含义如下:

  • 状态state:执行当前动作后环境转移到的状态,例如从相机获取的像素点,机器人各个关节的角度或棋盘游戏当前的状态等;
  • 奖励reward: 执行当前动作后智能体获得的奖励,不同环境中奖励值变化范围也不相同,但强化学习的目标就是使得总奖励值最大;
  • 是否完成done:表示是否需要将环境重置env.reset()。大多数情况下,当 done == true时就表明当前幕结束,例如当机器人摔倒或者掉出台面,就应当及时终止;
  • 额外限制truncated:表示是否满足额外的截断条件,通常是一个时间限制,但也可用于指示代理物理上超出界限,可用于在达到终端状态之前提前结束该幕
  • 信息info: 针对仿真调试过程的诊断信息

此外env.sample_space.sample()表示对动作空间进行随机采样,随机采样是gym内嵌的baseline策略,强化学习算法中的策略至少要比这个baseline效果好

3.4 close()

作用:关闭环境

4 常见问题

  1. ImportError: cannot import name 'NotRequired' from 'typing_extensions'

    解决方案:终端运行

    pip install typing-extensions --upgrade
    

参考资料

  • OpenAI Gym官方文档

🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从promise到await

在之前的这篇文章中,已经讲完了从异步操作到promise的诞生,但是promise也仅仅是做到了异步操作和结果的分离,当我们有多个异步操作,且结果前后有依赖的时候,不可避免的,就会出现一系列的.then方法。还是不大…

【JS每N日一练】 将CSDN文章自动生成Markdown列表

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ 分析及编码页面分析枚举列表处理li,获取Markdown完成功能拼装 2️⃣ 完整代码及运行结果完整代码运行结果 🛬 总结 🛫 问题 描述 作为程序员必备素质-懒,今天又给自己了一个造了个需…

QGIS--开发OpenSCENARIO动态场景(一)--Ubuntu20.04 安装QGIS

qgis的git: GitHub - qgis/QGIS: QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS) qgis的官网:Welcome to the QGIS project! qgis插件包下载地址:https://plugins.qgis.org/plugins/ 1.Prerequisi…

java IO流_2

目录 字节缓冲流 序列化 使用对象流实现序列化 标准输入输出流 转换流 打印流 PrintStream PrintWriter properties读写文件 字节缓冲流 字节流 import java.io.FileInputStream; import java.io.FileOutputStream;public class FileCopy {public static void main(Str…

年薪30W+,待遇翻倍,我的经历值得每个测试人借鉴

从自考大专到出走公司,从半年无业露宿深圳北站,从8k…到11.5k…再到20k,我的经历值得每个测试人借鉴 或许学历并没有那么重要 12年高考之后,在朋友的介绍下(骗了过去),没有好好的读大学&#x…

java mysql高校后勤管理系统的设计与开发 宿舍公寓管理

1.用户管理子系统:采用通过用户密码的登录机制,管理员登录后可以修改个人信息(用户名、密码、姓名、联系方式),具有楼的属性,只能对所管辖宿舍楼进行查询、修改等操作。 2.宿舍信息管理子系统&a…

上海出台新政数字经济、人工智能利好

利好一、上海印发 《上海市推进算力资源统一调度指导意见》的通知 数字经济、人工智能的利好不断。 19日,上海市经济信息化委印发《上海市推进算力资源统一调度指导意见》的通知。 其中提到: 到2023年底,依托本市人工智能公共算力服务平台…

【U8+】win10/11系统注册用友U8硬加密

【问题需求】 由于用友U813.0及之前版本都是硬加密, 并且注册的时候严格要求使用IE浏览器。 但是随着系统的升级,绝大多数的都开始使用win10/11系统。 并且IE浏览器已经不支持win10/11系统, 取而代之的是Edge浏览器。 【经验分享】 以下分享…

扬帆优配|放量跌停和缩量跌停的区别?哪个更好?

投资者在买卖股票的过程中股票跌停的话,一般会呈现两种状况:一种是放量跌停,一种是缩量跌停。很多投资者不明白两者到底有什么差异,那么放量跌停和缩量跌停的差异是什么?哪个更好?下面就由扬帆优配有为我们…

使用node版本管理器gnvm

目录 一、官网 二、下载 三、查看本机node安装地址 四、将gnvm放到node安装目录 五、安装其他版本node(以管理员身份打开CMD) 六、使用指定版本(以管理员身份打开CMD) 七、查看当前版本(以管理员身份打开CMD&…

Spring依赖注入的三种方式使用及优缺点

初学Spring的时候,我们从Spring容器中获取Bean对象都是通过bean标签先将Bean对象注册到Spring容器中,然后通过上下文对象congtext的getBean方法进行获取,显然这种方法较为麻烦,所以有了更简单的存方法:五大类注解;取方…

应急响应 - Windows用户分析,Windows隐藏账号分析,Windows克隆账号分析

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 Windows账户分析 一、普通用户二、隐藏用户1、lusrmgr.msc2、注册表 三、克隆账号 攻击者…

mysql varchar类型字段为数字时,不带引号查询时查询结果与事实不符

背景 今天出现了一个bug,在数据库中我们将订单表中的order_no从之前的bigint(20)改成varchar(20)后,原有的代码逻辑在进行时查询时,之前是以Long类型传参查询的。 select * from order_main where order_no16541913435669023debug时的时候发现…

2023年湖北安全员ABC报名条件和报名资料是什么?

一、湖北安全员ABC报名条件要求: 1.安全员A证针对的是企业主要负责人,包括法定代表人、总经理(总裁)、分管安全生产的副总经理(副总裁)、分管生产经营的副总经理(副总裁)、技术负责…

全景丨0基础学习VR全景制作,平台篇第八章:全局功能-开场地图

大家好欢迎观看蛙色平台使用教程 功能位置示意 一、本功能将用在哪里? 开场地图分为两种,分别是高德地图和手绘地图。 高德地图点位目前系统自动借用高德官方地图位置,手绘地图点位需手动添加 高德地图展示 高德地图展示 二、如何使用本功…

JaveEE UDP 与 TCP 原理

这篇博客真的很详细很详细很详细,不打算试试看吗 > 。o 文章目录 JaveEE & UDP 与 TCP 原理1. 应用层协议(自定义组织格式)2. 传输层UDP协议2.1 数据报报文格式2.1.1 源端口与目的端口2.1.2 报文长度和校验和 3. 传输层TCP协议3.1 TCP…

MySQL 主键自增也有坑?

在上篇文章中,松哥和小伙伴们分享了 MySQL 的聚簇索引,也顺便和小伙伴们分析了为什么在 MySQL 中主键不应该使用随机字符串。但是主键不用随机字符串用什么?主键自增?主键自增就是最佳方案吗?有没有其他坑?…

大数据实战 --- 日志文件

目录 开发环境 数据描述 功能需求 数据准备 分析数据 HBase HIive 统计查询 开发环境 HadoopHiveSparkHBase 启动Hadoop:start-all.sh 启动zookeeper:zkServer.sh start 启动Hive: nohup hiveserver2 1>/dev/null 2>&1 …

Python 图像处理实用指南:1~5

原文:Hands-On Image Processing with Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 计算机视觉 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 当别人说你没有底线的时候,…

如何恢复回收站中被删除的文件?高效的恢复技巧

一般情况下,我们从电脑上普通删除的文件,会经过回收站(除非文件过大),想要在回收站找回删除的东西,是很简单的,我们只需要打开回收站,找到删除的文件,右键点击并选择还原…