强化学习系列2:Open AI的gym框架、baselines和Spinning Up

【深度强化学习】OpenAI Gym的使用 文章目录前言第二章 OpenAI Gym深入解析Agent介绍框架前的准备OpenAI Gym APISpace 类Env 类step()方法创建环境第一个Gym 环境实践: CartPole实现一个随机的AgentGym 的 额外功能——装饰器和监视器装饰器 Wrappers监视器 Monitor总结 前言 重读《Deep Reinforcemnet Learning Hands-on》, 常读常新, 极其深入浅出的一本深度强化学习教程。 本文的唯一贡献是对其进行了翻译和提炼, 加一点自己的理解组织成一篇 阅读详情
AI摘要

本文详细介绍OpenAI Gym的安装与使用,通过实例演示如何利用Q-learning进行游戏AI的学习,并介绍了Baselines和SpinningUp两个强化学习资源库,涵盖多种算法如A2C、PPO、DDPG等。

1. gym安装

Openai gym 是openAI用于开发和比较强化学习算法的工具包。github地址点击这里。gym安装十分简单:

pip install gym

也可以下载后安装:

git clone https://github.com/openai/gym.git
cd gym
pip install -e .

运行下面的python代码看是否安装成功:

import gym
env = gym.make('SpaceInvaders-v0')
env.reset()
env.render()

2. gym使用

首先看一个游戏例子,游戏AI采用随机策略,前进1000步,如果中间游戏结束则重新开始:

import gym
env = gym.make('SpaceInvaders-v0')
env.reset()
for i in range(1000):
	env.render()
	o,r,d,i = env.step(env.action_space.sample())
	if d:
		env.reset()

会出现如下的动画:
在这里插入图片描述

gym 的核心接口是 env,作为统一的环境接口。env.reset()的作用是重置环境到初始状态;env.step(action)的作用是推进一个时间步长,返回 observation,reward,done,info。其中done用于判断一轮迭代是否结束;env.render()函数进行图形渲染。
函数推进的过程如下图。其中step函数相当于仿真器的物理引擎,输入行动a,输出observation、reward、done、info。

在这里插入图片描述

3. 综合示例

接下来看gym自带的小车模型,使用Q-learning方法进行学习。
模型的Observation有4个维度:

编号名称最小值最大值
0小车的位置-2.42.4
1小车的速度-infinf
2木棒的角度-41.8°41.8°
3木棒的速度-infinf

Action有2种情形:0:小车往左移动;1:小车往右移动
Reward:木棒每保持平衡1个时间步,就得到1分。
Done:每一场游戏的结束条件为木棒倾斜角度大于41.8°或者已经达到200分
最终目标:最近100场游戏的平均得分高于195。

代码如下:

import gym
import numpy as np

env = gym.make('CartPole-v0')

max_number_of_steps = 200   # 每一场游戏的最高得分
#---------获胜的条件是最近100场平均得分高于195-------------
goal_average_steps = 195
num_consecutive_iterations = 100
#----------------------------------------------------------
num_episodes = 5000 # 共进行5000场游戏
last_time_steps = np.zeros(num_consecutive_iterations)  # 只存储最近100场的得分(可以理解为是一个容量为100的栈)

# q_table是一个256*2的二维数组
# 离散化后的状态共有4^4=256种可能的取值,每种状态会对应一个行动
# q_table[s][a]就是当状态为s时作出行动a的有利程度评价值
# 我们的AI模型要训练学习的就是这个映射关系表
q_table = np.random.uniform(low=-1, high=1, size=(4 ** 4, env.action_space.n))

# 分箱处理函数,把[clip_min,clip_max]区间平均分为num段,位于i段区间的特征值x会被离散化为i
def bins(clip_min, clip_max, num):
    return np.linspace(clip_min, clip_max, num + 1)[1:-1]

# 离散化处理,将由4个连续特征值组成的状态矢量转换为一个0~~255的整数离散值
def get_state(observation):
    # 将矢量打散回4个连续特征值
    cart_pos, cart_v, pole_angle, pole_v = observation
    # 分别对各个连续特征值进行离散化(分箱处理)
    digitized = [np.digitize(cart_pos, bins=bins(-2.4, 2.4, 4)),
                 np.digitize(cart_v, bins=bins(-3.0, 3.0, 4)),
                 np.digitize(pole_angle, bins=bins(-0.5, 0.5, 4)),
                 np.digitize(pole_v, bins=bins(-2.0, 2.0, 4))]
    # 将4个离散值再组合为一个离散值,作为最终结果
    return sum([x * (4 ** i) for i, x in enumerate(digitized)])

# 根据本次的行动及其反馈(下一个时间步的状态),返回下一次的最佳行动
def get_action(state, action, observation, reward,episode):
    next_state = get_state(observation)
    epsilon = 0.5 * (0.99 ** episode)
    if  epsilon <= np.random.uniform(0, 1):
        next_action = np.argmax(q_table[next_state])
    else:
        next_action = np.random.choice([0, 1])
    #-------------------------------------训练学习,更新q_table----------------------------------
    alpha = 0.2     # 学习系数α
    gamma = 0.99    # 报酬衰减系数γ
    q_table[state, action] = (1 - alpha) * q_table[state, action] + alpha * (reward + gamma * q_table[next_state, next_action])
    # -------------------------------------------------------------------------------------------
    return next_action, next_state

# 重复进行一场场的游戏
for episode in range(num_episodes):
    observation = env.reset()   # 初始化本场游戏的环境
    state = get_state(observation)     # 获取初始状态值
    action = np.argmax(q_table[state])      # 根据状态值作出行动决策
    episode_reward = 0
    # 一场游戏分为一个个时间步
    for t in range(max_number_of_steps):
        observation, reward, done, info = env.step(action)
        # 对致命错误行动进行极大力度的惩罚,让模型恨恨地吸取教训
        if done:
            reward = -200
        action, state = get_action(state, action, observation, reward, episode)
        if done:
            print('%d Episode finished after %f time steps / mean %f' % (episode, t + 1,
                last_time_steps.mean()))
            last_time_steps = np.hstack((last_time_steps[1:], [t + 1]))
            break
            # 如果最近100场平均得分高于195
        if (last_time_steps.mean() >= goal_average_steps):
            print('Episode %d train agent successfuly!' % episode)
            break

print('Failed!')

程序输出如下,模型在经过大约835场的游戏后,平均分数能达到了195。

0 Episode finished after 72.000000 time steps / mean 0.000000
1 Episode finished after 8.000000 time steps / mean 0.720000
2 Episode finished after 12.000000 time steps / mean 0.800000
3 Episode finished after 38.000000 time steps / mean 0.920000
4 Episode finished after 15.000000 time steps / mean 1.300000
......
833 Episode finished after 200.000000 time steps / mean 193.770000
834 Episode finished after 200.000000 time steps / mean 194.210000
835 Episode finished after 200.000000 time steps / mean 194.210000
Episode 836 train agent successfuly!
Episode 837 train agent successfuly!
......

这个例子中用到的一些trick包括:

  • 使用lookuptable(q_table)存储每个状态s对应的行动a;
  • 采取了探索策略,以一定的概率epsilon随机选取行动;
  • 随机概率随着时间推进会衰减;
  • 错误行动会加上惩罚;
  • 将状态和行动转化为数字索引,以提高查询的速度。

4. Baselines简介

Baselines是一个传统强化学习的资源库,github地址为:https://github.com/openai/baselines
Baselines需要python3的环境,建议使用3.6版本。安装openmpi和相关库(tensorflow、gym),mac可以使用brew安装,ubuntu可以使用apt-get,centos可以使用pip安装。

git clone https://github.com/openai/baselines.git
cd baselines
pip install -e .

用下面的语句检查是否安装成功。如果提示缺少某个库,安装即可

pip install pytest
pytest

安装完可进行可视化:

python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path=~/models/pong_20M_ppo2
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path=~/models/pong_20M_ppo2 --play

根据官方文档,baselines实现的算法包括:

  • A2C
  • ACER
  • ACKTR
  • DDPG
  • DQN
  • GAIL
  • HER
  • PPO1
  • PPO2
  • TRPO

5. Spinning Up简介

spinning up是一个深度强化学习的很好的资源,其网址是:https://spinningup.openai.com/en/latest/
首先需要python3.6环境,建议下载anaconda3~这里要注意安装版本问题,目前使用python3.5和python3.7都存在问题。然后安装openmpi和相关库(tensorflow、gym),mac可以使用brew安装,ubuntu可以使用apt-get,centos可以使用pip安装。接下来执行下面的步骤:

git clone https://github.com/openai/spinningup.git
cd spinningup
pip install -e .

用下面的语句检查是否安装成功。如果提示缺少某个库,安装即可

python -m spinup.run ppo --hid "[32,32]" --env LunarLander-v2 --exp_name installtest --gamma 0.999

安装完可进行可视化:

python -m spinup.run test_policy data/installtest/installtest_s0
python -m spinup.run plot data/installtest/installtest_s0

根据官方文档,spinning up实现的算法包括:

  • Vanilla Policy Gradient (VPG)
  • Trust Region Policy Optimization (TRPO)
  • Proximal Policy Optimization (PPO)
  • Deep Deterministic Policy Gradient (DDPG)
  • Twin Delayed DDPG (TD3)
  • Soft Actor-Critic (SAC)
开源强化学习工具包 OpenAI Gym 和 Universe OpenAI Gym 和 Universe 是两个重要的开源强化学习工具包。OpenAI Gym 是用于开发和比较强化学习算法的工具包。它提供了一系列标准化的环境场景和 API 接口,涵盖了从经典的控制任务到连续动作空间中的机器人控制等多种应用,例如 CartPole(倒立摆)、MountainCar(上山车)和 Pong(乒乓球游戏)等。每个环境都提供了一组标准化的状态和动作空间,以及定义好的奖励机制。Gym 支持多种类型的动作空间,包括离散动作空间和连续动作空间。 阅读详情

相关推荐

OpenAI 教程 小白也可搭建属于自己的(全程教学)

英文版:https://gym.openai.com/docs2016年 5 月 4日,OpenAI发布了人工智能研究工具集 OpenAI Gym。OpenAI Gym是一款用于研发和比较学习算法的工具包。它与很多数值计算库兼容,比如tensorflow和theano。现在支持的语言主要是python。openai gym 是一个增强学习(reinforcement learning,RL)算法的测试床(testbed)。增强学习和有监督学习的评测不一样。有监督学习的评测工具是数据。

【优快云】 1544

OpenAI Gym入门与实操(1)

OpenAI Gym入门与实操(1)

phmatthaus的专栏 3292

OpenAI Gym详细讲解一下,给出示例代码

例如,您可以使用一个Q-表来存储状态-动作对的价值。例如,您可以使用Gym的API来重置环境、获取当前观测、执行动作等。4.设置学习率和折扣率:接下来,您需要设置强化学习模型的学习率和折扣率。,我们使用env.reset()函数重置了环境,并使用env.step()函数执行动作。这是一个简单的示例,展示了如何使用Gym的API来训练强化学习模型。Gym还提供了许多其他功能,例如设置渲染选项、设置模拟参数等,您可以在Gym的文档中了解更多信息。创建模拟环境:首先,您需要使用Gym的API创建一个模拟环境。

zhangzhechun的专栏 3565

如何快速上手OpenAI Gym:强化学习开发的终极工具包

OpenAI Gym是一个用于开发和比较强化学习算法的标准工具包,它提供了丰富的环境和标准化接口,帮助开发者轻松构建、测试和评估强化学习模型。无论是刚入门的新手还是经验丰富的研究人员,都能通过Gym快速实现各种强化学习算法。 ## 🌟 Gym的核心优势与功能 Gym作为强化学习领域的事实标准,其核心优势在于提供了统一的API接口和多样化的环境集合。通过Gym,开发者可以专注于算法设计而无需关

gitblog_00040的博客 2113

【强化学习】 OpenAI Gym入门:基础组件(Getting Started With OpenAI Gym: The Basic Building Blocks)

【强化学习】 OpenAI Gym入门:基础组件(Getting Started With OpenAI Gym: The Basic Building Blocks)

iioSnail的博客 8158

强化学习实战——OpenAI Gym环境配置+实战演示(win10)

遇到问题:无法安装pickle5原因是:python3.8与该包不兼容,必须降python3.7的版本。

LZL2020LZL的博客 4899

基于OPENAI团队GYM平台搭建强化学习环境

实现基于GYM的三维强化学习环境的搭建。

Chasing__MrIiu的博客 1837

Python OpenAI Gym 【强化学习工具包】的详细讲解

示例:添加帧堆叠功能。

记录点滴 1820

OpenAI Gym入门与实操(2)

OpenAI Gym入门与实操(2)

phmatthaus的专栏 1234

OpenAI Gym 高级教程——可解释性和可视化

通过本篇博客,我们深入了解了 OpenAI Gym 高级教程,聚焦于强化学习模型的可解释性和可视化。我们使用 SHAP 来解释模型输出,在训练过程中可视化奖励变化趋势,以及通过状态值函数的可视化理解模型对不同状态的估值。这些技术可以帮助你更好地理解和分析强化学习模型的行为。希望这篇博客对你理解并实践可解释性和可视化有所帮助。

Echo_Wish 1037

OpenAI Gym 中级教程——强化学习实践项目

通过这个实际项目,我们演示了如何在 OpenAI Gym 中使用深度 Q 网络(DQN)来解决经典的 CartPole 问题。我们创建了一个简单的 DQN 模型,实现了经验回放缓冲区,并进行了训练。这个项目为初学者提供了一个实践的起点,同时展示了在强化学习任务中使用 TensorFlow 和 OpenAI Gym 的基本步骤。希望这篇博客能够帮助你更好地理解和应用强化学习算法。

Echo_Wish 1208

强化学习工具包-OpenAI Gym

OpenAI Gym 是一个用于强化学习研究的工具包。它包含了一个不断增长的基准问题集合,这些问题通过一个通用接口暴露出来,还有一个网站,人们可以在那里分享他们的结果并比较不同算法的性能。本篇白皮书讨论了 OpenAI Gym 的组成部分以及在软件设计过程中做出的决策。

这里是二进制空间安全博客,主要分享网络安全、信息安全和数据安全相关的技术文章。内容覆盖编程语言、基础知识、漏洞分析、攻防技巧、安全工具使用、最佳实践等安全技术主题。 1208

ptrade量化策略之ST股弱转强,回测年化115%

本策略的核心是精选ST股票,国九条过滤,防止直接暴雷退市,只做ST股票的弱转强

qq_29301281的博客 1788

小琳AI课堂 掌握强化学习:探索OpenAI Gym的魅力与Python实战

大家好,这里是小琳AI课堂。今天我们来聊聊OpenAI Gym,一个强大的强化学习(Reinforcement Learning, RL)工具包。🌟OpenAI Gym,由人工智能研究实验室OpenAI创建,为强化学习的研究和开发提供了一个统一且方便的平台。它就像是一个强化学习算法的游乐场,让研究人员和开发者可以轻松地测试和比较他们的算法。

wx740851326的博客 822

SAP物料分类账实战:从配置到月结的关键步骤(基于S/4HANA1909)

本文详细解析了在SAP S/4HANA 1909系统中,物料分类账从基础配置到月结操作的全流程。作为成本核算的核心,物料分类账通过多级价格确定实现实际成本核算,关键步骤包括激活物料分类账、配置自动过账科目(OBYC)、运行CKMLCP进行差异分摊与结算。文章旨在帮助财务与成本会计人员确保成本差异的准确归集与分摊,顺利完成月结。

weixin_28314575的博客 196

QTest 单元测试框架及单元测试思考

qt 单元测试框架 QTEST 及思考

一个老菜鸟的学习分享 1万+

强化学习实战1:OpenAI Gym 实验环境介绍

我的 torch 版本是 2.3.0,然后 gym 版本是 0.22.0,python 版本是 3.8 ,pygame 版本是 2.6.0 。首先安装一下 gym: 然后安装一下 pygame: 都安装好之后,可以写上下面的测试代码看是否能正常弹出一个游戏画面: 如果一切顺利,你将看到一个倒立摆小车在屏幕上移动,并随着时间步的推移而逐渐失去平衡。 上面的代码是 CartPole 环境的一些介绍和简单使用,而下面的代码则是采用上面介绍的内容让 action 和 environment 交互实战感受一下: 运行

qq_53324833的博客 1980

汽车LIN总线(3) -- 协议层:帧的类型

主要介绍LIN协议层中帧的类型,介绍中加入一点自己的理解(带下划线的是,其余是官方资料)。

晴朗luo的博客 889

OpenAI Gym 介绍

OpenAI Gym 是一个用于开发和比较强化学习算法的工具包。它提供了一系列的环境,供用户在这些环境中训练和测试他们的算法。Gym 的设计目标是简化强化学习的研究,使得研究者和开发者能够专注于算法的实现,而不必担心环境的细节。OpenAI Gym 是一个强大的工具,用于强化学习研究和开发。它提供了多种环境和简单的 API,使得用户能够快速上手并进行实验。以上示例展示了如何使用 OpenAI Gym 创建和运行一个简单的环境,用户可以根据需求扩展和自定义环境,进行更复杂的强化学习任务。

嵌入式之斋 300

vscode中运行gcc -v命令失败了,提示:gcc不是内部或外部命令...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 976

Transformer模型在时间序列预测中的应用:价格和产量预测

Transformer模型由Attention is All You Need论文提出,并在机器翻译任务上取得了巨大成功。其主要特点是使用自注意力机制代替传统的递归或卷积操作进行序列建模。Transformer模型由编码器和解码器组成,其中编码器用于学习输入序列的表示,解码器用于生成目标序列。在时间序列预测中,我们只需要使用Transformer的编码器部分。编码器将历史数据作为输入,学习一个表示,然后使用该表示来预测未来的数值。

HnrzLinux的博客 738

OpenAI Gym简介及配置

1. OpenAI Gym OpenAI Gym是用于开发和比较强化学习算法的工具包。 这是Gym开放源代码库,可让您访问一组标准化的环境。 OpenAI Gym包含的环境如下: CartPole-v0 Pendulum-v0 MountainCar-v0 MountainCarContinuous-v0 BipedalWalker-v2 Humanoid-V1 Riverraid-v0 Breakout-v0 Pong-v0 MsPacman-v0 SpaceInvaders-v0 Seaquest-v

半夏微凉的博客 2258

Python全栈入门到实战【基础篇 05】核心基础:Python的2种运行模式(交互式+命令行式)

Python代码运行模式详解:交互式与命令行式对比 摘要: Python提供两种核心运行模式:交互式(REPL)和命令行式(脚本式)。交互式模式适合快速测试语法,即时反馈结果,通过终端输入python启动,特点是无需保存、临时执行,适合验证小段代码逻辑。命令行式模式需将代码保存为.py文件后运行,适合开发完整程序,可重复执行和修改。两种模式各有优势:交互式便于学习调试,命令行式适合实际开发。掌握两种模式的使用场景和切换方法,是Python入门的关键技能,能显著提升学习效率。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 4563

RL 基础 | 如何使用 OpenAI Gym 接口,搭建自定义 RL 环境(详细版)

参考: 官方链接:Gym documentation | Make your own custom environment 腾讯云 | OpenAI Gym 中级教程——环境定制与创建 知乎 | 如何在 Gym 中注册自定义环境? g,写完了才发现自己曾经写过一篇:RL 基础 | 如何搭建自定义 gym 环境 (这篇博客适用于 gym 的接口,gymnasium 接口也差不多,只需详细看看...

weixin_40804339的博客 453

华为OD机试真题2026双机位C卷 Java&Go 实现【用户入网定期复评】

用户开立支付账户,在开户完成后立即对用户进行一次风险模型评级,输出一个评分风险,评分范围1-100,等区间的分为5个等级,1-19为等级1,20-39为等级2,40-59为等级3,60-79为等级4,80-100为等级5,系统每天会任务对全量入网用户进行计算复评时间,输出评分给出新的风险等级。复评规则如下:

MISAYAONE的博客 149

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

在openai/gym中使用自己的环境

  gym是openai推出的强化学习框架,它提供了丰富的接口给开发者使用,再结合其开源的常见算法实现openai/baselines,能够使开发者方便地各种强化学习算法应用到自己的需求中。   环境是强化学习算法中的重要一环,环境如何对agent的动作进行反馈,state和reward的更新直接影响了agent后续的工作,因此针对不同的需求我们需要定义自己的环境。下面就主要介绍如何在gym中使用...

Stoneplay 9644

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

上一篇: 运筹系列10:线性规划开源软件GLPK和PyMathProg
下一篇: python系列1:python操作redis
IE06
博客等级 码龄11年 1558粉丝 298原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值