强化学习:gym环境的解读及使用

原文地址

分类目录——强化学习

  • 本文全部代码

  • 以立火柴棒的环境为例

    效果如下

    强化学习:gym环境的解读及使用_第1张图片
  • 获取环境

    env = gym.make('CartPole-v0')   
    # 定义使用gym库中的某一个环境,'CartPole-v0'可以改为其它环境
    env = env.unwrapped             
    # 据说不做这个动作会有很多限制,unwrapped是打开限制的意思
    

    可以通过gym.make(id)的方式获取gym中的环境,gym中都有些什么样的环境呢,如果你是用anaconda配置的环境,你可以在Anaconda3\envs\环境名\Lib\site-packages\gym\envs\__init__.py中获得gym中所有注册的环境信息。如果你用的是原生的python环境,大概也可以在你的python环境位置\Lib\site-packages\gym\envs\__init__.py找到这个文件,不过这个我就没有测试了,它是这样一个文件

    强化学习:gym环境的解读及使用_第2张图片

    make方法中就是根据这个id获取的,还可以根据entry_point属性找到环境的位置,(我试过通过 Ctrl+左键单击 的方式找到这个环境,但是失败了),不如就这个CartPole-v0的环境,它是这样的

    强化学习:gym环境的解读及使用_第3张图片

    可以查看到环境的相关信息

  • 获取环境参数

    gym中的环境都继承自gym.Env这个父类

    强化学习:gym环境的解读及使用_第4张图片

    至少其中这几个属性和函数在gym的环境中都是有的,当然基于需要各个环境中也有它们独有的环境

    下面这几个是常用的gym属性

    • 状态空间env.observation_space

      其状态空间是这样一个类型

      强化学习:gym环境的解读及使用_第5张图片

      在自定义环境时可以这样构造状态空间,其中

      方法/属性 作用
      shape 尺寸/规格/形状,通过用 .shape[0] 的方式获取状态向量的维度
      sample() 从空间中随机取一个值,在回合重置时常用到
      seed() 设定随机种子,效果就是定死其内部生成随机数的机制,是每次生成的结果不变
      contains(obj) 判断空间中是否包含obj
      high 上届
      low 下界
    • 动作空间env.action_space

      其动作空间是这样一个类型

      强化学习:gym环境的解读及使用_第6张图片

      在自定义环境时可以这样构造动作空间,其中

      属性/方法 作用
      sample() 从空间中随机取一个值,在回合重置时常用到
      seed() 设定随机种子,效果就是定死其内部生成随机数的机制,是每次生成的结果不变
      contains(obj) 判断空间中是否包含obj
      n 动作空间中的动作个数(连续空间中就没有这个了)
    • 使用实例

      print(env.action_space)
      print(env.observation_space)
      print(env.observation_space.low)
      print(env.observation_space.high)
      print(env.observation_space.shape)
      print(env.observation_space.sample())
      # Discrete(2)
      # Box(4,)
      # [-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,)
      # [-4.1981392e+00  1.1287736e+38 -3.8320544e-01 -2.4842601e+38]
      
  • 环境中的方法

    环境中一般都会有上面说到的父类中的方法,其中

    • step():用于编写智能体与环境交互的逻辑;它接受一个动作(action)的输入,根据action给出下一时刻的状态(state)、当前动作的回报(reward)、探索是否结束(done)及调试帮助信息信息。

      observation_, reward, done, info = env.step(action)
      
    • reset():用于在每轮开始之前重置并返回智能体的状态,这个状态通常会随机获得

      observation = env.reset()
      
    • render():可视化的关键部分,用来绘制画面

      env.render()
      

      我的大概理解就是根据当前状态刷新一帧

    • close():用来在程序结束时清理画布

      env.close()
      
  • 这里把关键部分放在这,更多的参见 本文全部代码

# 训练
for i_episode in range(2000):
    observation = env.reset()
    ep_r = 0
    while True:
        # env.render()  # 不进行可视化可以加速训练过程,取消注释可以观察训练过程
        action = RL.choose_action(observation)                          # 选择动作
        observation_, reward, done, info = env.step(action)             # 执行动作
        RL.store_transition(observation, action, reward, observation_)  # 存储 一步 的信息到记忆库
        ep_r += reward          # ep_r用来计算总回报
        if total_steps > 500:   # 待到记忆库中存有一些信息后,从里面抽取样本进行训练
            RL.learn()
        if done:                # 达到结束条件,结束本轮(跳出循环)
            if i_episode%20==0:
                print('episode: ', i_episode,
                      'ep_r: ', round(ep_r, 2),
                      )
            break

        observation = observation_  # 更新当前状态
        total_steps += 1
  • 相关内容

    分类目录——强化学习(更新中)

    什么是gym

    gym自定义可视化环境绘制

    gym自定义可视化环境实例

    强化学习:gym环境解读及使用

    从Q_Learning看强化学习

    一个Q_Learning强化学习自定义gym环境可视化实例

    tkinter绘制强化学习可视化环境

  • 参考文献

    OpenAI gym 环境库

    快乐的强化学习3——环境模块gym的调用

你可能感兴趣的:(Python,#,强化学习,python,强化学习,gym环境,使用)