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
      • linux系统

        • https://github.com/openai/atari-py#roms
        • http://www.atarimania.com/rom_collection_archive_atari_2600_roms.html
      • windows系统

        pip install gym
        pip install --no-index -f https://github.com/Kojoley/atari-py/releases atari_py
        
    • 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()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: DQN (Deep Q-Network) 是一种基于深度神经网络的强化学习算法,它可用于解决强化学习环境中的问题。PyTorch 是一个开源的深度学习框架,提供了一种简单而强大的方式来构建和训练神经网络模型。CartPole-v0 是 OpenAI Gym 提供的一个强化学习环境,目标是控制一个摆杆平衡在垂直位置上。 在使用 PyTorch 实现 DQN 解决 CartPole-v0 问题时,需要首先定义一个深度神经网络模型作为 Q 函数的近似。这个模型通常包含若干隐藏层和一个输出层,用于预测在给定状态下采取各个动作的 Q 值。 然后,需要定义一个经验回放(Experience Replay)的缓冲区,用于存储智能体在环境中的经验,包括当前状态、动作、奖励和下一个状态。 接下来,使用 epsilon-greedy 策略选择动作,epsilon 表示随机探索的概率,即以一定概率选择随机动作,以一定概率选择当前 Q 值最大的动作。 将选择的动作应用于环境中,观察下一状态和奖励,并将这些经验存储到经验回放缓冲区中。 每隔一定步数,从经验回放缓冲区中采样一批数据,然后利用这些样本数据来更新神经网络的参数。DQN 使用经验回放的方式进行训练,这样可以减少样本间的相关性,提高样本的利用效率。 通过反向传播算法计算损失函数,并利用优化器更新神经网络的参数,使得神经网络的输出 Q 值逼近真实的 Q 值。 重复进行上述步骤,直到智能体能够有效地平衡摆杆,或者达到预定的训练次数。 在实际实现 DQN 算法过程中,还需要注意学习速率、discount factor 等超参数的选择,以及选择合适的损失函数和优化器来训练神经网络模型。 总结来说,使用 PyTorch 实现 DQN 来解决 CartPole-v0 问题,需要先定义一个深度神经网络模型作为 Q 函数的近似,然后利用经验回放的方式进行训练,通过反向传播算法来更新神经网络参数,使模型能够逼近真实的 Q 值,最终达到使摆杆平衡的目标。 ### 回答2: DQN(深度Q网络)是一种强化学习算法,用于解决各种控制问题,包括CartPole-v0这个经典的强化学习环境。PyTorch是一种深度学习框架,可以方便地构建神经网络模型。 在使用PyTorch实现DQN解决CartPole-v0问题时,我们首先需要定义网络模型。可以使用PyTorch提供的nn模块创建一个多层感知机网络,包含输入层、若干隐藏层和输出层。这个网络的输入是CartPole-v0环境的状态,输出是动作的Q值。使用ReLU作为激活函数可以增加网络的非线性表示能力。 定义好网络模型后,我们需要定义DQN的训练过程。首先,根据当前环境状态输入网络获取各个动作的Q值,然后选择Q值最大的动作作为当前的行动。执行动作后,环境将返回下一个状态、奖励和是否结束的信息。将这些信息存储在经验回放缓冲区中。 接下来,我们从经验回放缓冲区中随机采样一批数据,包括之前的状态、行动、奖励和下一个状态。然后,使用目标网络(Target Network)计算下一个状态的Q值,并根据贝尔曼方程计算当前状态的目标Q值。通过最小化当前状态的动作Q值和目标Q值的差距,更新网络的参数。 在DQN的训练过程中,还需要设置超参数,包括学习率、批大小、epsilon-greedy策略的参数等。为了提高收敛速度和稳定性,可以使用经验回放和目标网络两个技术。 最后,通过多次迭代训练,不断优化网络参数,直到DQN模型在CartPole-v0环境上能够稳定地获得较高的得分。 总之,使用PyTorch实现DQN算法解决CartPole-v0问题需要定义网络模型、训练过程和超参数,并使用经验回放和目标网络等技术进行优化,以提高性能和稳定性。 ### 回答3: DQN是一种使用深度神经网络进行强化学习的算法,它使用PyTorch框架实现,在CartPole-v0环境中非常有用。 CartPole-v0是一个经典的强化学习问题,任务是控制一个平衡杆,使其在变化的条件下保持平衡。这个环境具有四个状态变量:杆的角度、杆的速度、小车的位置和小车的速度。在每个时间步骤,智能体可以向左或向右施加力来控制小车的动作。目标是使杆保持在竖直位置,并且尽可能长时间地保持平衡。 DQN算法使用了深度神经网络来估计每种动作的Q值函数。在PyTorch中,我们可以使用nn.Module类创建深度神经网络模型,可以包含一些全连接层和非线性激活函数。DQN算法还使用了经验回放机制和目标网络来提高训练效果。 在CartPole-v0中,我们可以使用PyTorch中的torchvision.transforms对环境状态进行处理。然后,我们可以使用DQN模型以一定的epsilon-greedy策略来选择动作,并与环境进行交互。每个时间步之后,我们从经验回放缓冲区中随机样本一批数据,然后计算损失并更新网络参数。我们还会定期更新目标网络的权重,以确保稳定的学习过程。 通过使用DQN算法和PyTorch框架,我们可以在CartPole-v0环境中实现高效的强化学习训练。我们可以通过调整网络结构、超参数和训练步骤来提高性能,并使智能体在该环境中获得长时间平衡杆的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tensor_zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值