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()
目次
Highway Planning サンプル