Method: projects.optimizeTours
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
ShipmentModel
を含む OptimizeToursRequest
を送信し、ShipmentRoute
を含む OptimizeToursResponse
を返します。ShipmentRoute
は、車両が実行するルートのセットであり、総費用を最小限に抑えます。
ShipmentModel
モデルは、実行する必要がある Shipment
と、Shipment
の転送に使用できる Vehicle
で構成されています。ShipmentRoute
は Shipment
を Vehicle
に割り当てます。具体的には、各車両に一連の Visit
を割り当てます。Visit
は VisitRequest
に対応し、Shipment
の集荷または配達を表します。
目的は、費用に ShipmentModel
で定義された多くのコンポーネントがある場合に総費用を最小限に抑えるために、ShipmentRoute
を Vehicle
に割り当てることです。
HTTP リクエスト
POST https://routeoptimization.googleapis.com/v1/{parent=projects/*}: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 に含まれている場合、車両は許可されます。
avoidUTurns を true に設定する場合は、関連する訪問に injectedSolutionLocationToken を設定する必要があります
挿入されたソリューションが実行可能でない場合、検証エラーが返されるとは限らず、実行不可を示すエラーが返される場合があります。
|
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
返された検証エラーの数を切り捨てます。これらのエラーは通常、BadRequest エラーの詳細(https://cloud.google.com/apis/design/errors#error_details)として INVALID_ARGUMENT エラー ペイロードに添付されます。ただし、resolveMode=VALIDATE_ONLY(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-29 UTC。
[null,null,["最終更新日 2025-08-29 UTC。"],[[["\u003cp\u003eThis API optimizes delivery routes by sending an \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e with a \u003ccode\u003eShipmentModel\u003c/code\u003e, and it returns an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e that includes \u003ccode\u003eShipmentRoute\u003c/code\u003es, which outline the routes for vehicles to minimize cost.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eShipmentModel\u003c/code\u003e includes \u003ccode\u003eShipment\u003c/code\u003es that require transport and \u003ccode\u003eVehicle\u003c/code\u003es available for use, with the goal being to assign \u003ccode\u003eShipmentRoute\u003c/code\u003es to \u003ccode\u003eVehicle\u003c/code\u003es efficiently to reduce overall cost.\u003c/p\u003e\n"],["\u003cp\u003eThe HTTP request uses a \u003ccode\u003ePOST\u003c/code\u003e method to the \u003ccode\u003ehttps://routeoptimization.googleapis.com/v1/{parent=projects/*}:optimizeTours\u003c/code\u003e endpoint, utilizing gRPC Transcoding syntax, and requiring the \u003ccode\u003eparent\u003c/code\u003e parameter to specify the project or location.\u003c/p\u003e\n"],["\u003cp\u003eThe request body includes fields such as \u003ccode\u003etimeout\u003c/code\u003e, \u003ccode\u003emodel\u003c/code\u003e, \u003ccode\u003esolvingMode\u003c/code\u003e, and \u003ccode\u003esearchMode\u003c/code\u003e, allowing for customization of the optimization process, and other parameters related to route details, and injected solutions.\u003c/p\u003e\n"],["\u003cp\u003eThe API requires the \u003ccode\u003ehttps://www.googleapis.com/auth/cloud-platform\u003c/code\u003e OAuth scope and the \u003ccode\u003erouteoptimization.locations.use\u003c/code\u003e IAM permission on the parent resource for authorization.\u003c/p\u003e\n"]]],[],null,[]]