Skip to content

Latest commit

 

History

History
242 lines (182 loc) · 12.6 KB

README.jp.md

File metadata and controls

242 lines (182 loc) · 12.6 KB

UXsim: Python製のマクロ・メソ交通流シミュレータ

PyPi Conda Version Demo in Colab codecov arXiv Static Badge

UXsimはPython製のオープンソース・フリーなマクロ・メソ交通流シミュレータです. これは,都市規模のような大局的な自動車交通とその渋滞を再現する交通シミュレーションであり,交通工学分野で標準的なモデルにより道路ネットワークの動的交通流を計算するものです. UXsimは単純,軽量,柔軟であるため,研究・教育上の目的に適することを意図していますが,それ以外の目的にも自由に使用可能です.

興味がある方は以下をご覧ください:

主な機能・特徴

  • 標準的なネットワーク交通流モデルの,単純かつ容易に使えるPython実装
  • マクロ交通流シミュレーション:30秒で都市の6万台の車両をシミュレート.あるいは,設定次第で40秒で都市圏の100万台のシミュレーションも可能
  • 動的交通量配分:ネットワーク構造と時間帯別OD需要が与えられているときに,動的なネットワーク交通流を計算
  • 学術/専門的交通研究で一般的に使用される理論的に有効なモデル
  • タクシー/シェアモビリティ,信号制御,道路課金などの交通制御/管理スキームの実装
  • シミュレーション結果の基本的な分析とpandas.DataFrame,CSVへのエクスポート
  • Matplotlibを使用したシミュレーション結果の可視化.インタラクティブなGUIも利用可能
  • 純Pythonであることを活かした高度なカスタマイズ性.PyTorchを用いた深層強化学習による交通制御など,他のPythonベースのフレームワークとも直接連携可能
  • メインコードのuxsim.pyは約1800行のコードのみ.ユーザーが簡単に理解しカスタマイズできます

計算例

大規模ネットワーク

10km x 10kmのグリッドネットワーク内を2時間で約6万台が通行する様子.計算時間は通常のデスクトップPCで約30秒.

リンク交通状況(リンクの線が太いと車両台数が多く,色が暗いと速度が遅い)と一部車両の軌跡:

上記ネットワークのある回廊上の車両軌跡図:

深層強化学習(AI)による信号制御

信号制御をPyTorchの深層強化学習によって効率化する例です. 下の左図は単純な固定時間の信号の場合で,交通需要がネットワーク容量を上回りグリッドロックが生じています. 右図は深層強化学習を適用した場合で,需要レベルが同じであるのに関わらず効率的な交通が実現しています. このコードはJupyter Notebookにもまとめてあります.

シミュレーション結果可視化GUI

resultGUIviewer_cut.mp4

インストール

pipを使用

最も簡単な方法は,PyPIからpipを使用してインストールすることです.

pip install uxsim

condaを使用

conda-forgeチャンネルからcondaを使用してインストールすることもできます:

conda install uxsim

詳細についてはこちらをご覧ください.

上級ユーザー向けの代替方法(クリックして表示)

カスタム設定でpipを使用

GitHubバージョンをインストールするには,pipも使用できます:

pip install -U -e git+https://github.com/toruseo/uxsim@main#egg=uxsim

または,このリポジトリの他の(開発中の)ブランチや自分のフォークでも:

pip install -U -e git+https://github.com/YOUR_FORK/uxsim@YOUR_BRANCH#egg=uxsim

手動インストール

このGithubリポジトリからuxsimディレクトリをダウンロードするか,最新リリースからダウンロードして,以下のようにローカルディレクトリに配置します:

your_project_directory/
├── uxsim/ 	# uxsimディレクトリ
│ ├── uxsim.py 	# UXsimのメインコード.必要に応じてカスタマイズ可能
│ └── ... 	# uxsim内の他のファイルやディレクトリ
├── your_simulation_code.py 		# 自作コード(必要なら)
├── your_simulation_notebook.ipynb 	# 自作Jupyterノートブック(必要なら)
├── ... 	# 必要に応じて他のファイルも置ける

この方法で,UXsimを自分の好みに合わせて柔軟にカスタマイズできます.

使用法

単純な例として,Y字型の合流ネットワークのシミュレーションシナリオを以下に示します:

from uxsim import *

# シミュレーション本体の定義
# 単位は全て秒とメートル
W = World(
    name="",    # シナリオ名
    deltan=5,   # 車両集計単位
    tmax=1200,  # シミュレーション時間
    print_mode=1, save_mode=1, show_mode=0,    # オプション
    random_seed=0    # ランダムシード
)

# シナリオ定義
## ノードの作成
W.addNode(name="orig1", x=0, y=0)
W.addNode("orig2", 0, 2)
W.addNode("merge", 1, 1)
W.addNode("dest", 2, 1)
## ノード間のリンクの作成
W.addLink(name="link1", start_node="orig1", end_node="merge",
          length=1000, free_flow_speed=20, number_of_lanes=1)
W.addLink("link2", "orig2", "merge", length=1000, free_flow_speed=20, number_of_lanes=1)
W.addLink("link3", "merge", "dest", length=1000, free_flow_speed=20, number_of_lanes=1)
## ノード間のOD交通需要の作成
W.adddemand(orig="orig1", dest="dest", t_start=0, t_end=1000, flow=0.45)
W.adddemand("orig2", "dest", 400, 1000, 0.6)

# シミュレーション実行
W.exec_simulation()

# 結果表示
W.analyzer.print_simple_stats()

# ネットワーク交通状態のスナップショット可視化
W.analyzer.network(100, detailed=1, network_font_size=12)
W.analyzer.network(600, detailed=1, network_font_size=12)
W.analyzer.network(800, detailed=1, network_font_size=12)

これは以下の結果を出力します:

simulation setting:
 scenario name:
 simulation duration:    1200 s
 number of vehicles:     810 veh
 total road length:      3000 m
 time discret. width:    5 s
 platoon size:           5 veh
 number of timesteps:    240
 number of platoons:     162
 number of links:        3
 number of nodes:        4
 setup time:             0.00 s
simulating...
      time| # of vehicles| ave speed| computation time
       0 s|        0 vehs|   0.0 m/s|     0.00 s
     600 s|      130 vehs|  13.7 m/s|     0.03 s
    1195 s|       75 vehs|  12.3 m/s|     0.06 s
 simulation finished
results:
 average speed:  11.6 m/s
 number of completed trips:      735 / 810
 average travel time of trips:   162.6 s
 average delay of trips:         62.6 s
 delay ratio:                    0.385

さらなる情報

UXsimについてさらに学ぶには,以下をご覧ください:

主なファイル構成

  • uxsimディレクトリ: UXsim本体のパッケージ
    • uxsim/uxsim.py: UXsimのメインコード
  • demos_and_examplesディレクトリ: チュートリアルや使用例
  • datディレクトリ: サンプルシナリオファイル

使用条件・ライセンス

UXsimはMIT Licenseのもとで公開しています. 出典を明記すれば自由に使用できます.

使用された成果を発表される際は,参考文献として以下を引用してください:

UXsimを使用した研究はGithubのwikiページにまとめられています.自由に編集してください.

更新と質問・議論

コード更新のcontributionは大歓迎です! 貢献ガイドラインをご覧ください.

質問や提案がある場合は,IssuesまたはDiscussionsページに投稿してください(言語は英語または日本語).

私(瀬尾亨)は仕事の合間にこのプロジェクトに取り組んでいます. 反応が遅れる可能性があることをご了承ください.

謝辞

UXsimは交通流理論と関連分野の様々な研究成果に基づいています.この分野を進展させてきた研究コミュニティに感謝いたします. 特に,UXsimは以下の研究成果を直接利用しています:

関連リンク