前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >RL实践2——RL环境gym搭建

RL实践2——RL环境gym搭建

作者头像
列夫托尔斯昊
发布于 2020-09-07 07:01:07
发布于 2020-09-07 07:01:07
1.5K02
代码可运行
举报
文章被收录于专栏:探物及理探物及理
运行总次数:2
代码可运行

RL回顾

首先先来回顾一下强化学习问题中,环境Env 和 代理Agent 分别承担的角色和作用。

RL组成要素是Agent、Env

代理环境 分别承担的作用

  • Agent: 由Policy 和 RL_Algorithm构成,这种对RL_algorithm的算法理解比较宽泛
    • policy负责将observation映射为action
    • RL_Algorithm负责优化policy,具有学习和搜索(规划)的能力
  • Enviroment:
    • 输入action
    • 输出reward、state
    • 内部还需要完成执行状态转移、判断是否终止等任务
  • Agent的构成的另一种理解 组成要素:Policy、Value function、Model其中至少一个

gym

gym介绍

gym是一个热门的学习库,搭建了简单的示例,其主要完成的功能,是完成了RL问题中Env的搭建。

  • 对于强化学习算法的研究者,可以快速利用多种不同的环境验证迭代自己的算法有效性。
  • 对于强化学习应用的研究者,我们可以效仿gym中的接口,搭建自己的环境。

gym定义

gym是一个class 的形式,完成了接口定义和调用

gym的核心代码写在core.py里,定义两个最基本的基类EnvSpace

  • Space
    • Discrete类,定义离散状态、动作,初始化需要1个参数,维度n
    • Box类,定义连续状态、动作,初始化需要2个array(size=维数n)

伪代码如下:

  • 环境Env
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Environment():
    self.states  # 所有可能的状态集合
    self.agent_cur_state    # 记录个体当前的状态
    self.observation_space  # 个体的观测空间
    self.action_space  # 个体的行为空间
        
    def reward(self) -> reward # 根据状态确定个体的即时奖励
    def dynamics(self, action) -> None # 根据当前状态和个体的行为确定个体的新状态
    def is_episode_end(self) -> Bool # 判断是否一个Episode结束
def obs_for_agent() -> obs  # 环境把个体当前状态做一定变换,作为个体的观测
  • 代理Agent
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Agent(env: Environment):
    self.env = env  # 个体依附于一个环境存在
    self.obs # 个体的观测
    self.reward # 个体获得的即时奖励

    def performPolicy(self, obs) -> action # 个体执行一个策略产生一个行为

    def performAction(self, action) -> None  # 个体与环境交互,执行行为
        action = self.performPolicy(self.obs)
        self.env.dynamics(action)

    def observe(self) -> next_obs, reward # 个体得到从环境反馈来的观测和奖励
        self.obs = self.env.obs_for_agent()
        self.reward = self.env.reward()

gym调用

gym的调用框架

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
env = gym.make('x')
observation = env.reset()
for i in range(time_steps):
    env.render() # 调用第三方库刷动画写这里
    action = policy(observation)
    observation, reward, done, info = env.step(action)
    if done:
        ……
        break
env.close()

例子

例程是一个简单的策略,杆左斜车左移,右斜则右移。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import gym
import numpy as np
env = gym.make('CartPole-v0')
t_all = [ ]
action_bef = 0
for i_episode in range(5):
    observation = env.reset()
    for t in range(100):
        env.render()
        cp, cv, pa, pv = observation
        if abs(pa)<= 0.1:
            action = 1 -action_bef
        elif pa >= 0:
            action = 1
        elif pa <= 0:
            action = 0
        observation, reward, done, info = env.step(action)
        action_bef = action
        if done:
            # print("Episode finished after {} timesteps".format(t+1))
            t_all.append(t)
            break
        if t ==99:
            t_all.append(0)
env.close()
print(t_all)
print(np.mean(t_all))

gym的搭建

函数接口

一个完整的gym环境包括以下函数:

  • class Cartpoleenv(gym.env)
    • def __ init __(self):类构建
    • def reset(self):初始化
    • def seed(self, seed = None):随机初始条件种子return [seed]
    • def step(self, action): 单步仿真observation, reward, done, info
    • def render(self, mode='human'):图像引擎调用绘制窗口return self.viewer.render()
    • def close():关闭窗口

功能函数

  • 参数限位 vel = np.clip(vel, vel_min, vel_max)
  • action输入校验 self.action_space.contains(action)
  • action和observation空间定义

例子: Discrete: 0,1,2三个离散值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
low = np.array([min_0,min_1],dtype=np.float32)
high = np.array([max_0,max_1],dtype=np.float32)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
self.action_space = spaces.Discrete(3)
self.observation_space = spaces.Box(
self.low, self.high, dtype=np.float32)

agent 的构建

agent与环境进行交互,输入是env的输出(observation),输出是env的输入(action)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Agent():
    def __ init__(self,action_space):
        self.action_space = action_space
    def act(self, observation, reward, done):
        return action

agent和env交互逻辑如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nb_episodes = xx
nb_steps = xx
reward = 0
done = False        
for i in range(nb_episodes):
    ob = env.reset()
    sum_reward = 0
    for j in range(nb_steps):
        action = agent.act(ob, reward, done)
        ob, reward, done, _ = env.step(action)
        sum_reward += reward
        if done:
            break

添加自己写的环境到gym,方便调用

设置过程

  1. 打开gym.envs目录:/usr/local/lib/python3.7/site-packages/gym/envs
  2. 将自己编写的myenv.py拷贝至一个custom目录
  3. envs/custom__init__.py添加 from gym.envs.custom.myenv import MyEnv ,将子文件夹的.pyimport到上层目录
  4. env下__init__.py添加
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
register(
id='myenv-v0',
entry_point='gym.envs.custom:MyEnv,
max_episode_steps=999,      #限制了最大终止仿真步数
)

授权gym的方法可以调用myenv.py中的MyEnvclass

  • 注意:
    • __init__.py里的register方法中env_name版本号-v0不能省略
    • 调用的时候,也要带上环境相应的版本号

调用方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
env_name = 'myenv-v0'
env = gym.make('env_name')
env.reset()     # 初始化环境
env.render()    # 绘制环境,if necessary
env.step()      # 单步仿真
env.close()     # 关闭环境,一般涉及图像绘制的任务,此步为必须
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenAI Gym 入门
这一部分参考官网提供的文档[1],对 Gym 的运作方式进行简单的介绍。Gym 是一个用于开发和比较强化学习算法的工具包,其对「代理」(agent)的结构不作要求,还可以和任意数值计算库兼容(如 Tensorflow 和 Pytorch)。Gym 提供了一系列用于交互的「环境」,这些环境共享统一的接口,以方便算法的编写。
口仆
2020/09/03
5.3K1
OpenAI Gym 入门
【五】gym搭建自己的环境之寻宝游戏,详细定义自己myenv.py文件以及算法实现
通过上篇文章我们已经可以注册搭建自己环境了,下面开始详细构建自己的myenv.py文件,还有疑问请看文章【四】。
汀丶人工智能
2022/12/21
2.1K1
【五】gym搭建自己的环境之寻宝游戏,详细定义自己myenv.py文件以及算法实现
强化学习仿真环境搭建入门Getting Started with OpenAI gym
gym是用于开发和比较强化学习算法的工具包。它不对代理的结构做任何假设,并且与任何数字计算库(例如TensorFlow或Theano)兼容。
列夫托尔斯昊
2020/09/10
2.6K1
强化学习仿真环境搭建入门Getting Started with OpenAI gym
【四】gym搭建自己的环境,全网最详细版本,3分钟你就学会了!
我们下一步要做的就是确保自己创建的环境可以在gym里使用,那么我建议我们可以选择classic_control文件里的cartpole.py来作为我们的myenv.py,简单方便。
汀丶人工智能
2022/12/01
3.6K2
【四】gym搭建自己的环境,全网最详细版本,3分钟你就学会了!
【机器学习】机器学习重要分支——强化学习:从理论到实践
强化学习(Reinforcement Learning, RL)作为机器学习的重要分支之一,通过与环境交互、试错学习来优化决策策略,已在机器人控制、游戏AI、自动驾驶等领域展现出巨大的潜力。本文将深入探讨强化学习的基本原理、核心算法及其在实际中的应用,并提供代码示例和图表以帮助读者更好地理解和掌握这一技术。
E绵绵
2024/06/17
1.2K0
q-learning强化学习使用基础
马尔科夫链:奖励*折扣因子,R(t)=reward(1)+yR(t+1),马尔可夫链多次迭代后分布趋于稳定所以可以得到最优解
sofu456
2023/09/21
2780
q-learning强化学习使用基础
gym 搭建 RL 环境
gym调用 gym的调用遵从以下的顺序 env = gym.make('x') observation = env.reset() for i in range(time_steps): env.render() action = policy(observation) observation, reward, done, info = env.step(action) if done: …… break env.close() 例程 例程是一个简单的策略,杆左斜车左移,右斜则右
列夫托尔斯昊
2020/08/25
7910
强化学习第1天:强化学习概述
强化学习中有一些重要的概念,我们接下来一一介绍他们,如果有些不理解不要着急,我们会举一个具体例子来解释
Nowl
2024/01/18
2700
强化学习第1天:强化学习概述
【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例
注释:导入gym库,第2行创建CartPole-v0环境,并在第3行重置环境状态。在for循环中进行1000个时间步长(timestep)的控制,第5行刷新每个时间步长环境画面,第6行对当前环境状态采取一个随机动作(0或1),最后第7行循环结束后关闭仿真环境。 同时本地会渲染出一个窗口进行模拟如下图:
汀丶人工智能
2022/12/01
9130
【二】gym初次入门一学就会---代码详细解析简明教程----平衡杆案例
OpenAI Gym 高级教程——可解释性和可视化
在本篇博客中,我们将深入探讨 OpenAI Gym 高级教程,聚焦于强化学习模型的可解释性和可视化。我们将使用解释性工具和数据可视化方法,以便更好地理解模型的决策过程和性能。
Echo_Wish
2024/02/05
4850
强化学习系列(三)-gym介绍和实例
gym是openAI下的一个开发和对比强化学习算法的工具包,内部提供了强化学习需要的环境。
languageX
2022/02/06
5.2K0
OpenAI Gym 中级教程——环境定制与创建
OpenAI Gym 是一个强化学习算法测试平台,提供了许多标准化的环境供用户使用。然而,有时候我们需要定制自己的环境以适应特定的问题。本篇博客将介绍如何在 OpenAI Gym 中定制和创建环境,并提供详细的代码示例。
Echo_Wish
2024/01/31
1.3K0
Python中的gym入门
在机器学习和强化学习领域,学习和评估算法的性能通常是非常重要的。为了满足这个需求,OpenAI开发了一个名为gym的Python库。gym提供了一系列标准化的环境,用于开发和比较强化学习算法。
大盘鸡拌面
2023/10/17
5560
强化学习笔记-Python/OpenAI/TensorFlow/ROS-基础知识
环境类型:确定,随机,完全可观测,部分可观测,离散,连续,情景序列,非情景序列,单智能体,多智能体。
zhangrelay
2019/06/14
1.2K0
强化学习笔记-Python/OpenAI/TensorFlow/ROS-基础知识
OpenAI gym  强化学习环境库安装以及使用
在强化学习里面我们需要让agent运行在一个环境里面,然鹅手动编环境是一件很耗时间的事情, 所以如果有能力使用别人已经编好的环境, 可以节约我们很多时间。 OpenAI gym 就是这样一个模块, 他提供了我们很多优秀的模拟环境. 我们的各种 RL 算法都能使用这些环境.。
大鹅
2021/06/15
2.2K0
OpenAI gym  强化学习环境库安装以及使用
使用Python实现深度学习模型:策略梯度方法
策略梯度方法(Policy Gradient Methods)是强化学习中的一种重要方法,通过直接优化策略(Policy),使智能体(Agent)能够在给定环境中执行任务。本文将详细讲解如何使用Python实现策略梯度方法,并通过代码示例逐步解释其核心概念和实现步骤。
Echo_Wish
2024/07/01
2190
Gym 的 Frozen Lake 环境介绍
上一篇文章有介绍gym里面env的基本用法,下面几行可以打印出一个当前环境的可视化:
杨熹
2020/03/20
2.3K0
强化学习之策略迭代和价值迭代(gym)
起初写完代码发现run完policy_evaluation后value表中的值不收敛,越来越大,直至inf。后来发现是new_value_table = np.copy(value_table)的错误,因为更新V(s)用的是+=,所以若不置零(new_value_table = np.zeros(env.nS))则新价值表都是基于旧表再加新值得到,则新旧两表永远不会一致,使得算法不收敛。
SL_World
2021/09/18
1.2K0
OpenAI gym——一款开发和比较RL算法的工具包
手动编写环境是一件很耗时间的事情,所以如果可以直接使用比人编写好的环境,可以节约我们很多时间。OpenAI gym就是这样一个模块,他提供给我们很多优秀的模拟环境。我们的各种强化学习算法都能使用这些环境。之前的环境都是用tkinter来手动编写,或者想玩玩更厉害的,像OpenAI一样,使用pyglet模块来编写。 OpenAI gym官网:https://gym.openai.com/
CristianoC
2020/05/31
1.3K0
OpenAI Gym 中级教程——深入强化学习算法
OpenAI Gym 是一个用于开发和比较强化学习算法的工具包,提供了多个环境,包括经典的控制问题和 Atari 游戏。本篇博客将深入介绍 OpenAI Gym 中的强化学习算法,包括深度 Q 网络(Deep Q Network, DQN)和深度确定性策略梯度(Deep Deterministic Policy Gradient, DDPG)。
Echo_Wish
2024/01/30
8241
推荐阅读
相关推荐
OpenAI Gym 入门
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档