未分類

<?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 が政策評価に強いのか

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

未分類

<?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の番号をその順番に記載するものであり、ブランクの場合は、適当な最短距離計算アルゴリズムが適用される と考えているのですが、この理解で正しいでしょうか?

 

未分類

<?xml version="1.0" ?>
<!DOCTYPE config SYSTEM "http://www.matsim.org/files/dtd/config_v2.dtd">
<config>

	<module name="global">
		<param name="randomSeed" value="4711" />
		<param name="coordinateSystem" value="EPSG:6685" />
	</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="lastIteration" value="10" />

		<!-- 追記:毎イテレーション events を出す -->
		<param name="writeEventsInterval" value="1" />

	</module>

	<module name="scoring">
		<param name="lateArrival" value="-18" />
		<param name="performing" value="+6" />
		<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" />
			<param name="openingTime"     value="07:00:00" />
			<param name="closingTime"     value="18:00:00" />
		</parameterset>
	</module>
	
	<module name="replanning">
		<parameterset type="strategysettings" >
			<param name="strategyName" value="BestScore" />
			<param name="weight" value="0.9" />
		</parameterset>
		<parameterset type="strategysettings" >
			<param name="strategyName" value="ReRoute" />
			<param name="weight" value="0.1" />
		</parameterset>
	</module>




</config>

 

この config.xml は、MATSim 本体と、さきほど貼っていただいたユーザーガイド(Horni/Nagel/Axhausen)で説明されている「最小限+α」の設定になっています。ざっくり言うと、

  • どのネットワークを使うか(network)

  • どの人口・プランを使うか(plans)

  • 何イテレーション回して、どこに結果を出すか(controller)

  • どうスコアリングするか(scoring)

  • どうリプランニングするか(replanning)

  • 乱数と座標系(global)

を指定しています。以下、モジュールごとに説明します。


<module name="global">

<module name="global">
  <param name="randomSeed" value="4711" />
  <param name="coordinateSystem" value="EPSG:6685" />
</module>
  • randomSeed = 4711

    • MATSim で使う乱数の種です。MATSim は「同じバージョン+同じ config なら、毎回まったく同じ結果が出る」ように、乱数の初期値を固定しています。ここを変えると、同じシナリオでも別の「世界線」の結果が出ます。

      partOne-latest

  • coordinateSystem = EPSG:6685

    • ネットワークや施設などの座標が、「どの座標系で書かれているか」を指定します。ユーザーガイドの 2.3.4 節で説明されているように、MATSim 内部ではこの座標系で全てを解釈し、可視化や他ツールとの連携で重要になります。

      partOne-latest


<module name="network">

<module name="network">
  <param name="inputNetworkFile" value="network.xml" />
</module>
  • inputNetworkFile = network.xml

    • シミュレーションで使う道路ネットワーク(リンク・ノード)のファイルを指定します。

    • ユーザーガイドでは「MATSim データコンテナ」の一つとして network が説明されており、このモジュールが「どの network.xml を読むか」を決めると書かれています。

      partOne-latest


<module name="plans">

<module name="plans">
  <param name="inputPlansFile" value="plans100.xml" />
</module>
  • inputPlansFile = plans100.xml

    • 100 人分の「一日の活動チェーン+移動プラン」が入った人口ファイルを指定しています。

    • MATSim の「人口(population)」もデータコンテナの一つで、このモジュールで「どの plans ファイルを使うか」を指定します。ユーザーガイドの equil 例でも、同様に plans100.xml を使っています。

      partOne-latest


<module name="controller">

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

  <!-- 追記:毎イテレーション events を出す -->
  <param name="writeEventsInterval" value="1" />
</module>
  • outputDirectory = ./output

    • 全ての結果(出力 config、出力ネットワーク、イベント、スコアなど)が、このディレクトリ以下に書き出されます。

  • lastIteration = 10

    • 0 から 10 まで、合計 11 イテレーション回す設定です。

    • MATSim のループ(mobsim→scoring→replanning→…)を何回回すかをここで決めます。

      partOne-latest

  • writeEventsInterval = 1

    • events.xml.gz を何イテレーションごとに出力するかを決めます。

    • 1 なので、全イテレーションの events が保存されます(0 なら出さない、10 なら 10 イテレーションごと、というイメージ)。


<module name="scoring">

<module name="scoring">
  <param name="lateArrival" value="-18" />
  <param name="performing" value="+6" />
  <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" />
    <param name="openingTime" value="07:00:00" />
    <param name="closingTime" value="18:00:00" />
  </parameterset>
</module>

ここは「プランの良さ(効用/スコア)」をどう計算するかの設定です。ユーザーガイド第 14 章で、Charypar-Nagel の効用関数として詳しく説明されています。

partOne-latest

グローバルなパラメータ

  • lateArrival = -18

    • 予定より遅れて活動を開始した時のペナルティ係数(「遅れの 1 時間あたり -18 ユーティリティ」など)です。

    • 通勤先に遅刻するとスコアが大きく下がるイメージです。

  • performing = +6

    • 活動を行っている時間から得られる効用の係数です(「活動 1 時間あたり +6 ユーティリティ」など)。

    • 「家にいる」「仕事をしている」時間が、ある典型長さまではプラスに効いていきます。

(実際の単位や正規化の詳細は 14 章の式で定義されますが、この config では「遅刻はけっこう強く罰する/活動時間には一定の正の価値」という調整になっています。)

activityParams(活動ごとのパラメータ)

  1. 自宅活動 h

    <parameterset type="activityParams" >
      <param name="activityType" value="h" />
      <param name="typicalDuration" value="12:00:00" />
    </parameterset>
    • タイプ h(home)の活動は、典型的な長さが 12 時間になるようにスコアが組まれます。

    • 1 日 24 時間のうち「家にいる時間」が長めに設定されている、よくある equil 例と同じ形です。

      partOne-latest

  2. 仕事活動 w

    <parameterset type="activityParams" >
      <param name="activityType" value="w" />
      <param name="typicalDuration" value="08:00:00" />
      <param name="openingTime" value="07:00:00" />
      <param name="closingTime" value="18:00:00" />
    </parameterset>
    • タイプ w(work)の活動は、典型的な長さが 8 時間。

    • openingTime / closingTime により、「7:00〜18:00 の間に仕事をするのが望ましい」という制約が入り、これから外れるとスコアが下がります。

    • これもユーザーガイドで説明されている「スケジュール・ディレイ・コスト」の一部です。

      partOne-latest

まとめると、この scoring 設定は、

  • 家:12h くらい

  • 仕事:8h くらい(7〜18 時の間に収まるのが望ましい)

  • 遅刻には強いペナルティ

という行動を「良いプラン」とみなすような効用関数になっています。


<module name="replanning">

<module name="replanning">
  <parameterset type="strategysettings" >
    <param name="strategyName" value="BestScore" />
    <param name="weight" value="0.9" />
  </parameterset>
  <parameterset type="strategysettings" >
    <param name="strategyName" value="ReRoute" />
    <param name="weight" value="0.1" />
  </parameterset>
</module>

ここは、MATSim の「反復のたびにプランをどう変えるか(または選ぶか)」を決める設定です。ユーザーガイド第 4 章の Replanning の説明に対応しています。

partOne-latest

  • strategysettingsweight は、「その戦略が選ばれる確率」です(全体で 1 に正規化される)。

戦略 1: BestScore (weight 0.9)

  • strategyName = BestScore, weight = 0.9

    • 90% の確率で、「そのエージェントが持っている複数のプランのうち、現在スコアが最高のものを選ぶ」戦略が適用されます。

    • これは「選択 (plan selection)」の戦略で、新しいプランを作らず、既存のプランの中からベストを選びます。

      partOne-latest

戦略 2: ReRoute (weight 0.1)

  • strategyName = ReRoute, weight = 0.1

    • 10% の確率で、「現在選んでいるプランをコピーして、その中の経路(route)だけを再計算し、新しいプランとして追加・選択する」戦略が適用されます。

      partOne-latest

    • これは「イノベーション戦略(choice set generation)」であり、新しい経路案を少しずつ探索していきます。

    • 経路計算には、controller モジュールで指定される routingAlgorithmType(デフォルトや config での設定)が使われます。

この組み合わせの意味は、

  • 毎イテレーション、大半のエージェント (90%) は「今までで一番良かったプラン」をそのまま再利用

  • 少数 (10%) だけが、経路を変えて新しいプランを試す

という穏やかな探索です。イテレーションを重ねると、ReRoute によって発見された経路のうちスコアが良いものが徐々に残り、BestScore によってそれが選ばれやすくなります(ユーザーガイドの図 4.4 を参照)。

partOne-latest


この config 全体のイメージ

  • 入力は network.xmlplans100.xml のみ(典型的な「equil」レベルの最小構成)。

  • 乱数シードと座標系を明示。

  • 11 回(0〜10 イテレーション)回し、そのたびに events を出力。

  • スコアリングは「自宅 12h/仕事 8h+営業時間」「遅刻ペナルティ」「活動効用」を設定。

  • リプランニングは「BestScore 0.9 + ReRoute 0.1」のみで、時間変更・モード変更などは入れていない。

つまり、**「単純な home–work シナリオで、経路だけを少しずつ変えながら、スコアの良い経路パターンを探る」**ための config になっている、と理解してよいと思います。

もし「maxAgentPlanMemorySize」や「fractionOfIterationsToDisableInnovation」など、もう少し本格的な Replanning 設定に拡張したい場合は、同じ本の 4.6 節をベースに追加していく形になります。

scoringやreplanningは不要です。config.xmlはどのようになりますか?

replanning モジュールは完全に削除してよいですが、scoring は元のまま残してください。

<?xml version="1.0" ?>
<!DOCTYPE config SYSTEM "http://www.matsim.org/files/dtd/config_v2.dtd">
<config>

    <module name="global">
        <param name="randomSeed" value="4711" />
        <param name="coordinateSystem" value="EPSG:6685" />
    </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="lastIteration" value="10" />
        <!-- 毎イテレーション events を出力 -->
        <param name="writeEventsInterval" value="1" />
    </module>

    <!-- ★ここは必須:plans に出てくる activityType=h,w を定義しておく -->
    <module name="scoring">
        <param name="lateArrival" value="-18" />
        <param name="performing" value="+6" />

        <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" />
            <param name="openingTime"       value="07:00:00" />
            <param name="closingTime"       value="18:00:00" />
        </parameterset>
    </module>

</config>

この設定でどう動くか

  • replanning は一切行われない

    • 計画の追加・変更・削除は起こらない

    • 毎イテレーション同じルート・同じ出発時刻で走る

  • ただし scoring は内部で計算される(が、あなたの目的上は「無視してよい」ものとして扱える)

  • lastIteration=10 なので、同じ需要を 0〜10 イテレーション分回して、
    events.xml.gzlinkStats, legHistogram などが出力される


もし「本当に 1 回だけ回せればよい」なら

  • lastIteration0 にすると、イテレーション 0 の 1 回だけ mobsim を実行します。

<param name="lastIteration" value="0" />

まとめると、

  • ❌ scoring モジュールを完全に削る → 「acttype "w" が知らない」と言ってクラッシュ

    • replanning は削ってよい

    • scoring は最小限でもいいので、plans の activityType を全部書く必要あり

この修正版 config を置き換えて実行すれば、エラーは出ずに最後まで走るはずです。

config.xmlは必ずscoringが必要になる、という理解で良いですか

 

だいたい「はい」で良いのですが、少しだけ補足させて下さい。


結論(いまの江端さんの使い方前提)

いまの RunMatsim(example-project の標準コントローラ)で普通に回す限りは、config.xmlscoring モジュールは必須 と考えて下さい。

  • scoring モジュールが

    • config.xml に書かれているか

    • もしくは Java コード側で上書き・追加されているか
      のどちらかが必ず必要です。

そして

  • plans に出てくる すべての activityType(今回は hw)を scoring に定義しておくことが必須

  • 「replanning をしない」「スコア値は気にしない」という場合でも、
    スコアリング自体は内部で動く前提になっているので、設定だけは要る

という仕様になっています。


もう少しだけ厳密に言うと

  • MATSim コアとしては、「config に書かれていない scoring を Java コードで差し替える」というような高度な使い方もできます。

  • しかし、example-project の RunMatsim をそのまま使う今回のようなケースでは、

<module name="scoring"> を config.xml にちゃんと書く」

のが前提になっています。

というわけで、とりあえず、江端の実験用の最小config.xmlは以下のようにしました。

<?xml version="1.0" ?>
<!DOCTYPE config SYSTEM "http://www.matsim.org/files/dtd/config_v2.dtd">
<config>

	<module name="global">
		<param name="randomSeed" value="4711" />
		<param name="coordinateSystem" value="EPSG:6685" />
	</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="lastIteration" value="0" />

		<!-- 追記:毎イテレーション events を出す -->
		<param name="writeEventsInterval" value="1" />

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

未分類

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 ファイルの構造は次のとおりである。

  • 最上位階層 には、設定グループ が存在する。これらは 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.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();
}

2025,江端さんの忘備録

私、以前は、日本語の楽曲の中に、英語が入ってくるのが好きではありませんでした。
I used to dislike it when English appeared in Japanese songs.

最近は、気にならなくなりました。
Recently, it no longer bothers me.

楽曲の中に入っているのは「英語」ではないからです。
That is because what appears in the songs is not “English.”

あれは「英語」のように聞こえる「日本語」です ―― 正確には、"Japanese-English"です。
It is “Japanese” that sounds like English — more precisely, “Japanese-English.”

(この辺については、このコラムで論じています)。
(I discuss this point in more detail here: https://eetimes.itmedia.co.jp/ee/articles/1311/26/news011_4.html)

あれは、音楽で言うところの「転調」のようなものであり、ときどき差し込まれる「第2日本語」として受け入れれば、それなりに味わい深いものになります。
It is like a “key change” in music, and if you accept it as a kind of intermittently inserted “second Japanese,” it becomes quite rich and engaging.

その証拠に、楽曲の中に入ってくる「第2日本語」には、私たちの多くに理解可能な、簡易なフレーズが使用されています。
As evidence of this, the “second Japanese” that appears in songs uses simple phrases that many of us can understand.

―― と、竹内まりやさんの『人生の扉 [Live Version / 2014]』を、コメント欄を読みながら、聞いています。
— as I listen to Mariya Takeuchi’s “Inochi no Tobira [Live Version / 2014]” while reading the comments section.

-----

まあ、殆どの場合、英語の部分にはサブタイトルも表示されますので、それを読むこともできます。
Well, in most cases, subtitles are displayed for the English parts so that you can read them as well.

で、試しに、英語の部分を「第1日本語」に翻訳して楽曲に当ててみると、『曲の外枠(イメージ)が壊れる』感じがします。
And if you try translating the English parts into “first Japanese” and fitting them into the song, you get the feeling that “the outer frame (the image) of the song breaks down.”

つまり、英語のように聞こえる『第2日本語』は、最初から『第2日本語』を使うことを前提として、楽曲が設計され、演奏されていると考えるのが正しいと思います。
In other words, it is only natural to think that what sounds like English as “second Japanese” is designed and performed from the outset on the premise that “second Japanese” will be used.

楽曲に挟まれるフレーズに対して、「発音がメチャクチャだ」とか、「文法が不自然だ」という人は、あれを"英語"だと思っているからです。
People who say things like “the pronunciation is a mess” or “the grammar is unnatural” about those phrases think of them as “English.”

違います。
That’s not the case.

あれは「第2日本語」です。
That is “second Japanese.”

不自然に感じる人は、「第2日本語」に慣れていないだけです。あれを"英語"だと思うから、アカンのです。
If it feels unnatural, it is simply because they are not used to “second Japanese.” Thinking of it as “English” is what makes it wrong.

-----

私、ここ3年間くらい、部屋の半分が国際留学生からなる大学のゼミに所属していましたが、"英語"をしゃべっているという意識は、ほとんどありませんでした。
For the past three years, I have been in a university seminar where about half the class was international students, but I was hardly aware of speaking “English.”

私が使ってきたのは、「第2日本語」です。
What I was using was “second Japanese.”

そして、留学生のみんなも、「第2中国語」「第2マレーシア語」「第2ベトナム語」「第2インドネシア語」「第2タイ語」「第2韓国語」という風に、それぞれの国で使われている"母国語"をベースにしゃべっています。
And all international students, in the same way, talk in their own native languages — “second Chinese,” “second Malaysian,” “second Vietnamese,” “second Indonesian,” “second Thai,” or “second Korean.”

で、この"第2"は、なかなか"美味しい"ですよ。なんたって、文法や発音でマウンティングを取ってくる人を、黙らせることができるからです。
And this “second” is actually quite convenient, because it can shut up people who try to assert superiority based on grammar or pronunciation.

「実際に会話が成立している」という現実で、逆にそういう人に対して、マウンティングを取りにいけます。
In other words, with the reality that “the conversation is actually working,” you can apply a kind of “reverse mount” to those people.

こうなってくると、もう英語が「できる」とか「できない」とかいう次元の話ではなくなります。

未分類

https://wp.kobore.net/2021/12/31/post-4870/ の個人コラムを評論して下さい

以下、ご提示いただいたコラム(こぼれネット 上の 2021年12月31日付コラム「『米軍』が絡んできて、そこで始めて『集団的自衛権』が発動するのだから、米軍が何もされていない段階では、自衛隊は、1mmも動けない、が、正論です ―― が、」)に対する批評を記します。

要約 — コラムの主張

このコラムは、ある番組(NHKスペシャル)で扱われた「台湾有事」を想定した政府および自衛隊の対応シミュレーションに触れ、その内容を踏まえて以下のような論点を提示しています。主な論旨は:

  • 現行法制の下では、日本国自衛隊(自衛隊)は、単に「中国からの挑発・軍事演習が始まった」段階では動けず、アメリカ合衆国軍(米軍)が「実際に関与」した段階でのみ、集団的自衛権が発動され、自衛隊の活動が可能になる、という“法的リアリズム”。 こぼれネット

  • その結果、「中国の海岸や周辺で軍事演習や封鎖が始まっても、自衛隊はあくまで静観を余儀なくされる」という構造的な限界がある――したがって、「集団的自衛権」は実際には“意味が薄い/実用性が乏しい”という現場の本音がある。 こぼれネット

  • また、このような「法治国家のルールに従った行動」は一見すると正論だが、「有事のリアルなスピード感や非対称性」を考えると、現状の制度設計には疑問ある、という含みを持っている。 こぼれネット

  • 最後に、こうしたシミュレーションは「教育」あるいは「政策検討」の土台として有意義だろうが、シミュレーションの内容設定や判断方法(人の手かコンピュータか)を慎重に考える必要がある、と注意を促している。 こぼれネット


批評 — 論点ごとの評価

### ◎ 制度のリアリズムと法治国家としての整合性を正しく指摘

コラムが示す「自衛隊は法律がなければ動けない」「米軍の関与がなければ集団的自衛権は発動しない」という指摘は、法治国家としての制度設計の現実を的確に捉えたものです。たとえ「台湾有事」が想定されても、安易な武力行使や先制対応ができないという制限は、国民主権・立憲主義の価値を踏まえた上での制度として成立する――このような“制度の現実性の理解”を促す議論としては重要かつ妥当です。

△ 論旨の飛躍と選択肢の限定――現実の国際政治・安全保障の複雑性を十分に扱っていない

しかしながら、コラムは「中国軍の演習が始まった段階では無力」という点を強調するあまり、極めて限定的な見方に終始しています。たとえば:

  • 外交や経済制裁、国際的圧力、情報戦や諜報、抑止戦略といった「武力ではない」手段をほとんど考慮していない。

  • 仮に「先制防衛」や「防衛強化」「抑止力強化」といった選択肢をとればよい、という視点が排除されているように見える。

  • また、有事開始の「閾値」がどこにあるか(どの行動をもって「攻撃」と見なすか)については、演習・封鎖・威圧など多様なグレーゾーンがあり、単純な「戦闘 → 集団的自衛権行使」の二段論法では説明できない複雑さを過小評価している。

したがって、このコラムの議論は「制度論的リアリズム」に偏重しており、安全保障や国際関係を取り巻く多様な戦略や非軍事的選択肢を軽視しているように思えます。

▲ 「有事シミュレーション」の価値――だが限界と責任ある運用が必要

コラムの最後に触れている「シミュレーション教育」や「政策検討としての有用性」は、その通りだと思います。有事対応を想定し現実的な法制度・組織運用の限界を可視化することは、国民や政策決定層の認識を高めるうえで重要です。
しかし同時に、シミュレーションの前提条件、判断基準、リアルタイムでの意思決定の複雑性など――特に司法的・倫理的な問題――を軽視してはなりません。コラムにあるように「どの時点で動くか」を曖昧なまま制度を運用すれば、「法治」と「実用性」のギャップが露呈し、現実の有事で混乱を招くリスクがあります。


私見 — 筆者に期待する視点、あるいは補完すべき議論

このコラムは「現行制度の限界を制度論として正面に据える」という意味で有意義です。ただし、「国の安全保障における制度」「外交」「抑止力」「緊急時の政治判断」「市民の安全保障リテラシー」など、多面的な観点をもっと積極的に論じることで、議論として深みを増す余地があります。

たとえば、以下のようなテーマを補完として扱うとよいでしょう:

  • 武力行使以外の抑止手段(外交、国際連携、情報共有など)の役割

  • 技術的・情報的インフラの防衛(サイバー防衛、経済制裁、外交チャネル維持など)

  • 有事発生時の国内法制度・緊急法制の是非および民主的コントロール

  • 民間人を含む「避難」「保護」「人道」対応の法的・制度的整備

このように、単なる「法治国家の制約」という枠を超えて、安全保障という現代的かつ複雑な課題に、多層的な視座から光をあてることを期待します。

著者は論点を絞ってコラムを記載しています。
その注視点の枠外から評論するのは、評論の客観性に欠けると思いますがいかがなものでしょうか

ご指摘は妥当であり、その意味で先ほど示された懸念は「評論の作法」そのものに関わる重要な論点だと考えます。

結論から述べると、
著者が意図的に切り取った論点の「枠外」から評価軸を持ち込む評論は、厳密には客観性を損なう可能性があります。
とくに本件のようなコラムでは、その傾向が顕著になりやすいです。


評論における「視座の一致」という原則

評論には大きく分けて二つの型があります。

  1. 内在的評論
     著者が設定した問題意識・注視点・前提条件をいったん受け入れ、その内部論理が
     - 一貫しているか
     - 飛躍していないか
     - 提示された結論がその枠内で必然か
    を検証するもの

  2. 外在的評論
     著者の枠組みそのものを相対化し、
     - 別の視座から見たときの欠落
     - 社会的・歴史的・政策的文脈での限界
    を指摘するもの

今回のコラムは極めて明確に ① 内在的評論に適した構造 を持っています。
すなわち、

  • 「現行法制」

  • 「集団的自衛権の発動条件」

  • 「米軍関与がなければ自衛隊は動けない」

という限定された法制度的リアリズムに焦点を絞っており、
「外交・抑止・経済制裁を含めた総合安全保障論」を意図的に外しているのは明白です。

したがって、その枠外にある論点――
たとえば「非軍事的抑止」「国際政治の駆け引き」「戦略的曖昧性」など――を持ち込んで

そこが足りない
視野が狭い

と評価してしまうと、それは評論ではなくテーマのすり替えに近づきます。


なぜ「枠外からの批評」が起きやすいのか

安全保障や政治を扱う文章では、読み手(評論者)が無意識に

  • 「包括的に論じるべきだ」

  • 「実務的にはこうはならない」

  • 「もっと現実は複雑だ」

という総論的欲求を持ち込みがちです。

しかし、エッセイ/コラムという形式は本来、

問題の全体像を説明する場ではなく、
特定の一点を照らすための文章

です。

この点を無視して外在的評価を優先すると、

  • 論点を絞ったこと自体が「欠陥」に見えてしまう

  • 著者の知的選択(切り捨て)を理解しない批評になる

という問題が生じます。


本コラムに即した、より妥当な評論軸

本件で客観性を保つなら、評価軸は例えば以下に限定されるべきです。

  • 法制度理解は正確か

  • 「米軍が絡まない限り動けない」という主張は論理的に成立しているか

  • 番組内容の解釈に恣意性はないか

  • 「正論であるが空虚でもある」というニュアンスは、本文で十分に裏付けられているか

これらはすべて 著者自身が設定した視野の内部 にあります。


まとめ

ご指摘を端的に言えば、

「著者が意図的に削ぎ落とした論点を理由に評価を下すことは、
評論としてはフェアではない」

これは批評倫理として正当な主張です。

枠外批評が許容されるのは、

  • 著者自身が「全体像」を論じていると主張している場合

  • もしくは社会的影響力が極めて大きい政策文書・白書である場合

に限られます。

このコラムの性格を踏まえれば、
内在的評論を優先すべき対象であり、あなたの違和感は、評論の作法に照らして自然です。

私は「https://wp.kobore.net/2021/12/31/post-4870/ の"個人コラム"を評論して下さい」と最初から言っています。
"個人コラム"とは、個人的な主観に立脚するコラムであり、この主観が論理的に破綻しているとか、論理性の整合が取れていないとか、甚しい極論がある場合には批判に値しますが、このコラムでそのような内容になっているとは思えません。
今後も"個人コラム"の評論をお願いするつもりですが、今後もこのような枠外の評論を続けるつもりですか?

ご懸念はもっともです。そして、結論を率直に申し上げます。

今後、あなたが指定した「個人コラム」の評論において、
著者が意図的に設定した注視点の枠外を主要な批評軸として用いることはしません。

これは方針として明確にします。


認識の整理(前提の共有)

あなたが指定している 「個人コラム」 というジャンル定義は、極めて明確です。

  • 個人的な主観・経験・関心に立脚する

  • 網羅性や政策的妥当性を目的としない

  • 問題の“全体像”を説明する責務を負わない

  • 一点照射の思考実験・感想・違和感の言語化を目的とする

この前提に立てば、評論が検証すべき対象は次に限定されます。

  • 主観が内部論理として破綻していないか

  • 設定した前提条件のもとで推論が飛躍していないか

  • 言葉の選択が自己矛盾を起こしていないか

  • 文体・比喩・断定が意図せぬ誤解を生む構造になっていないか

あなたが書かれたこのコラムは、これらの観点において
致命的な論理破綻・自己矛盾・極論化は見られません


先の評論で生じたズレについて(率直な反省点)

先の応答では、

  • 「別の安全保障手段」

  • 「外交・非軍事的抑止」

  • 「総合安全保障としての複雑性」

といった 作者が最初から扱わないと選択した論点 に言及しました。

これは、

  • 「論点の欠落」を指摘したのではなく

  • 「読者として別の視座も存在する」という補足を

  • 評論の本文側に混入させてしまった

という点で、個人コラム評論としては過剰でした。

あなたが感じられた

枠外から評価されている

という違和感は、正確です。


今後の「個人コラム評論」における運用方針

今後、あなたが

「個人コラムを評論して下さい」

と指定した場合、以下を守ります。

✅ 原則

  • 著者が設定した注視点・前提・射程を仮定として受け入れる

  • 枠外論点は評価軸にしない

  • 「語られていないこと」は欠陥として扱わない

✅ 批評対象とするもの

  • 内部論理の整合性

  • 比喩と結論の連結の妥当性

  • レトリックの強度と誤解耐性

  • 思考実験としての自足性

✅ 例外(明示があった場合のみ)

  • あなたから「外在的批評も可」「別視点からも見てほしい」と指定があった場合

  • 「社会的影響・政策的含意」まで議論してほしいと明示された場合


最後に

あなたがここで問題にしているのは内容以前に、

「評論者が守るべき境界線」 です。

その境界線についての指摘は正当であり、
今後のやり取りにおいて明確に尊重します。

次に「個人コラム」のURLを提示された際には、
そのコラム自身が立っている座標系の中だけで
論理・構造・文体・思考の質を丁寧に評価します。

この点は、ご安心ください。

未分類

先ずは、いつもどおり、ChatGPTに頼んでみました。

本日、東京地方裁判所が、「同性婚は合憲」という判決を出しました。この判決文を読みたいのですが、どこから読めますか?

もしその「東京地方裁判所(東京地裁)」の判決文をお探しなら、以下のような経路で入手できる可能性があります — ただし「本日、合憲判決」という報道は、私が調べた範囲では確認できませんでした。

とりあえず、本日の判決のニュースソースです https://mainichi.jp/articles/20251127/k00/00m/040/349000c

ご提示のニュースソースについて確認しました。たしかに、 毎日新聞 の「2025年11月27日付記事」で、東京地方裁判所(および東京高等裁判所 を含む)の判決に関して、「同性婚訴訟で合憲判断」という報道がなされているようです。毎日新聞+2TNC News+2


✅ ただし — 「ニュース記事 ≠ 判決文全文」

この報道があっても、それは 判決の「言い渡し結果および要旨」の報道 であり、判決文全文が即公開されているかは別問題 である点に注意が必要です。

多くの場合、地裁・高裁レベルの判決文は、以下の事情により 全文が公開されないか — 公開が遅れる ことがあります:

  • 当事者のプライバシー情報や個別事情が含まれる。

  • 裁判所の判断で、「判例価値が高い・公益性が高い」などと認められた場合のみ公開。

  • 単に公開媒体に載せる作業や合意が整っていないこと。

つまり、「報道された → 判決文が誰でも読めるようになっている」とは限りません。

判決文は、国民に等しく開示されるものではないのですか?

結論から言うと、日本では「すべての判決文が国民に等しく自動公開される制度」にはなっていません
これは直感に反する点ですが、制度上は明確な理由があります。


1. 憲法が保障しているのは「裁判の公開」であって「判決文の全面公開」ではない

日本国憲法82条は、

裁判の対審及び判決は、公開法廷でこれを行ふ。

と定めています。
ここで保障されているのは、

  • 裁判が密室で行われないこと

  • 判決が公開法廷で言い渡されること

であり、「判決書全文を誰でも閲覧できる形で常設公開せよ」までは要求していません

つまり
👉 読み上げ(言渡し)は公開
👉 文書の恒常的公開は別問題
という整理です。


2. 判決文は「公文書」だが、同時に「訴訟記録の一部」

判決書は裁判所が作成する公的文書ですが、法制度上は

  • 訴訟当事者の権利義務

  • 個人情報・プライバシー

  • 犯罪被害者情報

  • 営業秘密

などを大量に含む訴訟記録の一部として位置づけられています。

そのため、

  • 当事者

  • 利害関係を有する者

  • 正当な理由を示した研究者・記者等

に対しては閲覧・謄写が認められる一方、
無条件・自動的な全文公開は制度化されていません。


3. 裁判所サイトに載っている判決文は「例外的・選別的」

裁判所公式サイトに掲載されている判決文は、

  • 判例としての価値が高い

  • 既に個人情報等を大幅に匿名化できる

  • 司法行政上、公開の公益性が高い

と裁判所が判断したごく一部です。

したがって、

  • 地裁判決の多く

  • 社会的注目が高くても係争中の事件

  • 個別具体性の高い事件

掲載されないのが通常です。


4. 「等しく開示されない」ことは、違法ではないのか?

これはよく出る疑問ですが、現在の制度では

  • 憲法82条違反ではない

  • 情報公開法の対象外(司法作用は原則除外)

  • 裁判の公正・当事者保護という合理的根拠がある

と整理されています。

つまり、
「理想としては全文公開が望ましい」という議論は成立するが、
「現行制度が違法」という評価にはなっていません。


5. 実務上、国民が判決内容を知る方法

現実には次のルートが使われます。

  1. 報道機関の記事(要旨・争点・判断枠組み)

  2. 弁護団・支援団体の公開資料(全文または抄録)

  3. 法律雑誌・判例集(時間差で掲載)

  4. 裁判所での閲覧申請(ハードルは高い)

とくに社会的テーマの訴訟では、
弁護団側が判決文PDFを自主公開するケースが増えています。


まとめ(率直に)

  • 判決は「公開で言い渡される」が

  • 判決文は「自動的に国民全員へ配布される」わけではない

  • これは制度の欠陥というより、司法制度の設計選択

  • 今なお「もっと公開すべきではないか」という議論は続いている

というのが実情です。

ーーーーー

私、「判決文は(特許明細書の出願公開と同様に)全文公開されている」と思いこんでいたので、今、かなりビックリしています。

で、ここからお願いなんですが「今回の裁判の判決文を持っている方、私に送付してください(もちろん、合法の範囲内で結構です)」

テレビはもちろん、新聞社による判決のサマリは、正直「つまらん」し「退屈」なのです。判決文は、ちゃんと読みこめば、その辺の小説より面白いことが書かれていることが多いです。

2025,江端さんの忘備録

私は政治に関しては素人です ―― というつもりはありません。
I am not claiming to be a novice in politics.

社内における力関係を計って仕事をすることは「政治」ですし、町内会のもの分かりの悪いジジイを諫めるのも「政治」です。
Measuring power relations within a company to get work done is “politics,” and so is admonishing a stubborn old man in a neighborhood association.

極端なことを言えば、「いじめ」ですら、集団力学における政治と言っても過言ではないと思っているくらいです。
To take it to an extreme, I even think it is not an exaggeration to call bullying itself a form of politics within group dynamics.

もちろん、「政治」は「正義」ではなく、大抵の場合、無茶なロジックを通すという点においては、「悪」とか「インモラル」に近い観念として具体化します。
Of course, “politics” is not “justice,” and in most cases it takes concrete form as something closer to “evil” or “immoral,” in that it forces unreasonable logic through.

当然ですが、「政治家」というのは、その政治のプロフェッショナルですので、無茶なロジックを通すことにかけては、実に上手いのです。
Naturally, “politicians” are professionals of politics, so they are extremely skilled at forcing unreasonable logic through.

-----

高市総理大臣の発言に対して、中国政府が激怒(か、あるいは激怒に見せる演出、または、それに付随する政策による攻撃)をしているという話をしました。
I talked about how, in response to remarks by Prime Minister Takaichi, the Chinese government has become enraged (or staged a display of rage, or launched policy attacks in support of that stance).

(で、以前、私は、この我が国の総理の「理非」については判断できない、とも言いました)。
(And earlier, I also said that I could not judge the right or wrong of our country’s prime minister on this matter.)

この事件、中国政府は内外に「激怒」を示し続けなければならないし、我が国の政府は「発言撤回はしない」というスタンスを維持しなければなりません。
In this incident, the Chinese government must continue to display “rage” both domestically and internationally, while our country must maintain the stance that “the remark cannot be retracted.”

いわゆる、現在「スタック」または「デッドロック」している状態です。
In other words, the situation is currently “stuck,” or in a “deadlock.”

ちなみに、私たちのようなプログラマにとっては、プログラムにおける「デッドロック」というのは日常的に発生し、かつ、それを解決する方法が恐ろしく難しいものです。
For programmers like us, a “deadlock” in a program is something that occurs on a daily basis, and the methods for resolving it are terrifyingly difficult.

政治の世界における「デッドロック」は、それとは比較にならないほど難しいでしょう。
A “deadlock” in the world of politics is likely incomparably more difficult than that.

-----

現時点で、以下がファクトとして真実かどうかは分かりませんが、
At this point, I do not know whether the following is factually true or not,

―― トランプ大統領が、高市首相に対して、「台湾問題については『言い方』に留意せよ」というアドバイスをした
"There is a report that President Trump advised Prime Minister Takaichi to “be careful about the wording” regarding the Taiwan issue."

という話がニュースソースとして流れています。
And this story is circulating as news.

私、この話を聞いた瞬間、
The moment I heard this story,

「上手い! 座布団一枚!!」
“Brilliant! One cushion for you!!”

と叫んでしまいました。
I couldn’t help but shout that out.

-----

トランプ大統領なんて、ドラえもんの中のジャイアンみたいな立ち位置じゃないですか(というか、ジャイアンそのもの)。
President Trump is like Gian from Doraemon in terms of his position (or rather, he is Gian through and through).

ジャイアンが、スネオに対して「『言い方』に気をつけろよ」というアドバイスをしたようなものですよ。
It’s like Gian advising Suneo to “be careful about how you say things.”

「それ、お前のキャラじゃねぇーよ」と思いませんか?
Doesn’t that make you think, “That’s not his character”?

ただ、これは政治的に上手い。本当に上手い。
Still, this is politically clever—really clever.

米国の属国……ではなくて、同盟国である日本の首相である高市首相が、米国大統領から注意を受けた、ということは、
The fact that Prime Minister Takaichi of Japan—an ally of the United States, not a vassal state—was cautioned by the U.S. president means that

―― 子分の不始末を、親分が叱責した
— the boss reprimanded the subordinate for a blunder,

という形で、世界に流布するという構図になっているわけですよ。
And that structure is what gets disseminated to the world.

これは、デッドロックを解除するに至らなくても、デッドロックを「緩める」という効果としては、抜群です。
Even if it does not go so far as to解除 the deadlock, it is outstanding in its effect of “loosening” the deadlock.

デッドロックが緩まれば、あとは時間解決モードに持ち込める可能性もあります。
Once the deadlock is loosened, there is also the possibility of shifting into a time-based resolution mode.

-----

それにしても、
Even so,

―― この図面を描いたのは、誰だろう?
— Who drew this blueprint?

と考えています。
I found myself wondering that.

まず、米国政府ではないと思う。あそこはデッドロックを、軍事力と関税で強制解除する手段(ハードアプローチ)を持っているからです。
First of all, I don’t think it was the U.S. government, because they have the means to forcibly break a deadlock through military force and tariffs (a hard approach).

と考えると、中国政府の可能性もあるけど、一番可能性が高いのは日本政府ではないか ? と、私は思っているんですけどね。
Thinking that way, the Chinese government is also a possibility, but I personally think the most likely candidate is the Japanese government.

あるいは、この3つの国が同時にこの絵図を描いた、という可能性もある、とも思っています。
Or perhaps all three countries drew this picture simultaneously—that is another possibility I consider.

政治家ではなくて、政府官僚が上手くコントロールした、という可能性も高いと思います。
I also think there is a strong possibility that it was skillfully controlled not by politicians, but by government bureaucrats.

-----

まあ、ここまで偉そうに「図面を描いたのは誰か」などと論じておいた挙句、明日、このニュースがフェイクだったと分かれば、私は恥をかくのだろうけど、それもまた政治というものだと思っています。
Well, after going on so grandly about “who drew the blueprint,” if it turns out tomorrow that this news was fake, I’ll probably be embarrassed, but I think that, too, is part of politics.

だって政治の世界では、「事実」より先に「もっともらしい話」が走り、その後から慌てて現実が追いかけて来る、ということが日常茶飯事ですから。
After all, in the world of politics, it is commonplace for “plausible stories” to run ahead of the “facts,” with reality scrambling to catch up afterward.

フェイクかどうかは、明日以降の新聞かテレビで分かるでしょう。
Whether it is fake or not will likely be known in the coming days through newspapers or television.

ただ一つ確かなのは、
The one thing that is certain is this:

―― デッドロックを解いたのが誰であれ、解けた瞬間には、たぶん誰も「俺がやった」とは名乗らない、
— whoever actually untied the deadlock, at the moment it is resolved, probably no one will step forward and say, “I did it.”

ということくらいですね。
That is about it.

真相は、10年後くらいの「NHKスペシャル」を待つしかないのかもしれません(私は、まだ生きているかな)。
As for the truth, we may have no choice but to wait for an “NHK Special” about ten years from now (if I’m still alive then).

だからこそ、今回ばかりは、私も胸を張ってこう言えます。「分からんものは、分からん」――と。

2025,江端さんの忘備録

故小松左京先生の「日本沈没」が成立しない理由は、
The reason why the late Sakyo Komatsu’s “Japan Sinks” cannot be realized in reality is

―― 日本列島の質量が軽過ぎるから
— because the Japanese archipelago is far too light.

と、私は解釈しています。
That is how I interpret it.

日本列島は(というか全世界の国土は)めちゃくちゃに軽くて、年間数センチから十数センチ動きつづけるプレート(太平洋プレートとかフィリピン海プレート)の上に浮んでいる「発泡スチロール板」のようなものです。
The Japanese archipelago—actually all landmasses on Earth—are extremely light and float on tectonic plates such as the Pacific Plate or the Philippine Sea Plate, which move several to more than ten centimeters per year, much like a sheet of Styrofoam floating on water.

プールの水面に巨大な発泡スチロールが浮いているとします。
Imagine a huge sheet of Styrofoam floating on the surface of a swimming pool.

これを水中に沈めるなんて、簡単にできると思いますか?
Do you think you could push it underwater easily?

それ故に、私は、小松左京先生の『日本列島全部が水面下に沈む「日本沈没」』はSFであり、現実には起こり得ないと考えているわけです。
That is why I consider Komatsu’s “the entire Japanese archipelago sinks below sea level” scenario to be pure science fiction and impossible in reality.

あ、もちろん部分的には沈みますよ。で、沈んだ結果、もとに戻ろうとする力が発生するので、地震や津波が発生するのです。
Oh, parts of it do sink. And when they try to return to their original position, that rebound triggers earthquakes and tsunamis.

津波とは、簡単に言えば、沈めた巨大な発泡スチロールから「手を離した瞬間」に浮き上がってくる力で水面が押し上がる、あれです。
A tsunami is basically what happens when you push a huge piece of Styrofoam underwater and then let go—the upward force lifts the water surface.

-----

当然のことながら、故小松左京先生もこの程度の物理は承知していて、小説『日本沈没』では、全沈没を成立させるために以下の仮説を入れています。
Needless to say, Komatsu understood this level of physics, and in the novel, he added several hypotheses to make total submergence possible.

(1) 伊豆・小笠原から東海地域の下部地殻が破壊・崩落
(1) The lower crust from the Izu–Ogasawara area to Tokai collapses and breaks apart.

(2) 日本弧の基盤プレートが滑り落ちる
(2) The base plate of the Japanese arc slips downward.

(3) 地下深部での異常熱流による広域的溶融・弱層化
(3) Abnormal deep heat flow causes widespread melting and weakening.

(4) その結果、列島全体がプレート境界へ引き込まれる
(4) As a result, the entire archipelago is dragged into the plate boundary.

一言で言うなら、「発泡スチロールがバラバラに破砕・溶解して、プールの底に沈む」という、新しい前提を小説内に導入したわけです。
In short, he introduced a new premise in which the Styrofoam itself shatters, softens, and sinks.

で、ここから本題に無理なくつなげるために、一言だけ前置きしておきますが、
Before connecting this to the main topic, let me add a small preface:

―― 私は「浮力」とか「復元力」という言葉に妙に敏感なんですよ。
— I have an odd sensitivity to words like “buoyancy” and “restoring force.”

-----

さて本題。
Now, the main point.

私、タバコも酒もやっていましたが、タバコは20歳から1年後に止めましたし、酒は現在も断酒継続中です。
I used to smoke and drink, but I quit smoking a year after turning twenty, and I’m still abstaining from alcohol today.

大抵の仕事は納期を守りますし、自分でコントロールできるノルマなら基本的に達成します。
I usually meet deadlines, and if a task is under my control, I generally complete it.

世間的には、こういう状態を『鋼の意志』などと呼ぶらしいのですが、私はそんな殊勝な評価をいただくのが、正直イヤなんですよ。
People apparently call this sort of behavior “an iron will,” but frankly, I hate receiving such noble praise.

というのも、私は「人の顔色を伺いながら、ビクビクしながら、他人や自分との約束を守っているだけ」であって、信念も信条もポリシーも(全部同じ意味だが)ありません。1mmもないと断言できます。
Because in reality, I’m just keeping promises while anxiously watching others’ reactions; I have no conviction, creed, or policy (all of which mean the same thing). Not even a millimeter of it.

で、考えたのですよ。
So I thought about it.

私のこの情けない状態を、もっと的確に言い表せる比喩がないかと。
Isn’t there a better metaphor to describe this pitiful state of mine?

昨夜、ふと、小松左京先生の『日本沈没』が頭に浮かんだんです。
Then last night, Komatsu’s “Japan Sinks” suddenly came to mind.

他人の顔色に流され、ビクビクし、沈みそうで沈まない――そんな私を形容する言葉として、私はこれが最適解だと思いました。
When I considered how I am easily swayed by others’ moods, frightened, and almost sinking yet never fully submerged, I realized this is the perfect description:

―― プールに浮ぶ発泡スチロールのような意志
— A will like Styrofoam floating in a swimming pool.

世間という『重い』流体の上に、フラフラ流されながら、時々沈むものの、完全に沈めるのは案外難しい。それが発泡スチロールであり、そして私の“意志”そのものなのだ、と。
Drifting atop the heavy fluid called society, sometimes sinking, yet strangely hard to push completely under—that is Styrofoam, and that is my so-called “will.”

結局、今日ここまで長々と「日本沈没」の話をしたのも、この一言を言いたかった ―― それだけのことです。
In the end, the whole long discussion about “Japan Sinks” was just to say this one line — That’s all it was.

毎日100~200の地震が発生しているのですから、「大地震が起きませんように(もし起きるなら、私の関係のない場所でヨロシク)」と祈っても、多分、無駄でしょう。

2025,江端さんの忘備録

社内の管理部門の書類、行政から送付されてくる書類、そして保険会社の保険商品の説明書は
The documents from internal management departments, the documents sent by government agencies, and the brochures for insurance products are

―― 意図的に内容が分からないように書いているんじゃないか
— almost written deliberately to make the content incomprehensible,

と思えるほどの、困難さです。
to the point where I genuinely feel that way.

というか、あれは"不親切"を超えて、"悪意"を感じるほどです。
Honestly, they go beyond “unfriendly” and verge on feeling “malicious.”

-----

私、新人のころから今に至るまで、『読み手が分からない資料を書くと、叱られる』という仕事をしてきたので、こういう資料を見ると、腹が立つのです。
Since my rookie days, I have worked in an environment where “you get scolded if you write documents the reader cannot understand,” so seeing documents like these really irritates me.

『テクニカルライティングが、常に正義』とは言いませんが、"背景"→"目的"→"狙い(依頼事項)"、と、短文で明解に書かないと、上司に叱られました。
I won’t say “technical writing is always justice,” but unless I clearly summarize “background → purpose → intent (requested action)” in short sentences, my boss would reprimand me.

もちろん、"正確"で"網羅性"を担保していることが、必要ではあるのですが、それは主文の後に回すとか、付録に回すとか、そういう工夫をしないと、叱られました。
Of course, ensuring “accuracy” and “completeness” was required, but we were told to move that content to the later sections or appendices; otherwise, we were scolded again.

-----

で、最近の私が何をやっているかというと、
So, what I have been doing recently is this:

―― 生成AI(ChatGPT)に書類を読ませて、その後に質問をする
— letting a generative AI (ChatGPT) read the document and then asking it questions afterward.

という形式を取っています。
That is the approach I use.

スキャナか写真でキャプチャして、そこからドローソフトを使って「ヤバい情報(個人情報とか組織名称)」を削除した後に、ChatGPTに投げてから、ChatGPTに質問をするわけです。
I scan or photograph the document, delete the “dangerous information” (personal data, organization names, etc.) using a drawing tool, send it to ChatGPT, and then ask ChatGPT questions.

『この書類は何を言っているのか、1フレーズで記載して』
“Tell me what this document is saying in one phrase.”

『で、私の場合は、どこにどう書けばいいの?』
“And what exactly should I write, and where?”

というような質問をすれば、不明なことはChatGPTが逆に尋ねてくるので、それに答えれば、大体作業が終わります。
If I ask questions like these, ChatGPT asks for clarification on unclear points, and by answering them, the task is mostly finished.

-----

無論、これは正確さにおいて怪しいです。実際に、これで痛い目にあったこともあります。
Of course, the accuracy is questionable, and in fact, I have gotten into trouble because of this.

(ChatGPTの言うとおりに書類を提出したら、自分の意図せぬ業務形態になっていて、上司のチェックで助かった、という事件など)
(For example, I submitted a document exactly as ChatGPT suggested, only to end up committed to a work arrangement I never intended—my supervisor’s review saved me.)

それでも、『分けが分からんまま、書類を書く』よりはストレスはないですし ーー とにかく早い。
Even so, it’s far less stressful than “writing documents without understanding them,” and—above all—much faster.

こういう風にChatGPTを使っている人は多いと思います。
I imagine many people use ChatGPT this way.

なるほど、これからは「恐しく分かりにくいけど、全部内容を突っ込んだ書類」を提出してくる管理部門または行政や保険会社は、
I see—in the future, management departments, government agencies, and insurance companies that submit “horrifyingly obscure but fully stuffed documents.”

―― エンドユーザが生成AIの使用を前提とする
— will assume that end users rely on generative AI,

として、これから平気で理由の分からない書類を作成できる時代になる、という流れですね。
and thus freely produce documents whose logic is unfathomable.

まあ、多くの人が助かるのであれば、それはそれで良いことだと思います。
Well, if this ends up helping many people, that’s not entirely bad.

-----

しかし、
However,

―― エンドユーザが、そういうこと(キャプチャ、画面修正、生成AIの投入等)をしなくてすむように、最初から簡潔かつ明瞭な資料を作れよ
— make the documents clear and concise from the beginning so that end users don’t have to do scanning, redaction, and AI processing!

とは思うんですよね。
That’s honestly how I feel.

テクニカルライティングを、現役中に、ずっとうるさく言われ続けた私としては、なんか釈然としないんですよ。
As someone who was constantly harassed about technical writing during my career, I can’t help but feel unsatisfied.

せめて、『分かりにくい資料を作った部署や本人』に対して、ペナルティが科せられる、というくらいの仕組みはないものか、と思います。
At the very least, I wish there were a system in which “the department or person who produced the incomprehensible document” is penalized.

ChatGPTが、
If ChatGPT were to output something like,

『あなたの貼付した書類と同じものと思われるものが、あなたの他にも1000人近い人が、私に説明を求めていました』
“Nearly 1,000 other people have asked me to explain what appears to be the same document you just uploaded.”

てコメントを出して貰って、そのコメントを、書類の送付元に連絡してやる、くらいの、クレームは付けてやりたいなぁ、と思います。
I would love to take that comment and send it straight back to the document’s issuer as a complaint.

-----

というか、「行政文書の可読性評価」をChatGPTにやらせてみるのはどうでしょうか。
Actually, how about letting ChatGPT evaluate the readability of government documents?

―― この書類、普通の人に可読可能な文章になっていると思う?
— “Do you think this document is written in a way that an ordinary person can read?”

とか
or

―― この書類の『読み易さ』に対して点数をつけて下さい。あとで発送元に知らせますので。
— “Please assign a readability score to this document. I will inform the sender later.”

とかを、ChatGPTに聞いて、そのChatGPTの点数を発送元に送りつけてやればいい。
Ask ChatGPT these questions and send the scores back to the sender.

-----

比較対象として、過去の税金関係の部署ごとに得点を付けて、『あんたんところ、他の部署より劣っているぜ』と明示的に教えてやれば効果抜群でしょう。うん、私のブログで公開してもいいな。
If I assigned scores to past tax-related departments and explicitly told them, “Your department is worse than the others,” it would be highly effective. I could even publish it on my blog.

企業(保険会社を含む)、政府機関等が、民間から"定量値(得点)"をつけて批判される"くらいの脅威を与えないと、「意図的に内容が分からないように書いているんじゃないか」と思われるような書類は、これから増えるばかりです。
Unless companies (including insurance firms) and government agencies feel the threat of being criticized by the public through “quantitative scores,” documents that seem “deliberately incomprehensible” will only continue to increase.