python导入库原理_《强化学习:原理与Python实现 》 —1.6.2 使用Gym库

1.6.2 使用Gym库

本节介绍Gym库的使用。

要使用Gym库,当然首先要导入Gym库。导入Gym库的方法显然是:

import gym

在导入Gym库后,可以通过make() 函数来得到环境对象。每一个环境都有一个ID,它是形如“Xxxxx-vd”的Python字符串,如'CartPole-v0'、'Taxi-v2'等。环境名称最后的部分表示版本号,不同版本的环境可能有不同的行为。使用取出环境'CartPole-v0'的代码为:

env = gym.make('CartPole-v0')

想要查看当前Gym库已经注册了哪些环境,可以使用以下代码:

from gym import envs

env_specs = envs.registry.all()

env_ids = [env_spec.id for env_spec in env_specs]

env_ids

每个环境都定义了自己的观测空间和动作空间。环境env的观测空间用env.observa-tion_space表示,动作空间用env.action_space表示。观测空间和动作空间既可以是离散空间(即取值是有限个离散的值),也可以是连续空间(即取值是连续的)。在Gym库中,离散空间一般用gym.spaces.Discrete类表示,连续空间用gym.spaces.Box类表示。例如,环境'MountainCar-v0'的观测空间是Box(2,),表示观测可以用2个float值表示;环境'MountainCar-v0'的动作空间是Dicrete(3),表示动作取值自。对于离散空间,gym.spaces.Discrete类实例的成员n表示有几个可能的取值;对于连续空间,Box类实例的成员low和high表示每个浮点数的取值范围。

接下来使用环境对象env。首先,初始化环境对象env,代码为:

env.reset()

该调用能返回智能体的初始观测,是np.array对象。

环境初始化后就可以使用了。使用环境的核心是使用环境对象的step()方法。step()方法接收智能体的动作作为参数,并返回以下4个参数。

观测(observation):np.array对象,表示观测,和env.reset()返回值的意义相同。

奖励(reward):float类型的值。

本回合结束指示(done):bool类型的数值。Gym库里的实验环境大多都是回合制的。这个返回值可以指示在当前动作后游戏是否结束。如果游戏结束了,可以通过“env.reset()”开始下一回合。

其他信息(info):dict类型的值,含有一些调试信息。不一定要使用这个参数。

env.step() 的参数需要取自动作空间。可以使用以下语句从动作空间中随机选取一个动作:

action = env.action_space.sample()

每次调用env.step() 只会让环境前进一步。所以,env.step()往往放在循环结构里,通过循环调用来完成整个回合。

在env.reset()或env.step()后,可以用以下语句以图形化的方法显示当前环境。

env.render()

使用完环境后,可以使用下列语句关闭环境:

env.close()

注意:如果绘制了实验的图形界面窗口,那么关闭该窗口的最佳方式是调用env.close()。试图直接关闭图形界面窗口可能会导致内存不能释放,甚至会导致死机。

测试智能体在Gym库中某个任务的性能时,学术界一般最关心100个回合的平均回合奖励。至于为什么是100个回合而不是其他回合数(比如128个回合),完全是习惯使然,没有什么特别的原因。对于有些环境,还会指定一个参考的回合奖励值,当连续100个回合的奖励大于指定的值时,就认为这个任务被解决了。但是,并不是所有的任务都指定了这样的值。对于没有指定值的任务,就无所谓任务被解决了或者没有被解决。

你可能感兴趣的:(python导入库原理)