データ作成マニュアル
1.はじめに
1.1 本マニュアルの目的
シェアドモビリティ最適配置のデモアプリケーションのファイルアップロード機能や、APIによるデータ登録で利用するデータの作成方法をご紹介します。
1.2 前提条件
- FUJITSU Research Portalのアカウントを保有していること
1.3 サンプルデータについて
デモアプリにデモ用シミュレーション結果と、デモシミュレーションで利用したデータを公開しています。データ作成の際にはこちらのデータもご活用ください。
- デモシミュレーション結果一覧
トップ画面からデモシミュレーション結果を確認できます。

- サンプルデータ一覧
デモシミュレーションで利用したサンプルデータを公開しています。Upload Data Files
ボタンをクリックし、データ一覧を参照ください。

2.手順
2.1 データ生成ツールを利用したデータ作成
FUJITSU Research Portalから、技術一覧→シェアドモビリティ最適配置を選択します。 ページ下部にあるデータ生成ツールを試すボタンをクリックすると、本サービスを利用することができます。 シェアドモビリティ最適配置のトップ画面は以下のような画面です。

2.1.1 地図データ生成:OSM Converter
OSM Converterでは、任意の地点での地図データを生成します。
- Geocodingで好きな都市を入力します
- 必要に応じてParameterを調整します
- Generateボタンを押します
- Downloadボタンを押します

2.1.2 ODデータ生成
移動開始場所・移動目的場所を設定することで人々の動きのデータを生成します。
方法1: OD Builderを利用した手動登録
- OD Builderを開きます
- 地図上で出発地・目的地を登録します
- 必要に応じてParameterを調整します
- Downloadボタンを押します
方法2: OD Generatorを利用した自動生成
- Synthetic OD Generatorを開きます
- スライダで人数を設定します
- 必要に応じてParameterを調整します
- Downloadボタンを押します

2.1.3 シェアドeスクータのステーション設定
方法1 Stations Builderを利用した手動登録
- Stations Builderを開きます
- 地図上でステーション位置を登録します
- 必要に応じてParameterを調整します
- Downloadボタンを押します
方法2 Stations Generatorを利用した自動生成
- Synthetic Stations Generatorを開きます
- スライダでstation数を設定します
- 必要に応じてParameterを調整します
- Downloadボタンを押します

2.1.4 model.jsonデータ生成
人の行動選択モデルとして、恣意的な選択確率を指定したい場合向けの設定ファイルです。
- model.json Generatorを開きます
- 必要に応じてParameterを調整します
- Downloadボタンを押します

2.1.5 precondition.jsonデータ生成
デモアプリ(Webアプリ)からファイルアップロードを行ってデジタルリハーサルを行うときに必要なJSONデータを生成します。
- precondition.json Builderを開きます
- 必要に応じてParameterを調整します
- Downloadボタンを押します
{
"USECASE":"dynamic-discount"
"ASSIMIL_PERSON_FILE":"simdata-your-simdataId-of-od/od.csv.gz"
"SOARS_STATIONS_FILE":"simdata-your-simdataId-of-stations-csv/stations.csv"
"SUMO_NET_FILE":"simdata-your-simdataId-of-net-file/map.net.xml.gz"
"DMM_MODEL_INFO_FILE":"simdata-your-simdataId-of-model-file/model.json"
"MAP_CENTER_LATITUDE":"35.444395"
"MAP_CENTER_LONGITUDE":"139.636773"
"CURRENCY_SYMBOL":"¥"
"CURRENCY_RATE":"189.1800"
"START_HOUR":"10"
"END_HOUR":"12"
}
2.1.6 road-closure.csv road-pricing.csv データ生成
road-closure.csv
閉鎖する道路を設定するCSV形式のファイルです。
road-pricing.csv
課金する道路を設定するCSV形式のファイルです。
- closure.csv road-pricing.csv Generatorを開きます
- 必要に応じてParameterを調整します
- Downloadボタンを押します

2.2 ユースケース: ダイナミックディスカウント
概要
人が目的地に移動する手段として、車、徒歩、escooterの選択肢を設け、それぞれの人がコストや時間によって、移動手段を選択し、移動するというデジタルリハーサルを行うユースケースです。 escooterを借りるときに、escooterのステーションの状況に応じてディスカウントすることで、コストに影響を与え、人の移動手段の選択に変化を与えます。 それにより、escooterの利用率や利用料収入への変化がどうなるかを確認することができます。 また、escooterの初期配備を変更することもできます。
デジタルリハーサルの入出力
デジタルリハーサルの入出力は、ユースケースごとに定義されます。 ダイナミックディスカウントは、以下のフォーマットで入力ファイルを用意します。 出力は後述する「デジタルリハーサルの結果として出力されるファイル」のフォーマットで出力されます。
デジタルリハーサルに必要な入力ファイル
(共通)
- stations.csv
- map.net.xml.gz
- od.csv.gz
- (model.json)
map.net.xml.gz
およびod.csv.gz
は、必ずgzip
してください。
(WEBアプリの場合)
- precondition.json
(APIの場合)
- condition.json
- env.json
map.net.xml.gz
SUMOで使用するネットファイルです。作成方法は 2.1.1 地図データ生成:OSM Converter もしくは2.6 地図データ登録手順を参照ください。
stations.csv
name,zone,latitude,longitude,initial
bay1,a,35.55934337167842,139.63850582201087,3
bay2,a,35.580495,139.6351646,3
...
escooterのステーションの初期配置を設定するCSV形式のファイルです。
od.csv.gz
人の移動を出発地と到着地として指定するファイルです。
oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat,type,age,gender_type,driving_license,car_ownership
person-0,05:00:00,139.582230,35.436874,139.558556,35.424722,car,52,1,1,2
...
項目を省略する場合は、すべての行で省略します。 必須項目のみの場合は以下のような形になります。
oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat
person-0,05:00:22,139.582230,35.436874,139.558556,35.424722
...
model.json
人の行動選択モデルとして、恣意的な選択確率を指定したい場合向けのファイルです。
固定確率
{
"rulebase_model": "fixed",
"fixed_weights": {
"CAR": 1,
"WALKING": 1,
"CYCLING": 1
}
}
各移動手段の選択確率(重み)を指定する場合向け。
- escooterだけを選択させたい場合、
"fixed_weights": {"CYCLING": 1}
- carだけを選択させたい場合、
"fixed_weights": {"CAR": 1}
- pedestrianだけを選択させたい場合、
"fixed_weights": {"WALKING": 1}
ランダム
{"rulebase_model": "random"}
各移動手段の選択確率をランダムにする場合向け。
時間とコストの重み係数指定
{
"rulebase_model": "linear",
"w_time": 1,
"w_cost": 1
}
移動時の各選択肢に関し、時間とコストの重みを指定する場合向け。
- 時間のみで移動手段を選択(時間が短い移動手段を選択)させたい場合、
"w_time": 1, "w_cost": 0
- コストのみで移動手段を選択(コストが安い移動手段を選択)させたい場合、
"w_time": 0, "w_cost": 1
precondition.json
{
"USECASE":"dynamic-discount",
"ASSIMIL_PERSON_FILE":"simdata-your-simdataId-of-od/od.csv.gz",
"SOARS_STATIONS_FILE":"simdata-your-simdataId-of-stations-csv/stations.csv",
"SUMO_NET_FILE":"simdata-your-simdataId-of-net-file/map.net.xml.gz",
"DMM_MODEL_INFO_FILE":"simdata-your-simdataId-of-model-file/model.json",
"MAP_CENTER_LATITUDE":"35.444395",
"MAP_CENTER_LONGITUDE":"139.636773",
"CURRENCY_SYMBOL":"¥",
"CURRENCY_RATE":"189.1800",
"START_HOUR":"10",
"END_HOUR":"12"
}
condition.json
{
"name":"09/11_14:59:08",
"seed":0,
"start":5,
"end":6,
"usecases":{"batteryBased":{"enabled":true,"discount":10,"lowBatteryPercent":15},"numberBased":{"enabled":true,"discount":25,"scooterNumberThreshold":1}},
"usecase":"dynamic-discount",
"vtypes":{"car":true,"pedestrian":true,"escooter":true},
"dmmmodel":{},
"currencySymbol":"¥","createdAt":"2023-09-11T05:59:18.403Z","mapcenter":[139.645,35.584],
"stations":[{"id":"bay0","initial":2,"pos":[35.438606,139.642578],"zone":"b"},{"id":"bay1","initial":0,"pos":[35.449786,139.642196],"zone":"a"},{"id":"bay2","initial":1,"pos":[35.440275,139.645568],"zone":"a"},...]
}
どのような条件でデジタルリハーサルを実行したかを登録するJSON形式のファイルです。各プロパティ名は上記を参考にしてください。 サンプルWebサーバでは、このファイルを用いて、デジタルリハーサル結果表示を行っています。
env.json
{
"USECASE":"dynamic-discount",
"CONDITION_JSON_ID":"simdata-d2d0e1b3-7f78-4939-affc-939d712b15d7",
"ASSIMIL_PERSON_FILE":"simdata-272c8229-5a50-48c1-b0db-771c46e3b5d3/od.csv.gz",
"ASSIMIL_ALIGNER_MAX_STEPS":"3600",
"ASSIMIL_ALIGNER_START_TIME":"5",
"SOARS_STATIONS_FILE":"simdata-1c480139-c8d5-4d24-a551-af10f008339a/stations.csv",
"SUMO_NET_FILE":"simdata-4467079a-fbd0-440e-8505-a8c518e94562/map.net.xml.gz",
"DMM_MODEL_INFO_FILE":"simdata-feaf5067-43c2-4673-a229-43e0d7d5dc6d/model.json",
"RANDOM_SEED":"0",
"CURRENCY_RATE":"1.0",
"VTYPES":"car,pedestrian,escooter",
"USECASE_BATTERY_ENABLED":"false",
"USECASE_BATTERY_DISCOUNT":"0",
"USECASE_BATTERY_LOW_PERCENT":"15",
"USECASE_NUMBER_ENABLED":"false",
"USECASE_NUMBER_DISCOUNT":"0",
"USECASE_NUMBER_THRESHOLD":"1"
}
デジタルリハーサル実行時にデジタルリハーサルへの入力となる情報を記載するJSON形式のファイルです。 デジタルリハーサルの実行指示は、このenv.jsonを指定して行います。
デジタルリハーサルの結果として出力されるファイル
- states.txt
- output.txt
- current-usage.txt
- total-usage.txt
- choice.txt
これらのファイルは、デジタルリハーサル結果ファイル取得APIにて取得できます。
states.txt
{"name":"states","time":180,"data":{"oid":"person-12","value":{"wayId":"254070103#2","co2":0.0,"lon":139.64,"type":"pedestrian","lat":35.58,"speed":1.39,"ec":0.0}}}
...
JSON Linesフォーマットで出力されます。 1分毎に、人がどのような移動手段を用いてどこにいるかを緯度経度で示しています。 co2は、その時点でのco2排出量です。speedはその地点での速度になります。 wayIdは、その地点のSUMOにおける道路IDです。
誰も移動していないときは、dataがnullになります。
{"name":"states","time":60,"data":null}
output.txt
{"name":"output","time":8700,"data":{"oid":"person-695","value":{"move":{"travelTime":330,"carFuelCost":54.833810134163656,"carParkCharge":558.0,"carDistance":2939.5950000000003,"totalCo2":804645.4112034136,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"car"},"geometry":{"type":"LineString","coordinates":[[139.6663565,35.5956173],[139.6494531,35.6088534]]}}]},"park_dst":558.0,"type":"car","carTime":330,"fuelCost":54.833810134163656}}}}
{"name":"output","time":980,"data":{"oid":"person-9","value":{"move":{"pedestrianTime":750,"travelTime":750,"pedestrianDistance":1004.0500000000001,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6758158,35.6039659],[139.6678026,35.6030643]]}}]},"type":"pedestrian"}}}}
{"name":"output","time":1850,"data":{"oid":"person-21","value":{"move":{"pedestrianTime":1040,"escooterFee":390.6,"travelTime":1390,"escooterDiscount":0.0,"escooterCost":390.6,"pedestrianDistance":1269.5899999999997,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6551776,35.5881223],[139.65688347811465,35.5821084092067]]}},{"type":"Feature","properties":{"mode":"escooter"},"geometry":{"type":"LineString","coordinates":[[139.65688347811465,35.5821084092067],[139.6444064,35.5818028]]}},{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6444064,35.5818028],[139.6477012,35.580581]]}}]},"escooterDistance":1215.5099999999998,"escooterTime":350,"type":"pedestrian-escooter-pedestrian","escooterFeeDiscount":0.0}}}}
{"name":"output","time":8670,"data":{"oid":"person-564","value":{"move":{"reason":"escooterEmpty","opportunityLoss":409.20000000000005},"move2":{"pedestrianTime":1810,"travelTime":1810,"pedestrianDistance":2249.7899999999995,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6307184,35.5844267],[139.6429601,35.5702724]]}}]},"type":"pedestrian"}}}}
...
JSON Linesフォーマットで出力されます。 10秒間隔で、目的地に到着した人の移動の履歴を出力します。 一人に対して、その人が到着した時のみ、その人の情報が一度だけ出力されます。
料金は、£を起点としており、env.jsonにてCURRENCY_RATE
を設定することで、レートで換算した値が返されます。
escooter利用料金は、基本料金が1.5£で、1分毎に0.1£です。
駐車料金は、3£です。
また、escooterが借りれなかった場合には、moveは以下の出力となります。
予約を失敗したときには、移動手段を絞った上で、再度移動を試みるため、move2として、上記と同様の出力が追加で行われます。
選択肢の移動手段を用いて、移動することができない場合には、以下が出力されます。
{"name":"output","time":150,"data":{"oid":"person-18","value":{"move":{"message":"Could not create plan."}}}}
current-usage.txt
{"name":"current-usage","time":60,"data":{"oid":"station-18","value":{"reserved":0,"minBattery":100.0,"type":"station","low":0,"available":4}}}
...
JSON Linesフォーマットで出力されます。 1分間隔で、すべてのステーションのescooterの状況が出力されています。
lowと判断されるescooterは、env.jsonにおける、USECASE_BATTERY_LOW_PERCENT
によって指定された残量以下になったものです。
total-usage.txt
{"name":"total-usage","time":0,"data":{"oid":"station-14","value":{"rentCount":2,"type":"station","returnCount":1}}}
...
JSON Linesフォーマットで出力されます。 デジタルリハーサル終了時に、すべてのステーションのescooterの貸し出し結果が出力されます。
choice.txt
{"name": "choice", "time": 110, "data": {"oid": "person-4", "value": {"plans": [{"mainMode": "CAR", "subMode": "CAR", "time": 285, "cost": 3.425899683600594, "distance": 3047.582709127686, "type": "car", "normalized_time": 1807.0, "normalized_cost": 1.0, "probability": 0.925650575652241}, {"mainMode": "CYCLING", "subMode": "WALKING", "time": 1816, "cost": 3.0, "distance": 3548.5852119360934, "type": "escooter", "normalized_time": 1888.0, "normalized_cost": 0.875682383334419, "probability": 0.005469548460307576}, {"mainMode": "CYCLING", "subMode": "WALKING", "time": 1881, "cost": 3.0, "distance": 3671.499009820486, "type": "escooter", "normalized_time": 1891.0, "normalized_cost": 0.875682383334419, "probability": 0.005398592563289859}, {"mainMode": "WALKING", "subMode": "WALKING", "time": 3565, "cost": 0.0, "distance": 3047.582709127686, "type": "pedestrian", "normalized_time": 1981.0, "normalized_cost": 0.0, "probability": 0.06347298844144315}], "people_features": [40, 1, 0, 1], "environment_features": [3047.582709127686]}}}
{"simulator":"action-selector","name":"choice","time":120,"data":{"oid":"person-4","value":{"choice":0}}}
JSON Linesフォーマットで出力されます。 移動手段を選択する際に出力されます。 選択肢と選択結果が出力されます。
選択肢は以下のフォーマットで出力されます。
plansは、選択肢の配列になります。
選択結果は、以下のフォーマットで出力されます。
2.3 ユースケース: 道路閉鎖
概要
人が目的地に移動する手段として、車、徒歩、自転車、escooterの選択肢を設け、それぞれの人がコストや時間によって、移動手段を選択し、移動するというデジタルリハーサルを行うユースケースです。 道路を移動手段毎に時間帯で閉鎖することにより、移動ルートが変わり、移動時間に影響を与え、人の移動手段の選択に変化を与えます。
また、ダイナミックディスカウントや初期配備のユースケースと同様、以下の影響の確認も可能です。
- escooterを借りるときに、escooterのステーションの状況に応じてディスカウントすることで、コストに影響を与え、人の移動手段の選択に変化を与えます。それにより、escooterの利用率や利用料収入への変化がどうなるかを確認することができます。
- また、初期配備のユースケースと同様、escooterの初期配備を変更することもできます。
移動手段として、トラックも存在しています。ただし、トラックは移動手段として選択するのではなく、必ずトラックで移動する人としてデジタルリハーサルに登場します。
デジタルリハーサルの入出力
デジタルリハーサルの入出力は、ユースケースごとに定義されます。 道路閉鎖は、以下のフォーマットで入力ファイルを用意します。 出力は後述する「デジタルリハーサルの結果として出力されるファイル」のフォーマットで出力されます。
デジタルリハーサルに必要な入力ファイル
(共通)
- stations.csv
- road-closure.csv
- map.net.xml.gz
- od.csv.gz
- (model.json)
map.net.xml.gz
およびod.csv.gz
は、必ずgzip
してください。
(WEBアプリの場合)
- precondition.json
(APIの場合)
- condition.json
- env.json
precondition.json
{
"USECASE": "road-closure",
"ASSIMIL_PERSON_FILE": "simdata-your-simdataId-of-od/od.csv.gz",
"SOARS_STATIONS_FILE": "simdata-your-simdataId-of-stations-csv/stations.csv",
"SUMO_NET_FILE": "simdata-your-simdataId-of-net-file/map.net.xml.gz",
"DMM_MODEL_INFO_FILE": "simdata-your-simdataId-of-model-file/model.json",
"ROAD_CLOSURE_FILE": "simdata-your-simdataId-of-road-closure-file/road-closure.csv",
"MAP_CENTER_LATITUDE":"35.444395",
"MAP_CENTER_LONGITUDE":"139.636773",
"MAP_ZOOM": "14",
"CURRENCY_SYMBOL": "¥",
"CURRENCY_RATE":"189.1800",
"START_HOUR": "10",
"END_HOUR": "12"
}
condition.json
{
"name":"09/11_14:59:08",
"seed":0,
"start":5,
"end":6,
"usecases":{"batteryBased":{"enabled":true,"discount":10,"lowBatteryPercent":15},"numberBased":{"enabled":true,"discount":25,"scooterNumberThreshold":1}},
"usecase":"road-closure",
"vtypes":{"car":true,"pedestrian":true,"escooter":false,"bicycle":false,"truck":false},
"dmmmodel":{},
"currencySymbol":"¥","createdAt":"2023-09-11T05:59:18.403Z","mapcenter":[139.645,35.584],
"stations":[{"id":"bay0","initial":2,"pos":[35.438606,139.642578],"zone":"b"},{"id":"bay1","initial":0,"pos":[35.449786,139.642196],"zone":"a"},{"id":"bay2","initial":1,"pos":[35.440275,139.645568],"zone":"a"},...]
}
どのような条件でデジタルリハーサルを実行したかを登録するJSON形式のファイルです。 フォーマットは自由です。 サンプルWebサーバでは、このファイルを用いて、デジタルリハーサル結果表示を行っています。
stations.csv
name,zone,latitude,longitude,initial
bay1,a,35.55934337167842,139.63850582201087,3
bay2,a,35.580495,139.6351646,3
...
escooterのステーションの初期配置を設定するCSV形式のファイルです。
road-closure.csv
oid,start,end,type,polygon,lanes
948feb22aa309eda98f5f36cee428b4b,05:00:00,06:00:00,car,"139.66056921784974,35.57560496598741,139.66658309933842,35.57404537981951,139.66449131447303,35.56879927623754,139.66056921784974,35.57560496598741",""
...
閉鎖する道路を設定するCSV形式のファイルです。
map.net.xml.gz
SUMOで使用するネットファイルです。作成方法は 2.1.1 地図データ生成:OSM Converter もしくは2.6 地図データ登録手順を参照ください。
od.csv.gz
人の移動を出発地と到着地として指定するファイルです。
oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat,type,age,gender_type,driving_license,car_ownership
person-0,05:00:00,139.582230,35.436874,139.558556,35.424722,truck,52,1,1,2
...
項目を省略する場合は、すべての行で省略します。 必須項目のみの場合は以下のような形になります。
oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat
person-0,05:00:00,139.582230,35.436874,139.558556,35.424722
...
model.json
人の行動選択モデルとして、恣意的な選択確率を指定したい場合向けのファイルです。
固定確率
{
"rulebase_model": "fixed",
"fixed_weights": {
"CAR": 1,
"WALKING": 1,
"CYCLING": 1
}
}
各移動手段の選択確率(重み)を指定する場合向け。
- escooterだけを選択させたい場合、
"fixed_weights": {"CYCLING": 1}
- carだけを選択させたい場合、
"fixed_weights": {"CAR": 1}
- pedestrianだけを選択させたい場合、
"fixed_weights": {"WALKING": 1}
ランダム
{"rulebase_model": "random"}
各移動手段の選択確率をランダムにする場合向け。
時間とコストの重み係数指定
{
"rulebase_model": "linear",
"w_time": 1,
"w_cost": 1
}
移動時の各選択肢に関し、時間とコストの重みを指定する場合向け。
- 時間のみで移動手段を選択(時間が短い移動手段を選択)させたい場合、
"w_time": 1, "w_cost": 0
- コストのみで移動手段を選択(コストが安い移動手段を選択)させたい場合、
"w_time": 0, "w_cost": 1
env.json
{
"USECASE":"road-closure",
"CONDITION_JSON_ID":"simdata-d2d0e1b3-7f78-4939-affc-939d712b15d7",
"ASSIMIL_PERSON_FILE":"simdata-272c8229-5a50-48c1-b0db-771c46e3b5d3/od.csv.gz",
"ASSIMIL_ALIGNER_MAX_STEPS":"3600",
"ASSIMIL_ALIGNER_START_TIME":"5",
"SOARS_STATIONS_FILE":"simdata-1c480139-c8d5-4d24-a551-af10f008339a/stations.csv",
"SUMO_NET_FILE":"simdata-4467079a-fbd0-440e-8505-a8c518e94562/map.net.xml.gz",
"DMM_MODEL_INFO_FILE":"simdata-feaf5067-43c2-4673-a229-43e0d7d5dc6d/model.json",
"RANDOM_SEED":"0",
"CURRENCY_RATE":"1.0",
"ROAD_CLOSURE_FILE":"simdata-f261a82b-dac2-4034-a765-7e4d56901c12/road-closure.csv",
"VTYPES":"car,pedestrian",
"USECASE_BATTERY_ENABLED":"false",
"USECASE_BATTERY_DISCOUNT":"0",
"USECASE_BATTERY_LOW_PERCENT":"15",
"USECASE_NUMBER_ENABLED":"false",
"USECASE_NUMBER_DISCOUNT":"0",
"USECASE_NUMBER_THRESHOLD":"1"
}
デジタルリハーサル実行時にデジタルリハーサルへの入力となる情報を記載するJSON形式のファイルです。 デジタルリハーサルの実行指示は、このenv.jsonを指定して行います。
デジタルリハーサルの結果として出力されるファイル
- states.txt
- output.txt
- current-usage.txt
- total-usage.txt
- choice.txt
これらのファイルは、デジタルリハーサル結果ファイル取得APIにて取得できます。
states.txt
{"name":"states","time":180,"data":{"oid":"person-12","value":{"wayId":"254070103#2","co2":0.0,"lon":139.64,"type":"pedestrian","lat":35.58,"speed":1.39,"ec":0.0}}}
...
JSON Linesフォーマットで出力されます。 1分毎に、人がどのような移動手段を用いてどこにいるかを緯度経度で示しています。 co2は、その時点でのco2排出量です。speedはその地点での速度になります。 wayIdは、その地点のSUMOにおける道路IDです。
誰も移動していないときは、dataがnullになります。
{"name":"states","time":60,"data":null}
output.txt
{"name":"output","time":8700,"data":{"oid":"person-695","value":{"move":{"travelTime":330,"carFuelCost":54.833810134163656,"carParkCharge":558.0,"carDistance":2939.5950000000003,"totalCo2":804645.4112034136,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"car"},"geometry":{"type":"LineString","coordinates":[[139.6663565,35.5956173],[139.6494531,35.6088534]]}}]},"park_dst":558.0,"type":"car","carTime":330,"fuelCost":54.833810134163656}}}}
{"name":"output","time":980,"data":{"oid":"person-9","value":{"move":{"pedestrianTime":750,"travelTime":750,"pedestrianDistance":1004.0500000000001,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6758158,35.6039659],[139.6678026,35.6030643]]}}]},"type":"pedestrian"}}}}
{"name":"output","time":1850,"data":{"oid":"person-21","value":{"move":{"pedestrianTime":1040,"escooterFee":390.6,"travelTime":1390,"escooterDiscount":0.0,"escooterCost":390.6,"pedestrianDistance":1269.5899999999997,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6551776,35.5881223],[139.65688347811465,35.5821084092067]]}},{"type":"Feature","properties":{"mode":"escooter"},"geometry":{"type":"LineString","coordinates":[[139.65688347811465,35.5821084092067],[139.6444064,35.5818028]]}},{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6444064,35.5818028],[139.6477012,35.580581]]}}]},"escooterDistance":1215.5099999999998,"escooterTime":350,"type":"pedestrian-escooter-pedestrian","escooterFeeDiscount":0.0}}}}
{"name":"output","time":8670,"data":{"oid":"person-564","value":{"move":{"reason":"escooterEmpty","opportunityLoss":409.20000000000005},"move2":{"pedestrianTime":1810,"travelTime":1810,"pedestrianDistance":2249.7899999999995,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6307184,35.5844267],[139.6429601,35.5702724]]}}]},"type":"pedestrian"}}}}
...
JSON Linesフォーマットで出力されます。 10秒間隔で、目的地に到着した人の移動の履歴を出力します。 一人に対して、その人が到着した時のみ、その人の情報が一度だけ出力されます。
料金は、£を起点としており、env.jsonにてCURRENCY_RATE
を設定することで、レートで換算した値が返されます。
escooter利用料金は、基本料金が1.5£で、1分毎に0.1£です。
駐車料金は、車が3£で、自転車が1£です。
また、escooterが借りれなかった場合には、moveは以下の出力となります。
予約を失敗したときには、移動手段を絞った上で、再度移動を試みるため、move2として、上記と同様の出力が追加で行われます。
選択肢の移動手段を用いて、移動することができない場合には、以下が出力されます。
{"name":"output","time":150,"data":{"oid":"person-18","value":{"move":{"message":"Could not create plan."}}}}
current-usage.txt
{"name":"current-usage","time":60,"data":{"oid":"station-18","value":{"reserved":0,"minBattery":100.0,"type":"station","low":0,"available":4}}}
...
JSON Linesフォーマットで出力されます。 1分間隔で、すべてのステーションのescooterの状況が出力されています。
lowと判断されるescooterは、env.jsonにおける、USECASE_BATTERY_LOW_PERCENT
によって指定された残量以下になったものです。
total-usage.txt
{"name":"total-usage","time":0,"data":{"oid":"station-14","value":{"rentCount":2,"type":"station","returnCount":1}}}
...
JSON Linesフォーマットで出力されます。 デジタルリハーサル終了時に、すべてのステーションのescooterの貸し出し結果が出力されます。
choice.txt
{"name": "choice", "time": 110, "data": {"oid": "person-4", "value": {"plans": [{"mainMode": "CAR", "subMode": "CAR", "time": 285, "cost": 3.425899683600594, "distance": 3047.582709127686, "type": "car", "normalized_time": 1807.0, "normalized_cost": 1.0, "probability": 0.925650575652241}, {"mainMode": "CYCLING", "subMode": "WALKING", "time": 1816, "cost": 3.0, "distance": 3548.5852119360934, "type": "escooter", "normalized_time": 1888.0, "normalized_cost": 0.875682383334419, "probability": 0.005469548460307576}, {"mainMode": "CYCLING", "subMode": "WALKING", "time": 1881, "cost": 3.0, "distance": 3671.499009820486, "type": "escooter", "normalized_time": 1891.0, "normalized_cost": 0.875682383334419, "probability": 0.005398592563289859}, {"mainMode": "WALKING", "subMode": "WALKING", "time": 3565, "cost": 0.0, "distance": 3047.582709127686, "type": "pedestrian", "normalized_time": 1981.0, "normalized_cost": 0.0, "probability": 0.06347298844144315}], "people_features": [40, 1, 0, 1], "environment_features": [3047.582709127686]}}}
{"simulator":"action-selector","name":"choice","time":120,"data":{"oid":"person-4","value":{"choice":0}}}
JSON Linesフォーマットで出力されます。 移動手段を選択する際に出力されます。 選択肢と選択結果が出力されます。
選択肢は以下のフォーマットで出力されます。
plansは、選択肢の配列になります。
選択結果は、以下のフォーマットで出力されます。
2.4 ユースケース: ロードプライシング
概要
人が目的地に移動する手段として、車、徒歩、自転車、escooterの選択肢を設け、それぞれの人がコストや時間によって、移動手段を選択し、移動するというデジタルリハーサルを行うユースケースです。 道路に対して、移動手段毎に時間帯で課金することにより、コストに影響を与え、迂回する場合には移動時間に影響を与え、人の移動手段の選択に変化を与えます。
また、道路閉鎖やダイナミックディスカウントや初期配備のユースケースと同様、以下の影響の確認も可能です。
- 道路を移動手段毎に時間帯で閉鎖することにより、移動ルートが変わり、移動時間に影響を与え、人の移動手段の選択に変化を与えます。
- escooterを借りるときに、escooterのステーションの状況に応じてディスカウントすることで、コストに影響を与え、人の移動手段の選択に変化を与えます。それにより、escooterの利用率や利用料収入への変化がどうなるかを確認することができます。
- また、初期配備のユースケースと同様、escooterの初期配備を変更することもできます。
移動手段として、トラックも存在しています。ただし、トラックは移動手段として選択するのではなく、必ずトラックで移動する人としてデジタルリハーサルに登場します。
デジタルリハーサルの入出力
デジタルリハーサルの入出力は、ユースケースごとに定義されます。 ロードプライシングは、以下のフォーマットで入力ファイルを用意します。 出力は後述する「デジタルリハーサルの結果として出力されるファイル」のフォーマットで出力されます。
デジタルリハーサルに必要な入力ファイル
(共通)
- stations.csv
- road-closure.csv
- road-pricing.csv
- map.net.xml.gz
- od.csv.gz
- (model.json)
map.net.xml.gz
およびod.csv.gz
は、必ずgzip
してください。
(WEBアプリの場合)
- precondition.json
(APIの場合)
- condition.json
- env.json
precondition.json
{
"USECASE": "road-pricing",
"ASSIMIL_PERSON_FILE": "simdata-your-simdataId-of-od/od.csv.gz",
"SOARS_STATIONS_FILE": "simdata-your-simdataId-of-stations-csv/stations.csv",
"SUMO_NET_FILE": "simdata-your-simdataId-of-net-file/map.net.xml.gz",
"DMM_MODEL_INFO_FILE": "simdata-your-simdataId-of-model-file/model.json",
"ROAD_CLOSURE_FILE": "simdata-your-simdataId-of-road-closure-file/road-closure.csv",
"ROAD_PRICING_FILE": "simdata-your-simdataId-of-road-pricing-file/road-pricing.csv",
"MAP_CENTER_LATITUDE":"35.444395",
"MAP_CENTER_LONGITUDE":"139.636773",
"MAP_ZOOM": "14",
"CURRENCY_SYMBOL": "¥",
"CURRENCY_RATE":"189.1800",
"START_HOUR": "10",
"END_HOUR": "12"
}
condition.json
{
"name":"09/11_14:59:08",
"seed":0,
"start":5,
"end":6,
"usecases":{"batteryBased":{"enabled":true,"discount":10,"lowBatteryPercent":15},"numberBased":{"enabled":true,"discount":25,"scooterNumberThreshold":1}},
"usecase":"road-pricing",
"vtypes":{"car":true,"pedestrian":true,"escooter":false,"bicycle":false,"truck":false},
"detour":{"car":true,"pedestrian":false,"bicycle":false},
"dmmmodel":{},
"currencySymbol":"¥","createdAt":"2023-09-11T05:59:18.403Z","mapcenter":[139.645,35.584],
"stations":[{"id":"bay0","initial":2,"pos":[35.438606,139.642578],"zone":"b"},{"id":"bay1","initial":0,"pos":[35.449786,139.642196],"zone":"a"},{"id":"bay2","initial":1,"pos":[35.440275,139.645568],"zone":"a"},...]
}
どのような条件でデジタルリハーサルを実行したかを登録するJSON形式のファイルです。 フォーマットは自由です。 サンプルWebサーバでは、このファイルを用いて、デジタルリハーサル結果表示を行っています。
stations.csv
name,zone,latitude,longitude,initial
bay1,a,35.55934337167842,139.63850582201087,3
bay2,a,35.580495,139.6351646,3
...
escooterのステーションの初期配置を設定するCSV形式のファイルです。
road-closure.csv
oid,start,end,type,polygon,lanes
948feb22aa309eda98f5f36cee428b4b,05:00:00,06:00:00,car,"139.66056921784974,35.57560496598741,139.66658309933842,35.57404537981951,139.66449131447303,35.56879927623754,139.66056921784974,35.57560496598741",""
...
閉鎖する道路を設定するCSV形式のファイルです。
road-pricing.csv
oid,start,end,type,price,polygon
2ac5dc629aebf5a9077c2a77178a0b84,05:00:00,06:00:00,car,200,"139.6512009048468,35.579720773775605,139.6559554628551,35.5770538920699,139.65275843247736,35.57592044045461,139.6512009048468,35.579720773775605"
...
課金する道路を設定するCSV形式のファイルです。
map.net.xml.gz
SUMOで使用するネットファイルです。作成方法は 2.1.1 地図データ生成:OSM Converter もしくは2.6 地図データ登録手順を参照ください。
od.csv.gz
人の移動を出発地と到着地として指定するファイルです。
oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat,type,age,gender_type,driving_license,car_ownership
person-0,05:00:00,139.582230,35.436874,139.558556,35.424722,truck,52,1,1,2
...
項目を省略する場合は、すべての行で省略します。 必須項目のみの場合は以下のような形になります。
oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat
person-0,05:00:00,139.582230,35.436874,139.558556,35.424722
...
model.json
人の行動選択モデルとして、恣意的な選択確率を指定したい場合向けのファイルです。
固定確率
{
"rulebase_model": "fixed",
"fixed_weights": {
"CAR": 1,
"WALKING": 1,
"CYCLING": 1
}
}
各移動手段の選択確率(重み)を指定する場合向け。
- escooterだけを選択させたい場合、
"fixed_weights": {"CYCLING": 1}
- carだけを選択させたい場合、
"fixed_weights": {"CAR": 1}
- pedestrianだけを選択させたい場合、
"fixed_weights": {"WALKING": 1}
ランダム
{"rulebase_model": "random"}
各移動手段の選択確率をランダムにする場合向け。
時間とコストの重み係数指定
{
"rulebase_model": "linear",
"w_time": 1,
"w_cost": 1
}
移動時の各選択肢に関し、時間とコストの重みを指定する場合向け。
- 時間のみで移動手段を選択(時間が短い移動手段を選択)させたい場合、
"w_time": 1, "w_cost": 0
- コストのみで移動手段を選択(コストが安い移動手段を選択)させたい場合、
"w_time": 0, "w_cost": 1
env.json
{
"USECASE":"road-pricing",
"CONDITION_JSON_ID":"simdata-d2d0e1b3-7f78-4939-affc-939d712b15d7",
"ASSIMIL_PERSON_FILE":"simdata-272c8229-5a50-48c1-b0db-771c46e3b5d3/od.csv.gz",
"ASSIMIL_ALIGNER_MAX_STEPS":"3600",
"ASSIMIL_ALIGNER_START_TIME":"5",
"SOARS_STATIONS_FILE":"simdata-1c480139-c8d5-4d24-a551-af10f008339a/stations.csv",
"SUMO_NET_FILE":"simdata-4467079a-fbd0-440e-8505-a8c518e94562/map.net.xml.gz",
"DMM_MODEL_INFO_FILE":"simdata-feaf5067-43c2-4673-a229-43e0d7d5dc6d/model.json",
"RANDOM_SEED":"0",
"CURRENCY_RATE":"1.0",
"ROAD_CLOSURE_FILE":"simdata-f261a82b-dac2-4034-a765-7e4d56901c12/road-closure.csv",
"ROAD_PRICING_FILE":"simdata-f0917da6-4a9b-4e24-99f4-909f240be14d/road-pricing.csv",
"VTYPES":"car,pedestrian",
"DETOUR_VTYPES":"car",
"USECASE_BATTERY_ENABLED":"false",
"USECASE_BATTERY_DISCOUNT":"0",
"USECASE_BATTERY_LOW_PERCENT":"15",
"USECASE_NUMBER_ENABLED":"false",
"USECASE_NUMBER_DISCOUNT":"0",
"USECASE_NUMBER_THRESHOLD":"1"
}
デジタルリハーサル実行時にデジタルリハーサルへの入力となる情報を記載するJSON形式のファイルです。 デジタルリハーサルの実行指示は、このenv.jsonを指定して行います。
デジタルリハーサルの結果として出力されるファイル
- states.txt
- output.txt
- current-usage.txt
- total-usage.txt
- choice.txt
これらのファイルは、デジタルリハーサル結果ファイル取得APIにて取得できます。
states.txt
{"name":"states","time":180,"data":{"oid":"person-12","value":{"wayId":"254070103#2","co2":0.0,"lon":139.64,"type":"pedestrian","lat":35.58,"speed":1.39,"ec":0.0}}}
...
JSON Linesフォーマットで出力されます。 1分毎に、人がどのような移動手段を用いてどこにいるかを緯度経度で示しています。 co2は、その時点でのco2排出量です。speedはその地点での速度になります。 wayIdは、その地点のSUMOにおける道路IDです。
誰も移動していないときは、dataがnullになります。
{"name":"states","time":60,"data":null}
output.txt
{"name":"output","time":810,"data":{"oid":"person-22","value":{"move":{"travelTime":410,"carFuelCost":67.96146549542729,"carParkCharge":558.0,"carToll":200.0,"carDistance":3889.3099999999986,"totalCo2":997283.9971498502,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"car"},"geometry":{"type":"LineString","coordinates":[[139.6562912,35.601877],[139.6605364,35.5808197]]}}]},"park_dst":558.0,"type":"car","carTime":410,"toll":200.0,"fuelCost":67.96146549542729}}}}
{"name":"output","time":850,"data":{"oid":"person-32","value":{"move":{"travelTime":360,"carFuelCost":61.355974420527964,"carDistance":4107.1500000000015,"detour":true,"totalCo2":900353.3248300118,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"car"},"geometry":{"type":"LineString","coordinates":[[139.6605364,35.5808197],[139.6279828,35.59391]]}}]},"type":"car","carTime":360,"fuelCost":61.355974420527964}}}}
{"name":"output","time":980,"data":{"oid":"person-9","value":{"move":{"pedestrianTime":750,"travelTime":750,"pedestrianDistance":1004.0500000000001,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6758158,35.6039659],[139.6678026,35.6030643]]}}]},"type":"pedestrian"}}}}
{"name":"output","time":1850,"data":{"oid":"person-21","value":{"move":{"pedestrianTime":1040,"escooterFee":390.6,"travelTime":1390,"escooterDiscount":0.0,"escooterCost":390.6,"pedestrianDistance":1269.5899999999997,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6551776,35.5881223],[139.65688347811465,35.5821084092067]]}},{"type":"Feature","properties":{"mode":"escooter"},"geometry":{"type":"LineString","coordinates":[[139.65688347811465,35.5821084092067],[139.6444064,35.5818028]]}},{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6444064,35.5818028],[139.6477012,35.580581]]}}]},"escooterDistance":1215.5099999999998,"escooterTime":350,"type":"pedestrian-escooter-pedestrian","escooterFeeDiscount":0.0}}}}
{"name":"output","time":8670,"data":{"oid":"person-564","value":{"move":{"reason":"escooterEmpty","opportunityLoss":409.20000000000005},"move2":{"pedestrianTime":1810,"travelTime":1810,"pedestrianDistance":2249.7899999999995,"totalCo2":0.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.6307184,35.5844267],[139.6429601,35.5702724]]}}]},"type":"pedestrian"}}}}
...
JSON Linesフォーマットで出力されます。 10秒間隔で、目的地に到着した人の移動の履歴を出力します。 一人に対して、その人が到着した時のみ、その人の情報が一度だけ出力されます。
料金は、£を起点としており、env.jsonにてCURRENCY_RATE
を設定することで、レートで換算した値が返されます。
escooter利用料金は、基本料金が1.5£で、1分毎に0.1£です。
駐車料金は、車が3£で、自転車が1£です。
また、escooterが借りれなかった場合には、moveは以下の出力となります。
予約を失敗したときには、移動手段を絞った上で、再度移動を試みるため、move2として、上記と同様の出力が追加で行われます。
選択肢の移動手段を用いて、移動することができない場合には、以下が出力されます。
{"name":"output","time":150,"data":{"oid":"person-18","value":{"move":{"message":"Could not create plan."}}}}
current-usage.txt
{"name":"current-usage","time":60,"data":{"oid":"station-18","value":{"reserved":0,"minBattery":100.0,"type":"station","low":0,"available":4}}}
...
JSON Linesフォーマットで出力されます。 1分間隔で、すべてのステーションのescooterの状況が出力されています。
lowと判断されるescooterは、env.jsonにおける、USECASE_BATTERY_LOW_PERCENT
によって指定された残量以下になったものです。
total-usage.txt
{"name":"total-usage","time":0,"data":{"oid":"station-14","value":{"rentCount":2,"type":"station","returnCount":1}}}
...
JSON Linesフォーマットで出力されます。 デジタルリハーサル終了時に、すべてのステーションのescooterの貸し出し結果が出力されます。
choice.txt
{"name": "choice", "time": 110, "data": {"oid": "person-4", "value": {"plans": [{"mainMode": "CAR", "subMode": "CAR", "time": 285, "cost": 3.425899683600594, "distance": 3047.582709127686, "type": "car", "normalized_time": 1807.0, "normalized_cost": 1.0, "probability": 0.925650575652241}, {"mainMode": "CYCLING", "subMode": "WALKING", "time": 1816, "cost": 3.0, "distance": 3548.5852119360934, "type": "escooter", "normalized_time": 1888.0, "normalized_cost": 0.875682383334419, "probability": 0.005469548460307576}, {"mainMode": "CYCLING", "subMode": "WALKING", "time": 1881, "cost": 3.0, "distance": 3671.499009820486, "type": "escooter", "normalized_time": 1891.0, "normalized_cost": 0.875682383334419, "probability": 0.005398592563289859}, {"mainMode": "WALKING", "subMode": "WALKING", "time": 3565, "cost": 0.0, "distance": 3047.582709127686, "type": "pedestrian", "normalized_time": 1981.0, "normalized_cost": 0.0, "probability": 0.06347298844144315}], "people_features": [40, 1, 0, 1], "environment_features": [3047.582709127686]}}}
{"simulator":"action-selector","name":"choice","time":120,"data":{"oid":"person-4","value":{"choice":0}}}
JSON Linesフォーマットで出力されます。 移動手段を選択する際に出力されます。 選択肢と選択結果が出力されます。
選択肢は以下のフォーマットで出力されます。
plansは、選択肢の配列になります。
選択結果は、以下のフォーマットで出力されます。
2.5 ユースケース: パーク&ライド
概要
人が目的地に移動する手段として、車、徒歩、escooter、自転車、公共共通機関の選択肢を設け、それぞれの人がコストや時間によって、移動手段を選択し、移動するというデジタルリハーサルを行うユースケースです。
駐車場を設置することにより、公共交通機関への乗り換えが選択肢になり、コストや移動時間に影響を与え、人の移動手段の選択に変化を与えます。
また、ダイナミックディスカウントや初期配備のユースケースと同様、以下の影響の確認も可能です。
- escooterを借りるときに、escooterのステーションの状況に応じてディスカウントすることで、コストに影響を与え、人の移動手段の選択に変化を与えます。それにより、escooterの利用率や利用料収入への変化がどうなるかを確認することができます。
- また、初期配備のユースケースと同様、escooterの初期配備を変更することもできます。
デジタルリハーサルの入出力
デジタルリハーサルの入出力は、ユースケースごとに定義されます。 パーク&ライドは、以下のフォーマットで入力ファイルを用意します。 出力は後述する「デジタルリハーサルの結果として出力されるファイル」のフォーマットで出力されます。
デジタルリハーサルに必要な入力ファイル
(共通)
- stations.csv
- map.net.xml.gz
- od.csv.gz
- parking.csv
- (osm.pbf)
- (gtfs.zip)
map.net.xml.gz
およびod.csv.gz
は、必ずgzip
してください。
(WEBアプリの場合)
- precondition.json
(APIの場合)
- condition.json
- env.json
precondition.json
{
"USECASE": "park-and-ride",
"ASSIMIL_PERSON_FILE": "simdata-your-simdataId-of-od/od.csv.gz",
"SOARS_STATIONS_FILE": "simdata-your-simdataId-of-stations-csv/stations.csv",
"SUMO_NET_FILE": "simdata-your-simdataId-of-net-file/map.net.xml.gz",
"MAP_CENTER_LATITUDE":"35.444395",
"MAP_CENTER_LONGITUDE":"139.636773",
"MAP_ZOOM": "14",
"CURRENCY_SYMBOL": "¥",
"CURRENCY_RATE":"189.1800",
"START_HOUR": "10",
"END_HOUR": "12",
"DATE": "2024-05-13",
"TIMEZONE": "Asia/Tokyo",
"PARKING_FILE": "simdata-your-simdataId-of-parking-csv/parking.csv",
"PARK_CHARGE_DST": 0,
"OTP_OSM_FILE": "simdata-your-simdataId-of-otp-osm-pbf/osm.pbf",
"OTP_GTFS_USE_DEFAULT": true
}
condition.json
{
"name":"03/15_16:17:44",
"seed":0,
"date":{"year":2024,"month":3,"day":14},
"start":5,
"end":6,
"park_charge_dst":0,
"usecases":{"batteryBased":{"enabled":false,"discount":0,"lowBatteryPercent":15},"numberBased":{"enabled":false,"discount":0,"scooterNumberThreshold":1}},
"usecase":"park-and-ride",
"vtypes":{"car":true,"pedestrian":true,"escooter":false,"bicycle":true,"pt":true},
"dmmmodel":{},
"currencySymbol":"¥",
"createdAt":"2024-03-15T07:17:58.470Z",
"mapcenter":[139.645,35.584],
"parking":[{"id":"parking1","total":5,"pos":[139.64652349472,35.58208039592385],"type":"car","charge":100},{"id":"parking2","total":5,"pos":[139.64478542327885,35.58114675367203],"type":"bicycle","charge":100},{"id":"parking3","total":5,"pos":[139.64345504760655,35.581207833404605],"type":"car","charge":100},{"id":"parking4","total":5,"pos":[139.64252163887005,35.58129509008397],"type":"car","charge":100}]
}
どのような条件でデジタルリハーサルを実行したかを登録するJSON形式のファイルです。 フォーマットは自由です。 サンプルWebサーバでは、このファイルを用いて、デジタルリハーサル結果表示を行っています。
stations.csv
name,zone,latitude,longitude,initial
bay1,a,35.55934337167842,139.63850582201087,3
bay2,a,35.580495,139.6351646,3
...
escooterのステーションの初期配置を設定するCSV形式のファイルです。
parking.csv
name,latitude,longitude,total,type,charge
parking1,35.58139979797416,139.64179207801715,5,car,100
parking2,35.58081517716869,139.64339067458974,5,car,100
...
駐車場の配置を設定するCSV形式のファイルです。
map.net.xml.gz
SUMOで使用するネットファイルです。作成方法は 2.1.1 地図データ生成:OSM Converter もしくは2.6 地図データ登録手順を参照ください。
od.csv.gz
人の移動を出発地と到着地として指定するファイルです。
oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat,age,gender_type,driving_license,car_ownership
person-0,05:00:00,139.582230,35.436874,139.558556,35.424722,52,1,1,2
...
項目を省略する場合は、すべての行で省略します。 必須項目のみの場合は以下のような形になります。
oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat
person-0,05:00:00,139.582230,35.436874,139.558556,35.424722
...
env.json
{
"USECASE":"park-and-ride",
"CONDITION_JSON_ID":"simdata-79e4b04f-532e-43b5-8898-22b71e0b3aa4",
"ASSIMIL_PERSON_FILE":"simdata-272c8229-5a50-48c1-b0db-771c46e3b5d3/od.csv.gz",
"ASSIMIL_ALIGNER_MAX_STEPS":"3600",
"ASSIMIL_ALIGNER_START_TIME":"5",
"SOARS_STATIONS_FILE":"simdata-1c480139-c8d5-4d24-a551-af10f008339a/stations.csv",
"SUMO_NET_FILE":"simdata-4467079a-fbd0-440e-8505-a8c518e94562/map.net.xml.gz",
"DMM_MODEL_INFO_FILE":"simdata-feaf5067-43c2-4673-a229-43e0d7d5dc6d/model.json",
"RANDOM_SEED":"0",
"CURRENCY_RATE":"186.0",
"VTYPES":"car,pedestrian,bicycle,pt",
"USECASE_BATTERY_ENABLED":"false",
"USECASE_BATTERY_DISCOUNT":"0",
"USECASE_BATTERY_LOW_PERCENT":"15",
"USECASE_NUMBER_ENABLED":"false",
"USECASE_NUMBER_DISCOUNT":"0",
"USECASE_NUMBER_THRESHOLD":"1"
"DATE":"2024-03-14",
"TIMEZONE":"Asia/Tokyo",
"PARKING_FILE":"simdata-10f56ac9-9296-4c9b-ba34-7db6ddda809d/parking.csv",
"PARK_CHARGE_DST":0,
}
デジタルリハーサル実行時にデジタルリハーサルへの入力となる情報を記載するJSON形式のファイルです。 デジタルリハーサルの実行指示は、このenv.jsonを指定して行います。
GTFSファイルは、0から順に指定してください。途中指定されていないと、それ以降は使用されません。 例えば、0と2に指定していると、0のみが使用されます。
osm.pbf
OpenTripPlannerで使用する地図情報です。 作成方法は、こちらを参照ください。
gtfs.zip
OpenTripPlannerで使用するGTFSです。 GTFSについては、こちらを参照ください。
デジタルリハーサルの結果として出力されるファイル
- states.txt
- output.txt
- current-usage.txt
- total-usage.txt
- choice.txt
これらのファイルは、デジタルリハーサル結果ファイル取得APIにて取得できます。
states.txt
{"name":"states","time":180,"data":{"oid":"person-12","value":{"wayId":null,"co2":0.0,"lon":139.64,"type":"pedestrian","lat":35.58,"speed":1.39,"ec":0.0}}}
...
JSON Linesフォーマットで出力されます。 1分毎に、人がどのような移動手段を用いてどこにいるかを緯度経度で示しています。 co2は、その時点でのco2排出量です。speedはその地点での速度になります。 wayIdは、その地点のSUMOにおける道路IDです。typeがcar以外では、wayIdはnullです。
誰も移動していないときは、dataがnullになります。
{"name":"states","time":60,"data":null}
output.txt
{"name":"output","time":3010,"data":{"oid":"person-33","value":{"move":{"pedestrianTime":410,"fare":220.0,"travelTime":2470,"carFuelCost":21.343500000000002,"carParkCharge":100.0,"carDistance":1501.0,"pedestrianDistance":431.0,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"car"},"geometry":{"type":"LineString","coordinates":[[139.62805,35.57091],[139.62806,35.57079],[139.62809,35.57071],[139.62823,35.57051],[139.62851,35.5701],[139.6286,35.56994],[139.62868,35.56989],[139.62871,35.56987],[139.62878,35.56983],[139.62879,35.5699],[139.62881,35.56998],[139.62885,35.57005],[139.6289,35.57016],[139.62898,35.57035],[139.62899,35.57037],[139.62909,35.5706],[139.62926,35.571],[139.62927,35.57106],[139.63038,35.57105],[139.63068,35.5716],[139.63095,35.57207],[139.63101,35.57219],[139.63116,35.57246],[139.63146,35.57299],[139.63149,35.57314],[139.63173,35.57358],[139.63182,35.57373],[139.6319,35.57386],[139.63208,35.57418],[139.63242,35.57477],[139.6325,35.57492],[139.63203,35.57566],[139.63197,35.57575],[139.6318,35.57598],[139.63178,35.576],[139.63175,35.57602],[139.6315,35.57626],[139.63131,35.57643],[139.63127,35.57647],[139.63086,35.57686],[139.63038,35.5773],[139.63022,35.57754],[139.63003,35.57786],[139.62997,35.57794],[139.6298,35.57822],[139.62975,35.57846],[139.6297,35.5788],[139.62967,35.57899],[139.62963,35.57922],[139.62959,35.57952],[139.62956,35.57952],[139.62948,35.57952],[139.62895,35.57951],[139.62893,35.5795],[139.62858,35.57928],[139.62855,35.57928]]}},{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.62855,35.57928],[139.6282,35.57929],[139.62821,35.57936],[139.62813,35.57991],[139.62809,35.58019],[139.62807,35.5803],[139.62801,35.5803]]}},{"type":"Feature","properties":{"mode":"bus"},"geometry":{"type":"LineString","coordinates":[[139.62801,35.5803],[139.62882,35.5834],[139.62882,35.5834],[139.62995,35.58683]]}},{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.62995,35.58683],[139.62991,35.58684],[139.62986,35.58675],[139.63,35.58675],[139.63006,35.58675],[139.63027,35.58675],[139.63041,35.58675],[139.63048,35.58674],[139.63061,35.58672],[139.63064,35.58671],[139.63071,35.58668],[139.63077,35.58666],[139.6315,35.58634],[139.63167,35.58626],[139.63244,35.58586],[139.6324,35.58582],[139.63239,35.58577]]}}]},"busTime":1780,"type":"car-pedestrian-bus-pedestrian","busFare":220.0,"busDistance":744.0,"totalCo2":313200.0,"carTime":280,"park_api":100.0,"fuelCost":21.343500000000002}}}}
{"name":"output","time":3040,"data":{"oid":"person-63","value":{"move":{"reason":"carParkingFull","opportunityLoss":100.0},"move3":{"pedestrianTime":540,"fare":390.0,"travelTime":2010,"railFare":390.0,"pedestrianDistance":1061.0,"totalCo2":0.0,"railTime":1470,"travelRoute":{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.62882,35.60376],[139.62913,35.60362],[139.62917,35.6036],[139.62955,35.60422],[139.6296,35.60429],[139.62825,35.60512],[139.62696,35.60589],[139.62691,35.60592],[139.62233,35.60699]]}},{"type":"Feature","properties":{"mode":"rail"},"geometry":{"type":"LineString","coordinates":[[139.62233,35.60699],[139.62668,35.61178],[139.62668,35.61178],[139.63891,35.61195],[139.63891,35.61195],[139.64793,35.60836],[139.64793,35.60836],[139.65386,35.60697],[139.65386,35.60697],[139.66099,35.60537],[139.66099,35.60537],[139.66866,35.60722]]}},{"type":"Feature","properties":{"mode":"rail"},"geometry":{"type":"LineString","coordinates":[[139.66866,35.60722],[139.66735,35.59681],[139.66735,35.59681],[139.66872,35.58959],[139.66872,35.58959],[139.65963,35.57669]]}},{"type":"Feature","properties":{"mode":"pedestrian"},"geometry":{"type":"LineString","coordinates":[[139.65963,35.57669],[139.6595,35.57664],[139.65947,35.57664],[139.65947,35.57682],[139.65981,35.57681],[139.65983,35.57681],[139.65983,35.57689],[139.66018,35.57718],[139.66019,35.57718],[139.66019,35.57723],[139.66026,35.57723],[139.66026,35.57727],[139.66028,35.57728],[139.6606,35.57727],[139.6606,35.57732],[139.66068,35.57748],[139.66078,35.57772]]}}]},"railDistance":8232.0,"type":"pedestrian-rail-rail-pedestrian"}}}}
...
JSON Linesフォーマットで出力されます。 10秒間隔で、目的地に到着した人の移動の履歴を出力します。 一人に対して、その人が到着した時のみ、その人の情報が一度だけ出力されます。
料金は、£を起点としており、env.jsonにてCURRENCY_RATE
を設定することで、レートで換算した値が返されます。
escooter利用料金は、基本料金が1.5£で、1分毎に0.1£です。
また、escooterが借りれなかった、駐車場が満車だった場合には、moveは以下の出力となります。
予約を失敗したときには、移動手段を絞った上で、再度移動を試みるため、move2~move5として、上記と同様の出力が追加で行われます。
選択肢の移動手段を用いて、移動することができない場合には、以下が出力されます。
{"name":"output","time":150,"data":{"oid":"person-18","value":{"move":{"message":"Could not create plan."}}}}
公共交通機関の出発に間に合わなかったときには、以下が出力されます。
{"name":"output","time":1020,"data":{"oid":"person-36","value":{"move":{"message":"The departure time has passed."}}}}
current-usage.txt
{"name":"current-usage","time":60,"data":{"oid":"station-91","value":{"available":2,"reserved":0,"low":0,"minBattery":100.0, "type":"station"}}}
{"name":"current-usage","time":1320,"data":{"oid":"parking5","value":{"reserved":1,"available":1,"type":"car-parking","details":{"reserved":["person-87"],"parked":[{"oid":"person-6","start":400},{"oid":"person-41","start":840},{"oid":"person-76","start":1280}]}}}}
...
JSON Linesフォーマットで出力されます。 1分間隔で、すべてのステーションのescooterの状況が出力されています。
lowと判断されるescooterは、env.jsonにおける、USECASE_BATTERY_LOW_PERCENT
によって指定された残量以下になったものです。
駐車場の状況も出力されます。
total-usage.txt
{"name":"total-usage","time":0,"data":{"oid":"station-34","value":{"rentCount":4,"returnCount":5,"type":"station"}}}
{"name":"total-usage","time":0,"data":{"oid":"parking5","value":{"type":"car-parking","rentCount":8,"returnCount":4}}}
...
JSON Linesフォーマットで出力されます。 デジタルリハーサル終了時に、すべてのステーションのescooterの貸し出し結果が出力されます。
駐車場の結果も出力されます。
choice.txt
{"name": "choice", "time": 110, "data": {"oid": "person-4", "value": {"plans": [{"mainMode": "CAR", "subMode": "CAR", "time": 285, "cost": 3.425899683600594, "distance": 3047.582709127686, "type": "car", "normalized_time": 1807.0, "normalized_cost": 1.0, "probability": 0.925650575652241}, {"mainMode": "CYCLING", "subMode": "WALKING", "time": 1816, "cost": 3.0, "distance": 3548.5852119360934, "type": "escooter", "normalized_time": 1888.0, "normalized_cost": 0.875682383334419, "probability": 0.005469548460307576}, {"mainMode": "CYCLING", "subMode": "WALKING", "time": 1881, "cost": 3.0, "distance": 3671.499009820486, "type": "escooter", "normalized_time": 1891.0, "normalized_cost": 0.875682383334419, "probability": 0.005398592563289859}, {"mainMode": "WALKING", "subMode": "WALKING", "time": 3565, "cost": 0.0, "distance": 3047.582709127686, "type": "pedestrian", "normalized_time": 1981.0, "normalized_cost": 0.0, "probability": 0.06347298844144315}], "people_features": [40, 1, 0, 1], "environment_features": [3047.582709127686]}}}
{"simulator":"action-selector","name":"choice","time":120,"data":{"oid":"person-4","value":{"choice":0}}}
...
JSON Linesフォーマットで出力されます。 移動手段を選択する際に出力されます。 選択肢と選択結果が出力されます。
選択肢は以下のフォーマットで出力されます。
plansは、選択肢の配列になります。
選択結果は、以下のフォーマットで出力されます。
2.6 地図データ登録手順
SUMOサイト
作成方法は、こちらを参照ください。
サンプルデータの作成手順
サンプルとして用意している川崎市のネットファイルの作成手順を参考までに示します。
Open Street Mapのサイトから、OSMファイルを取得します。
エクスポートをクリックし、範囲を指定してエクスポートします。 以下の範囲を指定しています。
- 緯度: 35.5667000 - 35.5955000
- 経度: 139.6178000 - 139.6760000
エクスポートはエラーになるので、Overpass APIによりダウンロードしています。
SUMOのnetconvert
コマンドによりOSMファイルを変換します。
netconvert --osm-files osmfile -o map.net.xml --speed-in-kmh --junctions.join --sidewalks.guess.from-permissions --crossings.guess --lefthand
SUMOのサイトのオプションとは異なりますが、SUMOにロードする際にエラーとなるため、これらのオプションとしています。
SUMOに作成したmap.net.xml
をロードしてエラーが出ないことを確認します。
最後に、gzip
により、map.net.xml.gz
とします。
SUMOのインストールや利用方法は、SUMOのサイトを参照ください。