最近自己会把自己个人博客中的文章陆陆续续的复制到CSDN上来,欢迎大家关注我的 个人博客,以及我的github

本文主要讲解有关 OpenAI gym 中怎么查看每个环境是做什么的,以及状态和动作有哪些可取的值,奖励值是什么样的。然后给出一个完整的代码,最后再说明一下 gym 中的 done 标志的含义。

gym 是 OpenAI 针对强化学习推出的诸多环境的集合,我们可以直接在这些环境上使用各种强化学习算法来训练我们模型,这样我们就可以专注于强化学习算法本身而不是编写环境了。至于 gym 的安装过程,我就不再说了,网上的教程已经非常多了。值得一提的是,目前 gym 已经基本支持 windows 系统了。

对于一个 gym 中的环境,我们怎么查看这个环境要求你做什么、状态和动作是什么样的,以及奖励是什么呢?这一点 gym 并不是十分友好,我在其官网上没有找到明确的说明。这个问题可以通过在 github 上 gym 对应的仓库来找到说明。

首先在 github 上搜索 “openai/gym”,然后选择 star 数最高的那个仓库,然后点击 “Wiki” 就可以在右边看到各种 gym 中的环境名称了,点击想要查看的环境名称就得到了有关该环境的相应介绍。如下图所示:

gym

要是嫌麻烦,也可以直接点击以下链接查看 Gym


除了上述所说的方式,还可以用代码的方式来查看环境的某些属性。在 gym 中的环境主要可以分为两类,一类是动作是连续的,另一类是动作是离散的。在某些地方这两者会有轻微的差异,这一部分还是直接看代码和注释吧。

import gym

env=gym.make("MountainCar-v0") #创建对应的游戏环境
env.seed(1) #可选,设置随机数,以便让过程重现
env=env.unwrapped #可选,为环境增加限制,对训练有利

#----------------------动作空间和状态空间---------------------#
print(env.action_space) #动作空间,输出的内容看不懂
print(env.action_space.n) #当动作是离散的时,用该方法获取有多少个动作
# env.observation_space.shape[0] #当动作是连续的时,用该方法获取动作由几个数来表示
print(env.action_space.low) #动作的最小值
print(env.action_space.high) #动作的最大值
print(env.action_space.sample()) #从动作空间中随机选取一个动作
# 同理,还有 env.observation_space,也具有同样的属性和方法(.low和.high方法除外)
#-------------------------------------------------------------#

for episode in range(100): #每个回合
    s=env.reset() #重新设置环境,并得到初始状态
    while True: #每个步骤
        env.render() #展示环境
        a=env.action_space.sample() # 智能体随机选择一个动作
        s_,r,done,info=env.step(a) #环境返回执行动作a后的下一个状态、奖励值、是否终止以及其他信息
        if done:
            break

大家可以看到在以上代码 s_,r,done,info=env.step(a) 中有个 done 标志,从字面意思来看 done 是环境是否做完的一个标志。但是实际没这么简单,就拿 MountainCarCartPolePendulum 这三个环境为例。MountainCar 环境中当小车拿到旗子后就算成功的完成任务了,此时 done 为 True。CartPole 环境中当小车和杆子跑出屏幕之外后,就相当于出错了,需要重新开始,这时 done 也为 True。但是对于 Pendulum 环境来说,它的目标是将杆子树立起来,但是该环境中动作可以无限的进行下去,done 永远为 False,所以这种情况下只能用步数达到一定数量来判定是否该结束。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐