ShipmentModel

配送モデルには、一連の車両で実行する必要がある一連の配送が含まれています。全体的な費用(次の合計)を最小限に抑える必要があります。

  • 車両のルート設定の費用(すべての車両の合計時間あたりの費用、移動時間あたりの費用、固定費用の合計)。
  • 未履行の配送に対するペナルティ。
  • 配送のグローバル期間のコスト
JSON 表現
{
  "shipments": [
    {
      object (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "objectives": [
    {
      object (Objective)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
フィールド
shipments[]

object (Shipment)

モデルで実行する必要がある配送のセット。

vehicles[]

object (Vehicle)

訪問の実行に使用できる車両のセット。

objectives[]

object (Objective)

このモデルの目標のセット。これは費用に変換されます。空でない場合、入力モデルは無料である必要があります。変更されたリクエストを取得するには、solvingMode = TRANSFORM_AND_RETURN_REQUEST を使用してください。なお、この場合、リクエストは解決されません。対応するドキュメントをご覧ください。

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

globalStartTime

string (Timestamp format)

モデルのグローバルな開始時間と終了時間: この範囲外の時間は有効と見なされません。

モデルの期間は 1 年未満にする必要があります。つまり、globalEndTimeglobalStartTime の差は 31,536,000 秒以内にする必要があります。

cost_per_*hour フィールドを使用する場合は、パフォーマンスを向上させるために、この期間をより短い間隔に設定することをおすすめします(たとえば、1 日をモデル化する場合は、グローバル時間制限をその日に設定する必要があります)。設定されていない場合、デフォルトとして 1970 年 1 月 1 日 00:00:00 UTC(秒: 0、ナノ秒: 0)が使用されます。

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"

globalEndTime

string (Timestamp format)

未設定の場合、デフォルトとして 1971 年 1 月 1 日 00:00:00 UTC(秒: 31536000、ナノ秒: 0)が使用されます。

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"

globalDurationCostPerHour

number

プラン全体の「グローバル期間」は、すべての車両の最も早い有効開始時刻と最も遅い有効終了時刻の差です。ユーザーは、その数量に 1 時間あたりの費用を割り当てて、ジョブの完了を最適化できます。この費用は Shipment.penalty_cost と同じ単位にする必要があります。

durationDistanceMatrices[]

object (DurationDistanceMatrix)

モデルで使用される所要時間と距離の行列を指定します。このフィールドが空の場合、useGeodesicDistances フィールドの値に応じて、Google マップまたは測地線距離が代わりに使用されます。空でない場合、useGeodesicDistances は true にできず、durationDistanceMatrixSrcTagsdurationDistanceMatrixDstTags のどちらも空にできません。

使用例:

  • locA と locB の 2 つのロケーションがあります。
  • 1 台の車両が locA でルートを開始し、locA で終了します。
  • locB での 1 件の集荷訪問リクエスト。
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • locA、locB、locC の 3 つのロケーションがあります。
  • locA でルートを開始し、locB で終了する 1 台の車両。マトリックス「fast」を使用します。
  • locB でルートを開始し、locB で終了する 1 台の車両。マトリックス「slow」を使用。
  • 1 台の車両が locB でルートを開始し、locB で終了する。マトリックス「fast」を使用する。
  • locC で 1 件の集荷訪問リクエスト。
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

所要時間と距離の行列のソースを定義するタグ。durationDistanceMatrices(i).rows(j) は、タグ durationDistanceMatrixSrcTags(j) のある訪問から行列 i の他の訪問までの所要時間と距離を定義します。

タグは VisitRequest.tags または Vehicle.start_tags に対応します。指定された VisitRequest または Vehicle は、このフィールドのタグと完全に一致する必要があります。Vehicle の送信元、宛先、マトリックス タグは同じにできます。同様に、VisitRequest の送信元と宛先のタグも同じにできます。すべてのタグは異なっており、空の文字列にすることはできません。このフィールドが空でない場合、durationDistanceMatrices は空にできません。

durationDistanceMatrixDstTags[]

string

時間と距離のマトリックスの宛先を定義するタグ。durationDistanceMatrices(i).rows(j).durations(k)(または durationDistanceMatrices(i).rows(j).meters(k)) は、行列 i のタグ durationDistanceMatrixSrcTags(j) の訪問からタグ durationDistanceMatrixDstTags(k) の訪問までの移動時間(または距離)を定義します。

タグは VisitRequest.tags または Vehicle.start_tags に対応します。指定された VisitRequest または Vehicle は、このフィールドのタグと完全に一致する必要があります。Vehicle の送信元、宛先、マトリックス タグは同じにできます。同様に、VisitRequest の送信元と宛先のタグも同じにできます。すべてのタグは異なっており、空の文字列にすることはできません。このフィールドが空でない場合、durationDistanceMatrices は空にできません。

transitionAttributes[]

object (TransitionAttributes)

モデルに追加された移行属性。

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

互換性のない shipment_type のセット(ShipmentTypeIncompatibility を参照)。

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

shipmentType 要件のセット(ShipmentTypeRequirement を参照)。

precedenceRules[]

object (PrecedenceRule)

モデルで適用する必要がある優先順位ルールのセット。

重要: 優先順位ルールを使用すると、最適化できる問題のサイズが制限されます。多くの配送を含む優先順位ルールを使用するリクエストは拒否される可能性があります。

maxActiveVehicles

integer

アクティブな車両の最大数を制約します。車両がアクティブになるのは、そのルートで少なくとも 1 回の配送が行われた場合です。これは、車両よりもドライバーの数が少なく、車両のフリートが異種の場合に、ルートの数を制限するために使用できます。最適化により、使用する車両の最適なサブセットが選択されます。真に正である必要があります。

配送

1 つのアイテムの配送。集荷から配達まで。配送が完了したと見なされるには、固有の車両が 1 つの集荷場所を訪れ(それに応じて予備容量が減少)、その後 1 つの配送場所を訪れる(それに応じて予備容量が再び増加)必要があります。

JSON 表現
{
  "displayName": string,
  "pickups": [
    {
      object (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
フィールド
displayName

string

荷物のユーザー定義の表示名。最大 63 文字で、UTF-8 文字を使用できます。

pickups[]

object (VisitRequest)

配送に関連付けられた集荷の代替手段のセット。指定しない場合、車両は配達に対応する場所のみに立ち寄る必要があります。

deliveries[]

object (VisitRequest)

配送に関連付けられた配送方法の代替案のセット。指定しない場合、車両は集荷に対応する場所のみに立ち寄る必要があります。

loadDemands

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

荷物の積載要件(重量、容積、パレット数など)。マップ内のキーは、対応する負荷のタイプを説明する識別子である必要があります。単位も指定することが望ましいです。例: 「weight_kg」、「volume_gallons」、「pallet_count」など。指定されたキーがマップに表示されない場合、対応する読み込みは null と見なされます。

allowedVehicleIndices[]

integer

この配送を行う可能性のある車両のセット。空の場合、すべての車両が実行できます。車両は、ShipmentModelvehicles リストのインデックスで指定されます。

costsPerVehicle[]

number

この配送が各車両で配達された場合に発生する費用を指定します。指定する場合は、次のいずれかが必要です。

  • costsPerVehicleIndices と同じ数の要素が含まれます。costsPerVehicle[i] は、モデルの車両 costsPerVehicleIndices[i] に対応します。
  • モデル内の車両と同じ数の要素。i 番目の要素は、モデルの車両 #i に対応します。

これらの費用は penaltyCost と同じ単位で指定する必要があり、負の値は指定できません。そのような費用がない場合は、このフィールドを空のままにします。

costsPerVehicleIndices[]

integer

costsPerVehicle が適用される車両のインデックス。空でない場合は、costsPerVehicle と同じ数の要素が含まれている必要があります。車両インデックスは複数回指定できません。車両が costsPerVehicleIndices から除外されている場合、費用は 0 になります。

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

集荷から配達までの最短経路と比較した、最大絶対迂回時間を指定します。指定する場合は、非負の値にする必要があります。また、配送には少なくとも集荷と配達が含まれている必要があります。

たとえば、t を選択した受け取り方法から選択した配送方法に直接移動するのにかかる最短時間とします。pickupToDeliveryAbsoluteDetourLimit を設定すると、次のことが強制されます。

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

同じ配送で相対的な上限と絶対的な上限の両方が指定されている場合は、可能な集荷/配達のペアごとに、より制約の厳しい上限が使用されます。2017 年 10 月の時点で、迂回は移動時間が車両に依存しない場合にのみサポートされています。

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

pickupToDeliveryTimeLimit

string (Duration format)

荷物の集荷開始から配達開始までの最大期間を指定します。指定する場合は、非負の値にする必要があります。また、配送には少なくとも集荷と配達が含まれている必要があります。これは、受け取りと配送に選択された代替手段や車両の速度には依存しません。これは、最大迂回制約とともに指定できます。ソリューションは両方の仕様を尊重します。

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

shipmentType

string

この配送の「タイプ」を指定する空でない文字列。この機能を使用して、shipment_types 間の非互換性や要件を定義できます(ShipmentModelshipmentTypeIncompatibilitiesshipmentTypeRequirements を参照)。

1 回の訪問に対して指定される visitTypes とは異なります。同じ配送に属するすべての集荷/配達で同じ shipmentType が共有されます。

label

string

この配送のラベルを指定します。このラベルは、対応する ShipmentRoute.VisitshipmentLabel のレスポンスで報告されます。

ignore

boolean

true の場合、この配送をスキップしますが、penaltyCost は適用しません。

モデルに shipmentTypeRequirements がある場合、配送を無視すると検証エラーが発生します。

injectedFirstSolutionRoutes または injectedSolutionConstraint で実行された配送を無視することは許可されています。ソルバーは、関連する集荷/配達の訪問をルートから削除します。無視された配送を参照する precedenceRules も無視されます。

penaltyCost

number

配送が完了しなかった場合、このペナルティはルートの総費用に追加されます。受け取りと配達のいずれかの代替手段が選択された場合、配送は完了したとみなされます。費用は、モデル内の他のすべての費用関連フィールドで使用されているのと同じ単位で表すことができ、正の値である必要があります。

重要: このペナルティが指定されていない場合、無限と見なされます。つまり、配送を完了する必要があります。

pickupToDeliveryRelativeDetourLimit

number

集荷から配達までの最短経路と比較した、相対的な迂回時間の最大値を指定します。指定する場合は、非負の値にする必要があります。また、配送には少なくとも集荷と配達が含まれている必要があります。

たとえば、t を選択した受け取り方法から選択した配送方法に直接移動するのにかかる最短時間とします。pickupToDeliveryRelativeDetourLimit を設定すると、次のことが強制されます。

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

同じ配送で相対的な上限と絶対的な上限の両方が指定されている場合は、可能な集荷/配達のペアごとに、より制約の厳しい上限が使用されます。2017 年 10 月の時点で、迂回は移動時間が車両に依存しない場合にのみサポートされています。

VisitRequest

車両で訪問できるリクエスト: 地理的位置(または 2 つ、下記参照)、時間枠で表される開店時間と閉店時間、サービス時間(車両が商品の受け取りまたは配達に到着してから費やす時間)があります。

JSON 表現
{
  "arrivalLocation": {
    object (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string,
  "avoidUTurns": boolean
}
フィールド
arrivalLocation

object (LatLng)

この VisitRequest を実行したときに車両が到着する地理的位置。配送モデルに所要時間距離行列がある場合、arrivalLocation を指定することはできません。

arrivalWaypoint

object (Waypoint)

この VisitRequest を実行したときに車両が到着する経由地。配送モデルに所要時間距離行列がある場合、arrivalWaypoint を指定することはできません。

departureLocation

object (LatLng)

この VisitRequest の完了後に車両が出発する地理的位置。arrivalLocation と同じ場合は省略できます。配送モデルに所要時間距離行列がある場合、departureLocation を指定することはできません。

departureWaypoint

object (Waypoint)

この VisitRequest の完了後に車両が出発する経由地。arrivalWaypoint と同じ場合は省略できます。配送モデルに所要時間距離行列がある場合、departureWaypoint を指定することはできません。

tags[]

string

アクセス リクエストに付加されたタグを指定します。空の文字列や重複する文字列は使用できません。

timeWindows[]

object (TimeWindow)

訪問の到着時刻を制約する時間枠。車両は到着時間枠外に出発する場合があります。つまり、到着時間 + 所要時間が時間枠内である必要はありません。車両が TimeWindow.start_time より前に到着した場合、待ち時間が発生する可能性があります。

TimeWindow がない場合は、車両がいつでもこの訪問を実行できることを意味します。

時間枠は重複しないようにする必要があります。つまり、別の時間枠と重複したり、隣接したりしないようにする必要があります。また、昇順で指定する必要があります。

costPerHourAfterSoftEndTimesoftEndTime は、時間枠が 1 つの場合にのみ設定できます。

duration

string (Duration format)

訪問時間(車両が到着してから出発するまでの時間。待機時間に追加されます。timeWindows を参照)。

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

cost

number

車両ルートでこの訪問リクエストに対応する費用。これは、配送の代替手段ごとに異なる費用を支払うために使用できます。この費用は Shipment.penalty_cost と同じ単位で指定する必要があり、負の値は指定できません。

loadDemands

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

この訪問リクエストの需要を読み込みます。これは Shipment.load_demands フィールドと同じですが、Shipment 全体ではなく、この VisitRequest にのみ適用されます。ここに記載されているデマンドは、Shipment.load_demands に記載されているデマンドに追加されます。

visitTypes[]

string

訪問のタイプを指定します。これは、車両がこの訪問を完了するために必要な追加時間を割り当てるために使用されることがあります(Vehicle.extra_visit_duration_for_visit_type を参照)。

型は 1 回しか指定できません。

label

string

この VisitRequest のラベルを指定します。このラベルは、対応する ShipmentRoute.VisitvisitLabel としてレスポンスで報告されます。

avoidUTurns

boolean

この地点の運転ルートで U ターンを避けるかどうかを指定します。U ターン回避はベスト エフォートであり、完全な回避は保証されません。これは試験運用中の機能であり、動作は変更される可能性があります。

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

LatLng

緯度と経度のペアを表すオブジェクト。これは緯度を表す倍精度値と経度を表す倍精度値のペアで表現されます。特に明記されていない場合、このオブジェクトは WGS84 規格に準拠する必要があります。値は正規化範囲内で指定する必要があります。

JSON 表現
{
  "latitude": number,
  "longitude": number
}
フィールド
latitude

number

緯度(度単位)。範囲 [-90.0, +90.0] 内になければなりません。

longitude

number

経度(度単位)。範囲 [-180.0, +180.0] 内になければなりません。

ウェイポイント

経由地をカプセル化します。経由地は、VisitRequest の到着地と出発地、Vehicle の開始地と終了地を示します。

JSON 表現
{
  "sideOfRoad": boolean,
  "vehicleStopover": boolean,

  // Union field location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
フィールド
sideOfRoad

boolean

省略可。このウェイポイントの位置で、車両を優先的に道路の特定の側に停車することを指示します。この値を設定すると、ルートは位置情報を通過するため、車両は道路の中央から位置情報が偏っている側の路肩に停車できます。このオプションは、移動手段が「徒歩」の場合には機能しません。

vehicleStopover

boolean

ウェイポイントが車両の停車地点であることを示します。乗車または降車を目的としています。このオプションは、交通手段が「DRIVING」で、locationType が「location」の場合にのみ機能します。

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

共用体フィールド location_type。場所を表すさまざまな方法。location_type は次のいずれかになります。
location

object (Location)

地理座標を使用して指定されたポイント。オプションの見出しを含む。

placeId

string

経由地に関連付けられた POI のプレイス ID。

プレイス ID を使用して VisitRequest の到着地または出発地を指定する場合は、その場所へのナビゲーションの LatLng 位置を特定するのに十分なプレイス ID を使用します。たとえば、建物を示すプレイス ID は適切ですが、道路を示すプレイス ID は推奨されません。

場所

位置情報(地理的な地点と、必要に応じて見出し)をカプセル化します。

JSON 表現
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
フィールド
latLng

object (LatLng)

経由地の地理座標。

heading

integer

交通の流れの方向に関連付けられたコンパス方位。この値は、乗車と降車に使用する道路の側を指定するために使用されます。見出しの値は 0 ~ 360 の範囲で、0 は真北の見出し、90 は真東の見出しなどを指定します。

TimeWindow

時間枠は、訪問の到着時間や車両の開始時間と終了時間など、イベントの時間を制約します。

ハード タイム ウィンドウの境界 startTimeendTime は、イベントの最も早い時刻と最も遅い時刻を強制します(startTime <= event_time <= endTime)。ソフト タイム ウィンドウの下限 softStartTime は、イベントが softStartTime 以降に発生することを優先し、イベントが softStartTime より前に発生した時間に応じてコストが発生することを表します。ソフト時間枠の上限 softEndTime は、イベントが softEndTime 以降に発生した場合に、その遅延時間に比例したコストが発生することで、イベントが softEndTime 以前に発生することを優先的に表します。startTimeendTimesoftStartTimesoftEndTime は、グローバルな時間制限(ShipmentModel.global_start_timeShipmentModel.global_end_time を参照)内に収まる必要があり、次の点を考慮する必要があります。

  0 <= `startTime` <= `endTime` and
  0 <= `startTime` <= `softStartTime` and
  0 <= `softEndTime` <= `endTime`.
JSON 表現
{
  "startTime": string,
  "endTime": string,
  "softStartTime": string,
  "softEndTime": string,
  "costPerHourBeforeSoftStartTime": number,
  "costPerHourAfterSoftEndTime": number
}
フィールド
startTime

string (Timestamp format)

ハード時間枠の開始時間。指定しない場合、ShipmentModel.global_start_time に設定されます。

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"

endTime

string (Timestamp format)

ハード時間枠の終了時間。指定しない場合、ShipmentModel.global_end_time に設定されます。

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"

softStartTime

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"

softEndTime

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"

costPerHourBeforeSoftStartTime

number

イベントが softStartTime より前に発生した場合にモデルの他の費用に追加される 1 時間あたりの費用。次のように計算されます。

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

この費用は正の値にする必要があり、softStartTime が設定されている場合にのみ設定できます。

costPerHourAfterSoftEndTime

number

イベントが softEndTime の後に発生した場合にモデルの他の費用に追加される 1 時間あたりの費用。次のように計算されます。

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

この費用は正の値でなければなりません。また、このフィールドは softEndTime が設定されている場合にのみ設定できます。

車両

配送に関する問題の車両をモデル化します。配送の問題を解決すると、この車両の startLocation から endLocation までのルートが作成されます。ルートは訪問のシーケンスです(ShipmentRoute を参照)。

JSON 表現
{
  "displayName": string,
  "travelMode": enum (TravelMode),
  "routeModifiers": {
    object (RouteModifiers)
  },
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
フィールド
displayName

string

車両のユーザー定義の表示名。最大 63 文字で、UTF-8 文字を使用できます。

travelMode

enum (TravelMode)

車両が走行可能な道路とその速度に影響する移動モード。travelDurationMultiple もご覧ください。

routeModifiers

object (RouteModifiers)

指定された車両のルートの計算方法に影響する、満たすべき条件のセット。

startLocation

object (LatLng)

車両が荷物を集荷する前に出発する地理的な場所。指定しない場合、車両は最初の乗車場所から開始します。配送モデルに所要時間と距離の行列がある場合、startLocation は指定できません。

startWaypoint

object (Waypoint)

車両が荷物を集荷する前に出発する地理的位置を表す経由地。startWaypointstartLocation のどちらも指定されていない場合、車両は最初の乗車地点から出発します。配送モデルに所要時間と距離の行列がある場合、startWaypoint は指定できません。

endLocation

object (LatLng)

車両が最後の VisitRequest を完了した後の地理的位置。指定されていない場合、車両の ShipmentRoute は最後の VisitRequest が完了するとすぐに終了します。配送モデルに所要時間と距離の行列がある場合、endLocation は指定できません。

endWaypoint

object (Waypoint)

車両が最後の VisitRequest を完了した後に停止する地理的位置を表す経由地。endWaypointendLocation のいずれも指定されていない場合、車両の ShipmentRoute は最後の VisitRequest を完了するとすぐに終了します。配送モデルに所要時間と距離の行列がある場合、endWaypoint は指定できません。

startTags[]

string

車両のルートの開始位置に付加されるタグを指定します。

空の文字列や重複する文字列は使用できません。

endTags[]

string

車両のルートの末尾に付加されるタグを指定します。

空の文字列や重複する文字列は使用できません。

startTimeWindows[]

object (TimeWindow)

車両が出発地を出発できる時間帯。グローバル タイムアウトの範囲内である必要があります(ShipmentModel.global_* フィールドを参照)。指定しない場合、グローバルな時間制限以外に制限はありません。

同じ繰り返しフィールドに属する時間枠は、互いに重複したり隣接したりしないように、時系列順に並べる必要があります。

costPerHourAfterSoftEndTimesoftEndTime は、時間枠が 1 つの場合にのみ設定できます。

endTimeWindows[]

object (TimeWindow)

車両が最終目的地に到着する可能性のある時間帯。グローバル タイムアウトの範囲内である必要があります(ShipmentModel.global_* フィールドを参照)。指定しない場合、グローバルな時間制限以外に制限はありません。

同じ繰り返しフィールドに属する時間枠は、互いに重複したり隣接したりしないように、時系列順に並べる必要があります。

costPerHourAfterSoftEndTimesoftEndTime は、時間枠が 1 つの場合にのみ設定できます。

unloadingPolicy

enum (UnloadingPolicy)

車両に適用される荷降ろしポリシー。

loadLimits

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

車両の容量(重量、容積、パレット数など)。マップ内のキーは、Shipment.load_demands フィールドのキーと一致する、負荷のタイプの識別子です。このマップに特定のキーがない場合、対応する容量は無制限とみなされます。

costPerHour

number

車両費用: すべての費用を合計し、Shipment.penalty_cost と同じ単位にする必要があります。

車両ルートの 1 時間あたりの費用。この費用はルートの合計時間に適用され、移動時間、待ち時間、訪問時間が含まれます。costPerTraveledHour だけでなく costPerHour を使用すると、レイテンシが増加する可能性があります。

costPerTraveledHour

number

車両ルートの走行時間あたりの費用。この費用は、ルートの移動時間(ShipmentRoute.transitions で報告される時間)にのみ適用され、待ち時間と訪問時間は除外されます。

costPerKilometer

number

車両ルートの 1 キロメートルあたりの費用。この費用は ShipmentRoute.transitions で報告された距離に適用され、単一の VisitRequestarrivalLocation から departureLocation まで暗黙的に移動した距離には適用されません。

fixedCost

number

この車両が配送の処理に使用された場合に適用される固定費用。

usedIfRouteIsEmpty

boolean

このフィールドは、ルートに配送がない場合にのみ車両に適用されます。この場合、車両が使用済みと見なされるかどうかを示します。

true の場合、車両は荷物を配達しなくても出発地から目的地まで移動し、出発地から目的地までの移動による時間と距離のコストが考慮されます。

それ以外の場合、車両は出発地から目的地まで移動せず、この車両の breakRule や遅延(TransitionAttributes から)はスケジュールされません。この場合、車両の ShipmentRoute には、車両のインデックスとラベル以外の情報は含まれません。

routeDurationLimit

object (DurationLimit)

車両のルートの合計時間に適用される制限。特定の OptimizeToursResponse における車両のルート時間は、vehicleEndTimevehicleStartTime の差です。

travelDurationLimit

object (DurationLimit)

車両のルートの移動時間に適用される制限。特定の OptimizeToursResponse では、ルートの移動時間はすべての transitions.travel_duration の合計です。

routeDistanceLimit

object (DistanceLimit)

車両のルートの合計距離に適用される制限。特定の OptimizeToursResponse では、ルート距離はすべての transitions.travel_distance_meters の合計です。

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

visitTypes 文字列から期間へのマップを指定します。期間は、指定された visitTypes での訪問時に VisitRequest.duration に加えてかかる時間です。この追加の訪問時間により、costPerHour が指定されている場合は費用が増加します。キー(visitTypes など)は空の文字列にできません。

訪問リクエストに複数のタイプがある場合、マップ内の各タイプに期間が追加されます。

breakRule

object (BreakRule)

この車両に適用される休憩スケジュールを説明します。空の場合、この車両の休憩はスケジュールされません。

label

string

この車両のラベルを指定します。このラベルは、対応する ShipmentRoutevehicleLabel としてレスポンスで報告されます。

ignore

boolean

true の場合、usedIfRouteIsEmpty は false にする必要があります。この車両は未使用のままになります。

injectedFirstSolutionRoutes で無視された車両で配送が行われた場合、最初のソリューションではスキップされますが、レスポンスでは自由に行うことができます。

injectedSolutionConstraint で無視された車両によって配送が行われ、関連する集荷/配達が車両に残るように制約されている場合(つまり、レベル RELAX_ALL_AFTER_THRESHOLD に緩和されていない場合)、レスポンスでスキップされます。配送に空でない allowedVehicleIndices フィールドがあり、許可されているすべての車両が無視される場合、レスポンスでスキップされます。

travelDurationMultiple

number

この車両の移動時間を増減するために使用できる乗数を指定します。たとえば、この値を 2.0 に設定すると、この車両は標準車両の 2 倍の移動時間を要する低速車両になります。この倍率はセッション時間には影響しません。costPerHour または costPerTraveledHour が指定されている場合は、費用に影響します。この値は [0.001, 1000.0] の範囲内である必要があります。設定しない場合、車両は標準とみなされ、この倍率は 1.0 とみなされます。

警告: 移動時間は、この倍数が適用された後、数値演算の前に最も近い秒に丸められます。そのため、倍数が小さいと精度が低下する可能性があります。

下記の extraVisitDurationForVisitType もご覧ください。

TravelMode

車両で使用できる移動手段。

これらは Google Maps Platform Routes API の移動手段のサブセットである必要があります。https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode をご覧ください。

注: WALKING ルートはベータ版であり、明確な歩道や歩行者用道路がない場合があります。アプリに表示するすべての徒歩ルートについて、この警告をユーザーに表示する必要があります。

列挙型
TRAVEL_MODE_UNSPECIFIED 移動手段が指定されていません(DRIVING と同等)。
DRIVING 運転ルートに対応する移動手段(車など)。
WALKING 徒歩経路に対応する移動手段。

RouteModifiers

車両ルートの計算時に満たす必要がある一連のオプション条件をカプセル化します。これは、Google Maps Platform Routes Preferred API の RouteModifiers と同様です。https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers をご覧ください。

JSON 表現
{
  "avoidTolls": boolean,
  "avoidHighways": boolean,
  "avoidFerries": boolean,
  "avoidIndoor": boolean
}
フィールド
avoidTolls

boolean

有料道路を避けるかどうかを指定します。有料道路を含まないルートが優先されます。電動の移動手段にのみ適用されます。

avoidHighways

boolean

可能な限り高速道路を回避するかどうかを指定します。高速道路を含まないルートが優先されます。電動の移動手段にのみ適用されます。

avoidFerries

boolean

可能な限りフェリーを避けるかどうかを指定します。フェリーでの移動を含まないルートが優先されます。電動の移動手段にのみ適用されます。

avoidIndoor

boolean

省略可。屋内ナビゲーションを可能な限り避けるかどうかを指定します。屋内ナビゲーションを含まないルートが優先されます。WALKING の移動手段にのみ適用されます。

UnloadingPolicy

車両の荷降ろし方法に関するポリシー。集荷と配送の両方がある荷物にのみ適用されます。

その他の出荷は、unloadingPolicy に関係なく、ルート上の任意の場所で発生する可能性があります。

列挙型
UNLOADING_POLICY_UNSPECIFIED 荷降ろしポリシーが指定されていません。配達は、対応する集荷の後にのみ行う必要があります。
LAST_IN_FIRST_OUT 配達は集荷の逆順で行う必要があります
FIRST_IN_FIRST_OUT 配達は集荷と同じ順序で行う必要があります

LoadLimit

車両に適用される積載制限を定義します(例: 「このトラックは 3, 500 kg までしか積載できません」)。loadLimits をご覧ください。

JSON 表現
{
  "softMaxLoad": string,
  "costPerUnitAboveSoftMax": number,
  "startLoadInterval": {
    object (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string,
  "costPerKilometer": {
    object (LoadCost)
  },
  "costPerTraveledHour": {
    object (LoadCost)
  }
}
フィールド
softMaxLoad

string (int64 format)

負荷のソフトリミット。costPerUnitAboveSoftMax をご覧ください。

costPerUnitAboveSoftMax

number

この車両のルートに沿って積載量が softMaxLoad を超えた場合、次のコスト ペナルティが適用されます(車両ごとに 1 回のみ)。(積載量 - softMaxLoad)* costPerUnitAboveSoftMax。すべての費用は合計され、Shipment.penalty_cost と同じ単位で指定する必要があります。ソフト上限は、モデル全体で受け取りのみまたは配達のみに適用されるタイプでのみ定義できます。

startLoadInterval

object (Interval)

ルートの開始時の車両の許容可能な積載間隔。

endLoadInterval

object (Interval)

ルートの終点における車両の許容可能な積載間隔。

maxLoad

string (int64 format)

許容できる最大負荷量。

costPerKilometer

object (LoadCost)

この車両で 1 単位の荷物を 1 km 運ぶための費用。これは燃料消費量のプロキシとして使用できます。負荷が重量(ニュートン単位)の場合、負荷 × キロメートルはエネルギーの次元を持ちます。

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

costPerTraveledHour

object (LoadCost)

この車両で 1 時間に 1 単位の荷物を運ぶ費用。

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

間隔

許容可能な負荷量の間隔。

JSON 表現
{
  "min": string,
  "max": string
}
フィールド
min

string (int64 format)

許容できる最小負荷。0 以上である必要があります。両方が指定されている場合、minmax 以下である必要があります。

max

string (int64 format)

許容できる最大負荷。0 以上である必要があります。指定されていない場合、このメッセージによる最大負荷の制限はありません。両方が指定されている場合、minmax 以下である必要があります。

LoadCost

Transition 中に 1 単位の負荷を移動するコスト。特定の負荷に対する費用は、次の 2 つの部分の合計です。

  • min(load, loadThreshold) * costPerUnitBelowThreshold
  • max(0, load - loadThreshold) * costPerUnitAboveThreshold

このコストにより、ソリューションは需要の高いものを優先的に配送するか、需要の高いものを最後に集荷します。たとえば、車両に

load_limit {
  key: "weight"
  value {
    costPerKilometer {
      loadThreshold: 15
      costPerUnitBelowThreshold: 2.0
      costPerUnitAboveThreshold: 10.0
    }
  }
}

ルートは start、pickup、pickup、delivery、delivery、end で、次のように遷移します。

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

この LoadCost で発生する費用は(cost_below * load_below * kilometers + cost_above * load_above * kms)になります。

  • transition 0: 0.0
  • 遷移 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • 遷移 2: 2.0 * 15 * 1.0 + 10.0 * (20 - 15) * 1.0 = 80.0
  • transition 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transition 4: 0.0

したがって、ルート上の LoadCost は 120.0 です。

ただし、ルートが start,pickup,delivery,pickup,delivery,end で、トランジションがある場合は、

transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travelDistanceMeters: 1000.0 }

この LoadCost で発生する費用は

  • transition 0: 0.0
  • 遷移 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transition 2: 0.0
  • transition 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • transition 4: 0.0

このルートの LoadCost は 40.0 です。

LoadCost を使用すると、移行の負荷が高いソリューションの費用が高くなります。

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

JSON 表現
{
  "loadThreshold": string,
  "costPerUnitBelowThreshold": number,
  "costPerUnitAboveThreshold": number
}
フィールド
loadThreshold

string (int64 format)

単位の負荷を移動する費用が costPerUnitBelowThreshold から costPerUnitAboveThreshold に変化する負荷の量。0 以上である必要があります。

costPerUnitBelowThreshold

number

0 からしきい値までの各単位の負荷を移動する費用。有限値で、0 以上である必要があります。

costPerUnitAboveThreshold

number

しきい値を超える単位あたりの負荷を移動する費用。特殊なケースとして、しきい値が 0 の場合は、単位あたりの固定費になります。有限値で、0 以上である必要があります。

DurationLimit

車両のルートの最大所要時間を定義する上限。ハードまたはソフトのいずれかになります。

ソフト上限フィールドが定義されている場合は、ソフト上限のしきい値と関連する費用を両方とも定義する必要があります。

JSON 表現
{
  "maxDuration": string,
  "softMaxDuration": string,
  "quadraticSoftMaxDuration": string,
  "costPerHourAfterSoftMax": number,
  "costPerSquareHourAfterQuadraticSoftMax": number
}
フィールド
maxDuration

string (Duration format)

期間を最大 maxDuration に制限するハードリミット。

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

softMaxDuration

string (Duration format)

最大期間の制限は適用されませんが、違反するとルートに費用が発生するソフト制限。この費用は、モデルで定義された他の費用と同じ単位で合計されます。

定義する場合、softMaxDuration は負以外にする必要があります。maxDuration も定義されている場合、softMaxDuration は maxDuration より小さくする必要があります。

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

quadraticSoftMaxDuration

string (Duration format)

最大所要時間の上限を強制しないが、違反すると、所要時間の 2 乗に比例したコストが発生する上限。この費用は、モデルで定義された他の費用と同じ単位で合計されます。

定義する場合、quadraticSoftMaxDuration は負以外にする必要があります。maxDuration も定義されている場合、quadraticSoftMaxDurationmaxDuration より小さく、差は 1 日以下である必要があります。

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

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

costPerHourAfterSoftMax

number

softMaxDuration のしきい値を超えた場合に発生する 1 時間あたりの費用。期間がしきい値未満の場合、追加費用は 0 です。それ以外の場合、費用は期間に応じて次のように異なります。

  costPerHourAfterSoftMax * (duration - softMaxDuration)

費用は負の値にできません。

costPerSquareHourAfterQuadraticSoftMax

number

quadraticSoftMaxDuration のしきい値を超えた場合に発生する 1 平方時間あたりの費用。

期間がしきい値未満の場合、追加費用は 0 です。それ以外の場合、費用は期間に応じて次のように異なります。

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

費用は負の値にできません。

DistanceLimit

移動可能な最大距離を定義する制限。ハードまたはソフトのいずれかになります。

ソフト上限が定義されている場合、softMaxMeterscostPerKilometerAboveSoftMax の両方を定義し、非負の値にする必要があります。

JSON 表現
{
  "maxMeters": string,
  "softMaxMeters": string,
  "costPerKilometerBelowSoftMax": number,
  "costPerKilometerAboveSoftMax": number
}
フィールド
maxMeters

string (int64 format)

距離を最大 maxMeters までに制限するハードリミット。上限値は負の値にできません。

softMaxMeters

string (int64 format)

最大距離制限を強制しないソフト制限。違反すると、モデルで定義された他の費用と同じ単位で、費用が加算されます。

softMaxMeters が定義されている場合、maxMeters より小さく、負でない値にする必要があります。

costPerKilometerBelowSoftMax

number

発生した 1 キロメートルあたりの費用。softMaxMeters まで増加します。式は次のとおりです。

  min(distanceMeters, softMaxMeters) / 1000.0 *
  costPerKilometerBelowSoftMax.

この費用は routeDistanceLimit ではサポートされていません。

costPerKilometerAboveSoftMax

number

距離が softMaxMeters の上限を超えた場合に発生する 1 キロメートルあたりの費用。距離が上限を下回る場合は追加費用は 0 です。それ以外の場合は、費用の計算に使用される式は次のとおりです。

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

費用は負の値にできません。

BreakRule

車両の休憩時間(昼食休憩など)を生成するルール。休憩とは、車両が現在の位置でアイドル状態を維持し、訪問を実行できない連続した期間のことです。休憩は次の場合に発生する可能性があります。

  • 2 回の訪問の間の移動中(訪問の直前または直後の時間を含みますが、訪問の途中は含みません)。この場合、訪問間の対応する移動時間が延長されます。
  • または車両の始動前(休憩中に車両が始動しない場合もあります)。この場合、車両の始動時間に影響はありません。
  • または車両終了後(車両終了時刻も同様)。
JSON 表現
{
  "breakRequests": [
    {
      object (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
フィールド
breakRequests[]

object (BreakRequest)

休憩の順序。BreakRequest メッセージをご覧ください。

frequencyConstraints[]

object (FrequencyConstraint)

複数の FrequencyConstraint を適用できます。これらはすべて、この BreakRuleBreakRequest によって満たされる必要があります。FrequencyConstraint をご覧ください。

BreakRequest

各車両に適用される休憩の順序(休憩の数と順序)は、事前に把握しておく必要があります。繰り返される BreakRequest は、発生する順序でシーケンスを定義します。時間枠(earliestStartTime / latestStartTime)は重複する可能性がありますが、順序と互換性がある必要があります(これはチェックされます)。

JSON 表現
{
  "earliestStartTime": string,
  "latestStartTime": string,
  "minDuration": string
}
フィールド
earliestStartTime

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"

latestStartTime

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"

minDuration

string (Duration format)

必須。休憩の最小時間。正の値である必要があります。

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

FrequencyConstraint

「12 時間ごとに 1 時間以上の休憩を必ず取らなければならない」など、最小休憩頻度を強制することで、上記の休憩の頻度と時間をさらに制限できます。これを「12 時間のスライディング時間枠内に、少なくとも 1 時間の休憩が 1 回以上必要」と解釈すると、この例は次の FrequencyConstraint に変換されます。

{
   minBreakDuration { seconds: 3600 }         # 1 hour.
   maxInterBreakDuration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

ソリューションの休憩のタイミングと期間は、BreakRequest で指定された時間枠と最小期間に加えて、このような制約をすべて考慮します。

実際には、FrequencyConstraint は連続していない休憩にも適用されることがあります。たとえば、次のスケジュールは「12 時間ごとに 1 時間」の例に従っています。

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
JSON 表現
{
  "minBreakDuration": string,
  "maxInterBreakDuration": string
}
フィールド
minBreakDuration

string (Duration format)

必須。この制約の最小休憩時間。非負。FrequencyConstraint の説明をご覧ください。

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

maxInterBreakDuration

string (Duration format)

必須。duration >= minBreakDuration の休憩を少なくとも一部含まないルート内の任意の時間間隔の最大許容スパン。正の値である必要があります。

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

目標

目標は費用モデルを完全に置き換えるため、既存の費用とは互換性がありません。各目標は、車両、配送、移行属性などの事前定義された費用にマッピングされます。

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

JSON 表現
{
  "type": enum (Type),
  "weight": number
}
フィールド
type

enum (Type)

目標のタイプ。

weight

number

この目標が他の目標に対してどの程度の重要度を持つか。任意の非負の数値を指定できます。重みの合計が 1 になる必要はありません。重みのデフォルトは 1.0 です。

タイプ

費用のセットにマッピングされる目標タイプ。

列挙型
DEFAULT 妥当なソリューションを確保するため、デフォルトの費用のセットが使用されます。注: この目標は単独で使用できますが、ユーザーが指定した目標にまだ含まれていない場合は、常にベースラインとして重み 1.0 で追加されます。
MIN_DISTANCE 「MIN」目標。合計移動距離を最小限に抑えます。
MIN_WORKING_TIME すべての車両の合計作業時間を最小限に抑えます。
MIN_TRAVEL_TIME 上記と同じですが、移動時間のみに焦点を当てています。
MIN_NUM_VEHICLES 使用する車両の数を最小限に抑えます。

DurationDistanceMatrix

訪問と車両の出発地から訪問と車両の目的地までの所要時間と距離の行列を指定します。

JSON 表現
{
  "rows": [
    {
      object (Row)
    }
  ],
  "vehicleStartTag": string
}
フィールド
rows[]

object (Row)

所要時間と距離のマトリックスの行を指定します。ShipmentModel.duration_distance_matrix_src_tags と同じ数の要素が必要です。

vehicleStartTag

string

この所要時間と距離のマトリックスが適用される車両を定義するタグ。空の場合、すべての車両に適用され、マトリックスは 1 つのみになります。

各車両の出発地は、1 つの行列と完全に一致する必要があります。つまり、startTags フィールドの 1 つだけが、行列の vehicleStartTag(およびその行列のみ)と一致する必要があります。

すべての行列の vehicleStartTag は異なる必要があります。

所要時間と距離の行列の行を指定します。

JSON 表現
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
フィールド
durations[]

string (Duration format)

指定された行の期間の値。ShipmentModel.duration_distance_matrix_dst_tags と同じ数の要素が必要です。

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

meters[]

number

指定された行の距離の値。モデルで距離を参照する費用や制約がない場合は、空のままにできます。それ以外の場合は、durations と同じ数の要素が必要です。

TransitionAttributes

ルート上の 2 つの連続する訪問間の移行の属性を指定します。同じトランジションに複数の TransitionAttributes が適用されることがあります。その場合、すべての追加費用が加算され、最も厳しい制約または上限が適用されます(自然な「AND」セマンティクスに従います)。

JSON 表現
{
  "srcTag": string,
  "excludedSrcTag": string,
  "dstTag": string,
  "excludedDstTag": string,
  "cost": number,
  "costPerKilometer": number,
  "distanceLimit": {
    object (DistanceLimit)
  },
  "delay": string
}
フィールド
srcTag

string

これらの属性が適用される(src->dst)遷移のセットを定義するタグ。

ソース訪問または車両の始動は、VisitRequest.tags または Vehicle.start_tags のいずれかに srcTag が含まれているか、excludedSrcTag が含まれていない場合に一致します(これらの 2 つのフィールドのどちらが空でないかによって異なります)。

excludedSrcTag

string

srcTag をご覧ください。srcTagexcludedSrcTag のいずれか 1 つのみが空でない必要があります。

dstTag

string

VisitRequest.tags または Vehicle.end_tags のいずれかに dstTag が含まれているか、excludedDstTag が含まれていない場合(これらの 2 つのフィールドのどちらが空でないかによって異なります)、目的地への訪問または車両の終了が一致します。

excludedDstTag

string

dstTag をご覧ください。dstTagexcludedDstTag のいずれか 1 つのみが空でない必要があります。

cost

number

このトランジションの実行コストを指定します。これはモデル内の他のすべての費用と同じ単位で、負の値にすることはできません。これは、他の既存のすべての費用に加えて適用されます。

costPerKilometer

number

このトランジションの実行中に移動した距離に適用される 1 キロメートルあたりの費用を指定します。車両に指定された Vehicle.cost_per_kilometer まで追加されます。

distanceLimit

object (DistanceLimit)

この遷移の実行中に移動する距離の上限を指定します。

2021 年 6 月の時点で、ソフト上限のみがサポートされています。

delay

string (Duration format)

このトランジションの実行時に発生する遅延を指定します。

この遅延は、常に参照元サイトへのアクセスが終了した、リンク先サイトへのアクセスが開始されるに発生します。

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

ShipmentTypeIncompatibility

shipmentType に応じて、配送間の非互換性を指定します。同じルートに互換性のない配送が表示されるのは、互換性のないモードに基づいて制限されます。

JSON 表現
{
  "types": [
    string
  ],
  "incompatibilityMode": enum (IncompatibilityMode)
}
フィールド
types[]

string

互換性のないタイプのリスト。リストにある shipment_types が異なる 2 つの出荷は「互換性がない」と見なされます。

incompatibilityMode

enum (IncompatibilityMode)

非互換性に適用されるモード。

IncompatibilityMode

同じルートで互換性のない配送の表示を制限する方法を定義するモード。

列挙型
INCOMPATIBILITY_MODE_UNSPECIFIED 互換モードが指定されていません。この値は使用しないでください。
NOT_PERFORMED_BY_SAME_VEHICLE このモードでは、互換性のない 2 つの配送が同じ車両を共有することはありません。
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

このモードでは、互換性のない 2 つの配送が同時に同じ車両に積載されることはありません。

  • 同じ車両を共有できるのは、一方の車両が納車されてから他方の車両が引き取りにくる場合のみです。
  • 両方の配送が受け取りのみ(配達なし)または配達のみ(受け取りなし)の場合、同じ車両を共有することはできません。

ShipmentTypeRequirement

shipmentType に基づいて配送間の要件を指定します。要件の詳細は、要件モードによって定義されます。

JSON 表現
{
  "requiredShipmentTypeAlternatives": [
    string
  ],
  "dependentShipmentTypes": [
    string
  ],
  "requirementMode": enum (RequirementMode)
}
フィールド
requiredShipmentTypeAlternatives[]

string

dependentShipmentTypes で必要な代替配送タイプのリスト。

dependentShipmentTypes[]

string

dependentShipmentTypes フィールドにタイプが指定されているすべての配送では、同じルートでタイプ requiredShipmentTypeAlternatives の配送を少なくとも 1 回訪問する必要があります。

注: shipmentType がそれ自体に依存するような要件のチェーンは許可されません。

requirementMode

enum (RequirementMode)

要件に適用されるモード。

RequirementMode

ルート上の依存する配送の表示を定義するモード。

列挙型
REQUIREMENT_MODE_UNSPECIFIED 要件モードが指定されていません。この値は使用しないでください。
PERFORMED_BY_SAME_VEHICLE このモードでは、すべての「依存」配送で、少なくとも 1 つの「必須」配送と同じ車両を使用する必要があります。
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME モードでは、すべての「依存」発送で、集荷時に車両に少なくとも 1 つの「必須」発送が必要です。

したがって、「依存」する配送の集荷には、次のいずれかが必要です。

  • 配達のみの「必須」の配送が、ルートの後に配達された場合。
  • 「必須」の配送がその前にルートで集荷され、「必須」の配送に配達がある場合、この配達は「依存」の配送の集荷後に行う必要があります。
IN_SAME_VEHICLE_AT_DELIVERY_TIME 以前と同じですが、「依存」する配送は、配送時に車両に「必須」の配送がある必要があります。

PrecedenceRule

2 つのイベント(各イベントは荷物の集荷または配達)間の優先順位ルール: 「2 番目」のイベントは、「1 番目」のイベントの開始から少なくとも offsetDuration 後に開始する必要があります。

複数の優先順位で同じ(または関連する)イベントを参照できます。例: 「B の受け取りは A の配達後」、「C の受け取りは B の受け取り後」などです。

また、優先順位は両方の配送が実行された場合にのみ適用され、それ以外の場合は無視されます。

JSON 表現
{
  "firstIsDelivery": boolean,
  "secondIsDelivery": boolean,
  "offsetDuration": string,
  "firstIndex": integer,
  "secondIndex": integer
}
フィールド
firstIsDelivery

boolean

「最初」のイベントが配達かどうかを示します。

secondIsDelivery

boolean

「2 番目」のイベントが配信かどうかを示します。

offsetDuration

string (Duration format)

「最初」のイベントと「2 番目」のイベントのオフセット。負の値になることもあります。

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

firstIndex

integer

「最初」のイベントの配送インデックス。このフィールドは指定する必要があります。

secondIndex

integer

「2 番目」のイベントの配送インデックス。このフィールドは指定する必要があります。