Package google.maps.routeoptimization.v1

インデックス

RouteOptimization

車両ツアーを最適化するためのサービス。

特定のタイプのフィールドの有効性:

  • google.protobuf.Timestamp
    • 時刻は Unix 時間(1970-01-01T00:00:00+00:00 からの秒数)で表されます。
    • 秒は [0, 253402300799] の範囲で指定する必要があります(例: [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00])。
    • nanos は未設定のままにするか、0 に設定する必要があります。
  • google.protobuf.Duration
    • 秒は [0, 253402300799] の範囲で指定する必要があります(例: [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00])。
    • nanos は未設定のままにするか、0 に設定する必要があります。
  • google.type.LatLng
    • 緯度は [-90.0, 90.0] の範囲で指定してください。
    • 経度は [-180.0, 180.0] の範囲内になければなりません。
    • 緯度と経度の少なくとも 1 つはゼロ以外である必要があります。
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

1 つ以上の OptimizeToursRequest メッセージのバッチツアーを最適化します。

この方法は、長時間実行オペレーション(LRO)です。最適化のための入力(OptimizeToursRequest メッセージ)と出力(OptimizeToursResponse メッセージ)は、ユーザーが指定した形式で Cloud Storage との間で読み書きされます。OptimizeTours メソッドと同様に、各 OptimizeToursRequest には ShipmentModel が含まれ、全体的なコストを最小限に抑えるために車両が実行する一連のルートである ShipmentRoute を含む OptimizeToursResponse を返します。

ユーザーは operations.get をポーリングして LRO のステータスを確認できます。

LRO の done フィールドが false の場合、少なくとも 1 つのリクエストが処理中です。他のリクエストは正常に完了し、その結果は GCS で使用できる場合があります。

LRO の done フィールドが true の場合、すべてのリクエストが処理されています。正常に処理されたリクエストの結果は GCS で利用できるようになります。失敗したリクエストの結果は GCS で使用できません。LRO の error フィールドが設定されている場合、失敗したリクエストのエラーが含まれます。

認可スコープ

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

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

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

  • routeoptimization.operations.create

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

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

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

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

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

認可スコープ

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

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

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

  • routeoptimization.locations.use

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

AggregatedMetrics

ShipmentRoute(すべての Transition 要素または Visit(すべての ShipmentRoute 要素に対する OptimizeToursResponse)に対応)の集計指標。

フィールド
performed_shipment_count

int32

実施した配送の数。受け取りと配送の組み合わせは 1 回のみカウントされます。

travel_duration

Duration

ルートまたはソリューションの合計移動時間。

wait_duration

Duration

ルートまたはソリューションの合計待機時間。

delay_duration

Duration

経路またはソリューションの遅延の合計時間。

break_duration

Duration

ルートまたはソリューションの総休憩時間。

visit_duration

Duration

ルートまたはソリューションの訪問の合計時間。

total_duration

Duration

合計時間は、上記のすべての時間の合計と等しくする必要があります。ルートの場合は、以下も対応します。

[ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time] - [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
travel_distance_meters

double

ルートまたはソリューションの総移動距離。

max_loads

map<string, VehicleLoad>

ルート全体で達成された最大負荷(対応ソリューション)。このルート上の各数量(対応ソリューション)に対して計算され、すべての Transition.vehicle_loads(対応ソリューション)の最大負荷として計算されます。ShipmentRoute.metrics.max_loads

BatchOptimizeToursMetadata

この型にはフィールドがありません。

BatchOptimizeToursRequest 呼び出しのオペレーション メタデータ。

BatchOptimizeToursRequest

非同期オペレーションとしてツアーを一括最適化するリクエスト。各入力ファイルには 1 つの OptimizeToursRequest が含まれ、各出力ファイルには 1 つの OptimizeToursResponse が含まれます。リクエストには、ファイルの読み取り / 書き込みと解析に関する情報が含まれます。入力ファイルと出力ファイルはすべて同じプロジェクトに配置する必要があります。

フィールド
parent

string

必須。呼び出しを行うターゲット プロジェクトとロケーション。

形式: * projects/{project-id} * projects/{project-id}/locations/{location-id}

ロケーションが指定されていない場合、リージョンが自動的に選択されます。

model_configs[]

AsyncModelConfig

必須。各購入モデルの入出力情報(ファイルパス、データ形式など)。

AsyncModelConfig

1 つの最適化モデルを非同期で解決するための情報。

フィールド
display_name

string

省略可。ユーザー定義のモデル名。モデルを追跡するためにユーザーがエイリアスとして使用できます。

input_config

InputConfig

必須。入力モデルに関する情報。

output_config

OutputConfig

必須。目的の出力場所情報。

BatchOptimizeToursResponse

この型にはフィールドがありません。

BatchOptimizeToursRequest に対するレスポンス。これは、オペレーションの完了後に長時間実行オペレーションで返されます。

BreakRule

車両の休憩(昼休みなど)を生成するルール。休憩とは、車両が現在の位置でアイドリング状態を維持し、車両をまったく訪問できない連続した時間のことです。次のような場合に中断が発生する可能性があります。

  • 2 回の訪問間の移動中(訪問の前後を含むが、訪問中は含まない)に発生した場合、その訪問間の移動時間が延長されます。
  • 車両の始動前(休憩の途中で始動しない場合もあります)。この場合、車両の始動時間には影響しません。
  • または車両の終了時間後(同上、車両の終了時間で指定する)。
フィールド
break_requests[]

BreakRequest

休憩の順序。BreakRequest メッセージをご覧ください。

frequency_constraints[]

FrequencyConstraint

複数のFrequencyConstraintが適用される場合があります。これらはすべて、この BreakRuleBreakRequest で満たされる必要があります。FrequencyConstraint をご覧ください。

BreakRequest

各車両に適用されるブレークの順序(その回数と順序)を事前に把握しておく必要があります。繰り返される BreakRequest は、発生順にそのシーケンスを定義します。時間枠(earliest_start_time / latest_start_time)は重複する場合がありますが、順序との互換性がある必要があります(チェックが入っています)。

フィールド
earliest_start_time

Timestamp

必須。ブレーク開始の下限(両端を含む)。

latest_start_time

Timestamp

必須。ブレーク開始の上限(両端を含む)。

min_duration

Duration

必須。休憩の最小時間。正の値である必要があります。

FrequencyConstraint

「12 時間ごとに少なくとも 1 時間の休憩が必要」など、休憩の最小頻度を適用することで、上記で指定した休憩の頻度と期間を、さらに制限することもできます。これが「12 時間のスライディング タイム ウィンドウ内に、少なくとも 1 時間の休憩が少なくとも 1 回はある」と解釈できると仮定すると、この例では、FrequencyConstraint は次のようになります。

{
   min_break_duration { seconds: 3600 }         # 1 hour.
   max_inter_break_duration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

ソリューション内の休憩のタイミングと長さは、BreakRequest ですでに指定されている時間帯と最小時間に加えて、このような制約をすべて遵守します。

実際には、FrequencyConstraint は連続しない休憩に適用できます。たとえば、次のスケジュールは「12 時間ごとに 1 時間」の例に従います。

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
フィールド
min_break_duration

Duration

必須。この制約の最小ブレーク時間。非負。FrequencyConstraint の説明をご覧ください。

max_inter_break_duration

Duration

必須。duration >= min_break_duration の中断部分を含まない、ルートの任意の時間間隔の最大許容スパン。正の値である必要があります。

DataFormat

入力ファイルと出力ファイルのデータ形式。

列挙型
DATA_FORMAT_UNSPECIFIED 値が無効です。形式を [指定しない] にすることはできません。
JSON JavaScript Object Notation。
PROTO_TEXT プロトコル バッファのテキスト形式。https://protobuf.dev/reference/protobuf/textformat-spec/ をご覧ください。

DistanceLimit

移動可能な最大距離を定義する制限。ハードまたはソフトのいずれかです。

ソフトリミットを定義する場合は、soft_max_meterscost_per_kilometer_above_soft_max の両方を定義して負でない値にする必要があります。

フィールド
max_meters

int64

距離を max_meters 以下に制限するハード制限。上限は負でない値にしてください。

soft_max_meters

int64

ソフトリミットは、最大距離制限を適用しませんが、違反した場合、同じ単位でモデルで定義された他のコストに加算されます。

定義する場合、soft_max_meters は max_meters よりも小さく、負でない値にする必要があります。

cost_per_kilometer_below_soft_max

double

1 キロメートルあたりの費用は、次の数式により最大 soft_max_meters まで増加します。

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

この費用は route_distance_limit ではサポートされていません。

cost_per_kilometer_above_soft_max

double

距離が soft_max_meters の上限を超える場合、1 キロメートルあたりの費用が発生します。距離が制限を下回っている場合、追加費用は 0 になります。それ以外の場合は、費用の計算に次の式が使用されます。

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

費用は負でない値にしてください。

GcsDestination

出力ファイルが書き込まれる Google Cloud Storage 上のロケーションです。

フィールド
uri

string

必須。Google Cloud Storage URI。

GcsSource

入力ファイルの読み取り元の Google Cloud Storage のロケーション。

フィールド
uri

string

必須。gs://bucket/path/to/object 形式の Google Cloud Storage オブジェクトの URI。

InjectedSolutionConstraint

制限対象の訪問と制限方法に関する情報を含む、リクエストに注入された解決策。

フィールド
routes[]

ShipmentRoute

挿入するソリューションのルート。一部のルートは、元のソリューションから省略されている場合があります。ルートとスキップされた配送は、injected_first_solution_routes に記載されている基本的な有効性の前提条件を満たす必要があります。

skipped_shipments[]

SkippedShipment

挿入するソリューションの発送をスキップした。一部は元のソリューションで省略されている場合があります。routes フィールドをご覧ください。

constraint_relaxations[]

ConstraintRelaxation

0 個以上の車両グループに対して、制約を緩和するタイミングと程度を指定します。このフィールドが空の場合、空でないすべての車両経路に制約が適用されます。

ConstraintRelaxation

車両のグループに対して、訪問時の制約を緩和するしきい値と緩和するレベルを指定します。skipped_shipment フィールドにリストされる配送はスキップされます。つまり実行できません

フィールド
relaxations[]

Relaxation

vehicle_indices の車両が通るルートの訪問に適用されるすべての訪問制約の緩和。

vehicle_indices[]

int32

訪問制約 relaxations が適用される車両インデックスを指定します。空の場合、これがデフォルトとみなされ、relaxations は他の constraint_relaxations で指定されていないすべての車両に適用されます。デフォルトは 1 つだけです。つまり、vehicle_indices を空にできる制約緩和フィールドは最大で 1 つです。車両インデックスは、複数の constraint_relaxations 内でも 1 回だけリストに含めることができます。

interpret_injected_solutions_using_labels が true の場合、車両インデックスは ShipmentRoute.vehicle_index と同じようにマッピングされます(fields コメントを参照)。

リラクゼーション

relaxations が空の場合、routes のすべての訪問の開始時間と順序が完全に制限され、これらの経路に新しい訪問を挿入したり追加したりすることはできません。また、車両が空の場合(訪問がなく、モデルで used_if_route_is_empty が false に設定されている場合)を除き、routes の車両の開始時間と終了時間は完全に制約されます。

relaxations(i).level は、訪問 #j に適用され、次の条件を満たす制約緩和レベルを指定します。

  • route.visits(j).start_time >= relaxations(i).threshold_time、および
  • j + 1 >= relaxations(i).threshold_visit_count

同様に、次の条件を満たす場合、車両の始動は relaxations(i).level に緩和されます。

  • vehicle_start_time >= relaxations(i).threshold_time、および
  • relaxations(i).threshold_visit_count == 0 で、車両の終端が次の条件を満たす場合は relaxations(i).level に緩和されます。
  • vehicle_end_time >= relaxations(i).threshold_time AND
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

訪問が threshold_visit_count または threshold_time の条件を満たしている場合に緩和レベルを適用するには、同じ level を持つ 2 つの relaxations を追加します。1 つは threshold_visit_count のみを設定し、もう 1 つは threshold_time のみを設定します。訪問が複数の relaxations の条件を満たしている場合は、最も緩やかなレベルが適用されます。その結果、車両の始点からルートの訪問を順にたどって車両の終点に至るまで、リラックス レベルはよりリラックスした状態になります。つまり、ルートの進行に伴ってリラックス レベルが低下することはありません。

relaxations のしきい値条件を満たさないルート訪問のタイミングとシーケンスは完全に制限されており、これらのシーケンスに訪問は挿入できません。また、車両の始動または終了が緩和の条件を満たさない場合は、車両が空でない限り、時間は固定されます。

フィールド
level

Level

threshold_time 以降かつ少なくとも threshold_visit_count の条件が満たされた場合に適用される制約緩和レベル。

threshold_time

Timestamp

緩和 level が適用される時間。

threshold_visit_count

int32

緩和 level が適用される時点またはそれ以降の訪問回数。threshold_visit_count が 0(または未設定)の場合、level を車両の開始時に直接適用できます。

route.visits_size() + 1 の場合、level は車両端にのみ適用できます。route.visits_size() + 1 を超える場合、そのルートには level が適用されません。

レベル

訪問に適用されるさまざまな制約緩和レベルと、しきい値条件を満たす場合に続く制約緩和レベルを表します。

以下の列挙は、緩和が増加する順序です。

列挙型
LEVEL_UNSPECIFIED

暗黙のデフォルトの緩和レベル: 制約は緩和されません。つまり、すべての訪問が完全に制約されます。

この値は level で明示的に使用しないでください。

RELAX_VISIT_TIMES_AFTER_THRESHOLD 訪問の開始時間と車両の開始/終了時間は緩和されますが、各訪問は同じ車両にバインドされたままであり、訪問の順序を守る必要があります。訪問をそれらの間や前に挿入することはできません。
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD RELAX_VISIT_TIMES_AFTER_THRESHOLD と同じですが、訪問シーケンスも緩和されます。訪問はこの車両でのみ実行できますが、実行できなくなる可能性があります。
RELAX_ALL_AFTER_THRESHOLD RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD と同じですが、車両も緩和されます。しきい値時間以降、訪問は完全に無料となり、実行されなくなる可能性があります。

InputConfig

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] の入力を指定します。

フィールド
data_format

DataFormat

必須。入力データ形式。

共用体フィールド source。必須。source は次のいずれかになります。
gcs_source

GcsSource

Google Cloud Storage のロケーション。これは単一のオブジェクト(ファイル)にする必要があります。

場所

場所(地理的位置、および省略可能な方角)をカプセル化します。

フィールド
lat_lng

LatLng

ウェイポイントの地理座標。

heading

int32

交通の流れの方向に関連付けられたコンパス方位。この値は、乗車場所と降車場所のどちら側かを指定するために使用されます。見出しの値は 0 から 360 までで、0 は真北の見出し、90 は真東の見出し、というようになります。

OptimizeToursRequest

解決する配送モデルと最適化パラメータを定義するツアー最適化ソルバーへのリクエストです。

フィールド
parent

string

必須。呼び出しを行うターゲット プロジェクトまたはロケーション。

形式: * projects/{project-id} * projects/{project-id}/locations/{location-id}

ロケーションが指定されていない場合、リージョンは自動的に選択されます。

timeout

Duration

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

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

model

ShipmentModel

解決する配送モデル。

solving_mode

SolvingMode

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

search_mode

SearchMode

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

injected_first_solution_routes[]

ShipmentRoute

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

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

このソリューションは、次のような基本的な妥当性の前提を満たしている必要があります。

  • すべてのルートで、vehicle_index は範囲内にあり、重複していない必要があります。
  • すべての訪問で、shipment_indexvisit_request_index が範囲内である必要があります。
  • 1 つの配送は 1 つのルートでのみ参照できます。
  • 集荷配送の集荷は、配送の前に行う必要があります。
  • 1 つの配送について、複数の受け取りまたは配送の代替を行うことはできない。
  • すべてのルートで所要時間が増加(vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time)。
  • 許可された車両でしか発送できない場合。Shipment.allowed_vehicle_indices が空であるか、その vehicle_indexShipment.allowed_vehicle_indices に含まれている場合、車両は許可されます。

挿入された解が実行不可能な場合、必ずしも検証エラーが返されるとは限らず、代わりに実行可能性を示すエラーが返されることがあります。

injected_solution_constraint

InjectedSolutionConstraint

最適化アルゴリズムを制約して、前の解に似た最終的な解を見つけます。たとえば、すでに完了しているルートや、完了する予定だが変更できないルートの一部をフリーズできます。

挿入された解が実行不可能な場合、必ずしも検証エラーが返されるとは限らず、代わりに実行可能性を示すエラーが返されることがあります。

refresh_details_routes[]

ShipmentRoute

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

2020/11 の時点では、空でないルートのポリラインにのみデータが入力され、populate_polylines が true である必要があります。

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

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

Shipment.ignoreVehicle.ignore は動作に影響しません。配送や車両が無視されるかどうかにかかわらず、空でないすべての経路のすべての訪問時にはポリラインが入力されます。

interpret_injected_solutions_using_labels

bool

true の場合:

この解釈は、injected_first_solution_routesinjected_solution_constraintrefresh_details_routes フィールドに適用されます。これは、ソリューションの作成後にリクエスト内の配送または車両のインデックスが変更された場合に使用できます。これは、配送または車両がリクエストから削除または追加されたことが原因である可能性があります。

true の場合、次のカテゴリのラベルはそのカテゴリ内に最大 1 回出現する必要があります。

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

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

注: 呼び出し元は、各 Vehicle.label(resp.Shipment.label など)は、2 つの関連リクエスト(挿入されたソリューションで使用される OptimizeToursResponse を生成した過去のリクエストと、挿入されたソリューションを含む現在のリクエスト)で使用される車両(応答配送)エンティティを一意に識別します。上記の一意性チェックは、この要件を保証するには不十分です。

consider_road_traffic

bool

ShipmentRoute フィールドの Transition.travel_durationVisit.start_timevehicle_end_time の計算では、トラフィックの見積もりを考慮します。ShipmentRoute.has_traffic_infeasibilities フィールドの設定と OptimizeToursResponse.total_cost フィールドの計算における。

populate_polylines

bool

true の場合、ポリラインはレスポンスの ShipmentRoute で入力されます。

populate_transition_polylines

bool

true の場合、ポリラインはレスポンス ShipmentRoute.transitions で入力されます。

allow_large_deadline_despite_interruption_risk

bool

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

use_geodesic_distances

bool

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

label

string

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

geodesic_meters_per_second

double

use_geodesic_distances が true の場合、このフィールドを設定する必要があります。このフィールドには、所要時間の計算に適用される速度を定義します。値は 1.0 メートル/秒以上である必要があります。

max_validation_errors

int32

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

SearchMode

検索の動作を定義するモード。レイテンシとソリューションの品質とをトレードオフします。どのモードでも、グローバル リクエストの期限が適用されます。

列挙型
SEARCH_MODE_UNSPECIFIED 未指定の検索モード。RETURN_FAST と同等です。
RETURN_FAST 最初に適切な解決策が見つかったら、検索を中止します。
CONSUME_ALL_AVAILABLE_TIME より優れたソリューションを見つけるために、利用可能な時間をすべて使ってください。

SolvingMode

ソルバがリクエストを処理する方法を定義します。VALIDATE_ONLY を除くすべてのモードで、リクエストが無効な場合、INVALID_REQUEST エラーが返されます。返されるエラーの数を制限するには、max_validation_errors をご覧ください。

列挙型
DEFAULT_SOLVE モデルを解く。警告は [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors] で発行される場合があります。
VALIDATE_ONLY モデルを解決せずに検証のみを行います。可能な限り多くの OptimizeToursResponse.validation_errors を入力します。
DETECT_SOME_INFEASIBLE_SHIPMENTS

OptimizeToursResponse.validation_errors または OptimizeToursResponse.skipped_shipments にのみ値が入力されます。リクエストの残りの部分は実際に解決されません(レスポンスで statusroutes は設定されません)。injected_solution_constraint ルートで実現不可能であることが検出された場合は、OptimizeToursResponse.validation_errors フィールドに入力され、OptimizeToursResponse.skipped_shipments は空のままになります。

重要: すべての実行不可能な配送がここで返されるわけではなく、前処理中に実行不可能として検出されたもののみが返されます。

OptimizeToursResponse

ツアー最適化の問題を解決した後の対応

フィールド
routes[]

ShipmentRoute

各車両で計算されたルートi 番目のルートはモデルの i 番目の車両に対応しています。

request_label

string

OptimizeToursRequest.label のコピー(リクエストでラベルが指定されている場合)。

skipped_shipments[]

SkippedShipment

スキップされたすべての配送のリスト。

validation_errors[]

OptimizeToursValidationError

個別に検出できたすべての検証エラーのリスト。OptimizeToursValidationError メッセージの「複数のエラー」の説明をご覧ください。solving_modeDEFAULT_SOLVE の場合、エラーの代わりに警告が含まれます。

metrics

Metrics

このソリューションの期間、距離、使用状況の指標。

指標

すべてのルートについて集計された全体的な指標。

フィールド
aggregated_route_metrics

AggregatedMetrics

ルート全体にわたって集計されます。各指標は、同じ名前のすべての ShipmentRoute.metrics フィールドの合計(または負荷の場合は最大)です。

skipped_mandatory_shipment_count

int32

スキップされた必須配送の数。

used_vehicle_count

int32

使用台数。注: 車両のルートが空で、Vehicle.used_if_route_is_empty が true の場合、車両は使用済みと見なされます。

earliest_vehicle_start_time

Timestamp

中古車の最も早い開始時間。ShipmentRoute.vehicle_start_time のすべての中古車における最小値として計算されます。

latest_vehicle_end_time

Timestamp

中古車の最も遅い終了時間。ShipmentRoute.vehicle_end_time のすべての中古車における最大値として計算されます。

costs

map<string, double>

費用関連のリクエスト フィールド別のソリューションの費用。キーは、入力 OptimizeToursRequest に対する相対パスの proto パスです。次に例を示します。「model.shipments.pickups.cost」で、値は対応する費用フィールドで生成された合計費用で、ソリューション全体で集計されます。つまり、cost["model.shipments.pickups.cost"] は、ソリューションのすべての受け取り費用の合計です。2022 年 1 月時点で集計された形でのみ報告される TransitionAttributes に関連する費用を除き、モデルで定義されたすべての費用は、ここで詳細に報告されます。

total_cost

double

ソリューションの総費用。費用マップのすべての値の合計。

OptimizeToursValidationError

OptimizeToursRequest の検証時に発生したエラーまたは警告について説明します。

フィールド
code

int32

検証エラーは、常に存在するペア(codedisplay_name)で定義されます。

その他のフィールド(下記)には、エラーに関する詳細情報が表示されます。

複数のエラー: 複数のエラーがある場合、検証プロセスではそれらのエラーのうちいくつかが出力されます。コンパイラのように、これは不完全なプロセスです。一部の検証エラーは「致命的」であり、検証プロセス全体が停止します。これは、display_name="UNSPECIFIED" エラーの場合に該当します。場合によっては、検証プロセスで他のエラーをスキップすることもあります。

STABILITY: codedisplay_name は非常に安定しているはずです。ただし、新しいコードや表示名は時間が経つと表示される場合があります。そのため、特定の(無効な)リクエストで別の(codedisplay_name)ペアが生成される可能性があります。これは、新しいエラーによって古いリクエストが隠されていたためです(「複数のエラー」を参照)。

参照: すべての(コードと名前)ペアのリスト。

  • 指定なし = 0
  • VALIDATION_TIMEOUT_ERROR = 10;期限内に検証を完了できませんでした。
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_MODE = 1201 です。
    • REQUEST_OPTIONS_INVALID_MAX_VALIDATION_ERRORS = 1203、
    • REQUEST_OPTIONS_INVALID_GEODESIC_METERS_PER_SECOND = 1204 です。
    • REQUEST_OPTIONS_GEODESIC_METERS_PER_SECOND_TOO_SMALL = 1205;
    • REQUEST_OPTIONS_MISSING_GEODESIC_METERS_PER_SECOND = 1206;
    • REQUEST_OPTIONS_POPULATE_PATHFINDER_TRIPS_AND_GEODESIC_DISTANCE = 1207;
    • REQUEST_OPTIONS_COST_MODEL_OPTIONS_AND_GEODESIC_DISTANCE = 1208;
    • REQUEST_OPTIONS_TRAVEL_MODE_INCOMPATIBLE_WITH_TRAFFIC = 1211;
    • REQUEST_OPTIONS_MULTIPLE_TRAFFIC_FLAVORS = 1212;
    • REQUEST_OPTIONS_INVALID_TRAFFIC_FLAVOR = 1213;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITHOUT_GLOBAL_START_TIME = 1214;
    • REQUEST_OPTIONS_TRAFFIC_ENABLED_WITH_PRECEDENCES = 1215;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_MODE_INVALID = 1216、
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_ENABLED_WITHOUT_TRAFFIC = 1217;
  • INJECTED_SOLUTION_ERROR = 20;
    • INJECTED_SOLUTION_MISSING_LABEL = 2000;
    • INJECTED_SOLUTION_DUPLICATE_LABEL = 2001;
    • INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
    • INJECTED_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES = 2003;
    • INJECTED_SOLUTION_TRANSITION_INCONSISTENT_WITH_ACTUAL_TRAVEL = 2004
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005
    • INJECTED_SOLUTION_MORE_THAN_ONE_PER_TYPE = 2006
    • INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • SHIPMENT_MODEL_ERROR = 22;
    • SHIPMENT_MODEL_TOO_LARGE = 2200;
    • SHIPMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_NEGATIVE_OR_NAN = 2202;
    • SHIPMENT_MODEL_GLOBAL_END_TIME_TOO_LARGE_OR_NAN = 2203;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_AFTER_GLOBAL_END_TIME = 2204;
    • SHIPMENT_MODEL_GLOBAL_DURATION_TOO_LONG = 2205;
    • SHIPMENT_MODEL_MAX_ACTIVE_VEHICLES_NOT_POSITIVE = 2206;
    • SHIPMENT_MODEL_DURATION_MATRIX_TOO_LARGE = 2207;
  • INDEX_ERROR = 24;
  • TAG_ERROR = 26;
  • TIME_WINDOW_ERROR = 28;
    • TIME_WINDOW_INVALID_START_TIME = 2800
    • TIME_WINDOW_INVALID_END_TIME = 2801
    • TIME_WINDOW_INVALID_SOFT_START_TIME = 2802 です。
    • TIME_WINDOW_INVALID_SOFT_END_TIME = 2803。
    • TIME_WINDOW_OUTSIDE_GLOBAL_TIME_WINDOW = 2804;
    • TIME_WINDOW_START_TIME_AFTER_END_TIME = 2805;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_AFTER_SOFT_END_TIME = 2807;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808
    • TIME_WINDOW_COST_AFTER_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • TIME_WINDOW_SOFT_START_TIME_WITHOUT_COST_BEFORE_SOFT_START_TIME = 2810;
    • TIME_WINDOW_SOFT_END_TIME_WITHOUT_COST_AFTER_SOFT_END_TIME = 2811;
    • TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2812;
    • TIME_WINDOW_START_TIME_AFTER_SOFT_START_TIME = 2813;
    • TIME_WINDOW_SOFT_START_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2819;
    • TIME_WINDOW_SOFT_END_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2820;
    • TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • TIME_WINDOW_COST_AFTER_SOFT_END_TIME_SET_AND_MULTIPLE_WINDOWS = 2818;
    • TRANSITION_ATTRIBUTES_ERROR = 30;
    • TRANSITION_ATTRIBUTES_INVALID_COST = 3000;
    • TRANSITION_ATTRIBUTES_INVALID_COST_PER_KILOMETER = 3001;
    • TRANSITION_ATTRIBUTES_DUPLICATE_TAG_PAIR = 3002;
    • TRANSITION_ATTRIBUTES_DISTANCE_LIMIT_MAX_METERS_UNSUPPORTED = 3003;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • TRANSITION_ATTRIBUTES_CONFLICTING_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_DESTINATION_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_CONFLICTING_DESTINATION_TAGS_FIELDS = 3007;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_NEGATIVE_OR_NAN = 3008;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_NEGATIVE_VALUE = 3100 です。
  • LOAD_LIMIT_ERROR = 33;
    • LOAD_LIMIT_INVALID_COST_ABOVE_SOFT_MAX = 3303;
    • LOAD_LIMIT_SOFT_MAX_WITHOUT_COST_ABOVE_SOFT_MAX = 3304;
    • LOAD_LIMIT_COST_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3305;
    • LOAD_LIMIT_NEGATIVE_SOFT_MAX = 3306;
    • LOAD_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • LOAD_LIMIT_MAX_LOAD_NEGATIVE_VALUE = 3308;
    • LOAD_LIMIT_SOFT_MAX_ABOVE_MAX = 3309;
  • INTERVAL_ERROR = 34;
    • INTERVAL_MIN_EXCEEDS_MAX = 3401;
    • INTERVAL_NEGATIVE_MIN = 3402;
    • INTERVAL_NEGATIVE_MAX = 3403;
    • INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
    • INTERVAL_MAX_EXCEEDS_CAPACITY = 3405 です。
  • DISTANCE_LIMIT_ERROR = 36;
    • DISTANCE_LIMIT_INVALID_COST_AFTER_SOFT_MAX = 3601;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3602;
    • DISTANCE_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3603;
    • DISTANCE_LIMIT_NEGATIVE_MAX = 3604;
    • DISTANCE_LIMIT_NEGATIVE_SOFT_MAX = 3605;
    • DISTANCE_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3606;
  • DURATION_LIMIT_ERROR = 38;
    • DURATION_LIMIT_MAX_DURATION_NEGATIVE_OR_NAN = 3800;
    • DURATION_LIMIT_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3801;
    • DURATION_LIMIT_INVALID_COST_PER_HOUR_AFTER_SOFT_MAX = 3802;
    • DURATION_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3803;
    • DURATION_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
    • DURATION_LIMIT_INVALID_COST_AFTER_QUADRATIC_SOFT_MAX = 3806;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_COST_PER_SQUARE_HOUR = 3807;
    • DURATION_LIMIT_COST_PER_SQUARE_HOUR_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • DURATION_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3810;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_LARGER_THAN_MAX = 3811;
    • DURATION_LIMIT_DIFF_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • DURATION_LIMIT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3813;
    • DURATION_LIMIT_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3814;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3815;
  • SHIPMENT_ERROR = 40;(配送エラー = 40)
    • SHIPMENT_PD_LIMIT_WITHOUT_PICKUP_AND_DELIVERY = 4014;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4,000
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4001;
    • SHIPMENT_PD_RELATIVE_DETOUR_LIMIT_INVALID = 4015;
    • SHIPMENT_PD_DETOUR_LIMIT_AND_EXTRA_VISIT_DURATION = 4016
    • SHIPMENT_PD_TIME_LIMIT_DURATION_NEGATIVE_OR_NAN = 4002
    • SHIPMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4003
    • SHIPMENT_EMPTY_SHIPMENT_TYPE = 4004;
    • SHIPMENT_NO_PICKUP_NO_DELIVERY = 4005;
    • SHIPMENT_INVALID_PENALTY_COST = 4006;
    • SHIPMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
    • SHIPMENT_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • SHIPMENT_INVALID_COST_FOR_VEHICLE = 4011、
    • SHIPMENT_COST_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • SHIPMENT_DUPLICATE_COST_FOR_VEHICLE_INDEX = 4013;
  • VEHICLE_ERROR = 42;
    • VEHICLE_EMPTY_REQUIRED_OPERATOR_TYPE = 4200;
    • VEHICLE_DUPLICATE_REQUIRED_OPERATOR_TYPE = 4201;
    • VEHICLE_NO_OPERATOR_WITH_REQUIRED_OPERATOR_TYPE = 4202;
    • VEHICLE_EMPTY_START_TAG = 4203;
    • VEHICLE_DUPLICATE_START_TAG = 4204;
    • VEHICLE_EMPTY_END_TAG = 4205;
    • VEHICLE_DUPLICATE_END_TAG = 4206;
    • VEHICLE_EXTRA_VISIT_DURATION_NEGATIVE_OR_NAN = 4207;
    • VEHICLE_EXTRA_VISIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4208;
    • VEHICLE_EXTRA_VISIT_DURATION_EMPTY_KEY = 4209;
    • VEHICLE_FIRST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4210
    • VEHICLE_FIRST_SHIPMENT_IGNORED = 4211;
    • VEHICLE_FIRST_SHIPMENT_NOT_BOUND = 4212;
    • VEHICLE_LAST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4213;
    • VEHICLE_LAST_SHIPMENT_IGNORED = 4214;
    • VEHICLE_LAST_SHIPMENT_NOT_BOUND = 4215;
    • VEHICLE_IGNORED_WITH_USED_IF_ROUTE_IS_EMPTY = 4216;
    • VEHICLE_INVALID_COST_PER_KILOMETER = 4217;
    • VEHICLE_INVALID_COST_PER_HOUR = 4218;
    • VEHICLE_INVALID_COST_PER_TRAVELED_HOUR = 4219;
    • VEHICLE_INVALID_FIXED_COST = 4220;
    • VEHICLE_INVALID_TRAVEL_DURATION_MULTIPLE = 4221、
    • VEHICLE_TRAVEL_DURATION_MULTIPLE_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4223;
    • VEHICLE_MATRIX_INDEX_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4224;
    • VEHICLE_MINIMUM_DURATION_LONGER_THAN_DURATION_LIMIT = 4222;
  • VISIT_REQUEST_ERROR = 44;
    • VISIT_REQUEST_EMPTY_TAG = 4400;
    • VISIT_REQUEST_DUPLICATE_TAG = 4401;
    • VISIT_REQUEST_DURATION_NEGATIVE_OR_NAN = 4404;
    • VISIT_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4405。
  • PRECEDENCE_ERROR = 46;
    • PRECEDENCE_RULE_MISSING_FIRST_INDEX = 4600;
    • PRECEDENCE_RULE_MISSING_SECOND_INDEX = 4601;
    • PRECEDENCE_RULE_FIRST_INDEX_OUT_OF_BOUNDS = 4602
    • PRECEDENCE_RULE_SECOND_INDEX_OUT_OF_BOUNDS = 4603;
    • PRECEDENCE_RULE_DUPLICATE_INDEX = 4604;
    • PRECEDENCE_RULE_INEXISTENT_FIRST_VISIT_REQUEST = 4605
    • PRECEDENCE_RULE_INEXISTENT_SECOND_VISIT_REQUEST = 4606;
  • BREAK_ERROR = 48;
    • BREAK_RULE_EMPTY = 4800;
    • BREAK_REQUEST_UNSPECIFIED_DURATION = 4801;
    • BREAK_REQUEST_UNSPECIFIED_EARLIEST_START_TIME = 4802;
    • BREAK_REQUEST_UNSPECIFIED_LATEST_START_TIME = 4803;
    • BREAK_REQUEST_DURATION_NEGATIVE_OR_NAN = 4804; = 4804;
    • BREAK_REQUEST_LATEST_START_TIME_BEFORE_EARLIEST_START_TIME = 4805;
    • BREAK_REQUEST_EARLIEST_START_TIME_BEFORE_GLOBAL_START_TIME = 4806;
    • BREAK_REQUEST_LATEST_END_TIME_AFTER_GLOBAL_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4809;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4810;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4811;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4812;
    • BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
    • BREAK_FREQUENCY_MISSING_MAX_INTER_BREAK_DURATION = 4814;
    • BREAK_FREQUENCY_MISSING_MIN_BREAK_DURATION = 4815;
  • 配送タイプ非互換エラー = 50
    • SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001(配送タイプ非互換タイプ = 5001)
    • [SHIPMENT_TYPE_INCOMPATIBILITY_LESS_THAN_TWO_TYPES] = 5002、
    • [SHIPMENT_TYPE_INCOMPATIBILITY_DUPLICATE_TYPE] = 5003
    • SHIPMENT_TYPE_INCOMPATIBILITY_INVALID_INCOMPATIBILITY_MODE = 5004;
    • [SHIPMENT_TYPE_INCOMPATIBILITY_TOO_MANY_INCOMPATIBILITIES] = 5005
  • SHIPMENT_TYPE_REQUIREMENT_ERROR = 52;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE = 52001;
    • SHIPMENT_TYPE_REQUIREMENT_NO_DEPENDENT_TYPE = 52002;
    • SHIPMENT_TYPE_REQUIREMENT_INVALID_REQUIREMENT_MODE = 52003;
    • SHIPMENT_TYPE_REQUIREMENT_TOO_MANY_REQUIREMENTS = 52004;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_REQUIRED_TYPE = 52005;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_REQUIRED_TYPE = 52006;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_DEPENDENT_TYPE = 52009;
    • SHIPMENT_TYPE_REQUIREMENT_SELF_DEPENDENT_TYPE = 52010;
    • SHIPMENT_TYPE_REQUIREMENT_GRAPH_HAS_CYCLES = 52011;
  • VEHICLE_OPERATOR_ERROR = 54;
    • VEHICLE_OPERATOR_EMPTY_TYPE = 5400;
    • VEHICLE_OPERATOR_MULTIPLE_START_TIME_WINDOWS = 5401;
    • VEHICLE_OPERATOR_SOFT_START_TIME_WINDOW = 5402;
    • VEHICLE_OPERATOR_MULTIPLE_END_TIME_WINDOWS = 5403;
    • VEHICLE_OPERATOR_SOFT_END_TIME_WINDOW = 5404;
  • DURATION_SECONDS_MATRIX_ERROR = 56;
    • DURATION_SECONDS_MATRIX_DURATION_NEGATIVE_OR_NAN = 5600;
    • DURATION_SECONDS_MATRIX_DURATION_EXCEEDS_GLOBAL_DURATION = 5601;
  • 警告 = 9;
    • WARNING_INJECTED_FIRST_SOLUTION = 90;
      • WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_SHIPMENTS_REMOVED = 9000;
      • WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES = 9001;
display_name

string

エラーの表示名。

fields[]

FieldReference

エラー コンテキストには、ほとんどの場合、0、1、またはそれ以上のフィールドが含まれます。たとえば、車両 #4 と配送 #2 の最初の集荷を参照するには、次のように行います。

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 sub_field {name: "pickups" index: 0} }

ただし、特定のエラーコードに対して fields の基数を変更しないでください。

error_message

string

エラーを説明する、人が読める形式の文字列。codeerror_message の間には 1 対 1 のマッピングがあります(コードが != "UNSPECIFIED" の場合)。

安定性: 安定していません。特定の code に関連するエラー メッセージは、時間の経過とともに変化する可能性があります(わかりやすくなる可能性があります)。代わりに display_namecode を使用してください。

offending_values

string

フィールドの値が含まれる場合があります。これは常に利用可能であるとは限りません。これに依存することは絶対に避け、モデルの手動デバッグにのみ使用してください。

FieldReference

検証エラーのコンテキストを指定します。FieldReference は常にこのファイル内の特定のフィールドを参照し、同じ階層構造に従います。たとえば、以下を使用して車両 #5 の start_time_windows の要素 #2 を指定できます。

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

ただし、メッセージが煩雑になるのを避けるため、OptimizeToursRequestShipmentModel などの最上位エンティティは省略されます。

フィールド
name

string

フィールドの名前(例:「vehicles」

sub_field

FieldReference

再帰的にネストされたサブフィールド(必要な場合)。

共用体フィールド index_or_key

index_or_key は次のいずれかになります。

index

int32

フィールドが繰り返される場合のインデックス。

key

string

フィールドがマップの場合はキー。

OutputConfig

[BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] の結果の送信先を指定します。

フィールド
data_format

DataFormat

必須。出力データ形式。

共用体フィールド destination。必須。destination は次のいずれかになります。
gcs_destination

GcsDestination

出力を書き込む Google Cloud Storage の場所。

RouteModifiers

車両ルートを計算する際に満たす必要がある一連のオプションの条件をカプセル化します。これは、Google Maps Platform Routes Preferred API の RouteModifiers に似ています。詳しくは、https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers をご覧ください。

フィールド
avoid_tolls

bool

妥当な場合に有料道路を避けるかどうかを指定します。有料道路を含まないルートが優先されます。原動機付の交通手段にのみ適用されます。

avoid_highways

bool

合理的な場合は高速道路を避けるかどうかを指定します。高速道路を含まないルートが優先されます。原動機付の交通手段にのみ適用されます。

avoid_ferries

bool

フェリーを避けるかどうかを指定します。フェリー以外のルートが優先されます。原動機付の交通手段にのみ適用されます。

avoid_indoor

bool

省略可。合理的な場合は屋内を避けてルートを設定するかどうかを指定します。屋内ナビゲーションのないルートが優先されます。WALKING 移動モードにのみ適用されます。

配送

1 つの商品の配送(集荷から配送まで)。配送済みと見なされるには、車両がいずれかの集荷場所を訪問し(それに応じて予備容量を減らしてから)、後でいずれかの配達場所を訪問する必要があります(そのため、それに応じて予備容量を再度増やす必要があります)。

フィールド
display_name

string

配送のユーザー定義の表示名。長さは 63 文字以下で、UTF-8 文字を使用できます。

pickups[]

VisitRequest

配送に関連付けられている受け取りの代替手段のセット。指定されていない場合、車両は配達に対応する場所を訪問するだけで済みます。

deliveries[]

VisitRequest

配送に関連付けられた配送方法のセット。指定されていない場合、車両は乗車に対応する場所を訪問するだけで済みます。

load_demands

map<string, Load>

荷物の積荷需要(重量、体積、パレット数など)。マップ内のキーは、対応する負荷のタイプを示す識別子である必要があります。また、単位も含めることが理想的です。例: 「weight_kg」、「volume_gallons」、「pallet_count」など。指定されたキーがマップにない場合、対応する負荷は null と見なされます。

allowed_vehicle_indices[]

int32

この配送が可能な車両のセット。空白の場合、すべての車両が実行する可能性があります。車両は、ShipmentModelvehicles リストのインデックスで指定されます。

costs_per_vehicle[]

double

この配送が各車両で配達されたときに発生する費用を指定します。指定する場合は、次のいずれかが必要です。

  • costs_per_vehicle_indices と同じ数の要素にします。costs_per_vehicle[i] はモデルの車両 costs_per_vehicle_indices[i] に対応します。
  • モデル内の車両と同じ数の要素が必要です。i 番目の要素は、モデルの車両 #i に対応します。

これらの費用は penalty_cost と同じ単位で指定し、負の値にすることはできません。そのような費用がない場合は、このフィールドを空のままにします。

costs_per_vehicle_indices[]

int32

costs_per_vehicle が適用される車両のインデックス。空でない場合は、要素数が costs_per_vehicle と同じである必要があります。車両インデックスは複数回指定できません。costs_per_vehicle_indices から除外されている車両の費用は 0 です。

pickup_to_delivery_absolute_detour_limit

Duration

集荷から配達までの最短経路と比較した、迂回経路の絶対的な最大時間を指定します。指定する場合は負の値を指定してください。配送には少なくとも受け取りと宅配の 1 つが含まれている必要があります。

たとえば、t は、選択した集荷オプションから選択した配送オプションに直接移動するのにかかる最短時間とします。pickup_to_delivery_absolute_detour_limit を設定すると、次のようになります。

start_time(delivery) - start_time(pickup) <=
t + pickup_to_delivery_absolute_detour_limit

同じ配送に相対的制限と絶対的制限の両方が指定されている場合は、受け取りと配達の組み合わせごとに、より制限の厳しい制限が適用されます。2017 ~ 2010 年現在、迂回運転は、移動時間が車両に依存していない場合にのみサポートされます。

pickup_to_delivery_time_limit

Duration

荷物の集荷から配達を開始するまでの最長期間を指定します。指定する場合は、正の値にする必要があります。また、配送には少なくとも集荷と配達が含まれている必要があります。これは、受け取りと配送に選択した代替手段や、車両の速度には依存しません。これは、最大迂回の制約とともに指定することができます。ソリューションは両方の仕様を遵守します。

shipment_type

string

「タイプ」を指定する空でない文字列。この機能を使用すると、shipment_types 間の非互換性や要件を定義できます(ShipmentModelshipment_type_incompatibilitiesshipment_type_requirements を参照)。

1 回の訪問に指定された visit_types と異なる場合: 同じ配送に属するすべての集荷と配達で同じ shipment_type が使用されます。

label

string

この配送のラベルを指定します。このラベルは、対応する ShipmentRoute.Visitshipment_label のレスポンスで報告されます。

ignore

bool

true の場合、この配送はスキップしますが、penalty_cost は適用しません。

モデルに shipment_type_requirements がある場合、配送を無視すると、検証エラーが発生します。

injected_first_solution_routes または injected_solution_constraint で実行される配送を無視することは許可されています。ソルバは、実行ルートから関連する集荷 / 配達訪問を削除します。無視した配送を参照する precedence_rules も無視されます。

penalty_cost

double

配送が完了しなかった場合、このペナルティはルートの総費用に追加されます。集荷と配達の代替手段のいずれかを訪問した場合、配送は完了とみなされます。費用は、モデル内の他のすべての費用関連フィールドで使用されている単位で表すことができ、正の値である必要があります。

重要: このペナルティが指定されていない場合は、ペナルティは無限(配送の完了が必要)とみなされます。

pickup_to_delivery_relative_detour_limit

double

集荷から配達までの最短経路と比較して、最大の相対的迂回時間を指定します。指定する場合は負の値を指定してください。配送には少なくとも受け取りと宅配の 1 つが含まれている必要があります。

たとえば、選択した受け取り方法から別の配送方法に直接移動する最短の所要時間を t とします。pickup_to_delivery_relative_detour_limit を設定すると、次のようになります。

start_time(delivery) - start_time(pickup) <=
std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))

同じ配送に相対的制限と絶対的制限の両方が指定されている場合は、受け取りと配達の組み合わせごとに、より制限の厳しい制限が適用されます。2017 年 10 月現在、迂回路は、移動時間が車両に依存しない場合にのみサポートされています。

読み込み

店舗訪問の際には、車両の積荷量に、集荷の場合は事前に設定した金額が加算され、配達の場合は積算額が差し引かれます。このメッセージはこのような金額を定義します。load_demands をご覧ください。

フィールド
amount

int64

対応する訪問を実行する車両の積載量は、変動します。整数値であるため、精度の低下を避けるために適切な単位を選択することをおすすめします。0 以上にする必要があります。

VisitRequest

車両で可能な訪問のリクエスト: 位置情報(下記参照、2 つ)、時間枠で表される開店時間と閉店時間、サービス提供期間(車両が荷物の集荷または降車に到着した後の車両が費やした時間)があります。

フィールド
arrival_location

LatLng

この VisitRequest の実行中に車両が到着する位置情報。配送モデルに所要時間距離行列がある場合、arrival_location は指定できません。

arrival_waypoint

Waypoint

この VisitRequest の実行時に車両が到着するウェイポイント。配送モデルに所要時間距離行列がある場合、arrival_waypoint は指定できません。

departure_location

LatLng

この VisitRequest の完了後に車両が出発する位置情報。arrival_location と同じである場合は省略できます。配送モデルに所要時間距離行列がある場合、departure_location は指定できません。

departure_waypoint

Waypoint

この VisitRequest の完了後に車両が出発するウェイポイント。arrival_waypoint と同じ場合は省略できます。配送モデルに所要時間距離行列がある場合、departure_waypoint は指定できません。

tags[]

string

訪問リクエストに添付するタグを指定します。空の文字列や重複する文字列は使用できません。

time_windows[]

TimeWindow

訪問の到着時間を制限する時間枠。車両は到着時間の範囲外に出発する可能性があります。つまり、到着時間と到着時間が時間枠の範囲内である必要はありません。車両が TimeWindow.start_time より前に到着した場合、待ち時間が生じる可能性があります。

TimeWindow が存在しない場合、車両はいつでもこの訪問を実施できることを意味します。

時間枠は互いに独立している必要があります。つまり、時間枠が他の時間枠と重なったり隣接したりしてはいけません。また、時間枠は昇順である必要があります。

cost_per_hour_after_soft_end_timesoft_end_time は、時間枠が 1 つの場合にのみ設定できます。

duration

Duration

訪問時間。つまり、到着から出発までに車両が費やした時間(予想待ち時間に加算されます。time_windows を参照)。

cost

double

車両ルートでのこの訪問リクエストの処理にかかる費用。荷物の受け取りまたは配送ごとに、異なる送料を支払うために使用できます。この費用は Shipment.penalty_cost と同じ単位で指定し、負の値にすることはできません。

load_demands

map<string, Load>

この訪問リクエストのロード デマンド。これは、Shipment 全体ではなくこの VisitRequest にのみ適用される点を除き、Shipment.load_demands フィールドと類似しています。ここに記載されている需要は、Shipment.load_demands にリストされている需要に追加されます。

visit_types[]

string

訪問のタイプを指定します。これは、車両がこの訪問を完了するために必要な追加の時間を割り当てるために使用されることがあります(Vehicle.extra_visit_duration_for_visit_type を参照)。

タイプは 1 回しか使用できません。

label

string

この VisitRequest のラベルを指定します。このラベルは、対応する ShipmentRoute.Visit のレスポンスでは visit_label として報告されます。

ShipmentModel

出荷モデルには、車両のセットで実施する必要がある一連の出荷が含まれ、次の合計値となる総コストが最小限に抑えられます。

  • 車両をルートする費用(合計時間あたりの費用、移動時間あたりの費用、すべての車両の固定費の合計)。
  • 未履行配送ペナルティが科されます
  • 全世界での配送期間のコスト
フィールド
shipments[]

Shipment

モデルで実行する必要がある一連の配送。

vehicles[]

Vehicle

訪問に使用できる車両のセット。

global_start_time

Timestamp

モデルのグローバルな開始時刻と終了時刻: この範囲外の時刻は有効とみなされません。

モデルの期間は 1 年未満にする必要があります(例: global_end_timeglobal_start_time の差は 3,153,6000 秒以内)。

cost_per_*hour フィールドを使用するときは、パフォーマンスを向上させるために、この時間枠を短い間隔に設定することをおすすめします(たとえば、1 日をモデル化する場合は、グローバルな時間制限をその日に設定する必要があります)。設定しない場合、1970 年 1 月 1 日 00:00:00 UTC(つまり、秒: 0、nanos: 0)がデフォルトで使用されます。

global_end_time

Timestamp

未設定の場合、デフォルトとして 1971 年 1 月 1 日 00:00:00 UTC(秒: 31536000、ナノ秒: 0)が使用されます。

global_duration_cost_per_hour

double

「グローバル期間」すべての車両の最も早い有効開始時間と最新の有効終了時間の差です。ユーザーは、その数量に 1 時間あたりの費用を割り当てて、たとえば、最も早くジョブが完了するように最適化できます。この費用は Shipment.penalty_cost と同じ単位で指定する必要があります。

duration_distance_matrices[]

DurationDistanceMatrix

モデルで使用される所要時間と距離のマトリックスを指定します。このフィールドが空の場合、use_geodesic_distances フィールドの値に応じて、Google マップまたは測地線距離が代わりに使用されます。空でない場合、use_geodesic_distances を true にすることはできません。また、duration_distance_matrix_src_tagsduration_distance_matrix_dst_tags も空にすることはできません。

使用例:

  • locA と locB の 2 つの場所があります。
  • 1 台の車両が locA でルートを開始し、locA で終了します。
  • locB の集荷訪問リクエストが 1 件あります。
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • locA、locB、locC の 3 つの場所があります。
  • 行列「fast」を使用して、1 台の車両が locA でルートを開始し、locB で終了しています。
  • 1 台の車両が、「slow」という行列を使用して、locB でルートを開始し、locB で終了しています。
  • 1 台の車両が locB でルートを開始し、locB で終了し、マトリックス「fast」を使用します。
  • locC での受け取りリクエストが 1 件あります。
model {
  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
duration_distance_matrix_src_tags[]

string

期間行列と距離行列のソースを定義するタグ。duration_distance_matrices(i).rows(j) は、タグ duration_distance_matrix_src_tags(j) の付いた訪問から行列 i 内の他の訪問までの滞在時間と距離を定義します。

タグは VisitRequest.tags または Vehicle.start_tags に対応します。指定された VisitRequest または Vehicle は、このフィールドの 1 つのタグと完全に一致する必要があります。Vehicle のソースタグ、宛先タグ、マトリックス タグは同じになる場合があります。同様に、VisitRequest のソースタグと宛先タグも同じになる場合があります。タグはすべて異なっている必要があり、空の文字列にすることはできません。このフィールドが空でない場合、duration_distance_matrices を空にすることはできません。

duration_distance_matrix_dst_tags[]

string

期間行列と距離行列のデスティネーションを定義するタグ。duration_distance_matrices(i).rows(j).durations(k)duration_distance_matrices(i).rows(j).meters(k)) は、タグ duration_distance_matrix_src_tags(j) の訪問からタグ duration_distance_matrix_dst_tags(k) の訪問までの移動時間(または距離)をマトリックス i で定義します。

タグは VisitRequest.tags または Vehicle.start_tags に対応します。指定された VisitRequest または Vehicle は、このフィールドの 1 つのタグと完全に一致する必要があります。Vehicle のソースタグ、デスティネーション タグ、マトリックス タグは同じにできます。同様に、VisitRequest のソースタグと宛先タグが同じでもかまいません。タグはすべて異なっている必要があり、空の文字列にすることはできません。このフィールドが空でない場合、duration_distance_matrices を空にすることはできません。

transition_attributes[]

TransitionAttributes

モデルに追加された遷移属性。

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

互換性のない shipping_types のセット(ShipmentTypeIncompatibility を参照)。

shipment_type_requirements[]

ShipmentTypeRequirement

shipment_type の要件のセット(ShipmentTypeRequirement を参照)。

precedence_rules[]

PrecedenceRule

モデルに適用する必要がある一連の優先順位ルール。

max_active_vehicles

int32

アクティブな車両の最大数を制限します。ルートで少なくとも 1 回の配送が行われる車両はアクティブです。これは、ドライバーの数が車両より少ない場合や、車両フリートが混在している場合に、ルートの数を制限するために使用できます。最適化により、使用する最適な車両のサブセットが選択されます。真に正である必要があります。

DurationDistanceMatrix

訪問場所、車両の出発点から訪問までの所要時間と距離の行列を指定します。

フィールド
rows[]

Row

期間と距離の行列の行を指定します。ShipmentModel.duration_distance_matrix_src_tags と同じ数の要素が必要です。

vehicle_start_tag

string

この所要時間と距離行列を適用する車両を定義するタグ。空の場合、すべての車両に適用されます。マトリックスは 1 つだけです。

各車両の始動は、1 つの行列のみと一致する必要があります。つまり、車両の start_tags フィールドのいずれか 1 つが、ある行列の vehicle_start_tag と完全に一致する必要があります(その行列のみ)。

すべての行列は異なる vehicle_start_tag を持つ必要があります。

期間と距離の行列の行を指定します。

フィールド
durations[]

Duration

特定の行の Duration 値。ShipmentModel.duration_distance_matrix_dst_tags と同じ数の要素が必要です。

meters[]

double

指定された行の距離値。モデル内の距離を参照するコストや制約がない場合は、空のままにしておくことができます。それ以外の場合は、durations と同数の要素が必要です。

PrecedenceRule

2 つのイベント(各イベントは集荷または配送)間の優先順位ルール: 「2 番目」イベントは、「最初」の後に少なくとも offset_duration 後に開始する必要があります開始しました。

いくつかの優先順位は、同じ(または関連する)イベントを指すことができます。「B の集荷は A の配送後に行われます」「B の集荷後に C の集荷が行われる」などです。

また、優先順位は両方の発送が行われた場合にのみ適用され、それ以外の場合は無視されます。

フィールド
first_is_delivery

bool

最初の Pod が配送イベントです。

second_is_delivery

bool

「2 番目」のイベントが配信かどうかを示します。

offset_duration

Duration

「最初の」位置とと「second」イベントです。負の値も使用できます。

first_index

int32

「first」の配送指数イベントです。このフィールドは指定する必要があります。

second_index

int32

「2 個目」の配送指数イベントです。このフィールドを指定する必要があります。

ShipmentRoute

車両のルートは、次のように時間軸に沿って分解できます(訪問は n 回であると仮定します)。

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

違いに留意してください。

  • 車両の始点と終点、各訪問の始点と終点(到着と出発)などの「時間厳守のイベント」。指定した時間に行われます。
  • 訪問自体や訪問間の移行などの「期間」。時間間隔の継続時間は、ゼロ(開始と終了が同じ秒)になることもありますが、多くの場合、正の期間は正の値になります。

不変条件:

  • 訪問回数が n 回の場合は、n+1 回遷移が発生します。
  • 訪問は常に、前後のトランジション(インデックス + 1)で囲まれています。
  • 車両が発進すると、常にトランジション #0 が続きます。
  • 車両の終端には常にトランジション #n が先行します。

ズームインすると、TransitionVisit の実行中は次のようになります。

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

最後に、移行中に TRAVEL、BREAKS、DELAY、WAIT を配置する方法について説明します。

  • 重複していません。
  • DELAY は一意であり、次の訪問(または車両の終了)の直前の連続した期間である必要があります。したがって、遅延時間がわかれば、開始時間と終了時間を把握できます。
  • BREAKS は、重複しない連続した時間です。レスポンスでは、各休憩の開始時間と継続時間を指定します。
  • TRAVEL と WAIT は「プリエンプティブ」です。この移行中に複数回中断されることがあります。クライアントは旅行が「できるだけ早く」行われると想定できるその「待機」をが残りの時間で埋められます。

(複雑な)例:

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
フィールド
vehicle_index

int32

ルートを運行している車両。ソース ShipmentModel のインデックスで識別されます。

vehicle_label

string

このルートを運行する車両のラベル。指定する場合は ShipmentModel.vehicles(vehicle_index).label になります。

vehicle_start_time

Timestamp

車両がルートを開始した時刻。

vehicle_end_time

Timestamp

車両がルートを終了した時刻。

visits[]

Visit

経路を表す順序付きの訪問シーケンス。Visits[i] はルートの i 番目の訪問です。このフィールドが空の場合、車両は未使用とみなされます。

transitions[]

Transition

ルートの遷移の順序付きリスト。

has_traffic_infeasibilities

bool

OptimizeToursRequest.consider_road_traffic が true に設定されている場合、このフィールドは、ルートのタイミングの不一致が交通量に基づく推定所要時間を使用して予測されることを示します。訪問と車両の時間枠を満たしながら、交通調整による移動、遅延、休憩を完了するための時間が十分でない場合があります。次に例を示します。

  start_time(previous_visit) + duration(previous_visit) +
  travel_duration(previous_visit, next_visit) > start_time(next_visit)

交通渋滞により推定所要時間 travel_duration(previous_visit, next_visit) が増加するため、next_visit での到着は現在の時間枠よりも遅くなる可能性があります。また、推定移動時間の増加や訪問または休憩の時間枠の制限により、訪問と重複することが強制的に発生することもあります。

route_polyline

EncodedPolyline

エンコードされた経路のポリライン表現。このフィールドは、OptimizeToursRequest.populate_polylines が true に設定されている場合にのみ入力されます。

breaks[]

Break

このルートを走行する車両の休憩。breaks シーケンスは時間間隔を表し、それぞれ対応する start_time から開始し、duration 秒間継続します。

metrics

AggregatedMetrics

このルートの期間、距離、負荷の指標。AggregatedMetrics のフィールドは、コンテキストに応じてすべての ShipmentRoute.transitions または ShipmentRoute.visits で合計されます。

route_costs

map<string, double>

ルートのコスト。コスト関連のリクエスト フィールド別に分類されます。キーは、入力 OptimizeToursRequest に対する相対パスの proto パスです。次に例を示します。「model.shipments.pickups.cost」、値は対応する費用フィールドで生成された合計費用で、ルート全体で集計されます。つまり、cost["model.shipments.pickups.cost"] はルート上のすべての受け取り費用の合計となります。2022 年 1 月時点で集計された形でのみ報告される TransitionAttributes に関連する費用を除き、モデルで定義されたすべての費用は、ここで詳細に報告されます。

route_total_cost

double

ルートの合計費用。費用マップ内のすべての費用の合計。

休憩

ブレークの実行を表すデータ。

フィールド
start_time

Timestamp

休憩の開始時間。

duration

Duration

休憩時間。

EncodedPolyline

エンコードされたポリライン表現。ポリラインのエンコードについて詳しくは、https://developers.google.com/maps/documentation/utilities/polylinealgorithmhttps://developers.google.com/maps/documentation/javascript/reference/geometry#encoding をご覧ください。

フィールド
points

string

エンコードされたポリラインの地点を表す文字列。

移行

経路上の 2 つのイベント間の遷移。ShipmentRoute の説明をご覧ください。

車両に start_locationend_location がない場合、対応する移動指標は 0 になります。

フィールド
travel_duration

Duration

この移行中の移動時間。

travel_distance_meters

double

移行中の移動距離。

traffic_info_unavailable

bool

OptimizeToursRequest.consider_road_traffic を介してトラフィックがリクエストされ、Transition の交通情報を取得できなかった場合、このブール値は true に設定されます。これは一時的(リアルタイム トラフィック サーバーでまれに発生する中断)の場合もあれば、永続的(この場所のデータがない)場合もあります。

delay_duration

Duration

この切り替えに適用される遅延時間の合計。設定されている場合は、次のイベント(訪問または車両の終了時間)のちょうど delay_duration 秒前に遅延が開始されます。TransitionAttributes.delayをご確認ください。

break_duration

Duration

この遷移中に発生する中断の合計(ある場合)。各休憩の開始時間と継続時間に関する詳細は、ShipmentRoute.breaks に保存されます。

wait_duration

Duration

この移行中の待機時間。待ち時間はアイドル時間に対応し、休憩時間は含まれません。また、この待ち時間は連続しない複数の区間に分割される場合があります。

total_duration

Duration

移行の合計時間(便宜上提供)。これは次と等しくなります。

  • 次回の訪問 start_time(最後の移行の場合は vehicle_end_time)- この遷移の start_time
  • ShipmentRoute.has_traffic_infeasibilities が false の場合、次の式も成り立ちます。`total_duration = travel_duration + delay_duration
  • before_duration + wait_duration` です。
start_time

Timestamp

この移行の開始時間。

route_polyline

EncodedPolyline

遷移中にたどったルートのエンコードされたポリライン表現。このフィールドは、populate_transition_polylines が true に設定されている場合にのみ入力されます。

vehicle_loads

map<string, VehicleLoad>

この移行中の車両の積載量(この車両の Vehicle.load_limits に表示されるタイプ、またはこのルートで行われた一部の配送で Shipment.load_demands がゼロ以外のタイプごとに表示されます)。

最初の遷移中の負荷は、車両経路の開始負荷です。各訪問の後に、訪問が集荷か配達かに応じて、訪問の load_demands が加算または減算され、次の遷移の負荷が算出されます。

VehicleLoad

指定されたタイプについて、ルート上のある地点における車両の実際の負荷を報告します(Transition.vehicle_loads を参照)。

フィールド
amount

int64

指定されたタイプにおける車両の積荷量。負荷の単位は通常、タイプで示されます。Transition.vehicle_loads をご覧ください。

アクセス

経路中に行われた訪問。この訪問は、Shipment の集荷または宅配に対応しています。

フィールド
shipment_index

int32

ソース ShipmentModelshipments フィールドのインデックス。

is_pickup

bool

true の場合、訪問は Shipment の乗車に対応します。それ以外の場合は、配信に対応します。

visit_request_index

int32

Shipment の「受け取り」または「配送」フィールドの VisitRequest のインデックス(is_pickup を参照)。

start_time

Timestamp

訪問の開始時刻。車両がこれよりも早く訪問場所に到着する場合があるので注意してください。時刻は ShipmentModel と一致します。

load_demands

map<string, Load>

配送と訪問リクエストの合計として、合計訪問負荷需要 load_demands。訪問が配送の場合、値は負になります。需要は Transition.loads と同じタイプでレポートされます(このフィールドを参照)。

detour

Duration

訪問前にルート上で訪問した荷物や時間帯によって生じる可能性のある待ち時間が原因で、余分に迂回される時間。訪問が配達の場合、迂回運転は対応する集荷訪問から計算され、次のようになります。

start_time(delivery) - start_time(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

それ以外の場合は、車両 start_location から計算されます。

start_time - vehicle_start_time - travel duration from
the vehicle's `start_location` to the visit.
shipment_label

string

対応する Shipment.label のコピー(Shipment で指定されている場合)。

visit_label

string

対応する VisitRequest.label のコピー(VisitRequest で指定されている場合)。

ShipmentTypeIncompatibility

shipping_type に応じて、配送間の互換性がないことを示します。互換性のない配送が同じルート上に表示されるかどうかは、非互換モードに基づいて制限されます。

フィールド
types[]

string

互換性のないタイプのリスト。shipment_types が異なる 2 つの配送は「互換性なし」です。

incompatibility_mode

IncompatibilityMode

非互換性に適用されるモード。

IncompatibilityMode

同一ルート上で、互換性のない荷物がどのように見えるかを定義するモード。

列挙型
INCOMPATIBILITY_MODE_UNSPECIFIED 未設定の非互換性モード。この値は使用しないでください。
NOT_PERFORMED_BY_SAME_VEHICLE このモードでは、互換性のないタイプの 2 つの配送で同じ車両を共有することはできません。
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY 非互換性モードの、互換性のないタイプの 2 つの出荷の場合:

  • 両方が受け取りのみ(配達なし)または配送のみ(受け取りなし)の場合、同じ車両を共有することはできません。
  • 一方の荷物が配達で、もう一方が集荷の場合、前者の荷物が引き取りに来る前であれば、2 つの配送で同じ車両を共有できます。

ShipmentTypeRequirement

shipping_type に基づいて、配送間の要件を指定します。要件の詳細は、要件モードによって定義されます。

フィールド
required_shipment_type_alternatives[]

string

dependent_shipment_types で必須とされる代替配送タイプのリスト。

dependent_shipment_types[]

string

タイプが dependent_shipment_types の配送はすべて、同じルート上で訪問できるタイプ required_shipment_type_alternatives の配送が少なくとも 1 つ必要です。

注: shipment_type がそれ自体に依存するような要件の連鎖は許可されません。

requirement_mode

RequirementMode

要件に適用されるモード。

RequirementMode

ルート上の依存する配送の表示を定義するモード。

列挙型
REQUIREMENT_MODE_UNSPECIFIED 未指定の要件モード。この値は使用しないでください。
PERFORMED_BY_SAME_VEHICLE このモードでは、依存するすべての「必須」商品の少なくとも 1 つと同じ車両を共有する必要があります。できます。
IN_SAME_VEHICLE_AT_PICKUP_TIME

IN_SAME_VEHICLE_AT_PICKUP_TIME モードでは、すべての「依存」モードが配送には少なくとも 1 つの「required」が受け取り時に車両に配送します。

「扶養家族」したがって、配送の集荷には次のいずれかが必要です。

  • 配送のみの「必須」荷物追跡番号の後にルートで配達された荷物
  • 「必須」配送が以前にルートで集荷されたこと、さらに「required」が配送に配送がある場合、この配送は「扶養家族」受け取ります。
IN_SAME_VEHICLE_AT_DELIVERY_TIME 以前と同じですが、「依存関係」配送には「required」を配達時に車両に配送します。

SkippedShipment

ソリューション内の未実施の配送の詳細を指定します。些細なケースの場合、またはスキップの原因を特定できた場合は、こちらで理由を報告します。

フィールド
index

int32

このインデックスは、ソース ShipmentModel の配送のインデックスに対応しています。

label

string

対応する Shipment.label のコピー(Shipment で指定されている場合)。

reasons[]

Reason

配送がスキップされた理由の説明。Reason の上のコメントをご覧ください。配送がスキップされた理由がわからない場合は、理由は設定されません。

理由

配送がスキップされた理由を説明できる場合は、ここに理由が表示されます。すべての車両で理由が同じでない場合、reason には複数の要素が含まれます。スキップした配送に重複する理由を指定することはできません(example_vehicle_index を除くすべての項目が同じ場合など)。例:

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}

スキップされた配送は、すべての車両には対応していません。理由は車両によって異なる場合がありますが、少なくとも 1 つの車両の「リンゴ」が原因となります。収容人数を超える場合(車両 1 を含む)、少なくとも 1 台の車両の「洋ナシ」車両 3 台を含む最大定員を超過し、少なくとも 1 台の車両の距離制限を超過する(車両 1 車両を含む)。

フィールド
code

Code

コードのコメントを参照してください。

example_exceeded_capacity_type

string

理由コードが DEMAND_EXCEEDS_VEHICLE_CAPACITY の場合は、超過している容量タイプを 1 つ記録します。

example_vehicle_index

int32

理由が出荷車両の非互換性に関連している場合、このフィールドには関連する 1 台の車両のインデックスが含まれます。

コード

理由タイプを識別するコード。この順序に意味はありません。特に、両方の理由に当てはまる場合に、特定の理由が別の理由より先に表示されるかどうかの判断は提供されません。

列挙型
CODE_UNSPECIFIED これは使用しないでください。
NO_VEHICLE すべての配送を実行できない車両がない。
DEMAND_EXCEEDS_VEHICLE_CAPACITY 輸送量の需要が、一部の容量タイプ(そのうちの 1 つが example_exceeded_capacity_type)で車両の容量を超えています。
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

この配送を行うために必要な最小距離(車両の start_location から荷物の受け取り/配送場所と車両の終点まで)が車両の route_distance_limit を超えています。

この計算では測地線距離が使用されます。

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

この配送に必要な最小時間(移動時間、待ち時間、サービス時間など)が車両の route_duration_limit を超えています。

注: 最適なシナリオでの移動時間は、測地線距離 x 36 m/s(約 130 km/時)として計算されます。

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT 上記と同じですが、最小移動時間と車両の travel_duration_limit のみを比較します。
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS 車両が最も早い開始時間に開始した場合、最良のシナリオ(時間の計算については CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT を参照)でもこの配送を完了できません。合計時間が、車両の最も遅い終了時間を超えてしまうためです。
VEHICLE_NOT_ALLOWED 配送の allowed_vehicle_indices フィールドが空ではなく、この車両が車両に属していません。

TimeWindow

時間枠は、訪問時の到着時刻や車両の開始時刻や終了時刻など、イベントの時刻を制限します。

ハードタイム ウィンドウ境界(start_timeend_time)は、start_time <= event_time <= end_time のようにイベントの最も早い時刻と最も遅い時刻を適用します。ソフトタイム ウィンドウの下限である soft_start_time は、soft_start_time イベントが発生するまでの時間に比例する費用を発生させ、soft_start_time 以降にイベントが発生することを優先します。ソフトタイム ウィンドウの上限である soft_end_time は、soft_end_time またはその前にイベントが発生することを優先し、soft_end_time の後、イベントが発生する時間の長さに比例する費用を発生させます。start_timeend_timesoft_start_timesoft_end_time は、グローバル時間制限(ShipmentModel.global_start_timeShipmentModel.global_end_time を参照)内で、以下を遵守する必要があります。

  0 <= `start_time` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `soft_end_time` <= `end_time`.
フィールド
start_time

Timestamp

ハードタイム ウィンドウの開始時間。指定しない場合は、ShipmentModel.global_start_time に設定されます。

end_time

Timestamp

ハードタイム ウィンドウの終了時刻。指定しない場合は、ShipmentModel.global_end_time に設定されます。

soft_start_time

Timestamp

時間枠のソフト スタート時間。

soft_end_time

Timestamp

時間枠の柔軟な終了時間。

cost_per_hour_before_soft_start_time

double

soft_start_time より前にイベントが発生した場合に、モデルの他の費用に追加される 1 時間あたりの費用。次のように計算されます。

   max(0, soft_start_time - t.seconds)
                          * cost_per_hour_before_soft_start_time / 3600,
t being the time of the event.

このコストは正の値である必要があります。このフィールドは、soft_start_time が設定されている場合のみ設定できます。

cost_per_hour_after_soft_end_time

double

soft_end_time の後にイベントが発生した場合にモデルの他の費用に追加される 1 時間あたりの費用。次のように計算されます。

   max(0, t.seconds - soft_end_time.seconds)
                    * cost_per_hour_after_soft_end_time / 3600,
t being the time of the event.

この費用は正数でなければならず、このフィールドは soft_end_time が設定されている場合にのみ設定できます。

TransitionAttributes

ルート上の 2 つの連続した訪問間の遷移の属性を指定します。同じ移行に複数の TransitionAttributes を適用できます。その場合は、余分なコストがすべて加算され、最も厳しい制約または制限が適用されます(自然な「AND」セマンティクスに従って)。

フィールド
src_tag

string

これらの属性が適用される(src->dst)遷移のセットを定義するタグ。

ソース訪問または車両の開始が一致するのは、VisitRequest.tags または Vehicle.start_tagssrc_tag が含まれているか、excluded_src_tag が含まれていないか(この 2 つのフィールドのどちらが空でないかによって異なります)場合のみです。

excluded_src_tag

string

src_tag をご覧ください。src_tagexcluded_src_tag のいずれか 1 つのみを空にすることはできません。

dst_tag

string

目的地の訪問または車両の終了は、VisitRequest.tags または Vehicle.end_tagsdst_tag が含まれているか、excluded_dst_tag(空でないフィールド)を含んでいない場合に一致します。

excluded_dst_tag

string

dst_tag をご覧ください。dst_tagexcluded_dst_tag のいずれか 1 つのみを空にすることはできません。

cost

double

この移行の実行にかかる費用を指定します。これは、モデルの他のすべての費用と同じ単位であり、負の値にすることはできません。これは、その他すべての既存の費用に上乗せして適用されます。

cost_per_kilometer

double

この移行を実施する際の移動距離に適用される 1 キロメートルあたりの費用を指定します。車両で指定された Vehicle.cost_per_kilometer まで追加できます。

distance_limit

DistanceLimit

この遷移中の移動距離の上限を指定します。

2021 年 6 月現在、ソフトリミットのみがサポートされています。

delay

Duration

この遷移の実行時に発生する遅延を指定します。

この遅延は常に、参照元の訪問が終了してから、訪問先の訪問を開始する前に発生します。

車両

配送の問題で車両をモデル化します。配送に関する問題を解決すると、この車両のルートとして start_location から end_location までのルートが作成されます。経路とは、一連の訪問のことです(ShipmentRoute を参照)。

フィールド
display_name

string

車両のユーザー定義の表示名。最大 63 文字で、UTF-8 文字を使用できます。

travel_mode

TravelMode

車両が通過できる道路とその速度に影響を与える交通手段。travel_duration_multiple もご覧ください。

route_modifiers

RouteModifiers

特定の車両のルート計算方法に影響する、満たす一連の条件。

start_location

LatLng

車両が荷物を受け取る前に出発する地理的位置。指定しない場合、車両は最初の集荷から開始します。配送モデルに期間行列と距離行列がある場合、start_location は指定できません。

start_waypoint

Waypoint

車両が荷物を受け取る前に出発する地理的位置を表す地点。start_waypointstart_location のどちらも指定されていない場合、車両は最初の乗車から出発します。配送モデルに期間行列と距離行列がある場合、start_waypoint は指定できません。

end_location

LatLng

最後の VisitRequest に到達した後に車両が終了する地理的な位置。指定しない場合、車両の ShipmentRoute は最後の VisitRequest が完了するとすぐに終了します。配送モデルに期間行列と距離行列がある場合、end_location は指定できません。

end_waypoint

Waypoint

車両が最後の VisitRequest を完了した後に終了する地理的位置を表すウェイポイント。end_waypointend_location のどちらも指定されていない場合、車両の ShipmentRoute は最後の VisitRequest が完了するとすぐに終了します。配送モデルに所要時間と距離のマトリックスがある場合は、end_waypoint を指定しないでください。

start_tags[]

string

車両のルートの始点に付けられているタグを指定します。

空の文字列や重複する文字列は使用できません。

end_tags[]

string

車両のルートの末尾に適用されるタグを指定します。

空の文字列や重複する文字列は使用できません。

start_time_windows[]

TimeWindow

車両が出発地を出発する時間枠。グローバル制限時間内である必要があります(ShipmentModel.global_* フィールドを参照)。指定しない場合、グローバルな時間制限以外の制限はありません。

同じ繰り返しフィールドに属する時間ウィンドウは互いに重複してはいけません。つまり、別の時間ウィンドウと重複したり隣接したりすることはできず、時系列順である必要があります。

cost_per_hour_after_soft_end_timesoft_end_time は、時間枠が 1 つの場合にのみ設定できます。

end_time_windows[]

TimeWindow

車両が目的地に到着する可能性のある時間枠。グローバルな時間制限(ShipmentModel.global_* フィールドを参照)内に収める必要があります。指定しない場合、グローバルな時間制限以外の制限はありません。

同じ繰り返しフィールドに属する時間ウィンドウは互いに重複してはいけません。つまり、別の時間ウィンドウと重複したり隣接したりすることはできず、時系列順である必要があります。

cost_per_hour_after_soft_end_timesoft_end_time は、時間枠が 1 つの場合にのみ設定できます。

unloading_policy

UnloadingPolicy

車両に適用されている荷降ろしに関するポリシー。

load_limits

map<string, LoadLimit>

車両の積載量(重量、体積、パレット数など)。マップ内のキーは、読み込みタイプの識別子であり、Shipment.load_demands フィールドのキーと一致します。指定されたキーがこのマップにない場合、対応する容量は無制限とみなされます。

cost_per_hour

double

車両費用: すべての費用を加算します。Shipment.penalty_cost と同じ単位で指定する必要があります。

車両ルートの 1 時間あたりの費用。この費用は、ルートの所要時間全体に適用されます。所要時間には、移動時間、待ち時間、訪問時間が含まれます。cost_per_traveled_hour ではなく cost_per_hour を使用すると、レイテンシが増加する可能性があります。

cost_per_traveled_hour

double

車両ルートの走行 1 時間あたりの費用。この費用は、ルートの移動時間(ShipmentRoute.transitions でレポートされたもの)にのみ適用され、待ち時間と訪問時間は含みません。

cost_per_kilometer

double

車両ルートの 1 キロあたりの費用。この費用は、ShipmentRoute.transitions でレポートされる距離に適用され、単一の VisitRequestarrival_location から departure_location まで暗黙的に移動する距離には適用されません。

fixed_cost

double

配送処理にこの車両を使用する場合は固定費用が適用されます。

used_if_route_is_empty

bool

このフィールドは、ルートで荷物を配送しない車両にのみ適用されます。この場合、車両を中古と見なすべきかどうかを示します。

true の場合、車両は配送サービスを提供していなくても、開始地点から終了地点まで移動し、開始地点から終了地点までの移動に伴う時間と距離の費用が考慮されます。

それ以外の場合は、始点から終点まで移動せず、この車両には break_rule も遅延(TransitionAttributes から)もスケジュールされません。この場合、車両の ShipmentRoute には車両のインデックスとラベル以外の情報は含まれません。

route_duration_limit

DurationLimit

車両のルートの合計時間に適用される制限。ある OptimizeToursResponse における車両のルート時間は、vehicle_end_timevehicle_start_time の差です。

travel_duration_limit

DurationLimit

車両のルートの所要時間に適用される上限。ある OptimizeToursResponse におけるルートの移動時間は、すべての transitions.travel_duration の合計となります。

route_distance_limit

DistanceLimit

車両のルートの合計距離に適用される制限。ある特定の OptimizeToursResponse におけるルート距離は、すべての transitions.travel_distance_meters の合計です。

extra_visit_duration_for_visit_type

map<string, Duration>

Visit_types 文字列から期間へのマップを指定します。この期間は、VisitRequest.duration に加えて、指定された visit_types での訪問で受験する時間です。cost_per_hour が指定されている場合は、滞在時間が長くなります。キー(例: visit_types)を空の文字列にすることはできません。

訪問リクエストに複数の種類がある場合は、マップ内の種類ごとに所要時間が追加されます。

break_rule

BreakRule

この車両に適用する休憩スケジュールを記述します。空の場合、この車両の休憩はスケジュールされません。

label

string

この車両のラベルを指定します。このラベルは、対応する ShipmentRoutevehicle_label としてレスポンスで報告されます。

ignore

bool

true の場合、used_if_route_is_empty は false である必要があり、この車両は使用されません。

injected_first_solution_routes で無視された車両によって配送が行われた場合、最初のソリューションではスキップされますが、レスポンスでは自由に行うことができます。

injected_solution_constraint で無視された車両によって配送が行われ、関連する集荷/配達が車両にとどまるよう制限されている場合(レベル RELAX_ALL_AFTER_THRESHOLD に緩和されていない場合)は、レスポンスでスキップされます。配送の allowed_vehicle_indices フィールドが空でなく、許可された車両がすべて無視された場合は、レスポンスでスキップされます。

travel_duration_multiple

double

この車両の移動時間を増減するために使用できる乗法係数を指定します。たとえば、この値を 2.0 に設定すると、この車両は速度が遅く、標準車両の 2 倍の移動時間になります。この指標は滞在時間には影響しません。cost_per_hour または cost_per_traveled_hour が指定されている場合は、費用に影響します。[0.001, 1000.0] の範囲内で指定する必要があります。未設定の場合、車両は標準であり、この倍数は 1.0 とみなされます。

警告: 移動時間は、この乗数を適用した後、数値演算を実行する前に最も近い秒単位に丸められます。そのため、乗数の値が小さいと精度が低下する可能性があります。

以下の extra_visit_duration_for_visit_type もご覧ください。

DurationLimit

車両のルートの最大時間を定義する上限。ハードにもソフトにもできます。

ソフトリミット フィールドを定義する場合は、ソフト最大しきい値とそれに関連する費用の両方を一緒に定義する必要があります。

フィールド
max_duration

Duration

期間を max_duration 以下に制限するハードリミット。

soft_max_duration

Duration

ソフトリミットは最大時間制限を適用しませんが、違反するとルートにコストが発生します。このコストは、モデルで定義されている同じ単位での他のコストに加算されます。

定義する場合、soft_max_duration には負でない値を指定する必要があります。max_duration も定義されている場合、soft_max_duration は max_duration より小さくする必要があります。

quadratic_soft_max_duration

Duration

ソフトリミットは、最大時間制限を適用しませんが、違反すると、ルートに費用が発生します。このコストは、モデルで定義されている同じ単位での他のコストに加算されます。

定義する場合、quadratic_soft_max_duration には負でない値を指定する必要があります。max_duration も定義されている場合、quadratic_soft_max_durationmax_duration より小さく、差は 1 日を超えないようにする必要があります。

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

soft_max_duration しきい値違反があった場合に発生する 1 時間あたりの費用。期間がしきい値を下回ると、追加費用は 0 になります。しきい値を下回っている場合は、費用は次のように期間によって異なります。

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

費用は正の値にする必要があります。

cost_per_square_hour_after_quadratic_soft_max

double

quadratic_soft_max_duration のしきい値違反があった場合に発生する 1 平方時間あたりの費用。

期間がしきい値を下回ると、追加費用は 0 になります。しきい値を下回っている場合は、費用は次のように期間によって異なります。

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

費用は負でない値にしてください。

LoadLimit

車両に適用する負荷制限を定義します(例:「このトラックは 3,500 kg までしか積み込めません」。load_limits をご覧ください。

フィールド
soft_max_load

int64

負荷のソフトリミット。cost_per_unit_above_soft_max をご覧ください。

cost_per_unit_above_soft_max

double

この車両のルートで負荷が soft_max_load を超えた場合は、(車両ごとに 1 回のみ)次の費用ペナルティが適用されます(load - soft_max_load)* cost_per_unit_above_soft_max。すべての費用を合計し、Shipment.penalty_cost と同じ単位にする必要があります。

start_load_interval

Interval

ルートの始点における車両の許容積荷区間。

end_load_interval

Interval

ルートの終点における車両の許容積載区間。

max_load

int64

負荷の最大許容量。

間隔

許容される負荷量の間隔。

フィールド
min

int64

許容される最小負荷。0 以上である必要があります。両方を指定する場合は、minmax 以下にする必要があります。

max

int64

最大許容負荷。0 以上である必要があります。指定しない場合、最大負荷は制限されません。両方を指定する場合は、minmax 以下にする必要があります。

TravelMode

車両で使用できる移動手段。

これらは Google Maps Platform Routes Preferred API の移動手段のサブセットである必要があります(https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode)。

列挙型
TRAVEL_MODE_UNSPECIFIED 未指定の移動手段。DRIVING と同等。
DRIVING 運転ルート(車など)に対応する移動手段。
WALKING 徒歩ルートに対応する移動手段。

UnloadingPolicy

車両の積み下ろし方法に関するポリシー。受け取りと宅配の両方を行う配送にのみ適用されます。

その他の配送は、unloading_policy に関係なくルートの任意の場所で行うことができます。

列挙型
UNLOADING_POLICY_UNSPECIFIED 荷降ろしに関するポリシーが指定されていません。配送は、対応する集荷の後に行う必要があります。
LAST_IN_FIRST_OUT 配送は受け取りの逆の順序で行う必要がある
FIRST_IN_FIRST_OUT 配達は受け取りと同じ順序で行う必要があります

ウェイポイント

ウェイポイントをカプセル化します。ウェイポイントは、VisitRequest の到着地と出発地、および車両の出発地と終点を示します。

フィールド
side_of_road

bool

省略可。車両が道路の特定の側に停車することを優先して、このウェイポイントの位置を指定します。この値を設定すると、ルートは位置を通過するため、車両は、位置が道路の中心よりも偏っている道路脇で停止できるようになります。「WALKING」ではこのオプションは使用できません。選択します

共用体フィールド location_type。場所を表すさまざまな方法。location_type は次のいずれかになります。
location

Location

地理座標を使用して指定された地点。オプションで見出しも含む。

place_id

string

ウェイポイントに関連付けられているスポットのプレイス ID。