Gym是一个开发和比较强化学习算法的工具箱。它不依赖强化学习算法结构,并且可以使用很多方法对它进行调用。

1 Gym环境

这是一个让某种小游戏运行的简单例子。

这将运行 CartPole-v0 环境实例 1000 个时间步,在每次迭代的时候都会将环境初始化(env.render)。运行之后你将会看到一个经典的推车杆问题

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(100):env.render()#提供环境env.step(env.action_space.sample()) #env.action_space.sample() 会在动作空间中随机选择一个#env.step会顺着这个动作进入下一个状态
env.close()

1.1 动作是如何和环境交互的

与环境交互过程中,每一步环境都会返回四个值

observation (object)

一个特定的环境对象,代表了你从环境中得到的观测值。

例如从摄像头获得的像素数据,机器人的关节角度和关节速度,或者棋盘游戏的棋盘。

reward (float) 由于之前采取的动作所获得的奖励总和。
done (boolean) 决定是否重置环境,大多数,但不是所有的任务都被定义好了什么情况该结束这个回合。(举个例子,前面所展示的这个倒立摆的小车离开地太远了就结束了这个回合)
info (dict)

调试过程中将会产生的有用信息,有时它会对我们的强化学习学习过程很有用

程序的开始被叫做reset(),它会返回一个初始的观测值,因此像比于前面的代码,一个改良版的方式编写代码如下所示:

import gym
env = gym.make('CartPole-v1')
for i_episode in range(2):observation = env.reset()#初始话环境for t in range(100):env.render()#提供环境action = env.action_space.sample()#在可行的动作空间中随机选择一个observation, reward, done, info = env.step(action)#顺着这个动作进入下一个状态print(observation, reward, done, info)if done:print("Episode finished after {} timesteps".format(t+1))break
env.close()'''
[-0.02344513 -0.17659043  0.0043245   0.27116755] 1.0 False {}
[-0.02697694 -0.37177384  0.00974786  0.5652113 ] 1.0 False {}
[-0.03441242 -0.56703115  0.02105208  0.8609492 ] 1.0 False {}
[-0.04575304 -0.7624334   0.03827107  1.1601765 ] 1.0 False {}
[-0.06100171 -0.9580325   0.0614746   1.4646091 ] 1.0 False {}
[-0.08016236 -1.1538512   0.09076678  1.7758446 ] 1.0 False {}
[-0.10323939 -0.9598616   0.12628368  1.5127068 ] 1.0 False {}
[-0.12243662 -1.1562663   0.1565378   1.8419967 ] 1.0 False {}
[-0.14556195 -0.9631801   0.19337773  1.6017431 ] 1.0 False {}
[-0.16482554 -0.7708017   0.2254126   1.3750535 ] 1.0 True {}
Episode finished after 10 timesteps
'''

2 空间

在上面的例子中,我们一直在从环境的动作空间中采样随机动作。

【”action = env.action_space.sample()’】

每个环境都带有一个 动作空间和一个观察空间。 这些属性属于 Space 类型,它们描述了有效操作和观察的格式:

import gym
env = gym.make('CartPole-v1')
print(env.action_space)
print(env.observation_space)'''
Discrete(2)
Box([-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38], [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38], (4,), float32)
'''

离散空间允许固定范围的非负数,在'CartPole-v1'中,有效动作是 0 或 1。

print(env.action_space.start)
#0
#离散动作空间的开始值print(env.action_space.n)
#2
#离散动作空间中一共有几个值

框Box空间表示一个 n 维框,因此有效观察值将是一个包含 n个数字的数组。

我们还可以检查 Box 的边界:

print(env.observation_space.low)
print(env.observation_space.high)
'''
[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]
[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]
'''

Box 和 Discrete 是最常见的空间。 您可以从 它们中采样或检查某些东西是否属于它:

from gym import spaces
space = spaces.Discrete(8)
# Set with 8 elements {0, 1, 2, ..., 7}
x = space.sample()
print(x)
print(space.contains(x))
'''
5
True
'''

参考资料 Gym (openai.com)

python 笔记 :Gym库 (官方文档笔记)相关推荐

  1. Python的Requests库官方文档

    中文文档地址:http://cn.python-requests.org/zh_CN/latest/ 英文文档地址:https://2.python-requests.org/en/master/ap ...

  2. 【goldengate】官方文档笔记三 Oracle GoldenGate 实时报表

    这篇文档循序渐进的讲述了OGG在适时复制的几种配置方案.从最基本的配置开始讲起,逐渐加入新的进程,加入新的策略,配置也随之改变.下面从最基础的配置说起. 报表配置 一对一复制是OGG最基本的配置方案: ...

  3. 【goldengate】官方文档笔记四 Oracle GoldenGate实时数据分布

    数据分布配置是一对多得配置方案.OGG支持将源库同步到多个目标系统. 数据分布配置需要注意事项: 如果数据传输过程中,投递进程(data pump)发现目标库网络连接出现故障,捕获到得数据会继续像其它 ...

  4. 零基础Python修炼笔记——整理自官方文档

    零基础Python修炼笔记 题外话 "编外人员"学Python 书籍 交互课程 中小学儿童学习 教材和网站 科学工作者教程 视频 工具 后记 题外话 去年我自学Python的时候, ...

  5. python pymssql - pymssql模块官方文档的翻译

    译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条.此为pymssql模块version2.1.4官方文档的翻译,仅供学习交流使用,请勿用于商业用途. ...

  6. Python 3.7.1 官方文档 总结

    Python 3.7.1 1.一些概念 2.小用法 2.1 迭代器: 2.2 生成器 3.数据结构 3.1 字符串 3.2 列表 3.2.1 列表方法 list.append(x) list.exte ...

  7. carla官方文档笔记1

    介绍 介绍 CARLA是一个开源的自动驾驶模拟器.它是从零开始构建的,作为一个模块化和灵活的API来解决一系列涉及到自动驾驶问题的任务.carla的主要目标之一是帮助实现自主驾驶研发的灵活化,作为一种 ...

  8. Django企业开发读书笔记(及官方文档学习笔记) 老男孩2019Go语言视频学习

    目标:深入理解Django以及web开发深入知识,掌握Gin ,Go micro 框架 ,Kafka ,Zookeeper 为kubernetes Istio 做微服务,服务网格做铺垫 实现Pytho ...

  9. Unity官方文档笔记(一)在Unity中操作

    前言:本系列文档基于Unity 2019.4版本进行整理 一 系统要求 1.1 Unity Editor Windows 需要Win7(SP1+)及以上系统,仅限64位版本:CPU要求X64架构:GP ...

最新文章

  1. Android 中文api (88)——SharedPreferences
  2. 谷歌官方TensorFlow开发者认证来了,吴恩达:学我的课,报名费五折
  3. aspx页面事件执行顺序
  4. 1. 变量提升 2. 条件语句 3. 循环语句 弹出框的三种形式 If条件的种类...
  5. KTV阶段项目告一段落,让我们张开双臂迎接新阶段吧!!
  6. angular五大服务顺序,angularJS $事件处理程序的触发顺序
  7. javascript面试_在编码面试中需要注意的3个JavaScript问题
  8. 201621123080《Java程序设计》第十一周学习总结
  9. Nhibernate.hbm2ddl.auto配置详解
  10. Windows安装Apache注册服务出现(OS 5)拒绝访问。 : AH00369: Failed to open the Windows service manager,
  11. rabbitmq原理总结,Java反射的简单入门
  12. gtk+blade+anjuta 的简单实例
  13. jQuery1.9.1源码分析--Animation模块
  14. Android音频框架笔记 - 下篇
  15. 一个函数解决【LeetCode 买卖股票的最佳时机】系列所有题目!
  16. ACCESS数据库注入解析
  17. 我的HTC G16 CHACHA A810e版手机如何解锁和一键root的
  18. 如何用公式计算计算机的及格率,及格率和优秀率公式 在excel中如何计算及...
  19. 【分享】新品TI AM5708开发板!DSP+ARM异构多核!相比OMAP-L138,性能升级;相比AM5728,成本优化、功耗更低!
  20. win7搭建nas存储服务器_普通用户的低成本家庭文件服务器(伪NAS)的搭建(系统篇)...

热门文章

  1. Ubuntu 16.04调节屏幕显示字体大小
  2. 访谈:摩尔定律后时代,看13位行业专家如何看量子计算机的未来?
  3. ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由
  4. C#创建Oracle中的几何对象:点、线、面
  5. 网上整理的jQuery插件开发教程
  6. 【RHCA翻译计划】EX436第一章:集群存储概论2
  7. Grub2倒计时失效
  8. 线程调度 java_Java多线程--线程的调度
  9. 二进制数代替数组做标记
  10. android 事件管理器,Android输入管理InputManager之读一次事件的流程