LGSVL 强化学习环境 —— gym-lgsvl

引言

OpenAI gym 是目前非常流行的强化学习算法测试平台。它包含了丰富的仿真环境,其中也有与自动驾驶相关的环境,例如 CarRacing ,但是界面过于简化:

LGSVL 强化学习环境 —— gym-lgsvl_第1张图片
carRacing.png

OpenAI gym 的一个优点是允许用户将自己的环境加入 gym 平台中。例如基于 donkey car 的环境,基于 duckietown 的仿真环境,以及本文介绍的基于 LG simulator 的仿真环境。

参考文献:
https://www.lgsvlsimulator.com/docs/openai-gym/
https://stable-baselines.readthedocs.io/en/master/index.html

平台:

  • Ubuntu 16.04
  • python 3.6 (最好在单独的虚拟环境下,虚拟环境的设置可以参考我们之前的文章。假设后边所有的操作都是在虚拟环境下进行的,因此所有的 pip 安装不需要加 sudo 或者 --user 参数。)

安装 LG simulator python API

  1. 从 这里 下载 LG simulator,目前最新的 release 是 2019.05
  2. 解压文件,进入其中的 Api 文件夹
  3. 用如下命令安装 API
pip install -e .

关于 LG simulator python API 的详细介绍可以参考之前的文章。不过,这里我们只是安装和测试强化学习环境,暂时还不需要自己用 LG API 编写程序。

安装必要的 python package

pip  install  gym  numpy  opencv-python 

pip install tensorflow  # 如果用 GPU 训练,可以替换为 tensorflow-gpu

安装 lgsvl-gym package

git clone https://github.com/lgsvl/gym-lgsvl.git

cd gym-lgsvl/

pip install -e .

安装 stable-baselines

在 LGSVL 官网上采用了 OpenAI 的 baselines 通过命令行的形式测试了仿真环境,即

python -m baselines.run --alg=a2c --env=gym_lgsvl:lgsvl-v0 --num_timesteps=1e5

我们这里用 OpenAI baselines 的改进版本—— Stable baselines,通过 python 程序与 lgsvl-gym 仿真环境互动,测试其效果。用如下命令安装 Stable baselines

sudo apt-get update 

sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev

pip install stable-baselines

至此,所有的安装流程结束。

测试

下边用一个简单的程序测试一下能否与 lgsvl-gym 交互。
程序内容如下:

import gym
import numpy as np

from stable_baselines.sac.policies import MlpPolicy
from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines import SAC

env = gym.make('gym_lgsvl:lgsvl-v0')
env = DummyVecEnv([lambda: env])

model = SAC(MlpPolicy, env, verbose=1)
model.learn(total_timesteps=50000, log_interval=10)
model.save("sac_lgsvl")

obs = env.reset()
while True:
    action, _states = model.predict(obs)
    obs, rewards, dones, info = env.step(action)
    env.render()

先确保 LG simulator 进入了主界面(即选择了分辨率和显示效果之后进入的那个界面),然后执行程序,如果一切顺利,simulator 将进入仿真环境,python 程序开始执行强化学习:


LGSVL 强化学习环境 —— gym-lgsvl_第2张图片
lg_rl.png

LG simulator 比 OpenAI gym 中自带的 CarRacing 环境更加真实,同时对系统配置的要求更高。我们简单测试了一下,在配置为 128G 内存, 2× Nvidia GTX 1080 GPU,Xeon Silver 4114 CPU @ 2.20GHz × 40 的平台上训练非常吃力,画面很不流畅。我们只能等以后升级了硬件再深入研究一下这个强化学习环境了。

LG 强化学习仿真环境的关键设置可以在这里查阅。

环境的 reward 为车辆在与其他车辆或障碍物碰撞之前行驶的距离:

  def _calculate_reward(self, mult = 1.0):
    """
    Reward is calculated based on distance travelled.
    """
    self.reward += mult * self._distance_travelled()

一旦发生碰撞,之前累加的 reward 减去 50, 并结束本次 episode

  def _on_collision(self, agent1, agent2, contact):
    """
    Collision callback -- results in a negative reward.
    """
    self.reward -= 50
    self.done = True
    name1 = self.vehicles[agent1]
    name2 = self.vehicles[agent2] if agent2 is not None else "OBSTACLE"
    print("{} collided with {} at {}".format(name1, name2, contact))

你可能感兴趣的:(LGSVL 强化学习环境 —— gym-lgsvl)