Method: projects.locations.optimizeTours
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
ShipmentModel
を含む OptimizeToursRequest
を送信し、さらに ShipmentRoute
を含む OptimizeToursResponse
を返します。この一連のルートは、全体的なコストを最小化するために車両が実行します。
ShipmentModel
モデルは主に、実行が必要な Shipment
と、Shipment
の転送に使用できる Vehicle
で構成されています。ShipmentRoute
は Shipment
を Vehicle
に割り当てます。具体的には、一連の Visit
を各車両に割り当てます。Visit
は VisitRequest
(Shipment
の集荷または配達)に対応します。
目標は、ShipmentModel
で定義されている多くのコンポーネントを含む費用の総費用を最小限に抑えるように、ShipmentRoute
を Vehicle
に割り当てることです。
HTTP リクエスト
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours
この URL は gRPC Transcoding 構文を使用します。
パスパラメータ
パラメータ |
parent |
string
必須。呼び出しを行うターゲット プロジェクトまたはロケーション。 形式: * projects/{project-id} * projects/{project-id}/locations/{location-id} ロケーションが指定されていない場合、リージョンが自動的に選択されます。
|
リクエスト本文
リクエストの本文には、次の構造のデータが含まれます。
JSON 表現 |
{
"timeout": string,
"model": {
object (ShipmentModel )
},
"solvingMode": enum (SolvingMode ),
"searchMode": enum (SearchMode ),
"injectedFirstSolutionRoutes": [
{
object (ShipmentRoute )
}
],
"injectedSolutionConstraint": {
object (InjectedSolutionConstraint )
},
"refreshDetailsRoutes": [
{
object (ShipmentRoute )
}
],
"interpretInjectedSolutionsUsingLabels": boolean,
"considerRoadTraffic": boolean,
"populatePolylines": boolean,
"populateTransitionPolylines": boolean,
"allowLargeDeadlineDespiteInterruptionRisk": boolean,
"useGeodesicDistances": boolean,
"label": string,
"geodesicMetersPerSecond": number,
"maxValidationErrors": integer
} |
フィールド |
timeout |
string (Duration format)
このタイムアウトが設定されている場合、サーバーはタイムアウト期間が経過する前、または同期リクエストのサーバー期限が切れる前に、どちらか早い方でレスポンスを返します。 非同期リクエストの場合は、タイムアウト時間が経過する前にサーバーがソリューションを生成します(可能な場合)。 s で終わる小数 9 桁までの秒単位の期間。例: "3.5s" 。
|
model |
object (ShipmentModel )
解決する配送モデル。
|
solvingMode |
enum (SolvingMode )
デフォルトの解決モードは DEFAULT_SOLVE (0)です。
|
searchMode |
enum (SearchMode )
リクエストの解決に使用された検索モード。
|
injectedFirstSolutionRoutes[] |
object (ShipmentRoute )
以前のソリューションに類似した最初のソリューションを見つけるように最適化アルゴリズムをガイドします。 最初のソリューションが構築されると、モデルが制約されます。ルートで実行されない配送は、最初のソリューションで暗黙的にスキップされますが、後続のソリューションで実行される場合があります。 このソリューションは、次のような基本的な妥当性の前提を満たしている必要があります。
- すべてのルートで、
vehicleIndex は範囲内にあり、重複しないようにする必要があります。
- すべての訪問では、
shipmentIndex と visitRequestIndex が範囲内である必要があります。
- 1 つの配送は 1 つのルートでのみ参照できます。
- 受け取り、配達の集荷は配達前に行う必要があります。
- 1 つの配送について、複数の受け取りまたは配送の代替を行うことはできない。
- すべてのルートで時間が長くなる(例:
vehicleStartTime
<= visits[0].start_time <= visits[1].start_time ...
<= vehicleEndTime )。
- 配送は、許可されている車両でのみ行うことができます。
Shipment.allowed_vehicle_indices が空であるか、車両の vehicleIndex が Shipment.allowed_vehicle_indices に含まれている場合、車両は許可されます。
挿入された解が実行不可能な場合、必ずしも検証エラーが返されるとは限らず、代わりに実行可能性を示すエラーが返されることがあります。
|
injectedSolutionConstraint |
object (InjectedSolutionConstraint )
最適化アルゴリズムを制約して、以前の解に似た最終解を見つけます。たとえば、すでに完了しているルートや、もう完了するが変更してはならないルートの一部を凍結するために使用できます。 挿入されたソリューションが実行可能でない場合、検証エラーが返されるとは限らず、実行不可を示すエラーが返される場合があります。
|
refreshDetailsRoutes[] |
object (ShipmentRoute )
空でない場合、指定されたルートは更新されますが、訪問の順序や所要時間は変更されません。他の詳細のみが更新されます。これではモデルは解決されません。 2020 年 11 月時点では、空でないルートのポリラインのみが入力され、populatePolylines が true である必要があります。 渡されたルートの routePolyline フィールドが、ルート transitions と一致しない場合があります。 このフィールドを injectedFirstSolutionRoutes または injectedSolutionConstraint と併用することはできません。 Shipment.ignore と Vehicle.ignore は動作に影響しません。配送や車両が無視されるかどうかにかかわらず、空でないすべての経路のすべての訪問時にはポリラインが入力されます。
|
interpretInjectedSolutionsUsingLabels |
boolean
真の場合:
この解釈は、injectedFirstSolutionRoutes 、injectedSolutionConstraint 、refreshDetailsRoutes フィールドに適用されます。これは、ソリューションの作成後にリクエスト内の配送または車両のインデックスが変更された場合に使用できます。これは、配送または車両がリクエストから削除または追加されたことが原因である可能性があります。 true の場合、次のカテゴリのラベルはそのカテゴリ内に最大 1 回出現する必要があります。
挿入されたソリューションの vehicleLabel がリクエストの車両に対応していない場合、対応するルートは訪問とともにソリューションから削除されます。挿入されたソリューションの shipmentLabel がリクエスト配送に対応していない場合、対応する訪問はソリューションから削除されます。挿入されたソリューションの SkippedShipment.label がリクエストされた配送に一致しない場合、SkippedShipment はソリューションから削除されます。 挿入されたソリューションからルートの訪問またはルート全体を削除すると、暗黙的な制約に影響し、ソリューションの変更、検証エラー、実現不能につながる可能性があります。 注: 呼び出し元は、各 Vehicle.label (resp.Shipment.label )は、関連する 2 つのリクエスト(挿入されたソリューションで使用される OptimizeToursResponse を生成する過去のリクエストと、挿入されたソリューションが含まれる現在のリクエスト)で使用される車両(または配送)エンティティを一意に識別します。上記の一意性チェックだけでは、この要件を保証できません。
|
considerRoadTraffic |
boolean
ShipmentRoute フィールド Transition.travel_duration 、Visit.start_time 、vehicleEndTime の計算、ShipmentRoute.has_traffic_infeasibilities フィールドの設定、OptimizeToursResponse.total_cost フィールドの計算でトラフィックの見積もりを検討します。
|
populatePolylines |
boolean
true の場合、ポリラインはレスポンスの ShipmentRoute で入力されます。
|
populateTransitionPolylines |
boolean
true の場合、レスポンス ShipmentRoute.transitions にポリラインとルート トークンが入力されます。
|
allowLargeDeadlineDespiteInterruptionRisk |
boolean
これが設定されている場合、リクエストの期限は最大 60 分です(https://grpc.io/blog/deadlines をご覧ください)。それ以外の場合、最大期限は 30 分です。なお、長時間実行されるリクエストは、中断されるリスクが大幅に高くなります(それでも低いリスクです)。
|
useGeodesicDistances |
boolean
true の場合、移動距離は Google マップの距離ではなく測地線距離を使用して計算され、移動時間は geodesicMetersPerSecond で定義された速度で測地線距離を使用して計算されます。
|
label |
string
このリクエストを識別するために使用できるラベル。OptimizeToursResponse.request_label で返されます。
|
geodesicMetersPerSecond |
number
useGeodesicDistances が true の場合、このフィールドを設定し、移動時間の計算に適用される速度を定義する必要があります。この値は 1.0 メートル / 秒以上の値にする必要があります。
|
maxValidationErrors |
integer
返される検証エラーの数を切り捨てます。通常、これらのエラーは、solvingMode=VALIDATE_ONLY の場合を除き、INVALID_ARGUMENT エラー ペイロードに BadRequest エラーの詳細(https://cloud.google.com/apis/design/errors#error_details)としてアタッチされます。OptimizeToursResponse.validation_errors フィールドをご覧ください。デフォルトは 100 で、上限は 10,000 です。
|
レスポンスの本文
成功した場合、レスポンスの本文には OptimizeToursResponse
のインスタンスが含まれます。
認可スコープ
次の OAuth スコープが必要です。
https://www.googleapis.com/auth/cloud-platform
IAM 権限
parent
リソースに対する次の IAM 権限が必要です。
routeoptimization.locations.use
詳細については、IAM のドキュメントをご覧ください。
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-08-31 UTC。
[null,null,["最終更新日 2025-08-31 UTC。"],[[["\u003cp\u003eSends an \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e and returns an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e containing optimized \u003ccode\u003eShipmentRoute\u003c/code\u003es for a given \u003ccode\u003eShipmentModel\u003c/code\u003e and \u003ccode\u003eVehicle\u003c/code\u003es.\u003c/p\u003e\n"],["\u003cp\u003eThe service aims to minimize the total cost of routes by assigning \u003ccode\u003eShipment\u003c/code\u003es to \u003ccode\u003eVehicle\u003c/code\u003es and optimizing their \u003ccode\u003eVisit\u003c/code\u003e sequences.\u003c/p\u003e\n"],["\u003cp\u003eRequest body includes parameters to guide the optimization process such as timeout, model, solving mode, search mode, and constraints.\u003c/p\u003e\n"],["\u003cp\u003eThe response contains the optimized routes, including details like polylines, travel durations, and total cost.\u003c/p\u003e\n"],["\u003cp\u003eRequires the \u003ccode\u003ehttps://www.googleapis.com/auth/cloud-platform\u003c/code\u003e OAuth scope and \u003ccode\u003erouteoptimization.locations.use\u003c/code\u003e IAM permission.\u003c/p\u003e\n"]]],["This content describes the `OptimizeTours` API, which optimizes routes for shipments using vehicles. A `POST` request is sent to `https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours`. The request body includes a `ShipmentModel` specifying shipments and vehicles. The API then generates an `OptimizeToursResponse` with `ShipmentRoute`s, assigning `Visit`s (pickups/deliveries) to each vehicle to minimize total cost. Optional parameters allow traffic consideration, polyline population, and injected solution constraints. Authorization requires cloud platform scope and IAM permissions.\n"],null,[]]