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号線の終端に移動することで対応しようと思っています。

 

 

 

2022/07,江端さんの技術メモ

ローカルネットワークにおける「オレオレ証明書」の作り方

"http: TLS handshake error from 192.168.0.22:59914: remote error: tls: unknown certificate"のエラーを、ようやく消せました

2023年1月9日追記
他のマシンで作った鍵は、動きません。"http: TLS handshake error from 127.0.0.1:51901: remote error: tls: unknown certificate"が出てきます→ 証明書の中にPCのホスト名称が記載されているようです。ですので、面倒ですが、別のマシンで動かす鍵は、別のマシンで再度作り直す必要があるようです。

2023年1月10日追記
クライアントとサーバを同じWindowBOXで実施している場合でも、"http: TLS handshake error"がでてきますので、下記の「5.4. Windowsの場合」を参考にして、「証明書のインストール」を実施して下さい。 

1. 目的

ローカルな実験環境で、Go言語で作ったサーバを動かし、Websocket用の鍵を作成し、TLS通信(https://)を実現します

2. 狙い

最近、ブラウザの"https"縛りがきつくて、ローカルのindex.htmlを叩くだけでは、画面が出てこなくなりました。特にスマホで顕著です。セキュリティ的には良いことなのかもしれませんが、研究用の開発をする人間(私)にとっては、『正直、面倒くさいなぁ』と思っています。

あくまでインターナルな環境での動作テストで使えれば足り、インターネットに出るつもりはありません。つまりIPアドレス、直接指定で実験できれば足りるのです(e.g. https://192.168.0.8:8080)

ところが問題があります。当然、インターネットに出ないことが必要なのです(というかインターネットに出たらアウト(始末書もの))。

  • 当然、公式の認証鍵はインターネットでの使用を前提としている上に、高価です。
  • Let's encrypt (https://letsencrypt.org/ja/) は、IPアドレスは使えないようです(ドメイン名のみ)。またクローズなローカルネットでは使えません。
  • ZeroSSL (https://zenn.dev/mattn/articles/b2c4c92c9116b1) は、インターネット上でオープンされているIPアドレスには使えますが、やはりクローズなローカルネットでは使えません。

という訳で、今回は、mkcert (https://qiita.com/k_kind/items/b87777efa3d29dcc4467) を使うことにしました。

このメモでは、mkcertを使って、インターネットに繋っていないローカルネットワークで、TLS通信を実現することを目的とするものです。

3. mkcertの入手方法と鍵の作りかた

https://github.com/FiloSottile/mkcert を覗いて、バイナリがダウンロードできそうことが分かりました。

もって、ここから、Windows10で使えそうなバイナリをダウンロードして下さい。

ダウンロードしたところから、直接叩いてみたら、最初に、

# mkcert -install

しろ、と言われます。

本当はmkcertにリネームした方が良いのでしょうが、面倒なので、そのまま

# mkcert-v1.4.1-windows-amd64.exe -install

を強行しました。

その後、"localhost","127.0.0.1","192.168.0.8"の3つのアドレスを追加することにしましたので、

# mkcert-v1.4.1-windows-amd64.exe localhost 127.0.0.1 192.168.0.8

としました。

この結果は以下の通りです。

>mkcert-v1.4.1-windows-amd64.exe localhost 127.0.0.1 192.168.0.8
Using the local CA at "C:\Users\ebata\AppData\Local\mkcert" 
Created a new certificate valid for the following names 
 - "localhost"
 - "127.0.0.1"
 - "192.168.0.8"

The certificate is at "./localhost+2.pem" and the key at "./localhost+2-key.pem" 

と入力すると、鍵が、カレントディレクトリにできるようです。

で、

  • "localhost+1-key.pem"を "key.pem"とリネームして、
  • "localhost+1.pem"を"cert.pem"とリネームして、

鍵を使うプログラム(main.go, server24.go)のあるディレクトリの全部に放り込んで下さい。

4. 鍵の使い方

4.1. Goプログラム(server24.go, main.go)の修正

4.1.1. http.ListenAndServeTLS()への置き換え

さらに、main.go, server24.goのhttp.ListenAndServe()を、以下のようなhttp.ListenAndServeTLS()に置き換えて下さい

    var addr = flag.String("addr", ":8080", "http service address")

    /*
        log.Fatal(http.ListenAndServe(*addr, nil)) // localhost:8080で起動をセット
    */

    var httpErr error
    if _, err := os.Stat("./cert.pem"); err == nil {
        fmt.Println("file ", "cert.crt found switching to https")
        if httpErr = http.ListenAndServeTLS(*addr, "./cert.pem", "./key.pem", nil); httpErr != nil {
            log.Fatal("The process exited with https error: ", httpErr.Error())
        }
    } else {
        httpErr = http.ListenAndServe(*addr, nil)
        if httpErr != nil {
            log.Fatal("The process exited with http error: ", httpErr.Error())
        }
    }

4.1.2. アドレスの修正

  • "localhost"の記載を、外向きのipアドレス(192.168.0.8)に書き換えて下さい。

4.2. index.htmlの修正

  • "localhost"の記載を、外向きのipアドレス(192.168.0.8)に書き換えて下さい。

5. スマホ側への鍵の設定方法

スマホ側は、当然に、"192.168.0.8"などというあやしげなサーバを信じる訳がないので、それを信じさせる処理を行う必要があります。

これをスマホに信じさせるには、ルート証明書の作成が必要となりますが、これはすでに出来ています。

5.1. ルート証明書の場所

# mkcert-v1.4.1-windows-amd64.exe -CAROOT

で、rootCA-key.pem rootCA.pem の場所が分かります。

("key.pem"、"cert.pem"は、使わないので注意して下さい(それに気がつかずにエラい目に遭いました))

C:\Users\ebata\Downloads>mkcert-v1.4.1-windows-amd64.exe -CAROOT
C:\Users\ebata\AppData\Local\mkcert

C:\Users\ebata\Downloads>cd C:\Users\ebata\AppData\Local\mkcert

C:\Users\ebata\AppData\Local\mkcert>ls
rootCA-key.pem  rootCA.pem

5.2. iPad/iPhoneの場合

  1. スマホにrootCA.pemをメールで送り込みます。ただし、iPad/iPhoneの場合、gmailメーラからではrootCA.pemを直接インストールできないので、safariから、gmail.comにログインして、メーラーを出して、そこからrootCA.pemを叩いて取り出して下さい。
  2. 次に、「設定」をクリックすると「プロファイルがダウンロード済み」というメッセージが出てくるので、そこをクリックして、「インストール」を押して下さい(ここでしつこく「パスコードの入力」を要求されますが、くじけずに何度でも入力して下さい)
    1.ダウンロードが出来たら、[設定]→ [プロファイルがダウンロード済み]を選択して下さい。

あとは、インストールボタンを押し続けて、インストールが完了して下さい。

5.2.1. ルート証明書を信頼する

  1. [設定] → [一般] → [情報] → [証明書信頼設定] → ルート証明書を全面的に信頼するの項目で、インストールした証明書をONにして下さい。

  1. [設定] → [プロファイル]でインストールしたプロファイルを選択するとルート証明書を確認できます。

5.3. Andoroidの場合

5.3.1. ルート証明書のインストール

  1. rootCA.pem を、rootCA.cerにリネームして、スマホにrootCA.cerをメールで送り込みます。
  2. メーラからrootCA.cerをクリックすれば、インストールされます(ことがあります)。

あるいは、

  1. ルート証明書ファイルを端末の内部ストレージまたはSDカードのルートディレクトリに配置します。
  2. ストレージからのインストールまたはSDカードからのインストールを選択します。
    • ストレージからインストールする場合:
      [設定]−[ユーザー設定]−[セキュリティ]−[認証情報ストレージ]−[ストレージからのインストール]
    • SDカードからインストールする場合:
      [設定]−[ユーザー設定]−[セキュリティ]−[認証情報ストレージ]−[SDカードからのインストール]
  3. 証明書に名称を設定し、[OK]ボタンをタップして、インストールが完了します。

最後に、

  1. 証明書がインストールされたか確認します。[設定]−[ユーザー設定]−[セキュリティ]−[認証情報ストレージ]−[信頼できる認証情報]の[ユーザー]タブで確認できます(ただし、私はこのメニューは確認できませんでした)

5.4. Windowsの場合

Windowsがスマホになることはないと思いますが、リモートの端末になることはあるので、記載しておきます。

  1. rootCA.pemを、rootCA.cerにリネームして、Windowsに送り込みます。
  2. rootCA.cerを右クリックして、「証明書のインストール」を選びます。
  3. 「証明書をすべて次のストアに配置する(P)」のラジオボタンをクリックし、「参照」ボタンをクリックします。
    1.「使用する証明書ストアを選択してください(C)」の画面で、「信頼されたルート証明機関」を選択します。

  1. 先ほどの画面に戻るので「次へ」ボタンを押下し、さらに「完了」ボタンを押下して下さい。正しくインポートされました。」と表示されればインストール成功です。

6. 結果

上記の処理を行うことで、iPhone,iPad,Android,WindowsBoxからのアクセスを行っても、サーバのコンソールから、

http: TLS handshake error from 192.168.0.22:59914: remote error: tls: unknown certificate
http: TLS handshake error from 192.168.0.22:59920: remote error: tls: unknown certificate
http: TLS handshake error from 192.168.0.22:59922: remote error: tls: unknown certificate

が出てこなくなり、ローカルネットでのセキュアなWebSocket通信が実現できる目処が立ちました。

以上

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を最初に触って動かすときの一助になれば、幸いです。

江端

 

 

2023,江端さんの技術メモ

http://www.kobore.net/diary_techno/?date=20190119

に、

  • Windowsの環境変数を引き継ぐのであれば、"msys2_shell.cmd"の中にある、"rem set MSYS2_PATH_TYPE=inherit"のremを外す

と書きましたが、上手く動きませんでした。

MSYS2 で PATH が引き継がれない

の、引き継ぎたいときは Windows の環境変数で MSYS2_PATH_TYPE に inherit を設定するとよい。

を頼りにして、設定してみました。

システム環境変数の設定では動きませんでしたが、ユーザ環境変数に設定したら動くようになったようです。

以上

2023,江端さんの技術メモ

Windowsのバージョンを上げる度に、メニューインターフェースを変えてくるMicrosoft社に、今さら腹を立てても仕方がない、と諦めています。

慣れなくてはならないのです。『ついていけない』と思った瞬間、「ジジイ」が確定します ―― シュレーディンガーのジジイです。

それはさておき。

Windows10→11のインターフェースの変化は大き過ぎて、ストレスが多いので、残念ですが、変更ツールに手を出してしまいました。

【決定版】使いにくい Wndows11 を Windows10風に戻す【Explorer Patcher for Windows11

を拝見して、力付くで直しました。

私の場合、OS(Windows11)は、https://github.com/valinet/ExplorerPatcher のインストールを邪魔されましたが、そこは、力づくで落しました(説明面倒なので省略)

で、

の画面から、以下の設定をしました(面倒なので全部コピペ)

以上

2022/12,江端さんの技術メモ

https://www.nikkoken.or.jp/pdf/project/2021/A-854.pdf

これまで述べてきたように、MATSimは移動の均衡をモデル化するための統合シミュレーションツールキットとして設計されました。このため、MATSimは交通需要と供給の両方をモデル化できる必要があります。の部分をモデル化する必要があります。この目的のために、MATSimは図2.3に示すように、均衡に収束するための共進化反復ループを採用しています。図2.3に示すとおりである(p.19)。

このループは、各個人の1日の行動とトリップチェーンという形で、最初の旅行需要から始まります。ループが始まる。このアクティビティとトリップチェーンは、Mobsimの段階で道路ネットワークにロードされる。一日のシミュレーションが終わると を計算し,その結果をもとに,各エージェントのアクティビティ・チェーン(計画)のスコアを計算する.最後の このとき,各エージェントは,以前の計画から生成された計画の集合を所有し を持つことになり,そのスコアに基づいて次の反復で実行するものを選択しなければならない.
ネットワーク負荷の部分では、MATSimのデフォルトとしてトラフィックフローモデルQSimが採用されている。この QSimは計算効率の良い待ち行列ベースのアプローチを適用している。基本的に、車両が道路セグメントに進入する際 を計算することができる.次に、その車両は道路の待ち行列の最後尾に挿入される。第二に,車両は道路の待ち行列の最後尾に挿入され,最後に,道路の流出能力に応じて道路を離れます.ここで、流出速度は各道路に固有であり、容量属性で指定される。

スコアリングとリプランニングの部分では、各エージェントにとって「より良い」プランと「より悪い」プランを区別する基準を提供するために、一般化された効用様式でスコアが定式化される。再計画では、このスコアをもとに、過去の計画、すなわち特定のエージェントが行った計画をもとに、完全に新しい計画を「品種改良」する遺伝的アルゴリズム(または進化的アルゴリズムと呼ばれる)を適用する。一般に、突然変異と選択という二つの演算子が使われる。突然変異演算子は、以前に実行された計画中の特定のコンポーネントを変更し、この変更された(すなわち、突然変異)計画を次の反復に使用する。次の反復処理に採用する。
MATSimで使用できるセレクタは、使用する平衡状態によって複数種類あります。
る平衡状態によって異なる。ベストリプライセレクタは、前回の反復からベストプランを選択するものです。
MNLセレクタは、プラン選択のアプローチを離散的選択の方法で適用し、エージェントの行動における以下の確率を考慮する。エージェントの行動には確率がある。

MATSim OSS & フリー Google Scholar(GS) 5750
http://bin.t.u-tokyo.ac.jp/kaken/pdf/2014_wakabayashi1.pdf
インプットデータ
・1日のスケジュール
・道路ネットワーク
・モデルのパラメータ
2. 1日のスケジュール効用を計算
𝑈𝑎𝑐𝑡 : 活動の効用 𝑈𝑡𝑟𝑎𝑣𝑒𝑙 : 移動の効用 𝑖:1回の活動
1. シミュレーションの実行
3. プランの変更
・出発時刻
・交通手段
・経路
・目的地
・駐車場
1~3を効用(Score)が収束するまで繰り返す
https://progsoft.net/ja/software/matsim

MATSimは、Javaで実装されたアクティビティベースの拡張可能なマルチエージェントシミュレーションフレームワークです。
これはオープンソースであり、インターネットからダウンロードできます(MATSim、2016; GitHub、2015)。
フレームワークは大規模なシナリオ向けに設計されています。つまり、対象となる機能を効率的に処理するために、すべてのモデルの機能が取り除かれています。
並列化も非常に重要です(例:Dobler and Axhausen、2011; Charypar、2008)。 たとえば、ネットワーク負荷シミュレーションの場合、キューベースのモデルが実装され、非常に複雑で計算コストの高い自動車追従動作が省略されます(セクション1.3を参照)。
現時点では、MATSimは、アクティビティベースのモデルの分析の一般的な単位である1日をモデル化するように設計されています(たとえば、Bowmanによるレビュー、2009aを参照)。
それにもかかわらず、原則として、複数日モデルを実装することができます(Horni and Axhausen、2012年)。

SUMO OSS & フリー 交差点解析などに使われている様子  GS 35700
https://kudzuyu.github.io/SUMO-wiki-ja/SUMO_at_a_Glance/

  • シミュレーション
    • 連続空間かつ離散時間での車の動き
    • 複数の自動車の種類
    • 車線変更のある複数車線道路
    • 異なった右側通行ルールや信号
    • 高速なopenGL GUI
    • 数万単位の枝(道路)を含むネットワークの制御
    • 高速起動(1GHzマシンにおいて10万台までの車を1秒以内に更新)
    • 起動中の他のアプリケーションとの相互利用性
    • ネットワーク範囲での道路、車、検知器基準の出力\
    • 人基準のマルチモーダル移動のサポート
      -

交通シミュレーションの研究をやっていることから、MATSimの調査を行っています。

もう、昨日から本当にドタバタやっているのですが、MATSimの環境構築について、記載されているドキュメントが、非常に乏しく、日本語のものはゼロと言って良いと思います。

いろいろやって、現時点で上手くいかなかったこと

> git clone https://github.com/maptic/matsim-docker.git

> docker-compose build

> docker-compose upで、"docker-compose build" は成功したのですが、"docker-compose up" は以下ようにになってしまいました。

あきらめてhttps://www.matsim.org/downloads/からアプローチしてみた

>docker run -v /opt/matsim/data/input -v /opt/matsim/data/output maptic/matsim:latest

Vscode以外のIDEは入れたくないが、IntelliJ IDEA を入れろと言われたので、入れることにする(Dockerで手早く片づけたかったが)、アプローチがさっぱり分からんので仕方ない。

「The Multi-Agent Transport Simulation MATSim」を読むことにしました。


から、C:\Users\tomoi\matsim-14.0 に展開しておきました

つぎにここから「The Multi-Agent Transport Simulation MATSim」を落してきました。

で、

の、

のこれを出せるかどうかが、勝負だと見ました。

まず、javaをインストールしました。
私は、https://adoptopenjsk.net から、64bit版WindowsJDKのZIP版をダウンロードしました。
1. Choose a Version では、OpenJDK11 を、2. Choose a JVMではHotSpotを選択、Other platformsのボタンをクリックしました。
Windows, x64, .zip でダウンロードして、C:\Program Files\Java\jdk-11.0.17+8\bin にパスを通しておきました。

:\Users\tomoi\matsim-14.0>java -jar matsim-14.0.jar を起動すると、以下の画面が表示されます。


で、先程展開した、C:\Users\tomoi\matsim-14.0のサンプルの中にあるconfig.xmlを使うと、何か計算をしているようです。

2023-01-01T00:33:27,301 INFO IOUtils:215 Resolved C:\Users\tomoi\matsim-14.0\examples\berlin\config.xml to C:\Users\tomoi\matsim-14.0\examples\berlin\config.xml

ただ、今のところ、エラー終了してしまうようです。

上記の問題については、https://github.com/matsim-org/matsim-code-examples/issues/736 の方に記載されていました。
内容はこんな感じでした。

残念ながら、これはまだ修正されていないバグです。GUI クラスを実行する代わりに、RunMatsim クラスを直接実行することもできます。

java -cp matsim-example-project-0.0.1-SNAPSHOT.jar org.matsim.project.RunMatsim
デフォルトの設定ファイルとは別の設定ファイルを使用したい場合は、コマンドが変わります。

java -cp matsim-example-project-0.0.1-SNAPSHOT.jar org.matsim.project.RunMatsim /path/to/your/config.xml となります。

こんにちは、私は同じエラーに遭遇し、それはWindowsにリンクされているように見えた。このバグが修正されるかどうか、またいつ修正されるか知っていますか?

Windows の MATSimGUI で AccessDeniedException が発生する matsim-org/matsim-libs#2052

matsim-org/matsim-libs#2052 にissueを作成しました。ご指摘ありがとうございました。

JDKのバージョンを確認してください。この問題は、jdk 17 以降で発生するようです。JDK11でmatsim-14.0.jarを動かしてみてください。がんばってください。

も、私、jdk11を使っているんだけどなぁ?

続きがありました。

私もJDK11を使用していますが、同じ問題に遭遇しました。なぜなら、私が知る限り、LegHistogramChartクラスはpngを保存するために適切なローカルパスを送っていますが、jfreechartはC:³³に一時ファイルを作成しようとし、パーミッション問題に遭遇しています。簡単な回避策は、<param name="createGraphs" value="false" />を追加して、グラフをオフにすることです。をconfig.xmlのcontrollerモジュールに追加することです。そうすれば問題なく実行できます。もちろん、グラフは表示されませんが、その他の出力や解析はすべて可能です。

ということのようです。

で、C:\Users\tomoi\matsim-14.0\examples\berlin\config.xml の中をちょっくら弄ってみました。

<module name="controler">
<param name="outputDirectory" value="./output/berlin" />
<param name="firstIteration" value="0" />
<param name="lastIteration" value="0" />
<param name="createGraphs" value="false" />
</module>

の赤字の一行を追加したら、エラーで止まることはなくなりました。

さて、多分、ここ(C:\Users\tomoi\matsim-14.0\examples\berlin\output\berlin)にできているファイルを使って、シミュレーションの見える化をするのだろうと思います。


https://www.matsim.org/downloads/の

Visualization の翻訳

シミュレーションが実行されると、その出力ディレクトリに多くのファイルが作成されます。GUIには出力ディレクトリに到達するためのボタンがあることに注意してください。そのうちの1つは、いわゆるイベントファイルで、通常10回目のイテレーションごとに生成されます。0回目の繰り返しのイベントファイルは .../ITERS/it.0/...0.events.xml.gz に格納されています。これには可視化できる情報がたくさん含まれています。

MATSimの出力を視覚化する最も簡単な方法は、VIAを使うことです。エージェントの数に制限のある無料版がダウンロード可能です。VIAを起動すると、大きな黒い領域が表示されるはずです。ここがトラフィックを可視化する場所です。このエリアの左側に、上部に4つのアイコンがある小さなエリアがあります(「コントロール」)。最初のアイコン(Data Sources)をクリックします。このセクションにファイルをドラッグ&ドロップするか(例:network.xml、events.xml.gz)、下部の「+」をクリックして追加するファイルを選択できます。いずれかの方法で、まずnetwork.xmlを利用可能なデータのリストに追加し、次にevents.xml.gzを追加します。これでビジュアライザーがデータを認識し、どのようにビジュアル化するかを指示することができます。

次に、コントロールセクションの 2 番目のアイコン ("レイヤー") をクリックします。初期状態では、背景レイヤーのみが表示されています。をクリックして、表示させたいデータを選択します。読み込んだnetwork.xmlでネットワークを視覚化するよう既に提案されているはずなので、「Add」をクリックします。しばらくすると、ネットワークが可視化エリアに表示されるはずです。をもう一度クリックし、今度はレイヤーの種類として「ビークル」を選択します。event.xml.gzファイルはすでに選択されています。追加]をクリックします。イベントに依存するレイヤと同様に、レイヤタグの下部に「データを読み込む」ボタンが表示されます。これをクリックすると、イベントから車両の位置が抽出されます。


VIAというビューアについて調査中

https://simunto.com/via/download

 

2022/12,江端さんの技術メモ

現在の江端家には、DVDドライブがない(AVケーブル用はある)ので、PCからDVDをmp4に変換して、それをノートPCで移したものを、HDMIケーブルで上映するしかありません。

加えて、Windows7→Window10への移行で、既存のソフトも消えてしまったので、今、環境を再構築しています。

これからは、DVD Decrypterでisoファイルで読みとって、それを、HandBrakeでmp4変換する、という方式にしました(当初、Handbrakeだけでやれないかと思ったのですが、DVDのプロテクトが外せませんでした)。また、今後はDVDの複製を作るニーズはないだろうと考え、DVD Shrink のインストール行なっていません。

# なお、リビングのWindows10の入った32bitPCにインストールする為に、目的のダウンロードファイルを探すのに、少々てこずりました

 

カンタン!DVD DecrypterでDVDをMP4に変換する方法

のクリップをコピペさせて頂き、自分用の覚え書きとさせて頂いております。

これで、isoファイルができたら、HandBrakeでmp4ファイルにします。

 

以上