Pytorch深度强化学习1 您所在的位置:网站首页 gymnasium与gym的区别 Pytorch深度强化学习1

Pytorch深度强化学习1

2024-07-12 04:49| 来源: 网络整理| 查看: 265

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

0 专栏介绍

本专栏重点介绍强化学习技术的数学原理,并且采用Pytorch框架对常见的强化学习算法、案例进行实现,帮助读者理解并快速上手开发。同时,辅以各种机器学习、数据处理技术,扩充人工智能的底层知识。

🚀详情:《Pytorch深度强化学习》

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 常见问题

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

解决方案:终端运行

pip install typing-extensions --upgrade 参考资料 OpenAI Gym官方文档

🔥 更多精彩专栏:

《ROS从入门到精通》《Pytorch深度学习实战》《机器学习强基计划》《运动规划实战精讲》… 👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有