コンテンツにスキップ

データ作成マニュアル

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形式のファイルです。

項目 値の例 説明
name bay0 ステーションの名前。
zone b ステーションが所属するゾーン。同じゾーンのステーション間の移動しかできない。
latitude 35.58 ステーションの緯度。
longitude 139.64 ステーションの経度。
initial 2 escooterの初期配備台数。

od.csv.gz

人の移動を出発地と到着地として指定するファイルです。

oid,timestamp,origin_lon,origin_lat,dest_lon,dest_lat,household_carvan,sex_type,age_type
person-0,05:00:22,139.582230,35.436874,139.558556,35.424722,3,1,3
...

項目 値の例 説明
oid person-0 必須。OD内でユニークなIDである必要があります。
timestamp 05:00:00 必須。ISO_LOCAL_TIMEの形式。
origin_lon 139.582230 必須。出発地の経度。
origin_lat 35.436874 必須。出発地の緯度。
dest_lon 139.558556 必須。到着地の経度。
dest_lat 35.424722 必須。到着地の緯度。
age 52 省略可能。実年齢。
gender_type 1 省略可能。性別。女性の場合は1、その他の場合は0。
driving_license 1 省略可能。運転免許を持っているか。持っている場合は1、その他の場合は0。
car_ownership 2 省略可能。世帯の車保持状況。保持していない場合は0, 大人一人につき一台以下しか保持していない場合は1、大人一人につき一台より多く保持している場合は2。
household_carvan 1 省略可能。自家用車の数を指定します。car_ownershipが指定されていないときのみ有効です。
sex_type 1 省略可能。1は男性。2は女性。gender_typeが指定されていないときのみ有効です。
age_type 1 省略可能。1: 0~15歳、2: 16~24歳、3: 25~34歳、4: 35~49歳、5: 50~64歳、6: 65歳以上。ageが指定されていないときのみ有効です。

項目を省略する場合は、すべての行で省略します。 必須項目のみの場合は以下のような形になります。

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
  }
}

各移動手段の選択確率(重み)を指定する場合向け。

key valueの例 説明
rulebase_model "fixed" 固定確率指定
fixed_weights CAR 1 carの重み。指定しない場合は0になります。
WALKING 1 pedestrianの重み。指定しない場合は0になります。
CYCLING 1 escooterの重み。指定しない場合は0になります。

  • 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
}

移動時の各選択肢に関し、時間とコストの重みを指定する場合向け。

key valueの例 説明
rulebase_model "linear"
w_time 1 時間の重み。指定しない場合は1になります。
w_cost 1 コストの重み。指定しない場合は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を指定して行います。

key valueの例 説明
USECASE "dynamic-discount" 実行するデジタルリハーサルのユースケースを指定します。
CONDITION_JSON_ID "simdata-d2d0e1b3-7f78-4939-affc-939d712b15d7" "condition.json"のsimdataIdを指定します。
ASSIMIL_PERSON_FILE "simdata-272c8229-5a50-48c1-b0db-771c46e3b5d3/od.csv.gz" 登録したODファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はサンプルとして用意されているODファイルが使用されます。
ASSIMIL_ALIGNER_MAX_STEPS "3600" デジタルリハーサルの時間を指定します(秒)。例は1時間です
ASSIMIL_ALIGNER_START_TIME "5" デジタルリハーサルの開始時間を指定します(時)。ODファイルのtimestampが、この時間以降で、ASSIMIL_ALIGNER_MAX_STEPSの期間のODを対象としてデジタルリハーサルを行います。
SOARS_STATIONS_FILE "simdata-1c480139-c8d5-4d24-a551-af10f008339a/stations.csv" 登録したステーションのescooterの初期配置ファイルを指定します。simdataId/ファイル名で指定します。
SUMO_NET_FILE "simdata-4467079a-fbd0-440e-8505-a8c518e94562/map.net.xml.gz" 登録したSUMOのネットファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はサンプルとして用意されているネットファイルが使用されます。
DMM_MODEL_INFO_FILE "simdata-feaf5067-43c2-4673-a229-43e0d7d5dc6d/model.json" 登録した行動選択モデルファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はロンドンのデータで学習された行動選択モデルが使用されます。
RANDOM_SEED "0" 乱数のシードを設定します。シードが同じであってもデジタルリハーサルの結果が同じとなるわけではありません。
CURRENCY_RATE "1.0" 通貨レートを設定します。£を基準としていますので、円換算としたい場合には、例えば186.0といった指定になります。
VTYPES "car,pedestrian,escooter" デジタルリハーサルにおいて、移動手段の選択肢とするものを指定します。設定できるのは、car、pedestrian、escooterです。
USECASE_BATTERY_ENABLED "false" バッテリ残量が低いescooterのあるステーションへ返却する際に割引する施策を有効にする際にtrueにします。
USECASE_BATTERY_DISCOUNT "0" 割引する率を指定します(%)。
USECASE_BATTERY_LOW_PERCENT "15" バッテリ残量が低いと判断する残量を指定します(%)。
USECASE_NUMBER_ENABLED "false" 利用可能なescooterの台数が少ないステーションへ返却する際に割引する施策を有効にする際にtrueにします。
USECASE_NUMBER_DISCOUNT "0" 割引する率を指定します(%)。
USECASE_NUMBER_THRESHOLD "1" 利用可能な台数が少ないと判断する台数を指定します。

デジタルリハーサルの結果として出力されるファイル

  • states.txt
  • output.txt
  • current-usage.txt
  • total-usage.txt

これらのファイルは、デジタルリハーサル結果ファイル取得APIにて取得できます。

states.txt

{"name":"states","time":180,"data":{"oid":"person-12","value":{"co2":0.0,"lon":139.64,"type":"pedestrian","lat":35.58,"speed":1.39}}}
...

JSON Linesフォーマットで出力されます。 1分毎に、人がどのような移動手段を用いてどこにいるかを緯度経度で示しています。 co2は、その時点でのco2排出量です。speedはその地点での速度になります。

key valueの例 説明
name "states"
time 180 デジタルリハーサルの経過時間(秒)
data oid "person-12" デジタルリハーサルに登場する人のID
value co2 0.0 CO2排出量(mg/s)
lon 139.64 現在位置の経度
type "pedestrian" 移動手段(pedestrian, car, escooter)
lat 35.58 現在位置の緯度
speed 1.39 現在位置での速度(m/s)

output.txt

{"name":"output","time":310,"data":{"oid":"person-119","value":{"move":{"travelTime":60,"totalCo2":11818.295182953709,"type":"car"}}}}
{"name":"output","time":310,"data":{"oid":"person-3","value":{"move":{"travelTime":180,"totalCo2":0.0,"type":"pedestrian"}}}}
...
{"name":"output","time":480,"data":{"oid":"person-118","value":{"move":{"opportunityLoss":2.0},"move2":{"travelTime":150,"totalCo2":34648.580464738196,"type":"car"}}}}
...
{"name":"output","time":1010,"data":{"oid":"person-269","value":{"move":{"pedestrianTime":380,"travelTime":500,"escooterDiscount":0.0,"escooterCost":1.7,"totalCo2":0.0,"escooterTime":120,"type":"escooter"}}}}
...

JSON Linesフォーマットで出力されます。 10秒間隔で、目的地に到着した人の移動の履歴を出力します。 一人に対して、その人が到着した時のみ、その人の情報が一度だけ出力されます。

key valueの例 説明
name "output"
time 310 デジタルリハーサルの経過時間(秒)
data oid "person-119" デジタルリハーサルに登場する人のID
value move travelTime 60 移動にかかった時間(s)
totalCo2 11818.295182953709 CO2排出量(mg)
type "car" 移動手段(pedestrian, car, escooter)
escooterCost 1.7 利用料金(escooterのみ)
escooterDiscount 0.0 割引された額(escooterのみ)
escooterTime 120 escooterを利用した時間(s)(escooterのみ)
pedestrianTime 380 徒歩で移動した時間(s)(escooterのみ)

escooterCostおよびescooterDiscountの料金は、£を起点としており、env.jsonにてCURRENCY_RATEを設定することで、レートで換算した値が返されます。

また、escooterが借りれなかった場合には、以下の出力となります。

key valueの例 説明
name "output"
time 480 デジタルリハーサルの経過時間(秒)
data oid "person-118" デジタルリハーサルに登場する人のID
value move opportunityLoss 2.0 escooterを予約できなったときに、利用できていた場合の料金を出力
move2 travelTime 150 移動にかかった時間(s)
totalCo2 34648.580464738196 CO2排出量(mg)
type "car" 移動手段(pedestrian, car)

current-usage.txt

{"simulator":"soars","name":"current-usage","time":60,"data":{"oid":"bay91","value":{"available":2,"reserved":0,"low":0,"minBattery":100.0}}}
...

JSON Linesフォーマットで出力されます。 1分間隔で、すべてのステーションのescooerの状況が出力されています。

key valueの例 説明
simulator "soars"
name "current-usage"
time 60 デジタルリハーサルの経過時間(秒)
data oid "bay91" ステーションのID
value available 2 ステーションにおいて利用可能なescooterの台数
reserved 0 ステーションにおいて予約されているescooterの台数
low 0 ステーションにおいてバッテリの残量が低いescooterの台数
minBattery 100.0 ステーションに配置されているescooterのバッテリ残量の最小値(%)

lowと判断されるescooterは、env.jsonにおける、USECASE_BATTERY_LOW_PERCENTによって指定された残量以下になったものです。

total-usage.txt

{"simulator":"soars","name":"total-usage","time":3600,"data":{"oid":"bay34","value":{"rentScooters":4,"returnScooters":5}}}
...

JSON Linesフォーマットで出力されます。 デジタルリハーサル終了時に、すべてのステーションのescooerの貸し出し結果が出力されます。

key valueの例 説明
simulator "soars"
name "total-usage"
time 3600 デジタルリハーサルの経過時間(秒)
data oid "bay34" ステーションのID
value rentScooters 4 ステーションにおいて貸し出したescooterの台数
retuenScooters 5 ステーションに返却されたescooterの台数

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形式のファイルです。

項目 値の例 説明
name bay0 ステーションの名前。
zone b ステーションが所属するゾーン。同じゾーンのステーション間の移動しかできない。
latitude 35.58 ステーションの緯度。
longitude 139.64 ステーションの経度。
initial 2 escooterの初期配備台数。

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形式のファイルです。

項目 値の例 説明
oid 948feb22aa309eda98f5f36cee428b4b 道路閉鎖設定のID。
start 05:00:00 道路閉鎖を開始する時刻。ISO_LOCAL_TIMEの形式。
end 06:00:00 道路閉鎖を終了する時刻。ISO_LOCAL_TIMEの形式。
type car 通行できなくなる移動手段。
polygon "139.66056921784974,35.57560496598741,139.66658309933842,35.57404537981951,139.66449131447303,35.56879927623754,139.66056921784974,35.57560496598741" 経度,緯度を組として、,で区切って領域を指定。"で囲む。
lanes "" レーンIDを,区切りで指定します。

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 person-0 必須。OD内でユニークなIDである必要があります。
timestamp 05:00:00 必須。ISO_LOCAL_TIMEの形式。
origin_lon 139.582230 必須。出発地の経度。
origin_lat 35.436874 必須。出発地の緯度。
dest_lon 139.558556 必須。到着地の経度。
dest_lat 35.424722 必須。到着地の緯度。
type truck 省略可能。移動手段を固定する場合に指定します。指定可能なのは、car、pedestrian、escooter、bicycle、truckです。何も指定しなければ、移動手段を選択します。
age 52 省略可能。実年齢。
gender_type 1 省略可能。性別。女性の場合は1、その他の場合は0。
driving_license 1 省略可能。運転免許を持っているか。持っている場合は1、その他の場合は0。
car_ownership 2 省略可能。世帯の車保持状況。保持していない場合は0, 大人一人につき一台以下しか保持していない場合は1、大人一人につき一台より多く保持している場合は2。
household_carvan 1 省略可能。自家用車の数を指定します。car_ownershipが指定されていないときのみ有効です。
sex_type 1 省略可能。1は男性。2は女性。gender_typeが指定されていないときのみ有効です。
age_type 1 省略可能。1: 0~15歳、2: 16~24歳、3: 25~34歳、4: 35~49歳、5: 50~64歳、6: 65歳以上。ageが指定されていないときのみ有効です。

項目を省略する場合は、すべての行で省略します。 必須項目のみの場合は以下のような形になります。

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
  }
}

各移動手段の選択確率(重み)を指定する場合向け。

key valueの例 説明
rulebase_model "fixed" 固定確率指定
fixed_weights CAR 1 carの重み。指定しない場合は0になります。
WALKING 1 pedestrianの重み。指定しない場合は0になります。
CYCLING 1 escooterの重み。指定しない場合は0になります。

  • 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
}

移動時の各選択肢に関し、時間とコストの重みを指定する場合向け。

key valueの例 説明
rulebase_model "linear"
w_time 1 時間の重み。指定しない場合は1になります。
w_cost 1 コストの重み。指定しない場合は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を指定して行います。

key valueの例 説明
USECASE "road-closure" 実行するデジタルリハーサルのユースケースを指定します。
CONDITION_JSON_ID "simdata-d2d0e1b3-7f78-4939-affc-939d712b15d7" "condition.json"のsimdataIdを指定します。
ASSIMIL_PERSON_FILE "simdata-272c8229-5a50-48c1-b0db-771c46e3b5d3/od.csv.gz" 登録したODファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はサンプルとして用意されているODファイルが使用されます。
ASSIMIL_ALIGNER_MAX_STEPS "3600" デジタルリハーサルの時間を指定します(秒)。例は1時間です
ASSIMIL_ALIGNER_START_TIME "5" デジタルリハーサルの開始時間を指定します(時)。ODファイルのtimestampが、この時間以降で、ASSIMIL_ALIGNER_MAX_STEPSの期間のODを対象としてデジタルリハーサルを行います。
SOARS_STATIONS_FILE "simdata-1c480139-c8d5-4d24-a551-af10f008339a/stations.csv" 登録したステーションのescooterの初期配置ファイルを指定します。simdataId/ファイル名で指定します。
SUMO_NET_FILE "simdata-4467079a-fbd0-440e-8505-a8c518e94562/map.net.xml.gz" 登録したSUMOのネットファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はサンプルとして用意されているネットファイルが使用されます。
DMM_MODEL_INFO_FILE "simdata-feaf5067-43c2-4673-a229-43e0d7d5dc6d/model.json" 登録した行動選択モデルファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はロンドンのデータで学習された行動選択モデルが使用されます。
RANDOM_SEED "0" 乱数のシードを設定します。シードが同じであってもデジタルリハーサルの結果が同じとなるわけではありません。
CURRENCY_RATE "1.0" 通貨レートを設定します。£を基準としていますので、円換算としたい場合には、例えば186.0といった指定になります。
ROAD_CLOSURE_FILE "simdata-f261a82b-dac2-4034-a765-7e4d56901c12/road-closure.csv" 登録した道路閉鎖設定ファイルを指定します。simdataId/ファイル名で指定します。
VTYPES "car,pedestrian" デジタルリハーサルにおいて、移動手段の選択肢とするものを指定します。設定できるのは、car、pedestrian、escooter、bicycle、truckです。ただし、truckは、移動手段として選択されません。
USECASE_BATTERY_ENABLED "false" バッテリ残量が低いescooterのあるステーションへ返却する際に割引する施策を有効にする際にtrueにします。
USECASE_BATTERY_DISCOUNT "0" 割引する率を指定します(%)。
USECASE_BATTERY_LOW_PERCENT "15" バッテリ残量が低いと判断する残量を指定します(%)。
USECASE_NUMBER_ENABLED "false" 利用可能なescooterの台数が少ないステーションへ返却する際に割引する施策を有効にする際にtrueにします。
USECASE_NUMBER_DISCOUNT "0" 割引する率を指定します(%)。
USECASE_NUMBER_THRESHOLD "1" 利用可能な台数が少ないと判断する台数を指定します。

デジタルリハーサルの結果として出力されるファイル

  • states.txt
  • output.txt
  • current-usage.txt
  • total-usage.txt

これらのファイルは、デジタルリハーサル結果ファイル取得APIにて取得できます。

states.txt

{"name":"states","time":180,"data":{"oid":"person-12","value":{"co2":0.0,"lon":139.64,"type":"pedestrian","lat":35.58,"speed":1.39}}}
...

JSON Linesフォーマットで出力されます。 1分毎に、人がどのような移動手段を用いてどこにいるかを緯度経度で示しています。 co2は、その時点でのco2排出量です。speedはその地点での速度になります。

key valueの例 説明
name "states"
time 180 デジタルリハーサルの経過時間(秒)
data oid "person-12" デジタルリハーサルに登場する人のID
value co2 0.0 CO2排出量(mg/s)
lon 139.64 現在位置の経度
type "pedestrian" 移動手段(pedestrian, car, escooter, bicycle, truck)
lat 35.58 現在位置の緯度
speed 1.39 現在位置での速度(m/s)
ec 0.3372070179260734 電力消費量(Wh/s)(escooterのみ)

誰も移動していないときは、dataがnullになります。

{"name":"states","time":60,"data":null}

output.txt

{"name":"output","time":310,"data":{"oid":"person-119","value":{"move":{"travelTime":60,"totalCo2":11818.295182953709,"type":"car"}}}}
{"name":"output","time":310,"data":{"oid":"person-3","value":{"move":{"travelTime":180,"totalCo2":0.0,"type":"pedestrian"}}}}
...
{"name":"output","time":480,"data":{"oid":"person-118","value":{"move":{"opportunityLoss":2.0},"move2":{"travelTime":150,"totalCo2":34648.580464738196,"type":"car"}}}}
...
{"name":"output","time":1010,"data":{"oid":"person-269","value":{"move":{"pedestrianTime":380,"travelTime":500,"escooterDiscount":0.0,"escooterCost":1.7,"totalCo2":0.0,"escooterTime":120,"type":"escooter"}}}}
...

JSON Linesフォーマットで出力されます。 10秒間隔で、目的地に到着した人の移動の履歴を出力します。 一人に対して、その人が到着した時のみ、その人の情報が一度だけ出力されます。

key valueの例 説明
name "output"
time 310 デジタルリハーサルの経過時間(秒)
data oid "person-119" デジタルリハーサルに登場する人のID
value move travelTime 60 移動にかかった時間(s)
totalCo2 11818.295182953709 CO2排出量(mg)
type "car" 移動手段(pedestrian, car, escooter, bicycle, truck)
escooterCost 1.7 利用料金(escooterのみ)
escooterDiscount 0.0 割引された額(escooterのみ)
escooterTime 120 escooterを利用した時間(s)(escooterのみ)
pedestrianTime 380 徒歩で移動した時間(s)(escooterのみ)

escooterCostおよびescooterDiscountの料金は、£を起点としており、env.jsonにてCURRENCY_RATEを設定することで、レートで換算した値が返されます。

また、escooterが借りれなかった場合には、以下の出力となります。

key valueの例 説明
name "output"
time 480 デジタルリハーサルの経過時間(秒)
data oid "person-118" デジタルリハーサルに登場する人のID
value move opportunityLoss 2.0 escooterを予約できなったときに、利用できていた場合の料金を出力
move2 travelTime 150 移動にかかった時間(s)
totalCo2 34648.580464738196 CO2排出量(mg)
type "car" 移動手段(pedestrian, car, bicycle)

選択肢の移動手段を用いて、移動することができない場合には、以下が出力されます。

{"name":"output","time":150,"data":{"oid":"person-18","value":{"move":{"message":"Could not create plan."}}}}

current-usage.txt

{"simulator":"soars","name":"current-usage","time":60,"data":{"oid":"bay91","value":{"available":2,"reserved":0,"low":0,"minBattery":100.0}}}
...

JSON Linesフォーマットで出力されます。 1分間隔で、すべてのステーションのescooterの状況が出力されています。

key valueの例 説明
simulator "soars"
name "current-usage"
time 60 デジタルリハーサルの経過時間(秒)
data oid "bay91" ステーションのID
value available 2 ステーションにおいて利用可能なescooterの台数
reserved 0 ステーションにおいて予約されているescooterの台数
low 0 ステーションにおいてバッテリの残量が低いescooterの台数
minBattery 100.0 ステーションに配置されているescooterのバッテリ残量の最小値(%)

lowと判断されるescooterは、env.jsonにおける、USECASE_BATTERY_LOW_PERCENTによって指定された残量以下になったものです。

total-usage.txt

{"simulator":"soars","name":"total-usage","time":3600,"data":{"oid":"bay34","value":{"rentScooters":4,"returnScooters":5}}}
...

JSON Linesフォーマットで出力されます。 デジタルリハーサル終了時に、すべてのステーションのescooterの貸し出し結果が出力されます。

key valueの例 説明
simulator "soars"
name "total-usage"
time 3600 デジタルリハーサルの経過時間(秒)
data oid "bay34" ステーションのID
value rentScooters 4 ステーションにおいて貸し出したescooterの台数
returnScooters 5 ステーションに返却されたescooterの台数

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形式のファイルです。

項目 値の例 説明
name bay0 ステーションの名前。
zone b ステーションが所属するゾーン。同じゾーンのステーション間の移動しかできない。
latitude 35.58 ステーションの緯度。
longitude 139.64 ステーションの経度。
initial 2 escooterの初期配備台数。

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形式のファイルです。

項目 値の例 説明
oid 948feb22aa309eda98f5f36cee428b4b 道路閉鎖設定のID。
start 05:00:00 道路閉鎖を開始する時刻。ISO_LOCAL_TIMEの形式。
end 06:00:00 道路閉鎖を終了する時刻。ISO_LOCAL_TIMEの形式。
type car 通行できなくなる移動手段。
polygon "139.66056921784974,35.57560496598741,139.66658309933842,35.57404537981951,139.66449131447303,35.56879927623754,139.66056921784974,35.57560496598741" 経度,緯度を組として、,で区切って領域を指定。"で囲む。
lanes "" レーンIDを,区切りで指定します。

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形式のファイルです。

項目 値の例 説明
oid 2ac5dc629aebf5a9077c2a77178a0b84 道路課金設定のID。
start 05:00:00 道路課金を開始する時刻。ISO_LOCAL_TIMEの形式。
end 06:00:00 道路課金を終了する時刻。ISO_LOCAL_TIMEの形式。
type car 課金される移動手段。
price 200 課金額。
polygon "139.66056921784974,35.57560496598741,139.66658309933842,35.57404537981951,139.66449131447303,35.56879927623754,139.66056921784974,35.57560496598741" 経度,緯度を組として、,で区切って領域を指定。"で囲む。

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 person-0 必須。OD内でユニークなIDである必要があります。
timestamp 05:00:00 必須。ISO_LOCAL_TIMEの形式。
origin_lon 139.582230 必須。出発地の経度。
origin_lat 35.436874 必須。出発地の緯度。
dest_lon 139.558556 必須。到着地の経度。
dest_lat 35.424722 必須。到着地の緯度。
type truck 省略可能。移動手段を固定する場合に指定します。指定可能なのは、car、pedestrian、escooter、bicycle、truckです。何も指定しなければ、移動手段を選択します。
age 52 省略可能。実年齢。
gender_type 1 省略可能。性別。女性の場合は1、その他の場合は0。
driving_license 1 省略可能。運転免許を持っているか。持っている場合は1、その他の場合は0。
car_ownership 2 省略可能。世帯の車保持状況。保持していない場合は0, 大人一人につき一台以下しか保持していない場合は1、大人一人につき一台より多く保持している場合は2。
household_carvan 1 省略可能。自家用車の数を指定します。car_ownershipが指定されていないときのみ有効です。
sex_type 1 省略可能。1は男性。2は女性。gender_typeが指定されていないときのみ有効です。
age_type 1 省略可能。1: 0~15歳、2: 16~24歳、3: 25~34歳、4: 35~49歳、5: 50~64歳、6: 65歳以上。ageが指定されていないときのみ有効です。

項目を省略する場合は、すべての行で省略します。 必須項目のみの場合は以下のような形になります。

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
  }
}

各移動手段の選択確率(重み)を指定する場合向け。

key valueの例 説明
rulebase_model "fixed" 固定確率指定
fixed_weights CAR 1 carの重み。指定しない場合は0になります。
WALKING 1 pedestrianの重み。指定しない場合は0になります。
CYCLING 1 escooterの重み。指定しない場合は0になります。

  • 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
}

移動時の各選択肢に関し、時間とコストの重みを指定する場合向け。

key valueの例 説明
rulebase_model "linear"
w_time 1 時間の重み。指定しない場合は1になります。
w_cost 1 コストの重み。指定しない場合は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を指定して行います。

key valueの例 説明
USECASE "road-pricing" 実行するデジタルリハーサルのユースケースを指定します。
CONDITION_JSON_ID "simdata-d2d0e1b3-7f78-4939-affc-939d712b15d7" "condition.json"のsimdataIdを指定します。
ASSIMIL_PERSON_FILE "simdata-272c8229-5a50-48c1-b0db-771c46e3b5d3/od.csv.gz" 登録したODファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はサンプルとして用意されているODファイルが使用されます。
ASSIMIL_ALIGNER_MAX_STEPS "3600" デジタルリハーサルの時間を指定します(秒)。例は1時間です
ASSIMIL_ALIGNER_START_TIME "5" デジタルリハーサルの開始時間を指定します(時)。ODファイルのtimestampが、この時間以降で、ASSIMIL_ALIGNER_MAX_STEPSの期間のODを対象としてデジタルリハーサルを行います。
SOARS_STATIONS_FILE "simdata-1c480139-c8d5-4d24-a551-af10f008339a/stations.csv" 登録したステーションのescooterの初期配置ファイルを指定します。simdataId/ファイル名で指定します。
SUMO_NET_FILE "simdata-4467079a-fbd0-440e-8505-a8c518e94562/map.net.xml.gz" 登録したSUMOのネットファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はサンプルとして用意されているネットファイルが使用されます。
DMM_MODEL_INFO_FILE "simdata-feaf5067-43c2-4673-a229-43e0d7d5dc6d/model.json" 登録した行動選択モデルファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はロンドンのデータで学習された行動選択モデルが使用されます。
RANDOM_SEED "0" 乱数のシードを設定します。シードが同じであってもデジタルリハーサルの結果が同じとなるわけではありません。
CURRENCY_RATE "1.0" 通貨レートを設定します。£を基準としていますので、円換算としたい場合には、例えば186.0といった指定になります。
ROAD_CLOSURE_FILE "simdata-f261a82b-dac2-4034-a765-7e4d56901c12/road-closure.csv" 登録した道路閉鎖設定ファイルを指定します。simdataId/ファイル名で指定します。
ROAD_PRICING_FILE "simdata-f0917da6-4a9b-4e24-99f4-909f240be14d/road-pricing.csv" 登録した道路課金設定ファイルを指定します。simdataId/ファイル名で指定します。
VTYPES "car,pedestrian" デジタルリハーサルにおいて、移動手段の選択肢とするものを指定します。設定できるのは、car、pedestrian、escooter、bicycle、truckです。ただし、truckは、移動手段として選択されません。
DETOUR_VTYPES "car" 迂回する移動手段を指定します。設定できるのは、car、pedestrian、bicycleです。
USECASE_BATTERY_ENABLED "false" バッテリ残量が低いescooterのあるステーションへ返却する際に割引する施策を有効にする際にtrueにします。
USECASE_BATTERY_DISCOUNT "0" 割引する率を指定します(%)。
USECASE_BATTERY_LOW_PERCENT "15" バッテリ残量が低いと判断する残量を指定します(%)。
USECASE_NUMBER_ENABLED "false" 利用可能なescooterの台数が少ないステーションへ返却する際に割引する施策を有効にする際にtrueにします。
USECASE_NUMBER_DISCOUNT "0" 割引する率を指定します(%)。
USECASE_NUMBER_THRESHOLD "1" 利用可能な台数が少ないと判断する台数を指定します。

デジタルリハーサルの結果として出力されるファイル

  • states.txt
  • output.txt
  • current-usage.txt
  • total-usage.txt

これらのファイルは、デジタルリハーサル結果ファイル取得APIにて取得できます。

states.txt

{"name":"states","time":180,"data":{"oid":"person-12","value":{"co2":0.0,"lon":139.64,"type":"pedestrian","lat":35.58,"speed":1.39}}}
...

JSON Linesフォーマットで出力されます。 1分毎に、人がどのような移動手段を用いてどこにいるかを緯度経度で示しています。 co2は、その時点でのco2排出量です。speedはその地点での速度になります。

key valueの例 説明
name "states"
time 180 デジタルリハーサルの経過時間(秒)
data oid "person-12" デジタルリハーサルに登場する人のID
value co2 0.0 CO2排出量(mg/s)
lon 139.64 現在位置の経度
type "pedestrian" 移動手段(pedestrian, car, escooter, bicycle, truck)
lat 35.58 現在位置の緯度
speed 1.39 現在位置での速度(m/s)
ec 0.3372070179260734 電力消費量(Wh/s)(escooterのみ)

誰も移動していないときは、dataがnullになります。

{"name":"states","time":60,"data":null}

output.txt

{"name":"output","time":310,"data":{"oid":"person-119","value":{"move":{"travelTime":60,"totalCo2":11818.295182953709,"type":"car","toll":0.0}}}}
{"name":"output","time":310,"data":{"oid":"person-3","value":{"move":{"travelTime":180,"totalCo2":0.0,"type":"pedestrian","toll":0.0}}}}
...
{"name":"output","time":480,"data":{"oid":"person-118","value":{"move":{"opportunityLoss":2.0},"move2":{"travelTime":150,"totalCo2":34648.580464738196,"type":"car","toll":0.0}}}}
...
{"name":"output","time":1010,"data":{"oid":"person-269","value":{"move":{"pedestrianTime":380,"travelTime":500,"escooterDiscount":0.0,"escooterCost":1.7,"totalCo2":0.0,"escooterTime":120,"type":"escooter","toll":0.0}}}}
...

JSON Linesフォーマットで出力されます。 10秒間隔で、目的地に到着した人の移動の履歴を出力します。 一人に対して、その人が到着した時のみ、その人の情報が一度だけ出力されます。

key valueの例 説明
name "output"
time 310 デジタルリハーサルの経過時間(秒)
data oid "person-119" デジタルリハーサルに登場する人のID
value move travelTime 60 移動にかかった時間(s)
totalCo2 11818.295182953709 CO2排出量(mg)
type "car" 移動手段(pedestrian, car, escooter, bicycle, truck)
toll 200 課金額
escooterCost 1.7 利用料金(escooterのみ)
escooterDiscount 0.0 割引された額(escooterのみ)
escooterTime 120 escooterを利用した時間(s)(escooterのみ)
pedestrianTime 380 徒歩で移動した時間(s)(escooterのみ)

escooterCostおよびescooterDiscountの料金は、£を起点としており、env.jsonにてCURRENCY_RATEを設定することで、レートで換算した値が返されます。

また、escooterが借りれなかった場合には、以下の出力となります。

key valueの例 説明
name "output"
time 480 デジタルリハーサルの経過時間(秒)
data oid "person-118" デジタルリハーサルに登場する人のID
value move opportunityLoss 2.0 escooterを予約できなったときに、利用できていた場合の料金を出力
move2 travelTime 150 移動にかかった時間(s)
totalCo2 34648.580464738196 CO2排出量(mg)
type "car" 移動手段(pedestrian, car, bicycle)
toll 200 課金額

選択肢の移動手段を用いて、移動することができない場合には、以下が出力されます。

{"name":"output","time":150,"data":{"oid":"person-18","value":{"move":{"message":"Could not create plan."}}}}

current-usage.txt

{"simulator":"soars","name":"current-usage","time":60,"data":{"oid":"bay91","value":{"available":2,"reserved":0,"low":0,"minBattery":100.0}}}
...

JSON Linesフォーマットで出力されます。 1分間隔で、すべてのステーションのescooterの状況が出力されています。

key valueの例 説明
simulator "soars"
name "current-usage"
time 60 デジタルリハーサルの経過時間(秒)
data oid "bay91" ステーションのID
value available 2 ステーションにおいて利用可能なescooterの台数
reserved 0 ステーションにおいて予約されているescooterの台数
low 0 ステーションにおいてバッテリの残量が低いescooterの台数
minBattery 100.0 ステーションに配置されているescooterのバッテリ残量の最小値(%)

lowと判断されるescooterは、env.jsonにおける、USECASE_BATTERY_LOW_PERCENTによって指定された残量以下になったものです。

total-usage.txt

{"simulator":"soars","name":"total-usage","time":3600,"data":{"oid":"bay34","value":{"rentScooters":4,"returnScooters":5}}}
...

JSON Linesフォーマットで出力されます。 デジタルリハーサル終了時に、すべてのステーションのescooterの貸し出し結果が出力されます。

key valueの例 説明
simulator "soars"
name "total-usage"
time 3600 デジタルリハーサルの経過時間(秒)
data oid "bay34" ステーションのID
value rentScooters 4 ステーションにおいて貸し出したescooterの台数
returnScooters 5 ステーションに返却されたescooterの台数

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},
 "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形式のファイルです。

項目 値の例 説明
name bay0 ステーションの名前。
zone b ステーションが所属するゾーン。同じゾーンのステーション間の移動しかできない。
latitude 35.58 ステーションの緯度。
longitude 139.64 ステーションの経度。
initial 2 escooterの初期配備台数。

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形式のファイルです。

項目 値の例 説明
name parking1 駐車場の名前。
latitude 35.58139979797416 駐車場の緯度。
longitude 139.64179207801715 駐車場の経度。
total 5 駐車可能な台数。
type car 駐車可能な種類。carかbicycle
charge 100 駐車料金。

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 person-0 必須。OD内でユニークなIDである必要があります。
timestamp 05:00:00 必須。ISO_LOCAL_TIMEの形式。
origin_lon 139.582230 必須。出発地の経度。
origin_lat 35.436874 必須。出発地の緯度。
dest_lon 139.558556 必須。到着地の経度。
dest_lat 35.424722 必須。到着地の緯度。
type car 省略可能。移動手段を固定する場合に指定します。指定可能なのは、car、pedestrian、escooter、bicycleです。何も指定しなければ、移動手段を選択します。
age 52 省略可能。実年齢。
gender_type 1 省略可能。性別。女性の場合は1、その他の場合は0。
driving_license 1 省略可能。運転免許を持っているか。持っている場合は1、その他の場合は0。
car_ownership 2 省略可能。世帯の車保持状況。保持していない場合は0, 大人一人につき一台以下しか保持していない場合は1、大人一人につき一台より多く保持している場合は2。
household_carvan 1 省略可能。自家用車の数を指定します。car_ownershipが指定されていないときのみ有効です。
sex_type 1 省略可能。1は男性。2は女性。gender_typeが指定されていないときのみ有効です。
age_type 1 省略可能。1: 0~15歳、2: 16~24歳、3: 25~34歳、4: 35~49歳、5: 50~64歳、6: 65歳以上。ageが指定されていないときのみ有効です。

項目を省略する場合は、すべての行で省略します。 必須項目のみの場合は以下のような形になります。

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",
 "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を指定して行います。

key valueの例 説明
USECASE "park-and-ride" 実行するデジタルリハーサルのユースケースを指定します。
CONDITION_JSON_ID "simdata-d2d0e1b3-7f78-4939-affc-939d712b15d7" "condition.json"のsimdataIdを指定します。
ASSIMIL_PERSON_FILE "simdata-272c8229-5a50-48c1-b0db-771c46e3b5d3/od.csv.gz" 登録したODファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はサンプルとして用意されているODファイルが使用されます。
ASSIMIL_ALIGNER_MAX_STEPS "3600" デジタルリハーサルの時間を指定します(秒)。例は1時間です
ASSIMIL_ALIGNER_START_TIME "5" デジタルリハーサルの開始時間を指定します(時)。ODファイルのtimestampが、この時間以降で、ASSIMIL_ALIGNER_MAX_STEPSの期間のODを対象としてデジタルリハーサルを行います。
SOARS_STATIONS_FILE "simdata-1c480139-c8d5-4d24-a551-af10f008339a/stations.csv" 登録したステーションのescooterの初期配置ファイルを指定します。simdataId/ファイル名で指定します。
SUMO_NET_FILE "simdata-4467079a-fbd0-440e-8505-a8c518e94562/map.net.xml.gz" 登録したSUMOのネットファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はサンプルとして用意されているネットファイルが使用されます。
DMM_MODEL_INFO_FILE "simdata-feaf5067-43c2-4673-a229-43e0d7d5dc6d/model.json" 登録した行動選択モデルファイルを使用してデジタルリハーサルを実行する場合に指定します。simdataId/ファイル名で指定します。指定しない場合はロンドンのデータで学習された行動選択モデルが使用されます。
RANDOM_SEED "0" 乱数のシードを設定します。シードが同じであってもデジタルリハーサルの結果が同じとなるわけではありません。
CURRENCY_RATE "1.0" 通貨レートを設定します。£を基準としていますので、円換算としたい場合には、例えば186.0といった指定になります。
VTYPES "car,pedestrian,bicycle,escooter" デジタルリハーサルにおいて、移動手段の選択肢とするものを指定します。設定できるのは、car、pedestrian、escooter、bicycleです。
USECASE_BATTERY_ENABLED "false" バッテリ残量が低いescooterのあるステーションへ返却する際に割引する施策を有効にする際にtrueにします。
USECASE_BATTERY_DISCOUNT "0" 割引する率を指定します(%)。
USECASE_BATTERY_LOW_PERCENT "15" バッテリ残量が低いと判断する残量を指定します(%)。
USECASE_NUMBER_ENABLED "false" 利用可能なescooterの台数が少ないステーションへ返却する際に割引する施策を有効にする際にtrueにします。
USECASE_NUMBER_DISCOUNT "0" 割引する率を指定します(%)。
USECASE_NUMBER_THRESHOLD "1" 利用可能な台数が少ないと判断する台数を指定します。
DATE "2024-03-14" デジタルリハーサルを実行する日付を指定します。ISO_LOCAL_DATEの形式。
TIMEZONE "Asia/Tokyo" デジタルリハーサルを実行する場所のタイムゾーンを指定します。Time Zone Databaseによって定義されているタイムゾーンを指定します。
PARKING_FILE "simdata-10f56ac9-9296-4c9b-ba34-7db6ddda809d/parking.csv" 駐車場情報のファイルを指定します。simdataId/ファイル名`で指定します。
PARK_CHARGE_DST "0" 車での移動の場合に、目的地にて駐車するのにかかる料金を設定します。
OTP_OSM_FILE "simdata-b5824fa3-97e5-45a3-b087-fa7b5bb9c6b0/osm.pbf" OpenTripPlannerが使用する地図情報を指定します。simdataId/ファイル名`で指定します。指定しない場合はサンプルとして用意されているファイルが使用されます。
OTP_GTFS_USE_DEFAULT "true" OpenTripPlannerで使用するGTFSファイルとして、あらかじめ用意しているファイルを使用する場合にtrueにします。サンプルファイルの内容は、川崎市バス、JR(南武線、横須賀線、鶴見線)、東急(東横線、目黒線、田園都市線、大井町線)です。
OTP_GTFS_FILE_0 "simdata-59d4f411-8fc8-411d-a882-c5e9e233cdcf/0_.gtfs.zip" OpenTripPlannerが使用するGTFSファイルを指定します。simdataId/ファイル名`で指定します。
OTP_GTFS_FILE_1 "simdata-59d4f411-8fc8-411d-a883-c5e9e233cdcf/1_.gtfs.zip" OpenTripPlannerが使用するGTFSファイルを指定します。simdataId/ファイル名`で指定します。
OTP_GTFS_FILE_2 "simdata-59d4f411-8fc8-411d-a884-c5e9e233cdcf/2_.gtfs.zip" OpenTripPlannerが使用するGTFSファイルを指定します。simdataId/ファイル名`で指定します。
OTP_GTFS_FILE_3 "simdata-59d4f411-8fc8-411d-a885-c5e9e233cdcf/3_.gtfs.zip" OpenTripPlannerが使用するGTFSファイルを指定します。simdataId/ファイル名`で指定します。
OTP_GTFS_FILE_4 "simdata-59d4f411-8fc8-411d-a886-c5e9e233cdcf/4_.gtfs.zip" OpenTripPlannerが使用するGTFSファイルを指定します。simdataId/ファイル名`で指定します。
OTP_GTFS_FILE_5 "simdata-59d4f411-8fc8-411d-a887-c5e9e233cdcf/5_.gtfs.zip" OpenTripPlannerが使用するGTFSファイルを指定します。simdataId/ファイル名`で指定します。

GTFSファイルは、0から順に指定してください。途中指定されていないと、それ以降は使用されません。 例えば、0と2に指定していると、0のみが使用されます。

osm.pbf

OpenTripPlannerで使用する地図情報です。 作成方法は、こちらを参照ください。

gtfs.zip

OpenTripPlannerで使用するGTFSです。 GTFSについては、こちらを参照ください。

デジタルリハーサルの結果として出力されるファイル

  • states.txt
  • output.txt
  • current-usage.txt
  • total-usage.txt

これらのファイルは、デジタルリハーサル結果ファイル取得APIにて取得できます。

states.txt

{"name":"states","time":180,"data":{"oid":"person-12","value":{"co2":0.0,"lon":139.64,"type":"pedestrian","lat":35.58,"speed":1.39}}}
...

JSON Linesフォーマットで出力されます。 1分毎に、人がどのような移動手段を用いてどこにいるかを緯度経度で示しています。 co2は、その時点でのco2排出量です。speedはその地点での速度になります。

key valueの例 説明
name "states"
time 180 デジタルリハーサルの経過時間(秒)
data oid "person-12" デジタルリハーサルに登場する人のID
value co2 0.0 CO2排出量(mg/s)
lon 139.64 現在位置の経度
type "pedestrian" 移動手段(pedestrian, car, escooter, bicycle, bus, rail, tram, subway, waiting)
lat 35.58 現在位置の緯度
speed 1.39 現在位置での速度(m/s)
ec 0.3372070179260734 電力消費量(Wh/s)(escooterのみ)

誰も移動していないときは、dataがnullになります。

{"name":"states","time":60,"data":null}

output.txt

{"name":"output","time":310,"data":{"oid":"person-119","value":{"move":{"travelTime":60,"totalCo2":11818.295182953709,"type":"car"}}}}
{"name":"output","time":310,"data":{"oid":"person-3","value":{"move":{"travelTime":180,"totalCo2":0.0,"type":"pedestrian"}}}}
...
{"name":"output","time":480,"data":{"oid":"person-118","value":{"move":{"opportunityLoss":2.0},"move2":{"travelTime":150,"totalCo2":34648.580464738196,"type":"car"}}}}
...
{"name":"output","time":1010,"data":{"oid":"person-269","value":{"move":{"pedestrianTime":380,"travelTime":500,"escooterDiscount":0.0,"escooterCost":1.7,"totalCo2":0.0,"escooterTime":120,"type":"escooter"}}}}
{"name":"output","time":660,"data":{"oid":"person-34","value":{"move":{"travelTime":100,"carDistance":775.9799999999999,"totalCo2":203530.09611421896,"travelRoute":{"type":"FeatureCollection","features":[{"type":"feature","properties":{"mode":"car"},"geometry":{"type":"LineString","coordinates":[[139.6496,35.57605],[139.64991,35.57605],[139.6502,35.57604],[139.6502,35.57637],[139.65021,35.57682],[139.65022,35.57693],[139.6499,35.57699],[139.64954,35.57705],[139.64873,35.57706],[139.64745,35.57709],[139.64747,35.57743],[139.64746,35.57759],[139.64744,35.57773],[139.64722,35.57782],[139.64698,35.57795],[139.64674,35.57807],[139.64626,35.57834],[139.64603,35.57846],[139.64587,35.57855],[139.64567,35.57865],[139.64413,35.57949],[139.64414,35.57939],[139.64418,35.57895]]}}]},"park_dst":0.0,"type":"car","carTime":100,"fuelCost":13.869874222266384}}}}
...

JSON Linesフォーマットで出力されます。 10秒間隔で、目的地に到着した人の移動の履歴を出力します。 一人に対して、その人が到着した時のみ、その人の情報が一度だけ出力されます。

key valueの例 説明
name "output"
time 310 デジタルリハーサルの経過時間(秒)
data oid "person-119" デジタルリハーサルに登場する人のID
value move travelTime 60 移動にかかった時間(s)
totalCo2 11818.295182953709 CO2排出量(mg)
type "car" 移動手段(pedestrian, car, escooter, bicycle, bus, rail, tram, subwayの組み合わせ)
escooterCost 1.7 利用料金(escooterのみ)
escooterDiscount 0.0 割引された額(escooterのみ)
escooterTime 120 escooterを利用した時間(s)
escooterDistance 765.0 escooterで移動した距離(m)
pedestrianTime 380 徒歩で移動した時間(s)
pedestrianDistance 510.0 徒歩で移動した距離(m)
carTime 300 車で移動した時間(s)
carDistance 2037.8 車で移動した距離(m)
bicycleTime 420 自転車で移動した時間(s)
bicycleDistance 1762.2 自転車で移動した距離(m)
busTime 390 バスで移動した時間(s)
busDistance 765.0 バスで移動した距離(m)
railTime 880 電車で移動した時間(s)
railDistance 3012.0 電車で移動した距離(m)
tramTime 880 トラムで移動した時間(s)
tramDistance 3012.0 トラムで移動した距離(m)
subwayTime 880 地下鉄で移動した時間(s)
subwayDistance 3012.0 地下鉄で移動した距離(m)
fare 200.0 運賃
fuelCost 201.1 燃料代 (carのみ)
park_api 100.0 駐車場料金
park_dst 200.0 車のみの移動時の目的地の駐車料金
travelRoute 移動手段を含む移動経路

escooterCostおよびescooterDiscountの料金は、£を起点としており、env.jsonにてCURRENCY_RATEを設定することで、レートで換算した値が返されます。

また、escooterが借りれなかった、駐車場が満車だった場合には、moveは以下の出力となります。

key valueの例 説明
name "output"
time 480 デジタルリハーサルの経過時間(秒)
data oid "person-118" デジタルリハーサルに登場する人のID
value move opportunityLoss 2.0 escooterを予約できなかったときに、利用できていた場合の料金を出力
carParkingFull 100.0 駐車場を予約できなかったときに、利用できていた場合の料金を出力
bicycleParkingFull 100.0 駐輪場を予約できなかったときに、利用できていた場合の料金を出力

予約を失敗したときには、移動手段を絞った上で、再度移動を試みるため、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

{"simulator":"soars","name":"current-usage","time":60,"data":{"oid":"bay91","value":{"available":2,"reserved":0,"low":0,"minBattery":100.0}}}
{"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の状況が出力されています。

key valueの例 説明
simulator "soars"
name "current-usage"
time 60 デジタルリハーサルの経過時間(秒)
data oid "bay91" ステーションのID
value available 2 ステーションにおいて利用可能なescooterの台数
reserved 0 ステーションにおいて予約されているescooterの台数
low 0 ステーションにおいてバッテリの残量が低いescooterの台数
minBattery 100.0 ステーションに配置されているescooterのバッテリ残量の最小値(%)

lowと判断されるescooterは、env.jsonにおける、USECASE_BATTERY_LOW_PERCENTによって指定された残量以下になったものです。

駐車場の状況も出力されます。

key valueの例 説明
name "current-usage"
time 1320 デジタルリハーサルの経過時間(秒)
data oid "parking5" 駐車場のID
value available 1 駐車場の空き数
reserved 1 駐車場の予約されている数
type "car-parking" car-parkingかbicycle-parking
details 予約や駐車状況の詳細

total-usage.txt

{"simulator":"soars","name":"total-usage","time":3600,"data":{"oid":"bay34","value":{"rentScooters":4,"returnScooters":5}}}
{"name":"total-usage","time":0,"data":{"oid":"parking5","value":{"type":"car-parking","rentCount":8,"returnCount":4}}}
...

JSON Linesフォーマットで出力されます。 デジタルリハーサル終了時に、すべてのステーションのescooterの貸し出し結果が出力されます。

key valueの例 説明
simulator "soars"
name "total-usage"
time 3600 デジタルリハーサルの経過時間(秒)
data oid "bay34" ステーションのID
value rentScooters 4 ステーションにおいて貸し出したescooterの台数
returnScooters 5 ステーションに返却されたescooterの台数

駐車場の結果も出力されます。

key valueの例 説明
name "total-usage"
time 0 0固定です
data oid "parking5" 駐車場のID
value rentCount 8 駐車場に入庫した台数
returnCount 4 駐車場から出庫した台数
type "car-parking" car-parkingかbicycle-parking

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のサイトを参照ください。