2023,江端さんの技術メモ

出典を忘れてしまいましたが、どなたかが作られたコードを丸パクリさせて頂きました。→たぶん"これ"

ノード1 → "A", ノード2 → "B", ノード3 → "C", ノード4 → "D", ノード5 → "E" として取り扱います。

package main

import (
	"errors"
	"fmt"
)

// ノード
type Node struct {
	name  string  // ノード名
	edges []*Edge // 次に移動できるエッジ
	done  bool    // 処理済みかを表すフラグ
	cost  int     // このノードにたどり着くのに必要だったコスト
	prev  *Node   // このノードにたどりつくのに使われたノード
}

func NewNode(name string) *Node {
	node := &Node{name, []*Edge{}, false, -1, nil}
	return node
}

// ノードに次の接続先を示したエッジを追加する
func (self *Node) AddEdge(edge *Edge) {
	self.edges = append(self.edges, edge)
}

// エッジ
type Edge struct {
	next *Node // 次に移動できるノード
	cost int   // 移動にかかるコスト
}

func NewEdge(next *Node, cost int) *Edge {
	edge := &Edge{next, cost}
	return edge
}

// 有向グラフ
type DirectedGraph struct {
	nodes map[string]*Node
}

func NewDirectedGraph() *DirectedGraph {
	return &DirectedGraph{
		map[string]*Node{}}
}

// グラフの要素を追加する (接続元ノード名、接続先ノード名、移動にかかるコスト)
func (self *DirectedGraph) Add(src, dst string, cost int) {
	// ノードが既にある場合は追加しない
	srcNode, ok := self.nodes[src]
	if !ok {
		srcNode = NewNode(src)
		self.nodes[src] = srcNode
	}

	dstNode, ok := self.nodes[dst]
	if !ok {
		dstNode = NewNode(dst)
		self.nodes[dst] = dstNode
	}

	// ノードをエッジでつなぐ
	edge := NewEdge(dstNode, cost)
	srcNode.AddEdge(edge)
}

// スタートとゴールを指定して最短経路を求める
func (self *DirectedGraph) ShortestPath(start string, goal string) (ret []*Node, err error) {
	// 名前からスタート地点のノードを取得する
	startNode := self.nodes[start]

	// スタートのコストを 0 に設定することで処理対象にする
	startNode.cost = 0

	for {
		// 次の処理対象のノードを取得する
		node, err := self.nextNode()

		// 次に処理するノードが見つからなければ終了
		if err != nil {
			return nil, errors.New("Goal not found")
		}

		// ゴールまで到達した
		if node.name == goal {
			break
		}

		// 取得したノードを処理する
		self.calc(node)
	}

	// ゴールから逆順にスタートまでノードをたどっていく
	n := self.nodes[goal]
	for {
		ret = append(ret, n)
		if n.name == start {
			break
		}
		n = n.prev
	}

	return ret, nil
}

// つながっているノードのコストを計算する
func (self *DirectedGraph) calc(node *Node) {
	// ノードにつながっているエッジを取得する
	for _, edge := range node.edges {
		nextNode := edge.next

		// 既に処理済みのノードならスキップする
		if nextNode.done {
			continue
		}

		// このノードに到達するのに必要なコストを計算する
		cost := node.cost + edge.cost
		if nextNode.cost == -1 || cost < nextNode.cost {
			// 既に見つかっている経路よりもコストが小さければ処理中のノードを遷移元として記録する
			nextNode.cost = cost
			nextNode.prev = node
		}
	}

	// つながっているノードのコスト計算がおわったらこのノードは処理済みをマークする
	node.done = true
}

func (self *DirectedGraph) nextNode() (next *Node, err error) {
	// グラフに含まれるノードを線形探索する
	for _, node := range self.nodes {

		// 処理済みのノードは対象外
		if node.done {
			continue
		}

		// コストが初期値 (-1) になっているノードはまだそのノードまでの最短経路が判明していないので処理できない
		if node.cost == -1 {
			continue
		}

		// 最初に見つかったものは問答無用で次の処理対象の候補になる
		if next == nil {
			next = node
		}

		// 既に見つかったノードよりもコストの小さいものがあればそちらを先に処理しなければいけない
		if next.cost > node.cost {
			next = node
		}
	}

	// 次の処理対象となるノードが見つからなかったときはエラー
	if next == nil {
		return nil, errors.New("Untreated node not found")
	}

	return
}

func main() {
	// 有向グラフを作る
	g := NewDirectedGraph()

	// グラフを定義していく
	g.Add("A", "B", 2)
	g.Add("A", "C", 7)
	g.Add("A", "D", 5)

	g.Add("B", "D", 4)

	g.Add("C", "E", 2)

	g.Add("D", "C", 1)
	g.Add("D", "E", 4)

	g.Add("E", "C", 2)

	// "s" ノードから "z" ノードへの最短経路を得る
	path, err := g.ShortestPath("A", "E")

	// 経路が見つからなければ終了
	if err != nil {
		fmt.Println("Goal not found")
		return
	}

	// 見つかった経路からノードとコストを表示する
	for _, node := range path {
		fmt.Printf("ノード: %v, コスト: %v\n", node.name, node.cost)
	}
}

 

出力結果

C:\Users\ebata> go run .\dijkstra.go
ノード: E, コスト: 8
ノード: C, コスト: 6
ノード: D, コスト: 5
ノード: A, コスト: 0

ラベル修正法の練習(だけ)

2023,江端さんの技術メモ

「Golangでcsvファイルを読み出す」の記事は多いのですが、特定の行まで引っ張り出す情報があまりないので、メモを残しておきます。

/*
以下のcsvファイル(kai_20220522holyday18.csv)の中身を取り出す
id,age,type,departure_name,departure_number,departure_lat,departure_lng,arrival_name,arrival_number,arrival_lat,arrival_lng
0,43,resident,,,34.173408,131.470684,,,34.155862,131.501246
1,24,resident,,,34.179449,131.482543,,,34.164116,131.471791
2,42,resident,,,34.168739,131.470768,,,34.160989,131.491124
3,21,resident,,,34.169494,131.469934,,,34.173498,131.471351
4,58,resident,,,34.185295,131.47414,,,34.191481,131.49456
5,48,resident,,,34.150778,131.480747,,,34.16536,131.471872
6,56,resident,,,34.16536,131.471872,,,34.174066,131.479312
7,73,resident,,,34.155731,131.500845,,,34.16776,131.472831
8,47,resident,,,34.167237,131.471785,,,34.155775,131.476531
9,21,resident,,,34.154931,131.50468,,,34.156678,131.49581
10,37,resident,,,34.16727,131.472899,,,34.171253,131.471177
11,40,resident,,,34.147241,131.474921,,,34.150675,131.486268
12,67,resident,,,34.173683,131.476347,,,34.173643,131.471027
13,28,resident,,,34.183079,131.484303,,,34.174245,131.474592
14,46,resident,,,34.146154,131.472711,,,34.159611,131.491548
15,25,resident,,,34.162497,131.489283,,,34.147212,131.475984
*/

package main

import (
	"encoding/csv"
	"fmt"
	"log"
	"os"
	"strconv"
)

func main() {
	file, err := os.Open("kai_20220522holyday18.csv") // 先ほど入手した郵便番号データをos.Openで開く
	if err != nil {
		log.Fatal(err)
	}
	defer file.Close()

	r := csv.NewReader(file)
	rows, err := r.ReadAll() // csvを一度に全て読み込む
	if err != nil {
		log.Fatal(err)
	}

	// 行ごとに
	for i, row := range rows {
		if i == 0 {
			continue // CSVのヘッダー行を無視
		}

		age := row[1]

		departure_lat, err := strconv.ParseFloat(row[5], 64)
		if err != nil {
			log.Fatal(err)
		}
		departure_lng, err := strconv.ParseFloat(row[6], 64)
		if err != nil {
			log.Fatal(err)
		}

		arrival_lat, err := strconv.ParseFloat(row[9], 64)
		if err != nil {
			log.Fatal(err)
		}

		arrival_lng, err := strconv.ParseFloat(row[10], 64)
		if err != nil {
			log.Fatal(err)
		}

		fmt.Println(age, departure_lat, departure_lng, arrival_lat, arrival_lng)

	}
}

 

出力結果

C:\Users\ebata\yamaguchi\src_try1\others> go run main5.go
43 34.173408 131.470684 34.155862 131.501246
24 34.179449 131.482543 34.164116 131.471791
42 34.168739 131.470768 34.160989 131.491124
21 34.169494 131.469934 34.173498 131.471351
58 34.185295 131.47414 34.191481 131.49456
56 34.16536 131.471872 34.174066 131.479312
73 34.155731 131.500845 34.16776 131.472831
47 34.167237 131.471785 34.155775 131.476531
21 34.154931 131.50468 34.156678 131.49581
37 34.16727 131.472899 34.171253 131.471177
40 34.147241 131.474921 34.150675 131.486268
67 34.173683 131.476347 34.173643 131.471027
28 34.183079 131.484303 34.174245 131.474592
46 34.146154 131.472711 34.159611 131.491548
25 34.162497 131.489283 34.147212 131.475984

 

2023,江端さんの技術メモ

公共交通指向型開発(TOD: Transit Oriented Development) - 公共交通機関に基盤を置き、自動車に依存しない社会を目指した都市開発。
「交通隣接型開発」(TAD:‘transit-adjacent development’) 公共交通拠点と隣接して、高密度、大規模開発を行うが、機能上に、互い協調的な開発モードが不足である。

2023,江端さんの技術メモ

https://www.marble-lab.com/item_3412.html

を参考にさせていただき、自分用の手順書(マニュアル)を作成。

(Step 1) CSVファイルの作成
1行目に、各列の名前が入っていなければならない。
ファイルはこちら → test_user_list_14.csv

ファイルはこちら → test_user_list_14.csv

(Step 2) Google MAPの立ち上げ

(Step 3) Google MAPの立ち上げ

↓の赤丸をクリック

今は、こっちのインタフェースに、なっているようです。

(Step 4) 「マイプレイス」を選択

(Step 5) 「マイマップ」→「地図を作成」

(Step 6) 「インポート」を選択

(Step 7) ファイル(test_user_list_14.csv)をドラッグ

(Step 8) 緯度、経度を選択

(Step 9) マーカーのタイトルを選択

(Step 10) マーカーの色を変更する(→黒)

(Step 11) マーカーをクリックすると情報が表示される

以上

KeyWord: Google MAP、 マーカー、 アイコン、 csv, エクセル

2023,江端さんの技術メモ

PostgreSQLで、新規のデータならinsert, 書き換えならupdate をしようと思ったのですが、なんか面倒くさいので、初期テーブルを沢山作っておくことで対応することしました。

というか、そういうメソッドを準備しておいて欲しい→あるみたいですが、上手く動かせませんでした。

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/lib/pq" // ←これを追記
)

func main() {
	// user_log, bike_logへのアクセス
	dbAgent, err := sql.Open("postgres", "user=postgres password=password host=192.168.0.23 port=15432 dbname=agent_db sslmode=disable")
	if err != nil {
		log.Fatal("dbAgent OpenError: ", err)
	}
	defer dbAgent.Close()
	err = dbAgent.Ping()
	if err != nil {
		log.Fatal(err, "\nHint: dbAgent Database may not have started")
	}
	// user_logテーブルの内容の全削除
	dbAgent.Query("delete from bike_log;")

	// insertのテスト
	for i := 0; i < 10; i++ {
		str := fmt.Sprintf("insert into bike_log (stationid, num_bikes) values(%d, -1)", i)
		fmt.Println(str)
		dbAgent.Query(str)
	}

	// updateのテスト
	for i := 0; i < 10; i = i + 2 {
		str := fmt.Sprintf("update bike_log set num_bikes = %d where stationid = %d", i*2, i)
		fmt.Println(str)
		dbAgent.Query(str)
	}
}

出力結果

C:\Users\ebata\yamaguchi\src_try1\others> go run main4.go
insert into bike_log (stationid, num_bikes) values(0, -1)
insert into bike_log (stationid, num_bikes) values(1, -1)
insert into bike_log (stationid, num_bikes) values(2, -1)
insert into bike_log (stationid, num_bikes) values(3, -1)
insert into bike_log (stationid, num_bikes) values(4, -1)
insert into bike_log (stationid, num_bikes) values(5, -1)
insert into bike_log (stationid, num_bikes) values(6, -1)
insert into bike_log (stationid, num_bikes) values(7, -1)
insert into bike_log (stationid, num_bikes) values(8, -1)
insert into bike_log (stationid, num_bikes) values(9, -1)
update bike_log set num_bikes = 0 where stationid = 0
update bike_log set num_bikes = 4 where stationid = 2
update bike_log set num_bikes = 8 where stationid = 4
update bike_log set num_bikes = 12 where stationid = 6
update bike_log set num_bikes = 16 where stationid = 8

データベースの中身

agent_db=# select * from bike_log;
stationid | num_bikes
-----------+-----------
1 | -1
3 | -1
5 | -1
7 | -1
9 | -1
0 | 0
2 | 4
4 | 8
6 | 12
8 | 16
(10 rows)

 

2023,江端さんの技術メモ

Select文を使って、選んだ要素だけをcsvファイルにエクスポートする方法 (これから頻用しそう)

agent_db=# \copy (select * from agent_track where agent_id = 100) to test.csv with CSV;
最初の'\"が重要

最初はエクスポートです。

Microsoft Windows [Version 10.0.19044.2486]
(c) Microsoft Corporation. All rights reserved.
C:\Users\ebata>psql -U postgres -h 192.168.0.23 -p 15432
Password for user postgres:
psql (13.4, server 12.5 (Debian 12.5-1.pgdg100+1))
Type "help" for help.
postgres=# \c agent_db
psql (13.4, server 12.5 (Debian 12.5-1.pgdg100+1))
You are now connected to database "agent_db" as user "postgres".
agent_db=# \copy user_list to 'testtest.csv' WITH CSV DELIMITER ',';
COPY 20
agent_db=#
C:\Users\ebata に、testtest.csv ができています。
カラム名が必要な場合は、こちら(大抵の場合必要)。
agent_db=# \copy user_list to 'testtest.csv' WITH CSV HEADER;
次にインポートです。
以下のcsvファイルをインポートします。ファイル名はkai_20220522holyday18.csvです。
id,age,type,departure_name,departure_number,departure_lat,departure_lng,arrival_name,arrival_number,arrival_lat,arrival_lng
0,43,resident,,,34.173408,131.470684,,,34.155862,131.501246
1,24,resident,,,34.179449,131.482543,,,34.164116,131.471791
2,42,resident,,,34.168739,131.470768,,,34.160989,131.491124
3,21,resident,,,34.169494,131.469934,,,34.173498,131.471351
4,58,resident,,,34.185295,131.47414,,,34.191481,131.49456
5,48,resident,,,34.150778,131.480747,,,34.16536,131.471872
6,56,resident,,,34.16536,131.471872,,,34.174066,131.479312
7,73,resident,,,34.155731,131.500845,,,34.16776,131.472831
8,47,resident,,,34.167237,131.471785,,,34.155775,131.476531
9,21,resident,,,34.154931,131.50468,,,34.156678,131.49581
10,37,resident,,,34.16727,131.472899,,,34.171253,131.471177
11,40,resident,,,34.147241,131.474921,,,34.150675,131.486268
12,67,resident,,,34.173683,131.476347,,,34.173643,131.471027
13,28,resident,,,34.183079,131.484303,,,34.174245,131.474592
14,46,resident,,,34.146154,131.472711,,,34.159611,131.491548
15,25,resident,,,34.162497,131.489283,,,34.147212,131.475984
次に、テーブルをクリアにします。
agent_db=# delete from user_list;
DELETE 36
agent_db=# select * from user_list;
id | age | type | departure_name | departure_number | departure_lat | departure_lng | arrival_name | arrival_number | arrival_lat | arrival_lng
----+-----+------+----------------+------------------+---------------+---------------+--------------+----------------+-------------+-------------
(0 rows)
として、
agent_db=# \copy user_list from 'kai_20220522holyday18.csv' delimiter ',' csv header;
でインポートが完了します。
一応、確認します。
agent_db=# select * from user_list;
id | age | type | departure_name | departure_number | departure_lat | departure_lng | arrival_name | arrival_number | arrival_lat | arrival_lng
----+-----+----------+----------------+------------------+---------------+---------------+--------------+----------------+-------------+-------------
0 | 43 | resident | | | 34.173408 | 131.470684 | | | 34.155862 | 131.501246
1 | 24 | resident | | | 34.179449 | 131.482543 | | | 34.164116 | 131.471791
2 | 42 | resident | | | 34.168739 | 131.470768 | | | 34.160989 | 131.491124
3 | 21 | resident | | | 34.169494 | 131.469934 | | | 34.173498 | 131.471351
4 | 58 | resident | | | 34.185295 | 131.47414 | | | 34.191481 | 131.49456
5 | 48 | resident | | | 34.150778 | 131.480747 | | | 34.16536 | 131.471872
6 | 56 | resident | | | 34.16536 | 131.471872 | | | 34.174066 | 131.479312
7 | 73 | resident | | | 34.155731 | 131.500845 | | | 34.16776 | 131.472831
8 | 47 | resident | | | 34.167237 | 131.471785 | | | 34.155775 | 131.476531
9 | 21 | resident | | | 34.154931 | 131.50468 | | | 34.156678 | 131.49581
10 | 37 | resident | | | 34.16727 | 131.472899 | | | 34.171253 | 131.471177
11 | 40 | resident | | | 34.147241 | 131.474921 | | | 34.150675 | 131.486268
12 | 67 | resident | | | 34.173683 | 131.476347 | | | 34.173643 | 131.471027
13 | 28 | resident | | | 34.183079 | 131.484303 | | | 34.174245 | 131.474592
14 | 46 | resident | | | 34.146154 | 131.472711 | | | 34.159611 | 131.491548
15 | 25 | resident | | | 34.162497 | 131.489283 | | | 34.147212 | 131.475984
(16 rows)

2023,江端さんの技術メモ

何度やっても、エージェントが湯田温泉駅の北口に出てこないので、QGISを立ち上げて、OpenStreetMap(OSM)のノードを調べみたら、原因が分かりました。

湯田温泉駅のサイクルステーションにもっとも近いノードが、駅の南口側にあるので、ここにキャッチされて、エージェントが南口側に集合してしまっていました。

# 湯田温泉駅周辺のノードが少なすぎる (山口駅は、比較的沢山のノードがあるのに)

OSMデータの改竄(https://booth.pm/ja/items/3943484)という手もあるが、ちょっと手間がかかりすぎるので、取り敢えず、目的地を上の図の206号線の終端に移動することで対応しようと思っています。

 

 

 

2023,江端さんの技術メモ

第3章: スコアリングの詳細
第4章: MATSimの設定について
第5章: 利用可能な機能とその使用方法
第6章: MATSimのデータコンテナ
第7章: MATSimの初期入力の生成
第8章: MATSim JOSMNetworkエディタ
第9章 シンガポールにおけるMap-to-MapMatchingエディタ
第10章 ネットワークエディターの貢献
第11章: QSim
第12章 信号と車線
第13章 駐車場
第14章:電気自動車
第15章: ロードプライシング
第16章:MATSimによる公共交通のモデル化
第17章:「ミニバス」の貢献度
第18章 バス路線図マッチングの半自動化ツール
第19章 新しい動的イベントベースの公共交通ルータ
第20章 マトリックスベースの白金ルータ
第21章 "マルチモーダル "への貢献
第22章 カーシェアリング
第23章 カーシェアリング ダイナミックトランスポートサービス
第24章 貨物輸送 貨物輸送
第25章 貨物輸送 ワゴンシム
第26章 旅日記から読み解く貨物連鎖
第27章: デスティネーション・イノベーション
第28章 共同意思決定
第29章 ソクネトゲン
第30章: 日帰りリプランニング
第31章: MATSimエージェントを賢くする信念・願望・意図
第32章: CaDyTS: 動的トラフィックシミュレーションのキャリブレーション
第33章 セノゾンビア
第34章: OTFVis: MATSimのオープンソースビジュアライザー
第35章: アクセシビリティ
第36章: 排出ガスモデリング
第37章: MATSimを用いたインタラクティブな解析と意思決定支援
第38章: 「解析」の貢献
第39章: MATSimにおけるマルチモデリング。PSim
第40章: その他の計算性能に関する経験
第41章 避難計画 統合的アプローチ
第42章 都市シミュレーション MATSim4都市シム
第43章 廃止されたモジュール
第44章:組織 開発プロセス、コード構造、そして
第45章: 自分自身の拡張機能を書き、貢献する方法
第46章 MATSimの歴史
第47章 エージェントベースのトラフィックアサインメント
第48章: モンテカルロエンジンとしてのMATSim
第49章: MATSimにおける選択モデル
第50章: 運動学的波動の待ち行列表現
第51章:MATSimによる便益・費用に関するミクロ経済学的解釈
第52章 シナリオの概要
第53章:ベルリンI: BVGシナリオ
第54章 ベルリンII CEMDAP-MATSim-Cadytsシナリオ
第55章:スイス
第56章:チューリッヒ
第57章: シンガポール
第58章: ミュンヘン
第59章 スーフォールズ
第60章:アリアガ
第61章: 保定 家庭用新型ユーティリティの実証実験ケーススタディ
第62章 バルセロナ
第63章:ベルギー 河川洪水の経済的影響を評価するための推計フレームワークにおけるMATSimの利用
第64章:ブリュッセル
第65章:カラカス
第66章 コトブス 交通信号シミュレーション
第67章 ダブリン ダブリン
第68章 ヨーロッパの航空・鉄道輸送
第69章:ハウテン州
第70章: ドイツ
第71章:ハンブルク・ヴィルヘルムスブルク
第72章: ジョインビル
第73章: ロンドン ロンドン
第74章: ネルソン・マンデラ・ベイ
第75章: ニューヨーク
第76回:パダン パダン
第77章:パダン パトナ
第78章: フィリピン フィリピンにおけるエージェントベースの交通シミュレーションモデル
第79章: ポズナン
第80章: キト首都圏
第81章:ロッテルダム ロッテルダム 公共交通機関のレベニュー・マネジメント
第82章:サマラ
第83章: サンフランシスコ・ベイエリア スマートベイ・プロジェクト-コネクテッド
第84章 サンティアゴ・デ・チリ
第85章 シアトル地域
第86章: ソウル
第87章 上海
第88章: ソチ
第89章: ストックホルム
第90章:タンパ(フロリダ州 都市内移動の高解像度シミュレーションとその結果
第91章:テルアビブ
第92章:東京 ハイパーパスを用いた車両移動のシミュレーションと移動時間の信頼性に与える影響
第93章: トロント
第94章:トロント トロンハイム
第95章:ヤラウォンガとモルワラ。オーストラリア・ビクトリア州における需要対応型交通システム
第96章:横浜 MATSimのレジリエントな都市設計への応用
第97章: 研究の方向性


Chapter 3: A Closer Look at Scoring
Chapter 4: More About Configuring MATSim
Chapter 5: Available Functionality and How to Use It
Chapter 6: MATSim Data Containers
Chapter 7: Generation of the Initial MATSim Input
Chapter 8: MATSim JOSMNetwork Editor
Chapter 9: Map-to-MapMatching Editors in Singapore
Chapter 10: The Network Editor Contribution
Chapter 11: QSim
Chapter 12: Traffic Signals and Lanes
Chapter 13: Parking
Chapter 14: Electric Vehicles
Chapter 15: Road Pricing
Chapter 16: Modeling Public Transport with MATSim
Chapter 17: The "Minibus" Contribution
Chapter 18: Semi-Automatic Tool for Bus Route Map Matching
Chapter 19: New Dynamic Events-Based Public Transport Router
Chapter 20: Matrix-Based pt router
Chapter 21: The "Multi-Modal" Contribution
Chapter 22: Car Sharing
Chapter 23: Dynamic Transport Services
Chapter 24: Freight Traffic
Chapter 25: WagonSim
Chapter 26: freight Chains From Travel Diaries
Chapter 27: Destination Innovation
Chapter 28: Joint Decisions
Chapter 29: Socnetgen
Chapter 30: Within-Day Replanning
Chapter 31: Making MATSim Agents Smarter with the Belief-Desire-Intention
Chapter 32: CaDyTS: Calibration of Dynamic Traffic Simulations
Chapter 33: Senozon Via
Chapter 34: OTFVis: MATSim's Open-Source Visualizer
Chapter 35: Accessibility
Chapter 36: Emission Modeling
Chapter 37: Interactive Analysis and Decision Support with MATSim
Chapter 38: The "Analysis" Contribution
Chapter 39: Multi-Modeling in MATSim: PSim
Chapter 40: Other Experiences with Computational Performance
Chapter 41: Evacuation Planning: An Integrated Approach
Chapter 42: MATSim4 Urban Sim
Chapter 43: DiscontinuedModules
Chapter 44: Organization: Development Process, Code Structure and
Chapter 45: How toWrite Your Own Extensions and Possibly Contribute
Chapter 46: Some History of MATSim
Chapter 47: Agent-Based Traffic Assignment
Chapter 48: MATSim as aMonte-Carlo Engine
Chapter 49: Choice Models in MATSim
Chapter 50: Queueing Representation of Kinematic Waves
Chapter 51: Microeconomic Interpretation of MATSim for Benefit-Cost
Chapter 52: Scenarios Overview
Chapter 53: Berlin I: BVG Scenario
Chapter 54: Berlin II: CEMDAP-MATSim-Cadyts Scenario
Chapter 55: Switzerland
Chapter 56: Zuurich
Chapter 57: Singapore
Chapter 58: Munich
Chapter 59: Sioux Falls
Chapter 60: Aliaga
Chapter 61: Baoding: A Case Study for Testing a New Household Utility
Chapter 62: Barcelona
Chapter 63: Belgium: The Use of MATSim within an Estimation Framework for Assessing Economic Impacts of River Floods
Chapter 64: Brussels
Chapter 65: Caracas
Chapter 66: Cottbus: Traffic Signal Simulation
Chapter 67: Dublin
Chapter 68: European Air - and Rail-Transport
Chapter 69: Gauteng
Chapter 70: Germany
Chapter 71: HamburgWilhelmsburg
Chapter 72: Joinville
Chapter 73: London
Chapter 74: NelsonMandela Bay
Chapter 75: New York City
Chapter 76: Padang
Chapter 77: Patna
Chapter 78: The Philippines: Agent-Based Transport SimulationModel for
Chapter 79: Poznan
Chapter 80: QuitoMetropolitan District
Chapter 81: Rotterdam: Revenue Management in Public Transportation with
Chapter 82: Samara
Chapter 83: San Francisco Bay Area: The SmartBay Project - Connected
Chapter 84: Santiago de Chile
Chapter 85: Seattle Region
Chapter 86: Seoul
Chapter 87: Shanghai
Chapter 88: Sochi
Chapter 89: Stockholm
Chapter 90: Tampa, Florida: High-Resolution Simulation of Urban Travel and
Chapter 91: Tel Aviv
Chapter 92: Tokyo: Simulating Hyperpath-Based Vehicle Navigations and its Impact on Travel Time Reliability
Chapter 93: Toronto
Chapter 94: Trondheim
Chapter 95: Yarrawonga andMulwala: Demand-Responsive Transportation in Regional Victoria, Australia
Chapter 96: Yokohama: MATSim Application for Resilient Urban Design
Chapter 97: Research Avenues

2023,江端さんの技術メモ

MATSimに関する情報が、これほどまでに少ないとは知りませんでした ―― 特に、日本語の情報が絶無に近いです。

このドタバタ(失敗メモ)については、こちらに記載しています。

MATSimの調査(継続中)

本来なら、大晦日の日に完了しているはずのメモのリリースが今日(2023年1月3日)になってしまいました。

「MATSimのシミュレーションが動いているところまで確認する」のメモ


多くの交通システムの研究に携わる人が、MATSimを最初に触って動かすときの一助になれば、幸いです。

江端