OpenAI Gym
1 安装
$ pip install gym #minimal install
or
$ pip install gym[all] #full install, fetch gym as a package
安装成功后即可跑一下简单的demo看看:
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
就会出现一个这样的窗口,agent 操作手推车保持杆的平衡。代码中采用的是随机的 action,性能显然较差。
2 Observations
如果想要针对 state 做出最优的 action,我们需要先知道 agent 所观测到的东西是什么。
step()\text{step()}step() 函数会返回四个值:
- observation(object)\text{observation(object)}observation(object):object 是基于不同的环境的,代表的是 agent 对环境的观测。
- reward(float)\text{reward(float)}reward(float):前一个 action 所获得的 reward。不同环境给出的 reward 不相同,但我们的目标都是要最大化 reward。
- done(boolean)\text{done(boolean)}done(boolean):是否 reset()\text{reset()}reset() 并且重新进入环境。大多数任务被视为一个个 episode,而当 done = True\text{done = True}done = True 时,意味着 episode 的结束。
- info(dict)\text{info(dict)}info(dict):对调试有帮助的诊断信息。它有时对学习很有用(例如,它可能包含环境最后状态变化背后的原始概率)。但是,agent 不允许将此用于学习。
根据 step()\text{step()}step() 函数,即完成了一次 “agent-environment” 的循环。
import gym
env = gym.make('CartPole-v0')
## 进行20个episode
for i_episode in range(20):
observation = env.reset()
for t in range(100):
env.render()
print(observation)
##从状态空间中进行采样,随机action
action = env.action_space.sample()
observation, reward, done, info = env.step(action)
##看看第几步终止
if done:
print("Episode finished after {} timesteps".format(t+1))
break
env.close()
下图是最后一个 episode 的过程。
可以看到,最后一个 episode 运行了19步。
3 Spaces
在上面的例子中,我们一直在从环境的动作空间中采样随机动作。但这些行为究竟是什么?每个环境都带有一个 action space\text{action space}action space 和 observation space\text{observation space}observation space。这些类型都是 Space\text{Space}Space,它们描述了有效操作和观察的格式:
我们打印一下:
import gym
env = gym.make('CartPole-v0')
print(env.action_space)
print(env.observation_space)
其中,Discrete\text{Discrete}Discrete 空间为固定范围的非负整数,这里即为 0 和 1。Box\text{Box}Box 空间是一个 n 维向量,因此这里有效的观察是一个4维向量。