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 が含まれ、OptimizeToursResponse には ShipmentRoute が含まれます。これは車両によって実行される一連のルートであり、全体的なコストを最小限に抑えられます。

承認スコープ

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

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

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

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

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

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

承認スコープ

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

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

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_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

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

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 を適用する車両インデックスを指定します。空の場合、デフォルトとみなされ、他の constraint_relaxations で指定されていないすべての車両に relaxations が適用されます。デフォルトは 1 つまでです。つまり、空の vehicle_indices に指定できる制約緩和フィールドは 1 つまでです。車両インデックスは、複数の constraint_relaxations 内であっても、一度しかリストできません。

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

リラクゼーション

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

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 を持つ relaxations を 2 つ追加します。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.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

これが設定されている場合、リクエストの期限(https://grpc.io/blog/deadlines を参照)は最大 60 分です。それ以外の場合、期限は最大 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

返された検証エラーの数を切り捨てます。これらのエラーは通常、Solutions_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 モデルを解きます。
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

Google が個別に検出できたすべての検証エラーのリスト。OptimizeToursValidationError メッセージに関する「複数のエラー」の説明をご覧ください。

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」)です。値は、対応する費用フィールドによって生成された総費用を、ソリューション全体で集計したものです。つまり、cost["model.shipments.pickups.cost"] はソリューションの集荷費用の合計です。モデルで定義されているすべての費用は、ここでは詳細に報告されます。ただし、TransitionAttributes に関連する費用は、2022 年 1 月時点で集計された方法でのみ報告されます。

total_cost

double

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

OptimizeToursValidationError

OptimizeToursRequest の検証中に発生したエラーを示します。

フィールド
code

int32

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

他のフィールド(下記)には、エラーに関する詳細なコンテキストが表示されます。

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

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

参照: すべての (code, name) ペアのリスト。

  • UNSPECIFIED = 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 = 2,809;
    • 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_AFTER_END_TIME = 2814;
    • TIME_WINDOW_START_TIME_AFTER_SOFT_END_TIME = 2815;
    • TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2,817;
    • 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 = 3,100;
  • 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 = 3,606;
  • 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 = 3,808;
    • 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 = 3,812;
    • 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 = 3,815
  • SHIPMENT_ERROR = 40;
    • SHIPMENT_PD_LIMIT_WITHOUT_PICKUP_AND_DELIVERY = 4014;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4000;
    • 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;
  • 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;
  • SHIPMENT_TYPE_INCOMPATIBILITY_ERROR = 50;
    • SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 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;
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(コードが != "UNSPECIFIED" の場合)は 1 対 1 で対応しています。

安定性: 安定していません。特定の 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

フィールドの名前。例:。

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 の場所。

配送

単一の商品の配送(集荷 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

この荷物が各車両で配送されたときに発生する費用を指定します。指定する場合、EITHER:

  • 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 から除外されている場合、その費用はゼロです。

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 年と 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

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

たとえば、選択された代替受け取り場所から、選択された配送方法に直接到達するまでに要する最短時間を 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 年と 2010 年現在、迂回ルートは走行時間が車両に依存していない場合にのみサポートされます。

読み込み

訪問の際は、事前定義された金額が車両の積載量に加算(集荷の場合)され、配達の場合に減額される場合があります。このメッセージは、その金額を定義します。load_demandsをご確認ください。

フィールド
amount

int64

訪問に対応する車両の積載量が変わる量。これは整数なので、精度の低下を避けるため、適切な単位を選択することをおすすめします。0 以上の値を指定してください。

VisitRequest

車両による訪問のリクエスト: 位置情報(1 つまたは 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 つのタイプは 1 回だけ使用できます。

label

string

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

ShipmentModel

配送モデルには、一連の車両で実行する必要がある一連の配送が含まれ、費用全体を最小限に抑えることができます。合計コストは次のとおりです。

  • 車両の手配にかかる費用(総時間あたりの費用、移動時間あたりの費用、すべての車両の固定費用の合計)。
  • 不履行に対するペナルティが減ります
  • 世界全体での出荷期間にかかる費用
フィールド
shipments[]

Shipment

モデルで実行する必要がある出荷のセット。

vehicles[]

Vehicle

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

global_start_time

Timestamp

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

モデルの期間は 1 年未満にする必要があります。つまり、global_end_timeglobal_start_time の間隔は 3,153,600 秒以内でなければなりません。

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 つの場所があります。
  • 「fast」という行列を使用して、locA でルートを開始し、locB で終了する 1 台の車両。
  • 「slow」という行列を使用して、locB でルートを開始し、locB で終了する 1 台の車両。
  • 「fast」という行列を使用して、locB でルートを開始し、locB で終了する 1 台の車両。
  • 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) は、行列 i 内のタグ duration_distance_matrix_src_tags(j) のある訪問から他の訪問までの所要時間と距離を定義します。

タグは 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)) は、行列 i でタグ duration_distance_matrix_src_tags(j) の訪問からタグ duration_distance_matrix_dst_tags(k) の訪問までの移動時間(距離)を定義します。

タグは 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

指定された行の所要時間の値。ShipmentModel.duration_distance_matrix_dst_tags 個と同じ数の要素を含める必要があります。

meters[]

double

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

PrecedenceRule

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

同じ(または関連する)イベントを指す優先順位が複数あります(例:「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

次の 2 点は区別されます。

  • 車両の始点と終点、各訪問の始点と終点(到着と出発)などの「定刻イベント」。特定の瞬間に発生します。
  • 訪問そのものや、訪問間の移行などの「時間間隔」。時間間隔の期間がゼロになる(開始と終了を同じ秒にするなど)場合もありますが、多くの場合、継続時間は正になります。

不変条件:

  • 訪問が 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

ルートを表す一連の訪問順序です。visit[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)です。値は、対応するコスト フィールドによって生成された総コストで、ルート全体で集計されます。つまり、cost["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_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
  • break_duration + wait_duration`。
start_time

Timestamp

この移行の開始時間。

route_polyline

EncodedPolyline

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

vehicle_loads

map<string, VehicleLoad>

この移行中の車両の積載量。この車両の Vehicle.load_limits に現れるか、このルートで行われた一部の出荷で Shipment.load_demands が 0 以外のタイプごとに、積載量が計算されます。

最初の移行時の負荷は、車両ルートの開始負荷です。各訪問の後に、訪問の 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

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

フィールド
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 つの「必須」の配送が必要です。

そのため、「従属」の荷物の集荷には次のいずれかが必要です。

  • 次の日付より後のルートに配送される、宅配のみの「必須」の荷物
  • 「必須」の荷物は、その前のルートで集荷されます。「必須」の荷物に配達がある場合は、この配送は「従属」の荷物の集荷後に行う必要があります。
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 つの車両の「Pears」の収容力を超え(車両 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 一部の容量タイプ(そのうちの 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` <= `soft_start_time` <= `end_time` and
  0 <= `start_time` <= `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_tag または excluded_src_tag のいずれか 1 つのみを空にすることはできません。

dst_tag

string

VisitRequest.tags または Vehicle.end_tagsdst_tag が含まれているか、excluded_dst_tag が含まれていない場合は、訪問または車両の終了が一致します(この 2 つのフィールドが空でないかによって異なります)。

excluded_dst_tag

string

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

cost

double

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

cost_per_kilometer

double

この移行中の移動距離に適用される 1 km あたりの料金を指定します。車両で指定された 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 もご覧ください。

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

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

cost_per_kilometer

double

車両ルートの 1 km あたりの料金。この費用は、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 台につき 1 回のみ)。(負荷 - 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。