このplans.xmlの内容を解説して下さい ーー とChatGPTに頼んでみた件

<?xml version="1.0" ?>
<!DOCTYPE plans SYSTEM "http://www.matsim.org/files/dtd/plans_v4.dtd">
<plans xml:lang="de-CH">
<person id="1">
  <plan>
    <act type="h" x="-25000" y="0" link="1" end_time="06:00" />
    <leg mode="car">
      <route> </route>
    </leg>

    <act type="w" x="10000" y="0" link="3" dur="00:10" />
    <leg mode="car">
      <route> </route>
    </leg>
    <act type="w" x="10000" y="0" link="11" dur="03:30" />

    <leg mode="car">
      <!-- ここは書かない(MATSim に任せる) -->
    </leg>

    <act type="h" x="-25000" y="0" link="1" />
  </plan>
</person>
</plans>

以下、この plans.xml を「1日の行動ストーリー」として順にほどく形で解説します。
MATSim を理解する上で重要なポイントも併せて整理します。


1. ファイル全体の位置づけ

<!DOCTYPE plans SYSTEM "http://www.matsim.org/files/dtd/plans_v4.dtd">
<plans xml:lang="de-CH">
  • plans_v4.dtd
    → MATSim の 人口(plans)ファイルの仕様

  • xml:lang="de-CH"
    → 言語情報(動作にほぼ影響なし、慣習的指定)


2. person と plan の関係

<person id="1">
  <plan>
    ...
  </plan>
</person>
  • このファイルには 1人(id=1)だけが登場

  • <plan> は「その人の1日の行動計画

  • 複数 <plan> を持たせることも可能(choice set)
    → 今回は1つだけ


3. 行動と移動は必ず交互に並ぶ

MATSim の基本構造は:

act → leg → act → leg → act → ...
この並びが崩れるとエラーになります。

4. 最初の activity(自宅)

<act type="h" x="-25000" y="0" link="1" end_time="06:00" />

意味

  • 自宅(h)で滞在

  • 座標:(-25000, 0)

  • 所属リンク:link="1"

  • 06:00 にこの活動を終了

👉
この人は朝6時に家を出る

ポイント

  • 最初の activity は必ず end_time

  • duration (dur) は使わない


5. 最初の移動(家 → 職場)

<leg mode="car">
  <route> </route>
</leg>
移動手段:car
  • <route> は空
    MATSim がシミュレーション中に経路探索する

✅ これは正しい・推奨される書き方です


6. 短時間の仕事(準備・立ち寄りなど)

<act type="w" x="10000" y="0" link="3" dur="00:10" />

意味

  • 職場(w)で 10分滞在

  • 到着時刻は自動的に計算

  • 滞在時間のみ指定

👉
「ちょっと立ち寄る」「準備」「受付」的な活動と解釈できる


7. 移動(職場内・別地点へ)

<leg mode="car">
  <route> </route>
</leg>
  • car 移動

  • 経路は再び MATSim 任せ


8. 本命の仕事活動

<act type="w" x="10000" y="0" link="11" dur="03:30" />
  • 同じ w(仕事)だが 別リンク

  • 3時間30分 滞在

👉
同じ activityType を1日に何度使ってもよい

MATSim は activityType の意味ではなく、
時間配分と移動評価に関心があります。


9. 帰宅移動(経路未指定)

<leg mode="car">
  <!-- ここは書かない(MATSim に任せる) -->
</leg>
<act type="h" x="-25000" y="0" link="1" />
  • <route> すら書いていない

  • これでOK

MATSim は:

  • 出発地点:直前の activity

  • 到着地点:次の activity
    が分かっていれば、経路を生成します。


10. 最後の activity(帰宅)

<act type="h" x="-25000" y="0" link="1" />

ポイント

  • end_time も dur も指定しない

  • 1日の終点

👉
「家に帰って一日が終わる」という意味


11. この1人の1日を言葉で書くと

この人は
朝6時に自宅を出て車で移動し、
職場に10分立ち寄り、
さらに別の仕事地点で3時間半働き、
車で帰宅して一日を終える。

という 完全に整合した MATSim 的1日です。


12. 実務的に大事な注意点

✅ activityType は意味を持たない

  • hw はタグ

  • scoring に定義されていればOK

✅ 複数 w があっても問題なし

  • 滞在時間評価は合算される

✅ route は基本「書かない」

  • 書くのは特殊ケースのみ


13. 最小限の「正しい plans.xml」の条件

  1. act / leg が交互

  2. 最初の act に end_time

  3. すべての activityType が scoring に定義済み

  4. 最後の act は時間指定なしでOK


一言まとめ

plans.xml は「人ごとの1日の台本」であり、
MATSim はこれを守りつつ、
経路・所要時間・渋滞を現実的に再構成する。

この理解を持っていれば、
今後どんな plans.xml を読んでも迷わなくなります。

<act type="h" x="-25000" y="0" link="1" end_time="06:00" /> の x="-25000" y="0" は座標でしょうか。
network.xmlの座標から大きく乖離しているようですが、問題はないでしょうか?

はい、順に整理して説明します。


1. x="-25000" y="0" は何か

<act type="h" x="-25000" y="0" link="1" end_time="06:00" />

この

x="-25000" y="0"

活動地点の座標(平面直交座標) です。
EPSG:6685 を使っているので、単位はメートルです。


2. では、この座標は本当に使われているのか?

結論から言うと:

この行では、x,y は実質的に無視されています。

理由は link="1" が同時に指定されているから です。


3. MATSim における「座標」と「link」の優先順位

MATSim では activity の位置指定には2通りあります。

✅ 方法 A:座標指定

<act x="1234" y="5678" />
  • 座標から 最寄りリンクを MATSim が探索

  • 初心者向け・簡易入力向け

✅ 方法 B:リンク指定

<act link="1" />
  • リンクが最優先

  • 座標は使われない(あっても飾り)


✅ 両方書いた場合(今回)

<act x="-25000" y="0" link="1" />

MATSim の動作:

  1. link="1" を使う

  2. x,y は位置決定に使わない

  3. 一貫性チェックも特にしない

👉 network.xml の link=1 に紐づく位置が使われる


4. network.xml と大きく乖離していても問題ないか?

今回の答え

問題ありません(link を指定している限り)

MATSim は

  • activity → link

  • link → node 座標

という関係で内部位置を決めるため、

x,y がネットワーク座標系と合っていなくても
実害は出ません

5. では、なぜ x,y が書いてあるのか?

これは 歴史的/例示的な理由 がほとんどです。

  • 古い example

  • 座標指定と link 指定の両対応デモ

  • 外部ツールとの互換性(可視化など)

実務的には冗長 です。


6. 実務上のおすすめルール

✅ network がある場合(通常)

<act type="h" link="1" end_time="06:00" />

👉 x,y は書かない


✅ network がない/簡易ケース

<act type="h" x="-25000" y="0" end_time="06:00" />

👉 link は書かない


❌ 混在は避ける(読み手が混乱)

<act x="..." y="..." link="..." />

7. 例外的に座標も意味を持つ場合

次のような場合のみです:

  • output_events を GIS に投げる

  • 活動位置を後処理で再利用

  • link を削除して座標ベースに切り替える予定

それ以外では 意味を持ちません


8. 一言でまとめると

link を書いた時点で、x,y は無視される。
network と乖離していても問題は起きない。
ただし、設定としては冗長なので消すのが正解。

この理解で正確です。

今回は、 <route> </route> のようにルートがブランクにしています。
これは本来、network.xmlのnodeかlinkの番号をその順番に記載するものであり、ブランクの場合は、適当な最短距離計算アルゴリズムが適用される と考えているのですが、この理解で正しいでしょうか?

 

未分類

Posted by ebata