zoukankan      html  css  js  c++  java
  • Gym

    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])

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

     

  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/TreeDream/p/9876044.html
Copyright © 2011-2022 走看看