- JSON 表現
- 配送
- VisitRequest
- LatLng
- Waypoint
- ロケーション
- TimeWindow
- Vehicle
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- 間隔
- LoadCost
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- 目的
- 型
- DurationDistanceMatrix
- 行
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
配送モデルには、一連の車両で実行する必要がある一連の配送が含まれています。全体的な費用(次の合計)を最小限に抑える必要があります。
- 車両のルート設定の費用(すべての車両の合計時間あたりの費用、移動時間あたりの費用、固定費用の合計)。
- 未履行の配送に対するペナルティ。
- 配送のグローバル期間のコスト
| JSON 表現 |
|---|
{ "shipments": [ { object ( |
| フィールド | |
|---|---|
shipments[] |
モデルで実行する必要がある配送のセット。 |
vehicles[] |
訪問の実行に使用できる車両のセット。 |
objectives[] |
このモデルの目標のセット。これは費用に変換されます。空でない場合、入力モデルは無料である必要があります。変更されたリクエストを取得するには、 試験運用版: 詳しくは、https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request をご覧ください。 |
globalStartTime |
モデルのグローバルな開始時間と終了時間: この範囲外の時間は有効と見なされません。 モデルの期間は 1 年未満にする必要があります。つまり、
RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: |
globalEndTime |
未設定の場合、デフォルトとして 1971 年 1 月 1 日 00:00:00 UTC(秒: 31536000、ナノ秒: 0)が使用されます。 RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: |
globalDurationCostPerHour |
プラン全体の「グローバル期間」は、すべての車両の最も早い有効開始時刻と最も遅い有効終了時刻の差です。ユーザーは、その数量に 1 時間あたりの費用を割り当てて、ジョブの完了を最適化できます。この費用は |
durationDistanceMatrices[] |
モデルで使用される所要時間と距離の行列を指定します。このフィールドが空の場合、 使用例:
|
durationDistanceMatrixSrcTags[] |
所要時間と距離の行列のソースを定義するタグ。 タグは |
durationDistanceMatrixDstTags[] |
時間と距離のマトリックスの宛先を定義するタグ。 タグは |
transitionAttributes[] |
モデルに追加された移行属性。 |
shipmentTypeIncompatibilities[] |
互換性のない shipment_type のセット( |
shipmentTypeRequirements[] |
|
precedenceRules[] |
モデルで適用する必要がある優先順位ルールのセット。 重要: 優先順位ルールを使用すると、最適化できる問題のサイズが制限されます。多くの配送を含む優先順位ルールを使用するリクエストは拒否される可能性があります。 |
maxActiveVehicles |
アクティブな車両の最大数を制約します。車両がアクティブになるのは、そのルートで少なくとも 1 回の配送が行われた場合です。これは、車両よりもドライバーの数が少なく、車両のフリートが異種の場合に、ルートの数を制限するために使用できます。最適化により、使用する車両の最適なサブセットが選択されます。真に正である必要があります。 |
配送
1 つのアイテムの配送。集荷から配達まで。配送が完了したと見なされるには、固有の車両が 1 つの集荷場所を訪れ(それに応じて予備容量が減少)、その後 1 つの配送場所を訪れる(それに応じて予備容量が再び増加)必要があります。
| JSON 表現 |
|---|
{ "displayName": string, "pickups": [ { object ( |
| フィールド | |
|---|---|
displayName |
荷物のユーザー定義の表示名。最大 63 文字で、UTF-8 文字を使用できます。 |
pickups[] |
配送に関連付けられた集荷の代替手段のセット。指定しない場合、車両は配達に対応する場所のみに立ち寄る必要があります。 |
deliveries[] |
配送に関連付けられた配送方法の代替案のセット。指定しない場合、車両は集荷に対応する場所のみに立ち寄る必要があります。 |
loadDemands |
荷物の積載要件(重量、容積、パレット数など)。マップ内のキーは、対応する負荷のタイプを説明する識別子である必要があります。単位も指定することが望ましいです。例: 「weight_kg」、「volume_gallons」、「pallet_count」など。指定されたキーがマップに表示されない場合、対応する読み込みは null と見なされます。 |
allowedVehicleIndices[] |
この配送を行う可能性のある車両のセット。空の場合、すべての車両が実行できます。車両は、 |
costsPerVehicle[] |
この配送が各車両で配達された場合に発生する費用を指定します。指定する場合は、次のいずれかが必要です。
これらの費用は |
costsPerVehicleIndices[] |
|
pickupToDeliveryAbsoluteDetourLimit |
集荷から配達までの最短経路と比較した、最大絶対迂回時間を指定します。指定する場合は、非負の値にする必要があります。また、配送には少なくとも集荷と配達が含まれている必要があります。 たとえば、t を選択した受け取り方法から選択した配送方法に直接移動するのにかかる最短時間とします。 同じ配送で相対的な上限と絶対的な上限の両方が指定されている場合は、可能な集荷/配達のペアごとに、より制約の厳しい上限が使用されます。2017 年 10 月の時点で、迂回は移動時間が車両に依存しない場合にのみサポートされています。
|
pickupToDeliveryTimeLimit |
荷物の集荷開始から配達開始までの最大期間を指定します。指定する場合は、非負の値にする必要があります。また、配送には少なくとも集荷と配達が含まれている必要があります。これは、受け取りと配送に選択された代替手段や車両の速度には依存しません。これは、最大迂回制約とともに指定できます。ソリューションは両方の仕様を尊重します。
|
shipmentType |
この配送の「タイプ」を指定する空でない文字列。この機能を使用して、 1 回の訪問に対して指定される |
label |
この配送のラベルを指定します。このラベルは、対応する |
ignore |
true の場合、この配送をスキップしますが、 モデルに
|
penaltyCost |
配送が完了しなかった場合、このペナルティはルートの総費用に追加されます。受け取りと配達のいずれかの代替手段が選択された場合、配送は完了したとみなされます。費用は、モデル内の他のすべての費用関連フィールドで使用されているのと同じ単位で表すことができ、正の値である必要があります。 重要: このペナルティが指定されていない場合、無限と見なされます。つまり、配送を完了する必要があります。 |
pickupToDeliveryRelativeDetourLimit |
集荷から配達までの最短経路と比較した、相対的な迂回時間の最大値を指定します。指定する場合は、非負の値にする必要があります。また、配送には少なくとも集荷と配達が含まれている必要があります。 たとえば、t を選択した受け取り方法から選択した配送方法に直接移動するのにかかる最短時間とします。 同じ配送で相対的な上限と絶対的な上限の両方が指定されている場合は、可能な集荷/配達のペアごとに、より制約の厳しい上限が使用されます。2017 年 10 月の時点で、迂回は移動時間が車両に依存しない場合にのみサポートされています。 |
VisitRequest
車両で訪問できるリクエスト: 地理的位置(または 2 つ、下記参照)、時間枠で表される開店時間と閉店時間、サービス時間(車両が商品の受け取りまたは配達に到着してから費やす時間)があります。
| JSON 表現 |
|---|
{ "arrivalLocation": { object ( |
| フィールド | |
|---|---|
arrivalLocation |
この |
arrivalWaypoint |
この |
departureLocation |
この |
departureWaypoint |
この |
tags[] |
アクセス リクエストに付加されたタグを指定します。空の文字列や重複する文字列は使用できません。 |
timeWindows[] |
訪問の到着時刻を制約する時間枠。車両は到着時間枠外に出発する場合があります。つまり、到着時間 + 所要時間が時間枠内である必要はありません。車両が
時間枠は重複しないようにする必要があります。つまり、別の時間枠と重複したり、隣接したりしないようにする必要があります。また、昇順で指定する必要があります。
|
duration |
訪問時間(車両が到着してから出発するまでの時間。待機時間に追加されます。
|
cost |
車両ルートでこの訪問リクエストに対応する費用。これは、配送の代替手段ごとに異なる費用を支払うために使用できます。この費用は |
loadDemands |
この訪問リクエストの需要を読み込みます。これは |
visitTypes[] |
訪問のタイプを指定します。これは、車両がこの訪問を完了するために必要な追加時間を割り当てるために使用されることがあります( 型は 1 回しか指定できません。 |
label |
この |
avoidUTurns |
この地点の運転ルートで U ターンを避けるかどうかを指定します。U ターン回避はベスト エフォートであり、完全な回避は保証されません。これは試験運用中の機能であり、動作は変更される可能性があります。 試験運用版: 詳しくは、https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request をご覧ください。 |
LatLng
緯度と経度のペアを表すオブジェクト。これは緯度を表す倍精度値と経度を表す倍精度値のペアで表現されます。特に明記されていない場合、このオブジェクトは WGS84 規格に準拠する必要があります。値は正規化範囲内で指定する必要があります。
| JSON 表現 |
|---|
{ "latitude": number, "longitude": number } |
| フィールド | |
|---|---|
latitude |
緯度(度単位)。範囲 [-90.0, +90.0] 内になければなりません。 |
longitude |
経度(度単位)。範囲 [-180.0, +180.0] 内になければなりません。 |
ウェイポイント
経由地をカプセル化します。経由地は、VisitRequest の到着地と出発地、Vehicle の開始地と終了地を示します。
| JSON 表現 |
|---|
{ "sideOfRoad": boolean, "vehicleStopover": boolean, // Union field |
| フィールド | |
|---|---|
sideOfRoad |
省略可。このウェイポイントの位置で、車両を優先的に道路の特定の側に停車することを指示します。この値を設定すると、ルートは位置情報を通過するため、車両は道路の中央から位置情報が偏っている側の路肩に停車できます。このオプションは、移動手段が「徒歩」の場合には機能しません。 |
vehicleStopover |
ウェイポイントが車両の停車地点であることを示します。乗車または降車を目的としています。このオプションは、交通手段が「DRIVING」で、locationType が「location」の場合にのみ機能します。 試験運用版: このフィールドの動作または存在は、今後変更される可能性があります。 |
共用体フィールド location_type。場所を表すさまざまな方法。location_type は次のいずれかになります。 |
|
location |
地理座標を使用して指定されたポイント。オプションの見出しを含む。 |
placeId |
経由地に関連付けられた POI のプレイス ID。 プレイス ID を使用して VisitRequest の到着地または出発地を指定する場合は、その場所へのナビゲーションの LatLng 位置を特定するのに十分なプレイス ID を使用します。たとえば、建物を示すプレイス ID は適切ですが、道路を示すプレイス ID は推奨されません。 |
場所
位置情報(地理的な地点と、必要に応じて見出し)をカプセル化します。
| JSON 表現 |
|---|
{
"latLng": {
object ( |
| フィールド | |
|---|---|
latLng |
経由地の地理座標。 |
heading |
交通の流れの方向に関連付けられたコンパス方位。この値は、乗車と降車に使用する道路の側を指定するために使用されます。見出しの値は 0 ~ 360 の範囲で、0 は真北の見出し、90 は真東の見出しなどを指定します。 |
TimeWindow
時間枠は、訪問の到着時間や車両の開始時間と終了時間など、イベントの時間を制約します。
ハード タイム ウィンドウの境界 startTime と endTime は、イベントの最も早い時刻と最も遅い時刻を強制します(startTime <= event_time <=
endTime)。ソフト タイム ウィンドウの下限 softStartTime は、イベントが softStartTime 以降に発生することを優先し、イベントが softStartTime より前に発生した時間に応じてコストが発生することを表します。ソフト時間枠の上限 softEndTime は、イベントが softEndTime 以降に発生した場合に、その遅延時間に比例したコストが発生することで、イベントが softEndTime 以前に発生することを優先的に表します。startTime、endTime、softStartTime、softEndTime は、グローバルな時間制限(ShipmentModel.global_start_time と ShipmentModel.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 |
ハード時間枠の開始時間。指定しない場合、 RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: |
endTime |
ハード時間枠の終了時間。指定しない場合、 RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: |
softStartTime |
時間枠のソフト開始時間。 RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: |
softEndTime |
時間枠のソフト終了時刻。 RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: |
costPerHourBeforeSoftStartTime |
イベントが softStartTime より前に発生した場合にモデルの他の費用に追加される 1 時間あたりの費用。次のように計算されます。 この費用は正の値にする必要があり、softStartTime が設定されている場合にのみ設定できます。 |
costPerHourAfterSoftEndTime |
イベントが この費用は正の値でなければなりません。また、このフィールドは |
車両
配送に関する問題の車両をモデル化します。配送の問題を解決すると、この車両の startLocation から endLocation までのルートが作成されます。ルートは訪問のシーケンスです(ShipmentRoute を参照)。
| JSON 表現 |
|---|
{ "displayName": string, "travelMode": enum ( |
| フィールド | |
|---|---|
displayName |
車両のユーザー定義の表示名。最大 63 文字で、UTF-8 文字を使用できます。 |
travelMode |
車両が走行可能な道路とその速度に影響する移動モード。 |
routeModifiers |
指定された車両のルートの計算方法に影響する、満たすべき条件のセット。 |
startLocation |
車両が荷物を集荷する前に出発する地理的な場所。指定しない場合、車両は最初の乗車場所から開始します。配送モデルに所要時間と距離の行列がある場合、 |
startWaypoint |
車両が荷物を集荷する前に出発する地理的位置を表す経由地。 |
endLocation |
車両が最後の |
endWaypoint |
車両が最後の |
startTags[] |
車両のルートの開始位置に付加されるタグを指定します。 空の文字列や重複する文字列は使用できません。 |
endTags[] |
車両のルートの末尾に付加されるタグを指定します。 空の文字列や重複する文字列は使用できません。 |
startTimeWindows[] |
車両が出発地を出発できる時間帯。グローバル タイムアウトの範囲内である必要があります( 同じ繰り返しフィールドに属する時間枠は、互いに重複したり隣接したりしないように、時系列順に並べる必要があります。
|
endTimeWindows[] |
車両が最終目的地に到着する可能性のある時間帯。グローバル タイムアウトの範囲内である必要があります( 同じ繰り返しフィールドに属する時間枠は、互いに重複したり隣接したりしないように、時系列順に並べる必要があります。
|
unloadingPolicy |
車両に適用される荷降ろしポリシー。 |
loadLimits |
車両の容量(重量、容積、パレット数など)。マップ内のキーは、 |
costPerHour |
車両費用: すべての費用を合計し、 車両ルートの 1 時間あたりの費用。この費用はルートの合計時間に適用され、移動時間、待ち時間、訪問時間が含まれます。 |
costPerTraveledHour |
車両ルートの走行時間あたりの費用。この費用は、ルートの移動時間( |
costPerKilometer |
車両ルートの 1 キロメートルあたりの費用。この費用は |
fixedCost |
この車両が配送の処理に使用された場合に適用される固定費用。 |
usedIfRouteIsEmpty |
このフィールドは、ルートに配送がない場合にのみ車両に適用されます。この場合、車両が使用済みと見なされるかどうかを示します。 true の場合、車両は荷物を配達しなくても出発地から目的地まで移動し、出発地から目的地までの移動による時間と距離のコストが考慮されます。 それ以外の場合、車両は出発地から目的地まで移動せず、この車両の |
routeDurationLimit |
車両のルートの合計時間に適用される制限。特定の |
travelDurationLimit |
車両のルートの移動時間に適用される制限。特定の |
routeDistanceLimit |
車両のルートの合計距離に適用される制限。特定の |
extraVisitDurationForVisitType |
visitTypes 文字列から期間へのマップを指定します。期間は、指定された 訪問リクエストに複数のタイプがある場合、マップ内の各タイプに期間が追加されます。 |
breakRule |
この車両に適用される休憩スケジュールを説明します。空の場合、この車両の休憩はスケジュールされません。 |
label |
この車両のラベルを指定します。このラベルは、対応する |
ignore |
true の場合、
|
travelDurationMultiple |
この車両の移動時間を増減するために使用できる乗数を指定します。たとえば、この値を 2.0 に設定すると、この車両は標準車両の 2 倍の移動時間を要する低速車両になります。この倍率はセッション時間には影響しません。 警告: 移動時間は、この倍数が適用された後、数値演算の前に最も近い秒に丸められます。そのため、倍数が小さいと精度が低下する可能性があります。 下記の |
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 |
有料道路を避けるかどうかを指定します。有料道路を含まないルートが優先されます。電動の移動手段にのみ適用されます。 |
avoidHighways |
可能な限り高速道路を回避するかどうかを指定します。高速道路を含まないルートが優先されます。電動の移動手段にのみ適用されます。 |
avoidFerries |
可能な限りフェリーを避けるかどうかを指定します。フェリーでの移動を含まないルートが優先されます。電動の移動手段にのみ適用されます。 |
avoidIndoor |
省略可。屋内ナビゲーションを可能な限り避けるかどうかを指定します。屋内ナビゲーションを含まないルートが優先されます。 |
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 ( |
| フィールド | |
|---|---|
softMaxLoad |
負荷のソフトリミット。 |
costPerUnitAboveSoftMax |
この車両のルートに沿って積載量が |
startLoadInterval |
ルートの開始時の車両の許容可能な積載間隔。 |
endLoadInterval |
ルートの終点における車両の許容可能な積載間隔。 |
maxLoad |
許容できる最大負荷量。 |
costPerKilometer |
この車両で 1 単位の荷物を 1 km 運ぶための費用。これは燃料消費量のプロキシとして使用できます。負荷が重量(ニュートン単位)の場合、負荷 × キロメートルはエネルギーの次元を持ちます。 試験運用版: 詳しくは、https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request をご覧ください。 |
costPerTraveledHour |
この車両で 1 時間に 1 単位の荷物を運ぶ費用。 試験運用版: 詳しくは、https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request をご覧ください。 |
間隔
許容可能な負荷量の間隔。
| JSON 表現 |
|---|
{ "min": string, "max": string } |
| フィールド | |
|---|---|
min |
許容できる最小負荷。0 以上である必要があります。両方が指定されている場合、 |
max |
許容できる最大負荷。0 以上である必要があります。指定されていない場合、このメッセージによる最大負荷の制限はありません。両方が指定されている場合、 |
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 |
単位の負荷を移動する費用が costPerUnitBelowThreshold から costPerUnitAboveThreshold に変化する負荷の量。0 以上である必要があります。 |
costPerUnitBelowThreshold |
0 からしきい値までの各単位の負荷を移動する費用。有限値で、0 以上である必要があります。 |
costPerUnitAboveThreshold |
しきい値を超える単位あたりの負荷を移動する費用。特殊なケースとして、しきい値が 0 の場合は、単位あたりの固定費になります。有限値で、0 以上である必要があります。 |
DurationLimit
車両のルートの最大所要時間を定義する上限。ハードまたはソフトのいずれかになります。
ソフト上限フィールドが定義されている場合は、ソフト上限のしきい値と関連する費用を両方とも定義する必要があります。
| JSON 表現 |
|---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
| フィールド | |
|---|---|
maxDuration |
期間を最大 maxDuration に制限するハードリミット。
|
softMaxDuration |
最大期間の制限は適用されませんが、違反するとルートに費用が発生するソフト制限。この費用は、モデルで定義された他の費用と同じ単位で合計されます。 定義する場合、
|
quadraticSoftMaxDuration |
最大所要時間の上限を強制しないが、違反すると、所要時間の 2 乗に比例したコストが発生する上限。この費用は、モデルで定義された他の費用と同じ単位で合計されます。 定義する場合、
|
costPerHourAfterSoftMax |
費用は負の値にできません。 |
costPerSquareHourAfterQuadraticSoftMax |
期間がしきい値未満の場合、追加費用は 0 です。それ以外の場合、費用は期間に応じて次のように異なります。 費用は負の値にできません。 |
DistanceLimit
移動可能な最大距離を定義する制限。ハードまたはソフトのいずれかになります。
ソフト上限が定義されている場合、softMaxMeters と costPerKilometerAboveSoftMax の両方を定義し、非負の値にする必要があります。
| JSON 表現 |
|---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| フィールド | |
|---|---|
maxMeters |
距離を最大 maxMeters までに制限するハードリミット。上限値は負の値にできません。 |
softMaxMeters |
最大距離制限を強制しないソフト制限。違反すると、モデルで定義された他の費用と同じ単位で、費用が加算されます。 softMaxMeters が定義されている場合、maxMeters より小さく、負でない値にする必要があります。 |
costPerKilometerBelowSoftMax |
発生した 1 キロメートルあたりの費用。 この費用は |
costPerKilometerAboveSoftMax |
距離が 費用は負の値にできません。 |
BreakRule
車両の休憩時間(昼食休憩など)を生成するルール。休憩とは、車両が現在の位置でアイドル状態を維持し、訪問を実行できない連続した期間のことです。休憩は次の場合に発生する可能性があります。
- 2 回の訪問の間の移動中(訪問の直前または直後の時間を含みますが、訪問の途中は含みません)。この場合、訪問間の対応する移動時間が延長されます。
- または車両の始動前(休憩中に車両が始動しない場合もあります)。この場合、車両の始動時間に影響はありません。
- または車両終了後(車両終了時刻も同様)。
| JSON 表現 |
|---|
{ "breakRequests": [ { object ( |
| フィールド | |
|---|---|
breakRequests[] |
休憩の順序。 |
frequencyConstraints[] |
複数の |
BreakRequest
各車両に適用される休憩の順序(休憩の数と順序)は、事前に把握しておく必要があります。繰り返される BreakRequest は、発生する順序でシーケンスを定義します。時間枠(earliestStartTime / latestStartTime)は重複する可能性がありますが、順序と互換性がある必要があります(これはチェックされます)。
| JSON 表現 |
|---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
| フィールド | |
|---|---|
earliestStartTime |
必須。休憩の開始の下限(この値を含む)。 RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: |
latestStartTime |
必須。ブレークの開始の上限(この値を含む)。 RFC 3339 を使用します。生成された出力は常に Z 正規化され、小数点以下は 0、3、6、または 9 桁になります。「Z」以外のオフセットも使用できます。例: |
minDuration |
必須。休憩の最小時間。正の値である必要があります。
|
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 |
必須。この制約の最小休憩時間。非負。
|
maxInterBreakDuration |
必須。
|
目標
目標は費用モデルを完全に置き換えるため、既存の費用とは互換性がありません。各目標は、車両、配送、移行属性などの事前定義された費用にマッピングされます。
試験運用版: 詳しくは、https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request をご覧ください。
| JSON 表現 |
|---|
{
"type": enum ( |
| フィールド | |
|---|---|
type |
目標のタイプ。 |
weight |
この目標が他の目標に対してどの程度の重要度を持つか。任意の非負の数値を指定できます。重みの合計が 1 になる必要はありません。重みのデフォルトは 1.0 です。 |
タイプ
費用のセットにマッピングされる目標タイプ。
| 列挙型 | |
|---|---|
DEFAULT |
妥当なソリューションを確保するため、デフォルトの費用のセットが使用されます。注: この目標は単独で使用できますが、ユーザーが指定した目標にまだ含まれていない場合は、常にベースラインとして重み 1.0 で追加されます。 |
MIN_DISTANCE |
「MIN」目標。合計移動距離を最小限に抑えます。 |
MIN_WORKING_TIME |
すべての車両の合計作業時間を最小限に抑えます。 |
MIN_TRAVEL_TIME |
上記と同じですが、移動時間のみに焦点を当てています。 |
MIN_NUM_VEHICLES |
使用する車両の数を最小限に抑えます。 |
DurationDistanceMatrix
訪問と車両の出発地から訪問と車両の目的地までの所要時間と距離の行列を指定します。
| JSON 表現 |
|---|
{
"rows": [
{
object ( |
| フィールド | |
|---|---|
rows[] |
所要時間と距離のマトリックスの行を指定します。 |
vehicleStartTag |
この所要時間と距離のマトリックスが適用される車両を定義するタグ。空の場合、すべての車両に適用され、マトリックスは 1 つのみになります。 各車両の出発地は、1 つの行列と完全に一致する必要があります。つまり、 すべての行列の |
行
所要時間と距離の行列の行を指定します。
| JSON 表現 |
|---|
{ "durations": [ string ], "meters": [ number ] } |
| フィールド | |
|---|---|
durations[] |
指定された行の期間の値。
|
meters[] |
指定された行の距離の値。モデルで距離を参照する費用や制約がない場合は、空のままにできます。それ以外の場合は、 |
TransitionAttributes
ルート上の 2 つの連続する訪問間の移行の属性を指定します。同じトランジションに複数の TransitionAttributes が適用されることがあります。その場合、すべての追加費用が加算され、最も厳しい制約または上限が適用されます(自然な「AND」セマンティクスに従います)。
| JSON 表現 |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| フィールド | |
|---|---|
srcTag |
これらの属性が適用される(src->dst)遷移のセットを定義するタグ。 ソース訪問または車両の始動は、 |
excludedSrcTag |
|
dstTag |
|
excludedDstTag |
|
cost |
このトランジションの実行コストを指定します。これはモデル内の他のすべての費用と同じ単位で、負の値にすることはできません。これは、他の既存のすべての費用に加えて適用されます。 |
costPerKilometer |
このトランジションの実行中に移動した距離に適用される 1 キロメートルあたりの費用を指定します。車両に指定された |
distanceLimit |
この遷移の実行中に移動する距離の上限を指定します。 2021 年 6 月の時点で、ソフト上限のみがサポートされています。 |
delay |
このトランジションの実行時に発生する遅延を指定します。 この遅延は、常に参照元サイトへのアクセスが終了した後、リンク先サイトへのアクセスが開始される前に発生します。
|
ShipmentTypeIncompatibility
shipmentType に応じて、配送間の非互換性を指定します。同じルートに互換性のない配送が表示されるのは、互換性のないモードに基づいて制限されます。
| JSON 表現 |
|---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
| フィールド | |
|---|---|
types[] |
互換性のないタイプのリスト。リストにある |
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 ( |
| フィールド | |
|---|---|
requiredShipmentTypeAlternatives[] |
|
dependentShipmentTypes[] |
注: |
requirementMode |
要件に適用されるモード。 |
RequirementMode
ルート上の依存する配送の表示を定義するモード。
| 列挙型 | |
|---|---|
REQUIREMENT_MODE_UNSPECIFIED |
要件モードが指定されていません。この値は使用しないでください。 |
PERFORMED_BY_SAME_VEHICLE |
このモードでは、すべての「依存」配送で、少なくとも 1 つの「必須」配送と同じ車両を使用する必要があります。 |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
したがって、「依存」する配送の集荷には、次のいずれかが必要です。
|
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 |
「最初」のイベントが配達かどうかを示します。 |
secondIsDelivery |
「2 番目」のイベントが配信かどうかを示します。 |
offsetDuration |
「最初」のイベントと「2 番目」のイベントのオフセット。負の値になることもあります。
|
firstIndex |
「最初」のイベントの配送インデックス。このフィールドは指定する必要があります。 |
secondIndex |
「2 番目」のイベントの配送インデックス。このフィールドは指定する必要があります。 |