Package google.maps.routeoptimization.v1

Chỉ mục

RouteOptimization

Dịch vụ để tối ưu hoá các chuyến tham quan bằng xe.

Tính hợp lệ của một số loại trường:

  • google.protobuf.Timestamp
    • Thời gian tính theo thời gian Unix: giây kể từ 1970-01-01T00:00:00+00:00.
    • giây phải nằm trong [0, 253402300799], tức là trong [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • nano phải được huỷ đặt hoặc đặt thành 0.
  • google.protobuf.Duration
    • giây phải nằm trong [0, 253402300799], tức là trong [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • nano phải được huỷ đặt hoặc đặt thành 0.
  • google.type.LatLng
    • vĩ độ phải trong khoảng [-90.0, 90.0].
    • kinh độ phải nằm trong khoảng [-180,0, 180,0].
    • ít nhất một trong hai vĩ độ và kinh độ phải khác 0.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

Tối ưu hoá các chuyến tham quan xe cho một hoặc nhiều thông báo OptimizeToursRequest dưới dạng một lô.

Phương thức này là một Hoạt động dài (LRO). Các dữ liệu đầu vào để tối ưu hoá (thông báo OptimizeToursRequest) và đầu ra (thông báo OptimizeToursResponse) được đọc/ghi từ/vào Cloud Storage ở định dạng do người dùng chỉ định. Giống như phương thức OptimizeTours, mỗi OptimizeToursRequest chứa một ShipmentModel và trả về một OptimizeToursResponse chứa ShipmentRoute. Đây là một tập hợp tuyến đường mà các xe sẽ thực hiện để giảm thiểu chi phí tổng thể.

Phạm vi uỷ quyền

Yêu cầu phạm vi OAuth sau:

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

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

Gửi một OptimizeToursRequest chứa ShipmentModel và trả về một OptimizeToursResponse chứa ShipmentRoute. Đây là một tập hợp tuyến đường mà các xe sẽ thực hiện để giảm thiểu tổng chi phí.

Mô hình ShipmentModel chủ yếu bao gồm các Shipment cần được thực hiện và Vehicle có thể dùng để truyền tải các Shipment. ShipmentRoute gán Shipment cho Vehicle. Cụ thể hơn, chúng gán một loạt Visit cho mỗi xe, trong đó Visit tương ứng với VisitRequest (đây là phương thức đến lấy hàng hoặc giao hàng cho Shipment).

Mục tiêu là cung cấp thông tin chỉ định ShipmentRoute cho Vehicle để giảm thiểu tổng chi phí trong đó chi phí có nhiều thành phần được xác định trong ShipmentModel.

Phạm vi uỷ quyền

Yêu cầu phạm vi OAuth sau:

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

AggregatedMetrics

Chỉ số tổng hợp cho ShipmentRoute (tương ứng cho OptimizeToursResponse trên tất cả phần tử Transition và/hoặc Visit (tương ứng cho tất cả ShipmentRoute).

Trường
performed_shipment_count

int32

Số lượng lô hàng đã thực hiện. Xin lưu ý rằng một cặp tính năng đến lấy hàng và giao hàng chỉ được tính một lần.

travel_duration

Duration

Tổng thời gian di chuyển cho một tuyến đường hoặc một giải pháp.

wait_duration

Duration

Tổng thời gian chờ cho một tuyến đường hoặc một giải pháp.

delay_duration

Duration

Tổng thời gian trễ cho một tuyến đường hoặc một giải pháp.

break_duration

Duration

Tổng thời lượng điểm chèn cho một tuyến đường hoặc một giải pháp.

visit_duration

Duration

Tổng thời lượng ghé thăm của một tuyến đường hoặc một giải pháp.

total_duration

Duration

Tổng thời lượng phải bằng tổng thời lượng của tất cả các khoảng thời gian nêu trên. Đối với các tuyến đường, thuộc tính này cũng tương ứng với:

[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

Tổng quãng đường đi được cho một tuyến đường hoặc một giải pháp.

max_loads

map<string, VehicleLoad>

Tải trọng tối đa đạt được trên toàn bộ tuyến đường (giải pháp thay thế) đối với mỗi đại lượng trên tuyến này (giải pháp thay thế), được tính là giá trị tối đa trên tất cả Transition.vehicle_loads (tương ứng ShipmentRoute.metrics.max_loads.

BatchOptimizeToursMetadata

Loại này không có trường.

Siêu dữ liệu về hoạt động của lệnh gọi BatchOptimizeToursRequest.

BatchOptimizeToursRequest

Yêu cầu tối ưu hoá hàng loạt chuyến tham quan dưới dạng hoạt động không đồng bộ. Mỗi tệp đầu vào phải chứa một OptimizeToursRequest và mỗi tệp đầu ra sẽ chứa một OptimizeToursResponse. Yêu cầu này chứa thông tin để đọc/ghi và phân tích cú pháp tệp. Tất cả các tệp đầu vào và đầu ra phải nằm trong cùng một dự án.

Trường
parent

string

Bắt buộc. Dự án và vị trí mục tiêu để gọi điện.

Định dạng: * projects/{project-id} * projects/{project-id}/locations/{location-id}

Nếu bạn không chỉ định vị trí, hệ thống sẽ tự động chọn một khu vực.

model_configs[]

AsyncModelConfig

Bắt buộc. Thông tin đầu vào/đầu ra của từng mô hình mua hàng, chẳng hạn như đường dẫn tệp và định dạng dữ liệu.

AsyncModelConfig

Thông tin để giải quyết một mô hình tối ưu hoá một cách không đồng bộ.

Trường
display_name

string

Không bắt buộc. Tên mô hình do người dùng xác định, có thể được người dùng sử dụng làm biệt hiệu để theo dõi các mô hình.

input_config

InputConfig

Bắt buộc. Thông tin về mô hình đầu vào.

output_config

OutputConfig

Bắt buộc. Thông tin về vị trí đầu ra mong muốn.

BatchOptimizeToursResponse

Loại này không có trường.

Phản hồi BatchOptimizeToursRequest. Thao tác này sẽ được trả về trong Thao tác dài hạn sau khi thao tác này hoàn tất.

BreakRule

Quy tắc tạo thời gian nghỉ trên xe (ví dụ: giờ nghỉ ăn trưa). Nghỉ giải lao là một khoảng thời gian liền nhau, trong đó xe không hoạt động ở vị trí hiện tại và không thể ghé thăm. Có thể xảy ra ngắt:

  • trong quá trình di chuyển giữa hai lượt ghé thăm (bao gồm cả thời gian ngay trước hoặc ngay sau lượt ghé thăm, nhưng không phải ở giữa lượt ghé thăm), trong trường hợp này, khoảng thời gian này sẽ kéo dài thời gian vận chuyển tương ứng giữa các lượt ghé thăm,
  • hoặc trước khi xe khởi động (xe có thể không khởi động khi xe đang nghỉ). Trong trường hợp đó, điều này không ảnh hưởng đến thời gian khởi động xe.
  • hoặc sau khi xe kết thúc (ditto, với thời gian kết thúc xe).
Trường
break_requests[]

BreakRequest

Thứ tự ngắt quảng cáo. Xem thông báo BreakRequest.

frequency_constraints[]

FrequencyConstraint

Một số FrequencyConstraint có thể áp dụng. Tất cả họ phải được BreakRequest của BreakRule này đáp ứng. Vui lòng xem FrequencyConstraint.

BreakRequest

Bạn phải biết trước trình tự các điểm nghỉ (tức là số lượng và thứ tự của các điểm nghỉ) áp dụng cho từng xe. BreakRequest lặp lại xác định trình tự đó theo thứ tự xuất hiện. Khung thời gian của những đơn đặt hàng này (earliest_start_time / latest_start_time) có thể trùng nhau, nhưng chúng phải tương thích với thứ tự (đã đánh dấu vào ô này).

Trường
earliest_start_time

Timestamp

Bắt buộc. Giới hạn dưới (bao gồm) khi bắt đầu điểm chèn.

latest_start_time

Timestamp

Bắt buộc. Giới hạn trên (bao gồm) ở đầu điểm chèn.

min_duration

Duration

Bắt buộc. Thời lượng chèn tối thiểu. Phải dương.

FrequencyConstraint

Người ta có thể ràng buộc hơn nữa tần suất và thời lượng ngắt quãng được quy định ở trên, bằng cách áp dụng tần suất ngắt tối thiểu, chẳng hạn như "Phải nghỉ ít nhất 1 giờ mỗi 12 giờ". Giả sử điều này có thể được hiểu là "Trong khoảng thời gian trượt bất kỳ là 12 giờ, phải có ít nhất một điểm ngắt ít nhất một giờ", ví dụ đó sẽ chuyển thành FrequencyConstraint sau:

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

Thời gian và thời lượng của các điểm chèn trong giải pháp sẽ tuân theo tất cả các điều kiện ràng buộc đó, ngoài khoảng thời gian và thời lượng tối thiểu đã được chỉ định trong BreakRequest.

Trong thực tế, FrequencyConstraint có thể áp dụng cho các điểm chèn không liên tiếp. Ví dụ: lịch biểu sau đây tuân theo ví dụ "1 giờ mỗi 12 giờ":

  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
Trường
min_break_duration

Duration

Bắt buộc. Thời lượng chèn tối thiểu cho quy tắc ràng buộc này. Không âm. Xem nội dung mô tả về FrequencyConstraint.

max_inter_break_duration

Duration

Bắt buộc. Khoảng thời gian tối đa được phép của bất kỳ khoảng thời gian nào trên tuyến đường không bao gồm điểm ngắt một phần là duration >= min_break_duration. Phải dương.

DataFormat

Định dạng dữ liệu cho tệp đầu vào và đầu ra.

Enum
DATA_FORMAT_UNSPECIFIED Giá trị không hợp lệ, định dạng không được là UNSPECIFIED.
JSON Ký hiệu Đối tượng JavaScript.
PROTO_TEXT Định dạng văn bản vùng đệm giao thức. Xem https://protobuf.dev/reference/protobuf/textformat-spec/

DistanceLimit

Giới hạn xác định quãng đường tối đa mà bạn có thể đi được. Nó có thể cứng hoặc mềm.

Nếu đã xác định một giới hạn mềm, thì cả soft_max_meterscost_per_kilometer_above_soft_max đều phải được xác định và không thể là số âm.

Trường
max_meters

int64

Một giới hạn cố định đang ràng buộc khoảng cách tối đa là max_meters. Giới hạn này không được là số âm.

soft_max_meters

int64

Giới hạn tạm thời không áp dụng giới hạn khoảng cách tối đa, nhưng khi vi phạm sẽ dẫn đến chi phí cộng với các chi phí khác đã xác định trong mô hình, với cùng một đơn vị.

Nếu được xác định là soft_max_meters, thì giá trị phải nhỏ hơn max_meters và không được là số âm.

cost_per_kilometer_above_soft_max

double

Chi phí mỗi km phát sinh nếu khoảng cách vượt quá giới hạn soft_max_meters. Chi phí bổ sung là 0 nếu quãng đường thấp hơn giới hạn, nếu không thì công thức dùng để tính chi phí sẽ như sau:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

Chi phí không được là số âm.

GcsDestination

Vị trí Google Cloud Storage nơi(các) tệp đầu ra sẽ được ghi vào.

Trường
uri

string

Bắt buộc. URI Google Cloud Storage.

GcsSource

Vị trí Google Cloud Storage sẽ đọc tệp đầu vào.

Trường
uri

string

Bắt buộc. URI của đối tượng Google Cloud Storage có định dạng gs://bucket/path/to/object.

InjectedSolutionConstraint

Giải pháp được chèn vào yêu cầu bao gồm thông tin về những lượt truy cập nào phải được hạn chế và cách các lượt truy cập đó phải được hạn chế.

Trường
routes[]

ShipmentRoute

Tuyến đường của giải pháp cần chèn. Một số tuyến có thể bị loại khỏi giải pháp ban đầu. Các tuyến đường và lô hàng bị bỏ qua phải đáp ứng các giả định cơ bản về tính hợp lệ được liệt kê cho injected_first_solution_routes.

skipped_shipments[]

SkippedShipment

Bỏ qua các khâu vận chuyển giải pháp cần đưa vào. Một số giá trị có thể bị loại khỏi giải pháp ban đầu. Xem trường routes.

constraint_relaxations[]

ConstraintRelaxation

Đối với không có hoặc nhiều nhóm phương tiện, hãy chỉ định thời điểm và mức độ nới lỏng các hạn chế. Nếu trường này trống, thì mọi tuyến đường của xe không trống đều bị hạn chế hoàn toàn.

ConstraintRelaxation

Đối với một nhóm phương tiện, hãy xác định giới hạn ở(các) ngưỡng nào đối với lượt ghé thăm sẽ được nới lỏng và ở mức nào. Các lô hàng được liệt kê trong trường skipped_shipment bị hạn chế không được bỏ qua; tức là không thể thực hiện những lô hàng này.

Trường
relaxations[]

Relaxation

Tất cả các biện pháp nới lỏng phạm vi ghé thăm sẽ áp dụng cho các lượt ghé thăm trên các tuyến đường có phương tiện ở vehicle_indices.

vehicle_indices[]

int32

Chỉ định các chỉ mục xe mà quy tắc ràng buộc lượt truy cập relaxations áp dụng. Nếu trống, đây sẽ được coi là giá trị mặc định và relaxations áp dụng cho mọi xe không được chỉ định trong constraint_relaxations khác. Có thể có tối đa một trường mặc định, tức là tối đa một trường nới lỏng quy tắc được phép để trống vehicle_indices. Bạn chỉ có thể liệt kê chỉ mục xe một lần, kể cả trong vài constraint_relaxations.

Chỉ mục xe được liên kết giống như ShipmentRoute.vehicle_index, nếu interpret_injected_solutions_using_labels là đúng (xem nhận xét trên fields).

Thư giãn

Nếu bạn trống relaxations, thời gian bắt đầu và trình tự của tất cả lượt ghé thăm trên routes sẽ bị hạn chế hoàn toàn và bạn không thể chèn hoặc thêm lượt ghé thăm mới vào những tuyến đường đó. Ngoài ra, thời gian bắt đầu và kết thúc của xe trong routes bị ràng buộc hoàn toàn, trừ phi xe đó trống (tức là không có lượt ghé thăm và đã đặt used_if_route_is_empty thành false trong mô hình).

relaxations(i).level chỉ định mức nới lỏng quy tắc ràng buộc áp dụng cho lượt truy cập #j thoả mãn:

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

Tương tự, thời gian khởi động xe sẽ được nới lỏng thành relaxations(i).level nếu đáp ứng:

  • vehicle_start_time >= relaxations(i).threshold_time
  • relaxations(i).threshold_visit_count == 0 và phần cuối xe được nới lỏng thành relaxations(i).level nếu đáp ứng:
  • vehicle_end_time >= relaxations(i).threshold_time
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Để áp dụng mức độ thư giãn nếu một lượt truy cập đáp ứng threshold_visit_count HOẶC threshold_time hãy thêm 2 relaxations với cùng một level: một trong hai trường hợp chỉ có threshold_visit_count và giá trị còn lại chỉ có threshold_time. Nếu một lượt truy cập đáp ứng các điều kiện của nhiều relaxations, thì mức thoải mái nhất sẽ được áp dụng. Do đó, từ khi xe bắt đầu qua các lượt ghé qua tuyến đường để đến cuối xe, mức độ thư giãn sẽ trở nên thoải mái hơn, tức là mức độ thư giãn sẽ không giảm khi tuyến đường đang đi.

Thời gian và trình tự của các lượt ghé thăm tuyến đường không đáp ứng các điều kiện ngưỡng của relaxations bất kỳ sẽ bị hạn chế hoàn toàn và bạn không thể chèn lượt ghé thăm vào những trình tự này. Ngoài ra, nếu điểm khởi động hoặc kết thúc của phương tiện không đáp ứng các điều kiện về thời gian nới lỏng, thì thời gian sẽ được cố định, trừ phi xe không có người.

Trường
level

Level

Mức độ nới lỏng quy tắc ràng buộc áp dụng khi các điều kiện tại hoặc sau threshold_time VÀ ít nhất threshold_visit_count được đáp ứng.

threshold_time

Timestamp

Khoảng thời gian có thể áp dụng biện pháp nới lỏng hoặc sau đó level.

threshold_visit_count

int32

Số lượt truy cập tại hoặc sau thời điểm level nới lỏng có thể được áp dụng. Nếu threshold_visit_count bằng 0 (hoặc không được đặt), level có thể được áp dụng trực tiếp khi khởi động xe.

Nếu giá trị là route.visits_size() + 1, thì level chỉ có thể áp dụng cho phần đầu xe. Nếu giá trị lớn hơn route.visits_size() + 1, thì level sẽ không được áp dụng cho tuyến đó.

Cấp

Thể hiện các mức nới lỏng khác nhau, áp dụng cho một lượt truy cập và những mức độ tuân theo khi nó đáp ứng các điều kiện ngưỡng.

Bảng liệt kê dưới đây là để tăng mức độ thư giãn.

Enum
LEVEL_UNSPECIFIED

Mức thư giãn mặc định ngầm ẩn: không có ràng buộc nào được nới lỏng, tức là tất cả lượt truy cập đều bị ràng buộc hoàn toàn.

Không được dùng giá trị này trong level một cách rõ ràng.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Thời gian bắt đầu tham quan và thời gian bắt đầu/kết thúc của phương tiện sẽ được thay đổi, nhưng mỗi lượt ghé thăm vẫn bị ràng buộc với cùng một xe, đồng thời phải tuân thủ trình tự ghé thăm: không thể chèn lượt ghé thăm giữa hoặc trước thời gian ghé thăm đó.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Giống như RELAX_VISIT_TIMES_AFTER_THRESHOLD, nhưng trình tự lượt truy cập cũng thoải mái: lượt truy cập vẫn chỉ được ràng buộc với xe của họ.
RELAX_ALL_AFTER_THRESHOLD Giống như RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, nhưng xe cũng thoải mái: lượt truy cập hoàn toàn miễn phí tại hoặc sau thời gian của ngưỡng và có thể không hoạt động hiệu quả.

InputConfig

Chỉ định dữ liệu đầu vào cho [BatchOptimize Tours][google.maps.routeoptimization.v1.RouteOptimizedService.BatchOptimize Tours].

Trường
data_format

DataFormat

Bắt buộc. Định dạng dữ liệu đầu vào.

Trường hợp source. Bắt buộc. source chỉ có thể là một trong những trạng thái sau:
gcs_source

GcsSource

Vị trí của Google Cloud Storage. Đây phải là một đối tượng (tệp).

Vị trí

Đóng gói vị trí (điểm địa lý và tiêu đề không bắt buộc).

Trường
lat_lng

LatLng

Toạ độ địa lý của điểm tham chiếu.

heading

int32

Hướng la bàn được liên kết với hướng của luồng giao thông. Giá trị này được sử dụng để chỉ định lề đường dùng để đón và trả xe. Giá trị tiêu đề có thể từ 0 đến 360, trong đó 0 chỉ định tiêu đề của phía Bắc, 90 chỉ định tiêu đề của phía Đông, v.v.

OptimizeToursRequest

Yêu cầu gửi cho một trình giải quyết vấn đề tối ưu hoá chuyến tham quan. Công cụ này sẽ xác định mô hình vận chuyển cần giải quyết, cũng như các tham số tối ưu hoá.

Trường
parent

string

Bắt buộc. Dự án hoặc vị trí mục tiêu để gọi điện.

Định dạng: * projects/{project-id} * projects/{project-id}/locations/{location-id}

Nếu bạn không chỉ định vị trí, hệ thống sẽ tự động chọn một khu vực.

timeout

Duration

Nếu thời gian chờ này được đặt, máy chủ sẽ trả về phản hồi trước khi hết khoảng thời gian chờ hoặc đạt đến thời hạn của máy chủ cho các yêu cầu đồng bộ, tuỳ theo thời gian nào đến sớm hơn.

Đối với các yêu cầu không đồng bộ, máy chủ sẽ tạo một giải pháp (nếu có thể) trước khi hết thời gian chờ.

model

ShipmentModel

Mô hình vận chuyển cần giải quyết.

solving_mode

SolvingMode

Theo mặc định, chế độ giải quyết là DEFAULT_SOLVE (0).

search_mode

SearchMode

Chế độ tìm kiếm dùng để giải quyết yêu cầu.

injected_first_solution_routes[]

ShipmentRoute

Hướng dẫn thuật toán tối ưu hoá trong việc tìm giải pháp đầu tiên tương tự với giải pháp trước đó.

Mô hình này bị hạn chế khi giải pháp đầu tiên được xây dựng. Mọi lô hàng không được thực hiện trên một tuyến đường sẽ mặc nhiên bị bỏ qua trong giải pháp đầu tiên, nhưng chúng có thể được thực hiện trong các giải pháp kế tiếp.

Giải pháp phải đáp ứng một số giả định cơ bản về tính hợp lệ:

  • đối với tất cả các tuyến đường, vehicle_index phải nằm trong dải ô và không bị trùng lặp.
  • cho tất cả các lượt truy cập, shipment_indexvisit_request_index phải trong phạm vi.
  • một lô hàng chỉ có thể được tham chiếu trên một tuyến.
  • quy trình đến lấy hàng để giao đến lấy hàng phải được thực hiện trước khi giao hàng.
  • không thể thực hiện tối đa một phương án đến lấy hàng hoặc phương thức giao hàng thay thế cho một lô hàng.
  • đối với tất cả các tuyến đường, thời gian sẽ tăng lên (ví dụ: vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • bạn chỉ có thể vận chuyển hàng trên phương tiện được cho phép. Xe được phép chạy nếu Shipment.allowed_vehicle_indices trống hoặc vehicle_index của xe có trong Shipment.allowed_vehicle_indices.

Nếu giải pháp đã chèn không khả thi, thì hệ thống sẽ không trả về lỗi xác thực và hệ thống có thể trả về một lỗi cho biết tính không khả thi.

injected_solution_constraint

InjectedSolutionConstraint

Ràng buộc thuật toán tối ưu hoá để tìm giải pháp cuối cùng tương tự với giải pháp trước đó. Ví dụ: mục này có thể được dùng để đóng băng các phần của tuyến đường đã hoàn thành hoặc đang được hoàn thành nhưng không được sửa đổi.

Nếu giải pháp đã chèn không khả thi, thì hệ thống sẽ không trả về lỗi xác thực và hệ thống có thể trả về một lỗi cho biết tính không khả thi.

refresh_details_routes[]

ShipmentRoute

Nếu không để trống, những tuyến đường đã cho sẽ được làm mới mà không sửa đổi trình tự cơ bản của các lượt ghé thăm hoặc thời gian di chuyển: chỉ các thông tin chi tiết khác sẽ được cập nhật. Việc này không giải quyết được mô hình.

Kể từ năm 2020/11, dữ liệu này chỉ điền hình nhiều dòng của các tuyến không trống và yêu cầu populate_polylines phải có giá trị true.

Trường route_polyline của các tuyến đã truyền vào có thể không nhất quán với tuyến transitions.

Bạn không được sử dụng trường này cùng với injected_first_solution_routes hoặc injected_solution_constraint.

Shipment.ignoreVehicle.ignore không ảnh hưởng đến hành vi này. Hình nhiều đường vẫn được điền sẵn giữa tất cả lượt ghé thăm trên tất cả các tuyến đường không trống, bất kể các lô hàng hoặc phương tiện liên quan có bị bỏ qua hay không.

interpret_injected_solutions_using_labels

bool

Nếu đúng:

Cách diễn giải này áp dụng cho các trường injected_first_solution_routes, injected_solution_constraintrefresh_details_routes. Có thể dùng đối tượng này khi chỉ số vận chuyển hoặc chỉ số xe trong yêu cầu đã thay đổi kể từ khi giải pháp được tạo, có thể là do lô hàng hoặc phương tiện vận chuyển đã bị xoá khỏi hoặc được thêm vào yêu cầu.

Nếu đúng, nhãn thuộc các danh mục sau đây phải xuất hiện tối đa một lần trong danh mục tương ứng:

Nếu vehicle_label trong giải pháp được chèn không tương ứng với xe yêu cầu, thì tuyến đường tương ứng sẽ bị xoá khỏi giải pháp cùng với các lượt truy cập của nó. Nếu shipment_label trong dung dịch đã chèn không tương ứng với một yêu cầu vận chuyển, thì lượt truy cập tương ứng sẽ bị xoá khỏi giải pháp. Nếu SkippedShipment.label trong dung dịch được đưa vào không tương ứng với yêu cầu vận chuyển, thì SkippedShipment sẽ bị xoá khỏi dung dịch.

Việc xoá các lượt ghé thăm tuyến đường hoặc toàn bộ tuyến đường khỏi một giải pháp đã chèn có thể ảnh hưởng đến các hạn chế ngụ ý, điều này có thể dẫn đến sự thay đổi trong giải pháp, lỗi xác thực hoặc tính không khả thi.

LƯU Ý: Phương thức gọi phải đảm bảo rằng mỗi Vehicle.label (phản hồi. Shipment.label) xác định duy nhất một thực thể xe (giao hàng tương ứng) dùng trong 2 yêu cầu có liên quan: yêu cầu trước đây tạo ra OptimizeToursResponse dùng trong dung dịch được chèn và yêu cầu hiện tại chứa dung dịch được chèn. Các quy trình kiểm tra tính riêng biệt như mô tả ở trên là không đủ để đảm bảo yêu cầu này.

consider_road_traffic

bool

Hãy xem xét việc ước tính lưu lượng truy cập trong việc tính toán các trường ShipmentRoute Transition.travel_duration, Visit.start_timevehicle_end_time; khi thiết lập trường ShipmentRoute.has_traffic_infeasibilities và khi tính toán trường OptimizeToursResponse.total_cost.

populate_polylines

bool

Nếu đúng, các hình nhiều đường sẽ được điền vào các ShipmentRoute phản hồi.

populate_transition_polylines

bool

Nếu đúng, hệ thống sẽ điền hình nhiều đường vào phản hồi ShipmentRoute.transitions.

allow_large_deadline_despite_interruption_risk

bool

Nếu bạn đặt chính sách này, thì thời hạn cho yêu cầu có thể kéo dài tối đa 60 phút (xem tại https://grpc.io/blog/deadlines). Nếu không, thời hạn tối đa sẽ chỉ là 30 phút. Xin lưu ý rằng các yêu cầu dài hạn có nguy cơ gián đoạn lớn hơn đáng kể (nhưng vẫn nhỏ).

use_geodesic_distances

bool

Nếu đúng, quãng đường di chuyển sẽ được tính bằng khoảng cách trắc địa thay vì khoảng cách trên Google Maps và thời gian di chuyển sẽ được tính bằng khoảng cách trắc địa với tốc độ do geodesic_meters_per_second xác định.

label

string

Nhãn có thể dùng để xác định yêu cầu này, được báo cáo lại trong OptimizeToursResponse.request_label.

geodesic_meters_per_second

double

Khi use_geodesic_distances là true, bạn phải đặt trường này và xác định tốc độ áp dụng để tính toán thời gian di chuyển. Giá trị của thuộc tính này phải tối thiểu là 1 mét/giây.

max_validation_errors

int32

Cắt bớt số lượng lỗi xác thực được trả về. Những lỗi này thường được đính kèm với tải trọng lỗi INVALID_ mở rộng dưới dạng chi tiết lỗi BadRequest (https://cloud.google.com/apis/design/errors#error_details), trừ khi resolve_mode=VALIDATE_ONLY: xem trường OptimizeToursResponse.validation_errors. Giá trị mặc định là 100 và giới hạn ở mức 10.000.

SearchMode

Chế độ xác định hành vi tìm kiếm, đánh đổi độ trễ so với chất lượng giải pháp. Trong tất cả các chế độ, thời hạn yêu cầu chung đều được thực thi.

Enum
SEARCH_MODE_UNSPECIFIED Chế độ tìm kiếm chưa được chỉ định, tương đương với RETURN_FAST.
RETURN_FAST Hãy ngừng tìm kiếm sau khi tìm được giải pháp phù hợp đầu tiên.
CONSUME_ALL_AVAILABLE_TIME Hãy dành tất cả thời gian có sẵn để tìm kiếm giải pháp tốt hơn.

SolvingMode

Xác định cách trình giải quyết xử lý yêu cầu. Trong mọi chế độ, ngoại trừ VALIDATE_ONLY, nếu yêu cầu không hợp lệ, bạn sẽ gặp lỗi INVALID_REQUEST. Hãy xem max_validation_errors để giới hạn số lượng lỗi được trả về.

Enum
DEFAULT_SOLVE Giải mô hình.
VALIDATE_ONLY Chỉ xác thực mô hình mà không giải quyết mô hình: điền càng nhiều OptimizeToursResponse.validation_errors càng tốt.
DETECT_SOME_INFEASIBLE_SHIPMENTS

Chỉ điền OptimizeToursResponse.validation_errors hoặc OptimizeToursResponse.skipped_shipments và không thực sự giải quyết phần còn lại của yêu cầu (statusroutes không được đặt trong phản hồi). Nếu phát hiện tình trạng không có khả năng xảy ra trong các tuyến injected_solution_constraint, thì chúng sẽ được điền vào trường OptimizeToursResponse.validation_errorsOptimizeToursResponse.skipped_shipments sẽ bị để trống.

QUAN TRỌNG: không phải tất cả các lô hàng không khả thi đều được trả lại tại đây, mà chỉ những lô hàng được phát hiện là không khả thi trong quá trình xử lý trước.

OptimizeToursResponse

Phản hồi sau khi giải quyết một vấn đề về tối ưu hoá chuyến tham quan có chứa các tuyến đường mà từng xe đi theo, các chuyến hàng đã bỏ qua và tổng chi phí của giải pháp.

Trường
routes[]

ShipmentRoute

Tuyến đường được tính toán cho từng chiếc xe; tuyến đường thứ i tương ứng với xe thứ i trong mô hình.

request_label

string

Bản sao của OptimizeToursRequest.label, nếu nhãn được chỉ định trong yêu cầu.

skipped_shipments[]

SkippedShipment

Danh sách tất cả các lô hàng bị bỏ qua.

validation_errors[]

OptimizeToursValidationError

Danh sách tất cả lỗi xác thực mà chúng tôi có thể tự phát hiện. Xem phần giải thích "NHIỀU LỖI" cho thông báo OptimizeToursValidationError.

metrics

Metrics

Chỉ số thời lượng, khoảng cách và mức sử dụng cho giải pháp này.

Chỉ số

Chỉ số tổng thể, được tổng hợp trên tất cả các tuyến đường.

Trường
aggregated_route_metrics

AggregatedMetrics

Tổng hợp qua các tuyến đường. Mỗi chỉ số là tổng (hoặc giá trị tối đa, đối với tải) trên tất cả các trường ShipmentRoute.metrics cùng tên.

skipped_mandatory_shipment_count

int32

Số lượng các lô hàng bắt buộc bị bỏ qua.

used_vehicle_count

int32

Số lượng xe đã sử dụng. Lưu ý: nếu tuyến đường của xe trống và giá trị Vehicle.used_if_route_is_empty là true, thì xe đó được coi là đã qua sử dụng.

earliest_vehicle_start_time

Timestamp

Thời gian bắt đầu sớm nhất của một xe đã qua sử dụng, được tính là thời gian tối thiểu cho tất cả các xe đã qua sử dụng vào ngày ShipmentRoute.vehicle_start_time.

latest_vehicle_end_time

Timestamp

Thời gian kết thúc gần đây nhất của một xe đã qua sử dụng, được tính là thời gian tối đa cho tất cả các xe đã qua sử dụng vào ShipmentRoute.vehicle_end_time.

costs

map<string, double>

Chi phí giải pháp, được chia nhỏ theo các trường yêu cầu liên quan đến chi phí. Khoá là đường dẫn proto, so với dữ liệu đầu vào Optimize ToursRequest, ví dụ: "model.shipments.pickups.cost" và các giá trị này là tổng chi phí do trường chi phí tương ứng tạo ra, được tổng hợp trên toàn bộ giải pháp. Nói cách khác, chi phí["model.shipments.pickups.cost"] là tổng của tất cả chi phí đến lấy hàng so với giải pháp này. Tất cả chi phí xác định trong mô hình đều được báo cáo chi tiết tại đây, ngoại trừ các chi phí liên quan đến TransitionAttributes chỉ được báo cáo theo cách tổng hợp kể từ ngày 1 tháng 1 năm 2022.

total_cost

double

Tổng chi phí của giải pháp. Tổng của tất cả giá trị trong bản đồ chi phí.

OptimizeToursValidationError

Mô tả lỗi gặp phải khi xác thực một OptimizeToursRequest.

Trường
code

int32

Lỗi xác thực được xác định bằng cặp (code, display_name) luôn xuất hiện.

Các trường khác (bên dưới) cung cấp thêm ngữ cảnh về lỗi này.

NHIỀU LỖI: Khi có nhiều lỗi, quy trình xác thực sẽ cố gắng đưa ra một vài lỗi. Cũng giống như một trình biên dịch, đây là một quá trình không hoàn hảo. Một số lỗi xác thực sẽ là "nghiêm trọng", có nghĩa là các lỗi này sẽ làm dừng toàn bộ quá trình xác thực. Đây là trường hợp của các lỗi display_name="UNSPECIFIED", cùng với các lỗi khác. Một số lỗi có thể khiến quá trình xác thực bỏ qua các lỗi khác.

TÍNH ỔN ĐỊNH: codedisplay_name phải rất ổn định. Tuy nhiên, mã mới và tên hiển thị có thể xuất hiện theo thời gian. Điều này có thể khiến một yêu cầu cụ thể (không hợp lệ) tạo ra một cặp khác (code, display_name) vì lỗi mới đã ẩn mã cũ (xem phần "NHIỀU LỖI").

REFERENCE: Danh sách tất cả các cặp (mã, tên):

  • UNSPECIFIED = 0;
  • VALIDATION_TIMEOUT_ERROR = 10; Không thể hoàn tất quy trình xác thực trong thời hạn.
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_MODE = 1201;
    • REQUEST_OPTIONS_INVALID_MAX_VALIDATION_ERRORS = 1203;
    • REQUEST_OPTIONS_INVALID_GEODESIC_ mạnh_PER_SECONDS = 1204;
    • REQUEST_OPTIONS_GEODESIC_ mạnh_PER_SECONDS_TOO_ cùng = 1205;
    • REQUEST_OPTIONS_ missing_GEODESIC_ xây dựng PER_SECONDS = 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_DEFAULT_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_ quốc_TUỔI_DU LỊCH = 2004;
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
    • INJECTED_SOLUTION_MORE_ hơn_ONE_PER_TYPE = 2006;
    • INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • ShipMENT_MODEL_ERROR = 22;
    • ship_MODEL_TOO_LARGE = 2200;
    • ShipMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • ShipMENT_MODEL_GLOBAL_START_TIME_ nhạy_OR_NAN = 2202;
    • ShipMENT_MODEL_GLOBAL_END_TIME_TOO_LARGE_OR_NAN = 2203;
    • ShipMENT_MODEL_GLOBAL_START_TIME_HOURS_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_STEP_END_TIME = 2805;
    • TIME_WINDOW_INVALID_cost_PER_HOURS_BEFORE_SOFT_START_TIME = 2806;
    • TIME_WINDOW_INVALID_cost_PER_HOURS_HOURS_SOFT_END_TIME = 2807;
    • TIME_WINDOW_Cost_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_WINDOW_cost_VIEWS_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • Time_WINDOW_SOFT_START_TIME_WITHOUT_cost_BEFORE_SOFT_START_TIME = 2810;
    • Time_WINDOW_SOFT_END_TIME_WITHOUT_cost_SIDE_SOFT_END_TIME = 2811;
    • TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_ đầu_PREVIOUS = 2812;
    • TIME_WINDOW_START_TIME_STEP_SOFT_START_TIME = 2813;
    • Time_WINDOW_SOFT_START_TIME_STEP_END_TIME = 2814;
    • TIME_WINDOW_START_TIME_STEP_SOFT_END_TIME = 2815;
    • Time_WINDOW_SOFT_END_TIME_STEP_END_TIME = 2816;
    • TIME_WINDOW_Cost_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • Time_WINDOW_cost_VIEWS_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_+_UNSUPPORTED = 3003;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • TRANSITION_ATTRIBUTES_LOCATIONING_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_LOCATION_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_ {/7}ING_REVIEWS_TAGS_FIELDS = 3007;
    • TRANSITION_ATTRIBUTES_PAUSE_DURATION_GRANTE_OR_NAN = 3008;
    • TRANSITION_ATTRIBUTES_ hỗ trợ_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_SUBJECT_VALUE = 3100;
  • TẢI_LIMIT_ERROR = 33;
    • TẢI_LIMIT_INVALID_Cost_ABOVE_SOFT_MAX = 3303;
    • TẢI_LIMIT_SOFT_MAX_WITHOUT_Cost_ABOVE_SOFT_MAX = 3304;
    • TẢI_LIMIT_Cost_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3305;
    • 3306 : 3306 : 3306 .
    • TẢI_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • TẢI_LIMIT_MAX_LOAD_ biến_VALUE = 3308;
    • TẢI_LIMIT_SOFT_MAX_ABOVE_MAX = 3309;
  • INTERVAL_ERROR = 34;
    • INTERVAL_MIN_EXCEEDS_MAX = 3401;
    • INTERVAL_Negative_MIN = 3402;
    • INTERVAL_SUBJECT_MAX = 3403;
    • INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
    • INTERVAL_MAX_EXCEEDS_CAPACITY = 3405;
  • cách_LIMIT_ERROR = 36;
    • KHOẢNG TRỜI_LIMIT_INVALID_Cost_ SAU_SOFT_MAX = 3.601;
    • KHOẢNG CÁCH_LIMIT_SOFT_MAX_WITHOUT_Cost_SIDE_SOFT_MAX = 3602;
    • KHOẢNG TRỜI_LIMIT_Cost_SIDE_SOFT_MAX_WITHOUT_SOFT_MAX = 3603;
    • khoảng cách
    • khoảng cách
    • khoảng cách
  • THỜI LƯỢNG_LIMIT_ERROR = 38;
    • FCM_LIMIT_MAX_DURATION_SUBJECT_OR_NAN = 3.800;
    • FCM_LIMIT_SOFT_MAX_DURATION_DELTA_OR_NAN = 3.801;
    • FCM_LIMIT_INVALID_cost_PER_HOURS_ SAU_SOFT_MAX = 3.802;
    • FCM_LIMIT_SOFT_MAX_WITHOUT_cost_WITH_SOFT_MAX = 3.803;
    • THỜI GIAN_LIMIT_Cost_VIEWS_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
    • THỜI GIAN_LIMIT_QUADRATIC_SOFT_MAX_DURATION_ nhạy_OR_NAN = 3805;
    • IME_LIMIT_INVALID_cost_SAU_QUADRATIC_SOFT_MAX = 3806;
    • {5/}_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_cost_PER_SQUARE_HOURS = 3807;
    • {5/}_LIMIT_Cost_PER_SQUARE_HOURS_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • THỜI_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • THỜI GIAN_LIMIT_SOFT_MAX_LARGER_Thanh_MAX = 3810;
    • THỜI GIAN_LIMIT_QUADRATIC_SOFT_MAX_LARGER_Thanh_MAX = 3811;
    • THỜI GIAN_LIMIT_DIFF_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • FCM_LIMIT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3813;
    • FCM_LIMIT_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3814;
    • THỜI LƯỢNG_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3815;
  • ShipMENT_ERROR = 40;
    • shipMENT_PD_LIMIT_WITHOUT_CHOOSEUP_AND_OPTIONS = 4014;
    • shipMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_GRANTE_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_GRANTE_OR_NAN = 4002;
    • ShipMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4003;
    • ShipMENT_EMPTY_ShipMENT_TYPE = 4004;
    • ĐỊA_HÀNG_HÀNG_ĐIỆU_VẬN_ĐƠN_VỚI_KHÔNG_giao_hàng = 4005;
    • ShipMENT_INVALID_PENALTY_cost = 4.006;
    • ShipMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
    • shippingMENT_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
    • GỬI_INCONSISTENT_cost_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • GỬI_INCONSISTENT_Cost_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • ShipMENT_INVALID_cost_FOR_VEHICLE = 4011;
    • ShipMENT_Cost_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • shippingMENT_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_ vỡ_HOẶC_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_CANCELD = 4211;
    • VEHICLE_FIRST_ShipMENT_NOT_BOUND = 4212;
    • VEHICLE_LAST_TRANSMENT_INDEX_OUT_OF_BOUNDS = 4213;
    • VEHICLE_LAST_TRANSMENT_CANCELD = 4214;
    • VEHICLE_LAST_ShipMENT_NOT_BOUND = 4215;
    • VEHICLE_4216;
    • VEHICLE_INVALID_cost_PER_KILOMETER = 4217;
    • VEHICLE_INVALID_Cost_PER_HOURS = 4218;
    • VEHICLE_INVALID_cost_PER_TravelED_HOURS = 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_TỐI_DURATION_LONGER_Touch_DURATION_LIMIT = 4222;
  • VISIT_REQUEST_ERROR = 44;
    • VISIT_REQUEST_EMPTY_TAG = 4400;
    • VISIT_REQUEST_DUPLICATE_TAG = 4401;
    • VISIT_REQUEST_DURATION_SUBJECT_OR_NAN = 4404;
    • VISIT_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4405;
  • PRECED ý_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_SUBJECT_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_WITH_GLOBAL_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_JAWS_MAX_Inter_BREAK_DURATION_SUBJECT_OR_NAN = 4809;
    • BREAK_JAWS_MIN_BREAK_DURATION_ nhạy_OR_NAN = 4810;
    • BREAK_JAWS_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4811;
    • BREAK_JAWS_MAX_Inter_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4812;
    • BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
    • BREAK_TẦN_THIẾU_MAX_Inter_BREAK_DURATION = 4814;
    • BREAK_JAWS_{/3}_MIN_BREAK_DURATION = 4815;
  • ShipMENT_TYPE_INCOMPATIBILITY_ERROR = 50;
    • ShipMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001;
    • ShipMENT_TYPE_INCOMPATIBILITY_LESS_Touch_TWO_TYPES = 5002;
    • ship_TYPE_INCOMPATIBILITY_DUPLICATE_TYPE = 5003;
    • ShipMENT_TYPE_INCOMPATIBILITY_INVALID_INCOMPATIBILITY_MODE = 5004;
    • ShipMENT_TYPE_INCOMPATIBILITY_TOO_MANY_INCOMPATIBLITIES = 5005;
  • ship_TYPE_REQUIREMENT_ERROR = 52;
    • Lô hàng_TYPE_REQUIREMENT_NO_REQUIRED_TYPE = 52001;
    • Lô hàng_TYPE_REQUIREMENT_NO_DEPENDENT_TYPE = 52002;
    • Lô hàng_TYPE_REQUIREMENT_INVALID_REQUIREMENT_MODE = 52003;
    • Lô hàng_TYPE_REQUIREMENT_TOO_MANY_REQUIREMENTS = 52004;
    • Lô hàng_TYPE_REQUIREMENT_EMPTY_REQUIRED_TYPE = 52005;
    • Lô hàng_TYPE_REQUIREMENT_DUPLICATE_REQUIRED_TYPE = 52006;
    • Lô hàng_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
    • ShipMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
    • Lô hàng_TYPE_REQUIREMENT_DUPLICATE_DEPENDENT_TYPE = 52009;
    • Lô hàng_TYPE_REQUIREMENT_self_DEPENDENT_TYPE = 52010;
    • Lô hàng_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;
  • THỜI GIAN_SECONDS_MATRIX_ERROR = 56;
    • THỜI GIAN_SECONDS_MATRIX_DURATION_SUBJECT_OR_NAN = 5.600;
    • THỜI GIAN_SECONDS_MATRIX_DURATION_EXCEEDS_GLOBAL_DURATION = 5601;
display_name

string

Tên hiển thị lỗi.

fields[]

FieldReference

Ngữ cảnh lỗi có thể liên quan đến 0, 1 (hầu hết thời gian) hoặc nhiều trường hơn. Ví dụ: tham chiếu đến xe số 4 và lô hàng số 2 đến lấy hàng đầu tiên như sau:

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

Tuy nhiên, hãy lưu ý rằng số lượng giá trị riêng biệt của fields không được thay đổi đối với một mã lỗi nhất định.

error_message

string

Chuỗi ký tự mà con người đọc được, dùng để mô tả lỗi. Có mối liên kết 1:1 giữa codeerror_message (khi mã != "UNSPECIFIED").

TÍNH ỔN ĐỊNH: Không ổn định: thông báo lỗi liên quan đến một code nhất định có thể thay đổi (hy vọng là làm rõ điều này) theo thời gian. Thay vào đó, vui lòng sử dụng display_namecode.

offending_values

string

Có thể chứa(các) giá trị của(các) trường. Tính năng này không phải lúc nào cũng có sẵn. Bạn tuyệt đối không nên dựa vào và chỉ sử dụng công cụ này để gỡ lỗi cho mô hình theo cách thủ công.

FieldReference

Chỉ định ngữ cảnh cho lỗi xác thực. FieldReference luôn đề cập đến một trường nhất định trong tệp này và tuân theo cấu trúc phân cấp tương tự. Ví dụ: chúng tôi có thể chỉ định phần tử #2 của start_time_windows của xe #5 bằng cách sử dụng:

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

Tuy nhiên, chúng ta bỏ qua các thực thể cấp cao nhất như OptimizeToursRequest hoặc ShipmentModel để tránh làm nhồi nhét thông báo.

Trường
name

string

Tên của trường, ví dụ: "phương tiện".

sub_field

FieldReference

Trường phụ được lồng định kỳ nếu cần.

Trường hợp index_or_key.

index_or_key chỉ có thể là một trong những trạng thái sau:

index

int32

Chỉ mục của trường nếu lặp lại.

key

string

Khoá nếu trường là bản đồ.

OutputConfig

Chỉ định một đích đến cho kết quả [BatchOptimize Tours][google.maps.routeoptimization.v1.RouteOptimizedService.BatchOptimize Tours].

Trường
data_format

DataFormat

Bắt buộc. Định dạng dữ liệu đầu ra.

Trường hợp destination. Bắt buộc. destination chỉ có thể là một trong những trạng thái sau:
gcs_destination

GcsDestination

Vị trí Google Cloud Storage để ghi dữ liệu đầu ra.

Lô hàng

Vận chuyển một mặt hàng riêng lẻ, từ một mặt hàng do người đó đến lấy đến địa điểm giao hàng. Để việc vận chuyển được coi là đã thực hiện, một chiếc xe riêng biệt phải đến một trong các địa điểm nhận hàng của chiếc xe đó (và giảm hạn mức dự phòng tương ứng), sau đó ghé thăm một trong các địa điểm giao hàng của chiếc xe đó (và do đó tăng dung lượng dự phòng cho phù hợp).

Trường
display_name

string

Tên hiển thị do người dùng xác định của lô hàng. Mã này có thể dài tối đa 63 ký tự và có thể sử dụng các ký tự UTF-8.

pickups[]

VisitRequest

Tập hợp các phương án đến lấy hàng liên kết với lô hàng. Nếu không được chỉ định, xe chỉ cần đến một vị trí tương ứng với chuyến giao hàng.

deliveries[]

VisitRequest

Tập hợp các phương án giao hàng thay thế liên quan đến lô hàng. Nếu bạn không chỉ định, xe chỉ cần đi đến một vị trí tương ứng với đơn đến lấy hàng.

load_demands

map<string, Load>

Nhu cầu về tải trọng của lô hàng (ví dụ: trọng lượng, thể tích, số lượng kệ chứa, v.v.). Các khoá trong bản đồ phải là thông tin nhận dạng mô tả loại tải tương ứng, lý tưởng nhất là cũng chứa các đơn vị. Ví dụ: "weight_kg", "volume_gallons", "pallet_count", v.v. Nếu một khoá cụ thể không xuất hiện trên bản đồ, thì tải trọng tương ứng sẽ được coi là rỗng.

allowed_vehicle_indices[]

int32

Tập hợp phương tiện có thể thực hiện lô hàng này. Nếu trống, tất cả xe có thể thực hiện việc này. Xe được cung cấp theo chỉ mục trong danh sách vehicles của ShipmentModel.

costs_per_vehicle[]

double

Cho biết chi phí phát sinh khi từng xe giao hàng này. Nếu được chỉ định, thì lớp này phải có KHÔNG:

  • cùng số lượng phần tử như costs_per_vehicle_indices. costs_per_vehicle[i] tương ứng với xe costs_per_vehicle_indices[i] của mẫu.
  • số phần tử tương tự như có phương tiện trong mô hình. Phần tử thứ i tương ứng với xe #i của mẫu.

Những chi phí này phải có cùng đơn vị với penalty_cost và không được là số âm. Hãy để trống trường này nếu không có những chi phí như vậy.

costs_per_vehicle_indices[]

int32

Chỉ báo cho xe áp dụng costs_per_vehicle. Nếu không để trống thì thuộc tính này phải có cùng số lượng phần tử với costs_per_vehicle. Bạn không thể chỉ định chỉ số xe nhiều lần. Nếu một chiếc xe không nằm trong phạm vi áp dụng của costs_per_vehicle_indices, thì chi phí sẽ bằng 0.

pickup_to_delivery_absolute_detour_limit

Duration

Chỉ định thời gian đường vòng tuyệt đối tối đa so với quãng đường ngắn nhất từ khi đến lấy hàng đến khi giao hàng. Nếu được chỉ định, thì giá trị này không được là số âm, đồng thời lô hàng tối thiểu phải chứa một hàng đến lấy hàng và một mặt hàng giao tận nơi.

Ví dụ: Hãy là thời gian ngắn nhất cần thiết để chuyển thẳng từ phương thức đến lấy hàng đã chọn đến phương thức giao hàng khác đã chọn. Sau đó, chế độ cài đặt pickup_to_delivery_absolute_detour_limit sẽ thực thi:

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

Nếu cả giới hạn tương đối và giới hạn tuyệt đối đều được chỉ định trong cùng một lô hàng, thì giới hạn ràng buộc hơn sẽ được dùng cho mỗi cặp tính năng đến lấy hàng/giao hàng. Kể từ năm 2017/10, đường vòng chỉ được hỗ trợ khi thời gian di chuyển không phụ thuộc vào phương tiện.

pickup_to_delivery_time_limit

Duration

Chỉ định khoảng thời gian tối đa từ khi bắt đầu đến lấy hàng cho đến khi bắt đầu giao một lô hàng. Nếu được chỉ định, thì giá trị này không được là số âm, đồng thời lô hàng tối thiểu phải chứa một hàng đến lấy hàng và một mặt hàng giao tận nơi. Điều này không phụ thuộc vào việc lựa chọn phương án thay thế nào cho tính năng đến lấy hàng và giao hàng, cũng như tốc độ của xe. Điều này có thể được chỉ định cùng với các hạn chế đường vòng tối đa: giải pháp sẽ tuân thủ cả hai thông số kỹ thuật.

shipment_type

string

Chuỗi không trống chỉ định "loại" cho lô hàng này. Có thể dùng tính năng này để xác định tình trạng không tương thích hoặc các yêu cầu giữa shipment_types (xem shipment_type_incompatibilitiesshipment_type_requirements trong ShipmentModel).

Các điểm khác biệt so với visit_types được chỉ định cho một lượt truy cập: Tất cả các hình thức đến lấy hàng/giao hàng thuộc cùng một lô hàng đều có cùng shipment_type.

label

string

Chỉ định một nhãn cho lô hàng này. Nhãn này được báo cáo trong phản hồi trong shipment_label của ShipmentRoute.Visit tương ứng.

ignore

bool

Nếu đúng, hãy bỏ qua lô hàng này nhưng đừng áp dụng penalty_cost.

Việc bỏ qua thông tin vận chuyển sẽ dẫn đến lỗi xác thực khi có bất kỳ shipment_type_requirements nào trong mô hình.

Cho phép bỏ qua một lô hàng được thực hiện trong injected_first_solution_routes hoặc injected_solution_constraint; trình giải quyết sẽ xóa các lượt truy cập đến lấy hàng/giao hàng liên quan khỏi tuyến đường đang thực hiện. precedence_rules tham chiếu đến các lô hàng bị bỏ qua cũng sẽ bị bỏ qua.

penalty_cost

double

Nếu không hoàn thành quá trình vận chuyển, hình phạt này sẽ được cộng vào tổng chi phí của các tuyến đường. Một lô hàng được coi là đã hoàn tất nếu khách hàng truy cập một trong các lựa chọn thay thế đến lấy hàng và giao hàng. Chi phí có thể được biểu thị bằng cùng một đơn vị dùng cho tất cả các trường liên quan đến chi phí khác trong mô hình và phải là số dương.

LƯU Ý QUAN TRỌNG: Nếu bạn không chỉ định hình phạt này thì hình phạt này sẽ được coi là vô hạn, tức là bạn phải hoàn tất quá trình vận chuyển.

pickup_to_delivery_relative_detour_limit

double

Chỉ định thời gian đường vòng tương đối tối đa so với quãng đường ngắn nhất từ lúc đến lấy hàng đến khi giao hàng. Nếu được chỉ định, thì giá trị này không được là số âm, đồng thời lô hàng tối thiểu phải chứa một hàng đến lấy hàng và một mặt hàng giao tận nơi.

Ví dụ: Hãy là thời gian ngắn nhất cần thiết để chuyển thẳng từ phương thức đến lấy hàng đã chọn đến phương thức giao hàng khác đã chọn. Sau đó, chế độ cài đặt pickup_to_delivery_relative_detour_limit sẽ thực thi:

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

Nếu cả giới hạn tương đối và giới hạn tuyệt đối đều được chỉ định trong cùng một lô hàng, thì giới hạn ràng buộc hơn sẽ được dùng cho mỗi cặp tính năng đến lấy hàng/giao hàng. Kể từ năm 2017/10, đường vòng chỉ được hỗ trợ khi thời gian di chuyển không phụ thuộc vào phương tiện.

Tải

Khi thực hiện lượt ghé thăm, một số tiền xác định trước có thể được thêm vào tải xe nếu đó là xe đến lấy hàng, hoặc trừ đi nếu đó là dịch vụ giao hàng. Thông báo này xác định số tiền như vậy. Vui lòng xem load_demands.

Trường
amount

int64

Mức tải trọng của xe thực hiện lượt ghé thăm tương ứng sẽ thay đổi. Vì đây là một số nguyên, nên người dùng nên chọn một đơn vị thích hợp để tránh bị mất độ chính xác. Phải ≥ 0.

VisitRequest

Yêu cầu ghé thăm mà có thể thực hiện bằng phương tiện di chuyển: xe có vị trí địa lý (hoặc hai vị trí, xem bên dưới), thời gian mở cửa và đóng cửa được thể hiện bằng cửa sổ thời gian và thời gian sử dụng dịch vụ (thời gian mà phương tiện đã sử dụng để đến lấy hàng hoặc trả hàng).

Trường
arrival_location

LatLng

Vị trí địa lý mà xe đến khi thực hiện VisitRequest này. Nếu mô hình vận chuyển có ma trận khoảng cách thời gian, bạn không được chỉ định arrival_location.

arrival_waypoint

Waypoint

Điểm tham chiếu nơi xe đến khi thực hiện VisitRequest này. Nếu mô hình vận chuyển có ma trận khoảng cách thời gian, bạn không được chỉ định arrival_waypoint.

departure_location

LatLng

Vị trí địa lý nơi xe khởi hành sau khi hoàn thành VisitRequest này. Có thể bỏ qua nếu giống với arrival_location. Nếu mô hình vận chuyển có ma trận khoảng cách thời gian, bạn không được chỉ định departure_location.

departure_waypoint

Waypoint

Điểm tham chiếu nơi xe khởi hành sau khi chạy xong VisitRequest này. Có thể bỏ qua nếu giống với arrival_waypoint. Nếu mô hình vận chuyển có ma trận khoảng cách thời gian, bạn không được chỉ định departure_waypoint.

tags[]

string

Chỉ định các thẻ đi kèm với yêu cầu truy cập. Không được phép sử dụng chuỗi trống hoặc chuỗi trùng lặp.

time_windows[]

TimeWindow

Khoảng thời gian ràng buộc thời gian đến tại lượt ghé thăm. Xin lưu ý rằng xe có thể khởi hành ngoài khung thời gian đến, tức là thời gian đến + thời gian không cần nằm trong khung thời gian đó. Việc này có thể khiến xe phải chờ nếu đến nơi trước TimeWindow.start_time.

Việc không có TimeWindow có nghĩa là xe có thể thực hiện lượt ghé thăm này bất cứ lúc nào.

Các cửa sổ thời gian phải rời rạc, tức là không có khoảng thời gian nào phải chồng chéo hoặc liền kề với một khoảng thời gian khác và chúng phải theo thứ tự tăng dần.

Bạn chỉ có thể đặt cost_per_hour_after_soft_end_timesoft_end_time nếu có một khoảng thời gian duy nhất.

duration

Duration

Thời gian ghé thăm, tức là thời gian mà phương tiện đã đi từ lúc đến nơi đến lúc khởi hành (để cộng vào thời gian chờ có thể áp dụng, vui lòng xem phần time_windows).

cost

double

Chi phí phục vụ yêu cầu ghé thăm này trên một tuyến xe. Phương thức này có thể dùng để thanh toán các chi phí khác nhau cho mỗi lần đến lấy hàng hoặc giao hàng thay thế. Chi phí này phải cùng đơn vị với Shipment.penalty_cost và không được là số âm.

load_demands

map<string, Load>

Tải các nhu cầu của yêu cầu truy cập này. Trường này cũng giống như trường Shipment.load_demands, ngoại trừ việc trường này chỉ áp dụng cho VisitRequest này thay vì toàn bộ Shipment. Các nhu cầu được liệt kê ở đây sẽ được thêm vào các nhu cầu được liệt kê trong Shipment.load_demands.

visit_types[]

string

Xác định loại lượt truy cập. Việc này có thể dùng để phân bổ thêm thời gian cần thiết cho việc đi xe để hoàn thành lượt tham quan này (xem Vehicle.extra_visit_duration_for_visit_type).

Một loại chỉ có thể xuất hiện một lần.

label

string

Chỉ định một nhãn cho VisitRequest này. Nhãn này được báo cáo trong phản hồi là visit_label trong ShipmentRoute.Visit tương ứng.

ShipmentModel

Mô hình vận chuyển chứa một tập hợp các lô hàng mà một nhóm xe phải thực hiện, đồng thời giảm thiểu chi phí tổng thể, là tổng của:

  • chi phí định tuyến phương tiện (tổng chi phí trên tổng thời gian, chi phí mỗi thời gian di chuyển và chi phí cố định cho tất cả các phương tiện).
  • các hình phạt giao hàng không thực hiện.
  • chi phí vận chuyển trên toàn cầu
Trường
shipments[]

Shipment

Tập hợp các lô hàng phải được thực hiện trong mô hình.

vehicles[]

Vehicle

Tập hợp các phương tiện có thể dùng để tham quan.

global_start_time

Timestamp

Thời gian bắt đầu và kết thúc chung của mô hình: không thời điểm nào nằm ngoài phạm vi này có thể được coi là hợp lệ.

Khoảng thời gian của mô hình phải dưới một năm, tức là global_end_timeglobal_start_time phải cách nhau không quá 31536000 giây.

Khi sử dụng các trường cost_per_*hour, bạn nên đặt khoảng thời gian này thành một khoảng thời gian nhỏ hơn để tăng hiệu suất (ví dụ: nếu lập mô hình một ngày, bạn nên đặt giới hạn thời gian chung cho ngày đó). Nếu bạn không đặt chính sách này, thì hệ thống sẽ dùng 00:00:00 giờ UTC, ngày 1 tháng 1 năm 1970 (tức là giây: 0, nanos: 0) làm mặc định.

global_end_time

Timestamp

Nếu bạn không đặt chính sách này, thì hệ thống sẽ dùng 00:00:00 giờ UTC, ngày 1 tháng 1 năm 1971 (tức là giây: 31536000, nanos: 0) làm mặc định.

global_duration_cost_per_hour

double

"Thời lượng trên toàn cầu" của kế hoạch tổng thể là chênh lệch giữa thời gian bắt đầu có hiệu lực sớm nhất và thời gian kết thúc có hiệu lực gần đây nhất của tất cả các phương tiện. Chẳng hạn, người dùng có thể gán chi phí mỗi giờ cho số lượng đó để cố gắng và tối ưu hoá nhằm hoàn thành công việc sớm nhất. Chi phí này phải cùng đơn vị với Shipment.penalty_cost.

duration_distance_matrices[]

DurationDistanceMatrix

Chỉ định ma trận thời lượng và khoảng cách dùng trong mô hình. Nếu trường này trống, Google Maps hoặc khoảng cách trắc địa sẽ được sử dụng, tuỳ thuộc vào giá trị của trường use_geodesic_distances. Nếu không trống, use_geodesic_distances không thể là đúng và cả duration_distance_matrix_src_tags hay duration_distance_matrix_dst_tags đều không thể trống.

Ví dụ về cách dùng:

  • Có hai vị trí: locA và locB.
  • 1 xe bắt đầu tuyến đường tại locA và kết thúc tại locA.
  • 1 yêu cầu ghé thăm để đến lấy hàng tại locB.
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
    }
  }
}
  • Có 3 vị trí: locA, locB và locC.
  • 1 xe bắt đầu tuyến đường tại locA và kết thúc tại locB, sử dụng ma trận "fast" (nhanh).
  • 1 xe bắt đầu tuyến đường tại locB và kết thúc tại locB, sử dụng ma trận "chậm".
  • 1 xe bắt đầu tuyến đường tại locB và kết thúc tại locB, sử dụng ma trận "fast" (nhanh).
  • 1 yêu cầu đến lấy hàng tại locC.
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

Thẻ xác định nguồn thời lượng và ma trận khoảng cách; duration_distance_matrices(i).rows(j) xác định thời lượng và khoảng cách từ các lượt truy cập có thẻ duration_distance_matrix_src_tags(j) đến các lượt truy cập khác trong ma trận i.

Các thẻ tương ứng với VisitRequest.tags hoặc Vehicle.start_tags. VisitRequest hoặc Vehicle đã cho phải khớp chính xác với một thẻ trong trường này. Hãy lưu ý rằng thẻ nguồn, thẻ đích và thẻ ma trận của Vehicle có thể giống nhau; tương tự như thẻ nguồn và thẻ đích của VisitRequest có thể giống nhau. Tất cả các thẻ phải khác nhau và không được là chuỗi trống. Nếu không trống trường này thì duration_distance_matrices cũng không được để trống.

duration_distance_matrix_dst_tags[]

string

Các thẻ xác định đích đến của thời lượng và ma trận khoảng cách; duration_distance_matrices(i).rows(j).durations(k) (tương ứng duration_distance_matrices(i).rows(j).meters(k)) xác định thời lượng (khoảng cách tương ứng) của hành trình từ lượt truy cập có thẻ duration_distance_matrix_src_tags(j) đến lượt truy cập có thẻ duration_distance_matrix_dst_tags(k) trong ma trận i.

Các thẻ tương ứng với VisitRequest.tags hoặc Vehicle.start_tags. VisitRequest hoặc Vehicle đã cho phải khớp chính xác với một thẻ trong trường này. Hãy lưu ý rằng thẻ nguồn, thẻ đích và thẻ ma trận của Vehicle có thể giống nhau; tương tự như thẻ nguồn và thẻ đích của VisitRequest có thể giống nhau. Tất cả các thẻ phải khác nhau và không được là chuỗi trống. Nếu không trống trường này thì duration_distance_matrices cũng không được để trống.

transition_attributes[]

TransitionAttributes

Đã thêm các thuộc tính chuyển đổi vào mô hình.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Tập hợp các loại lô hàng không tương thích (xem ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

Nhóm yêu cầu về shipment_type (xem ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

Tập hợp các quy tắc về mức độ ưu tiên phải được thực thi trong mô hình.

max_active_vehicles

int32

Giới hạn số lượng tối đa xe đang hoạt động. Một chiếc xe đang hoạt động nếu tuyến đường của xe đó thực hiện ít nhất một lần vận chuyển. Bạn có thể dùng tính năng này để giới hạn số tuyến đường trong trường hợp có ít người lái xe hơn phương tiện và nhóm phương tiện không đồng nhất. Sau đó, tính năng tối ưu hoá sẽ chọn ra nhóm xe tốt nhất để sử dụng. Phải hoàn toàn tích cực.

DurationDistanceMatrix

Nêu rõ ma trận thời lượng và khoảng cách từ vị trí ghé thăm và vị trí bắt đầu phương tiện để đến và điểm cuối phương tiện.

Trường
rows[]

Row

Chỉ định các hàng của thời lượng và ma trận khoảng cách. Tham số này phải có nhiều phần tử nhất là ShipmentModel.duration_distance_matrix_src_tags.

vehicle_start_tag

string

Thẻ xác định phương tiện sẽ áp dụng thời lượng và ma trận khoảng cách này. Nếu trống, thuộc tính này sẽ áp dụng cho tất cả xe và chỉ có thể có một ma trận duy nhất.

Mỗi lần khởi động xe phải khớp với đúng một ma trận, tức là một trong các trường start_tags của xe phải khớp với vehicle_start_tag của một ma trận (và chỉ của ma trận đó).

Tất cả các ma trận phải có một vehicle_start_tag khác nhau.

Hàng

Chỉ định một hàng gồm ma trận thời lượng và khoảng cách.

Trường
durations[]

Duration

Giá trị thời lượng cho một hàng nhất định. Tham số này phải có nhiều phần tử nhất là ShipmentModel.duration_distance_matrix_dst_tags.

meters[]

double

Giá trị khoảng cách cho một hàng nhất định. Nếu không có chi phí hoặc điều kiện ràng buộc nào tham chiếu đến khoảng cách trong mô hình, thì bạn có thể để trống trường này; nếu không thì giá trị này phải có nhiều phần tử nhất là durations.

PrecedenceRule

Quy tắc ưu tiên giữa hai sự kiện (mỗi sự kiện là đợt đến lấy hàng hoặc giao một lô hàng): sự kiện "thứ hai" phải bắt đầu ít nhất offset_duration sau khi "đầu tiên" bắt đầu.

Một số mức độ ưu tiên có thể đề cập đến cùng một sự kiện (hoặc có liên quan), ví dụ: "nhận hàng B sau khi giao hàng A" và "đến lấy hàng C sau khi đến lấy hàng B".

Hơn nữa, các mức độ ưu tiên chỉ áp dụng khi thực hiện cả hai quá trình vận chuyển và bỏ qua các trường hợp khác.

Trường
first_is_delivery

bool

Cho biết liệu sự kiện "đầu tiên" có phải là một lần phân phối hay không.

second_is_delivery

bool

Cho biết liệu sự kiện "giây" có phải là một sự kiện phân phối hay không.

offset_duration

Duration

Mức chênh lệch giữa sự kiện "đầu tiên" và "thứ hai". Giá trị này có thể mang giá trị âm.

first_index

int32

Chỉ số vận chuyển của sự kiện "đầu tiên". Trường này phải được chỉ định.

second_index

int32

Chỉ số vận chuyển của sự kiện "thứ hai". Trường này phải được chỉ định.

ShipmentRoute

Tuyến đường của xe có thể bị phân rã, dọc theo trục thời gian, như sau (chúng tôi giả định có n lượt ghé thăm):

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

Xin lưu ý rằng chúng tôi có sự khác biệt giữa:

  • "sự kiện đúng giờ", chẳng hạn như thời điểm bắt đầu và kết thúc phương tiện, cũng như thời điểm bắt đầu và kết thúc của mỗi lượt ghé thăm (còn gọi là thời điểm đến và khởi hành). Chúng xảy ra tại một giây nhất định.
  • "khoảng thời gian", chẳng hạn như chính các lượt truy cập và chuyển đổi giữa các lượt truy cập. Mặc dù đôi khi các khoảng thời gian có thể có thời lượng bằng không, tức là bắt đầu và kết thúc tại cùng một giây, nhưng chúng thường có thời lượng dương.

Bất biến:

  • Nếu có n lượt truy cập, thì có n+1 chuyển đổi.
  • Lượt truy cập luôn được bao quanh bởi một chuyển đổi trước nó (cùng một chỉ mục) và một chuyển đổi sau nó (chỉ mục + 1).
  • Quá trình khởi động xe luôn theo sau quá trình chuyển đổi #0.
  • Điểm cuối của xe luôn đứng sau nút chuyển #n.

Khi phóng to, sau đây là những gì sẽ xảy ra trong 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

Cuối cùng, đây là cách sắp xếp DU LỊCH, BREAKS, TẠM DỪNG và CHỜ trong suốt quá trình chuyển đổi.

  • Chúng không chồng chéo nhau.
  • Thời gian chờ trước khi kết thúc cuộc gọi là duy nhất và phải là một khoảng thời gian liền nhau ngay trước lần ghé thăm tiếp theo (hoặc điểm cuối phương tiện). Do đó, bạn chỉ cần biết khoảng thời gian trễ để biết thời gian bắt đầu và kết thúc.
  • BREAKS là các khoảng thời gian liền nhau và không chồng chéo nhau. Phản hồi chỉ định thời gian bắt đầu và thời lượng của mỗi điểm chèn.
  • DU LỊCH và CHỜ "có thể được ưu tiên": các hoạt động này có thể bị gián đoạn nhiều lần trong quá trình chuyển đổi này. Khách hàng có thể giả định rằng quá trình di chuyển diễn ra "càng sớm càng tốt" và "chờ" để lấp đầy thời gian còn lại.

Ví dụ về (phức tạp):

                               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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Trường
vehicle_index

int32

Xe đang đi theo tuyến đường, được xác định bằng chỉ mục của xe trong nguồn ShipmentModel.

vehicle_label

string

Nhãn của xe thực hiện tuyến đường này, bằng ShipmentModel.vehicles(vehicle_index).label, nếu được chỉ định.

vehicle_start_time

Timestamp

Thời điểm xe bắt đầu tuyến đường.

vehicle_end_time

Timestamp

Thời điểm xe hoàn thành tuyến đường.

visits[]

Visit

Chuỗi lượt ghé thăm theo thứ tự đại diện cho một tuyến đường. Lượt ghé thăm[i] là lượt ghé thăm thứ i trong tuyến đường. Nếu trường này trống, xe được coi là chưa sử dụng.

transitions[]

Transition

Danh sách chuyển đổi theo thứ tự của tuyến đường.

has_traffic_infeasibilities

bool

Khi bạn đặt OptimizeToursRequest.consider_road_traffic thành true, trường này cho biết rằng thời gian tuyến đường sẽ không nhất quán bằng cách sử dụng ước tính thời lượng di chuyển dựa trên giao thông. Có thể không có đủ thời gian để hoàn thành việc đi lại đã điều chỉnh theo lưu lượng giao thông, sự chậm trễ và nghỉ giữa các lượt ghé thăm, trước lượt ghé thăm đầu tiên hoặc sau lượt ghé thăm sau cùng, trong khi vẫn đáp ứng được khoảng thời gian ghé thăm và khung thời gian xe chạy. Ví dụ:

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

Chuyến đến next_visit có thể sẽ diễn ra muộn hơn khung thời gian hiện tại do thời gian di chuyển ước tính tăng travel_duration(previous_visit, next_visit) do giao thông. Ngoài ra, điểm chèn quảng cáo có thể trùng lặp với một lượt ghé thăm do tăng ước tính thời gian đi lại và các hạn chế về thời lượng ghé thăm hoặc thời gian nghỉ.

route_polyline

EncodedPolyline

Biểu thị nhiều đường được mã hoá của tuyến. Trường này chỉ được điền nếu bạn đặt OptimizeToursRequest.populate_polylines thành true.

breaks[]

Break

Các điểm ngắt đã lên lịch cho xe thực hiện tuyến đường này. Trình tự breaks biểu thị các khoảng thời gian, mỗi khoảng thời gian bắt đầu tại start_time tương ứng và kéo dài duration giây.

metrics

AggregatedMetrics

Các chỉ số thời lượng, khoảng cách và tải trọng cho tuyến đường này. Các trường của AggregatedMetrics được tính tổng trên toàn bộ ShipmentRoute.transitions hoặc ShipmentRoute.visits, tuỳ thuộc vào ngữ cảnh.

route_costs

map<string, double>

Chi phí của tuyến đường, được chia nhỏ theo các trường yêu cầu liên quan đến chi phí. Khoá là đường dẫn proto, so với dữ liệu đầu vào Optimize ToursRequest, ví dụ: "model.shipments.pickups.cost" và các giá trị này là tổng chi phí do trường chi phí tương ứng tạo ra, được tổng hợp trên toàn bộ tuyến đường. Nói cách khác, chi phí["model.shipments.pickups.cost"] là tổng của tất cả chi phí đến lấy hàng trong suốt lộ trình. Tất cả chi phí xác định trong mô hình đều được báo cáo chi tiết tại đây, ngoại trừ các chi phí liên quan đến TransitionAttributes chỉ được báo cáo theo cách tổng hợp kể từ ngày 1 tháng 1 năm 2022.

route_total_cost

double

Tổng chi phí của tuyến đường. Tổng của tất cả chi phí trong bản đồ chi phí.

Nghỉ giải lao

Dữ liệu biểu thị quá trình thực thi điểm chèn quảng cáo.

Trường
start_time

Timestamp

Bắt đầu thời gian nghỉ giải lao.

duration

Duration

Thời lượng của điểm chèn quảng cáo.

EncodedPolyline

Biểu thị được mã hoá của một hình nhiều đường. Bạn có thể tìm thêm thông tin về mã hoá nhiều dòng tại đây: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

Trường
points

string

Chuỗi đại diện cho các điểm được mã hoá của hình nhiều đường.

Hiệu ứng chuyển cảnh

Chuyển đổi giữa hai sự kiện trên tuyến đường. Xem nội dung mô tả về ShipmentRoute.

Nếu xe không có start_location và/hoặc end_location, thì chỉ số về hành trình tương ứng sẽ bằng 0.

Trường
travel_duration

Duration

Thời gian di chuyển trong quá trình chuyển đổi này.

travel_distance_meters

double

Quãng đường đã đi trong quá trình chuyển đổi.

traffic_info_unavailable

bool

Khi có yêu cầu về lưu lượng truy cập qua OptimizeToursRequest.consider_road_traffic và không thể truy xuất thông tin lưu lượng truy cập cho Transition, giá trị boolean này được đặt thành true. Đây có thể là sự cố tạm thời (hiếm khi xảy ra trục trặc trong các máy chủ lưu lượng truy cập theo thời gian thực) hoặc vĩnh viễn (không có dữ liệu cho vị trí này).

delay_duration

Duration

Tổng khoảng thời gian trễ áp dụng cho quá trình chuyển đổi này. Nếu có, thời gian trễ sẽ bắt đầu chính xác là delay_duration giây trước sự kiện tiếp theo (lượt ghé thăm hoặc kết thúc xe). Vui lòng xem TransitionAttributes.delay.

break_duration

Duration

Tổng thời lượng các điểm chèn xảy ra trong quá trình chuyển đổi này, nếu có. Thông tin chi tiết về thời gian bắt đầu và thời lượng của mỗi điểm chèn được lưu trữ trong ShipmentRoute.breaks.

wait_duration

Duration

Thời gian chờ trong quá trình chuyển đổi này. Thời gian chờ tương ứng với thời gian không hoạt động và không bao gồm thời gian nghỉ. Ngoài ra, xin lưu ý rằng thời gian chờ này có thể được chia thành nhiều khoảng thời gian không liên tiếp.

total_duration

Duration

Tổng thời lượng chuyển đổi, được cung cấp để thuận tiện. Giá trị này bằng:

  • hãy truy cập start_time (hoặc vehicle_end_time nếu đây là chuyển đổi cuối cùng) - chuyển đổi này là start_time;
  • nếu ShipmentRoute.has_traffic_infeasibilities là false, các giá trị sau đây cũng sẽ được giữ lại: `total_duration = Tourism_duration + delay_duration
  • break_duration + chờ_duration`.
start_time

Timestamp

Thời gian bắt đầu của quá trình chuyển đổi này.

route_polyline

EncodedPolyline

Nội dung biểu thị nhiều đường được mã hoá của tuyến đường mà theo đó trong quá trình chuyển đổi. Trường này chỉ được điền nếu bạn đặt populate_transition_polylines thành true.

vehicle_loads

map<string, VehicleLoad>

Tải trọng xe trong quá trình chuyển đổi này, đối với mỗi loại xuất hiện trong Vehicle.load_limits của xe này, hoặc loại có Shipment.load_demands khác 0 trong một số lô hàng được thực hiện trên tuyến đường này.

Tải trọng trong quá trình chuyển đổi đầu tiên là tải trọng bắt đầu của tuyến đường xe chạy. Sau đó, sau mỗi lượt truy cập, load_demands của lượt truy cập sẽ được cộng hoặc trừ để nhận được lượt tải của lượt chuyển đổi tiếp theo, tuỳ thuộc vào việc lượt truy cập đó là đến lấy hàng hay giao hàng.

VehicleLoad

Báo cáo tải trọng thực tế của xe tại một thời điểm dọc theo tuyến đường, cho một loại nội dung cụ thể (xem Transition.vehicle_loads).

Trường
amount

int64

Tải trọng xe, cho loại cụ thể. Đơn vị tải thường được biểu thị theo loại. Vui lòng xem Transition.vehicle_loads.

Truy cập

Lượt ghé thăm được thực hiện trong một tuyến đường. Lượt truy cập này tương ứng với việc đến lấy hàng hoặc giao hàng của Shipment.

Trường
shipment_index

int32

Chỉ mục của trường shipments trong ShipmentModel nguồn.

is_pickup

bool

Nếu đúng, lượt truy cập này tương ứng với việc nhận Shipment. Nếu không, nó tương ứng với một phân phối.

visit_request_index

int32

Chỉ mục của VisitRequest trong trường đến lấy hàng hoặc giao hàng của Shipment (xem is_pickup).

start_time

Timestamp

Thời gian bắt đầu lượt truy cập. Xin lưu ý rằng xe có thể đến sớm hơn tại địa điểm ghé thăm. Thời gian phải nhất quán với ShipmentModel.

load_demands

map<string, Load>

Tổng nhu cầu tải lượt truy cập là tổng của lô hàng và yêu cầu lượt truy cập load_demands. Các giá trị là số âm nếu lượt truy cập là một lần phân phối. Nhu cầu được báo cáo cho các loại giống như Transition.loads (xem trường này).

detour

Duration

Thời gian đi vòng thêm do các chuyến hàng đã được khách đến trên tuyến đường trước khi tới và do có thể phải chờ đợi do cửa sổ thời gian. Nếu lượt ghé thăm là một chuyến giao hàng, thì đường vòng được tính từ lượt ghé thăm tương ứng và bằng:

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

Nếu không, giá trị này được tính từ xe start_location và bằng:

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

string

Bản sao của Shipment.label tương ứng, nếu được chỉ định trong Shipment.

visit_label

string

Bản sao của VisitRequest.label tương ứng, nếu được chỉ định trong VisitRequest.

ShipmentTypeIncompatibility

Chỉ định trường hợp không tương thích giữa các lô hàng tuỳ thuộc vào lô_hàng. Việc xuất hiện các lô hàng không tương thích trên cùng một tuyến đường sẽ bị hạn chế dựa trên chế độ không tương thích.

Trường
types[]

string

Danh sách các loại dữ liệu không tương thích. Hai lô hàng có shipment_types khác nhau trong số các gói hàng được liệt kê là "không tương thích".

incompatibility_mode

IncompatibilityMode

Chế độ được áp dụng cho trường hợp không tương thích.

IncompatibilityMode

Chế độ xác định cách hạn chế việc xuất hiện của các lô hàng không tương thích trên cùng một tuyến đường.

Enum
INCOMPATIBILITY_MODE_UNSPECIFIED Chế độ không tương thích chưa chỉ định. Tuyệt đối không sử dụng giá trị này.
NOT_PERFORMED_BY_SAME_VEHICLE Ở chế độ này, hai lô hàng có loại không tương thích sẽ không bao giờ được dùng chung một xe.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Đối với hai lô hàng có loại không tương thích với chế độ không tương thích NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Nếu cả hai đều chỉ sử dụng dịch vụ đến lấy hàng (không có dịch vụ giao hàng) hoặc chỉ có dịch vụ giao hàng (không có phương thức đến lấy hàng), thì cả hai đều không thể dùng chung một phương tiện.
  • Nếu một trong hai lô hàng có dịch vụ giao hàng và lô hàng còn lại có thể đến lấy hàng, thì hai lô hàng đó có thể sử dụng chung một phương tiện, nếu lô hàng cũ được giao trước khi lô hàng thứ hai được đến lấy hàng.

ShipmentTypeRequirement

Nêu các yêu cầu giữa các lô hàng dựa trên lô hàng_type. Các chi tiết cụ thể của yêu cầu được xác định bằng chế độ yêu cầu.

Trường
required_shipment_type_alternatives[]

string

Danh sách các loại vận chuyển thay thế theo yêu cầu của dependent_shipment_types.

dependent_shipment_types[]

string

Tất cả các lô hàng có loại trong trường dependent_shipment_types đều cần phải truy cập ít nhất một lô hàng loại required_shipment_type_alternatives trên cùng một tuyến đường.

LƯU Ý: Không cho phép các chuỗi yêu cầu sao cho shipment_type phụ thuộc vào chính nó.

requirement_mode

RequirementMode

Chế độ được áp dụng cho yêu cầu.

RequirementMode

Phương thức xác định sự xuất hiện của các lô hàng phụ thuộc trên một tuyến đường.

Enum
REQUIREMENT_MODE_UNSPECIFIED Chế độ yêu cầu chưa được chỉ định. Tuyệt đối không sử dụng giá trị này.
PERFORMED_BY_SAME_VEHICLE Ở chế độ này, tất cả các lô hàng "phụ thuộc" đều phải sử dụng chung một phương tiện với ít nhất một trong số các lô hàng "bắt buộc".
IN_SAME_VEHICLE_AT_PICKUP_TIME

Với chế độ IN_SAME_VEHICLE_AT_PICKUP_TIME, tất cả các lô hàng "phụ thuộc" đều cần có ít nhất một lô hàng "bắt buộc" trên xe tại thời điểm đến lấy hàng.

Do đó, dịch vụ đến lấy hàng "phụ thuộc" phải có:

  • Một lô hàng "bắt buộc" chỉ có thể giao hàng và được giao trên tuyến đường sau đó, hoặc
  • Lô hàng "bắt buộc" được đến lấy trên tuyến đường trước đó. Nếu lô hàng "bắt buộc" có hàng được giao, thì lô hàng này phải được thực hiện sau lần đến lấy hàng "phụ thuộc".
IN_SAME_VEHICLE_AT_DELIVERY_TIME Giống như trước đây, ngoại trừ các lô hàng "phụ thuộc" cần có một lô hàng "bắt buộc" trên xe của họ tại thời điểm giao hàng.

SkippedShipment

Chỉ định chi tiết về các lô hàng chưa thực hiện trong một giải pháp. Đối với các trường hợp nhỏ và/hoặc nếu chúng tôi có thể xác định được nguyên nhân bỏ qua, chúng tôi sẽ báo cáo lý do tại đây.

Trường
index

int32

Chỉ mục này tương ứng với chỉ mục của lô hàng trong nguồn ShipmentModel.

label

string

Bản sao của Shipment.label tương ứng, nếu được chỉ định trong Shipment.

reasons[]

Reason

Danh sách các lý do giải thích tại sao đơn đặt hàng bị bỏ qua. Xem nhận xét phía trên Reason.

Lý do

Nếu chúng tôi có thể giải thích lý do đơn đặt hàng bị bỏ qua, lý do sẽ được liệt kê ở đây. Nếu lý do không giống nhau cho tất cả xe, reason sẽ có nhiều hơn 1 phần tử. Lô hàng bị bỏ qua không được có lý do trùng lặp, tức là tất cả các trường đều giống nhau ngoại trừ example_vehicle_index. Ví dụ:

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
}

Lô hàng đã bỏ qua không tương thích với tất cả xe. Có thể có nhiều lý do khác nhau cho tất cả các xe, nhưng có ít nhất một xe vượt quá dung lượng "Táo" (kể cả xe 1), ít nhất một xe vượt quá tải trọng "Lê" (kể cả xe 3) và vượt quá giới hạn khoảng cách của ít nhất một xe (kể cả xe 1).

Trường
code

Code

Hãy tham khảo nhận xét của Mã.

example_exceeded_capacity_type

string

Nếu mã lý do là DEMAND_EXCEEDS_VEHICLE_CAPACITY, hãy ghi lại một loại dung lượng bị vượt quá.

example_vehicle_index

int32

Nếu lý do này có liên quan đến vấn đề không tương thích với xe vận chuyển, thì trường này sẽ cung cấp chỉ số của một chiếc xe có liên quan.

Mã xác định loại lý do. Thứ tự ở đây không có ý nghĩa. Cụ thể, phương pháp này không cho biết liệu một lý do cụ thể có xuất hiện trước một lý do khác trong giải pháp hay không, nếu cả hai nguyên nhân đều phù hợp.

Enum
CODE_UNSPECIFIED Tuyệt đối không sử dụng thuộc tính này. Nếu không thể hiểu được lý do đơn hàng bị bỏ qua, chúng tôi chỉ cần trả lại một nhóm lý do không có lý do.
NO_VEHICLE Không có chiếc xe nào trong mô hình khiến mọi quá trình vận chuyển đều không khả thi.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Nhu cầu vận chuyển vượt quá hạn mức của xe đối với một số loại sức chứa, một trong số đó là example_exceeded_capacity_type.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

Quãng đường tối thiểu cần thiết để thực hiện lô hàng này, tức là từ start_location của xe đến vị trí đến lấy hàng và/hoặc giao hàng, và đến vị trí cuối của xe vượt quá route_distance_limit của xe.

Xin lưu ý rằng để tính toán này, chúng tôi sử dụng khoảng cách trắc địa.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

Thời gian tối thiểu cần thiết để thực hiện lô hàng này, bao gồm cả thời gian di chuyển, thời gian chờ và thời gian phục vụ vượt quá route_duration_limit của xe.

Lưu ý: thời gian di chuyển được tính trong trường hợp tốt nhất, cụ thể là khoảng cách trắc địa x 36 m/s (khoảng 130 km/giờ).

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT Tương tự như trên, nhưng chúng tôi chỉ so sánh thời gian di chuyển tối thiểu và travel_duration_limit của xe.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS Xe không thể thực hiện việc vận chuyển này trong trường hợp tốt nhất (xem CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT để tính thời gian) nếu bắt đầu tại thời điểm bắt đầu sớm nhất: tổng thời gian sẽ khiến xe kết thúc sau thời gian kết thúc gần nhất.
VEHICLE_NOT_ALLOWED Trường allowed_vehicle_indices của lô hàng không được để trống và chiếc xe này không thuộc về trường hợp vận chuyển đó.

TimeWindow

Khung thời gian ràng buộc thời gian của một sự kiện, chẳng hạn như thời gian đến khi ghé thăm, hoặc thời gian bắt đầu và kết thúc của xe.

Các giới hạn về khung thời gian cố định, start_timeend_time, thực thi thời gian sớm nhất và muộn nhất của sự kiện, sao cho start_time <= event_time <= end_time. Giới hạn dưới của khoảng thời gian mềm (soft_start_time) thể hiện lựa chọn ưu tiên cho sự kiện này xảy ra vào lúc hoặc sau soft_start_time bằng cách phát sinh chi phí tỷ lệ với thời gian trước khi sự kiện này xảy ra. Giới hạn trên của khung thời gian mềm (soft_end_time) thể hiện lựa chọn ưu tiên để sự kiện xảy ra vào lúc hoặc trước soft_end_time bằng cách phát sinh chi phí tỷ lệ với khoảng thời gian sau khi sự kiện xảy ra soft_end_time. start_time, end_time, soft_start_timesoft_end_time phải nằm trong giới hạn thời gian chung (xem ShipmentModel.global_start_timeShipmentModel.global_end_time) và phải tuân thủ:

  0 <= `start_time` <= `soft_start_time` <= `end_time` and
  0 <= `start_time` <= `soft_end_time` <= `end_time`.
Trường
start_time

Timestamp

Thời gian bắt đầu khung thời gian khó. Nếu bạn không chỉ định, thuộc tính này sẽ được đặt thành ShipmentModel.global_start_time.

end_time

Timestamp

Thời gian kết thúc của khung thời gian khó khăn. Nếu bạn không chỉ định, thuộc tính này sẽ được đặt thành ShipmentModel.global_end_time.

soft_start_time

Timestamp

Thời gian bắt đầu mềm của khung thời gian.

soft_end_time

Timestamp

Thời gian kết thúc tạm thời của khung thời gian.

cost_per_hour_before_soft_start_time

double

Chi phí mỗi giờ được thêm vào các chi phí khác trong mô hình nếu sự kiện xảy ra trước flow_start_time, được tính như sau:

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

Chi phí này phải là số dương và bạn chỉ có thể đặt trường này nếu đã đặt Soft_start_time.

cost_per_hour_after_soft_end_time

double

Chi phí mỗi giờ được thêm vào các chi phí khác trong mô hình nếu sự kiện xảy ra sau soft_end_time, được tính như sau:

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

Chi phí này phải là số dương và bạn chỉ có thể đặt trường nếu đã đặt soft_end_time.

TransitionAttributes

Chỉ định các thuộc tính chuyển đổi giữa hai lượt truy cập liên tiếp trên một tuyến. Nhiều TransitionAttributes có thể áp dụng cho cùng một lượt chuyển đổi: trong trường hợp đó, mọi chi phí phát sinh sẽ tăng thêm và áp dụng ràng buộc hoặc giới hạn nghiêm ngặt nhất (theo ngữ nghĩa "AND" tự nhiên).

Trường
src_tag

string

Các thẻ xác định tập hợp các hiệu ứng chuyển đổi (src->dst) mà các thuộc tính này áp dụng.

Lượt truy cập nguồn hoặc lượt khởi động xe khớp với VisitRequest.tags hoặc Vehicle.start_tags của nó chứa src_tag hoặc không chứa excluded_src_tag (tuỳ thuộc vào trường nào trong hai trường này không trống).

excluded_src_tag

string

Vui lòng xem src_tag. Không được để trống chính xác một trong hai thuộc tính src_tagexcluded_src_tag.

dst_tag

string

Lượt ghé thăm điểm đến hoặc điểm cuối của phương tiện khớp với VisitRequest.tags hoặc Vehicle.end_tags của nó chứa dst_tag hoặc không chứa excluded_dst_tag (tuỳ thuộc vào trường nào trong hai trường này không được để trống).

excluded_dst_tag

string

Vui lòng xem dst_tag. Không được để trống chính xác một trong hai thuộc tính dst_tagexcluded_dst_tag.

cost

double

Chỉ định chi phí để thực hiện quá trình chuyển đổi này. Chi phí này bằng với đơn vị của tất cả các chi phí khác trong mô hình và không được là số âm. Chi phí này được áp dụng trên tất cả các chi phí hiện có khác.

cost_per_kilometer

double

Chỉ định chi phí mỗi km được áp dụng cho khoảng cách đã đi trong khi thực hiện chuyển đổi này. Giá trị này cộng lại tối đa là Vehicle.cost_per_kilometer được chỉ định trên xe.

distance_limit

DistanceLimit

Chỉ định giới hạn về quãng đường đã đi khi thực hiện quá trình chuyển đổi này.

Kể từ năm 2021/06, chỉ hỗ trợ giới hạn tạm thời.

delay

Duration

Chỉ định độ trễ phát sinh khi thực hiện quá trình chuyển đổi này.

Sự chậm trễ này luôn xảy ra sau khi kết thúc lượt truy cập nguồn và trước khi bắt đầu lượt truy cập điểm đến.

Loại xe

Lập mô hình một chiếc xe trong sự cố vận chuyển. Khi giải quyết vấn đề vận chuyển, bạn sẽ tạo một tuyến đường bắt đầu từ start_location và kết thúc lúc end_location cho xe này. Tuyến đường là một chuỗi các lượt ghé thăm (xem ShipmentRoute).

Trường
display_name

string

Tên hiển thị của chiếc xe do người dùng xác định. Mã này có thể dài tối đa 63 ký tự và có thể sử dụng các ký tự UTF-8.

travel_mode

TravelMode

Chế độ di chuyển ảnh hưởng đến đường mà xe có thể sử dụng cũng như tốc độ của xe. Xem thêm travel_duration_multiple.

start_location

LatLng

Vị trí địa lý nơi xe bắt đầu trước khi đến lấy hàng. Nếu bạn không chỉ định, xe sẽ bắt đầu ở lần đến lấy hàng đầu tiên. Nếu mô hình vận chuyển có ma trận thời lượng và khoảng cách, bạn không được chỉ định start_location.

start_waypoint

Waypoint

Điểm tham chiếu biểu thị một vị trí địa lý nơi xe xuất phát trước khi đến lấy hàng. Nếu bạn không chỉ định start_waypoint hoặc start_location, thì xe sẽ bắt đầu ở điểm lấy hàng đầu tiên. Nếu mô hình vận chuyển có ma trận thời lượng và khoảng cách, bạn không được chỉ định start_waypoint.

end_location

LatLng

Vị trí địa lý nơi xe kết thúc sau khi chạy hết VisitRequest. Nếu bạn không chỉ định, ShipmentRoute của xe sẽ kết thúc ngay khi chạy hết VisitRequest cuối cùng. Nếu mô hình vận chuyển có ma trận thời lượng và khoảng cách, bạn không được chỉ định end_location.

end_waypoint

Waypoint

Điểm tham chiếu biểu thị một vị trí địa lý nơi xe kết thúc sau khi chạy hết VisitRequest. Nếu bạn không chỉ định end_waypoint hoặc end_location, thì ShipmentRoute của xe sẽ kết thúc ngay khi chạy hết VisitRequest cuối cùng. Nếu mô hình vận chuyển có ma trận thời lượng và khoảng cách, bạn không được chỉ định end_waypoint.

start_tags[]

string

Chỉ định các thẻ được gắn vào đầu tuyến đường của xe.

Không được phép sử dụng chuỗi trống hoặc chuỗi trùng lặp.

end_tags[]

string

Chỉ định các thẻ được gắn vào cuối tuyến đường của xe.

Không được phép sử dụng chuỗi trống hoặc chuỗi trùng lặp.

start_time_windows[]

TimeWindow

Khoảng thời gian mà xe có thể khởi hành từ vị trí bắt đầu. Các hạn mức này phải nằm trong giới hạn thời gian trên toàn cầu (xem các trường ShipmentModel.global_*). Nếu bạn không chỉ định thì sẽ không có giới hạn nào khác ngoài những giới hạn về thời gian trên toàn cầu.

Các khoảng thời gian thuộc cùng một trường lặp lại phải rời rạc, tức là không có khoảng thời gian nào có thể trùng lặp hoặc liền kề với một trường khác và phải theo trình tự thời gian.

Bạn chỉ có thể đặt cost_per_hour_after_soft_end_timesoft_end_time nếu có một khoảng thời gian duy nhất.

end_time_windows[]

TimeWindow

Khoảng thời gian mà xe có thể đến điểm cuối. Các hạn mức này phải nằm trong giới hạn thời gian trên toàn cầu (xem các trường ShipmentModel.global_*). Nếu bạn không chỉ định thì sẽ không có giới hạn nào khác ngoài những giới hạn về thời gian trên toàn cầu.

Các khoảng thời gian thuộc cùng một trường lặp lại phải rời rạc, tức là không có khoảng thời gian nào có thể trùng lặp hoặc liền kề với một trường khác và phải theo trình tự thời gian.

Bạn chỉ có thể đặt cost_per_hour_after_soft_end_timesoft_end_time nếu có một khoảng thời gian duy nhất.

unloading_policy

UnloadingPolicy

Chính sách huỷ tải được thực thi trên xe.

load_limits

map<string, LoadLimit>

Tải trọng của xe (ví dụ: trọng lượng, thể tích, số kệ). Các khoá trong bản đồ là giá trị nhận dạng của loại tải, nhất quán với các khoá của trường Shipment.load_demands. Nếu một khoá nhất định không có trong bản đồ này, dung lượng tương ứng được coi là không giới hạn.

cost_per_hour

double

Chi phí xe: cộng lại tất cả chi phí và phải cùng đơn vị với Shipment.penalty_cost.

Chi phí mỗi giờ của tuyến đường xe chạy. Chi phí này sẽ áp dụng cho tổng thời gian đi theo tuyến đường và bao gồm thời gian đi lại, thời gian chờ và thời gian ghé thăm. Việc sử dụng cost_per_hour thay vì chỉ cost_per_traveled_hour có thể khiến thời gian chờ tăng thêm.

cost_per_traveled_hour

double

Chi phí mỗi giờ đi lại của tuyến đường xe. Chi phí này chỉ được áp dụng cho thời gian đi lại trong tuyến đường (tức là được báo cáo vào ShipmentRoute.transitions), và không bao gồm thời gian chờ và thời gian ghé thăm.

cost_per_kilometer

double

Chi phí mỗi km của tuyến đường xe. Chi phí này được áp dụng cho quãng đường được báo cáo trong ShipmentRoute.transitions và không áp dụng cho bất kỳ quãng đường nào được ngầm định đi từ arrival_location đến departure_location của một VisitRequest.

fixed_cost

double

Áp dụng chi phí cố định nếu xe này được dùng để bốc hàng.

used_if_route_is_empty

bool

Trường này chỉ áp dụng cho các xe khi tuyến đường của những phương tiện đó không phục vụ bất kỳ chuyến hàng nào. Cột này cho biết trong trường hợp này, xe có được coi là đã qua sử dụng hay không.

Nếu đúng, chiếc xe sẽ đi từ điểm xuất phát đến điểm cuối ngay cả khi không phục vụ bất kỳ chuyến hàng nào. Ngoài ra, chi phí thời gian và quãng đường tính từ lúc bắt đầu đến điểm cuối sẽ được tính đến.

Nếu không, xe sẽ không di chuyển từ điểm bắt đầu đến vị trí kết thúc, và không có break_rule hoặc trì hoãn (từ TransitionAttributes) được lên lịch cho xe này. Trong trường hợp này, ShipmentRoute của xe không chứa bất kỳ thông tin nào, ngoại trừ chỉ số và nhãn của xe.

route_duration_limit

DurationLimit

Giới hạn này được áp dụng cho tổng thời gian đi trên tuyến đường của xe. Trong một OptimizeToursResponse nhất định, thời gian tuyến đường của một chiếc xe là chênh lệch giữa vehicle_end_timevehicle_start_time.

travel_duration_limit

DurationLimit

Giới hạn được áp dụng cho thời gian di chuyển trên tuyến đường của xe. Trong một OptimizeToursResponse nhất định, thời lượng di chuyển tuyến đường là tổng của tất cả transitions.travel_duration của tuyến đường đó.

route_distance_limit

DistanceLimit

Giới hạn được áp dụng cho tổng quãng đường theo tuyến đường của xe. Trong một OptimizeToursResponse nhất định, khoảng cách tuyến đường là tổng của tất cả transitions.travel_distance_meters.

extra_visit_duration_for_visit_type

map<string, Duration>

Chỉ định một mục ánh xạ từ chuỗi visit_types đến thời lượng. Đây là thời gian (ngoài VisitRequest.duration) được thực hiện tại các lượt truy cập bằng visit_types đã chỉ định. Thời lượng truy cập bổ sung này sẽ làm tăng chi phí nếu bạn chỉ định cost_per_hour. Khoá (tức là visit_types) không được là chuỗi trống.

Nếu một yêu cầu ghé thăm có nhiều loại, thì một khoảng thời gian sẽ được thêm cho mỗi loại trên bản đồ.

break_rule

BreakRule

Mô tả lịch nghỉ ngơi được thực thi trên xe này. Nếu trống, sẽ không lên lịch nghỉ cho xe này.

label

string

Chỉ định một nhãn cho xe này. Nhãn này được báo cáo trong phản hồi dưới dạng vehicle_label của ShipmentRoute tương ứng.

ignore

bool

Nếu đúng, used_if_route_is_empty phải là sai và chiếc xe này sẽ vẫn không được sử dụng.

Nếu một chiếc xe bị bỏ qua trong injected_first_solution_routes thực hiện lô hàng, thì lô hàng đó sẽ bị bỏ qua trong giải pháp đầu tiên nhưng được thực hiện miễn phí trong phản hồi.

Nếu một lô hàng do một xe bị bỏ qua trong injected_solution_constraint thực hiện và mọi hoạt động đến lấy/giao hàng có liên quan đều bị hạn chế phải ở trên xe (tức là không được nới lỏng ở cấp độ RELAX_ALL_AFTER_THRESHOLD), thì đơn hàng đó sẽ bị bỏ qua trong phản hồi. Nếu có trường allowed_vehicle_indices không trống và mọi xe được phép đều bị bỏ qua, thì lô hàng đó sẽ bị bỏ qua trong phản hồi.

travel_duration_multiple

double

Chỉ định một hệ số nhân có thể dùng để tăng hoặc giảm thời gian di chuyển của xe này. Ví dụ: Nếu bạn đặt giá trị này thành 2.0, thì phương tiện này chậm hơn và có thời gian di chuyển gấp đôi so với xe tiêu chuẩn. Bội số này không ảnh hưởng đến thời lượng truy cập. Giá trị này có ảnh hưởng đến chi phí nếu bạn chỉ định cost_per_hour hoặc cost_per_traveled_hour. Giá trị này phải nằm trong phạm vi [0,001, 1000,0]. Nếu bạn không đặt thì xe là xe tiêu chuẩn và hệ số này được coi là 1.0.

CẢNH BÁO: Thời gian di chuyển sẽ được làm tròn đến giây gần nhất sau khi áp dụng bội số này, nhưng trước khi thực hiện bất kỳ phép số nào, do đó, việc tăng một bội số nhỏ có thể làm mất độ chính xác.

Xem thêm extra_visit_duration_for_visit_type dưới đây.

DurationLimit

Giới hạn xác định thời lượng tối đa của tuyến đường của xe. Nó có thể cứng hoặc mềm.

Khi xác định trường giới hạn mềm, cả ngưỡng tối đa mềm và chi phí liên quan phải được xác định cùng nhau.

Trường
max_duration

Duration

Một giới hạn cố định ràng buộc thời lượng ở mức tối đa là max_duration.

soft_max_duration

Duration

Giới hạn tạm thời không áp dụng giới hạn thời lượng tối đa, nhưng khi vi phạm sẽ làm phát sinh chi phí cho tuyến đường. Chi phí này cộng với các chi phí khác được xác định trong mô hình, với cùng đơn vị.

Nếu được xác định, soft_max_duration phải là số không âm. Nếu cũng xác định max_duration, thì soft_max_duration phải nhỏ hơn max_duration.

quadratic_soft_max_duration

Duration

Giới hạn tạm thời không áp dụng giới hạn thời lượng tối đa, nhưng khi bạn vi phạm, tuyến đường sẽ phát sinh chi phí theo bậc hai trong thời lượng này. Chi phí này cộng với các chi phí khác được xác định trong mô hình, với cùng đơn vị.

Nếu được xác định, quadratic_soft_max_duration phải là số không âm. Nếu max_duration cũng được xác định, thì quadratic_soft_max_duration phải nhỏ hơn max_duration và mức chênh lệch không được lớn hơn một ngày:

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

Chi phí mỗi giờ phát sinh nếu bạn vi phạm ngưỡng soft_max_duration. Chi phí bổ sung bằng 0 nếu thời lượng nằm dưới ngưỡng, nếu không, chi phí phụ thuộc vào khoảng thời gian như sau:

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

Chi phí không được là số âm.

cost_per_square_hour_after_quadratic_soft_max

double

Chi phí mỗi giờ vuông phát sinh nếu bạn vi phạm ngưỡng quadratic_soft_max_duration.

Chi phí bổ sung bằng 0 nếu thời lượng nằm dưới ngưỡng, nếu không, chi phí phụ thuộc vào khoảng thời gian như sau:

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

Chi phí không được là số âm.

LoadLimit

Xác định giới hạn tải trọng áp dụng cho xe, ví dụ: "xe tải này chỉ có thể chở tối đa 3.500 kg". Vui lòng xem load_limits.

Trường
soft_max_load

int64

Giới hạn tạm thời của tải. Vui lòng xem cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Nếu tải trọng vượt quá soft_max_load dọc theo tuyến đường của xe này, mức phạt chi phí sau đây sẽ áp dụng (chỉ một lần cho mỗi xe): (tải trọng – soft_max_load) * cost_per_unit_above_soft_max. Tất cả chi phí cộng lại và phải cùng đơn vị với Shipment.penalty_cost.

start_load_interval

Interval

Khoảng thời gian tải chấp nhận được của xe khi bắt đầu tuyến đường.

end_load_interval

Interval

Khoảng thời gian cho phép của xe khi kết thúc tuyến đường.

max_load

int64

Lượng tải tối đa chấp nhận được.

Khoảng thời gian

Khoảng thời gian của các mức tải chấp nhận được.

Trường
min

int64

Tải trọng tối thiểu chấp nhận được. Phải ≥ 0. Nếu bạn chỉ định cả hai giá trị, thì min phải ≤ max.

max

int64

Tải trọng tối đa chấp nhận được. Phải ≥ 0. Nếu bạn chưa chỉ định, thông báo này sẽ không hạn chế tải tối đa. Nếu bạn chỉ định cả hai giá trị, thì min phải ≤ max.

TravelMode

Những phương tiện đi lại mà xe có thể sử dụng.

Các chế độ này sẽ nằm trong các chế độ đi lại ưu tiên của API Tuyến đường Google Maps trên nền tảng Google Maps. Hãy xem bài viết: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enum
TRAVEL_MODE_UNSPECIFIED Phương tiện đi lại chưa được chỉ định, tương đương với DRIVING.
DRIVING Chế độ đi lại tương ứng với chỉ đường lái xe (ô tô, ...).
WALKING Chế độ đi lại tương ứng với chỉ đường đi bộ.

UnloadingPolicy

Chính sách về cách dỡ xe. Chỉ áp dụng cho những lô hàng có cả hình thức đến lấy hàng và giao hàng.

Các quá trình vận chuyển khác có thể diễn ra ở bất kỳ đâu trên tuyến đường mà không phụ thuộc vào unloading_policy.

Enum
UNLOADING_POLICY_UNSPECIFIED Chính sách dỡ hàng chưa được chỉ định; quá trình giao hàng chỉ được diễn ra sau thời điểm đến lấy hàng tương ứng.
LAST_IN_FIRST_OUT Quá trình giao hàng phải diễn ra theo thứ tự đến lấy hàng đảo ngược
FIRST_IN_FIRST_OUT Giao hàng phải diễn ra theo cùng thứ tự với đơn đặt hàng tự đến lấy

Waypoint

Đóng gói một điểm tham chiếu. Điểm tham chiếu đánh dấu vị trí đến và đi của VisitRequests, cũng như vị trí bắt đầu và kết thúc của Phương tiện vận chuyển.

Trường
side_of_road

bool

Không bắt buộc. Cho biết vị trí của điểm tham chiếu này nhằm tuỳ chọn cho xe dừng ở một bên đường cụ thể. Khi bạn đặt giá trị này, tuyến đường sẽ đi qua vị trí để xe có thể dừng ở bên đường mà vị trí bị lệch so với giữa đường. Tùy chọn này không hoạt động cho chế độ đi lại "WALKING".

Trường hợp location_type. Các cách khác nhau để thể hiện một vị trí. location_type chỉ có thể là một trong những trạng thái sau:
location

Location

Điểm được chỉ định bằng toạ độ địa lý, bao gồm cả tiêu đề tuỳ chọn.

place_id

string

Mã địa điểm POI được liên kết với điểm tham chiếu.