pytorch2-gym

1,官网

https://gym.openai.com/docs/

2,gym简介

Gym是一个用于开发和比较强化学习算法的工具包,是测试问题——环境(environment)的集合。这些环境具有共享接口,允许编写通用算法。

3,gym安装

  • pip安装

    pip install gym
    
  • 从源码构建(直接克隆gym Git存储库, 如果想要修改 Gym 本身或添加环境时特别有用;这需要安装更多必须的依赖项,包括 cmake 和最新的 pip 版本。)

    git clone https://github.com/openai/gym
    cd gym
    pip install -e .		#当前目录下需包含setup.py文件
    

    What is the use case for pip install -e?

4,运行案例及各类环境安装

  • 推车杆问题(cart-pole问题)最低限度的例子:运行CartPole-v0 环境的实例 1000 个时间步,在每一步渲染环境。

    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
    env.close()
    
  • 显示所有可用的环境

    >>> from gym import envs
    >>> envs.registry.all()
    dict_values([EnvSpec(Copy-v0), EnvSpec(RepeatCopy-v0), EnvSpec(ReversedAddition-v0), EnvSpec(ReversedAddition3-v0), EnvSpec(DuplicatedInput-v0), EnvSpec(Reverse-v0), EnvSpec(CartPole-v0), EnvSpec(CartPole-v1), EnvSpec(MountainCar-v0), EnvSpec(MountainCarContinuous-v0), EnvSpec(Pendulum-v0), EnvSpec(Acrobot-v1), EnvSpec(LunarLander-v2), EnvSpec(LunarLanderContinuous-v2), EnvSpec(BipedalWalker-v3), EnvSpec(BipedalWalkerHardcore-v3), EnvSpec(CarRacing-v0), EnvSpec(Blackjack-v0),
    
  • win10环境下安装各类environment

    • Algorithms

      • 如果注释掉环境渲染是可以运行的,但是如果渲染总是报错IndexError: list index out of range
    • Atari

    • Box2D

      • 在https://www.lfd.uci.edu/~gohlke/pythonlibs/#pybox2d下载相应的whl文件

        我这里根据自己的python和操作系统,下载的是Box2D‑2.3.10‑cp36‑cp36m‑win_amd64.whl

      • 通过pip安装即可

        pip install Box2D-2.3.10-cp36-cp36m-win_amd64.whl
        
    • Classic control

      • 此类environment在win10下都可以运行,没有额外必须的依赖
    • MuJoCo

      • 参考博客
      • 步骤总结:
        1. 官网products下载mojuco压缩包mjpro150 win64
        2. C:\Users\Asus新建.mujuco的空文件夹,并将1中下载的压缩包解压到该文件夹中
        3. C:\Users\Asus.mujuco\mjpro150\bin配置到环境变量
        4. 官网License获取许可证(30天/学生)
        5. 获取并配置密钥
    • Robotics

    • Toy text

      • 此类environment在win10下都可以运行,没有额外必须的依赖
  • 环境分类

    • Classic control 以及 toy text:小规模入门级任务,主要来自 RL 文献。
    • Algorithms:执行计算,例如添加多位数字和反转序列。挑战在于纯粹从示例中学习这些算法。这些任务有一个很好的特性,即通过改变序列长度很容易改变难度。
    • Atari:经典的 Atari 游戏。
    • 2D 和 3D 机器人:在模拟中控制机器人。这些任务使用 MuJoCo 物理引擎,该引擎专为快速准确的机器人模拟而设计。 MuJoCo 是专有软件,但提供免费试用许可证。
  • 自定义gym环境

    将自己的环境添加到注册表中非常容易,只需在加载时 register() 即可,从而使该环境可用于gym.make()。

5,细节

  • env.step():将动作作用于环境。返回四个值,分别是:

    • observation/观测(object):一个特定于环境的对象,代表对环境的观察。例如,来自相机的像素数据、机器人的关节角度和关节速度,或棋盘游戏中的棋盘状态。
    • reward/奖励(float):前一个动作获得的奖励量。 量纲因环境而异,但目标始终是增加总奖励。
    • done(boolean):是否是时候再次重置环境了。 大多数(但不是全部)任务已被划分为明确定义的episodes,done为True意味着所有的episodes已经终止。 (例如,也许杆子倾斜得太远,或者在游戏中已经丢了一条命。)
    • info/信息(dict):对调试有用的诊断信息。有时对学习很有用(例如,它可能包含环境最后状态变化背后的原始概率);但是,在官方评估算法性能时不允许将此用于学习(相当于作弊)。
  • agent-environment loop/智能体-环境循环:每个时间步,agent选择一个action,environment返回一个observation以及reward;这一过程通过调用reset()方法开始,这会返回一个初始的观测值。

    image-20210714090421804
    '''例2'''
    import gym
    with gym.make('CartPole-v0') as env:  #环境实例化make
        for i_episodes in range(20):
            observation = env.reset()   #环境初始化并获取初始化观测值reset
            for t in range(100):
                env.render()    #环境渲染render
                print(observation)
                action = env.action_space.sample()  #在动作集合中随机选取动作action_space.sample
                observation, reward, done, info = env.step(action)  #将动作作用于环境step
                if done:
                    print(f"\033[3{i_episodes%10}mEpisode finished after {t+1} timesteps.\033[0m")
                    break   #每个episode并不一定跑满时间步,因为往往在这之前就已经达到终止条件了(在杆车系统中,随机选取动作跑不满100个时间步,往往20个左右就已经可以判定为结束了,此时直接break,环境初始化进入下一个episode)
    
  • action_space/动作空间 以及 observation_space/观测空间:每个环境都带有一个 action_space 和一个observation_space, 这些值都属于 Space 类型,它们描述了有效操作和观察的格式:

    >>> import gym
    >>> env = gym.make('CartPole-v0')
    >>> env.action_space
    Discrete(2)
    >>> env.observation_space
    Box(-3.4028234663852886e+38, 3.4028234663852886e+38, (4,), float32)
    >>> env.observation_space.high
    array([4.8000002e+00, 3.4028235e+38, 4.1887903e-01, 3.4028235e+38],
          dtype=float32)
    >>> env.observation_space.low
    array([-4.8000002e+00, -3.4028235e+38, -4.1887903e-01, -3.4028235e+38],
          dtype=float32)
    
    • Discrete表示允许固定范围的非负数。在上面的例子中,有效动作是 0 或 1,其中一个动作向左侧施加力,其中一个动作向右侧施加力。
    • Box表示由 n 维数组组成。在上面的例子中,有效观察值将是一个包含 4 个数字的数组,分别是:小车位置、小车速度、棍的倾斜角度、棍的角速度;游戏中如果角度大于12度,或者小车位置超过2.4就意味着失败,直接结束。

    Box和Discrete是最常见的空间类型,可以从 Space 中采样或检查某些值是否属于特定的空间:

    >>> from gym import spaces
    >>> space = spaces.Discrete(8)
    >>> x = space.sample()
    >>> assert space.contains(x)
    >>> assert space.n == 8
    

附录

1,OpenAI Gym 白皮书

  • 严格的版本控制:如果环境发生了变化,变化前后的结果将是不可比拟的。 为避免此问题,gym保证对环境的任何更改都将伴随版本号的增加 。例如 CartPole 任务的初始版本命名为 Cartpole-v0,如果其功能发生变化,名称将更新为 Cartpole-v1。
  • 默认监控: 默认情况下,环境使用监视器进行检测,该监视器跟踪调用的每个时间步(模拟的一步)和重置(对新的初始状态进行采样)。 监视器的行为是可配置的,它可以定期录制视频, 也可以产生学习曲线。

2,Gym Documents

3,Gym website / 排行榜

4,杆车的位置策略控制和角策略控制

'''位置策略'''
import gym

def action(status):
    pos, v, ang, va = status
    print(status)
    if pos <= 0:
        return 1
    else:
        return 0

env = gym.make('CartPole-v0')
status = env.reset()
for step in range(1000):
    i = 0
    env.render()
    status, reward, done, info = env.step(action(status))
    if done:
        print('dead in %d steps' % step)
        break
env.close()
'''角策略'''
import gym

def action_a(status):
    pos, v, ang, va = status
    print(status)
    if ang > 0:
        return 1
    else:
        return 0

env = gym.make('CartPole-v0')
status = env.reset()
for step in range(1000):
    i = 0
    env.render()
    status, reward, done, info = env.step(action_a(status))
    if done:
        print('dead in %d steps' % step)
        break
env.close()
posted @ 2021-07-13 14:42  tensor_zhang  阅读(328)  评论(0编辑  收藏  举报