MATSimの設定ファイルを最初から見直すための、https://www.matsim.org/files/book/partOne-latest.pdf のブツ読み
2.1 MATSim のセットアップおよび実行
2.1.1 MATSim のセットアップ
MATSim を実行するには、使用する MATSim のバージョンに適合した Java Standard Edition(Java SE)をインストールする必要がある。現時点(2023 年春)では、Java SE 17 が該当する。
GitHub 上には MATSim のサンプルプロジェクトが用意されている。いわゆる example project は、以下の URL で公開されている。
https://github.com/matsim-org/matsim-example-project
このバージョンは、統合開発環境(IDE)(例:Eclipse、IntelliJ)および Java に習熟しており、MATSim を対象にプログラミングを行いたい利用者を対象としている。推奨されるワークフローは次のとおりである。
-
本プロジェクトを GitHub 上で自分のワークスペースに fork する。
-
fork したプロジェクトをローカルの IDE に clone する。
この方法により、例えば GitHub 上で独自の回帰テストを設定することが可能となる。このアプローチでは、MATSim が(いわゆる Maven アーティファクトとして)自動的にダウンロードされ、ソースコードを参照でき、リリース版やスナップショットへの追従も自動的に行われる。一方で、既存の MATSim コードを直接修正することはできないが、多くの場合その必要はない。そうした修正が必要な場合には、開発者に連絡することが推奨されており、可能な限り支援や不足している拡張ポイントの実装が行われる。
第3.2.3節で議論されている内容に沿った多数の Java コード例は、以下の URL で提供されている。
https://github.com/matsim-org/matsim-code-examples
Standalone(スタンドアロン)
「Standalone」版は、IDE(例:Eclipse)や Java に習熟していない利用者を対象としており、config.xml を含む入力ファイルを編集することで MATSim を使用したい場合に適している。基本的なグラフィカルユーザインタフェース(GUI)が提供されている。
利用には、MATSim の公式リリースである zip ファイル(通常 matsim-yy.yy.yy.zip のようにバージョン番号が付与されている)が必要であり、これには実行に必要な一式が含まれている。該当ファイルは以下のページのリンクからダウンロードできる。
http://matsim.org/downloads
ダウンロード後、zip ファイルを解凍すると MATSim のディレクトリツリーが作成される。
Maven
MATSim は Maven プラグインとして使用することもでき、リリース版およびスナップショットの両方が利用可能である。詳細は以下を参照されたい。
http://matsim.org/downloads
ここでも、第3.2.3節で議論された内容に沿った Java プログラムが、GitHub 上のいわゆる code examples プロジェクトとして提供されている。
https://github.com/matsim-org/matsim-code-examples
ソースコードの参照
zip ファイルをダウンロード・インストールせずにコードを確認したい場合は、GitHub 上で MATSim のディレクトリツリーのルートを直接閲覧できる。
https://github.com/matsim-org/matsim-libs
また、Maven を用いて MATSim の example project をインストールしている場合、MATSim のソースコードは IDE 内で自動的に利用可能となる。
その他の方法
http://matsim.org/downloads では、旧バージョンや新バージョンの入手方法、拡張機能の追加方法など、追加の選択肢についても説明されている。
2.1.2 MATSim の実行
JAR ファイルからの GUI 起動
MATSim は、MATSim の Java アーカイブ(JAR)ファイルをダブルクリックすることで起動できる(MATSim バージョン 0.8 以降)。図 2.1 に示されているような最小限の GUI が立ち上がり、以下の手順で MATSim の実行が可能となる。
-
設定
「Choose」ボタンを用いて設定ファイルを選択することで、MATSim の実行設定を行う。 -
実行開始
「Start MATSim」をクリックすることでシミュレーションを開始する。
なお、設定ファイル内で定義されている出力ディレクトリ(後述)がすでに存在する場合、実行を正しく開始するためには事前に削除する必要がある。この操作は「Delete」ボタンによって行える。
実行が正常に終了すると、「Open」ボタンを使って出力ディレクトリをファイルブラウザで開くことができる。
出力された output_network.xml.gz や output_events.xml.gz などのファイルは、Via 可視化ソフトウェアにドラッグ&ドロップすることで読み込むことができ、シミュレーションされた交通状況を再生することが可能である。
¹ Via は商用ソフトウェアであり、https://www.simunto.com/via を参照されたい。MATSim エージェント数が最大 500 までであれば、無償ライセンスが利用可能である。代替手段として On The Fly Visualizer(OTFVis)(第7章)があるが、公式にはサポートされておらず、利用もやや難しい。

図 2.1:MATSim の GUI
IDE からの GUI 実行
また、IDE から MATSimGUI クラスを実行することで、GUI を起動することも可能である。
IDE から GUI を使わない実行
MATSimGUI は内部的に RunMatsim を呼び出している。したがって、RunMatsim クラスを直接実行することもできる。この場合、パス名の設定は多少煩雑になるが、長期的にはこちらの方が便利である。
2.1.3 MATSim の設定
MATSim は config ファイルによって設定される。config ファイルは、利用者と MATSim を結びつける役割を果たし、シミュレーションの挙動に影響を与える各種設定項目の一覧を含んでいる。
config ファイルの構造は次のとおりである。
-
最上位階層 には、設定グループ が存在する。これらは config ファイル内では 「modules」 と呼ばれている。
例:<module name="network"> ...
または<module name="controller"> ... -
各 config グループの内部 には、以下の要素を含めることができる。
-
キーと値のペア
例:<param name="firstIteration" value="0" /> -
パラメータセット
例<parameterset type="activityParams"> <param name="activityType" value="home"/> <param name="typicalDuration" value="12:00:00" /> ... </parameterset>
-
パラメータセットは、同じ種類のパラメータが複数のグループとして存在する場合に用いられるのが一般的である。例えば、アクティビティに関するパラメータは複数セット定義されている。

図 2.2:MATSim の GUI ツール
利用可能なパラメータの一覧や有効なパラメータ値は、時間の経過とともに変化し続ける。使用しているバージョンで利用可能なすべての設定項目を確認するには、MATSim GUI の 「Create Default config.xml」 ツールを実行するとよい(図 2.2 参照)。²
この操作により、新しい config ファイルが作成され、利用可能なすべてのパラメータ、そのデフォルト値、さらに多くの場合は説明用コメントが含まれるため、どのような設定項目が存在するのかを把握しやすくなる。
特定の設定を使用・変更したい場合には、該当するパラメータ行を、シミュレーション対象のシナリオ専用の config ファイルにコピーし、そのファイル内で値を修正すればよい。
初期(「0 回目」)イテレーションのみを実行する、比較的最小限の config ファイルは、以下の内容を含む。
<module name="network">
<param name="inputNetworkFile" value="<path-to-network-file>" />
</module>
<module name="plans">
<param name="inputPlansFile" value="<path-to-plans-file>" />
</module>
<module name="controller">
<param name="lastIteration" value="0" />
</module>
<module name="scoring">
<parameterset type="activityParams">
<param name="activityType" value="h" />
<param name="typicalDuration" value="12:00:00" />
</parameterset>
<parameterset type="activityParams">
<param name="activityType" value="w" />
<param name="typicalDuration" value="08:00:00" />
</parameterset>
</module>
実際に動作する例については、以下を参照されたい。
https://github.com/matsim-org/matsim-example-project/tree/master/scenarios/equil/config.xml
ファイル名に関しては、次の 2 つの便利な指定方法がある。
-
多くの入力ファイル名 は、config ファイルが置かれているディレクトリからの 相対パス で指定できる。³
-
入力ファイル名は URL として指定することも可能 である。
この例では、供給(supply)はネットワークファイルによって、需要(demand)はプランファイルによって与えられている。典型的な入力データについては、第 2.3.1 節で説明されている。
最初のイテレーションと最後のイテレーションが同一に指定されていることは、需要の再計画(リプランニング)が行われないことを意味する。この場合に実行されるのは、mobsim(図 1.1)と、その後に続く各実行プランのパフォーマンス評価(スコアリング)のみである。
スコアリングが正しく機能するためには、plans ファイル内で使用されているすべてのアクティビティタイプと、それぞれの典型的継続時間が、config ファイル内で定義されている必要がある。
さらに詳しい設定の可能性については、第 4 章で説明されている。
² MATSim GUI を使用しない場合でも、コマンドラインから次のコマンドを実行することで同じ処理を行うことができる。
java -cp /path/to/matsim.jar org.matsim.run.CreateFullConfig fullConfig.xml
³ この機能は MATSim バージョン 0.9.x 以降で利用可能である。ここでいう「most(多くの)」とは、この仕組みが手動で実装される必要があることを意味しており、その結果、とくに contrib モジュールでは未実装のままになっている場合がある。そのような状況に遭遇した場合は、以下のページからこの機能の追加を要望してほしい。
https://matsim.org/faq
2.3.5 オープンなシナリオ入力データ
2.3.5.1 MATSim ExamplesUtils
シナリオデータにアクセスするための一つの「手法(トリック)」として、MATSim の ExamplesUtils が用意されている。
(※ この節では、後続節への導入として簡潔に触れられている。)
2.3.5.2 事前パッケージ化されたシナリオ
事前にパッケージ化されたシナリオデータについては、第 3.2.4 節で説明されている。
これらのシナリオは、以下のページで公開されている。
https://matsim.org/open-scenario-data
このページには複数の参照先が示されており、その一つが次の GitHub リポジトリである。
https://github.com/matsim-scenarios
これらのリポジトリには、自由に利用可能な MATSim 用のシナリオ入力データがまとめて提供されている。
2.4 MATSim サバイバルガイド
MATSim には多くのオプションや機能が用意されており、それらを把握することは容易ではない。以下では、筆者らが日常的に MATSim を使用する中で得られた経験に基づく、いくつかの推奨事項を示す。
-
config ファイル内の多くのファイルパスは、config ファイルが存在するディレクトリからの相対パスで解釈される。
すでに述べたとおり、多くの場合、入力ファイルのパスには URL(Uniform Resource Locator)を使用することも可能である。 -
必ず小規模な例から開始し、動作確認を行うこと。
-
大規模シナリオは、まず 1% 程度のサンプルでテストすること。
例えば、初期需要からランダムに抽出した部分集団を用いる。MATSim GUI(図 2.1)には、
Tools … → Create Sample Population
というコマンドがあり、サンプル人口を生成できる。
ただし、第 4.4 節で述べているように、その際には特に mobsim のflowCapacityFactorおよびstorageCapacityFactorのパラメータ調整が必要となる。また、第 II 部第 11.4 節で示されているように、サンプルシナリオでは交通量データとの比較に関してもパラメータ調整が必要である。 -
設定がうまく動作しなくなった場合は、直ちに動作していたバージョンに戻り、そこから小さな変更を積み重ねること。
-
logfileWarningsErrors.logを必ず確認すること。 -
config ファイルの各オプションに付与されているコメントを確認すること。
これらはoutput_config.xml.gzに含まれているほか、logfile.logの冒頭付近にも記載されている。 -
config ファイルで設定するオプションは、できるだけ少なくすること。
これには次の 2 つの利点がある。
(i) 明示的に設定した項目以外については、MATSim のデフォルト設定が更新されるたびに、自動的に最新の「コミュニティが最適と考える設定」に追従できる。
(ii) config ファイルの構文が変更されても、自分で設定した部分以外については影響を受けにくい。
出力ディレクトリに生成されるoutput_config_reduced.xmlは、このような最小限の config ファイルを作成する際の出発点として有用である。 -
IDE から参照できる javadoc ドキュメントを活用すること。
-
最新のチュートリアルを http://matsim.org/docs で検索すること。
-
複雑な交通手段は、初期段階ではテレポーテーションとして扱うこと。
後から「実交通手段」として追加することができる。 -
初期段階では拡張(extensions)を使用しないこと。
拡張機能は一つずつ追加し、それぞれが期待どおりに動作しているかを確認しながら進めるべきである。
3. 利用可能な機能とその使い方
本章では、MATSim に備わっている機能を用いて、どのように拡張やカスタマイズを行えるかについて説明する。
第 25 章では、自作の拡張機能を MATSim に組み込む方法について解説する。
3.1 MATSim のモジュール性
MATSim はモジュール型の概念に基づいて設計されているが、「モジュール」という用語自体は必ずしも厳密に定義されたものではない¹。そのため、ソフトウェアフレームワークの中では、さまざまな階層レベルでモジュールが存在し得る。MATSim においても、設定オプションの集合、リプランニングの構成要素、contrib(拡張機能群)、さらには外部ツール²に至るまで、異なる種類の機能が「モジュール」と呼ばれることがある。
このような一般的にモジュール化されたアーキテクチャに起因して、どのレベルでどのようなアクセスが可能なのかを正しく理解することが重要である。
¹ Merriam-Webster(http://www.merriam-webster.com)によれば、モジュールとは「何かを構築したり完成させたりするために接続・結合可能な部品群の一つ」あるいは、より具体的には「特定の役割を果たす、コンピュータまたはコンピュータプログラムの一部」と定義されている。
² Java OpenStreetMap Editor(JOSM)向けの MATSim ネットワークエディタや、可視化ツール Via のようなスタンドアロンのツールを指す。
3.2 アクセスレベル
MATSim は現在、以下に示す 5 つのアクセスレベルを提供しており、それぞれについて次節以降で説明する。
3.2.1 GUI を用い、config・network・population のみで MATSim を利用する
MATSim のコア機能のみを利用する場合、以下を行えばよい(第 2.1 節参照)。
-
http://matsim.org/downloads にあるリンクから、MATSim のリリース版またはナイトリービルドをダウンロードする。
-
ネットワークファイルと初期プランファイルを用意する。小規模なものは手作業で作成できるが、大規模なものは計算手法によって自動生成する必要がある。
-
config ファイルを作成または編集する。
-
MATSim の jar ファイル³をクリックし、表示される指示に従う。
MATSim のコア機能だけでも十分に強力であると考えている。例えば、合成エージェントは完全な 1 日分の行動計画とスコアリング関数に従って行動するため、アクティビティタイプの開放時間、出発時刻選択、スケジュール遅延などを分析することが可能である。
3.2.2 GUI を用い、追加ファイルを使って MATSim を利用する
GUI からでも、追加ファイルを与え、対応する設定スイッチを有効にすることで、さらなる機能を利用できる。特に重要なのは、自動車以外の車両の明示的シミュレーション(第 12 章)や、時刻表ベースの公共交通(第 13 章)である。
3.2.3 「Java によるスクリプト」を記述する
MATSim の標準配布版だけでは不十分な場合、現在推奨される方法は MATSim 用の「Java スクリプト」を記述することである。これは、Java を MATSim のスクリプト言語として利用することを意味する(考え方については第 3.3 節参照)。
構文の概略は次のとおりである。
main( ... ) {
// config オブジェクトの生成
Config config = ConfigUtils.xxx(...);
config.xxx().setYyy(...);
...
// scenario オブジェクトの読み込みと調整
Scenario scenario = ScenarioUtils.loadScenario(config);
scenario.getXxx().doYyy(...); // (*)
...
// controler オブジェクトの生成と調整
Controler controler = new Controler(scenario);
controler.doZzz(...); // (**)
...
// イテレーション実行
controler.run();
}


