在进行强化学习时,一个常用的起点是已经熟悉的Cartpole环境。然而,PyBullet提供了更多的环境选择。在本系列文章中,将主要教授一个仿人机器人如何行走,但在开始之前,先来看看其他几个环境:Hopper和Ant。
Hopper环境非常有趣:它代表了一个单独的无身体的腿。目标是训练一个策略,使腿尽可能快地跳跃。让看看这个环境有多复杂。
在Python中,可以这样创建Hopper环境:
import gym
import pybullet_envs
env = gym.make('HopperBulletEnv-v0')
print(env.observation_space)
print(env.action_space)
在这个环境中,观察空间和动作空间都是连续的,并且比CartPole环境更加复杂。观察空间有15个维度,而CartPole只有4个,动作空间有3个维度,而不仅仅是1个。
以下是在Hopper环境中使用SAC算法进行训练的代码:
import pyvirtualdisplay
from pyvirtualdisplay import Display
_display = Display(visible=False, size=(1400, 900))
_ = _display.start()
import ray
from ray import tune
from ray.rllib.agents.sac import SACTrainer
import pybullet_envs
ray.shutdown()
ray.init(ignore_reinit_error=True)
ENV = 'HopperBulletEnv-v0'
from ray.tune.registry import register_env
def make_env(env_config):
import pybullet_envs
return gym.make(ENV)
register_env(ENV, make_env)
TARGET_REWARD = 6000
TRAINER = SACTrainer
tune.run(
TRAINER,
stop={
"episode_reward_mean": TARGET_REWARD},
config={
"env": ENV,
"num_workers": 7,
"num_gpus": 1,
"monitor": True,
"evaluation_num_episodes": 50,
}
)
训练过程在22.6小时后被终止。学习进度如下所示:
(此处应插入学习进度图表)
最后一个进度快照的视频显示,代理已经学会了很好地跳跃。
(此处应插入视频)
蜘蛛有八条腿,昆虫有六条,但PyBullet的Ant代理只有四条。在Ant环境中,必须训练一个简单的四足生物快速移动而不跌倒。
在开始训练之前,让先检查一下环境:
import gym
import pybullet_envs
env = gym.make('AntBulletEnv-v0')
print(env.observation_space)
print(env.action_space)
这代表了维度的另一个提升:观察空间从15增加到28,动作空间从3增加到8。一个四足蚂蚁比一条腿更复杂,这并不奇怪。
因为这也是另一个简单的环境,可以在代码中更改指定的环境,而不需要调整任何学习参数:
ENV = 'AntBulletEnv-v0'
训练过程在25.8小时后被终止。可能会更喜欢将TARGET_REWARD设置为3000。学习进度如下所示:
(此处应插入学习进度图表)
这是最终快照的视频。代理进步很快,似乎没有什么可以学习的了。