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 が先行します。

ズームインすると、TransitionVisit の実行中は次のようになります。

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

最後に、移行時に移動、中断、遅延、待機を設定する方法を説明します。

  • 重複していません。
  • 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)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
フィールド
vehicleIndex

integer

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

vehicleLabel

string

このルートを運行する車両のラベル。指定する場合は ShipmentModel.vehicles(vehicleIndex).label になります。

vehicleStartTime

string (Timestamp format)

車両がルートを開始した時刻。

RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

vehicleEndTime

string (Timestamp format)

車両がルートを終了した時刻。

RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

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 で合計されます。

routeCosts

map (key: string, value: number)

ルートのコスト。コスト関連のリクエスト フィールド別に分類されます。キーは、入力 OptimizeToursRequest に対する相対パスの proto パスです。次に例を示します。「model.shipments.pickups.cost」、値は対応する費用フィールドで生成された合計費用で、ルート全体で集計されます。つまり、cost["model.shipments.pickups.cost"] はルート上のすべての受け取り費用の合計となります。2022 年 1 月時点で集計された形でのみ報告される TransitionAttributes に関連する費用を除き、モデルで定義されたすべての費用は、ここで詳細に報告されます。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

routeTotalCost

number

ルートの総費用。コストマップのすべての費用の合計。

アクセス

経路中に行われた訪問。この訪問は、Shipment の集荷または宅配に対応しています。

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

integer

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

isPickup

boolean

true の場合、訪問は Shipment の乗車に対応します。それ以外の場合は配信に対応します。

visitRequestIndex

integer

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

startTime

string (Timestamp format)

訪問の開始時刻。車両がこれよりも早く訪問場所に到着する場合があるので注意してください。時刻は ShipmentModel と一致します。

RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

loadDemands

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

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

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

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.

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"

shipmentLabel

string

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

visitLabel

string

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

移行

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

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

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

string (Duration format)

この移行中の移動時間。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"

travelDistanceMeters

number

移行中の移動距離。

trafficInfoUnavailable

boolean

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

delayDuration

string (Duration format)

この切り替えに適用される遅延時間の合計。設定されている場合は、次のイベント(訪問または車両の終了時間)のちょうど delayDuration 秒前に遅延が開始されます。TransitionAttributes.delayをご確認ください。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"

breakDuration

string (Duration format)

この遷移中に発生する中断の合計(ある場合)。各休憩の開始時間と継続時間に関する詳細は、ShipmentRoute.breaks に保存されます。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"

waitDuration

string (Duration format)

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

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"

totalDuration

string (Duration format)

移行の合計時間です(便宜上記載)。これは次と等しくなります。

  • 次回の訪問 startTime(最後の移行の場合は vehicleEndTime)- この遷移の startTime
  • ShipmentRoute.has_traffic_infeasibilities が false の場合、totalDuration = travelDuration + delayDuration が成り立っています。
  • breakDuration + waitDuration

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"

startTime

string (Timestamp format)

この移行の開始時間。

RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

routePolyline

object (EncodedPolyline)

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

vehicleLoads

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

この遷移中の車両の読み込み。この車両の Vehicle.load_limits に表示されるタイプごと、またはこのルートで実行された一部の配送で 0 以外の Shipment.load_demands がある各タイプについて。

最初の遷移中の負荷は、車両経路の開始負荷です。各訪問の後に、訪問が集荷か配達かに応じて、訪問の loadDemands が加算または減算され、次の遷移の負荷が算出されます。

"key": value ペアのリストを含むオブジェクト。例: { "name": "wrench", "mass": "1.3kg", "count": "3" }

EncodedPolyline

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

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

string

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

休憩

ブレークの実行を表すデータ。

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

string (Timestamp format)

休憩の開始時間。

RFC3339 UTC「Zulu」形式のタイムスタンプ。精度はナノ秒まで、小数点以下は最大 9 桁。例: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z"

duration

string (Duration format)

休憩時間。

s で終わる小数 9 桁までの秒単位の期間。例: "3.5s"