Package google.maps.routeoptimization.v1

インデックス

RouteOptimization

車でのツアーを最適化するサービス。

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

  • google.protobuf.Timestamp
    • 時刻は Unix 時間(1970-01-01T00:00:00+00:00 からの秒数)で表されます。
    • seconds は [0、253402300799] の範囲内([1970-01-01T00:00:00+00:00、9999-12-31T23:59:59+00:00])にする必要があります。
    • nanos は未設定または 0 に設定する必要があります。
  • google.protobuf.Duration
    • seconds は [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] の範囲内になければなりません。
    • 緯度または経度のいずれかがゼロ以外である必要があります。
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

1 つ以上の OptimizeToursRequest メッセージの車両ルートをバッチとして最適化します。

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

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

LRO done フィールドが false の場合、1 つ以上のリクエストがまだ処理中です。他のリクエストは正常に完了し、その結果は Cloud Storage で利用できる場合があります。

LRO の done フィールドが true の場合、すべてのリクエストが処理されています。正常に処理されたリクエストの結果は Cloud Storage で利用できます。失敗したリクエストの結果は Cloud Storage で使用できません。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 に対応し、Shipment の集荷または配達を表します。

目標は、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 無効な値です。形式は 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

車両のグループを 1 つ以上指定し、制約を緩和するタイミングと緩和度を指定します。このフィールドが空の場合、空ではないすべての車両ルートが完全に制約されます。

ConstraintRelaxation

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

フィールド
relaxations[]

Relaxation

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

vehicle_indices[]

int32

訪問制約 relaxations が適用される車両インデックスを指定します。空の場合はデフォルトとして扱われ、relaxations は他の constraint_relaxations で指定されていないすべての車両に適用されます。デフォルトは 1 つまで指定できます。つまり、制約緩和フィールドを空にできるのは 1 つまでです。vehicle_indices車両インデックスは、複数の 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 および
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

訪問が threshold_visit_count または threshold_time の条件を満たしている場合に緩和レベルを適用するには、同じ level を持つ 2 つの relaxations を追加します。1 つは threshold_visit_count のみを設定し、もう 1 つは threshold_time のみを設定します。1 回のアクセスが複数の 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 件の配送に対して、代替の集荷または配送を 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

真の場合:

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

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

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

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

注: 呼び出し元は、各 Vehicle.labelShipment.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 を基準としたプロトパスです(例: model.shipments.pickups.cost)。値は、対応する費用フィールドによって生成された合計費用で、ソリューション全体で集計されます。つまり、costs["model.shipments.pickups.cost"] は、ソリューション全体の集荷費用の合計です。モデルで定義されているすべての費用が、ここで詳細にレポートされます。ただし、TransitionAttributes に関連する費用は、2022 年 1 月時点では集計された形でのみレポートされます。

total_cost

double

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

OptimizeToursValidationError

OptimizeToursRequest の検証中に発生したエラーまたは警告を説明します。

フィールド
code

int32

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

このセクションの後のフィールドには、エラーに関する詳細なコンテキストが表示されます。

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

安定性: codedisplay_name は非常に安定している必要があります。ただし、新しいコードと表示名が時間の経過とともに追加されるため、新しいエラーによって古いエラーが隠され、特定の(無効な)リクエストで異なる(codedisplay_name)ペアが返される可能性があります。たとえば、「複数のエラー」をご覧ください。

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 で対応しています(code が「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 つの商品の配送(集荷から配達まで)。配送が完了したと見なされるには、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

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

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

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

同じ配送で相対制限と絶対制限の両方が指定されている場合、可能な集荷/配達ペアごとに、より制限の厳しい制限が使用されます。2017 年 10 月現在、迂回路は、移動時間が車両に依存しない場合にのみサポートされています。

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

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

たとえば、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.load_demands フィールドと同じですが、Shipment 全体ではなく、この VisitRequest にのみ適用されます。ここで指定されたデマンド パラメータは、Shipment.load_demands に指定されたデマンド パラメータに追加されます。

visit_types[]

string

訪問の種類を指定します。車両がこの訪問を完了するために必要な追加時間を割り当てるために使用できます(Vehicle.extra_visit_duration_for_visit_type を参照)。

型は 1 回だけ使用できます。

label

string

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

ShipmentModel

配送モデルには、一連の車両によって実行される一連の配送が含まれます。このモデルでは、次の合計である総費用を最小限に抑えます。

  • 車両のルーティング費用(合計時間あたりの費用、移動時間あたりの費用、すべての車両の固定費用の合計)。
  • 未実施の配送に対するペナルティ。
  • 配送のグローバル期間の費用
フィールド
shipments[]

Shipment

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

vehicles[]

Vehicle

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

global_start_time

Timestamp

モデルのグローバルな開始時間と終了時間: この範囲外の時間は無効と見なされます。

モデルの時間範囲は 1 年未満にする必要があります。つまり、global_end_timeglobal_start_time は 31,536,000 秒以内にする必要があります。

cost_per_*hour フィールドを使用する場合は、パフォーマンスを向上させるためにこのウィンドウを短い間隔に設定することをおすすめします(たとえば、1 日をモデル化する場合は、グローバルな時間制限をその日に設定する必要があります)。未設定の場合、デフォルトとして 1970 年 1 月 1 日 00:00:00 UTC(秒: 0、ナノ秒: 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 つです。
  • 1 台の車両が locA から locB までルートを走行し、マトリックス「fast」を使用します。
  • 1 台の車両が locB でルートを開始し、locB で終了し、マトリックス「slow」を使用している。
  • 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 は、このフィールド内のタグと完全に一致する必要があります。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)) は、行列 i 内のタグ duration_distance_matrix_src_tags(j) の訪問からタグ duration_distance_matrix_dst_tags(k) の訪問までの移動時間(または距離)を定義します。

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

transition_attributes[]

TransitionAttributes

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

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

互換性のない shipment_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 フィールドのいずれかが、行列の vehicle_start_tag と完全に一致する必要があります(その行列のみ)。

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

所要時間と距離のマトリックスの行を指定します。

フィールド
durations[]

Duration

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

meters[]

double

特定の行の距離値。モデル内の距離を参照する費用や制約がない場合は、空のままにできます。それ以外の場合は、durations と同じ数の要素が必要です。

PrecedenceRule

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

複数の優先度が同じ(または関連する)イベントを参照できます(例:「B の集荷は A の配達後に行われる」と「C の集荷は B の集荷後に行われる」

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

フィールド
first_is_delivery

bool

「最初の」イベントが配信かどうかを示します。

second_is_delivery

bool

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

offset_duration

Duration

「first」イベントと「second」イベントの間のオフセット。負の値にすることもできます。

first_index

int32

「最初の」イベントの発送インデックス。このフィールドは指定する必要があります。

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 を基準としたプロトパスです(例: model.shipments.pickups.cost)。値は、対応する費用フィールドによって生成された合計費用で、ルート全体で集計されます。つまり、costs["model.shipments.pickups.cost"] は、ルート全体の集荷費用の合計です。モデルで定義されているすべての費用が、ここで詳細にレポートされます。ただし、TransitionAttributes に関連する費用は、2022 年 1 月時点では集計された形でのみレポートされます。

route_total_cost

double

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

休憩

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

フィールド
start_time

Timestamp

休憩の開始時間。

duration

Duration

休憩時間。

EncodedPolyline

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

フィールド
points

string

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

移行

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

車両に start_location または end_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
  • break_duration + wait_duration` です。
start_time

Timestamp

この移行の開始時間。

route_polyline

EncodedPolyline

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

route_token

string

出力専用。Navigation SDK に渡してナビゲーション中にルートを再構築できる不透明なトークン。ルートの再ルーティングが発生した場合、ルートの作成時の元の意図が尊重されます。このトークンは不透明な blob として扱います。サービスがまったく同じルートを返しても値が変更される可能性があるため、リクエスト間で値を比較しないでください。このフィールドは、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 の pickup フィールドまたは delivery フィールドの 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

shipment_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

shipment_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 つ以上含まれている必要があります。

そのため、「依存」する配送の集荷には、次のいずれかが必要です。

  • 配送のみの「必須」な荷物が、そのルートで後から配達された場合、または
  • 同じルートで先に集荷された「必須」の荷物があり、その「必須」の荷物に配送が含まれている場合、その配送は「依存」荷物の集荷後に行われる必要があります。
IN_SAME_VEHICLE_AT_DELIVERY_TIME 以前と同じですが、「依存」する荷物は配達時に車両に「必須」な荷物が積まれている必要があります。

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

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

example_exceeded_capacity_type

string

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

example_vehicle_index

int32

理由が配送車両との互換性に関連する場合、このフィールドには関連する車両のインデックスが 1 つ表示されます。

コード

理由の種類を識別するコード。ここでの順序は意味がありません。特に、両方の理由が適用される場合、特定の理由が解決策で別の理由の前に表示されるか否かは示されません。

列挙型
CODE_UNSPECIFIED 使用しないでください。
NO_VEHICLE モデルに車両がないため、すべての配送が不可能です。
DEMAND_EXCEEDS_VEHICLE_CAPACITY 荷物の需要が、一部の容量タイプ(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/秒(約 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 が含まれていないか(この 2 つのフィールドのどちらが空でないかによって異なります)場合のみです。

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 文字列から所要時間へのマップを指定します。所要時間は、指定された visit_types での訪問時に VisitRequest.duration に加えて取られる時間です。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

ソフトリミットでは、最大時間制限は適用されませんが、違反すると、ルートに時間の 2 乗に比例する費用が発生します。この費用は、モデルで定義された他の費用と合計され、同じ単位になります。

定義する場合、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

省略可。このウェイポイントの位置は、車両を優先的に道路の特定の側に停車することを指示することを示します。この値を設定すると、ルートはスポットの中心から偏った側の道路の端に車両を停車できるように、スポットを通過します。このオプションは、移動モードが「歩行」の場合に機能しません。

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

Location

地理座標(オプションの向きを含む)で指定されたポイント。

place_id

string

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