Gym

用于研发与比较强化学习算法的工具。

安装

pip install gym

环境

车杆问题,模型栗子CartPole-v0

env.step() ,传入0,1,表示车向左,右给1牛顿的力,现在要平衡这个车。

import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
env.render()
env.step(env.action_space.sample()) # take a random action

我们可以尝试一下,01010101,现实生活中,会让这根杆转起来,当然这不是我们平衡这个车的目标咯。

import numpy as np
import random
import gym

env = gym.make('CartPole-v0')
env.reset()
s = 0
for _ in range(1000):
env.render()
env.step(s^1)
s^=1

当然,我们可以切换场景,gym最重要的就是训练环境,有很多,有登山,走路的等等。

为达到我们平衡这个车杆的目标,我们可以设计我们自己的算法,当然我们需要知道当前车的状态,实际上step返回值有四个,包含了深度学习的常用概念。

  • observation :环境对象,和你选的环境有关,例如你选的机器人训练环境,他就是机器人的关节等信息。

  • reward:通过前面的action,你得到的奖励。(大小不一定和模型选择相关)

  • done:游戏是否结束,(例如杆的角度倾斜太大了)

  • info:用于调试的信息,然而,官方环境不允许使用。

这就是Gym的经典的"agent-environment loop" (代理环境循环)。如图所示:

这个过程,首先reset(),返回一个环境对象。程序必须接受done方法,当满足done游戏结束标记,程序就退出。

【注】 render()重新绘制环境的一帧

import gym
env = gym.make('CartPole-v0')
for i_episode in range(20):
observation = env.reset()
for t in range(100):
env.render()
print(observation)
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
if done:
print("Episode finished after {} timesteps".format(t+1))
break

【注】这里我们打印了observation环境特性对象。

其含义,小车的位置,小车的速度,木棒的角度,木棒的速度。

  • Spaces(空间)

每一个环境都有 action_space,observation_space,他们的类型是Space,可以打印出来他们的属性。

import gym
env = gym.make('CartPole-v0')
print(env.action_space)
#> Discrete(2)
print(env.observation_space)
#> Box(4,)

Discrete空间允许随机确定的非负数,在这个案例中就是0,1。Box空间代表问题的n维空间。我们查看一下他的环境特性属性,4个数字。

print(env.observation_space.high)
#> array([ 2.4 , inf, 0.20943951, inf])
print(env.observation_space.low)
#> array([-2.4 , -inf, -0.20943951, -inf])

这有助于通用代码的编写。在车杆问题中,你可以给左右的力,你知道这些数据的含义了吗?幸运的是,你的算法学的越好,你就越少解释这些数据的含义。

最新文章

  1. linux 目录权限的特殊之处
  2. 笔记整理之BCP
  3. jQuery笔记总结
  4. 张小龙在2017微信公开课PRO版讲了什么(附演讲实录和2016微信数据报告)
  5. CentOS 网卡配置bond4(LACP)
  6. 【转】Timer还是Handler
  7. HDU 5451 广义斐波那契数列
  8. MYSQL数据库根据data文件中的.frm和ibd文件恢复单表数据
  9. noip 2013 华容道
  10. Sublime Text2
  11. IDL 遍历 XML文档示例
  12. Java虚拟机中Java内存区域
  13. Hibernate(六):映射一对多关联关系、双向一对多映射
  14. CSS实现单行、多行文本超出部分显示省略号
  15. 关于SimpleDateFormat安全的时间格式化线程安全问题
  16. .class 缓存
  17. spreed&rest
  18. ERP承接新后台优惠规则问题
  19. python 多线程锁机制
  20. jenkins 找插件下载的方法

热门文章

  1. PIE SDK影像格式转换
  2. Android应用捕获全局异常自定义处理
  3. oracle 查看一个表中的记录是否被锁住
  4. python作业1.1,编写登录模块
  5. Ace向你推荐一些实用的干货库~开发安卓的好帮手
  6. FileZilla的使用(包括Server和Client两个程序)
  7. mongodb连接失败原因排查
  8. pat00-自测5. Shuffling Machine (20)
  9. [转]Oracle job procedure 存储过程定时任务
  10. random模块/string模块