Method: projects.locations.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/*/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 に含まれている場合、車両は許可されます。
avoidUTurns を true に設定する場合は、関連する訪問に injectedSolutionLocationToken を設定する必要があります
挿入された解が実行不可能な場合、必ずしも検証エラーが返されるとは限らず、代わりに実行可能性を示すエラーが返されることがあります。
|
injectedSolutionConstraint |
object (InjectedSolutionConstraint )
最適化アルゴリズムを制約して、前の解に似た最終的な解を見つけます。たとえば、すでに完了しているルートや、完了する予定だが変更してはならないルートの一部をフリーズできます。 挿入された解が実行不可能な場合、必ずしも検証エラーが返されるとは限らず、代わりに実行可能性を示すエラーが返されることがあります。
|
refreshDetailsRoutes[] |
object (ShipmentRoute )
空でない場合、指定されたルートは更新されますが、訪問の順序や所要時間は変更されません。他の詳細のみが更新されます。これではモデルが解決されません。 2020/11 の時点では、空でないルートのポリラインにのみデータが入力され、populatePolylines が true である必要があります。 渡されたルートの routePolyline フィールドがルート transitions と一致しない可能性があります。 このフィールドを injectedFirstSolutionRoutes または injectedSolutionConstraint と併用することはできません。 Shipment.ignore と Vehicle.ignore は動作に影響しません。配送や車両が無視されるかどうかにかかわらず、空でないすべての経路のすべての訪問時にはポリラインが入力されます。
|
interpretInjectedSolutionsUsingLabels |
boolean
true の場合:
この解釈は、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 m/秒以上である必要があります。
|
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 service optimizes routes for shipments, assigning them to vehicles to minimize overall costs, based on a \u003ccode\u003eShipmentModel\u003c/code\u003e that defines shipments, vehicles, and various cost components.\u003c/p\u003e\n"],["\u003cp\u003eThe \u003ccode\u003eOptimizeToursRequest\u003c/code\u003e includes parameters like \u003ccode\u003etimeout\u003c/code\u003e, \u003ccode\u003emodel\u003c/code\u003e, and \u003ccode\u003esolvingMode\u003c/code\u003e, which influence the optimization process, and the \u003ccode\u003emodel\u003c/code\u003e parameter specifies the \u003ccode\u003eShipmentModel\u003c/code\u003e to use for the routes.\u003c/p\u003e\n"],["\u003cp\u003eThe HTTP request uses a \u003ccode\u003ePOST\u003c/code\u003e method with a URL structure \u003ccode\u003ehttps://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours\u003c/code\u003e, accepting a JSON request body that contains the \u003ccode\u003eShipmentModel\u003c/code\u003e and other settings.\u003c/p\u003e\n"],["\u003cp\u003eThe service offers options to refine solutions with previous data, via \u003ccode\u003einjectedFirstSolutionRoutes\u003c/code\u003e or \u003ccode\u003einjectedSolutionConstraint\u003c/code\u003e, and can refresh existing routes without changing their sequence with \u003ccode\u003erefreshDetailsRoutes\u003c/code\u003e.\u003c/p\u003e\n"],["\u003cp\u003eThe request can specify details like considering road traffic, populating polylines, using geodesic distances, and setting time limits, and returns an \u003ccode\u003eOptimizeToursResponse\u003c/code\u003e upon success.\u003c/p\u003e\n"]]],[],null,[]]