Method: projects.optimizeTours

ShipmentModel を含む OptimizeToursRequest を送信し、ShipmentRoute を含む OptimizeToursResponse を返します。ShipmentRoute は、全体的なコストを最小限に抑える車両で実行される一連のルートです。

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

目標は、費用に多数のコンポーネントが ShipmentModel で定義されている場合の合計費用を最小限に抑えるために、VehicleShipmentRoute を割り当てることです。

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 は範囲内にあり、重複しないようにする必要があります。
  • すべての訪問について、shipmentIndexvisitRequestIndex は範囲内である必要があります。
  • 1 つの配送は 1 つのルートでのみ参照できます。
  • 集荷と配達の荷物の集荷は配達前に行う必要があります。
  • 集荷の代替または配送の代替手段は 1 つのみ実施できます。
  • 時間が増加している(すなわちvehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • 許可された車両でのみ出荷を行うことができます。Shipment.allowed_vehicle_indices が空であるか、車両の vehicleIndexShipment.allowed_vehicle_indices に含まれている場合、車両は許可されます。

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

injectedSolutionConstraint

object (InjectedSolutionConstraint)

最適化アルゴリズムを制限して、以前の解とよく似た最終的な解を見つけます。たとえば、完了済みのルート、または完了する予定のが変更できないルートの一部を凍結するために使用できます。

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

refreshDetailsRoutes[]

object (ShipmentRoute)

空でない場合は、指定された経路の訪問順序や移動時間はそのままで更新されます。その他の詳細情報のみが更新されます。モデルは解決しません。

2020 年 11 月現在、空でないルートのポリラインのみが表示され、populatePolylines が true である必要があります。

渡されたルートの routePolyline フィールドがルート transitions と一致しない場合があります。

このフィールドを injectedFirstSolutionRoutes または injectedSolutionConstraint と併用することはできません。

Shipment.ignoreVehicle.ignore は動作に影響しません。空でないルートでは、関連する荷物や車両が無視されたかどうかに関係なく、すべての訪問間で引き続きポリラインが入力されます。

interpretInjectedSolutionsUsingLabels

boolean

true の場合:

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

true の場合、次のカテゴリのラベルはカテゴリ内で 1 回だけ使用できます。

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

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

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

considerRoadTraffic

boolean

ShipmentRoute フィールド Transition.travel_durationVisit.start_timevehicleEndTime の計算、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 メートル/秒以上にする必要があります。

maxValidationErrors

integer

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

レスポンスの本文

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

承認スコープ

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

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