AsaHP
AI・深層学習

Highway Planning サンプル - 交通流の強化学習ツール highway-env

強化学習におけるOpenAI Gymを拡張させたツールに、交通流を扱うhighway-envがある。その解説ページにあるHighway Planningのサンプルについて説明する。

以下は2023/2時点での情報である。

計算手法と前処理

このサンプルでは決定論的モデルの楽観的計画(OPD)という手法を使っている。

エージェントはeleurent/rl-agentsを使っている。highway-envとrl-agentsの最新版はGymの最新版を要求するが、残念ながら2023/1現在のColabでは動画が出力されない。そのため2023/1のColabに最初からあるGymの0.25.2バージョンを使うように調整している。

Gymの最新版を使いColabで動画が出る場合もあるのだが、条件が良く分からない。将来的にGymのバージョンが変わる事を考えても、バージョンを固定した方が扱いやすいと思われる。

OPDは確率モデルでなく決定論であり、学習をせず動作実行時に計画して処理を決めている。2008年の比較的古い論文である。学習の処理時間はないが、動作実行時に処理時間が掛かる。「最も有望な状態を最初に探索する楽観的な木の探索」であり、一様検索より計算資源を減らせるらしい。論文は「Optimistic planning of deterministic systems」で検索するか、このPDFリンクから取得できる。

# Environment
##### 修正点、バージョン調整、最新版だとColabで動画が出ない、既存のgym0.25.2を使う
!pip install 'gym==0.25.2'
!pip install 'highway_env==1.6.0'
!pip install git+https://github.com/eleurent/rl-agents.git@afd12de017

#!pip install highway-env
import gym
import highway_env

# Agent
#!pip install git+https://github.com/eleurent/rl-agents#egg=rl-agents
from rl_agents.agents.common.factory import agent_factory

# Visualisation
import sys
from tqdm.notebook import trange
!pip install gym pyvirtualdisplay
!apt-get install -y xvfb python-opengl ffmpeg
!git clone https://github.com/eleurent/highway-env.git
sys.path.insert(0, './highway-env/scripts/')
from utils import record_videos, show_videos

上記の「修正点」は私がソースを修正した箇所である。このページに書いてあるソースは、上から順に実行すると2023/1時点のColabで動作するようになっている。

実行結果

以下の処理で実行結果を動画で確認できる。実行するごとに結果は変わる。環境は流れの速い高速道路での車線変更である。衝突が起こる事はなさそうである。1回の計算に43秒程度の時間が掛かる。動画の長さは15秒程度なので、あまり計算が間に合ってない。

Gymのバージョンを変えた関係で、一部の処理に修正が必要になる。

# Make environment
env = gym.make("highway-fast-v0")
env = record_videos(env)
#(obs, info), done = env.reset(), False 
(obs), done = env.reset(), False #### 修正点、パラメータ削除、古いバージョン

# Make agent
agent_config = {
    "__class__": "",
    "env_preprocessors": [{"method":"simplify"}],
    "budget": 50,
    "gamma": 0.7,
}
agent = agent_factory(env, agent_config)

# Run episode
for step in trange(env.unwrapped.config["duration"], desc="Running..."):
    action = agent.act(obs)
    #obs, reward, done, truncated, info = env.step(action)
    obs, reward, done,  info = env.step(action) #### 修正点、パラメータ削除
    
env.close()
show_videos()

目次

背景と概要

Getting Started

SB3 DQN サンプル

Highway Planning サンプル

Parking HER サンプル

Social Attention DQN サンプル

利用論文

AI・深層学習