MATSim(Multi-Agent Transport Simulation)は、都市の住民ひとりひとりをエージェントとして動かし、1日の移動計画を何度も作り直させながら交通量と混雑を再現するオープンソースの交通シミュレータです。GPL v2で公開されているため無料で入手でき、ベルリンや京都といった実都市のモデルが公開データとして揃っています。一方で本体はJavaで書かれており、Maven Centralにも置かれていないため、最初の1回を動かすところでつまずきやすいソフトでもあります。この記事では2026年9月10日時点の最新安定版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の配布条件がかかります。
- 2026.0はJava 25が必要です。公式のサンプルプロジェクトのREADMEにも「The project uses Java 25」と明記されており、Java 17や21のままではビルドが通りません。
- MATSimはMaven Centralに公開されていません。Maven Centralだけを参照する構成では依存を取得できず、
pom.xmlにrepo.matsim.orgを追加する必要があります。 - 2024.0で
config.xmlのモジュール名が改称されましたが、旧名称は読み替えられます。XMLは警告付きで読み込める一方、Java APIの旧メソッドは削除済みでコンパイルが通りません。この非対称が古い解説を追うときの落とし穴です。 - Pythonだけでは動きません。公式の
matsim-toolsは入出力ファイルを読み書きする前後処理用で、シミュレーション本体の代替にはなりません。 - 国内では京都・関西圏の公開モデルがあります。公式のシナリオ集に10%サンプルの校正済みモデルが置かれており、インストール前に結果だけブラウザで確認できます。
MATSimの位置づけ|個人の活動計画に基づく交通需要・混雑の推定
従来の交通需要予測は、地区間の移動量を集計値として推定する4段階推定法が主流でした。MATSimはこれを個人単位に置き換えます。エージェントは「7時に自宅を出て、8時に職場に着き、18時に帰る」といった1日の活動連鎖(アクティビティチェーン)を持ち、その計画を実行した結果として道路が混み、遅れが出ます。集計値ではなく個人の予定表が入力になるため、時差出勤や特定路線の運休といった、時間帯と個人属性に依存する施策を評価できます。
都市の状態をデータで写し取って施策を試す点では、いわゆるデジタルツインの設計と発想が重なります。違いは、MATSimが再現するのが設備の状態ではなく人の行動選択である点です。
開発主体とライセンス
MATSimはETH Zurich(スイス連邦工科大学チューリッヒ校)とTU Berlin(ベルリン工科大学)の研究から始まり、現在は2022年9月に設立されたMATSim Associationとコントリビュータによって開発が続いています。ソースはmatsim-org/matsim-libsで公開されており、コードのライセンスはGNU General Public License version 2です。matsimモジュール配下のCOPYINGにGPLの原文が置かれ、各ソースファイルの冒頭にも「version 2 of the License, or (at your option) any later version」と明記されています。
実務上の注意はここです。MATSimを組み込んだシステムを顧客に納品する場合、本体を改変したかどうかにかかわらず、配布物がMATSimに基づく著作物にあたるかを確認し、GPL v2の配布条件を満たす必要があります。GPL v2はバイナリを配布する側に、対応する完全なソースの提供を求めるためです。MATSimのコードを含まない独立したシナリオファイルや解析スクリプトは本体の配布と切り分けて扱えますが、コアに手を入れる前提の案件では法務確認を先に済ませてください。
なおMATSim Associationは活動目的のひとつに商用ライセンスの作成と販売を掲げています。GPL v2の条件を受け入れられない案件では、協会に商用ライセンスを問い合わせる選択肢があります。無料のオープンソース版しか道がないわけではありません。
MATSimの反復ループ|交通流の実行・採点・再計画
MATSimの中心は3つの処理を繰り返すループです。まずmobsim(交通流シミュレーション)が全エージェントの計画を同時に実行し、道路容量を超えた区間で遅れを発生させます。次にscoringが、各エージェントの1日を効用関数で採点します。活動を行えばプラス、移動時間と遅刻にはマイナスがつきます。最後にreplanningが、設定した重みに従って各エージェントの戦略を確率的に選び、既存計画の選び直しや経路・出発時刻の変更を行って次の反復へ回します。
これを数十回から数百回繰り返すと、これ以上計画を変えても点数が上がらない状態に近づきます。行動を試して報酬で評価し、方策を更新するという構造は強化学習とは?報酬から学ぶ仕組みとQ学習・方策勾配・企業導入の判断を実装目線で解説で扱う枠組みとよく似ていますが、MATSimのreplanningは勾配を使わず、複数の候補計画から確率的に選び直す共進化的な手法である点が異なります。乱数の引き方で結果が振れるため、randomSeedを変えた複数回の実行で幅を見る運用が前提になります。この考え方はモンテカルロ法とは?乱数で解く仕組みと円周率・リスク評価・強化学習での使い方【2026年版】と同じです。
MATSimの導入手順|Java 25とMavenリポジトリの設定
公式のインストール案内は、プログラムを書かない利用者向けのGUIと、Mavenプロジェクトに組み込む開発者向けの2通りを用意しています。どちらを選んでも、Javaのバージョンと依存の取得先という2つの条件は共通です。
GUIの起動|サンプルのビルドとguiコマンド
最短ルートは公式サンプルのmatsim-example-projectを取得し、プロジェクトのルートで次を実行してjarを作る方法です。Mavenラッパーが同梱されているため、Mavenを別途インストールする必要はありません。
./mvnw clean package
Windowsではmvnw.cmd clean packageを使います。ビルドが終わるとmatsim-example-project-0.0.1-SNAPSHOT.jarが生成されます。このjarは引数なしでは動かず、サブコマンドを渡す必要があります。GUIを開くならguiです。
java -jar matsim-example-project-0.0.1-SNAPSHOT.jar gui
設定ファイルを直接指定して回すならrun --config <path>、使えるコマンドの一覧はhelpで確認できます。ここでUnsupportedClassVersionErrorが出たら、Javaのバージョン不足です。2026.0系はJava 25でコンパイルされているため、実行環境も25以上が必要になります。
Mavenプロジェクトに組み込む場合のpom.xml
自分のプロジェクトから使う場合は、pom.xmlにMATSim本体の依存を書きます。公式サンプルは親POMにmatsim-allを指定したうえで、コアであるmatsimを依存として宣言しています。親の指定だけでは依存関係に入らない点に注意してください。
<parent>
<groupId>org.matsim</groupId>
<artifactId>matsim-all</artifactId>
<version>2026.0</version>
</parent>
<properties>
<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>
このリポジトリには年次の安定版だけでなく、週次のスナップショットやプルリクエスト単位のビルドも置かれています。maven-metadata.xmlのlatestが2027.0-2026w37のような週次版を指すため、バージョンを固定せずに参照すると開発中のビルドを掴みます。本番では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()で独自の解析やルーティングを注入する、という順序です。
入力ファイル3点|config.xml・network.xml・plans.xml
MATSimの入力は、設定と道路と人間の3つに分かれます。config.xmlが全体の設定、network.xmlがリンクとノードで表した道路網、plans.xmlがエージェントごとの1日の予定表です。施設の位置を持つfacilities.xmlや公共交通の時刻表を加える構成もありますが、最小構成はこの3点です。
config.xmlの実物
公式の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月時点】で整理しています。
人口サンプル率と道路容量をそろえる
都市規模のシナリオは全人口を扱わず、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も同じ値にそろえます。
出力ディレクトリの読み方
実行するとoutputDirectoryに反復ごとのフォルダと、最終結果のファイル群が出力されます。最初に見るべきはscorestats.csvで、反復回数に対する平均スコアの推移が入っています。同じ内容がscorestats.pngとしてグラフでも出力されるので、収束したかどうかはこの画像で判断できます。曲線が右肩上がりのまま終わっていれば反復不足です。個々のイベントはoutput_events.xml.gzに時系列で記録され、後述の可視化ツールはこのファイルを読みます。
設定モジュール名の改称|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の差分もあわせて確認する運用が安全です。
SUMO・Vissimとの使い分けと、MATSimを選ばない条件
無料の交通シミュレータを探すと、MATSimとEclipse SUMOが並んで出てきます。両者は競合というより担当範囲が違います。
| 観点 | MATSim 2026.0 | Eclipse SUMO 1.27.1 | 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を作る工程が必要で、この整備にかかる工数は、既存の人口・活動データの有無と求める精度によって大きく変わります。ソフトを導入する前に、入力データの入手可否を先に確認してください。
公開シナリオ|京都・関西圏のモデルがある
自前のデータを揃える前に手触りを確かめたいなら、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/から入力と出力の両方を取得できます。SimWrapperの公開ダッシュボードからは、MATSimを導入しないまま京都モデルの結果を閲覧できます。何を用意すれば動くのかを掴むには、説明を読むよりこの実物を開く方が早いはずです。
ライセンスはシナリオごとに異なる点に注意してください。京都シナリオのプログラムコードはAGPL-3.0で、入力ファイル・出力ファイル・分析データと可視化はCreative Commons表示4.0国際(CC BY 4.0)です。MATSim本体のGPL v2とは別建てなので、成果物を公開する際はそれぞれの条件を確認します。ドイツ国内ではベルリン、ハンブルク、ミュンヘン、デュッセルドルフ、ルール地方、海外ではロサンゼルス、サンフランシスコ、ニューヨーク、サンティアゴ、スウェーデン全土のモデルも公開されています。
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へ移植したものではありません。つまりPythonだけで完結させることはできず、実行はJava、前処理と分析はPythonという分担になります。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を推奨しています。
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にあります。ソースコードはGitHubのmatsim-org/matsim-libs、すぐ動かせるサンプルは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側には互換処理がなく旧メソッドは削除済みなので、コードは書き換えが必要です。設定ファイルも現行名称へそろえておくのが安全です。