Getting Started - 交通流の強化学習ツール highway-env
強化学習におけるOpenAI Gymを拡張させたツールに、交通流を扱うhighway-envがある。その解説ページにあるGetting Startedについて説明する。
以下は2023/2時点での情報である。
取り合えずGoogle Colabで動かす
Getting Startedとあるので簡単に動きそうに見えるが、残念ながら研究用ツールなのでそう簡単ではない。Google Colabで動かす場合、最初にツールのインストール作業が必要である。
##### 修正点、追加 !apt update !apt install xvfb !pip install pyvirtualdisplay !pip install highway-env !pip install gym-notebook-wrapper
上記の「修正点」は私がソースを修正した箇所である。このページに書いてあるソースは、上から順に実行すると2023/1時点のColabで動作するようになっている。
次に前処理を行う。
##### 修正点、追加 import highway_env from IPython import display from pyvirtualdisplay import Display import matplotlib.pyplot as plt d = Display() d.start()
最後にGetting Startedのソースを実行すると、車線の画像が表示される。車の位置は毎回変わる。envという変数が強化学習の実行環境を示す。highway-envは環境を作成するツールである。画像・動画作成はOpenAI Gymが持つ機能である。
import gym from matplotlib import pyplot as plt %matplotlib inline env = gym.make('highway-v0') env.reset() for _ in range(3): action = env.action_type.actions_indexes["IDLE"] obs, reward, done, truncated, info = env.step(action) env.render() plt.imshow(env.render(mode="rgb_array")) plt.show()
なお、Training an agentの項は実質的には別のサンプルなので、別のページで説明する
環境の中身を見る
envの中に環境の情報が記載されている。"highway-v0"以外にも様々な環境がhighway-envで構築できる。
import pprint env = gym.make("highway-v0") pprint.pprint(env.config)
{'action': {'type': 'DiscreteMetaAction'}, 'centering_position': [0.3, 0.5], 'collision_reward': -1, 'controlled_vehicles': 1, 'duration': 40, 'ego_spacing': 2, 'high_speed_reward': 0.4, 'initial_lane_id': None, 'lane_change_reward': 0, 'lanes_count': 4, 'manual_control': False, 'normalize_reward': True, 'observation': {'type': 'Kinematics'}, 'offroad_terminal': False, 'offscreen_rendering': False, 'other_vehicles_type': 'highway_env.vehicle.behavior.IDMVehicle', 'policy_frequency': 1, 'real_time_rendering': False, 'render_agent': True, 'reward_speed_range': [20, 30], 'right_lane_reward': 0.1, 'scaling': 5.5, 'screen_height': 150, 'screen_width': 600, 'show_trajectories': False, 'simulation_frequency': 15, 'vehicles_count': 50, 'vehicles_density': 1}
envの内容を変えると環境が変わる。
env.config["lanes_count"] = 2 env.reset() plt.imshow(env.render(mode="rgb_array")) plt.show()
画像の連続表示
OpenAI Gymは動画作成機能を持ち、実行結果の確認として重要である。しかし互換性などの問題でうまく動かない事が多い。一応画像を連続表示すれば動画的になるので、以下にその方法を記載しておく。これはGetting Startedにはない内容である。動画作成した場合と内容は同じだが、動画に比べると見にくく、結果ファイルも扱いにくい。
車の挙動はランダムになるようにしてある。何回か動かすと事故になるのが確認できる。
##### 修正点、追加、ランダム挙動 o = env.reset() img = plt.imshow(env.render('rgb_array')) for _ in range(5): o, r, d, t, i = env.step(env.action_space.sample()) display.clear_output(wait=True) img.set_data(env.render('rgb_array')) plt.axis('off') display.display(plt.gcf()) if d: env.reset()
目次
Getting Started