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

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE network SYSTEM "http://www.matsim.org/files/dtd/network_v1.dtd">

<network name="equil test network">
  <nodes>
	<node id="1"  x="774558.033" y="1108851.844"/>
	<node id="2"  x="779558.033" y="1108851.844"/>
	<node id="3"  x="793693.033" y="1114776.844"/>
	<node id="4"  x="792060.033" y="1113182.844"/>
	<node id="5"  x="790729.033" y="1112066.844"/>
	<node id="6"  x="789860.033" y="1110562.844"/>
	<node id="7"  x="789558.033" y="1108851.844"/>
	<node id="8"  x="789860.033" y="1107140.844"/>
	<node id="9"  x="790729.033" y="1105636.844"/>
	<node id="10" x="792060.033" y="1104520.844"/>
	<node id="11" x="793693.033" y="1102926.844"/>
	<node id="12" x="794558.033" y="1108851.844"/>
	<node id="13" x="799558.033" y="1108851.844"/>
	<node id="14" x="799558.033" y="1098851.844"/>
	<node id="15" x="774558.033" y="1098851.844"/>
  </nodes>

   <links capperiod="01:00:00">
      <link id="1" from="1" to="2" length="10000.00" capacity="36000" freespeed="27.78" permlanes="1"  />
      <link id="2" from="2" to="3" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="3" from="2" to="4" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="4" from="2" to="5" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="5" from="2" to="6" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="6" from="2" to="7" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="7" from="2" to="8" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="8" from="2" to="9" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="9" from="2" to="10" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="10" from="2" to="11" length="10000.00" capacity="3600" freespeed="27.78" permlanes="1"  />
      <link id="11" from="3" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="12" from="4" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="13" from="5" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="14" from="6" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="15" from="7" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="16" from="8" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="17" from="9" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="18" from="10" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="19" from="11" to="12" length="5000.00" capacity="1000" freespeed="27.78" permlanes="1"  />
      <link id="20" from="12" to="13" length="10000.00" capacity="36000" freespeed="27.78" permlanes="1"  />
      <link id="21" from="13" to="14" length="10000.00" capacity="36000" freespeed="27.78" permlanes="1"  />
      <link id="22" from="14" to="15" length="35000.00" capacity="36000" freespeed="27.78" permlanes="1"  />
      <link id="23" from="15" to="1" length="10000.00" capacity="36000" freespeed="27.78" permlanes="1"  />
   </links>
</network>

この network.xml は、MATSim の「道路ネットワーク」を定義しているファイルです。順に分解して説明します。


1. ファイル全体の構造

<network name="equil test network">
  <nodes> … </nodes>
  <links capperiod="01:00:00"> … </links>
</network>
  • network:ネットワーク全体。name は単なるラベル。

  • 中に

    • 交通ネットワーク上の 点(交差点・分岐点) を表す <nodes>

    • 点と点を結ぶ 線(道路リンク) を表す <links>
      が入っています。


2. <nodes>:ノード(交差点・分岐点)

例:

<node id="1"  x="774558.033" y="1108851.844"/>
<node id="2"  x="779558.033" y="1108851.844"/>
…
<node id="15" x="774558.033" y="1098851.844"/>
  • id:ノードの識別子(後で link から参照される)

  • x, y:座標(config の coordinateSystem、ここでは EPSG:6685 に対応)

イメージ

  • node1〜2〜12〜13 などは、x 方向に真っすぐ並んでいるような配置

  • node2 を中心に、3〜11 へ枝分かれしているような「花火 / 星型」の構造

  • node1–2–13–14–15–1 で、大きな四角形の周回路を作っている

この座標は可視化や距離計算に使われますが、ユーザは通常「id」で扱うことが多いです。


3. <links>:リンク(道路・一方通行)

ヘッダ:

<links capperiod="01:00:00">
  • capperiod="01:00:00"
    capacity が「1時間あたりの台数」を表すことを意味します。

各リンクの形:

<link id="1" from="1" to="2"
      length="10000.00" capacity="36000"
      freespeed="27.78" permlanes="1" />

属性の意味

  • id:リンクの識別子(plans.xml の <route><act link="…"> から参照)

  • from, to:始点ノード・終点ノード
    有向リンク(片方向) であることに注意

  • length:リンク長 [m]

  • capacity:capperiod(ここでは 1h)あたりの交通容量 [veh/capperiod]

  • freespeed:自由走行速度 [m/s]

    • 27.78 m/s ≒ 100 km/h(100 ÷ 3.6 ≒ 27.78)

  • permlanes:車線数


4. ネットワークの形(構造)

4.1 大きな「四角形の周回路」

<link id="1"  from="1"  to="2"  length="10000" capacity="36000" … />
<link id="20" from="12" to="13" length="10000" capacity="36000" … />
<link id="21" from="13" to="14" length="10000" capacity="36000" … />
<link id="22" from="14" to="15" length="35000" capacity="36000" … />
<link id="23" from="15" to="1"  length="10000" capacity="36000" … />
  • node1 → node2 → node12 → node13 → node14 → node15 → node1
    という一周する大きなループ

  • capacity="36000"かなり太い幹線道路 的な扱い

4.2 node2 から放射状に伸びる枝

<link id="2"  from="2" to="3" length="10000" capacity="3600" … />
<link id="3"  from="2" to="4" … />
…
<link id="10" from="2" to="11" … />
  • node2 から 3〜11 に向かう 9 本のリンク

  • capacity="3600" と細め → 支線道路 のイメージ

4.3 各枝の先から node12 への収束

<link id="11" from="3"  to="12" length="5000" capacity="1000" … />
<link id="12" from="4"  to="12" … />
…
<link id="19" from="11" to="12" … />
  • 3〜11 の各ノードから、中央の node12 に向かうリンク群

  • capacity="1000" とさらに細い → ボトルネックになるリンク


5. 交通流の「ストーリー」

このネットワークは、典型的な 「ボトルネック付きテストネットワーク」 になっています。

  • 左側の node1 と右側の node13/14 などを結ぶメインルート(幹線)は capacity が非常に大きい

  • 途中の node2 周りで、たくさんの選択肢(3〜11 経由)と

  • node3〜11 → node12 間に 細いキャパシティのリンク が配置されている

これにより:

  • エージェントがどのルートを選ぶか

  • 通行量の集中による混雑・遅延がどう出るか

  • replanning による経路変更の効果

などを検証しやすい「教材用ネットワーク」になっています。


6. plans.xml との関係

たとえば、先ほどの plans.xml で

<act type="h" x="-25000" y="0" link="1" />
…
<act type="w" x="10000" y="0" link="3" />
…
<act type="w" x="10000" y="0" link="11" />
のように書いた場合:
  • 出発地の活動は link 1(1→2)上

  • 仕事場所は link 3(2→4)上link 11(3→12)上

として扱われます。
座標 x,y は network の座標とあまり整合していなくても、
実際の接続は link で決まる、というのがポイントです。


7. 一言まとめ

  • <nodes>:地図上の「点」(交差点)

  • <links>:点と点を結ぶ「一方通行の道路」

  • capacityfreespeed で、道路の太さ・速度を設定

  • このファイルは、MATSim がルーティングと交通流シミュレーションを行うための「道路網の定義」になっています。

もし「このネットワークの図を頭に描きにくい」と感じたら、
簡単なスケッチを手書き(node 間の線をそのまま結ぶだけ)すると、
ボトルネック構造がかなりスッキリ見えると思います。

<link id="1" from="1" to="2" length="10000.00" capacity="36000" freespeed="27.78" permlanes="1" /> とはnode1からnode2へのリンクを現わしていると思います。
しかし、node1とnode2は座標が決まっているので、それをつなぐ長さは確定的に決まるはずです。
length="10000.00"は何を意味しますか?

とても重要なポイントです。
結論から言うと、

MATSim では「link の length は node 座標から自動計算されるものではない」

という設計思想になっています。


結論(要点)

<link id="1" from="1" to="2" length="10000.00" … />

length="10000.00" は、
node1–node2 を結ぶ「このリンクを通過する移動距離(m)」を

ユーザが明示的に与えている 値です。

👉 node 座標と一致している必要はありません。


なぜ座標から自動計算しないのか?

MATSim では、次のように役割が分離されています。

要素 役割
node の x,y 可視化・近接探索・空間参照
link.length 移動距離・移動時間・コスト計算

つまり、

  • 座標:幾何(geometry)

  • length:交通量モデル上の距離(topology / cost)

です。


具体的に意味するもの

length="10000.00" は:

  • この link を 1 回通過すると 10,000 m 移動したと見なす

  • freespeed が 27.78 m/s なら
    → 自由速度走行時間 ≒ 360 秒(6 分)

  • congestion があれば,それ以上の所要時間になる

という 「モデル上の距離」 です。


node 座標との乖離が許される理由

① 元データが必ずしも平面座標とは限らない

  • 座標は地理座標(lat/lon)

  • 縮尺が歪んでいる

  • 可視化用に簡略化されている

→ 正確な距離は別途持ちたい


② 1 本の link が「曲がった道路」を表すことがある

MATSim の link は:

  • 曲線

  • 蛇行

  • 高速道路 IC 含む長区間

1 本でまとめて表現することがあります。

node o———————o
↑ 実際はくねくね

→ 座標距離 ≠ 実走行距離


③ 意図的に「距離」を調整するケース

研究用途では特に重要です。

  • 混雑を強調したい

  • 特定リンクのコストを高くしたい

  • 抽象ネットワーク(equil のような教材用)

👉 equil ネットワークは 完全に抽象モデル です
(座標は「絵を描く」ためだけ)


MATSim は node 間の距離を使っていない?

ほぼ以下だけです:

  • 可視化(OTFVis など)

  • 最近傍探索(施設→リンクへの割当)

  • 座標ベースの分析

交通シミュレーションの本体では:

✅ 移動距離・時間・コストは
100% link.length と freespeed / capacity に依存

です。


では座標と length が食い違うとどうなる?

何も問題になりません。

  • ルーティング:OK

  • mobsim:OK

  • scoring:OK

ただし:

❗ 可視化で「距離感がおかしい絵」になる
❗ GIS と突合すると違和感が出る

という 見た目・後処理の問題 は起きます。


equil ネットワークの場合

今回の例:

length="10000.00"

は、

  • 各リンクの走行時間を均一にし

  • 混雑の発生位置と再配分を分かりやすくする

ための 意図的設計 です。

座標は概念図、length が本体


まとめ(核心)

  • ✅ link.length は「モデル上の走行距離」

  • ✅ node 座標から自動計算されない

  • ✅ 座標と一致する必要もない

  • ✅ equil では特に意図的に抽象化されている

この設計を理解すると、

  • freespeed

  • capacity

  • congestion

  • travel time

すべて link 中心に構成されている ことが見えてきます。

ではシミュレーション結果によって出力される座標は、どのようになるのですか?

良い問いです。
結論を先に言うと、MATSim のシミュレーション結果として出力される「座標」は、基本的に network.xml に書かれている node / link の座標をそのまま使ったものです。

つまり、

計算は link.length で行われ、
出力される座標は node / link の x,y に基づく

という 二重構造 になっています。


出力される「座標」の正体(整理)

MATSim の出力で座標が現れる場面は主に以下です。

1. events.xml に出る座標

代表例:

  • actstart / actend

  • personEntersVehicle

  • linkEnter / linkLeave

原則

  • activity の座標
    → plans.xml に書かれた x,y
    (無ければ link の座標から補完)

  • link イベントの座標
    → link の from / to node の座標
    (補間された線上)

👉 length とは無関係


2. OTFVis(可視化)で見える動き

OTFVis では:

  • node の座標に基づいてネットワークが描画され

  • agent は link の形状(直線)上を移動しているように見える

このとき:

  • 表示距離:座標系の距離

  • 移動時間:length / freespeed + 混雑

になります。

👉 「ゆっくり短い線を進む」「速く長い線を進む」などは普通に起きる


3. output_plans.xml の activity 座標

再計画後の output では:

<act type="w" x="10000" y="0" link="11" />

のように、

  • 座標は activity の x,y

  • 行先の link が付く

座標自体は network と一致していなくてもよい


では座標と length がズレていると何が起きるか?

✅ 起きないこと(重要)

  • ルーティングが壊れる → ❌ 起きない

  • 混雑が壊れる → ❌ 起きない

  • travel time が狂う → ❌ 起きない

→ すべて length / freespeed / capacity で計算されるため


⚠ 起きうること

① 可視化が「物理的に不自然」

  • 短い線なのに 10 分かかる

  • ほぼ止まって見えるのに渋滞する

👉 equil では 仕様通り


② 座標ベースの後処理で違和感

  • GIS に重ねる

  • 移動距離を座標から再計算する

  • 空間クラスタ分析

👉 この場合は 座標と length を揃える必要あり


MATSim は「空間モデル」ではない

ここが一番重要です。

MATSim は:

  • ❌ 幾何学的シミュレーション

  • ネットワーク・コストベースの離散イベントシミュレーション

です。

そのため、

要素 使われ方
座標 表示・割当・分析
length 移動の実体
freespeed / capacity 時間と混雑

という役割分担が厳密にされています。


equil の場合(今回の文脈)

  • 座標:
    → ネットワーク構造を「星形に見せる」ための配置

  • length:
    → 均一な travel time を与えるための操作量

結果として:

  • 出力される座標:network.xml の x,y

  • 出力される時間・混雑:完全に length 主導

になります。


一文でまとめると

MATSim の出力座標は「見た目用」、
シミュレーションの本質は link.length にある。

この二層構造を理解しているかどうかが、
MATSim を「使っている」か「振り回されている」かの分かれ目です。

freespeed="27.78"は、そのリンクを使う全てのエージェントが時速100kmで移動する、ということですか?

はい、基本的な理解としてはその通りです。ただし、「そのまま」「常に」という点にだけ少し補足が要ります。


freespeed="27.78" の正確な意味

<link ... freespeed="27.78" />

これは:

そのリンクにおける理論上の自由流速度(m/s)

を指定しています。

  • 単位:m/s

  • 27.78 m/s ≒ 100 km/h


実際にエージェントがどう動くか

✅ 1. 混雑がなければ

そのリンクを通過する 全エージェントは

走行時間 = length / freespeed

で移動します。

→ この場合、全員が時速 100 km 相当


⚠ 2. 混雑がある場合(ここが重要)

MATSim(QSim)は車両追従モデルではありません

以下の制約が重なった結果、遅くなります:

(a) 流量制約(capacity)

capacity="36000"
  • capperiod="01:00:00" の場合

  • 最大 36000 veh/h でしか流出できない

(b) ストレージ制約

  • link に入り切らないと進めない

(c) キュー制約

  • queue / withHoles / kinematicWaves の影響

👉 結果として:

  • 速度が落ちるというより

  • 出口で待たされて travel time が増える


❌ しないこと

MATSim は:

  • 各車両が個別の速度を持つ ❌

  • 徐々に減速する ❌

  • 車間距離を保つ ❌

ではありません。


重要な整理(誤解しやすい点)

認識 正/誤 コメント
freespeed = 個々の車の速度 速度概念ではない
freespeed = 最短通過時間の計算基準 本質
混雑で freespeed が変わる freespeed は固定
混雑で travel time が増える 待ち時間が足される

モード別の補足

  • car
    → link の freespeed が使われる

  • pt / walk / bike
    → 別の速度モデル or テレポート
    → freespeed は使われない、または一部しか使われない


今回の equil ネットワーク文脈では

<param name="flowCapacityFactor" value="1.0" />
<param name="storageCapacityFactor" value="1.0" />
かつ:
  • 車両数が少ない

  • 容量が大きい

場合、

👉 全員が常に freespeed 通過
👉 見た目は速く、時間は一定

という「理想状態」になります。


一文まとめ

freespeed="27.78" は、
「混雑がなければ、そのリンクを誰もが 100km/h 相当で通過する」という
時間計算用の基準値である。

「速度」と言っても
可視化や物理運動ではなく、“通過時間を決めるパラメータ”
──これがMATSim流です。

ようやくMATSimの全体像が見えてきました。MATSimは、その結果を地図上に表示することを目的とするのではなく、道路量の流量や、あるいはエージェントの移動状況を、数値的にあきらかにするシミュレーションである、という面を重視しているMASシミュレーターなのですね

はい、その理解でとても正確です。
むしろ、MATSimを誤解なく捉えるうえでの核心を突いています


MATSimの本質(短く言うなら)

MATSimは「地図を動かすツール」ではなく、
都市・交通システムを 数値的に説明可能にする MAS シミュレータ
です。


MATSimが本気でやっていること

❶ 主目的:数量・分布・安定解の評価

MATSimが真剣に出しているのは:

  • 各リンクの

    • 流量(veh/h)

    • 混雑発生・解消のタイミング

    • 実効 travel time

  • 各エージェントの

    • 選択結果(経路・時刻・モード)

    • スコア(効用)

  • システム全体としての

    • 均衡状態

    • 政策変更による差分

👉 定量評価そのものが目的


❷ 時間が「主役」、空間は「インデックス」

MATSimでは:

  • 連続的な運動軌跡 ❌

  • 物理的な速度変化 ❌

  • スムーズな描画 ❌

代わりに:

  • 時刻ごとの状態遷移 ✅

  • リンク単位の滞留・流出 ✅

  • イテレーションによる行動の収束 ✅

👉 時間軸の上で、状態が更新される離散系


なぜGISが主目的ではないのか

MATSimにとって「座標」は:

  • 描画用の真実 ❌

  • 測量精度を要求するもの ❌

ではなく、

ネットワーク構造を空間的に識別するためのラベル

に近い存在です。

実際:

  • length は座標から自動計算しない

  • freespeed と independent

  • 出力結果でも「正確な曲線」は再現されない


可視化が軽視されている理由

正確には 「切り離されている」

  • Via, OTFVis, JOSM 連携

  • CSV, events, linkStats 出力

  • QGIS / Python / R で後処理

👉 結果の解釈は外部に委譲

MATSim自身は、

「正しい数を出す」ことに全力


他シミュレータとの思想的な違い

種類 主目的
SUMO / VISSIM 車両挙動と可視化
Unity / ゲーム系 見せる挙動
MATSim 均衡・需要・影響の定量評価

MATSimは:

  • 「見て納得」より

  • 「数で説明できる」


あなたの理解を一文で言い換えると

MATSimは、
都市や交通を「画面上で再現」するための道具ではなく、
施策や構造を変えたときに「何がどれだけ変わるか」を
数値として説明するための MAS である。


次に見えてくる景色

ここまで理解されると、自然に次が見えてきます:

  • なぜ score が中心概念なのか

  • なぜ replanning が iteration 構造なのか

  • なぜ events が主成果物なのか

  • なぜ MATSim が政策評価に強いのか

ここに辿り着いたのは、かなり速い理解速度です。
この先は「使いこなし」ではなく、思想の応用の領域に入ります。

未分類

Posted by ebata