RL 基础 | 如何使用 OpenAI Gym 接口,搭建自定义 RL 环境(详细版)
参考:
- 官方链接:Gym documentation | Make your own custom environment
- 腾讯云 | OpenAI Gym 中级教程——环境定制与创建
- 知乎 | 如何在 Gym 中注册自定义环境?
- g,写完了才发现自己曾经写过一篇:RL 基础 | 如何搭建自定义 gym 环境
(这篇博客适用于 gym 的接口,gymnasium 接口也差不多,只需详细看看接口定义 魔改一下即可)
安装 openai gym:
# pip install gym
import gym
from gym import spaces
需实现两个主要功能:
env.__init__()和obs = env.reset()函数;obs, reward, done, info = env.step(action)函数。
01 env 的初始化与 reset
env.__init__() 函数:
- 输入是 env 的一些初始化条件,比如环境的地图多大、环境里有多少个金币以及每个金币的位置。如果只训练一个特定的任务,比如在 3×3 地图中吃右上角的一个金币,则这些设置都可以写死,不需要在 env 初始化时传递参数。
- 在
env.__init__()函数中,需要定义self.observation_space和self.action_space。- 如果状态空间 / 动作空间是离散的,则使用
spaces.Discrete([space dim]); - 如果是连续的,则使用
spaces.Box(low=np.array([0,1]), high=np.array([100,50]), dtype=np.float32),其中 low high 都要符合状态空间 / 动作空间的维度,分别代表每一维的最大最小值。 - 连续空间也可以使用
spaces.Box(low=0, high=255, shape=(84, 84), dtype=np.uint8)这种形式,其中空间的每个维度具有相同的最大最小值,shape 表示空间的维度。 gym.spaces的具体使用:官方文档 Gym documentation | Spaces , 知乎 | Gym 中 Spaces 浅入浅出的理解 。
- 如果状态空间 / 动作空间是离散的,则使用
- 可以在
env.__init__()函数的最后调用一下env.reset()函数。
obs = env.reset() 函数:
- 作用是初始化环境,比如把 agent 放到地图左下角,金币放在地图右上角,内置的计步器 reset 到 0 之类。
- 它的返回值 obs,应该是一个与状态空间维度相同的 np.ndarray。
02 与环境交互的 step 函数
obs, reward, done, info = env.step(action) 函数:
- 输入 action,应该是一个与动作空间维度相同的 np.ndarray。(一般的环境应该不支持批量输入 action,即
action.shape = (batch_size, action_dim)) - step 函数被用在 agent 与 env 的交互;env 接收到输入的动作 action 后,内部进行一些状态转移,输出:
- 新的状态 obs:与状态空间维度相同的 np.ndarray;
- reward:奖励值,实数;
- done:bool 值,True 代表这个 episode 已经跑完(比如 agent 吃到了金币,或 agent 已经走完了 1000 步)(此时该 reset 了),False 则代表这个 episode 还没跑完。
- info:python 的字典(dict),可以传递一些信息,没有信息传递则可以设成
{}。
03 高级用法
env.__init__(render_mode="human" or "rgb_array")以及rgb_frame = env.render()。render mode = human 好像可以使用 pygame,rgb frame 则是直接输出(比如说)shape = (256, 256, 3) 的 frame,可以用 imageio 保存成视频。- 如何注册 gym 环境:RL 基础 | 如何注册自定义 gym 环境
RL 基础 | 如何使用 OpenAI Gym 接口,搭建自定义 RL 环境(详细版)的更多相关文章
- Windows+QT+Eclipse+MinGW搭建QT开发环境详细教程
Windows+QT+Eclipse+MinGW搭建QT开发环境详细教程 一.准备工具: QT-SDK for Windows:http://get.qt.nokia.com/qtsdk/qt-sd ...
- java 基础(一) Sublime Text3搭建Java编译环境(Windows系统)
1. 首先配置好Java环境变量我的jdk版本是1.8.0_191,存放目录是C:\Program Files\Java,因此添加以下环境变量 (1)系统变量→新建 JAVA_HOME 变量,变量值为 ...
- eclipse搭建android开发环境详细步骤
搭建android应用的开发环境,一套程序下来也是相当繁琐的,这里我整理下一整套详细流程: 1,下载JDK 去oracle官网下载最新版本的jdk,官网地址 http://www.oracle.com ...
- hexo+github搭建博客(超级详细版,精细入微)
# 前言 你了解[Hexo]( https://hexo.io/zh-cn/ "Hexo官网")吗? Hexo是一个静态博客框架,基于Node.js,将Markdown文章通过渲染 ...
- css基础之 font的简写规则 以及 自定义 CSS3 @font-face详细用法
Part 1 font简写 CSS的命名规则是用英文字母 数字 和下划线(一般用小写)来命名.简写css font的好处有三:一是写起来方便(就像键盘快捷键):二是简化代码:三是帮助你熟悉和深刻理解c ...
- 搭建Kafka运行环境-Mac版
停止kafka服务: kafka_2.12-0.10.2.1> bin/kafka-server-stop.sh kafka_2.12-0.10.2.1> bin/zookeeper-se ...
- SpringMVC框架搭建流程(完整详细版)
SpringMVC框架搭建流程 开发过程 1)配置DispatcherServlet前端控制器 2)开发处理具体业务逻辑的Handler(@Controller. @RequestMapping) 3 ...
- Ubuntu下常用强化学习实验环境搭建(MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2)
http://lib.csdn.net/article/aimachinelearning/68113 原文地址:http://blog.csdn.net/jinzhuojun/article/det ...
- 常用增强学习实验环境 I (MuJoCo, OpenAI Gym, rllab, DeepMind Lab, TORCS, PySC2) (转载)
原文地址:http://blog.csdn.net/jinzhuojun/article/details/77144590 和其它的机器学习方向一样,强化学习(Reinforcement Learni ...
- 1.WIN10下搭建vue开发环境
WIN10下搭建vue开发环境 详细的安装步骤如下: 一.安装node.js 说明:安装node.js的windows版本后,会自动安装好node以及包管理工具npm,我们后续的安装将依赖npm工具. ...
随机推荐
- WM_CONTEXTMENU
通知用户希望显示上下文菜单的窗口. 用户可能已在窗口中单击鼠标右键 (右键单击) .按 Shift+F10 或按应用程序键 (上下文菜单键) 某些键盘上可用 #define WM_CONTEXTMEN ...
- Mac 使用 Caps Lock 键切换输入法失灵问题解决
Mac 上的 Caps Lock 键对于多语言用户来说,除了切换输入大小写的作用外还承担着切换输入法的功能.正常情况下,轻按一下 Caps Lock 键是切换输入法,长按是切换输入大小写.然而有时这个 ...
- python pyqt6 颜色弹窗 QColorDialog
def setColor(self): # 避免窗口置顶后,Dialog被主窗口覆盖,所以需要传递self # 设定默认颜色使用getColor的第一个参数(使用setCurrentColor不生效) ...
- 在虚拟机CentOS中安装jdk
公众号本文地址:在虚拟机CentOS中安装jdk 本文主要是记录在CentOS中安装新的JDK的过程. 在虚拟机的centos中安装Jdk主要分为三步,第一步上传jdk文件到centos中,第二步解压 ...
- 手把手教你安装Jupyter Notebook(保姆级教程)
来源于:https://blog.csdn.net/weixin_43855159/article/details/137738714 1. 什么是Jupyter Notebook Jupyter N ...
- 【转】 Vue中import from的来源:省略后缀与加载文件夹
原文地址 Vue中import from的来源:省略后缀与加载文件夹_超频化石鱼的博客-CSDN博客 ,原文地址排版格式可能更好,建议看原文,本文只是为了转载记录 Vue使用import ... fr ...
- mysql事务隔离级别及MVCC 原理
一.事务的隔离级别 为了保证事务与事务之间的修改操作不会互相影响,innodb希望不同的事务是隔离的执行的,互不干扰. 两个并发的事务在执行过程中有 读读.读写(一个事务在读某条数据的同时另一个事务在 ...
- Redis 入门 - C#|.NET Core客户端库六种选择
经过前面的Redis基础学习,今天正式进入编码阶段了,进入编码阶段我们又同样面临一道多选题,选择什么客户端库?要是有选择困难症的又要头疼了.不过别担心我先头疼,今天就给大家介绍6款.NET系Redis ...
- HttpURLConnection和HttpClient使用
HttpURLConnection 这是Java的标准类,继承自URLConnection,可用于向指定网站发送GET/POST请求. 方法描述 void setRequestMethod(Strin ...
- manim边学边做--空心多边形
空心的多边形Cutout是一种比较特殊的多边形,主要用于解决与形状.大小.位置等相关的数学问题. Cutout多边形可以定义物体表面的空洞或凹陷部分,从而更准确地模拟现实世界中的复杂形状. 比如,在P ...