36 人が閲覧(直近 30 日) シミュレーション

MATSimとは?無料の交通シミュレータの導入手順とSUMOとの違い【2026.0対応】

MATSimとは?無料の交通シミュレータの導入手順とSUMOとの違い【2026.0対応】

MATSim(Multi-Agent Transport Simulation)は、都市の住民ひとりひとりをエージェントとして動かし、1日の移動計画を何度も作り直させながら交通量と混雑を再現するオープンソースの交通シミュレータです。GPL v2で公開されているため無料で入手でき、ベルリンや京都といった実都市のモデルも公開データとして揃っています。本体はJavaで書かれており、2026.0はJava 25を要求します。この記事では2026年10月16日時点の最新安定版2026.0を対象に、何ができるソフトなのか、どう導入するのか、公式サンプルを実際に回すとどれくらいの時間とメモリを使い何が出力されるのかを、公式リポジトリの実物と実行ログをもとに整理します。

まとめ:MATSimを触る前に押さえる要点

  • 最新安定版は2026.0(2026年4月10日公開)。2024.0が2024年4月13日、2025.0が2025年4月11日と、直近3年の主要リリースはいずれも4月に公開されています。
  • ライセンスはGPL v2。無料で入手でき商用プロジェクトでも使えますが、MATSimを含む実行形式を第三者へ配布する場合は、対応するソースの提供などGPL v2の配布条件がかかります。
  • Java 25が入っていれば、リリースZIPの本体jarと同梱の依存ライブラリで動きます。ZIPは約113MBで、同梱のmatsim-2026.0.jarはダブルクリックでGUIが開く作りです。Mavenでのビルドは不要です。
  • 公式サンプルのequil(100人・11反復)は約35〜40秒、メモリ0.5GB前後で終わりました。8コアのノートPCでの実測です。ただし同じ出力先へもう一度実行するとエラーで止まります。
  • 2026.0の出力は既定でZstandard圧縮(.zst)です。古い解説にあるoutput_events.xml.gzは出てこないので、読み込む側のツールに合わせてgzipへ戻す設定を覚えておきます。
  • MavenではMaven Centralから取れません。pom.xmlにrepo.matsim.orgを追加する必要があります。
  • 2024.0の設定モジュール改称は、XMLは警告付きで通り、Java APIは通りません。古い解説を写すときの最大の落とし穴です。
  • 国内では京都・関西圏の公開モデルがあり、2024年11月には東京大学で初の国内ユーザー会が開かれています。Pythonだけでは動かず、公式のmatsim-toolsは前後処理用です。

MATSimの位置づけ|個人の活動計画に基づく交通需要・混雑の推定

従来の交通需要予測は、地区間の移動量を集計値として推定する4段階推定法が主流でした。MATSimはこれを個人単位に置き換えます。エージェントは「7時に自宅を出て、8時に職場に着き、18時に帰る」といった1日の活動連鎖(アクティビティチェーン)を持ち、その計画を実行した結果として道路が混み、遅れが出ます。集計値ではなく個人の予定表が入力になるため、時差出勤や特定路線の運休といった、時間帯と個人属性に依存する施策を評価できます。

名前に「マルチエージェント」と付きますが、LLMを複数組み合わせるマルチエージェントとは?仕組み・構成パターンと採用判断を研究データで解説【2026年10月】で扱うAIエージェントとは別物です。MATSimのエージェントは言語モデルではなく、効用関数で採点される移動計画の持ち主です。都市の状態をデータで写し取って施策を試す点ではデジタルツインの設計と発想が重なりますが、再現するのは設備の状態ではなく人の行動選択です。

開発主体とライセンス

MATSimはETH Zurich(スイス連邦工科大学チューリッヒ校)とTU Berlin(ベルリン工科大学)の研究から始まり、現在は2022年9月に設立されたMATSim Associationとコントリビュータによって開発が続いています。ソースはmatsim-org/matsim-libsで公開されており、コードのライセンスはGNU General Public License version 2です。リリースZIPのCOPYINGにGPLの原文が置かれ、各ソースファイルの冒頭にも「version 2 of the License, or (at your option) any later version」と明記されています。

実務上の注意はここです。MATSimを組み込んだシステムを顧客に納品する場合、本体を改変したかどうかにかかわらず、配布物がMATSimに基づく著作物にあたるかを確認し、GPL v2の配布条件を満たす必要があります。GPL v2はバイナリを配布する側に、対応する完全なソースの提供を求めるためです。MATSimのコードを含まない独立したシナリオファイルや解析スクリプトは本体の配布と切り分けて扱えますが、コアに手を入れる前提の案件や、MATSimを組み込んだ業務システムをフルスクラッチ開発で外部に発注する案件では、配布形態と法務確認を要件定義の段階で済ませてください。

MATSim Associationは活動目的のひとつに「Production and selling of commercial licenses」を掲げています。GPL v2の条件を受け入れられない案件では、協会に商用ライセンスを問い合わせる選択肢があります。

MATSimの反復ループ|交通流の実行・採点・再計画

MATSimの中心は3つの処理を繰り返すループです。まずmobsim(交通流シミュレーション)が全エージェントの計画を同時に実行し、道路容量を超えた区間で遅れを発生させます。次にscoringが、各エージェントの1日を効用関数で採点します。活動を行えばプラス、移動時間と遅刻にはマイナスがつきます。最後にreplanningが、設定した重みに従って各エージェントの戦略を確率的に選び、既存計画の選び直しや経路・出発時刻の変更を行って次の反復へ回します。

これを数十回から数百回繰り返すと、これ以上計画を変えても点数が上がらない状態に近づきます。行動を試して報酬で評価し、方策を更新するという構造は強化学習とは?報酬から学ぶ仕組みとQ学習・方策勾配・企業導入の判断を実装目線で解説で扱う枠組みとよく似ていますが、MATSimのreplanningは勾配を使わず、複数の候補計画から確率的に選び直す共進化的な手法である点が異なります。乱数の引き方で結果が振れるため、randomSeedを変えた複数回の実行で幅を見る運用が前提になります。この考え方はモンテカルロ法とは?乱数で解く仕組みと円周率・リスク評価・強化学習での使い方【2026年版】と同じです。

MATSimのインストール|Java 25とリリースZIP・サンプル・Mavenの3通り

公式のインストール案内は、GUIで設定ファイルを編集して回す利用者向けと、Mavenプロジェクトに組み込む開発者向けを用意しています。どれを選んでもJava 25が前提です。リリースZIPのjarをjavapで調べるとクラスファイルのメジャーバージョンは69(Java 25)で、マニフェストにもJava-Version: 25と書かれています。Java 21以前で起動するとUnsupportedClassVersionErrorで止まります。

リリースZIPのjarで動かす|ビルド不要の最短ルート

GitHubの2026.0リリースに置かれたmatsim-2026.0-release.zip(112,966,720バイト)を展開すると、本体のmatsim-2026.0.jar、依存ライブラリ164個(84MB)を収めたlibsフォルダ、examplesフォルダ(equil、siouxfalls、berlinなど31個のシナリオ)が入っています。jarのマニフェストはMain-Class: org.matsim.run.gui.Guiで、同梱のREADME.txtも「Click on matsim-x.y.z.jar」と案内しています。

java -jar matsim-2026.0.jar

これでGUIが開きます。画面を使わずに設定ファイルを指定して回すなら、同じREADMEにある次の形です。

java -cp matsim-2026.0.jar org.matsim.run.RunMatsim examples/equil/config.xml

libsフォルダはjarと同じ階層に置いたままにしてください。マニフェストのClass-Pathがlibs/…を相対参照しているため、jarだけを別の場所へコピーすると起動できません。なお公式のインストールページには「A clickable jar file is no longer provided」という記述も残っていますが、2026.0のリリースZIPには上記のとおりGUI起動用のjarが入っています。

サンプルプロジェクトのビルドとGUI起動

自分のJavaコードで処理を足す予定があるなら、公式サンプルのmatsim-example-projectから始める方が後で困りません。READMEは「The project uses Java 25」と明記しています。Mavenラッパーが同梱されているため、Mavenを別途インストールする必要はありません。

./mvnw clean package

Windowsではmvnw.cmd clean packageを使います。ビルドが終わるとmatsim-example-project-0.0.1-SNAPSHOT.jarが生成されます。こちらのjarは引数なしでは動かず、サブコマンドを渡します。GUIを開くならgui、設定ファイルを直接回すならrun --config <path>、一覧はhelpです。

java -jar matsim-example-project-0.0.1-SNAPSHOT.jar gui

Mavenプロジェクトに組み込む場合のpom.xml

自分のプロジェクトから使う場合は、pom.xmlにMATSim本体の依存を書きます。公式サンプルは親POMにmatsim-allを指定したうえで、コアであるmatsimを依存として宣言しています。親の指定だけでは依存関係に入らない点に注意してください。依存の版を指すmatsim.versionは親POMでは定義されないため、公式サンプルと同じくpropertiesで親の版を参照させます。

<parent>
    <groupId>org.matsim</groupId>
    <artifactId>matsim-all</artifactId>
    <version>2026.0</version>
</parent>

<properties>
    <matsim.version>${parent.version}</matsim.version>
    <maven.compiler.release>25</maven.compiler.release>
</properties>

<dependencies>
    <dependency>
        <groupId>org.matsim</groupId>
        <artifactId>matsim</artifactId>
        <version>${matsim.version}</version>
    </dependency>
</dependencies>

もうひとつの条件が取得先です。org.matsimはMaven Centralに公開されておらず、Maven Centralの検索APIでグループIDを引いても該当は0件です。標準のMaven Centralだけを参照する構成では取得できないため、公式のインストール案内どおり次のリポジトリを追加します。依存解決に失敗したときは、まずここを確認してください。

<repositories>
    <repository>
        <id>matsim</id>
        <url>https://repo.matsim.org/repository/matsim/</url>
    </repository>
</repositories>

このリポジトリには年次の安定版だけでなく、週次のスナップショットも置かれています。GitHub上の開発版のpom.xmlはすでに2027.0-SNAPSHOTです。バージョンを固定せずに参照すると開発中のビルドを掴むため、本番では2026.0のように明示してください。依存名やモジュール構成が版で変わる点への向き合い方は、Spring Bootとは|4.1系の依存名の変更と最小Web APIの作り方で扱った状況と同じです。

Java実行処理の骨格|設定読込からControlerの実行まで

設定ファイルを読み、シナリオを組み立て、Controlerを回す。公式のコード例が示す骨格は次の4行に集約されます。以下は処理の抜粋で、実際にはクラス宣言と必要なimport、mainメソッドを用意し、argsに設定ファイルのパスを渡します。

Config config = ConfigUtils.loadConfig( args );

Scenario scenario = ScenarioUtils.loadScenario( config );

Controler controler = new Controler( scenario );

controler.run();

拡張はこの間に差し込みます。configを読んだ直後に設定値を上書きし、scenarioを作った後にネットワークや人口を書き換え、controlerに対してaddOverridingModule()で独自の解析やルーティングを注入する、という順序です。

equilを2026.0で回した実測|所要時間・メモリと再実行で止まる設定

ここでは、初回実行の所要時間とメモリ使用量に加え、同じ出力先へ再実行した場合の挙動を確認します。リリースZIP同梱のexamples/equilを、2026年10月16日に次の環境で実行しました。

実行環境と所要時間

環境はIntel Core i9-9880H(8コア16スレッド)、メモリ16GB、macOS 26.6.2、Java実行環境はTemurin 25.0.4.1です。/usr/bin/time -lで実時間と最大常駐メモリを測りました。

入力 人数 反復 実時間 最大常駐メモリ
plans100.xml(既定) 100 0〜10 35.4秒/39.9秒 0.56GB/0.49GB
plans2000.xml.gz 2,000 0〜10 43.5秒 0.64GB

人数を20倍にしても実時間は約1.1〜1.2倍にとどまりました。出力のstopwatch.csvで内訳を見ると、どちらも起動から反復0の開始までが約5秒、反復1以降は1回2〜3秒で、この規模では1反復の時間が人数にほとんど左右されていません。今回の環境では、100人・2,000人のequilをいずれも1分以内、最大常駐メモリ0.7GB未満で実行できました。一方で、反復回数が足りているかは人数で変わりました。scorestats.csvのavg_executedは、100人では反復0の64.76から反復10の64.56へほぼ横ばいでしたが、2,000人では119.29から125.52へ上がり続けたまま終わっています。2,000人版は11回では平均スコアが頭打ちになっておらず、lastIterationを増やして推移を見る必要があります。この小規模サンプルの結果だけから、都市規模シナリオに必要な反復回数までは判断できません。

同じ出力先への再実行|停止原因と上書き設定

1回目と同じconfig.xmlのまま2回目を実行すると、終了コード1で止まりました。原因はcontrollerモジュールのoverwriteFilesで、既定値のfailIfDirectoryExistsは出力先に中身があると処理を中止します。ログの根本原因は次の行です。

RuntimeException: The output directory ./output (full path: …) already exists and is not empty!

紛らわしいのは、この行より前にUnsupported class file major version 69という警告と長いスタックトレースが出ることです。Javaのバージョン不一致に見えますが、これは依存ライブラリのGuiceがエラーメッセージの行番号を作ろうとして失敗しているだけで、Java 25で正しく動いています。ログはCaused byの行まで読んでください。選べる値はfailIfDirectoryExists・overwriteExistingFiles・deleteDirectoryIfExistsの3つです。次の設定は、指定した出力ディレクトリを削除して作り直します。保存不要な試行結果に限って使い、結果を残す場合は出力先を実行ごとに変えてください。

<module name="controller">
    <param name="outputDirectory" value="./output" />
    <param name="lastIteration" value="10" />
    <param name="overwriteFiles" value="deleteDirectoryIfExists" />
    <param name="compressionType" value="gzip" />
</module>

出力は.zst圧縮が既定

既定の設定で出力されたのはoutput_events.xml.zst、output_plans.xml.zst、output_network.xml.zstなどZstandard形式のファイルでした。2026年2月10日にマージされた変更「Change default compression to zst」で既定値が切り替わり、2026.0はこの既定で出た最初の安定版です。2025年以前の解説やツールの手順書は.xml.gzを前提に書かれています。

出力のoutput_config.xmlにはcompressionTypeの選択肢としてnone・gzip・lz4・zstが記載されています。上の設定例のようにgzipを指定して再実行すると、出力はoutput_events.xml.gzなどに戻りました。SimWrapperは変更履歴で.zstへの対応を明記しています。それ以外の解析スクリプトや外部ツールへ渡す場合は、読めるかどうかを先に1ファイルで確かめ、読めなければgzipで出し直してください。

入力ファイル3点|config.xml・network.xml・plans.xml

MATSimの入力は、設定と道路と人間の3つに分かれます。config.xmlが全体の設定、network.xmlがリンクとノードで表した道路網、plans.xmlがエージェントごとの1日の予定表です。施設の位置を持つfacilities.xmlや公共交通の時刻表を加える構成もありますが、最小構成はこの3点です。

config.xmlの基本設定|入力パス・反復番号・座標系

リリースZIP同梱のequilシナリオの設定ファイルから、骨格にあたる部分を抜き出します。この抜粋だけでは実行できません。動作確認には同梱の完全版を使ってください。完全版にはDOCTYPE宣言のほか、施設ファイルの指定、活動種別ごとの採点設定や再計画の戦略設定も含まれています。

<config>
    <module name="global">
        <param name="randomSeed" value="4711" />
        <param name="coordinateSystem" value="Atlantis" />
    </module>

    <module name="network">
        <param name="inputNetworkFile" value="network.xml" />
    </module>

    <module name="plans">
        <param name="inputPlansFile" value="plans100.xml" />
    </module>

    <module name="controller">
        <param name="outputDirectory" value="./output" />
        <param name="firstIteration" value="0" />
        <param name="lastIteration" value="10" />
    </module>
</config>

lastIterationは最終反復の番号です。この例は0から10までの計11回を指定しています。京都の10%サンプルモデルでは最終反復番号200、ベルリンの同種のモデルでは最終反復番号500が指定されており、ここが計算時間を直接決める値です。

coordinateSystemは座標参照系の指定です。実在都市を扱うなら、対象地域に合ったメートル単位の直交座標系にそろえる必要があります。京都の公式シナリオはEPSG:32653(WGS 84 / UTM zone 53N)を指定しています。座標系名を書くだけでなく、元データがどの座標系で作られているか、読み込み時に変換が要るかまで確認してください。この対応づけはGISデータとは?形式・座標系・取り込み設計を実装目線で解説【2026年8月時点】で整理しています。

network.xmlとplans.xmlの作り方

道路網は手で書かず、OpenStreetMapから変換するのが一般的です。公式の拡張群contribs/osmには、osm.pbf形式を読み込んでMATSimのネットワークに変換するSupersonicOsmNetworkReaderが含まれています。変換元データの利用条件はOpenStreetMap(OSM)とは?使い方・商用利用の条件・APIを公式ポリシーで解説で確認してください。

難しいのはplans.xmlのほうです。公式のインストール案内でも、開発者が「The main problem is how to obtain the network and in particular the so-called initial demand for your own scenario」と書いています。パーソントリップ調査や携帯電話の位置情報から人口と活動計画を合成する工程が必要で、その工数は既存データの有無と求める精度で大きく変わります。自前で作れない場合の選択肢として、公式ページの「Tools around MATSim」には、任意の地域のシナリオを作る商用サービスCreario、シナリオ編集と実行をまとめた商用アプリのTramolaとMobilityStudioが載っています。

人口サンプル率に応じた道路容量の縮小

都市規模のシナリオは全人口を扱わず、10%や1%のサンプルで回すのが一般的です。このとき見落としやすいのが、道路容量も同じ比率で絞る必要がある点です。人口だけ10分の1にして容量をそのままにすると、道路が空いたままになり渋滞が再現されません。公式の京都モデルもベルリンモデルも、10%サンプルに合わせてqsimモジュールで次の2つを0.1に設定しています。

<module name="qsim">
    <param name="flowCapacityFactor" value="0.1" />
    <param name="storageCapacityFactor" value="0.1" />
</module>

flowCapacityFactorがリンクを通過できる交通量、storageCapacityFactorがリンクに滞留できる車両数にかかります。交通量観測値と突き合わせる場合はcountsモジュールのcountsScaleFactorも決めます。2026.0のソースではこの係数はシミュレーション側の交通量に掛けられ、設定の説明文も「factor by which to re-scale the simulated values」です。10%サンプルを全数の観測値と比べるなら10になります。京都モデルの設定ファイルはこの値を0.1にしているため、公開シナリオの値を写す前に、観測値ファイルがどの尺度で作られているかを確認してください。

出力ディレクトリの読み方

実行するとoutputDirectoryに反復ごとのITERS/it.0〜it.10フォルダと、最終結果のファイル群が出力されます。最初に見るべきはscorestats.csvで、反復ごとの平均スコアが入っています。同じ内容がscorestats.pngとしてグラフでも出力されるので、この画像は収束状況を確認する手がかりになります。平均スコアだけで判断せず、交通量や交通手段分担率の推移、再計画の設定も併せて確認してください。交通手段の割合はmodestats.csv、処理ごとの所要時間はstopwatch.csv、警告とエラーだけを抜き出したログはlogfileWarningsErrors.logに出ます。個々のイベントはoutput_events.xml.zstに時系列で記録され、後述の可視化ツールはこのファイルを読みます。

設定モジュール名の改称|XMLの旧名対応とJava APIの非互換

日本語で読めるMATSimの解説記事には、2023年以前に書かれたものが少なくありません。2024.0で主要なモジュール名が改称されたため、そのまま写すと現行版とは食い違います。公式のequilシナリオを15.0と2024.0で比較すると、変更は次のとおりでした。

15.0まで(2023年4月まで) 2024.0以降(2024年4月から) 担当する処理
controler controller 出力先・反復回数
planCalcScore scoring 効用関数のパラメータ
strategy replanning 計画の作り直し方
planscalcroute routing 経路探索の設定

ここで扱いが分かれます。設定ファイル側は旧名称でも読み込めます。MATSimはConfigAliasesという読み替え表を持っており、設定を読むときに旧名称を現行名へ変換します。2026.0でもcontrolerからcontrollerへの対応は生きています。ただし黙って通るわけではなく、ログに次の形の警告が出ます。

WARN ConfigAliases Config name 'controler' is deprecated, please use 'controller' instead.

一方、Java API側には互換処理がありません。2026.0のConfigクラスにはcontroller()とscoring()はありますが、旧名のcontroler()やplanCalcScore()は残っていません。古い解説のコードを写すとコンパイルエラーになります。

つまり古い記事どおりに進めた場合、設定ファイルは警告を出しながら動き、Javaコードだけがエラーで止まります。設定ファイルが通ったから記述が正しいとは限りません。ログのdeprecated警告を潰しておかないと、次のメジャー更新で読み替えが外れたときに気づけません。新規に書く設定は現行名称に統一し、長期運用する案件ではバージョンを2026.0のように固定して、更新は年次リリースのタイミングで名称・パラメータ・Java API・出力形式の差分をまとめて確認してください。2026.0の.zst既定化のように、設定名は同じでも既定値が変わることがあります。

SUMO・Vissimとの使い分けと、MATSimを選ばない条件

無料の交通シミュレータを探すと、MATSimとEclipse SUMOが並んで出てきます。両者は競合というより担当範囲が違います。SUMOは2026年10月7日に1.28.0のタグが付き、公式のダウンロードページでも最新版として案内されています。

観点 MATSim 2026.0 Eclipse SUMO 1.28.0 PTV Vissim
ライセンス GPL v2 EPL-2.0 商用(有償)
車両挙動 キュー型・簡略 追従・車線変更 追従・車線変更
需要の入力 1日の活動計画 OD・経路 OD・経路
得意な範囲 都市全域・終日 交差点・区間 交差点・区間
実装言語 Java C++(Python API有) 非公開
開発元 MATSim Association DLR PTV Group

MATSimのmobsimは、リンクを自由旅行時間で流れる車両キューと、リンク末尾で流出容量に制限されるバッファで構成されます。車両1台ずつの加減速や車線変更は解いていません。その代わり都市全域の24時間を現実的な時間で回せます。SUMOとVissimは車両追従モデルを持つので、交差点の信号現示や合流部の設計を評価するのに向きます。

この整理から、MATSimを選ばない条件がはっきりします。信号制御や車線増設の効果を、車両ごとの加減速・追従・車線変更まで含めて評価したいなら、MATSimの標準的なキュー型モデルではなくSUMOを選んでください。その粒度の答えはキュー型モデルからは出せません。逆に、通勤時間帯の課金導入や新路線の開業といった、人の行動変容を伴う施策の評価はMATSimの領分です。SUMOにも交通手段や経路を選ぶ機能はありますが、1日の活動計画を採点して更新するMATSimの需要モデルとは仕組みが違い、施策に応じた行動モデルを別途設計する必要があります。

人口と活動計画の合成データを用意できない場合もMATSimは動きません。前述のplans.xmlを作る見通しが立たないまま導入を決めると、ソフトは入ったのに回すものが無い状態になります。移動時間や到達圏を道路網と時刻表から計算するだけなら、行動の反復計算を持たないr5rとは?R5で移動時間マトリクスと到達圏を求めるRパッケージ【2.4.0対応】のような軽い道具で足りる場合もあります。

公開シナリオ|京都・関西圏モデルの入手先と利用条件

自前のデータを揃える前に手触りを確かめたいなら、GitHubのmatsim-scenarios組織に実都市のシナリオが公開されています。国内向けに押さえておきたいのがmatsim-kyotoで、TU BerlinのVSPが提供する京都と関西圏の10%サンプルモデルです。交通量観測値、交通手段分担率、手段別のトリップ距離分布で校正されており、設定ファイルには前述のEPSG:32653とlastIterationが200で入っています。

大容量の入出力ファイルはGitHubではなくTU Berlinの公開SVNに置かれており、svn.vsp.tu-berlin.de配下のmatsim/scenarios/countries/jp/kyoto/から入力と出力の両方を取得できます。READMEの「Simple things (without installing MATSim)」の手順に沿えば、SimWrapperでVSP Public-SVNを開き、jp→kyoto→kyoto-v1.0-10pctと辿ることで、MATSimを導入しないまま京都モデルの結果をダッシュボードで閲覧できます。何を用意すれば動くのかを掴むには、説明を読むよりこの実物を開く方が早いはずです。

ライセンスはシナリオごとに異なる点に注意してください。京都シナリオのプログラムコードはAGPL-3.0で、入力ファイル・出力ファイル・分析データと可視化はCreative Commons表示4.0国際(CC BY 4.0)です。MATSim本体のGPL v2とは別建てなので、成果物を公開する際はそれぞれの条件を確認します。ドイツ国内ではベルリン、ハンブルク、ミュンヘン、デュッセルドルフ、ルール地方、海外ではロサンゼルス、サンフランシスコ、ニューヨーク、サンティアゴ、スウェーデン全土のモデルも公開されています。

日本での利用と学習資料|国内ユーザー会とMATSim Book

国内でも研究と実務の両面で使われ始めています。2024年11月21日には、東京大学のGiancarlo Parady教授の主催で国内初のMATSim User Meeting Japan 2024が開かれ、MATSimの共同創始者Kay W. Axhausen名誉教授が基調講演をしました。発表には、広島大学による東広島のMATSimモデル、京都大学による京都モデルの開発と適用計画、東京大学による群馬での自動運転車の交通・土地利用への影響、i-Transport LabによるNowcast型の活動ベースシミュレーションが並んでいます。それ以前にも、東京大学の研究室がMATSim Bookに東京圏のシミュレーション分析を1章(第92章)寄稿しています(東京大学 都市交通研究室の紹介)。

学習の正本はMATSim Bookです。2016年版は600ページを超え、基本機能の使い方、必要なデータと拡張、理論的背景、世界40件以上の適用事例の4部で構成されており、CC BY 4.0でPDFを無料で読めます。ただし書籍本体は2016年の状態のままで、設定名は旧名称です。現行版で手を動かすときは、TU Berlinの授業(毎年4〜7月)に合わせて主要章を更新しているUser Guideを使い、書籍は理論と事例を調べるときに引く使い分けが効率的です。

PythonとMATSim|matsim-toolsは前後処理専用

「Pythonで交通シミュレーション」を探してMATSimに辿り着く人は多いのですが、本体はJavaです。公式が提供するPythonパッケージmatsim-toolsは、PyPI上の最新版が2026年3月3日公開の0.0.22で、開発はmatsim-vsp/matsim-python-toolsで行われています。ライセンスはGPLv3です。

pip install matsim-tools

公式のパッケージ説明が挙げる用途は、MATSimのネットワーク・イベント・plansファイルの読み書き、JSONやProtobuf形式のイベント読み取り、入力XMLの書き出し、シナリオの自動キャリブレーションです。pandasやgeopandasと組み合わせて集計するための道具であり、シミュレーションエンジンをPythonへ移植したものではありません。実行はJava、前処理と分析はPythonという分担になります。2026.0の既定出力は.zstなので、Python側で読む前提ならcompressionTypeをgzipにしておくと、標準ライブラリのgzipモジュールだけで開けます。Java環境を用意できないのであれば、C++実装でPython APIを持つSUMOを検討する方が現実的です。

結果の可視化|SimWrapperとVIAの選び方

MATSimの出力はXMLとCSVなので、そのままでは移動の様子が分かりません。可視化には主に2つの選択肢があります。

SimWrapperはブラウザで動く可視化ツールで、TU BerlinのVSP(交通システム計画・交通テレマティクス研究室)が開発し、GPL-3.0で公開されています。Google ChromeまたはMicrosoft Edgeでsimwrapper.appを開き、ローカルフォルダへのアクセスを許可すれば、追加のインストールなしで出力を表示できます。SafariとFirefoxはこの直接アクセスに対応しておらず、小さなローカルファイルサーバーを立てる必要があるため、公式もChromeを推奨しています。.zst形式にも対応しているので、2026.0の既定出力をそのまま読めます。

VIAはSimunto GmbHが提供するデスクトップアプリで、Windows・macOS・Linuxに対応します。無料ライセンスも用意されていますが、公式のライセンス案内には「Limited to 500 agents」「Limited to non-commercial use」「License valid for 6 months」と明記されています。都市規模のシナリオは数十万エージェントを扱うため、無料枠は事実上、動作確認用と考えてください。継続利用するなら教育機関向けまたは商用のライセンスが必要です。まずSimWrapperで済ませ、足りない機能が具体化してからVIAを検討する順序を勧めます。

よくある質問

MATSimは無料で使えますか?商用利用は可能ですか?

無料で使えます。GPL v2で公開されており、利用料はかかりません。商用プロジェクトでの利用も可能です。ただしMATSimを含む実行形式を第三者へ配布する場合は、改変の有無にかかわらず、対応する完全なソースを提供するなどGPL v2の配布条件を満たす必要があります。MATSimのコードを含まない独立したシナリオや解析スクリプトを作るだけであれば、本体のソース提供義務は生じません。

MATSimをPythonだけで動かせますか?

動かせません。シミュレーションエンジンはJavaで実装されており、2026.0の実行にはJava 25以上が必要です。公式のmatsim-tools(PyPI、最新0.0.22)は入出力ファイルをPythonで読み書きするための補助ライブラリで、エンジンの代替ではありません。Pythonを主軸にしたいのであれば、Python APIを持つEclipse SUMOの方が適しています。

MATSimとSUMOはどちらを選べばよいですか?

評価したい対象で決まります。都市全域の交通需要や、料金施策・新路線による行動変容を見るならMATSimです。交差点の信号制御や車線構成のように、車両1台ずつの加減速と車線変更が結果を左右する対象ならSUMOを選んでください。MATSimのmobsimはキュー型で追従挙動を解いていないため、その粒度の分析には答えられません。

公式サイトとダウンロード先はどこですか?

公式サイトはmatsim.orgで、インストール手順はmatsim.org/installにあります。すぐ動かせるリリースZIPはGitHubのmatsim-org/matsim-libsのReleases、自分のコードを足すためのサンプルはmatsim-org/matsim-example-project、公開シナリオはmatsim-scenarios組織です。Mavenの成果物はMaven Centralではなくrepo.matsim.orgに置かれています。

古い記事のconfig.xmlをそのまま使ってよいですか?

読み込みは通りますが、そのままにはしないでください。2024.0でcontrolerはcontrollerへ、planCalcScoreはscoringへ、strategyはreplanningへ改称されました。旧名称はConfigAliasesによって読み替えられるため2026.0でも動きますが、ログに非推奨の警告が出ます。Java API側には互換処理がなく旧メソッドは削除済みなので、コードは書き換えが必要です。出力ファイル名も2026.0から既定で.zstになっているため、古い手順の.xml.gzを前提にした後処理はcompressionTypeで合わせてください。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

資料請求

RELATED POSTS 関連記事

目次