Package google.maps.routeoptimization.v1

インデックス

RouteOptimization

車両ツアーを最適化するためのサービス。

特定のタイプのフィールドの有効性:

  • google.protobuf.Timestamp
    • 時刻は Unix 時間(1970-01-01T00:00:00+00:00 からの秒数)です。
    • 秒は [0, 253402300799]、つまり [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] の範囲で指定する必要があります。
    • nanos は未設定にするか、0 に設定する必要があります。
  • google.protobuf.Duration
    • seconds は [0, 253402300799] の範囲([1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00] の範囲)にする必要があります。
    • nanos は未設定にするか、0 に設定する必要があります。
  • google.type.LatLng
    • 緯度は [-90.0, 90.0] の範囲内でなければなりません。
    • 経度は [-180.0, 180.0] の範囲で指定してください。
    • 緯度と経度の少なくとも 1 つはゼロ以外にする必要があります。
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

1 つ以上の OptimizeToursRequest メッセージの車両ツアーをバッチとして最適化します。

このメソッドは長時間実行オペレーション(LRO)です。最適化の入力(OptimizeToursRequest メッセージ)と出力(OptimizeToursResponse メッセージ)は、ユーザー指定の形式で Cloud Storage から読み取られ、Cloud Storage に書き込まれます。OptimizeTours メソッドと同様に、各 OptimizeToursRequest には ShipmentModel が含まれ、ShipmentRoute フィールドを含む OptimizeToursResponse が返されます。これは、全体的な費用を最小限に抑えるために車両が実行するルートのセットです。

ユーザーは operations.get をポーリングして、LRO のステータスを確認できます。

LRO の done フィールドが false の場合、少なくとも 1 つのリクエストがまだ処理されています。他のリクエストは正常に完了し、その結果が Cloud Storage で利用可能になっている可能性があります。

LRO の done フィールドが true の場合、すべてのリクエストが処理されています。正常に処理されたリクエストの結果は Cloud Storage で確認できます。失敗したリクエストの結果は Cloud Storage で利用できません。LRO の error フィールドが設定されている場合、失敗したリクエストのいずれかからのエラーが含まれます。

認可スコープ

次の OAuth スコープが必要です。

  • https://www.googleapis.com/auth/cloud-platform
IAM 権限

parent リソースに対する次の IAM 権限が必要です。

  • routeoptimization.operations.create

詳細については、IAM のドキュメントをご覧ください。

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

ShipmentModel を含む OptimizeToursRequest を送信し、ShipmentRoute を含む OptimizeToursResponse を返します。これは、全体的な費用を最小限に抑えるために車両が実行するルートのセットです。

ShipmentModel モデルは、主に実行する必要がある Shipment と、Shipment の輸送に使用できる Vehicle で構成されます。ShipmentRoute は Shipment を Vehicle に割り当てます。具体的には、各車両に一連の Visit を割り当てます。ここで、Visit は VisitRequest に対応します。これは、Shipment の集荷または配達です。

目標は、ShipmentModel で定義された多くのコンポーネントを含む総費用を最小限に抑える Vehicle への ShipmentRoute の割り当てを提供することです。

認可スコープ

次の OAuth スコープが必要です。

  • https://www.googleapis.com/auth/cloud-platform
IAM 権限

parent リソースに対する次の IAM 権限が必要です。

  • routeoptimization.locations.use

詳細については、IAM のドキュメントをご覧ください。

OptimizeToursLongRunning

rpc OptimizeToursLongRunning(OptimizeToursRequest) returns (Operation)

これは、タイムアウト値が大きい最適化用に設計された OptimizeTours メソッドのバリアントです。数分以上かかる最適化では、OptimizeTours メソッドよりもこのメソッドを使用することをおすすめします。

返される long-running operation(LRO)の名前は <parent>/operations/<operation_id> の形式になり、計算の進行状況を追跡するために使用できます。metadata フィールドのタイプは OptimizeToursLongRunningMetadata です。成功した場合、response フィールドのタイプは OptimizeToursResponse です。

認可スコープ

次の OAuth スコープが必要です。

  • https://www.googleapis.com/auth/cloud-platform
IAM 権限

parent リソースに対する次の IAM 権限が必要です。

  • routeoptimization.operations.create

詳細については、IAM のドキュメントをご覧ください。

OptimizeToursUri

rpc OptimizeToursUri(OptimizeToursUriRequest) returns (Operation)

これは、タイムアウト値が大きく、ラージ インプット/出力サイズが大きい最適化用に設計された OptimizeToursLongRunning メソッドのバリアントです。

クライアントは、Google Cloud Storage に保存されている OptimizeToursRequest の URI を指定し、サーバーはクライアントが指定した Google Cloud Storage URI に OptimizeToursResponse を書き込みます。

このメソッドは、数分以上かかる最適化や、8 MB を超える入出力サイズに適しています。ただし、より短時間で小規模な最適化にも使用できます。OptimizeTours メソッドよりもこのメソッドを使用することをおすすめします。

返される long-running operation(LRO)の名前は <parent>/operations/<operation_id> の形式になり、計算の進行状況を追跡するために使用できます。metadata フィールドのタイプは OptimizeToursUriMetadata です。成功した場合、response フィールドのタイプは OptimizeToursUriResponse です。

認可スコープ

次の OAuth スコープが必要です。

  • https://www.googleapis.com/auth/cloud-platform
IAM 権限

parent リソースに対する次の IAM 権限が必要です。

  • routeoptimization.operations.create

詳細については、IAM のドキュメントをご覧ください。

AggregatedMetrics

すべての Transition 要素または Visit 要素(ShipmentRoute 要素)にわたる ShipmentRoute(OptimizeToursResponse)の集計指標。

フィールド
performed_shipment_count

int32

実行された配送の数。集荷と配達のペアは 1 回のみカウントされます。

travel_duration

Duration

ルートまたはソリューションの合計移動時間。

wait_duration

Duration

ルートまたはソリューションの合計待機時間。

delay_duration

Duration

ルートまたはソリューションの合計遅延時間。

break_duration

Duration

ルートまたはソリューションの合計休憩時間。

visit_duration

Duration

ルートまたはソリューションの合計訪問時間。

total_duration

Duration

合計時間は、上記のすべての時間の合計と一致する必要があります。ルートの場合は、次のものにも対応します。

[ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time] - [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
travel_distance_meters

double

ルートまたはソリューションの合計移動距離。

max_loads

map<string, VehicleLoad>

このルート(またはソリューション)の各数量について、ルート(またはソリューション)全体で達成された最大負荷。すべての Transition.vehicle_loads(または ShipmentRoute.metrics.max_loads

performed_mandatory_shipment_count

int32

必須の配送の実施回数。

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

performed_shipment_penalty_cost_sum

double

実行された配送の Shipment.penalty_cost の合計。

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

BatchOptimizeToursMetadata

この型にはフィールドがありません。

BatchOptimizeToursRequest 呼び出しのオペレーション メタデータ。

BatchOptimizeToursRequest

ツアーを非同期オペレーションとしてバッチ最適化するリクエスト。各入力ファイルには 1 つの OptimizeToursRequest が含まれ、各出力ファイルには 1 つの OptimizeToursResponse が含まれます。リクエストには、ファイルの読み取り/書き込みと解析を行うための情報が含まれています。すべての入出力ファイルは同じプロジェクトに存在する必要があります。

フィールド
parent

string

必須。呼び出しを行うターゲット プロジェクトとロケーション。

形式:

  • projects/{project-id}
  • projects/{project-id}/locations/-

リージョン {location-id} 値はサポートされていません。

model_configs[]

AsyncModelConfig

必須。各購入モデルの入出力情報(ファイルパスやデータ形式など)。

AsyncModelConfig

1 つの最適化モデルを非同期で解くための情報。

フィールド
display_name

string

省略可。ユーザー定義のモデル名。ユーザーがモデルを追跡するためのエイリアスとして使用できます。

input_config

InputConfig

必須。入力モデルに関する情報。

output_config

OutputConfig

必須。目的の出力場所の情報。

BatchOptimizeToursResponse

この型にはフィールドがありません。

BatchOptimizeToursRequest へのレスポンス。これは、オペレーションの完了後に長時間実行オペレーションで返されます。

BreakRule

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

  • 2 回の訪問の間の移動中(訪問の直前または直後の時間を含むが、訪問の途中は含まない)。この場合、訪問間の対応する配送日数が延長されます。
  • または、車両の始動前(車両は休憩中に始動しない場合があります)。この場合、車両の始動時間には影響しません。
  • または車両の終了時刻以降(同様に、車両の終了時刻を使用)。
フィールド
break_requests[]

BreakRequest

ブレークのシーケンス。BreakRequest メッセージを確認します。

frequency_constraints[]

FrequencyConstraint

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

BreakRequest

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

フィールド
earliest_start_time

Timestamp

必須。休憩の開始の下限(この値を含む)。

latest_start_time

Timestamp

必須。休憩の開始時間の上限(この時間を含む)。

min_duration

Duration

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

FrequencyConstraint

「12 時間ごとに 1 時間以上の休憩が必要」など、最小休憩頻度を適用することで、上記で指定した休憩の頻度と期間をさらに制限できます。これを「12 時間のスライディング タイム ウィンドウ内で、少なくとも 1 時間の休憩が 1 回以上必要」と解釈できると仮定すると、この例は次の FrequencyConstraint に変換されます。

{
   min_break_duration { seconds: 3600 }         # 1 hour.
   max_inter_break_duration { 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
フィールド
min_break_duration

Duration

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

max_inter_break_duration

Duration

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

DataFormat

入力ファイルと出力ファイルのデータ形式。

列挙型
DATA_FORMAT_UNSPECIFIED 値が無効です。形式を UNSPECIFIED にすることはできません。
JSON JavaScript Object Notation。
PROTO_TEXT プロトコル バッファのテキスト形式。https://protobuf.dev/reference/protobuf/textformat-spec/ をご覧ください。

DistanceLimit

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

ソフトリミットが定義されている場合は、soft_max_meters と cost_per_kilometer_above_soft_max の両方を定義し、負でない値にする必要があります。

フィールド
max_meters

int64

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

soft_max_meters

int64

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

定義する場合、soft_max_meters は max_meters より小さく、負でない値にする必要があります。

cost_per_kilometer_below_soft_max

double

1 km あたりの費用は、次の式で計算され、最大 soft_max_meters まで増加します。

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

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

cost_per_kilometer_above_soft_max

double

距離が soft_max_meters の上限を超えた場合に発生する 1 km あたりの費用。距離が上限を下回っている場合、追加費用は 0 です。それ以外の場合、費用の計算に使用される式は次のとおりです。

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

費用は 0 以上にする必要があります。

GcsDestination

出力ファイルの書き込み先となる Google Cloud Storage のロケーション。

フィールド
uri

string

必須。Google Cloud Storage URI。

GcsSource

入力ファイルの読み取り元となる Google Cloud Storage のロケーション。

フィールド
uri

string

必須。Google Cloud Storage オブジェクトの URI(gs://bucket/path/to/object 形式)。

InjectedSolutionConstraint

リクエストに挿入されたソリューション。制約する必要がある訪問とその制約方法に関する情報が含まれます。

フィールド
routes[]

ShipmentRoute

挿入するソリューションのルート。一部のルートは元のソリューションから除外される場合があります。ルートとスキップされた配送は、injected_first_solution_routes に記載されている基本的な有効性の前提条件を満たしている必要があります。

skipped_shipments[]

SkippedShipment

挿入するソリューションのスキップされた出荷。一部は元のソリューションから省略されている場合があります。routes フィールドを確認します。

constraint_relaxations[]

ConstraintRelaxation

0 個以上の車両グループについて、制約を緩和するタイミングと量を指定します。このフィールドが空の場合、空でないすべての車両ルートが完全に制約されます。

ConstraintRelaxation

車両のグループに対して、訪問の制約を緩和するしきい値と緩和するレベルを指定します。skipped_shipment フィールドにリストされている配送は、スキップされるように制限されています。つまり、実行できません。

フィールド
relaxations[]

Relaxation

vehicle_indices の車両を含むルートの訪問に適用される、すべての訪問制約の緩和。

vehicle_indices[]

int32

訪問制約 relaxations が適用される車両インデックスを指定します。空の場合、これはデフォルトと見なされ、relaxations は他の constraint_relaxations で指定されていないすべての車両に適用されます。デフォルトは最大 1 つです。つまり、空の vehicle_indices を指定できる制約緩和フィールドは最大 1 つです。車両インデックスは、複数の constraint_relaxations 内であっても 1 回しか登録できません。

interpret_injected_solutions_using_labels が true の場合、車両インデックスは ShipmentRoute.vehicle_index と同じようにマッピングされます(fields のコメントを参照)。

リラクゼーション

relaxations が空の場合、routes のすべての訪問の開始時間と順序が完全に制約され、それらのルートに新しい訪問を挿入または追加することはできません。また、車両が空でない限り(つまり、訪問がなく、モデルで used_if_route_is_empty が false に設定されている場合)、routes の車両の開始時刻と終了時刻は完全に制約されます。

relaxations(i).level は、次の条件を満たす訪問 #j に適用される制約緩和レベルを指定します。

  • route.visits(j).start_time >= relaxations(i).threshold_time かつ
  • j + 1 >= relaxations(i).threshold_visit_count

同様に、車両の開始は、次の条件を満たす場合に relaxations(i).level に緩和されます。

  • vehicle_start_time >= relaxations(i).threshold_time かつ
  • relaxations(i).threshold_visit_count == 0。車両の終了時間は、次の条件を満たす場合、relaxations(i).level に緩和されます。
  • vehicle_end_time >= relaxations(i).threshold_time かつ
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

訪問が threshold_visit_count または threshold_time を満たす場合に緩和レベルを適用するには、同じ level を持つ 2 つの relaxations を追加します。1 つは threshold_visit_count のみが設定され、もう 1 つは threshold_time のみが設定されます。訪問が複数の relaxations の条件を満たす場合は、最も制限の緩いレベルが適用されます。その結果、車両の開始からルートの訪問、車両の終了まで、緩和レベルはより緩和されます。つまり、ルートの進行に伴い、緩和レベルは減少することはありません。

relaxations のしきい値条件を満たさないルート訪問のタイミングとシーケンスは完全に制約され、これらのシーケンスに訪問を挿入することはできません。また、車両の開始または終了が緩和の条件を満たしていない場合、車両が空でない限り、時間は固定されます。

フィールド
level

Level

threshold_time 以降の条件と threshold_visit_count 以上の条件が満たされた場合に適用される制約緩和レベル。

threshold_time

Timestamp

緩和 level が適用される時刻。

threshold_visit_count

int32

緩和 level が適用される訪問回数。threshold_visit_count が 0(または未設定)の場合、level は車両の始動時に直接適用されることがあります。

route.visits_size() + 1 の場合、level は車両側にのみ適用されます。route.visits_size() + 1 を超える場合、そのルートには level がまったく適用されません。

レベル

さまざまな制約緩和レベルを表します。これらのレベルは、訪問と、しきい値条件を満たしたときに続く訪問に適用されます。

以下の列挙は、緩和の度合いが低い順に並んでいます。

列挙型
LEVEL_UNSPECIFIED

暗黙的なデフォルトの緩和レベル: 制約は緩和されません。つまり、すべての訪問が完全に制約されます。

この値を level で明示的に使用しないでください。

RELAX_VISIT_TIMES_AFTER_THRESHOLD 訪問の開始時間と車両の開始/終了時間は緩和されますが、各訪問は同じ車両にバインドされたままで、訪問シーケンスを遵守する必要があります。訪問の間に、または訪問の前に訪問を挿入することはできません。
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD と同じですが、訪問シーケンスも緩和されます。訪問はこの車両でのみ実行できますが、実行されない可能性があります。
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD と同じですが、車両も緩和されます。訪問はしきい値時間以降に完全に無料になり、実行されない可能性があります。

InputConfig

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] の入力を指定します。

フィールド
data_format

DataFormat

必須。入力データ形式。

共用体フィールド source。必須。source は次のいずれかになります。
gcs_source

GcsSource

Google Cloud Storage のロケーション。これは単一のオブジェクト(ファイル)である必要があります。

ロケーション

位置(地理的な地点と、オプションの方向)をカプセル化します。

フィールド
lat_lng

LatLng

ウェイポイントの地理座標。

heading

int32

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

OptimizeToursLongRunningMetadata

この型にはフィールドがありません。

OptimizeToursLongRunning 呼び出しのオペレーション メタデータ。

OptimizeToursRequest

解決する配送モデルと最適化パラメータを定義するツアー最適化ソルバーに渡されるリクエスト。

フィールド
parent

string

必須。呼び出しを行うターゲット プロジェクトまたはロケーション。

形式:

  • projects/{project-id}
  • projects/{project-id}/locations/-

リージョン {location-id} 値はサポートされていません。

timeout

Duration

このタイムアウトが設定されている場合、サーバーは、タイムアウト期間が経過するか、同期リクエストのサーバー期限に達するかのいずれか早い方の前にレスポンスを返します。

非同期リクエストの場合、サーバーはタイムアウトが経過する前に(可能であれば)ソリューションを生成します。

model

ShipmentModel

解決する配送モデル。

solving_mode

SolvingMode

デフォルトでは、解決モードは DEFAULT_SOLVE(0)です。

search_mode

SearchMode

リクエストの解決に使用された検索モード。

injected_first_solution_routes[]

ShipmentRoute

最適化アルゴリズムをガイドして、以前の解に類似した最初の解を見つけます。

モデルは、最初のソリューションが構築されるときに制約されます。ルートで実行されなかった配送は、最初のソリューションでは暗黙的にスキップされますが、後続のソリューションで実行される可能性があります。

このソリューションは、次の基本的な有効性の前提条件を満たす必要があります。

  • すべてのルートで、vehicle_index は範囲内であり、重複していない必要があります。
  • すべての訪問について、shipment_index と visit_request_index が範囲内にある必要があります。
  • 1 つの配送を参照できるのは 1 つのルートのみです。
  • 集荷配送の集荷は、配送前に行う必要があります。
  • 1 つの配送に対して、集荷の代替手段または配送の代替手段を 1 つだけ実行できます。
  • すべてのルートで、時間が長くなっている(vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time)。
  • 出荷は、許可された車両でのみ実行できます。Shipment.allowed_vehicle_indices が空の場合、または vehicle_index が Shipment.allowed_vehicle_indices に含まれている場合、車両は許可されます。

挿入されたソリューションが実行可能でない場合、検証エラーが返されるとは限りません。代わりに、実行不可能であることを示すエラーが返されることがあります。

injected_solution_constraint

InjectedSolutionConstraint

最適化アルゴリズムを制約して、以前のソリューションに類似した最終的なソリューションを見つけます。たとえば、すでに完了しているルートの一部や、完了する予定だが変更してはならないルートの一部を固定するために使用できます。

挿入されたソリューションが実行可能でない場合、検証エラーが返されるとは限りません。代わりに、実行不可能であることを示すエラーが返されることがあります。

refresh_details_routes[]

ShipmentRoute

空でない場合、指定されたルートは、基になる訪問シーケンスや移動時間を変更せずに更新されます。更新されるのは、その他の詳細のみです。これはモデルを解くものではありません。

2020 年 11 月現在、このフィールドは空でないルートのポリラインのみを対象とし、populate_polylines が true である必要があります。

渡されたルートの route_polyline フィールドがルート transitions と一致しない可能性があります。

このフィールドは、injected_first_solution_routes または injected_solution_constraint と一緒に使用しないでください。

Shipment.ignore と Vehicle.ignore は動作に影響しません。関連する配送や車両が無視されるかどうかにかかわらず、空でないすべてのルートのすべての訪問の間にポリラインが入力されます。

interpret_injected_solutions_using_labels

bool

true の場合:

この解釈は、injected_first_solution_routes、injected_solution_constraint、refresh_details_routes フィールドに適用されます。これは、ソリューションの作成後にリクエスト内の配送インデックスまたは車両インデックスが変更された場合(リクエストから配送または車両が削除された、またはリクエストに追加された場合など)に使用できます。

true の場合、次のカテゴリのラベルは、そのカテゴリに 1 回だけ表示される必要があります。

挿入されたソリューションの vehicle_label がリクエスト車両に対応していない場合、対応するルートは、その訪問とともにソリューションから削除されます。挿入されたソリューションの shipment_label がリクエスト配送に対応していない場合、対応する訪問はソリューションから削除されます。挿入されたソリューションの SkippedShipment.label がリクエストの配送に対応していない場合、SkippedShipment はソリューションから削除されます。

挿入されたソリューションからルート訪問またはルート全体を削除すると、暗黙的な制約に影響する可能性があります。これにより、ソリューションの変更、検証エラー、または実行不能につながる可能性があります。

注: 呼び出し元は、各 Vehicle.label(または )が (または )の有効なインデックスであることを確認する必要があります。Shipment.label)は、2 つの関連するリクエスト(挿入されたソリューションで使用される OptimizeToursResponse を生成した過去のリクエストと、挿入されたソリューションを含む現在のリクエスト)で使用される車両(または配送)エンティティを一意に識別します。前述の一意性チェックだけでは、この要件を保証できません。

consider_road_traffic

bool

ShipmentRoute フィールドの Transition.travel_duration、Visit.start_time、vehicle_end_time の計算、ShipmentRoute.has_traffic_infeasibilities フィールドの設定、OptimizeToursResponse.total_cost フィールドの計算で、トラフィックの見積もりを考慮します。

populate_polylines

bool

true の場合、レスポンス ShipmentRoute にポリラインが入力されます。

populate_transition_polylines

bool

true の場合、ポリラインとルートトークンがレスポンス ShipmentRoute.transitions に入力されます。

allow_large_deadline_despite_interruption_risk

bool

これを設定すると、リクエストの期限(https://grpc.io/blog/deadlines を参照)を最大 60 分に設定できます。それ以外の場合、最大期限は 30 分です。長時間実行されるリクエストは、中断のリスクが大幅に高くなります(ただし、それでも小さいリスクです)。

use_geodesic_distances

bool

true の場合、移動距離は Google マップの距離ではなく測地線距離を使用して計算され、移動時間は geodesic_meters_per_second で定義された速度の測地線距離を使用して計算されます。

label

string

このリクエストを識別するために使用できるラベル。OptimizeToursResponse.request_label で報告されます。

geodesic_meters_per_second

double

use_geodesic_distances が true の場合、このフィールドを設定する必要があります。このフィールドは、移動時間の計算に適用される速度を定義します。値は 1.0 m/s 以上にする必要があります。

max_validation_errors

int32

返される検証エラーの数を切り捨てます。これらのエラーは通常、BadRequest エラーの詳細(https://cloud.google.com/apis/design/errors#error_details))として INVALID_ARGUMENT エラー ペイロードに添付されます。ただし、solving_mode=VALIDATE_ONLY の場合は除きます。OptimizeToursResponse.validation_errors フィールドをご覧ください。デフォルトは 100 で、上限は 10,000 です。

SearchMode

検索の動作を定義するモード。レイテンシとソリューションの品質のトレードオフ。すべてのモードで、グローバル リクエストの期限が適用されます。

列挙型
SEARCH_MODE_UNSPECIFIED 検索モードが指定されていません(RETURN_FAST と同等)。
RETURN_FAST 最初の適切なソリューションが見つかったら検索を停止する。
CONSUME_ALL_AVAILABLE_TIME 利用可能な時間をすべて使って、より良いソリューションを探す。

SolvingMode

ソルバーがリクエストを処理する方法を定義します。VALIDATE_ONLY 以外のすべてのモードで、リクエストが無効な場合は INVALID_REQUEST エラーが返されます。返されるエラーの数を制限するには、max_validation_errors をご覧ください。

列挙型
DEFAULT_SOLVE モデルを解きます。警告は [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors] で発行される場合があります。
VALIDATE_ONLY モデルを解かずに検証のみを行います。可能な限り多くの OptimizeToursResponse.validation_errors を入力します。
DETECT_SOME_INFEASIBLE_SHIPMENTS

OptimizeToursResponse.validation_errors または OptimizeToursResponse.skipped_shipments のみに入力し、リクエストの残りの部分を実際には解決しません(レスポンスで status と routes は設定されません)。injected_solution_constraint ルートで実行不可能性が検出された場合、OptimizeToursResponse.validation_errors フィールドに入力され、OptimizeToursResponse.skipped_shipments は空のままになります。

重要: 実行不可能な配送がすべてここに返されるわけではなく、前処理中に実行不可能として検出された配送のみが返されます。

TRANSFORM_AND_RETURN_REQUEST

このモードは、ShipmentModel.objectives が空でない場合にのみ機能します。リクエストが解決されていない。検証され、指定された目標に対応する費用が入力されるだけです。ShipmentModel.objectives のドキュメントもご覧ください。結果のリクエストは OptimizeToursResponse.processed_request として返されます。

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

OptimizeToursResponse

各車両がたどるルート、スキップされた配送、ソリューションの全体的な費用を含む、ルート最適化問題を解決した後のレスポンス。

フィールド
routes[]

ShipmentRoute

各車両に対して計算されたルート。i 番目のルートは、モデル内の i 番目の車両に対応します。

request_label

string

リクエストでラベルが指定されている場合は、OptimizeToursRequest.label のコピー。

skipped_shipments[]

SkippedShipment

スキップされたすべての配送のリスト。

validation_errors[]

OptimizeToursValidationError

個別に検出できたすべての検証エラーのリスト。OptimizeToursValidationError メッセージの「複数のエラー」の説明をご覧ください。solving_mode が DEFAULT_SOLVE の場合、エラーではなく警告が含まれます。

processed_request

OptimizeToursRequest

場合によっては、受信したリクエストを解決する前に変更(費用の追加など)します。solving_mode == TRANSFORM_AND_RETURN_REQUEST の場合、変更されたリクエストがここに返されます。

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

metrics

Metrics

このソリューションの期間、距離、使用状況の指標。

指標

すべてのルートで集計された全体的な指標。

フィールド
aggregated_route_metrics

AggregatedMetrics

ルート全体で集計されます。各指標は、同じ名前のすべての ShipmentRoute.metrics フィールドの合計(または負荷の最大値)です。

skipped_mandatory_shipment_count

int32

スキップされた必須配送の数。

used_vehicle_count

int32

使用された車両の数。注: 車両ルートが空で、Vehicle.used_if_route_is_empty が true の場合、車両は使用済みと見なされます。

earliest_vehicle_start_time

Timestamp

使用済み車両の最も早い開始時間。すべての使用済み車両の ShipmentRoute.vehicle_start_time の最小値として計算されます。

latest_vehicle_end_time

Timestamp

使用された車両の最新の終了時間。使用されたすべての車両の ShipmentRoute.vehicle_end_time の最大値として計算されます。

costs

map<string, double>

ソリューションの費用。費用関連のリクエスト フィールド別に分類されます。キーは、入力 OptimizeToursRequest を基準とする proto パス(「model.shipments.pickups.cost」など)です。値は、対応するコスト フィールドによって生成された合計コストで、ソリューション全体で集計されます。つまり、costs["model.shipments.pickups.cost"] は、ソリューション全体のすべての店舗受取手数料の合計です。モデルで定義されているすべての費用が、ここで詳細にレポートされます。ただし、TransitionAttributes に関連する費用は例外で、2022 年 1 月の時点では集計された方法でのみレポートされます。

total_cost

double

ソリューションの合計費用。費用マップ内のすべての値の合計。

OptimizeToursUriMetadata

この型にはフィールドがありません。

OptimizeToursUri 呼び出しのオペレーション メタデータ。

OptimizeToursUriRequest

OptimizeToursUri メソッドで使用されるリクエスト。

フィールド
parent

string

必須。呼び出しを行うターゲット プロジェクトまたはロケーション。

形式:

  • projects/{project-id}
  • projects/{project-id}/locations/-

リージョン {location-id} 値はサポートされていません。

input

Uri

必須。OptimizeToursRequest を含む Cloud Storage オブジェクトの URI。

output

Uri

必須。OptimizeToursResponse を含む Cloud Storage オブジェクトの URI。

OptimizeToursUriResponse

OptimizeToursUri メソッドによって返されるレスポンス。

フィールド
output

Uri

省略可。JSON または textproto としてエンコードされた OptimizeToursResponse を含む Cloud Storage オブジェクトの URI。オブジェクトが JSON としてエンコードされている場合、オブジェクト名の拡張子は .json になります。オブジェクトが textproto としてエンコードされている場合、オブジェクト名の拡張子は .txtpb になります。

リソースの crc32_checksum を使用して、リソースの内容が変更されていないことを確認できます。

OptimizeToursValidationError

OptimizeToursRequest の検証時に発生したエラーまたは警告について説明します。

フィールド
code

int32

検証エラーは、常に存在するペア(code、display_name)によって定義されます。

このセクションに続くフィールドには、エラーに関する詳細なコンテキストが示されます。

複数のエラー: 複数のエラーがある場合、検証プロセスではそのうちのいくつかを出力しようとします。コンパイラと同様に、これは不完全なプロセスです。検証エラーの中には「致命的」なものがあり、検証プロセス全体が停止します。これは、特に display_name="UNSPECIFIED" エラーの場合に該当します。エラーによっては、検証プロセスで他のエラーがスキップされることがあります。

安定性: code と display_name は非常に安定している必要があります。ただし、新しいコードと表示名が時間の経過とともに表示されることがあります。これにより、新しいエラーが古いエラーを隠すため、特定の(無効な)リクエストで異なる(code、display_name)ペアが生成されることがあります。たとえば、「複数のエラー」を参照してください。

display_name

string

エラーの表示名。

fields[]

FieldReference

エラー コンテキストには、0 個、1 個(ほとんどの場合)、または複数のフィールドが含まれる場合があります。たとえば、車両 4 と配送 2 の最初の集荷を参照するには、次のようにします。

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 sub_field {name: "pickups" index: 0} }

ただし、特定のエラーコードに対して fields のカーディナリティを変更しないでください。

error_message

string

エラーを説明する、人が読める形式の文字列。code と error_message は、1 対 1 で対応しています(code != "UNSPECIFIED" の場合)。

安定性: 安定していません。特定の code に関連付けられたエラー メッセージは、時間の経過とともに変更される可能性があります(明確化のため)。代わりに display_name と code を使用してください。

offending_values

string

フィールドの値が含まれる場合があります。これは必ずしも利用できるとは限りません。この方法に依存することは絶対に避け、手動でのモデルのデバッグにのみ使用してください。

FieldReference

検証エラーのコンテキストを指定します。FieldReference は常にこのファイルの特定のフィールドを参照し、同じ階層構造に従います。たとえば、車両 #5 の start_time_windows の要素 #2 を指定するには、次のようにします。

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

ただし、メッセージが煩雑にならないように、OptimizeToursRequest や ShipmentModel などの最上位エンティティは省略しています。

フィールド
name

string

フィールドの名前(例: 「vehicles」)。

sub_field

FieldReference

必要に応じて、再帰的にネストされたサブフィールド。

共用体フィールド index_or_key。

index_or_key は次のいずれかになります。

index

int32

繰り返される場合のフィールドのインデックス。

key

string

フィールドがマップの場合はキー。

OutputConfig

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] の結果の宛先を指定します。

フィールド
data_format

DataFormat

必須。出力データ形式。

共用体フィールド destination。必須。destination は次のいずれかになります。
gcs_destination

GcsDestination

出力を書き込む Google Cloud Storage の場所。

RouteModifiers

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

フィールド
avoid_tolls

bool

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

avoid_highways

bool

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

avoid_ferries

bool

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

avoid_indoor

bool

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

配送

1 つのアイテムの、集荷場所から配達場所までの配送。配送が実行されたとみなされるには、一意の車両が集荷場所のいずれかを訪問し(それに応じて予備容量を減らし)、その後、配送場所のいずれかを訪問する必要があります(それに応じて予備容量を再度増やします)。

フィールド
display_name

string

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

pickups[]

VisitRequest

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

deliveries[]

VisitRequest

配送に関連付けられた一連の配送オプション。指定しない場合、車両は集荷に対応する場所にのみ移動する必要があります。

load_demands

map<string, Load>

配送の積載需要(重量、体積、パレット数など)。マップ内のキーは、対応する負荷のタイプを記述する識別子である必要があります。理想的には、単位も含まれている必要があります。例: "weight_kg"、"volume_gallons"、"pallet_count" など。指定されたキーがマップに表示されない場合、対応する負荷は null と見なされます。

allowed_vehicle_indices[]

int32

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

costs_per_vehicle[]

double

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

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

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

costs_per_vehicle_indices[]

int32

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

pickup_to_delivery_absolute_detour_limit

Duration

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

たとえば、t を、選択した集荷代替地点から選択した配達代替地点に直接移動するのにかかる最短時間とします。pickup_to_delivery_absolute_detour_limit を設定すると、次のようになります。

start_time(delivery) - start_time(pickup) <=
t + pickup_to_delivery_absolute_detour_limit

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

pickup_to_delivery_time_limit

Duration

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

shipment_type

string

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

1 回の訪問に指定される visit_types とは異なります。同じ配送に属するすべての集荷/配送は同じ shipment_type を共有します。

label

string

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

ignore

bool

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

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

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

penalty_cost

double

配送が完了しない場合、このペナルティがルートの全体的な費用に追加されます。集荷と配送の代替手段のいずれかが訪問された場合、配送は完了したと見なされます。費用は、モデル内の他のすべての費用関連フィールドで使用されているのと同じ単位で表すことができます。また、正の数で指定する必要があります。

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

pickup_to_delivery_relative_detour_limit

double

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

たとえば、t を、選択した集荷代替から選択した配送代替に直接移動するのにかかる最短時間とします。pickup_to_delivery_relative_detour_limit を設定すると、次のようになります。

start_time(delivery) - start_time(pickup) <=
std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))

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

読み込み

訪問を行う際、集荷の場合は事前に定義された量が車両の積載量に追加され、配達の場合は差し引かれます。このメッセージでは、そのような金額を定義します。load_demands をご覧ください。

フィールド
amount

int64

対応する訪問を行う車両の負荷が変化する量。これは整数であるため、精度が低下しないように適切な単位を選択することをおすすめします。0 以上にする必要があります。

VisitRequest

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

フィールド
arrival_location

LatLng

この VisitRequest を実行したときに車両が到着する地理的位置。配送モデルに所要時間距離行列がある場合、arrival_location を指定しないでください。

arrival_waypoint

Waypoint

この VisitRequest を実行するときに車両が到着するウェイポイント。配送モデルに所要時間距離行列がある場合、arrival_waypoint を指定しないでください。

departure_location

LatLng

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

departure_waypoint

Waypoint

この VisitRequest の完了後に車両が出発するウェイポイント。arrival_waypoint と同じ場合は省略できます。配送モデルに所要時間距離行列がある場合、departure_waypoint を指定しないでください。

tags[]

string

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

time_windows[]

TimeWindow

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

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

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

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

duration

Duration

訪問の所要時間。つまり、車両が到着してから出発するまでの時間(待機時間に追加される可能性があります。time_windows をご覧ください)。

cost

double

車両ルートでこの訪問リクエストを処理する費用。これを使用して、配送の代替の受け取りまたは配送ごとに異なる費用を支払うことができます。この費用は Shipment.penalty_cost と同じ単位にする必要があります。また、負の値にすることはできません。

load_demands

map<string, Load>

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

visit_types[]

string

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

タイプは 1 回しか表示できません。

label

string

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

avoid_u_turns

bool

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

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

ShipmentModel

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

  • 車両のルート設定の費用(合計時間あたりの費用、移動時間あたりの費用、すべての車両の固定費用の合計)。
  • 未履行の配送ペナルティ。
  • 配送の全体的な所要時間の費用
フィールド
shipments[]

Shipment

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

vehicles[]

Vehicle

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

objectives[]

Objective

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

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

global_start_time

Timestamp

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

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

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

global_end_time

Timestamp

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

global_duration_cost_per_hour

double

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

duration_distance_matrices[]

DurationDistanceMatrix

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

使用例:

  • locA と locB の 2 つのロケーションがあります。
  • 1 台の車両が locA でルートを開始し、locA で終了します。
  • locB での集荷訪問リクエスト 1 件。
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    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 つのロケーションがあります。
  • 1 台の車両が locA でルートを開始し、locB で終了します。マトリックス「fast」を使用します。
  • 1 台の車両が locB でルートを開始し、locB で終了します。マトリックス「slow」を使用します。
  • 1 台の車両が locB でルートを開始し、locB で終了します。マトリックス「fast」を使用します。
  • locC での集荷訪問リクエスト 1 件。
model {
  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "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
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "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
    }
  }
}
duration_distance_matrix_src_tags[]

string

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

タグは VisitRequest.tags または Vehicle.start_tags に対応します。指定された VisitRequest または Vehicle は、このフィールドの 1 つのタグと完全に一致する必要があります。Vehicle のソースタグ、デスティネーション タグ、マトリックス タグは同じでもかまいません。同様に、VisitRequest のソースタグとデスティネーション タグも同じでもかまいません。すべてのタグは一意である必要があり、空の文字列にすることはできません。このフィールドが空でない場合、duration_distance_matrices は空にできません。

duration_distance_matrix_dst_tags[]

string

所要時間と距離行列の目的地を定義するタグ。duration_distance_matrices(i).rows(j).durations(k)(それぞれ duration_distance_matrices(i).rows(j).meters(k)) は、マトリックス i でタグ duration_distance_matrix_src_tags(j) の訪問からタグ duration_distance_matrix_dst_tags(k) の訪問までの移動時間(または移動距離)を定義します。

タグは VisitRequest.tags または Vehicle.start_tags に対応します。指定された VisitRequest または Vehicle は、このフィールドの 1 つのタグと完全に一致する必要があります。Vehicle のソースタグ、デスティネーション タグ、マトリックス タグは同じでもかまいません。同様に、VisitRequest のソースタグとデスティネーション タグも同じでもかまいません。すべてのタグは一意である必要があり、空の文字列にすることはできません。このフィールドが空でない場合、duration_distance_matrices は空にできません。

transition_attributes[]

TransitionAttributes

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

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

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

shipment_type_requirements[]

ShipmentTypeRequirement

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

precedence_rules[]

PrecedenceRule

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

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

max_active_vehicles

int32

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

DurationDistanceMatrix

訪問と車両の開始位置から訪問と車両の終了位置までの所要時間と距離行列を指定します。

フィールド
rows[]

Row

所要時間と距離行列の行を指定します。ShipmentModel.duration_distance_matrix_src_tags と同じ数の要素が必要です。

vehicle_start_tag

string

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

各車両の開始は、1 つのマトリックスと完全に一致する必要があります。つまり、start_tags フィールドの 1 つがマトリックスの vehicle_start_tag(そのマトリックスのみ)と一致する必要があります。

すべてのマトリックスに異なる vehicle_start_tag が必要です。

行

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

フィールド
durations[]

Duration

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

meters[]

double

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

目標

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

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

フィールド
type

Type

目標のタイプ。

weight

double

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

タイプ

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

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

PrecedenceRule

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

複数の優先順位が同じ(または関連する)イベントを参照できます。たとえば、「B の集荷は A の配達後に行われる」と「C の集荷は B の集荷後に行われる」などです。

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

フィールド
first_is_delivery

bool

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

second_is_delivery

bool

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

offset_duration

Duration

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

first_index

int32

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

second_index

int32

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

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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
フィールド
vehicle_index

int32

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

vehicle_label

string

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

vehicle_start_time

Timestamp

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

vehicle_end_time

Timestamp

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

visits[]

Visit

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

transitions[]

Transition

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

has_traffic_infeasibilities

bool

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

  start_time(previous_visit) + duration(previous_visit) +
  travel_duration(previous_visit, next_visit) > start_time(next_visit)

交通状況により移動時間の見積もりが travel_duration(previous_visit, next_visit) 増加したため、next_visit への到着が現在の時間枠より遅くなる可能性があります。また、移動時間の見積もりの増加や、訪問または休憩の時間枠の制限により、休憩が訪問と重複せざるを得ない場合もあります。

route_polyline

EncodedPolyline

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

breaks[]

Break

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

metrics

AggregatedMetrics

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

vehicle_fullness

VehicleFullness

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

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

route_costs

map<string, double>

ルートの費用。費用関連のリクエスト フィールド別に分類されます。キーは、入力 OptimizeToursRequest を基準とする proto パス(「model.shipments.pickups.cost」など)です。値は、対応する費用フィールドによって生成され、ルート全体で集計された合計費用です。つまり、costs["model.shipments.pickups.cost"] は、ルート上のすべての店舗受取手数料の合計です。モデルで定義されているすべての費用が、ここで詳細にレポートされます。ただし、TransitionAttributes に関連する費用は例外で、2022 年 1 月の時点では集計された方法でのみレポートされます。

route_total_cost

double

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

休憩

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

フィールド
start_time

Timestamp

休憩の開始時刻。

duration

Duration

休憩の長さ。

EncodedPolyline

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

フィールド
points

string

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

移行

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

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

フィールド
travel_duration

Duration

この移動の所要時間。

travel_distance_meters

double

移行中の移動距離。

traffic_info_unavailable

bool

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

delay_duration

Duration

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

break_duration

Duration

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

wait_duration

Duration

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

total_duration

Duration

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

  • 次の訪問 start_time(これが最後の遷移の場合は vehicle_end_time)- この遷移の start_time
  • ShipmentRoute.has_traffic_infeasibilities が false の場合、さらに `total_duration = travel_duration + delay_duration` が成り立ちます。
  • break_duration + wait_duration`。
start_time

Timestamp

この移行の開始時間。

route_polyline

EncodedPolyline

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

route_token

string

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

vehicle_loads

map<string, VehicleLoad>

この移行中の車両の積載量。この車両の Vehicle.load_limits に表示されるタイプ、またはこのルートで実行される一部の配送でゼロ以外の Shipment.load_demands を持つタイプごとに表示されます。

最初の移行時の負荷は、車両ルートの開始負荷です。その後、各訪問の後に、訪問が受け取りか配達かに応じて、訪問の load_demands が加算または減算され、次の移動の負荷が取得されます。

VehicleLoad

特定のタイプ(Transition.vehicle_loads を参照)について、ルート上の特定のポイントにおける車両の実際の積載量を報告します。

フィールド
amount

int64

指定されたタイプの車両の積載量。負荷の単位は通常、タイプで示されます。Transition.vehicle_loads をご覧ください。

アクセス

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

フィールド
shipment_index

int32

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

is_pickup

bool

true の場合、訪問は Shipment の集荷に対応します。それ以外の場合は、配送に対応します。

visit_request_index

int32

Shipment の集荷フィールドまたは配送フィールドの VisitRequest のインデックス(is_pickup を参照)。

start_time

Timestamp

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

load_demands

map<string, Load>

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

detour

Duration

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

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

それ以外の場合は、車両の start_location から計算され、次の値と等しくなります。

start_time - vehicle_start_time - travel duration from
the vehicle's `start_location` to the visit.
shipment_label

string

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

visit_label

string

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

visit_type

VisitType

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

injected_solution_location_token

int32

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

このフィールドは、この訪問で 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 訪問は荷物の配達に対応します。

ShipmentTypeIncompatibility

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

フィールド
types[]

string

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

incompatibility_mode

IncompatibilityMode

互換性のないモード。

IncompatibilityMode

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

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

このモードでは、互換性のないタイプの 2 つの配送を同じ車両に同時に載せることはできません。

  • 同じ車両を共有できるのは、一方が配達されてからもう一方が集荷される場合のみです。
  • 両方のシップメントが集荷のみ(配送なし)または配送のみ(集荷なし)の場合、同じ車両を共有することはできません。

ShipmentTypeRequirement

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

フィールド
required_shipment_type_alternatives[]

string

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

dependent_shipment_types[]

string

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

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

requirement_mode

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 以前と同じですが、「依存」配送は、配送時に車両に「必須」配送を搭載する必要があります。

SkippedShipment

ソリューションで実行されなかった配送の詳細を指定します。些細なケースや、スキップの原因を特定できる場合は、ここに理由を報告します。

フィールド
index

int32

インデックスは、ソース ShipmentModel の配送のインデックスに対応します。

label

string

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

reasons[]

Reason

配送がスキップされた理由のリスト。Reason の上のコメントを参照してください。配送がスキップされた理由が不明な場合、理由は設定されません。

penalty_cost

double

これは Shipment.penalty_cost のコピーです。スキップされた配送の重大度を簡単に確認できるように、ここに含めています。

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

estimated_incompatible_vehicle_ratio

double

以下の理由の少なくとも 1 つにより、この配送を実行できない車両の推定比率。注: この項目は、理由に車両が関係している場合にのみ入力します。

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

理由

配送がスキップされた理由を説明できる場合は、ここに理由が一覧表示されます。すべての車両で理由が同じでない場合、reason には複数の要素が含まれます。スキップされた配送に重複する理由(example_vehicle_index 以外のすべてのフィールドが同じである理由)を指定することはできません。例:

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}

スキップされた配送は、すべての車両と互換性がありません。理由は車両ごとに異なる可能性がありますが、少なくとも 1 台の車両の「Apples」容量が超過し(車両 1 を含む)、少なくとも 1 台の車両の「Pears」容量が超過し(車両 3 を含む)、少なくとも 1 台の車両の距離制限が超過します(車両 1 を含む)。

フィールド
code

Code

コードのコメントを参照してください。

example_vehicle_indices[]

int32

example_vehicle_index と同じですが、特定された複数の車両のリストが提供されます。このリストはすべてを網羅しているわけではありません。これは、[fill_example_vehicle_indices_in_skipped_reasons][] が true の場合にのみ入力されます。

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

example_exceeded_capacity_type

string

理由コードが DEMAND_EXCEEDS_VEHICLE_CAPACITY の場合、超過している容量タイプを 1 つ記録します。

example_vehicle_index

int32

理由が配送と車両の非互換性に関連している場合、このフィールドには関連する車両のインデックスが 1 つ表示されます。

コード

理由タイプを識別するコード。ここでの順序に意味はありません。特に、複数の理由が該当する場合に、どの理由が先に表示されるかを示すものではありません。

列挙型
CODE_UNSPECIFIED これは使用しないでください。
NO_VEHICLE モデルに車両がないため、すべての配送が不可能です。
DEMAND_EXCEEDS_VEHICLE_CAPACITY 配送の需要が、一部の容量タイプ(example_exceeded_capacity_type など)で車両の容量を超えています。
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

この配送を実行するために必要な最小距離(車両の start_location から配送の集荷場所や配達場所、車両の終了場所まで)が、車両の route_distance_limit を超えています。

この計算では、測地線距離を使用します。

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

この配送に必要な最小時間(移動時間、待機時間、サービス時間を含む)が、車両の route_duration_limit を超えています。

注: 移動時間は、最良のシナリオ、つまり測地距離 x 36 m/s(約 130 km/時)として計算されます。

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT 上記と同じですが、最小移動時間と車両の travel_duration_limit のみを比較します。
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS 車両が最も早い開始時刻に開始した場合、最良のシナリオ(時間の計算については CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT を参照)では、この配送を実行できません。合計時間により、車両は最も遅い終了時刻より後に終了します。
VEHICLE_NOT_ALLOWED 配送の allowed_vehicle_indices フィールドが空ではなく、この車両がそのフィールドに属していない。
VEHICLE_IGNORED

車両の ignore フィールドが true である。

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

SHIPMENT_IGNORED

配送の ignore フィールドが true である。

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

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

injected_solution_constraint の配送はスキップされます。

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

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

injected_solution_constraint で指定された車両ルートの緩和では、訪問を挿入できません。

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

ZERO_PENALTY_COST

この配送のペナルティ費用はゼロです。これは高度なモデリングの選択肢として役立ちますが、配送がスキップされた理由を事後的に説明することもできます。

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

TimeWindow

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

ハード タイム ウィンドウの境界 start_time と end_time は、イベントの最も早い時刻と最も遅い時刻を適用します(start_time <= event_time <= end_time など)。ソフト タイム ウィンドウの下限 soft_start_time は、イベントが soft_start_time 以降に発生することを優先します。これは、イベントが soft_start_time より前に発生した時間に応じてコストが発生するためです。ソフトな時間枠の上限 soft_end_time は、soft_end_time 以降にイベントが発生するまでの時間に比例する費用を発生させることで、soft_end_time 以前にイベントが発生することを優先することを示します。start_time、end_time、soft_start_time、soft_end_time は、グローバルな制限時間(ShipmentModel.global_start_time と ShipmentModel.global_end_time を参照)内に収まるようにし、次の条件を満たす必要があります。

  0 <= `start_time` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `soft_end_time` <= `end_time`.
フィールド
start_time

Timestamp

ハード タイム ウィンドウの開始時間。指定しない場合、ShipmentModel.global_start_time に設定されます。

end_time

Timestamp

ハード タイム ウィンドウの終了時刻。指定しない場合、ShipmentModel.global_end_time に設定されます。

soft_start_time

Timestamp

時間枠のソフト開始時間。

soft_end_time

Timestamp

時間枠のソフト終了時間。

cost_per_hour_before_soft_start_time

double

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

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

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

cost_per_hour_after_soft_end_time

double

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

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

この費用は正の値にする必要があります。また、このフィールドは soft_end_time が設定されている場合にのみ設定できます。

TransitionAttributes

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

フィールド
src_tag

string

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

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

excluded_src_tag

string

src_tag をご覧ください。src_tag と excluded_src_tag のいずれか 1 つのみを空でない値にする必要があります。

dst_tag

string

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

excluded_dst_tag

string

dst_tag をご覧ください。dst_tag と excluded_dst_tag のいずれか 1 つのみを空でない値にする必要があります。

cost

double

この遷移を実行するための費用を指定します。これは、モデル内の他のすべての費用と同じ単位で、負の値にすることはできません。これは、既存の他のすべての費用に加えて適用されます。

cost_per_kilometer

double

この移行の実行中に移動した距離に適用される 1 km あたりの費用を指定します。車両に指定された Vehicle.cost_per_kilometer に加算されます。

distance_limit

DistanceLimit

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

2021 年 6 月現在、ソフトリミットのみがサポートされています。

delay

Duration

この遷移を実行するときに発生する遅延を指定します。

この遅延は、常にソース訪問の終了後、かつ宛先訪問の開始前に発生します。

URI

Route Optimization API で読み取りと書き込みが可能なリソースを指す Universal Resource Identifier。

フィールド
uri

string

リソースの URI。リソースがまだ存在していない可能性があります。

リソースの内容は JSON または textproto としてエンコードされます。Google Cloud Storage リソースのみがサポートされています。リソースが JSON としてエンコードされている場合、リソース名の末尾に .json を付ける必要があります。リソースが textproto としてエンコードされている場合、リソース名の末尾に .txtpb を付ける必要があります。たとえば、JSON エンコード ファイルへの Google Cloud Storage URI は gs://bucket/path/input/object.json のようになります。

車両

配送問題の車両をモデル化します。配送問題を解決すると、この車両の start_location から end_location までのルートが作成されます。ルートは一連の訪問です(ShipmentRoute を参照)。

フィールド
display_name

string

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

travel_mode

TravelMode

移動手段。車両が使用できる道路とその速度に影響します。travel_duration_multiple もご覧ください。

route_modifiers

RouteModifiers

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

start_location

LatLng

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

start_waypoint

Waypoint

荷物を集荷する前に車両が出発する地理的位置を表すウェイポイント。start_waypoint と start_location のどちらも指定されていない場合、車両は最初の集荷から開始します。配送モデルに所要時間と距離の行列がある場合、start_waypoint を指定しないでください。

end_location

LatLng

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

end_waypoint

Waypoint

最後の VisitRequest を完了した後に車両が終了する地理的位置を表すウェイポイント。end_waypoint と end_location のどちらも指定されていない場合、車両の ShipmentRoute は最後の VisitRequest が完了するとすぐに終了します。配送モデルに所要時間と距離の行列がある場合、end_waypoint を指定しないでください。

start_tags[]

string

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

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

end_tags[]

string

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

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

start_time_windows[]

TimeWindow

車両が開始場所を出発できる時間枠。グローバルな時間制限内である必要があります(ShipmentModel.global_* フィールドを参照)。指定しない場合、グローバルな時間制限以外の制限はありません。

同じ繰り返しフィールドに属する時間枠は、互いに重複しないようにする必要があります。つまり、時間枠が別の時間枠と重複したり、隣接したりすることはできません。また、時間枠は時系列順にする必要があります。

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

end_time_windows[]

TimeWindow

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

同じ繰り返しフィールドに属する時間枠は、互いに重複しないようにする必要があります。つまり、時間枠が別の時間枠と重複したり、隣接したりすることはできません。また、時間枠は時系列順にする必要があります。

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

unloading_policy

UnloadingPolicy

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

load_limits

map<string, LoadLimit>

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

cost_per_hour

double

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

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

cost_per_traveled_hour

double

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

cost_per_kilometer

double

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

fixed_cost

double

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

used_if_route_is_empty

bool

このフィールドは、ルートが配送に対応していない車両にのみ適用されます。このケースで車両が使用中と見なされるかどうかを示します。

true の場合、車両は配送を行わない場合でも開始位置から終了位置まで移動し、開始位置から終了位置までの移動による時間と距離のコストが考慮されます。

それ以外の場合、車両は開始位置から終了位置まで移動せず、break_rule や遅延(TransitionAttributes から)はスケジュールされません。この場合、車両の ShipmentRoute には、車両のインデックスとラベル以外の情報は含まれません。

route_duration_limit

DurationLimit

車両のルートの合計所要時間に適用される上限。特定の OptimizeToursResponse で、車両のルート所要時間は vehicle_end_time と vehicle_start_time の差です。

travel_duration_limit

DurationLimit

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

route_distance_limit

DistanceLimit

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

extra_visit_duration_for_visit_type

map<string, Duration>

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

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

break_rule

BreakRule

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

label

string

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

ignore

bool

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

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

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

travel_duration_multiple

double

この車両の移動時間を増減するために使用できる乗数を指定します。たとえば、この値を 2.0 に設定すると、この車両は標準車両よりも遅く、移動時間が標準車両の 2 倍になります。この倍率は、訪問時間には影響しません。cost_per_hour または cost_per_traveled_hour が指定されている場合は、費用に影響します。[0.001, 1000.0] の範囲内で指定する必要があります。設定されていない場合、車両は標準であり、この倍率は 1.0 と見なされます。

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

以下の extra_visit_duration_for_visit_type もご覧ください。

DurationLimit

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

ソフトリミット フィールドが定義されている場合は、ソフト最大しきい値とそれに関連する費用の両方を一緒に定義する必要があります。

フィールド
max_duration

Duration

期間を max_duration 以下に制限するハードリミット。

soft_max_duration

Duration

最大所要時間の上限を強制しないソフトな上限ですが、違反するとルートに費用が発生します。この費用は、モデルで定義されている他の費用に同じ単位で加算されます。

定義する場合、soft_max_duration は負の値にすることはできません。max_duration も定義されている場合、soft_max_duration は max_duration より小さくする必要があります。

quadratic_soft_max_duration

Duration

ソフトな上限は、最大期間の上限を適用しませんが、違反すると、ルートに費用が発生します。これは期間の 2 乗です。この費用は、モデルで定義されている他の費用に同じ単位で加算されます。

quadratic_soft_max_duration が設定されている場合は、次の条件を満たす必要があります。

  • 負の値は使用できません。
  • max_duration を定義する必要があります。
  • quadratic_soft_max_duration は max_duration より小さくする必要があります。
  • 差は 1 日以下にする必要があります: max_duration - quadratic_soft_max_duration <= 86400 seconds
cost_per_hour_after_soft_max

double

soft_max_duration しきい値に違反した場合に発生する 1 時間あたりの費用。追加費用は、期間がしきい値を下回る場合は 0 です。それ以外の場合、費用は次のように期間によって異なります。

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

費用は 0 以上にする必要があります。

cost_per_square_hour_after_quadratic_soft_max

double

quadratic_soft_max_duration のしきい値に違反した場合に発生する 1 平方時間あたりの費用。

期間がしきい値を下回る場合、追加費用は 0 です。それ以外の場合、費用は次のように期間によって異なります。

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

費用は 0 以上にする必要があります。

LoadLimit

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

フィールド
soft_max_load

int64

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

cost_per_unit_above_soft_max

double

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

start_load_interval

Interval

ルートの開始時に許容される車両の積載量。

end_load_interval

Interval

ルートの終了時における車両の許容積載量。

max_load

int64

許容される最大負荷量。

cost_per_kilometer

LoadCost

この車両で 1 単位の荷物を 1 km 移動する費用。これは燃料消費量のプロキシとして使用できます。負荷が重量(ニュートン単位)の場合、負荷*キロメートルはエネルギーの次元になります。

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

cost_per_traveled_hour

LoadCost

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

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

間隔

許容される負荷量の間隔。

フィールド
min

int64

許容される最小負荷。0 以上にする必要があります。両方を指定する場合は、min を max 以下にする必要があります。

max

int64

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

LoadCost

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

  • min(load, load_threshold) * cost_per_unit_below_threshold
  • max(0, load - load_threshold) * cost_per_unit_above_threshold

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

load_limit {
  key: "weight"
  value {
    cost_per_kilometer {
      load_threshold: 15
      cost_per_unit_below_threshold: 2.0
      cost_per_unit_above_threshold: 10.0
    }
  }
}

ルートは start、pickup、pickup、delivery、delivery、end で、次の遷移があります。

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

この LoadCost で発生する費用は(cost_below * load_below * キロメートル + cost_above * load_above * キロメートル)になります。

  • 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
  • 遷移 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • 遷移 4: 0.0

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

ただし、ルートが start、pickup、delivery、pickup、delivery、end で、次のような遷移がある場合:

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

この LoadCost で発生する費用は次のとおりです。

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

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

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

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

フィールド
load_threshold

int64

この負荷量を超えると、負荷単位の移動コストが cost_per_unit_below_threshold から cost_per_unit_above_threshold に変わります。0 以上である必要があります。

cost_per_unit_below_threshold

double

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

cost_per_unit_above_threshold

double

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

TravelMode

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

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

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

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

UnloadingPolicy

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

他の配送は、unloading_policy とは無関係に、ルート上のどこでも行うことができます。

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

VehicleFullness

VehicleFullness は、車両の積載量を計算する指標です。各 VehicleFullness フィールドは 0 ~ 1 の範囲で、上限付き指標フィールド(AggregatedMetrics.travel_distance_meters など)と、関連する車両の上限(Vehicle.route_distance_limit など)の比率として計算されます(存在する場合)。それ以外の場合、満杯率は未設定のままになります。上限が 0 の場合、フィールドは 1 に設定されます。注: ルートがトラフィックの制約を受ける場合、一部の未加工の充足率が 1.0 を超えることがあります。たとえば、車両が距離制限を超えることがあります。このような場合、充足度の値は 1.0 に制限されます。

フィールド
max_fullness

double

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

distance

double

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

travel_duration

double

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

active_duration

double

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

max_load

double

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

active_span

double

特定の車両の比率(vehicle_end_time - vehicle_start_time)/(latest_vehicle_end_time - earliest_vehicle_start_time)。分母が存在しない場合は、代わりに(ShipmentModel.global_end_time - ShipmentModel.global_start_time)が使用されます。

ウェイポイント

ウェイポイントをカプセル化します。ウェイポイントは、VisitRequest の到着場所と出発場所、車両の開始場所と終了場所を示します。

フィールド
side_of_road

bool

省略可。このウェイポイントの場所が、車両を優先的に道路の特定の側に停車することを意味することを示します。この値を設定すると、ルートがその場所を通過するようになり、車両は道路の中心からその場所が偏っている側の道路脇に停車できます。このオプションは、移動手段が「WALKING」の場合は機能しません。

vehicle_stopover

bool

車両が乗車または降車のために停車するウェイポイントであることを示します。このオプションは、移動モードが「DRIVING」で、「location_type」が「location」の場合にのみ機能します。

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

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

Location

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

place_id

string

ウェイポイントに関連付けられた POI のプレイス ID。

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