强化学习环境升级 - 从gym到Gymnasium

这篇具有很好参考价值的文章主要介绍了强化学习环境升级 - 从gym到Gymnasium。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

强化学习环境升级 - 从gym到Gymnasium

作为强化学习最常用的工具,gym一直在不停地升级和折腾,比如gym[atari]变成需要要安装接受协议的包啦,atari环境不支持Windows环境啦之类的,另外比较大的变化就是2021年接口从gym库变成了gymnasium库。让大量的讲强化学习的书中介绍环境的部分变得需要跟进升级了。

不过,不管如何变,gym[nasium]作为强化学习的代理库的总的设计思想没有变化,变的都是接口的细节。

step和观察结果

总体来说,对于gymnasium我们只需要做两件事情:一个是初始化环境,另一个就是通过step函数不停地给环境做输入,然后观察对应的结果。

初始化环境分为两步。
第一步是创建gymnasium工厂中所支持的子环境,比如我们使用经典的让一个杆子不倒的CartPole环境:

import gymnasium as gym
env = gym.make("CartPole-v1")

第二步,我们就可以通过env的reset函数来进行环境的初始化:

observation, info = env.reset(seed=42)

我们可以将observation打印出来,它一个4元组,4个数值分别表示:

  • 小车位置
  • 小车速度
  • 棍的倾斜角度
  • 棍的角速度

如果角度大于12度,或者小车位置超出了2.4,就意味着失败了,直接结束。

小车的输入就是一个力,要么是向左的力,要么是向右的力。0是向左推小车,1是向右推小车。

下面我们让代码跑起来。

首先我们通过pip来安装gymnasium的包:

pip install gymnasium -U

安装成功之后,

import gymnasium as gym
env = gym.make("CartPole-v1")

print(env.action_space)

observation, info = env.reset(seed=42)
steps = 0
for _ in range(1000):
    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action)
    print(observation)

    if terminated or truncated:
        print("Episode finished after {} steps".format(steps))
        observation, info = env.reset()
        steps = 0
    else:
        steps += 1
        
env.close()

env.action_space输出是Discrete(2)。也就是两个离散的值0和1。前面我们介绍了,这分别代表向左和向右推动小车。

observation输出的4元组,我们前面也讲过了,像这样:
[ 0.0273956 -0.00611216 0.03585979 0.0197368 ]

下面就是关键的step一步:

    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action)

刚才我们介绍了,CartPole的输入只有0和1两个值。我们采用随机让其左右动的方式来试图让小车不倒。

如果你觉得还是不容易懂的话,我们可以来个更无脑的,管它是什么情况,我们都一直往左推:

observation, reward, terminated, truncated, info = env.step(0)

基本上几步就完了:

[ 0.02699083 -0.16518621 -0.00058549  0.3023946 ] 1.0 False False {}
[ 0.0236871  -0.36029983  0.0054624   0.5948928 ] 1.0 False False {}
[ 0.01648111 -0.5554978   0.01736026  0.88929135] 1.0 False False {}
[ 0.00537115 -0.750851    0.03514608  1.1873806 ] 1.0 False False {}
[-0.00964587 -0.94641054  0.0588937   1.4908696 ] 1.0 False False {}
[-0.02857408 -1.1421978   0.08871109  1.8013463 ] 1.0 False False {}
[-0.05141804 -1.3381925   0.12473802  2.1202288 ] 1.0 False False {}
[-0.07818189 -1.534317    0.16714258  2.4487078 ] 1.0 False False {}
[-0.10886823 -1.7304213   0.21611674  2.7876763 ] 1.0 True False {}
Episode finished after 8 steps

下面我们解释下返回的5元组,observation就是位置4元组,reward是用于强化学习的奖励,在本例中只要是不死就是1. terminated就是是否游戏结束了。
Truncated在官方定义中用于处理比如超时等特殊结束的情况。
truncated, info对于CartPole来说没有用到。

搭建好了gymnasium环境之后,我们就可以进行策略的升级与迭代了。
比如我们写死一个策略,如果位置小于0则向右推,反之则向左推:

def action_pos(status): 
    pos, v, ang, va = status
    #print(status)
    if pos <= 0: 
        return 1
    else: 
        return 0 

或者我们根据角度来判断,如果角度大于0则左推,反之则右推:

def action_angle(status): 
    pos, v, ang, va = status
    #print(status)
    if ang > 0: 
        return 1
    else: 
        return 0

角度策略的完整代码如下:

import gymnasium as gym
env = gym.make("CartPole-v1")
#env = gym.make("CartPole-v1",render_mode="human")

print(env.action_space)
#print(env.get_action_meanings())

observation, info = env.reset(seed=42)
print(observation,info)

def action_pos(status): 
    pos, v, ang, va = status
    #print(status)
    if pos <= 0: 
        return 1
    else: 
        return 0 

def action_angle(status): 
    pos, v, ang, va = status
    #print(status)
    if ang > 0: 
        return 1
    else: 
        return 0

steps = 0
for _ in range(1000):
    action = env.action_space.sample()
    observation, reward, terminated, truncated, info = env.step(action_angle(observation))
    print(observation, reward, terminated, truncated, info)

    if terminated or truncated:
        print("Episode finished after {} steps".format(steps))
        observation, info = env.reset()
        steps = 0
    else:
        steps += 1
        
env.close()

与老gym的主要区别

目前版本与之前gym的最主要区别在于step返回值从原来的4元组变成了5元组。
原来是observation, reward, done, info,而现在done变成了 terminated增加了truncated。

老版本的:

 status, reward, done, info = env.step(0)

新版的:

observation, reward, terminated, truncated, info = env.step(0)

Atari游戏

我们通过gymnasium[atari]包来安装atari游戏的gymnasium支持。

pip install gymnasium[atari]

通过get_action_meanings来获取游戏支持的操作

之前的CartPole只知道是离散的两个值。而Atari游戏则可支持获取游戏支持的操作的含义:

['NOOP', 'FIRE', 'RIGHT', 'LEFT', 'RIGHTFIRE', 'LEFTFIRE']

rendor_mode

另外,针对于Atari游戏,render_mode现在是必选项了。要指定是显示成人类可看的human模式,还是只输出rgb_array的模式。

完整例子

我们以乒乓球游戏为例,组装让其运行起来:

import gymnasium as gym
env = gym.make("ALE/Pong-v5", render_mode="human")
observation, info = env.reset()

print(env.get_action_meanings())

scores = 0

for _ in range(1000):
    action = env.action_space.sample()  # agent policy that uses the observation and info
    observation, reward, terminated, truncated, info = env.step(action)
    #print(observation, reward, terminated, truncated, info)

    if terminated or truncated:
        print("Episode finished after {} steps".format(scores))
        observation, info = env.reset()
        scores = 0
    else:
        scores +=1

env.close()

完整的游戏支持列表可以在https://gymnasium.farama.org/environments/atari/ 官方文档中查到。文章来源地址https://www.toymoban.com/news/detail-480177.html

到了这里,关于强化学习环境升级 - 从gym到Gymnasium的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 说点人话的强化学习:如何显示当前训练的环境,openai gym不显示画面,env.render()不显示画面,CartPole不显示画面

    在早期版本gym中,调用env.render()会直接显示当前画面,但是现在的新版本中这一方法无效。现在有一下几种方法显示当前环境和训练中的画面: 1. render_model = \\\"human\\\" 显示效果:   问题: 该设置下,程序会输出所有运行画面。但是这一步会带来一个问题,因为画面渲染需要时

    2024年02月13日
    浏览(36)
  • Python深度强化学习实战 ——OpenAI Gym-CarRacing自动驾驶项目

          💭 写在前面: 本篇是关于 OpenAI Gym-CarRacing 自动驾驶项目的博客,面向掌握 Python 并有一定的深度强化学习基础的读者。 GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在

    2024年02月16日
    浏览(56)
  • 【动手学强化学习】安装gym subprocess-exited-with-error

    以下内容均在ubuntu18.0.4环境使用 最近在看《动手学强化学习》安装运行相关的gym环境时候遇到了一些问题。 1、文中使用gym为== 0.18.3 该版本 支持 python3.8, python3.9 使用会有问题,env.seed()无法直接使用。(使用3.8.16 可成功运行文中代码) 2、在linux下本来已经安装了一个pyth

    2024年02月11日
    浏览(53)
  • 【深度强化学习】Python:OpenAI Gym-CarRacing 自动驾驶 | 提供项目完整代码 | 车道检测功能 | 路径训练功能 | 车辆控制功能

          💭 写在前面: 本篇是关于 OpenAI Gym-CarRacing 自动驾驶项目的博客,面向掌握 Python 并有一定的深度强化学习基础的读者。 GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在

    2024年02月16日
    浏览(48)
  • Humanoid-Gym 开源人形机器人端到端强化学习训练框架!星动纪元联合清华大学、上海期智研究院发布!

      Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer GitHub Repository: GitHub - roboterax/humanoid-gym: Humanoid-Gym: Reinforcement Learning for Humanoid Robot with Zero-Shot Sim2Real Transfer   Humanoid-Gym是一个基于Nvidia Isaac Gym的易于使用的强化学习(RL)框架,旨在训练仿人机器人的运动

    2024年04月12日
    浏览(53)
  • Anaconda配置强化学习环境

    安装git可以方便进行项目管理或者克隆github上的源码,下面介绍win10和ubuntu系统中git的安装步骤。 win10 1.在官网下载Git-2.38.1-64-bit.exe,打开文件,按照操作进行安装配置 2.git安装完成后,找到git安装路径中bin的位置,我的是D:softwareGitbin 3.再找到git安装路径中git-core的位置,

    2024年02月05日
    浏览(40)
  • Gazebo仿真环境下的强化学习实现

    主体源码参照《Goal-Driven Autonomous Exploration Through Deep Reinforcement Learning》 笔者采用其强化学习方法,但是对于仿真环境以及机器人模型仍然用自己的包,源码中采用了与论文强相关的用法 2.1 环境 源码: 强化学习中环境用于产生状态输入,并通过智能体的动作产生新的状态,

    2024年02月10日
    浏览(44)
  • 机器人强化学习环境mujoco官方文档学习记录(一)——XML

    鉴于研究生课题需要,开始在mujoco中配置仿真环境。而官方文档中各种对象参数纷繁复杂,且涉及mujoco底层计算,不便于初学者进行开发设计。因此本文将MJCF模型的常用对象参数进行总结。 本文档仅供学习参考,如有问题欢迎大家学习交流。 本章是MuJoCo中使用的MJCF建模语言

    2024年02月02日
    浏览(51)
  • gym包更新升级到0.26.2版本后炼丹炉的测试代码

    前两天电脑有问题,重装了系统。就有了关于安装了更新后的软件包跑环境测试代码遇到的问题。 本文包版本分别为——gym version:0.26.2,pygame version:2.1.2 注意: 很多同学说老测试代码跑不出来的,是因为gym升级了!gym库0.26.0及之后的版本和之前版本的代码是不兼容的!建

    2024年02月07日
    浏览(28)
  • windows11+GPU1060安装强化学习环境之pytorch

    这里大家看一个视频系列,讲得非常详细,链接在此:https://www.bilibili.com/video/BV1S5411X7FY?p=28vd_source=3be739b673e1151850f4b8060ac78e1a 这里主要是说我遇到的问题以及解决办法。 首先,我的笔记本是有显卡的,只不过算力为6,较低,但是已经差不多了,主要是想在windows上操作,嗯,还

    2024年01月19日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包