イベント仕様
ユーザー(例:乗客)および モビリティ(例:バス)ユニットの状態変化は、イベントとして記録されます。
すべてのイベントは JSON Lines 形式で出力され、**1 行が 1 つのイベント(JSON)**に対応します。
これらのイベントは、シミュレーションの時間軸に沿って時系列順に処理・記録されます。
共通イベント構造
すべてのイベントは、以下のフィールドを持ちます。
| フィールド | 型 | 説明 |
|---|---|---|
eventType | string | イベントの種類 |
time | number | イベントが発生したシミュレーション時刻 |
source | string または null | イベントを生成したコンポーネント |
details | object | イベント固有の追加情報 |
イベント種別
各イベントに含まれる eventType フィールドの値は、以下の 6 種類のいずれかでなければなりません。
| 種別 | 説明 |
|---|---|
DEMAND | ユーザーが移動する需要が生成されたことを示します。 |
RESERVE | 需要に対して予約要求が行われたことを示します。 |
RESERVED | 予約要求が受理されたか、拒否されたかを示します。 |
DEPART | 出発が予定または確定したことを示します。 |
DEPARTED | ユーザーまたはモビリティユニットが出発地を離れたことを示します。 |
ARRIVED | ユーザーまたはモビリティユニットが目的地に到着したことを示します。 |
これらの種類のイベントを組み合わせることで、ユーザーとモビリティのライフサイクルを表現します。
Location オブジェクト
Location は、地理的な地点を表すためにイベント内で共通して使用されます。
| フィールド | 型 | 説明 |
|---|---|---|
locationId | string | ロケーション識別子 |
lat | number | 緯度 |
lng | number | 経度 |
Trip オブジェクト
Trip は、予約された経路の一部であり、特定のモビリティサービスによる 単一の移動区間を表します。
1 つの経路は、1 つ以上の Trip オブジェクトから構成されます。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
org | Location | 必須 | 区間の出発地 |
dst | Location | 必須 | 区間の到着地 |
dept | number | 必須 | 出発予定時刻 |
arrv | number | 必須 | 到着予定時刻 |
service | string | 必須 | この区間に割り当てられたモビリティサービス |
Demand イベント
DEMAND イベントは、ユーザーが出発地から目的地への移動要求を作成したことを示します。
要求されたスケジュールの種類に応じて、dept または arrv の どちらか一方のみが null になります。
- 出発時刻指定(Leave-at):
deptが設定され、arrvは null - 到着時刻指定(Arrive-by):
arrvが設定され、deptは null
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
userId | string | 必須 | 移動需要を作成したユーザーの ID |
demandId | string | 必須 | この移動需要の ID |
org | Location | 必須 | 出発地 |
dst | Location | 必須 | 到着地 |
service | string | 任意 | 特定のサービスに需要を紐付けるために使用される値(ユーザーモデル用) |
dept | number または null | 任意 | 希望出発時刻 |
arrv | number または null | 任意 | 希望到着時刻 |
Demand イベント例
{
"eventType": "DEMAND",
"time": 120.5,
"details": {
"userId": "user-001",
"demandId": "dmd-001",
"org": { "locationId": "A", "lat": 35.0, "lng": 135.0 },
"dst": { "locationId": "B", "lat": 35.1, "lng": 135.1 },
"dept": 130.0,
"arrv": null
}
}
このイベントは次のことを意味します。
シミュレーション時刻
120.5に、ユーザーuser-001によって IDdmd-001の移動需要が生成された。 ユーザーは地点Aから地点Bへの移動を希望しており、出発希望時刻は130.0である。
Reserve Event
RESERVE イベントは、ユーザーが予約を要求したことを示します。 DEMAND イベントを受信した後、ユーザーモデルコンポーネントは候補となる移動プランを評価し、 その中から 1 つのプランを予約する意思を表すために RESERVE イベントを発行します。
RESERVE イベントは、モビリティサービスによって予約が受理されたことを保証するものではありません。 これはあくまでユーザー主導のリクエストを表すものであり、 実際に予約が確定するか否かは、サービスの空き状況などに応じて後続の処理で判断されます。
フィールド定義
| Field / Subfield | Type | Required | Description |
|---|---|---|---|
service | string | Required | ユーザーが予約を試みているモビリティサービスの名称 |
details.userId | string | Required | 予約リクエストを行ったユーザーの ID |
details.demandId | string | Required | この予約リクエストに対応する移動需要の ID |
details.org | object | Required | 要求された移動の出発地 |
details.dst | object | Required | 要求された移動の目的地 |
details.dept | number | Required | 希望出発時刻 |
details.arrv | number | Optional | 希望到着時刻(到着時刻指定型の需要の場合) |
Reserve Event Example
{
"eventType": "RESERVE",
"time": 121.0,
"service": "service-001",
"details": {
"userId": "user-001",
"demandId": "dmd-001",
"org": { "locationId": "A", "lat": 35.0, "lng": 135.0 },
"dst": { "locationId": "B", "lat": 35.1, "lng": 135.1 },
"dept": 130.0
}
}
このイベントは次のことを意味します。
シミュレーション時刻
121.0に、ユーザーuser-001が モビリティサービス service-001 に対して、移動需要dmd-001の予約をリクエストした。 この移動は地点Aから地点Bへのもので、出発希望時刻は130.0である。
Reserved イベント
RESERVED イベントは、予約要求が成功したかどうかを表します。
予約が成功した場合は、割り当てられた経路を含みます。
フィールド定義
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
success | boolean | 必須 | 予約が受理されたかどうかを示す |
userId | string | 必須 | 予約リクエストを行ったユーザーの ID |
demandId | string | 必須 | この予約に対応する移動需要の ID |
route | Trip の配列 | 必須 | 割り当てられた経路。各要素は、出発地・目的地・出発時刻・到着時刻・サービスを含む移動区間を表す |
Reserved イベントの例(予約成功時)
{
"eventType": "RESERVED",
"time": 121.5,
"details": {
"success": true,
"userId": "user-001",
"demandId": "dmd-001",
"route": [
{
"org": { "locationId": "A", "lat": 35.0, "lng": 135.0 },
"dst": { "locationId": "B", "lat": 35.1, "lng": 135.1 },
"dept": 130.0,
"arrv": 150.0,
"service": "service-001"
}
]
}
}
このイベントは次のことを意味します。
シミュレーション時刻
121.5に、ユーザーuser-001による移動需要dmd-001の予約リクエストが受理された。 割り当てられたルートでは、モビリティサービスservice-001を利用し、地点Aを130.0に出発し、地点Bに150.0に到着する。
Depart イベント
DEPART イベントは、すでに予約が受理されているユーザーが、実際に出発地点へ到着し、割り当てられたモビリティサービスを利用して移動できる状態になったことを示します。
予約が確定していても、ユーザーが必ず出発地点に現れるとは限りません。
遅延やキャンセルなどの要因により、ピックアップ地点に到達できない場合もあります。
そのため、DEPART イベントによってユーザーが出発地点に到着したことをモビリティサービスに伝える必要があります。
もし、ユーザーが出発地点に到着しなかった場合、DEPART イベントは生成されません。その場合の扱いは、各モビリティシミュレータに委ねられます。
フィールド定義
| フィールド / サブフィールド | 型 | 必須 | 説明 |
|---|---|---|---|
service | string | 必須 | ユーザーが利用するモビリティサービスの ID |
details.userId | string | 必須 | 出発準備が完了したユーザーの ID |
details.demandId | string | 必須 | この出発に対応する移動需要の ID |
Depart イベントの例
{
"eventType": "DEPART",
"time": 130.0,
"service": "service-001",
"details": {
"userId": "user-001",
"demandId": "dmd-001"
}
}
このイベントは次のことを意味します。
シミュレーション時刻
130.0に、ユーザーuser-001による移動需要dmd-001の出発が、 モビリティサービスservice-001上で可能となったことを示している。
Departed イベント
DEPARTED イベントは、ユーザーまたはモビリティユニットが、ある地点から出発したことを示します。
このイベントには次の 2 つのバリエーションがあります。
- ユーザー出発:ユーザーユニットが出発地を離れたことを示す
- モビリティ出発:モビリティユニットがある地点を出発したことを示す
フィールド定義
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
location | Location | 必須 | 出発地点 |
userId | string | 任意 | ユーザーの ID |
demandId | string | 任意 | 移動需要の ID |
mobilityId | string | 任意 | モビリティユニットの ID |
ユーザー出発イベントの例
{
"eventType": "DEPARTED",
"time": 130.0,
"details": {
"userId": "user-001",
"demandId": "dmd-001",
"location": { "locationId": "A", "lat": 35.0, "lng": 135.0 }
}
}
これは次のことを意味します。
シミュレーション時刻
130.0に、ユーザーuser-001は移動需要dmd-001に基づき、地点Aから実際に出発した。
モビリティ出発イベントの例
{
"eventType": "DEPARTED",
"time": 128.0,
"details": {
"mobilityId": "mob-001",
"location": { "locationId": "A", "lat": 35.0, "lng": 135.0 }
}
}
これは次のことを意味します。
シミュレーション時刻
128.0に、モビリティユニットmob-001が地点Aから出発した。
Arrived イベント
ARRIVED イベントは、ユーザーまたはモビリティユニットが、ある地点に到着したことを示します。
このイベントには次の 2 つのバリエーションがあります。
- ユーザー到着:ユーザーが目的地に到達したことを示す
- モビリティ到着:モビリティユニットがある地点に到着したことを示す
フィールド定義
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
location | Location | 必須 | 到着地点 |
userId | string | 任意 | ユーザーの ID |
demandId | string | 任意 | 移動需要の ID |
mobilityId | string | 任意 | モビリティユニットの ID |
ユーザー到着イベントの例
{
"eventType": "ARRIVED",
"time": 150.0,
"details": {
"userId": "user-001",
"demandId": "dmd-001",
"location": { "locationId": "B", "lat": 35.1, "lng": 135.1 }
}
}
これは次のことを意味します。
シミュレーション時刻
150.0に、ユーザーuser-001は移動需要dmd-001に基づき、地点Bに到着した。
モビリティ到着イベントの例
{
"eventType": "ARRIVED",
"time": 145.0,
"details": {
"mobilityId": "mob-001",
"location": { "locationId": "C", "lat": 35.2, "lng": 135.2 }
}
}
これは次のことを意味します。
シミュレーション時刻
145.0に、モビリティユニットmob-001が地点Cに到着した。