ShipmentRoute

車両のルートは、時間軸に沿って次のように分解できます(n 回の訪問があると仮定します)。

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

次の点に注意してください。

  • 車両の開始と終了、各訪問の開始と終了(到着と出発)などの「時間指定イベント」。これらは特定の秒で発生します。
  • 「時間間隔」など、セッション自体やセッション間の移行など。時間間隔の期間がゼロ(開始と終了が同じ秒)になることもありますが、通常は正の期間になります。

不変条件:

  • 訪問が n 回ある場合、遷移は n+1 回あります。
  • 訪問は常に、その前(同じインデックス)の遷移と、その後の遷移(インデックス + 1)で囲まれています。
  • 車両の起動後には、常にトランジション #0 が続きます。
  • 車両の終了は常にトランジション #n の後に発生します。

Transition と Visit の間に何が起こるかを拡大して見てみましょう。

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

最後に、移行中に TRAVEL、BREAKS、DELAY、WAIT を配置する方法を説明します。

  • 重複しないようにします。
  • DELAY は一意であり、次の訪問(または車両の終了)の直前の連続した期間でなければなりません。したがって、遅延期間を知るだけで、開始時間と終了時間を知ることができます。
  • BREAKS は、連続した重複しない期間です。レスポンスには、各ブレークの開始時刻と期間が指定されます。
  • TRAVEL と WAIT はプリエンプト可能です。この移行中に複数回中断される可能性があります。クライアントは、移動が「できるだけ早く」行われ、「待機」が残りの時間を埋めると想定できます。

(複雑な)例:

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
JSON 表現
{
  "vehicleIndex": integer,
  "vehicleLabel": string,
  "vehicleStartTime": string,
  "vehicleEndTime": string,
  "visits": [
    {
      object (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "vehicleFullness": {
    object (VehicleFullness)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
フィールド
vehicleIndex

integer

ルートを実行する車両。ソース ShipmentModel のインデックスで識別されます。

vehicleLabel

string

指定されている場合、このルートを実行する車両のラベル。ShipmentModel.vehicles(vehicleIndex).label と同じです。

vehicleStartTime

string (Timestamp format)

車両がルートを開始する時刻。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

vehicleEndTime

string (Timestamp format)

車両がルートを完了する時刻。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

visits[]

object (Visit)

ルートを表す訪問の順序付きシーケンス。visits[i] はルート内の i 番目の訪問です。このフィールドが空の場合、車両は未使用と見なされます。

transitions[]

object (Transition)

ルートの遷移の順序付きリスト。

hasTrafficInfeasibilities

boolean

OptimizeToursRequest.consider_road_traffic が true に設定されている場合、このフィールドは、交通状況に基づく移動時間の推定値を使用してルートのタイミングの不整合が予測されることを示します。訪問と車両の時間枠を満たしながら、最初の訪問の前、最後の訪問の後、訪問間の交通状況に応じた移動、遅延、休憩を完了するのに十分な時間がない場合があります。次に例を示します。

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

交通状況により移動時間の推定値 travelDuration(previous_visit, next_visit) が増加したため、next_visit への到着は現在の時間枠よりも遅れる可能性があります。また、移動時間の見積もりが増加し、訪問時間または休憩時間の制約があるため、休憩が訪問と重複する可能性があります。

routePolyline

object (EncodedPolyline)

ルートのエンコードされたポリライン表現。このフィールドは、OptimizeToursRequest.populate_polylines が true に設定されている場合にのみ入力されます。

breaks[]

object (Break)

このルートを運行する車両の休憩予定。breaks シーケンスは時間間隔を表します。各間隔は対応する startTime で始まり、duration 秒間続きます。

metrics

object (AggregatedMetrics)

このルートの所要時間、距離、負荷の指標。AggregatedMetrics のフィールドは、コンテキストに応じて、すべての ShipmentRoute.transitions または ShipmentRoute.visits で合計されます。

vehicleFullness

object (VehicleFullness)

上限付き指標がそれぞれの車両制限にどの程度近いかを計算するための VehicleFullness フィールド。このフィールドは、上限付き指標フィールド(AggregatedMetrics.travel_distance_meters など)と関連する車両上限(Vehicle.route_distance_limit など)の比率です。

試験運用: このフィールドの動作または存在は、今後変更される可能性があります。

routeCosts

map (key: string, value: number)

ルートの費用。費用関連のリクエスト フィールドごとに分類されます。キーは、入力 OptimizeToursRequest に相対的な proto パス(例: 「model.shipments.pickups.cost」)で、値は対応する費用フィールドによって生成された合計費用で、ルート全体で集計されます。つまり、costs["model.shipments.pickups.cost"] はルート上のすべての集荷費用の合計です。モデルで定義されたすべての費用がここに詳細にレポートされます。ただし、2022 年 1 月の時点では、TransitionAttributes に関連する費用は集計された形でしかレポートされません。

routeTotalCost

number

ルートの合計費用。費用マップ内のすべての費用の合計。

アクセス

ルート中に実施された訪問。この訪問は、Shipment の集荷または配送に対応しています。

JSON 表現
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string,
  "visitType": enum (VisitType),
  "injectedSolutionLocationToken": integer
}
フィールド
shipmentIndex

integer

ソース ShipmentModel の shipments フィールドのインデックス。

isPickup

boolean

true の場合、訪問は Shipment の受け取りに対応します。それ以外の場合は、配達に対応します。

visitRequestIndex

integer

Shipment の受け取りまたは配達フィールドの VisitRequest のインデックス(isPickup を参照)。

startTime

string (Timestamp format)

訪問が開始された時刻。車両は、この時間よりも早く訪問場所に到着する可能性があります。時間は ShipmentModel と一致しています。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

loadDemands

map (key: string, value: object (Load))

配送と訪問リクエストの loadDemands の合計として、訪問負荷の合計需要。配達の場合、値は負になります。デマンドは Transition.loads と同じタイプでレポートされます(このフィールドを参照)。

detour

string (Duration format)

訪問前にルート上の配送先を訪問したことと、時間枠によって発生する可能性のある待ち時間による、迂回時間の増加。配達が訪問の場合、迂回は対応する集荷訪問から計算され、次のようになります。

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

それ以外の場合は、車両の startLocation から計算され、次のようになります。

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.
shipmentLabel

string

Shipment で指定されている場合は、対応する Shipment.label のコピー。

visitLabel

string

VisitRequest で指定されている場合は、対応する VisitRequest.label のコピー。

visitType

enum (VisitType)

省略可。訪問のタイプを指定します。Visit.is_pickup フィールドをオーバーライドします。

injectedSolutionLocationToken

integer

訪問場所に関する情報を表す不透明なトークン。

このフィールドは、この訪問で VisitRequest.avoid_u_turns が true に設定されている場合、またはリクエスト OptimizeToursRequest で ShipmentModel.avoid_u_turns が true に設定されている場合に、結果ルートの訪問で入力されることがあります。

試験運用版: 詳しくは、https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request をご覧ください。

VisitType

訪問が受け取り、配達、Stop への訪問のいずれであるかを示します。経由地への訪問は、マルチモーダル最適化が有効になっている場合にのみ使用されます。

列挙型
VISIT_TYPE_UNSPECIFIED 未指定の訪問タイプ。
PICKUP_SHIPMENT 訪問は配送物の集荷に対応します。
DELIVER_SHIPMENT 訪問は配送に対応します。

移行

ルート上の 2 つのイベント間の遷移。ShipmentRoute の説明をご覧ください。

車両に startLocation や endLocation がない場合、対応する移動指標は 0 になります。

JSON 表現
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "routeToken": string,
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
フィールド
travelDuration

string (Duration format)

この移行期間中の移動時間。

travelDistanceMeters

number

移行中に移動した距離。

trafficInfoUnavailable

boolean

OptimizeToursRequest.consider_road_traffic 経由で交通情報がリクエストされ、Transition の交通情報を取得できなかった場合、このブール値は true に設定されます。これは一時的な場合(リアルタイム トラフィック サーバーのまれなエラー)と永続的な場合(この場所のデータがない)があります。

delayDuration

string (Duration format)

このトランジションに適用された遅延時間の合計。遅延がある場合、次のイベント(訪問または車両の終了)の delayDuration 秒前に開始されます。TransitionAttributes.delayをご確認ください。

breakDuration

string (Duration format)

このトランジション中に発生した中断の合計時間(ある場合)。各休憩の開始時刻と継続時間に関する詳細は、ShipmentRoute.breaks に保存されます。

waitDuration

string (Duration format)

この移行中に待機した時間。待機時間はアイドル時間に対応しており、休憩時間は含まれません。また、この待機時間は連続しない複数の間隔に分割されることがあります。

totalDuration

string (Duration format)

便宜上、移行の合計時間も表示されます。これは次と同等です。

  • 次の訪問 startTime(または、これが最後の遷移の場合は vehicleEndTime) - この遷移の startTime。
  • ShipmentRoute.has_traffic_infeasibilities が false の場合、`totalDuration = travelDuration + delayDuration` も成り立ちます。
  • breakDuration + waitDuration`。
startTime

string (Timestamp format)

このトランジションの開始時間。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

routePolyline

object (EncodedPolyline)

移行中にたどったルートのエンコードされたポリライン表現。このフィールドは、populateTransitionPolylines が true に設定されている場合にのみ入力されます。

routeToken

string

出力専用。Navigation SDK に渡して、ナビゲーション中にルートを再構築できる不透明なトークン。ルートが作成されたときに、ルート変更が発生した場合に元の意図を尊重します。このトークンは不透明な blob として扱います。サービスがまったく同じルートを返した場合でも、値が変更される可能性があるため、リクエスト間で値を比較しないでください。このフィールドは、populateTransitionPolylines が true に設定されている場合にのみ入力されます。

vehicleLoads

map (key: string, value: object (VehicleLoad))

この移行期間中の車両の積載量。この車両の Vehicle.load_limits に表示されるか、このルートで実施された一部の配送で Shipment.load_demands がゼロ以外の値になっている各タイプについて。

最初のトランジションの負荷は、車両ルートの開始負荷です。その後、各訪問の loadDemands は、訪問が集荷か配達かに応じて、次のトランジションの負荷に加算または減算されます。

EncodedPolyline

ポリラインのエンコードされた表現。ポリライン エンコードの詳細については、https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding をご覧ください。

JSON 表現
{
  "points": string
}
フィールド
points

string

ポリラインのエンコードされたポイントを表す文字列。

休憩

休憩の実行を表すデータ。

JSON 表現
{
  "startTime": string,
  "duration": string
}
フィールド
startTime

string (Timestamp format)

休憩の開始時刻。

RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: "2014-10-02T15:01:23Z"、"2014-10-02T15:01:23.045123456Z"、"2014-10-02T15:01:23+05:30"。

duration

string (Duration format)

休憩時間。

VehicleFullness

VehicleFullness は、車両の空き状況を計算する指標です。各 VehicleFullness フィールドは 0 ~ 1 の範囲で、上限付きの指標フィールド(AggregatedMetrics.travel_distance_meters など)とその関連する車両制限(Vehicle.route_distance_limit など)の比率として計算されます(存在する場合)。それ以外の場合、充満率の設定は解除されます。上限が 0 の場合、フィールドは 1 に設定されます。注: ルートが交通状況の制約を受ける場合、一部の生の乗車率が 1.0 を超えることがあります(車両が距離制限を超えるなど)。このような場合、充実度の値は 1.0 に制限されます。

JSON 表現
{
  "maxFullness": number,
  "distance": number,
  "travelDuration": number,
  "activeDuration": number,
  "maxLoad": number,
  "activeSpan": number
}
フィールド
maxFullness

number

このメッセージ内の他のすべてのフィールドの最大値。

distance

number

AggregatedMetrics.travel_distance_meters と Vehicle.route_distance_limit の比率。Vehicle.route_distance_limit が設定されていない場合、このフィールドは設定されません。

travelDuration

number

[AggregatedMetrics.travel_duration_seconds][] と Vehicle.travel_duration_limit の比率。Vehicle.travel_duration_limit が設定されていない場合、このフィールドは設定されません。

activeDuration

number

[AggregatedMetrics.total_duration_seconds][] と Vehicle.route_duration_limit の比率。Vehicle.route_duration_limit が設定されていない場合、このフィールドは設定されません。

maxLoad

number

すべてのタイプの [AggregatedMetrics.max_load][] とそれぞれの Vehicle.load_limits の最大比率。すべての Vehicle.load_limits フィールドが設定されていない場合、このフィールドは設定されません。

activeSpan

number

特定の車両の比率(vehicleEndTime - vehicleStartTime)/(latestVehicleEndTime - earliestVehicleStartTime)。分母がない場合は、代わりに(ShipmentModel.global_end_time - ShipmentModel.global_start_time)を使用します。