こぼれネット

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 を対象にプログラミングを行いたい利用者を対象としている。推奨されるワークフローは次のとおりである。

  1. 本プロジェクトを GitHub 上で自分のワークスペースに fork する。

  2. 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 の実行が可能となる。

  1. 設定
    「Choose」ボタンを用いて設定ファイルを選択することで、MATSim の実行設定を行う。

  2. 実行開始
    「Start MATSim」をクリックすることでシミュレーションを開始する。

なお、設定ファイル内で定義されている出力ディレクトリ(後述)がすでに存在する場合、実行を正しく開始するためには事前に削除する必要がある。この操作は「Delete」ボタンによって行える。
実行が正常に終了すると、「Open」ボタンを使って出力ディレクトリをファイルブラウザで開くことができる。

出力された output_network.xml.gzoutput_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 ファイルの構造は次のとおりである。

パラメータセットは、同じ種類のパラメータが複数のグループとして存在する場合に用いられるのが一般的である。例えば、アクティビティに関するパラメータは複数セット定義されている。

図 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 つの便利な指定方法がある。

この例では、供給(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.2 サンプルシナリオ

MATSim の example project には、scenarios/equil フォルダ内に equil という名称のサンプルシナリオが含まれている。⁴
このフォルダには、以下のファイルが含まれている。

  • config.xml

  • network.xml

  • plans100.xml

  • plans2000.xml.gz

plans100.xml および plans2000.xml.gz には、それぞれ 100 人および 2000 人分の 1 日の行動計画(プラン)が記述されており、いずれも自動車(car)モードのみを使用している。

また、2 人のみからなる非常に小規模な人口データ(plans2.xml)も用意されており、一方は公共交通を使用し、もう一方は自動車モードを使用している。

さらに、カウントデータの例として counts100.xml も同フォルダ内に含まれている。

加えて、100 件のトリップのみを含むファイル(plans100trips.xml)も用意されている。これは、各端点にダミーのアクティビティタイプを設定し、一地点から別の地点への移動需要のみを表現したものである。この例は、MATSim がアクティビティを考慮せず、完全に トリップベース のアプローチとしても実行可能であることを示すために提供されている。

この場合、表現力の一部は失われるものの、経路選択や出発時刻の適応といった基本的な概念は、通常の MATSim とまったく同様に機能する。

このシナリオのネットワークは、図 2.3 に示されている。

図 2.3:Equil シナリオのネットワーク

以下では、config.xml に含まれる重要なセクションを取り上げることで、このシナリオの内容を説明する。


config ファイルの「strategy」セクション

以下に示す config ファイルの抜粋から分かるように、このシナリオではリプランニングが用いられている。各イテレーションにおいて、エージェントの 10% が自身のプランのうち 1 つについて経路変更を行う(モジュール ReRoute)。残りの 90% のエージェントは、現在のイテレーションにおいて最もスコアの高いプランを選択して再実行する(モジュール BestScore)。

エージェントのプラン記憶が上限(maxAgentPlanMemorySize)に達した場合、プランは削除される。デフォルトでは、最もスコアの低いプランが削除されるが、この挙動は設定で変更可能である(第 26.6 節参照)。

<module name="replanning">
  <param name="maxAgentPlanMemorySize" value="5" />
  <!-- (0 means unlimited)-->
  <parameterset type="strategysettings">
    <param name="strategyName" value="ReRoute" />
    <param name="weight" value="0.1" />
  </parameterset>
  <parameterset type="strategysettings">
    <param name="strategyName" value="BestScore" />
    <param name="weight" value="0.9" />
  </parameterset>
</module>https://github.com/matsim-org/matsim-example-project/tree/master/scenarios/equil を参照。

config ファイルの「scoring」セクション

scoring セクションでは、スコアリングに使用されるパラメータが定義されており、その詳細は第 14 章で説明されている。以下の例では、h(home)w(work) の 2 つのアクティビティタイプが指定されている。

人口(plans)ファイルに含まれるすべてのアクティビティタイプ(第 2.3.1.2 節参照)は、必ず config ファイルの scoring セクションで定義されていなければならない。

<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>

config ファイルの「controller」セクション

このシナリオは 10 イテレーション実行され、結果は ./output/equil に出力される(第 2.3.2 節参照)。

<module name="controller">
  <param name="outputDirectory" value="./output/equil" />
  <param name="lastIteration" value="10" />
</module>

なお、MATSim では歴史的な経緯により、controller は文書やコード内で 「controler」 と誤記されている場合がある。これは多くの箇所で現在も残っており、後方互換性を壊さずに修正することが難しいためである。そのため、MATSim の中核クラスである Controler クラスも、現在でも l が 1 つのままの誤記表記となっている。


可視化

シミュレーション結果は、Via(第 5 章)または OTFVis(第 7 章)を用いて可視化することができる。

2.3 基本的なシナリオの構築と実行

本節では、MATSim の実験で一般的に用いられる入力データファイルおよび生成される標準的な出力ファイルについて説明する。まず典型的な入力・出力データを示し、その後、MATSim で使用される単位、慣習、座標系について述べ、さらに実務的なデータ要件に関する注意点を示す。最後に、オープン、すなわち自由に利用可能なシナリオ入力データへの参照を提示する。


2.3.1 典型的な入力データ

最低限、MATSim には以下のファイルが必要である。

  • config.xml
    MATSim の設定オプションを含むファイルであり、第 2.1.3 節で説明した内容である。

  • network.xml
    (道路)ネットワークの記述を含むファイル。

  • population.xml
    需要、すなわちエージェントの一覧およびそれぞれの日次プランを記述したファイル。

このため、population.xml および network.xml は非常に大きくなる可能性がある。ディスク容量節約のため、MATSim は圧縮形式の読み書きをサポートしており、GZIP 圧縮を用いる。その結果、population.xml.gz のように .gz の拡張子が付いたファイル名が多く使われている。MATSim はファイル名に基づいて、ファイルが圧縮されているか、あるいは圧縮して書き出すべきかを判断する。

以下では、network ファイルおよび population ファイルの詳細を説明する。config ファイルについては、第 2.1.3 節を参照されたい。


2.3.1.1 ネットワークファイル

ネットワークは、エージェント(または車両)が移動するためのインフラストラクチャである。ネットワークはノード(nodes)とリンク(links)から構成される(グラフ理論では、それぞれ頂点と辺に相当する)。

MATSim の拡張マークアップ言語(XML)形式による簡単なネットワーク記述例は、概ね次のようになる。

<network name="example network">
  <nodes>
    <node id="1" x="0.0" y="0.0"/>
    <node id="2" x="1000.0" y="0.0"/>
    <node id="3" x="1000.0" y="1000.0"/>
  </nodes>
  <links>
    <link id="1" from="1" to="2" length="3000.00" capacity="3600"
          freespeed="27.78" permlanes="2" modes="car" />
    <link id="2" from="2" to="3" length="4000.00" capacity="1800"
          freespeed="27.78" permlanes="1" modes="car" />
    <link id="3" from="3" to="2" length="4000.00" capacity="1800"
          freespeed="27.78" permlanes="1" modes="car" />
    <link id="4" from="3" to="1" length="6000.00" capacity="3600"
          freespeed="27.78" permlanes="2" modes="car" />
  </links>
</network>
動作する例については、以下を参照されたい。

https://github.com/matsim-org/matsim-example-project/tree/master/scenarios/equil

各要素には識別子 id が付与される。ノードは x および y 座標によって定義される(第 2.3.4.3 節および第 8.1 節も参照)。

リンクはより多くの属性を持つ。from および to 属性はノードを参照し、ネットワークの幾何構造を表す。さらに、以下のような交通関連属性が定義される。

  • リンクの長さ(通常はメートル;第 2.3.4 節参照)

  • リンクの交通容量(単位時間あたりに通過できる車両数、通常は車両/時)

  • 自由速度(freespeed):リンク上で許容される最大速度(通常は m/s)

  • レーン数(permlanes):from から to の方向に利用可能なレーン数

  • 利用可能な交通手段の一覧(例:modes="car, bike, taxi"

リンクはすべて単方向である。道路が双方向通行可能な場合は、fromto を反転させた 2 本のリンクを定義する必要がある(上記例の id 2 と 3 を参照)。


2.3.1.2 人口(population)ファイル/プラン(plans)ファイル

MATSim における移動需要は、エージェントの日次プランによって記述される。エージェント全体の集合は population と呼ばれるため、ファイル名は population.xml となる。実際には、人口ファイルは日次プランのリストであることから、plans.xml という名称も一般的に使用されている。

population は次のような階層構造を持つ。

<population>
  <person id="1">
    <plan selected="yes" score="93.2987721">
      <act type="home" link="1" end_time="07:16:23" />
      <leg mode="car">
        <route type="links">1 2 3</route>
      </leg>
      <act type="work" link="3" end_time="17:38:34" />
      <leg mode="car">
        <route type="links">3 1</route>
      </leg>
      <act type="home" link="1" />
    </plan>
  </person>
  <person id="2">
    <plan selected="yes" score="144.39002">
      ...
    </plan>
  </person>
</population>
動作例は以下を参照されたい。

https://github.com/matsim-org/matsim-example-project/tree/master/scenarios/equil

population は person のリストから構成され、各 person は複数の plan を持つことができ、各 plan は activity と leg の列から構成される。各 person につき、必ず 1 つの plan が selected として指定され、そのプランがモビリティシミュレーションで実行される。リプランニング段階では、別のプランが選択される場合がある。

plan には score 属性を持たせることができ、これはモビリティシミュレーション後のスコアリング段階で計算・保存される。

activity は計画された行動を表し、タイプが割り当てられ、通常は(1 日の最後の activity を除き)終了時刻が定義される。例外的に、終了時刻ではなく継続時間を持つ activity もあるが、これらは主に経路探索アルゴリズムによって自動生成され、本書では扱わない。

activity の位置は、xy 座標で指定するか、あるいは link を割り当てることで記述される。シミュレーションには link 属性が必要なため、座標のみが指定されている場合、Control(l)er が最寄りリンクを自動的に割り当てる。

leg は、エージェントがある地点から次の地点へ移動する方法を表し、必ず交通手段(mode)を持つ。任意で期待所要時間(trav_time)を指定することもできる。シミュレーションされるためには、leg は route を含む必要があるが、初期プランに route が含まれていない場合、MATSim が自動的に初期経路を計算する。

エージェントは、直前の activity(または leg)が終了すると、次の leg を開始する。mobsim における挙動は交通手段に依存し、car や transit は標準でサポートされている。未知の mode に遭遇した場合、MATSim はテレポーテーションを用いる。この場合、エージェントは一時的にシミュレーション空間から除外され、想定所要時間が経過した後、目的地に再挿入される。


最小限の人口ファイル

population データ形式は MATSim における中核的なデータ構造であり、初見では複雑に見える。しかし、開始時点ではごく一部の要素を理解すれば十分である。

最小限の population ファイルは、概ね次の情報のみを含めばよい。

<population>
  <person id="1">
    <plan>
      <act type="home" x="5.0" y="8.0" end_time="08:00:00" />
      <leg mode="car" />
      <act type="work" x="1500.0" y="890.0" end_time="17:30:00" />
      <leg mode="car" />
      <act type="home" x="5.0" y="8.0" />
    </plan>
  </person>
  <person id="2">
    ...
  </person>
</population>
動作例としては、matsim-code-examples 内の plans-minimal.xml を参照されたい。

以下の点により、構成を簡略化できる。

  • 各 person は 1 つの plan のみでよい

  • plan に selected や score を持たせる必要はない

  • activity の位置は座標だけで指定できる

  • activity には妥当な終了時刻を設定する

  • leg には mode のみを指定し、route は不要

シミュレーションを開始すると、MATSim の Control(l)er がこれらのファイルを読み込み、各 activity に最寄りのリンクを自動的に割り当て、各 leg に対して適切な経路を計算する。この仕組みにより、MATSim を容易に使い始めることができる。

2.3.2 典型的な出力データ

MATSim は、結果の分析に用いることができ、またシミュレーションの進行状況を把握するための出力データを生成する。これらの出力ファイルには、MATSim の実行全体を要約するものと、特定のイテレーションに対してのみ生成されるものがある。

前者のファイルは、config ファイルの controller セクションで指定された 出力フォルダのトップレベル に直接出力される。一方、後者のファイルは、出力フォルダ内に継続的に作成される イテレーションごとのフォルダ
ITERS/it.{iteration number}
に格納される。

一部の出力ファイル(人口ファイルなど、大規模になりやすいもの)については、config ファイルで 出力頻度 を指定できる。この場合、それらのファイルは対応するイテレーションフォルダのみに出力される。

MATSim 実行全体を要約するファイル群は、**オンザフライ(on the fly)**で構築される。すなわち、各イテレーション終了後に、その時点で計算された値が逐次保存され、実行中に進行状況を継続的に監視できる。

いくつかのファイルはデフォルトで生成される(例:スコア統計ファイル)。一方で、他のファイル(例:カウントデータ関連ファイル)は、config ファイル内で明示的に設定しなければ生成されない。

以下は、MATSim 実行全体を要約するために継続的に構築される出力ファイルである。


ログファイル(Log File)

MATSim の実行中にはログファイルが出力され、後の分析に必要な情報や、実行がクラッシュした場合などの診断情報が記録される。


警告・エラーログファイル(Warnings and Errors Log File)

MATSim がシミュレーション設定や処理内容に問題を検出した場合、警告(warning)やエラー(error)メッセージを出力する。ただし、通常のログファイルには大量の情報が含まれるため、これらの警告を見落としやすい。

そのため、警告およびエラーメッセージのみを含む専用のログファイルが、実行結果ディレクトリ内に別途生成される。実行中および実行後には、このファイルを必ず確認し、潜在的な問題がないかをチェックすることが重要である。


図 2.4:Mobsim イベント

(例:ActivityEndEvent、PersonDepartureEvent、LinkEnterEvent など)


スコア統計(Score Statistics)

スコア統計は、画像ファイル(scorestats.png)およびテキストファイル(scorestats.txt)として出力される。これらは、各イテレーションごとに、全エージェントのプランについて、

  • 最良スコアの平均

  • 最悪スコアの平均

  • 実行されたプランの平均スコア

  • 全体平均スコア

を示す。スコア推移の例は図 1.2 に示されている。


移動距離統計(Leg Travel Distance Statistics)

移動距離統計(traveldistancestats.png および traveldistancestats.txt)は、スコア統計と同様の形式であるが、スコアの代わりに移動距離をプロットする。


ストップウォッチ統計(Stopwatch)

ストップウォッチ統計(stopwatch.png, stopwatch.txt)には、各イテレーションにおける再計画(replanning)や mobsim 実行などの処理に要した**実時間(wall clock time)**が記録される。この情報は、再計画とモビリティシミュレーションの計算負荷比較など、計算性能分析に有用である。


以下は、特定のイテレーションごとに生成される出力ファイルである。


イベント(Events)

シミュレーション中のすべての行動は MATSim イベントとして記録される。これには、アクティビティ開始やネットワークリンクの変更などが含まれる(図 2.4 参照)。

各イベントは 1 つ以上の属性を持ち、デフォルトではイベント発生時刻が含まれる。加えて、イベントを発生させたエージェントの ID や、イベントが発生したリンクの ID などの情報を含むこともある。

イベントファイルは、可視化ツールなどの事後分析の基盤となる重要なデータである。イベントの詳細については第 25.5 節で説明されている。


プラン(Plans)

設定されたイテレーションにおいて、その時点の人口とエージェントのプランが出力される。最終イテレーションのプランは、出力フォルダのトップレベルにも生成される。


レッグヒストグラム(Leg Histogram)

各イテレーションでレッグヒストグラムが作成される。これは、単位時間あたりの「到着中」「出発中」「移動中」のエージェント数を示すものである。

ヒストグラムは交通手段ごと、およびすべての交通手段を合算したものについて作成される。ファイル名は、イテレーション番号で始まり、交通手段名で終わる(例:1.legHistogram_car.png1.legHistogram_all.png)。あわせて、全交通手段分のデータを含むテキストファイル(例:1.legHistogram.txt)も生成される。


トリップ所要時間(Trip Durations)

各イテレーションについて、トリップ所要時間ファイル(例:1.tripdurations.txt)が生成される。このファイルには、時間帯区分ごとに、アクティビティ間(例:自宅→職場、職場→自宅、買い物→自宅等)のトリップ数と所要時間が記録される。


リンク統計(Link Stats)

各イテレーションで、ネットワークリンクごとの時間別交通量および走行時間を含むリンク統計ファイルが出力される。リンク統計は、実観測の交通量データとの比較において特に重要であり、第 11.4 節で詳しく説明されている。

2.3.3 データ要件

2.3.3.1 人口およびアクティビティスケジュール

これまで述べてきたように、MATSim では初期プランを含むファイルを入力として与える必要がある。MATSim の日々の学習(day-to-day learning)によって後から変更されない選択次元は、すべて外生的にここで与えなければならない。

2022 年時点で MATSim には、経路選択、交通手段選択、(出発)時刻選択、副次的アクティビティの立地点選択のモジュールが存在しており、それ以外の要素は外生的に与える必要がある。特に重要なのは、**各個人のアクティビティの並び(活動連鎖)**である。

人口生成には、主に次の 2 つの方法がある。

  • 比較的容易な方法:完全な国勢調査人口を変換する

  • より高度な方法:サンプル調査や構造調査に基づいて合成人口を生成する(例:Guo and Bhat, 2007)

MATSim では、両方の方法が実際に使われてきた(例:スイス連邦統計局(BFS), 2000;Müller, 2011)。移動需要は調査データから導出されることが多く、スイスではマイクロセンサス(Swiss Federal Statistical Office (BFS), 2006)が利用されている。

近年では、GPS やスマートフォンの移動日誌など、新しいデータソースも利用可能である(例:Zilske and Nagel, 2015)。

需要および人口生成における重要な課題の一つは勤務地割当である。通勤交通は依然として、特にピーク時間帯において大きな問題である。スイスでは、国勢調査において自治体レベルで勤務地が把握されていたが、このような恵まれたデータベースは稀である。

対象地域の居住人口を生成した後でも、越境交通や貨物交通など、追加の需要成分を考慮する必要がある場合がある。これらは内生的にモデル化できない場合が多いため、MATSim ではサブ人口ごとに異なる扱いを行う機能が用意されている(第 4.6 節)。例えば、越境通勤者には地域内での目的地選択を許可しない、あるいは貨物エージェントには配送活動を余暇活動へ変更させない、といった設定が可能である。


2.3.3.2 ネットワーク

実務的なシミュレーションでは、計画用ネットワークナビゲーション用ネットワークの 2 種類が使われる(チューリッヒ地域の例については図 2.5(a)、(b) を参照)。

前者は簡略化されたネットワークであり、初期の探索的シミュレーションに用いられることが多い。後者は政策評価などに用いられ、より詳細な情報(自転車リンクや徒歩リンクなど)を含む場合が多い。

ネットワークデータは、連邦機関などの公式データ、OpenStreetMap(OSM)などのフリーソース、あるいはナビゲーションネットワーク提供事業者などの商用データから入手できる。


2.3.4 単位・慣習・座標系

2.3.4.1 単位

MATSim は単位について極力仮定を置かない方針であるが、一部の推定では単位が必要となる。原則として、同種の変数(例:距離)はすべて同じ単位で与える必要がある。

以下に、主要な単位を示す。

  • 距離
    リンク長などで使用される。座標系と同じ単位で指定する必要があり、これにより MATSim は直線距離を計算できる。広く用いられている UTM 投影座標系(第 2.3.4.3 節参照)では、距離単位はメートルであり、MATSim で最も一般的に使われる単位である。

  • 時間
    MATSim は hour:minute:second 表記をサポートしているが、内部的には秒を基準単位としている。そのため、リンク速度などは通常 m/s で指定する必要がある。
    例外として、スコアリングパラメータでは「1 時間あたり」の値が使われる。

  • 貨幣
    貨幣単位自体は定義されない。単位は金銭の限界効用によって暗黙的に決まる(式 (14.5) 参照)。したがって、ドイツからスイスに適用する場合には、「ユーロあたりの効用」から「スイスフランあたりの効用」へパラメータを変更する必要がある。


2.3.4.2 識別子(ID)の慣習

MATSim では多くの箇所で ID が使用される。ID は任意の文字列で構わないが、次の制約がある。

  • 空白文字(スペース、タブ、改行など)を含めてはならない

  • カンマ、セミコロン等の区切り文字を含めてはならない

これらの文字は ID の区切りに使われるためである。


2.3.4.3 座標系

適切な座標系でのデータ準備

入力ファイルでは、ノードなどに座標を指定する必要がある。
現時点では、WGS84(GPS 座標)などの球面座標系の使用は推奨しない

MATSim では多数の箇所で点間距離を計算するが、球面座標での距離計算は複雑かつ計算コストが高い。一方、MATSim はピタゴラスの定理を用いた簡易計算を行うため、**デカルト座標系(直交座標系)**が必要となる。

このため、距離単位がメートルであるデカルト座標系を使用することを強く推奨する。多くの国・地域にはローカル最適化された座標系が存在するため、対象地域の GIS 専門家に相談するのが望ましい。

使用すべき座標系が不明な場合は、UTM 座標系を用いるのが無難である。UTM は世界を 6 度幅の帯に分割し、各帯(ゾーン)について最適化された座標系を定義している。適切なゾーンは、Wikipedia や https://www.geoplaner.com/ で確認できる。


MATSim 実行時の座標系指定

MATSim では、解析や可視化(Google Earth、QGIS など)のために、使用する座標系を把握する必要がある。実行時の座標系は config ファイルの global セクションで指定できる。

<module name="global">
  <param name="coordinateSystem" value="EPSG:32608" />
</module>
最も簡単な指定方法は、EPSG コードを用いる方法である。多くの座標系は標準化され、番号が付与されている。対応する EPSG コードは http://www.spatialreference.org で検索できる。

入力ファイル内での座標系指定

入力ファイルごとに、直接座標系を指定することもできる。構文例は次のとおりである。

<network>
  <attributes>
    <attribute name="coordinateReferenceSystem" class="java.lang.String">
      EPSG:31468
    </attribute>
  </attributes>
</network>
多くの output_... ファイルにはこの情報が含まれており、そこから座標系を確認できる。

config ファイルによる入力座標系指定

MATSim 0.8.x 以降では、内部座標系とは異なる座標系の入力データを受け付けることができる。これは、次のような設定で実現される。

<module name="network">
  <param name="inputCRS" value="EPSG:12345" />
</module>
この設定は plans ファイルなど他の入力ファイルにも適用可能であり、入力時に座標が global セクションで指定された座標系へ自動変換される。

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 を使用する中で得られた経験に基づく、いくつかの推奨事項を示す。

  1. config ファイル内の多くのファイルパスは、config ファイルが存在するディレクトリからの相対パスで解釈される。
    すでに述べたとおり、多くの場合、入力ファイルのパスには URL(Uniform Resource Locator)を使用することも可能である。

  2. 必ず小規模な例から開始し、動作確認を行うこと。

  3. 大規模シナリオは、まず 1% 程度のサンプルでテストすること。
    例えば、初期需要からランダムに抽出した部分集団を用いる。MATSim GUI(図 2.1)には、
    Tools … → Create Sample Population
    というコマンドがあり、サンプル人口を生成できる。
    ただし、第 4.4 節で述べているように、その際には特に mobsim の flowCapacityFactor および storageCapacityFactor のパラメータ調整が必要となる。また、第 II 部第 11.4 節で示されているように、サンプルシナリオでは交通量データとの比較に関してもパラメータ調整が必要である。

  4. 設定がうまく動作しなくなった場合は、直ちに動作していたバージョンに戻り、そこから小さな変更を積み重ねること。

  5. logfileWarningsErrors.log を必ず確認すること。

  6. config ファイルの各オプションに付与されているコメントを確認すること。
    これらは output_config.xml.gz に含まれているほか、logfile.log の冒頭付近にも記載されている。

  7. config ファイルで設定するオプションは、できるだけ少なくすること。
    これには次の 2 つの利点がある。
    (i) 明示的に設定した項目以外については、MATSim のデフォルト設定が更新されるたびに、自動的に最新の「コミュニティが最適と考える設定」に追従できる。
    (ii) config ファイルの構文が変更されても、自分で設定した部分以外については影響を受けにくい。
    出力ディレクトリに生成される output_config_reduced.xml は、このような最小限の config ファイルを作成する際の出発点として有用である。

  8. IDE から参照できる javadoc ドキュメントを活用すること。

  9. 最新のチュートリアルを http://matsim.org/docs で検索すること。

  10. 複雑な交通手段は、初期段階ではテレポーテーションとして扱うこと。
    後から「実交通手段」として追加することができる。

  11. 初期段階では拡張(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();
}
モバイルバージョンを終了