Method: projects.optimizeTours

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

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

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

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)

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

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

model

object (ShipmentModel)

解決する配送モデル。

solvingMode

enum (SolvingMode)

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

searchMode

enum (SearchMode)

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

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

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

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

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

  • すべてのルートで、vehicleIndex は範囲内であり、重複していない必要があります。
  • すべての訪問について、shipmentIndex と visitRequestIndex が範囲内にある必要があります。
  • 1 つの配送を参照できるのは 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

true の場合:

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

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

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

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

注: 呼び出し元は、各 Vehicle.label(または )が (または )の有効なインデックスであることを確認する必要があります。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

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

useGeodesicDistances

boolean

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

label

string

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

geodesicMetersPerSecond

number

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

maxValidationErrors

integer

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

レスポンスの本文

成功した場合、レスポンスの本文には OptimizeToursResponse のインスタンスが含まれます。

認可スコープ

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

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

IAM 権限

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

  • routeoptimization.locations.use

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