Package google.maps.routeoptimization.v1

Chỉ mục

RouteOptimization

Dịch vụ giúp 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 được tính theo thời gian Unix: giây kể từ 01/01/1970 00: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].
    • Bạn phải đặt nanos thành 0 hoặc không đặt.
  • 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].
    • Bạn phải đặt nanos thành 0 hoặc không đặt.
  • google.type.LatLng
    • vĩ độ phải nằm 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 theo lô.

Phương thức này là Hoạt động chạy trong thời gian dài (LRO). Dữ liệu đầu vào cho hoạt động tối ưu hoá (tin nhắn OptimizeToursRequest) và dữ liệu đầu ra (tin nhắn OptimizeToursResponse) được đọc/ghi từ/đến Cloud Storage theo đị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 các tuyến đường mà xe sẽ thực hiện để giảm thiểu tổng chi phí.

Người dùng có thể thăm dò ý kiến operations.get để kiểm tra trạng thái của LRO:

Nếu trường done của LRO là sai, thì ít nhất một yêu cầu vẫn đang được xử lý. Các yêu cầu khác có thể đã được thực hiện thành công và kết quả của yêu cầu sẽ có trong GCS.

Nếu trường done của LRO là true, tức là tất cả yêu cầu đã được xử lý. Mọi yêu cầu được xử lý thành công sẽ có kết quả trong GCS. Mọi yêu cầu không thực hiện được sẽ không có kết quả trong GCS. Nếu bạn đặt trường error của LRO, thì trường đó sẽ chứa lỗi từ một trong các yêu cầu không thành công.

Phạm vi uỷ quyền

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

  • https://www.googleapis.com/auth/cloud-platform
Quyền quản lý danh tính và quyền truy cập (IAM)

Cần có quyền IAM sau đây đối với tài nguyên parent:

  • routeoptimization.operations.create

Để biết thêm thông tin, hãy xem tài liệu về IAM.

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

Gửi OptimizeToursRequest chứa ShipmentModel và trả về OptimizeToursResponse chứa ShipmentRoute. Đây là một tập hợp các tuyến đường mà 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à các Vehicle có thể dùng để truyền các Shipment. Các ShipmentRoute chỉ định các Shipment cho Vehicle. Cụ thể hơn, các thẻ này gán một loạt Visit cho mỗi xe, trong đó Visit tương ứng với VisitRequest (là lượt đến lấy hàng hoặc giao hàng) của Shipment.

Mục tiêu là cung cấp một nhiệm vụ gán 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
Quyền quản lý danh tính và quyền truy cập (IAM)

Cần có quyền IAM sau đây đối với tài nguyên parent:

  • routeoptimization.locations.use

Để biết thêm thông tin, hãy xem tài liệu về IAM.

AggregatedMetrics

Chỉ số tổng hợp cho ShipmentRoute (phản hồi cho OptimizeToursResponse trên tất cả các phần tử Transition và/hoặc Visit (phản hồi trên 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 đơn hàng đến lấy và giao tận nơi 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 ngắt cho một tuyến đường hoặc một giải pháp.

visit_duration

Duration

Tổng thời lượng truy cập cho 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 tất cả thời lượng nêu trên. Đối với tuyến đường, thành phần 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 cho một tuyến đường hoặc một giải pháp.

max_loads

map<string, VehicleLoad>

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

BatchOptimizeToursMetadata

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

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 các tệp. Tất cả các tệp đầu vào và đầu ra phải thuộc cùng một dự án.

Trường
parent

string

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

Đị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 mỗi mô hình mua, 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 bí danh để 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ị trí đầu ra mong muốn.

BatchOptimizeToursResponse

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

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

BreakRule

Quy tắc tạo giờ nghỉ giải lao trên xe (ví dụ: giờ nghỉ trưa). Giờ nghỉ giải lao là khoảng thời gian liền nhau mà trong đó xe vẫn không hoạt động ở vị trí hiện tại và không thực hiện được hoạt động ghé qua nào. Điểm chèn quảng cáo có thể xảy ra:

  • trong quá trình di chuyển giữa hai lượt ghé thăm (bao gồm thời gian ngay trước hoặc ngay sau khi ghé thăm, nhưng không phải giữa lượt ghé thăm), trong trường hợp này, thời gian vận chuyển sẽ kéo dài 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 vào giữa giờ nghỉ), trong trường hợp này việc 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 của xe).
Trường
break_requests[]

BreakRequest

Trình tự các điểm chèn quảng cáo. Xem thông báo BreakRequest.

frequency_constraints[]

FrequencyConstraint

Có thể áp dụng nhiều FrequencyConstraint. Tất cả các giá trị này đều phải đáp ứng các BreakRequest của BreakRule này. Vui lòng xem FrequencyConstraint.

BreakRequest

Bạn phải biết trước trình tự chèn quảng cáo (tức là số lượng và thứ tự của chúng) cho từng chiếc xe. BreakRequest lặp lại xác định trình tự đó theo thứ tự mà chúng phải xảy ra. Các khoảng thời gian của chúng (earliest_start_time/latest_start_time) có thể trùng lặp nhưng phải tương thích với thứ tự (được kiểm tra).

Trường
earliest_start_time

Timestamp

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

latest_start_time

Timestamp

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

min_duration

Duration

Bắt buộc. Thời lượng tối thiểu của điểm chèn quảng cáo. Phải dương.

FrequencyConstraint

Một thời gian có thể hạn chế hơn nữa tần suất và thời lượng của các điểm chèn nêu trên, bằng cách áp dụng tần suất chèn tối thiểu, chẳng hạn như "Cứ 12 giờ phải có một khoảng nghỉ ít nhất là 1 giờ". Giả sử điều này có thể được hiểu là "Trong khoảng thời gian trượt bất kỳ 12 giờ, phải có ít nhất một lần nghỉ ít nhất một giờ", thì 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 mọi quy tắc ràng buộc đó, ngoài các khoảng thời gian và thời lượng tối thiểu đã được chỉ định trong BreakRequest.

Trên thực tế, FrequencyConstraint có thể áp dụng cho các điểm nghỉ không liên tiếp. Ví dụ: lịch biểu sau đây tôn trọng "1h mỗi 12h" ví dụ:

  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 mô tả về FrequencyConstraint.

max_inter_break_duration

Duration

Bắt buộc. Khoảng thời gian tối đa cho phép của bất kỳ khoảng thời gian nào trong tuyến đường không bao gồm ít nhất một phần ngắt kết nối duration >= min_break_duration. Phải là số 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 Cú pháp đố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 khoảng cách tối đa có thể di chuyển. Lớp phủ này 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 được là số âm.

Trường
max_meters

int64

Giới hạn cố định ràng buộc khoảng cách tối đa là max_meter. Giới hạn phải là số không âm.

soft_max_meters

int64

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

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

cost_per_kilometer_below_soft_max

double

Chi phí mỗi km phát sinh, tăng lên đến soft_max_meters, với công thức:

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

Chi phí này không được hỗ trợ ở route_distance_limit.

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 khoảng cách nằm dưới giới hạn, nếu không, công thức dùng để tính chi phí 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í trên 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í của Google Cloud Storage nơi tệp nhập sẽ được đọc.

Trường
uri

string

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

InjectedSolutionConstraint

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

Trường
routes[]

ShipmentRoute

Các tuyến của giải pháp để chèn. Một số tuyến có thể bị bỏ qua 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 về tính hợp lệ cơ bản được liệt kê cho injected_first_solution_routes.

skipped_shipments[]

SkippedShipment

Đã bỏ qua lô hàng dung dịch cần tiêm. Một số có thể bị bỏ qua trong giải pháp ban đầu. Xem trường routes.

constraint_relaxations[]

ConstraintRelaxation

Đối với nhóm phương tiện không hoặc nhiều nhóm xe, hãy chỉ định thời điểm và mức độ cần nới lỏng các hạn chế. Nếu trường này trống, thì tất cả các tuyến đường 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 chỉ định(các) ngưỡng giới hạn đố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 buộc phải bỏ qua; tức là không thể thực hiện được.

Trường
relaxations[]

Relaxation

Tất cả các hạn chế về việc ghé thăm sẽ áp dụng cho những lượt ghé thăm trên các tuyến đường có xe ở vehicle_indices.

vehicle_indices[]

int32

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

Chỉ số 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 về fields).

Thư giãn

Nếu relaxations trống, thời gian bắt đầu và trình tự của tất cả các lượt truy cập trên routes sẽ bị ràng buộc hoàn toàn và không thể chèn hoặc thêm lượt truy cập mới vào các tuyến đường đó. Ngoài ra, thời gian bắt đầu và kết thúc của một xe trong routes sẽ bị hạn chế hoàn toàn, trừ phi xe đó trống (tức là không có lượt ghé thăm nào 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 ràng buộc áp dụng cho lượt truy cập #j đáp ứng:

  • 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 của xe được nới lỏng đến relaxations(i).level nếu đáp ứng:

  • vehicle_start_time >= relaxations(i).threshold_time
  • relaxations(i).threshold_visit_count == 0 và đuôi xe được nới lỏng đến 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 độ nới lỏng, nếu một lượt truy cập đáp ứng threshold_visit_count HOẶC threshold_time, hãy thêm hai relaxations có cùng level: một chỉ có threshold_visit_count được đặt và mục còn lại chỉ được đặt 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ì cấp độ nới lỏng nhất sẽ được áp dụng. Do đó, từ khi xe bắt đầu đến khi kết thúc chuyến đi, mức độ thư giãn sẽ trở nên thoải mái hơn: tức là mức độ thư giãn không giảm khi tuyến đường diễn ra.

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

Trường
level

Level

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

threshold_time

Timestamp

Đây là thời điểm có thể áp dụng thời gian nới lỏng level.

threshold_visit_count

int32

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

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

Cấp độ

Biểu thị các mức độ nới lỏng quy tắc ràng buộc khác nhau được áp dụng cho một lượt truy cập và các lượt truy cập tiếp theo khi lượt truy cập đó đá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 độ nới lỏng mặc định ngầm ẩn: không có sự ràng buộc nào được nới lỏng, tức là mọi lượt truy cập đều bị ràng buộc hoàn toàn.

Bạn không được sử dụng giá trị này một cách rõ ràng trong level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Thời gian bắt đầu và kết thúc lượt truy cập cũng như thời gian bắt đầu/kết thúc của xe sẽ được nới lỏng, nhưng mỗi lượt truy cập vẫn liên kết với cùng một xe và bạn phải tuân thủ trình tự lượt truy cập: không được chèn lượt truy cập nào giữa các lượt truy cập hoặc trước các lượt truy cập đó.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Tương tự như RELAX_VISIT_TIMES_AFTER_THRESHOLD, nhưng trình tự lượt truy cập cũng được nới lỏng: lượt truy cập chỉ có thể được thực hiện bằng xe này, nhưng có thể không được thực hiện.
RELAX_ALL_AFTER_THRESHOLD Giống như RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, nhưng xe cũng được nới lỏng: lượt truy cập hoàn toàn miễn phí tại hoặc sau thời gian ngưỡng và có thể không được thực hiện.

InputConfig

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

Trường
data_format

DataFormat

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

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

GcsSource

Vị trí trên Google Cloud Storage. Đây phải là một đối tượng (tệp) duy nhất.

Vị trí

Đóng gói vị trí (điểm địa lý và tiêu đề tùy chọn).

Trường
lat_lng

LatLng

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

heading

int32

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

OptimizeToursRequest

Yêu cầu được đưa cho trình giải pháp tối ưu hoá hành trình 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. Nhắm mục tiêu dự án hoặc vị trí để thực hiện cuộc gọi.

Đị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 bạn đặt thời gian chờ này, thì máy chủ sẽ trả về phản hồi trước khi hết khoảng thời gian chờ hoặc đã đến thời hạn của máy chủ đối với các yêu cầu đồng bộ, tuỳ vào thời điểm nào đến trước.

Đố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 để giải quyết.

solving_mode

SolvingMode

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

search_mode

SearchMode

Chế độ tìm kiếm được 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á cách tìm một giải pháp đầu tiên tương tự với giải pháp trước đó.

Mô hình này sẽ bị hạn chế khi xây dựng giải pháp đầu tiên. Bất kỳ lô hàng nào không được thực hiện trên một tuyến sẽ được ngầm 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 liên 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, vehicle_index phải nằm trong phạm vi và không được trùng lặp.
  • đối với tất cả lượt truy cập, shipment_indexvisit_request_index phải nằm trong phạm vi.
  • chỉ có thể tham chiếu một gói hàng trên một tuyến.
  • bạn phải thực hiện việc đến lấy hàng rồi giao hàng trước khi giao hàng.
  • không thể thực hiện nhiều hơn một hình thức giao hàng thay thế hoặc giao hàng thay thế cho một lô hàng.
  • đối với tất 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).
  • chỉ có thể thực hiện vận chuyển trên một chiếc xe đượ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 đã đưa vào không khả thi, thì không nhất thiết phải trả về lỗi xác thực và thay vào đó, hệ thống có thể trả về lỗi cho biết tính không khả thi.

injected_solution_constraint

InjectedSolutionConstraint

Cố định thuật toán tối ưu hoá để tìm ra giải pháp cuối cùng tương tự với giải pháp trước đó. Ví dụ: chức năng này có thể được sử dụng để cố định một 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 đã đưa vào không khả thi, thì không nhất thiết phải trả về lỗi xác thực và thay vào đó, hệ thống có thể trả về lỗi cho biết tính không khả thi.

refresh_details_routes[]

ShipmentRoute

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

Kể từ tháng 11 năm 2020, tính năng này chỉ điền sẵn các đường đa tuyến của các tuyến không trống và yêu cầu populate_polylines phải là true.

Các trường route_polyline của các tuyến đường đã nhập có thể không nhất quán với tuyến đường transitions.

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. Nhiều tuyến đường vẫn được điền sẵn giữa tất cả các lượt ghé thăm trong tất cả những tuyến đường không trống, bất kể các kiện 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. Thông tin này có thể được dùng khi thông tin vận chuyển hoặc chỉ số phương tiện 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 đã bị xoá khỏi yêu cầu hoặc được thêm vào yêu cầu.

Nếu đúng, các nhãn trong các danh mục sau phải xuất hiện nhiều nhất một lần trong danh mục:

Nếu một vehicle_label trong giải pháp được đưa vào không tương ứng với một 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 ghé thăm tương ứng. Nếu một shipment_label trong dung dịch được đưa vào không tương ứng với một yêu cầu vận chuyển, lượt truy cập tương ứng sẽ bị xoá khỏi giải pháp. Nếu một SkippedShipment.label trong dung dịch đã tiêm không tương ứng với một yêu cầu vận chuyển, thì SkippedShipment sẽ bị xoá khỏi giải pháp.

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 được đưa vào có thể ảnh hưởng đến các hạn chế ngầm ẩn, có thể dẫn đến 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 từng Vehicle.label (resp. Shipment.label) xác định duy nhất một thực thể xe (hoặc lô hàng) được sử dụng trên hai yêu cầu có liên quan: yêu cầu trước đó đã tạo OptimizeToursResponse được sử dụng trong giải pháp được chèn và yêu cầu hiện tại bao gồm giải pháp được chèn. Các bước kiểm tra tính duy nhất được mô tả ở trên là không đủ để đảm bảo yêu cầu này.

consider_road_traffic

bool

Xem xét thông tin ước tính lưu lượng truy cập khi tính các trường ShipmentRoute Transition.travel_duration, Visit.start_timevehicle_end_time; khi đặt trường ShipmentRoute.has_traffic_infeasibilities và khi tính toán trường OptimizeToursResponse.total_cost.

populate_polylines

bool

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

populate_transition_polylines

bool

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

allow_large_deadline_despite_interruption_risk

bool

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

use_geodesic_distances

bool

Nếu đúng, khoảng cách đi lại sẽ được tính bằng cách sử dụ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 cách sử dụng khoảng cách trắc địa với tốc độ được xác định bằng geodesic_meters_per_second.

label

string

Nhãn có thể được 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 biến này phải ít nhất là 1 mét/giây.

max_validation_errors

int32

Cắt bớt số lỗi xác thực được trả về. Các lỗi này thường đi kèm với tải trọng lỗi INVALID_ARGUMENT dưới dạng chi tiết lỗi BadRequest (https://cloud.google.com/apis/design/errors#error_details), trừ khi giải_mode=VALIDATE_ONLY: xem trường OptimizeToursResponse.validation_errors. Giá trị mặc định là 100 và tối đa là 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. Ở 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 không xác định, tương đương với RETURN_FAST.
RETURN_FAST Ngừng tìm kiếm sau khi tìm thấy giải pháp hay đầu tiên.
CONSUME_ALL_AVAILABLE_TIME Hãy dành toàn bộ thời gian có thể để tìm kiếm các giải pháp tốt hơn.

SolvingMode

Xác định cách trình giải quyết nên xử lý yêu cầu. Trong tất cả các chế độ ngoại trừ VALIDATE_ONLY, nếu yêu cầu không hợp lệ, bạn sẽ nhận được 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. Có thể đưa ra cảnh báo trong [Optimize ToursResponse.validate_errors][google.cloud.optimization.v1.Optimize ToursResponse.Personalized_errors].
VALIDATE_ONLY Chỉ xác thực mô hình mà không giải quyết: điền nhiều OptimizeToursResponse.validation_errors nhất có thể.
DETECT_SOME_INFEASIBLE_SHIPMENTS

Chỉ điền sẵn OptimizeToursResponse.validation_errors hoặc OptimizeToursResponse.skipped_shipments và không thực sự giải quyết được 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 thấy tình trạng không khả thi trong các tuyến injected_solution_constraint, thì các tuyến đường đó sẽ được điền vào trường OptimizeToursResponse.validation_errorsOptimizeToursResponse.skipped_shipments sẽ được để trống.

LƯU Ý QUAN TRỌNG: không phải tất cả lô hàng không khả thi đều được trả lạ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

Thông tin phản hồi sau khi giải quyết vấn đề về việc tối ưu hoá chuyến tham quan, trong đó có thông tin về các tuyến đường của mỗi chiếc xe, những lô hàng bị bỏ qua và tổng chi phí của giải pháp.

Trường
routes[]

ShipmentRoute

Các tuyến đường được tính toán cho mỗi 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ả các lỗi xác thực mà chúng tôi có thể phát hiện riêng. Xem lỗi "MULTIPLE ERRORS" nội dung giải thích cho thông báo OptimizeToursValidationError. Thay vì lỗi, thông báo này sẽ bao gồm cảnh báo trong trường hợp solving_modeDEFAULT_SOLVE.

metrics

Metrics

Chỉ số về thời lượng, khoảng cách và mức sử dụng của 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

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

skipped_mandatory_shipment_count

int32

Số lượng lô hàng bắt buộc đã 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à Vehicle.used_if_route_is_empty là đúng, thì xe đó sẽ được coi là đã 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 bằng thời gian tối thiểu của tất cả xe đã qua sử dụng là ShipmentRoute.vehicle_start_time.

latest_vehicle_end_time

Timestamp

Thời gian kết thúc mới nhất của một xe đã qua sử dụng, được tính là giá trị tối đa trên tất cả xe đã qua sử dụng của ShipmentRoute.vehicle_end_time.

costs

map<string, double>

Chi phí của giải pháp, được chia nhỏ theo các trường yêu cầu liên quan đến chi phí. Các khoá này là đường dẫn proto, liên quan đến dữ liệu đầu vào OptimizeChuyếnsRequest, ví dụ: "model.shipments.pickups.cost" và các giá trị 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 tất cả chi phí đến lấy hàng của giải pháp. Tất cả chi phí được 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/1/2022.

total_cost

double

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

OptimizeToursValidationError

Mô tả lỗi hoặc cảnh báo gặp phải khi xác thực OptimizeToursRequest.

Trường
code

int32

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

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

Nhiều lỗi: Khi có nhiều lỗi, quá trình xác thực sẽ cố gắng đưa ra một vài lỗi. Giống như một trình biên dịch, đây là một quy trình không hoàn hảo. Một số lỗi xác thực sẽ có trạng thái "nghiêm trọng", nghĩa là khiến toàn bộ quá trình xác thực bị ngừng. Đây là trường hợp của lỗi display_name="UNSPECIFIED", trong số 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, các mã và tên hiển thị mới có thể xuất hiện theo thời gian, điều này có thể khiến một yêu cầu (không hợp lệ) nhất định tạo ra một cặp khác (code, display_name) vì lỗi mới đã ẩn mã cũ (xem phần "Lỗi NHIỀU LẦN").

THAM CHIẾU: Danh sách tất cả các cặp (mã, tên):

  • KHÔNG XÁC ĐỊNH = 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_ Số lượt của chúng ta sẽ được đo trên mỗi lần lượt hiển thị = 1204;
    • REQUEST_OPTIONS_GEODESIC_METERS_PER_SECOND_TOO_SMALL = 1205;
    • REQUEST_OPTIONS_MISSING_GEODESIC_ Màu_PER_SECONDS = 1206;
    • REQUEST_OPTIONS_POPULATE_PATHFINDER_TRIPS_AND_GEODESIC_DISTANCE = 1207;
    • REQUEST_OPTIONS_COST_MODEL_OPTIONS_AND_GEODESIC_DISTANCE = 1208;
    • REQUEST_OPTIONS_DU LỊCH_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;
  • Hàm INJECTED_SOLUTION_ERROR = 20;
    • INJECTED_SOLUTION_MISSING_LABEL = 2000;
    • INJECTED_SOLUTION_DUPLICATE_LABEL = 2001;
    • INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
    • INJECTED_SOLUTION_INFEASIBLE_SAU_GETTING_Travel_TIMES = 2003;
    • INJECTED_SOLUTION_TRANSITION_INCONSISTENT_WITH_ACTUAL_TRAVEL = 2004;
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
    • INJECTED_SOLUTION_MORE_THAN_ONE_PER_TYPE = 2006;
    • INJECTED_SOLUTION_XUẤT_THIẾT_KHÔNG_KHÔNG_DÙNG_NỔI_TIẾNG = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • LỖI_HÀO_MUA_HÀNG_MẶT = 22;
    • GỬI_MÔ_ HÌNH_TOO_LARGE = 2200;
    • shippingMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_NEGATIVE_OR_NAN = 2202;
    • SHIPMENT_MODEL_GLOBAL_END_TIME_TOO_LARGE_OR_NAN = 2203;
    • shippingMENT_MODEL_GLOBAL_START_TIME_ SAU_GLOBAL_END_TIME = 2204;
    • shippingMENT_MODEL_GLOBAL_DURATION_TOO_LONG = 2205;
    • GỬI_MÔ_ HÌNH_MAX_ACTIVE_VEHICLES_NOT_POSITIVE = 2206;
    • shippingMENT_MODEL_DURATION_MATRIX_TOO_LARGE = 2207;
  • INDEX_ERROR = 24;
  • TAG_ERROR = 26;
  • TIME_WINDOW_ERROR = 28;
    • Time_WINDOW_INVALID_START_TIME = 2.800;
    • 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_ SAU_END_TIME = 2805;
    • Time_WINDOW_INVALID_COST_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
    • Time_WINDOW_INVALID_COST_PER_HOUR_CAST_SOFT_END_TIME = 2807;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_WINDOW_COST_AFTER_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • Time_WINDOW_SOFT_START_TIME_WITHOUT_COST_BEFORE_SOFT_START_TIME = 2810;
    • Time_WINDOW_SOFT_END_TIME_WITHOUT_COST_www_SOFT_END_TIME = 2811;
    • Time_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2812;
    • Time_WINDOW_START_TIME_ SAU_SOFT_START_TIME = 2813;
    • Time_WINDOW_SOFT_START_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2819;
    • Time_WINDOW_SOFT_END_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2820;
    • Time_WINDOW_SOFT_END_TIME_ SAU_END_TIME = 2816;
    • Time_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • TIME_WINDOW_COST_AFTER_SOFT_END_TIME_SET_AND_MULTIPLE_WINDOWS = 2818;
    • TRANSITION_ATTRIBUTES_ERROR = 30;
    • TRANSITION_ATTRIBUTES_INVALID_COST = 3000;
    • TRANSITION_ATTRIBUTES_INVALID_COST_PER_KILOMETER = 3001;
    • TRANSITION_ATTRIBUTES_DUPLICATE_TAG_PAIR = 3002;
    • TRANSITION_ATTRIBUTES_DISTANCE_LIMIT_MAX_DISTANCE_UNSUPPORTED = 3003;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • TRANSITION_ATTRIBUTES_ IMAPING_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_POINT_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_MILESTONEING_PLACE_TAGS_FIELDS = 3007;
    • TRANSITION_ATTRIBUTES_BLANK_DURATION_NEGATIVE_OR_NAN = 3008;
    • TRANSITION_ATTRIBUTES_DURATION_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_NEGATIVE_VALUE = 3.100;
  • TẢI_LIMIT_ERROR = 33;
    • Nạp_LIMIT_INVALID_COST_ABOVE_SOFT_MAX = 3303;
    • LOAD_LIMIT_SOFT_MAX_WITHOUT_COST_ABOVE_SOFT_MAX = 3304;
    • TẢI_LIMIT_COST_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3305;
    • TẢI_LIMIT_NEGATIVE_SOFT_MAX = 3306;
    • load_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • Nạp_LIMIT_MAX_TẢI_NEGATIVE_VALUE = 3308;
    • TẢI_LIMIT_SOFT_MAX_ABOVE_MAX = 3309;
  • INTERVAL_ERROR = 34;
    • INTERVAL_MIN_EXCEEDS_MAX = 3401;
    • INTERVAL_NEGATIVE_MIN = 3402;
    • INTERVAL_NEGATIVE_MAX = 3403;
    • INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
    • INTERVAL_MAX_EXCEEDS_CAPACITY = 3405;
  • DISTANCE_LIMIT_ERROR = 36;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3602;
    • {0/}
    • Khoảng cách_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3606;
  • mất [5_LIMIT_ERROR] = 38;
    • ↗_LIMIT_MAX_DURATION_NEGATIVE_OR_NAN = 3800;
    • [Tên người] và [TÊN NGƯỜI] = 3801;
    • [7]
    • [TÊN NGƯỜI] / [TÊN NGƯỜI] = 3803;
    • [Tên người] và [TÊN NGƯỜI] = 3804;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
    • AVD_LIMIT_INVALID_COST_6_QUADRATIC_SOFT_MAX = 3806;
    • AVD_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_COST_PER_SQUARE_HOUR = 3807;
    • AVD_LIMIT_COST_PER_SQUARE_HOUR_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • AVD_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • AVD_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3810;
    • ↗_LIMIT_QUADRATIC_SOFT_MAX_LARGER_THAN_MAX = 3811;
    • ↗_LIMIT_LIMIT_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • ↗_LIMIT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3813;
    • DURATION_LIMIT_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3814;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3815;
  • LỖI_VẬN_CHUYỂN = 40;
    • shippingMENT_PD_LIMIT_WITHOUT_PICKUP_AND_DELIVERY = 4014;
    • shippingMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4000;
    • shippingMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4001;
    • shipMENT_PD_RELATIVE_DETOUR_LIMIT_INVALID = 4015;
    • shippingMENT_PD_DETOUR_LIMIT_AND_EXTRA_VISIT_DURATION = 4016;
    • shippingMENT_PD_TIME_LIMIT_DURATION_NEGATIVE_OR_NAN = 4002;
    • shippingMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4003;
    • shippingMENT_EMPTY_shippingMENT_TYPE = 4004;
    • GỬI_KHÔNG_PICKUP_KHÔNG_PHÂN_PHÂN = 4005;
    • SHIPMENT_INVALID_PENALTY_COST = 4006;
    • shippingMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
    • shippingMENT_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
    • shippingMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • shippingMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • shippingMENT_INVALID_COST_FOR_VEHICLE = 4011;
    • shippingMENT_COST_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • SHIPMENT_DUPLICATE_COST_FOR_VEHICLE_INDEX = 4013;
  • VEHICLE_ERROR = 42;
    • VEHICLE_EMPTY_REQUIRED_OPERATOR_TYPE = 4200;
    • VEHICLE_DUPLICATE_REQUIRED_OPERATOR_TYPE = 4201;
    • VEHICLE_NO_OPERATOR_WITH_REQUIRED_OPERATOR_TYPE = 4202;
    • VEHICLE_EMPTY_START_TAG = 4203;
    • VEHICLE_DUPLICATE_START_TAG = 4204;
    • VEHICLE_EMPTY_END_TAG = 4205;
    • VEHICLE_DUPLICATE_END_TAG = 4206;
    • VEHICLE_EXTRA_VISIT_DURATION_NEGATIVE_OR_NAN = 4207;
    • VEHICLE_EXTRA_VISIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4208;
    • VEHICLE_EXTRA_VISIT_DURATION_EMPTY_KEY = 4209;
    • VEHICLE_FIRST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4210;
    • VEHICLE_FIRST_shippingMENT_OFFSETD = 4211;
    • VEHICLE_FIRST_shippingMENT_NOT_BOUND = 4212;
    • VEHICLE_LAST_shippingMENT_INDEX_OUT_OF_BOUNDS = 4213;
    • VEHICLE_LAST_shippingMENT_FAILD = 4214;
    • VEHICLE_LAST_shippingMENT_NOT_BOUND = 4215;
    • VEHICLE_ Quyết định NGUYỆT = 4216;
    • VEHICLE_INVALID_COST_PER_KILOMETER = 4217;
    • VEHICLE_INVALID_COST_PER_HOUR = 4218;
    • VEHICLE_INVALID_COST_PER_travelED_HOUR = 4219;
    • VEHICLE_INVALID_FIXED_COST = 4220;
    • VEHICLE_INVALID_DAY_DURATION_MULTIPLE = 4221;
    • VEHICLE_Travel_DURATION_MULTIPLE_WITH_shippingMENT_PD_DETOUR_LIMITS = 4223;
    • VEHICLE_MATRIX_INDEX_WITH_shippingMENT_PD_DETOUR_LIMITS = 4224;
    • VEHICLE_adsbygoogle_DURATION_LONGER_THAN_DURATION_LIMIT = 4222;
  • VISIT_REQUEST_ERROR = 44;
    • VISIT_REQUEST_EMPTY_TAG = 4400;
    • VISIT_REQUEST_DUPLICATE_TAG = 4401;
    • VISIT_REQUEST_DURATION_NEGATIVE_OR_NAN = 4404;
    • VISIT_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4405;
  • PRECEDENCE_ERROR = 46;
    • PRECEDENCE_Quy_MISSING_FIRST_INDEX = 4600;
    • PRECEDENCE_Quy_MISSING_ ước_INDEX = 4601;
    • PRECEDENCE_QU_FIRST_INDEX_OUT_OF_BOUNDS = 4602;
    • PRECEDENCE_Quy_OFFSET_INDEX_OUT_OF_BOUNDS = 4603;
    • PRECEDENCE_Quy_DUPLICATE_INDEX = 4604;
    • PRECEDENCE_Quy_INEXISTENT_FIRST_VISIT_REQUEST = 4605;
    • PRECEDENCE_QU_INEXISTENT_ bão_VISIT_REQUEST = 4606;
  • BREAK_ERROR = 48;
    • BREAK_RULE_EMPTY = 4800;
    • BREAK_REQUEST_UNSPECIFIED_DURATION = 4801;
    • BREAK_REQUEST_UNSPECIFIED_EARLIEST_START_TIME = 4802;
    • BREAK_REQUEST_UNSPECIFIED_LATEST_START_TIME = 4803;
    • BREAK_REQUEST_DURATION_NEGATIVE_OR_NAN = 4804; = 4804;
    • BREAK_REQUEST_LATEST_START_TIME_BEFORE_EARLIEST_START_TIME = 4805;
    • BREAK_REQUEST_EARLIEST_START_TIME_BEFORE_GLOBAL_START_TIME = 4806;
    • BREAK_REQUEST_LATEST_END_TIME_FOLLOWING_GLOBAL_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_VAT_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4809;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4810;
    • BREAK_VAT_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4811;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4812;
    • BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
    • BREAK_VAT_MISSING_MAX_INTER_BREAK_DURATION = 4814;
    • BREAK_VAT_MISSING_MIN_BREAK_DURATION = 4815;
  • LOẠI_KHẢ_T____________ tuyệt_A_N_VN_THOÁT = 50;
    • SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001;
    • shippingMENT_TYPE_INCOMPATIBILITY_LESS_THAN_TWO_TYPES = 5002;
    • GỬI_TYPE_INCOMPATIBILITY_DUPLICATE_TYPE = 5003;
    • SHIPMENT_TYPE_INCOMPATIBILITY_INVALID_INCOMPATIBILITY_MODE = 5004;
    • GỬI__TYPE_INCOMPATIBILITY_TOO_MANY_INCOMPATIBITIES = 5005;
  • GỬI_TYPE_REQUIREMENT_ERROR = 52;
    • GỬI_TYPE_REQUIREMENT_NO_REQUIRED_TYPE = 52001;
    • shippingMENT_TYPE_REQUIREMENT_NO_DEPENDENT_TYPE = 52002;
    • shippingMENT_TYPE_REQUIREMENT_INVALID_REQUIREMENT_MODE = 52003;
    • GỬI_TYPE_REQUIREMENT_TOO_MANY_REQUIREMENTS = 52004;
    • shippingMENT_TYPE_REQUIREMENT_EMPTY_REQUIRED_TYPE = 52005;
    • shippingMENT_TYPE_REQUIREMENT_DUPLICATE_REQUIRED_TYPE = 52006;
    • GỬI_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
    • shippingMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
    • shippingMENT_TYPE_REQUIREMENT_DUPLICATE_DEPENDENT_TYPE = 52009;
    • shippingMENT_TYPE_REQUIREMENT_self_DEPENDENT_TYPE = 52010;
    • shippingMENT_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;
  • mất 56 giây = 56 giây.
    • DURATION_SECONDS_MATRIX_DURATION_NEGATIVE_OR_NAN = 5600;
    • ↗_SECONDS_MATRIX_DURATION_EXCEEDS_GLOBAL_DURATION = 5601;
  • WARNING = 9;
    • WARNING_INJECTED_FIRST_SOLUTION = 90;
      • WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_shippingMENTS_REMOVED = 9000;
      • WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_SAU_GETTING_Travel_TIMES = 9001;
display_name

string

Tên hiển thị của lỗi.

fields[]

FieldReference

Ngữ cảnh lỗi có thể bao gồm 0, 1 (trong hầu hết trường hợp) hoặc nhiều trường. Ví dụ: Khi tham chiếu đến xe số 4 và lần đến lấy hàng đầu tiên của lô hàng số 2, bạn có thể làm 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ĂNG: 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 giúp làm rõ vấn đề) 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. Không phải lúc nào bạn cũng có thể sử dụng những tính năng này. Bạn tuyệt đối không nên dựa vào tính năng này và chỉ nên sử dụng tính năng này để gỡ lỗi 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 tham chiếu đến một trường nhất định trong tệp này và tuân theo cùng một cấu trúc phân cấp. Ví dụ: chúng tôi có thể chỉ định phần tử số 2 của start_time_windows của xe số 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 tôi sẽ bỏ qua các thực thể cấp cao nhất như OptimizeToursRequest hoặc ShipmentModel để tránh nhồi nhét thông báo.

Trường
name

string

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

sub_field

FieldReference

Trường phụ lồng nhau theo quy tắc đệ quy, nếu cần.

Trường kết hợp index_or_key.

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

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 đích đến cho kết quả [BatchOptimizeChuyếns][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimize Tours].

Trường
data_format

DataFormat

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

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

GcsDestination

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

RouteModifiers

Đóng gói một tập hợp các điều kiện không bắt buộc để đáp ứng khi tính toán tuyến đường của xe. Điều này tương tự như RouteModifiers trong API ưu tiên tuyến đường của Nền tảng Google Maps; hãy xem bài viết: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Trường
avoid_tolls

bool

Chỉ định xem có tránh đường thu phí hay không (nếu hợp lý). Ưu tiên các tuyến đường không có đường có thu phí. Chỉ áp dụng cho phương tiện đi lại có động cơ.

avoid_highways

bool

Chỉ định xem có tránh đường cao tốc khi thích hợp hay không. Ưu tiên những tuyến đường không có đường cao tốc. Chỉ áp dụng cho phương tiện đi lại có động cơ.

avoid_ferries

bool

Chỉ định xem có tránh phà khi hợp lý hay không. Ưu tiên các tuyến đường không dành cho việc đi lại bằng phà. Chỉ áp dụng cho phương tiện đi lại có động cơ.

avoid_indoor

bool

Không bắt buộc. Chỉ định xem có nên tránh điều hướng trong nhà khi hợp lý hay không. Ưu tiên các tuyến đường không chứa thành phần điều hướng trong nhà. Chỉ áp dụng cho phương tiện đi lại WALKING.

Lô hàng

Quá trình vận chuyển một mặt hàng, từ một trong những lần đến lấy hàng cho đến một trong những lần giao hàng. Để việc vận chuyển được coi là đã thực hiện, một phương tiện riêng biệt phải đến một trong các địa điểm nhận hàng của mình (và giảm tải trọng dự phòng tương ứng), sau đó ghé thăm một trong các địa điểm giao hàng sau đó (và do đó tăng lại sức chứa 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. Tên này có thể dài tối đa 63 ký tự và có thể sử dụng ký tự UTF-8.

pickups[]

VisitRequest

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

deliveries[]

VisitRequest

Tập hợp các phương thức giao hàng thay thế liên kết với lô hàng. Nếu bạn không chỉ định, xe chỉ cần ghé thăm một địa điểm tương ứng với việc đế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 pallet, v.v.). Các khoá trong bản đồ phải là các giá trị nhận dạng mô tả loại tải tương ứng, tốt nhất là nên bao gồm cả các đơn vị. Ví dụ: "weight_kg", "volume_gallons", "pallet_count", v.v. Nếu khoá đã cho không xuất hiện trên bản đồ, thì tải tương ứng được coi là rỗng.

allowed_vehicle_indices[]

int32

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

costs_per_vehicle[]

double

Chỉ định chi phí phát sinh khi mỗi xe vận chuyển lô hàng này. Nếu được chỉ định, hình ảnh phải có CÁC LOẠI:

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

Các chi phí này phải có cùng đơn vị với penalty_cost và không được â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ỉ số của phương tiện áp dụng costs_per_vehicle. Nếu không phải là tệp trống, tệp này phải có cùng số phần tử như costs_per_vehicle. Bạn chỉ được chỉ định chỉ số xe nhiều lần. Nếu một xe bị loại trừ khỏi costs_per_vehicle_indices, thì chi phí của xe đó sẽ bằng 0.

pickup_to_delivery_absolute_detour_limit

Duration

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

Ví dụ: Đặt t là thời gian ngắn nhất để đi trực tiếp từ lựa chọn đến lấy hàng thay thế đã chọn đến lựa chọn phân phối thay thế đã chọn. Sau đó, việc đặ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 bạn chỉ định cả giới hạn tương đối và giới hạn tuyệt đối cho cùng một lô hàng, thì giới hạn ràng buộc hơn sẽ được áp dụng cho mỗi cặp điểm đến lấy hàng/điểm đến giao hàng có thể có. 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 khi khách hàng đến lấy hàng để được giao hàng. Nếu được chỉ định thì giá trị này phải là số không âm và kiện hàng phải có dịch vụ đến lấy hàng và giao hàng. Việc này không phụ thuộc vào việc lựa chọn phương án thay thế nào để đế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ế về đườ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. Bạn có thể dùng tính năng này để xác định sự không tương thích hoặc yêu cầu giữa shipment_types (xem shipment_type_incompatibilitiesshipment_type_requirements trong ShipmentModel).

Khác biệt với visit_types được chỉ định cho một lượt truy cập: Tất cả các sản phẩm đến lấy hàng/giao trong 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 không áp dụng penalty_cost.

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

Bạn được 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 toán sẽ xoá những lượt ghé thăm đến lấy hàng/giao hàng có 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 lô hàng không được hoàn tất, khoản phạt này sẽ được cộng vào tổng chi phí của các tuyến. Một lô hàng được coi là đã hoàn tất nếu khách hàng sử dụng một trong các cách khác để đế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 khác liên quan đến chi phí 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ô thời hạn, tức là đơn hàng phải được hoàn tất.

pickup_to_delivery_relative_detour_limit

double

Chỉ định thời gian đường vòng tương đối tối đa so với đoạn đường ngắn nhất từ lúc đến lấy hàng đến lúc giao hàng. Nếu được chỉ định thì giá trị này phải là số không âm và kiện hàng phải có dịch vụ đến lấy hàng và giao hàng.

Ví dụ: giả sử t là thời gian ngắn nhất để đi từ lựa chọn đến lấy hàng đã chọn đến lựa chọn giao hàng đã chọn. Sau đó, việc đặ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 bạn chỉ định cả giới hạn tương đối và giới hạn tuyệt đối cho cùng một lô hàng, thì giới hạn ràng buộc nhiều hơn sẽ được áp dụng cho mỗi cặp đến lấy hàng/giao hàng. Kể từ tháng 10 năm 2017, chúng tôi chỉ hỗ trợ đường tránh khi thời gian di chuyển không phụ thuộc vào loại xe.

Tải

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

Trường
amount

int64

Mức tải của xe thực hiện lượt truy cập tương ứng sẽ khác nhau. 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 mất độ chính xác. Phải ≥ 0.

VisitRequest

Yêu cầu về lượt ghé thăm mà một xe có thể thực hiện: yêu cầu này 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 biểu thị bằng khoảng thời gian và thời lượng phục vụ (thời gian xe dành cho việc đến lấy hàng hoặc trả hàng).

Trường
arrival_location

LatLng

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

arrival_waypoint

Waypoint

Điểm trung gian mà xe đến khi thực hiện VisitRequest này. Nếu mô hình lô hàng 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 về khoảng cách thời gian, thì 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 hoàn thành 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 về khoảng cách thời gian, thì bạn không được chỉ định departure_waypoint.

tags[]

string

Chỉ định các thẻ được đính 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 trùng lặp.

time_windows[]

TimeWindow

Cửa sổ thời gian ràng buộc thời gian đến tại một lượt truy cập. 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 và thời gian đến không nhất thiết phải nằm trong khung thời gian. Việc này có thể dẫn đến thời gian chờ nếu xe đến trước TimeWindow.start_time.

Nếu không có TimeWindow, thì xe có thể thực hiện lượt ghé thăm này bất cứ lúc nào.

Các khoảng 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ề một khoảng thời gian khác và phải theo thứ tự tăng dần.

Bạn chỉ có thể thiết lập 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 lượng ghé thăm, tức là thời gian mà xe dành cho từ thời điểm đến đến lúc khởi hành (được thêm vào thời gian chờ có thể có; xem time_windows).

cost

double

Chi phí để thực hiện yêu cầu về lượt ghé thăm này trên tuyến đường của xe. Cách tính 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ó cùng đơn vị với Shipment.penalty_cost và không được là số âm.

load_demands

map<string, Load>

Tải nhu cầu của yêu cầu truy cập này. Trường này 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ì cho toàn bộ Shipment. Các yêu cầu được liệt kê ở đây được thêm vào các yêu cầu được liệt kê trong Shipment.load_demands.

visit_types[]

string

Chỉ định loại lượt truy cập. Thông tin này có thể dùng để phân bổ thêm thời gian cần thiết để một chiếc xe hoàn tất lượt ghé thăm này (xem Vehicle.extra_visit_duration_for_visit_type).

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

label

string

Chỉ định 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 bao gồm một nhóm phương tiện vận chuyển mà trong đó một nhóm phương tiện vận chuyển phải được thực hiện, đồng thời giảm thiểu tổng chi phí, tổng cộng của:

  • chi phí định tuyến xe (tổng chi phí trên tổng thời gian, chi phí cho mỗi thời gian di chuyển và chi phí cố định cho tất cả phương tiện).
  • các khoản phạt đối với lô hàng không được thực hiện.
  • chi phí trong toàn bộ thời gian của lô hàng
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 để thực hiện các lượt ghé thăm.

global_start_time

Timestamp

Thời gian bắt đầu và kết thúc trên toàn cầu của mô hình: không có thời gian 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 trong vòng 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 để nâng cao 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ì 00:00:00 giờ UTC, ngày 1 tháng 1 năm 1970 (tức là giây: 0, nano: 0) sẽ được sử dụng theo mặc định.

global_end_time

Timestamp

Nếu bạn không đặt chính sách này, thì 00:00:00 giờ UTC, ngày 1 tháng 1 năm 1971 (tức là giây: 31536000, nano: 0) sẽ được sử dụng theo 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à khoảng thời gian chênh lệch giữa thời điểm bắt đầu có hiệu lực sớm nhất và thời điểm kết thúc có hiệu lực muộn nhất của tất cả phương tiện. Ví dụ: người dùng có thể chỉ định chi phí mỗi giờ cho số lượng đó để thử 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ó cùng đơn vị với Shipment.penalty_cost.

duration_distance_matrices[]

DurationDistanceMatrix

Chỉ định thời lượng và ma trận khoảng cách được 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 giá trị này không trống, thì use_geodesic_distances không được có giá trị true và cả duration_distance_matrix_src_tags hoặc duration_distance_matrix_dst_tags đều không được để trống.

Ví dụ về cách sử dụng:

  • Có hai vị trí: locA và locB.
  • 1 chiếc xe bắt đầu tuyến đường tại vị trí locA và kết thúc tại vị trí locA.
  • 1 yêu cầu đế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 chiếc xe bắt đầu tuyến đường tại locA và kết thúc tại locB, sử dụng ma trận "nhanh".
  • 1 chiếc 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 chiếc xe bắt đầu tuyến đường tại locB và kết thúc tại locB, sử dụng ma trận "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 của ma trận thời lượng và khoảng cách; duration_distance_matrices(i).rows(j) xác định thời lượng và khoảng cách từ lượt truy cập có thẻ duration_distance_matrix_src_tags(j) đến 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. Một VisitRequest hoặc Vehicle nhất định phải khớp chính xác với một thẻ trong trường này. Xin 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ự, 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 trường này không trống thì duration_distance_matrices không được để trống.

duration_distance_matrix_dst_tags[]

string

Thẻ xác định đích đến của ma trận thời lượng và khoảng cách; duration_distance_matrices(i).rows(j).durations(k) (phản hồi duration_distance_matrices(i).rows(j).meters(k)) xác định thời lượng (tương ứng khoảng cách) 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. Một VisitRequest hoặc Vehicle nhất định phải khớp chính xác với một thẻ trong trường này. Xin 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ự, 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 trường này không trống thì duration_distance_matrices 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

Các nhóm yêu cầu shipment_type (xem ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

Bộ quy tắ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 xe đang hoạt động tối đa. 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 chuyến hàng. Bạn có thể dùng tính năng này để giới hạn số lượng tuyến đường trong trường hợp có ít tài xế hơn số 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 nhóm xe phù hợp nhất để sử dụng. Phải hoàn toàn có giá trị dương.

DurationDistanceMatrix

Cho biết thời lượng và khoảng cách từ vị trí lượt ghé thăm và vị trí bắt đầu của xe đến lượt ghé thăm và vị trí kết thúc xe.

Trường
rows[]

Row

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

vehicle_start_tag

string

Thẻ xác định loại xe áp dụng ma trận thời lượng và quãng đường này. Nếu trống, thuộc tính này sẽ áp dụng cho tất cả các loại xe và chỉ được 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 phải khớp với vehicle_start_tag của ma trận (và chỉ ma trận đó).

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

Hàng

Chỉ định một hàng 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. Phần tử này phải có số phần tử tối đa 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 hạn chế nào đề cập đến khoảng cách trong mô hình, thì bạn có thể để trống giá trị này; nếu không thì phải có nhiều phần tử như durations.

PrecedenceRule

Quy tắc ưu tiên giữa hai sự kiện (mỗi sự kiện là một lần lấy hàng hoặc giao hàng): sự kiện "thứ hai" phải bắt đầu ít nhất offset_duration sau khi sự kiện "thứ nhất" 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ụ: "lấy hàng B sau khi giao hàng A" và "lấy hàng C sau khi lấy hàng B".

Hơn nữa, thứ tự ưu tiên chỉ áp dụng khi cả hai lô hàng đều được thực hiện, nếu không thì sẽ bị bỏ qua.

Trường
first_is_delivery

bool

Cho biết liệu giá trị "đầu tiên" là lần giao hàng.

second_is_delivery

bool

Cho biết liệu "thứ hai" là lần giao hàng.

offset_duration

Duration

Sự chênh lệch giữa giá trị "đầu tiên" và "second" sự kiện. Thông tin này có thể mang giá trị âm.

first_index

int32

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

second_index

int32

Chỉ mục lô hàng của sự kiện "thứ hai". Bạn phải chỉ định trường này.

ShipmentRoute

Tuyến đường của một xe có thể được phân ly theo trục thời gian như sau (giả sử có n lượt truy cập):

  |            |            |          |       |  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 ta phân biệt giữa:

  • "sự kiện đúng giờ", chẳng hạn như lúc xe bắt đầu và kết thúc, 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 gian đến và khởi hành). Chúng xảy ra vào một giây nhất định.
  • "khoảng thời gian", chẳng hạn như chính lượt truy cập và chuyển đổi giữa các lượt truy cập. Mặc dù đôi khi khoảng thời gian có thể có thời lượng bằng 0 (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 lượt chuyển đổi.
  • Một lượt truy cập luôn được bao quanh bởi một lượt chuyển đổi trước đó (cùng chỉ mục) và một lượt chuyển đổi sau đó (chỉ mục + 1).
  • Quá trình khởi động xe luôn diễn ra sau quá trình chuyển đổi số 0.
  • Điểm cuối của xe luôn đứng sau đoạn chuyển tiếp #n.

Khi phóng to, sau đây là những gì 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, sau đây là cách sắp xếp ĐI LẠI, NGỪNG, CHỜ và CHỜ trong quá trình chuyển đổi.

  • Chúng không chồng chéo nhau.
  • Thời gian chờ 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 khi phương tiện kết thúc). Do đó, bạn cần biết khoảng thời gian trễ để biết thời gian bắt đầu và kết thúc của sự kiện.
  • BREAKS là các khoảng thời gian liền nhau, không chồng chéo. Phản hồi này chỉ định thời gian bắt đầu và thời lượng của mỗi khoảng nghỉ.
  • DU LỊCH và ROWS là "có thể giành được": chúng 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 việc di chuyển sẽ 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ụ (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 thực hiện 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 gian xe bắt đầu đi theo tuyến đường.

vehicle_end_time

Timestamp

Thời gian xe kết thúc tuyến đường.

visits[]

Visit

Trình tự các lượt truy cập 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 bạn để trống trường này, thì chiếc xe đó sẽ đượ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 có thể dự đoán sự không nhất quán về thời gian tuyến đường bằng cách sử dụng thông tin ước tính về thời gian di chuyển dựa trên giao thông. Có thể không đủ thời gian để hoàn tất hành trình đã điều chỉnh theo lưu lượng truy cập, độ trễ và thời gian nghỉ giữa các lượt truy cập, trước lượt truy cập đầu tiên hoặc sau lượt truy cập cuối cùng, trong khi vẫn đáp ứng khoảng thời gian truy cập và thời gian của xe. Ví dụ:

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

Thời gian đến vào Next_visit có thể sẽ muộn hơn khoảng thời gian hiện tại do thời gian di chuyển ước tính cao hơn travel_duration(previous_visit, next_visit) do tình hình giao thông. Ngoài ra, thời gian nghỉ có thể bị buộc phải trùng lặp với một lượt truy cập do thời gian di chuyển ước tính tăng lên và các quy định hạn chế về thời gian truy cập hoặc thời gian nghỉ.

route_polyline

EncodedPolyline

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

breaks[]

Break

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

metrics

AggregatedMetrics

Các chỉ số về thời lượng, khoảng cách và tải cho tuyến đường này. Các trường của AggregatedMetrics được tính tổng trên tất cả 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í. Các khoá này là đường dẫn proto, liên quan đến dữ liệu đầu vào OptimizeChuyếnsRequest, ví dụ: "model.shipments.pickups.cost" và các giá trị 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 tất cả chi phí đến lấy hàng trong suốt tuyến đường. Tất cả chi phí được 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/1/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 mô tả quá trình thực thi một điểm chèn.

Trường
start_time

Timestamp

Thời gian bắt đầu của một khoảng nghỉ.

duration

Duration

Thời lượng của quảng cáo.

EncodedPolyline

Biểu diễn được mã hoá của một đường đa tuyến. Bạn có thể tìm thêm thông tin về mã hoá nhiều đườ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 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ẽ là 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

Khoảng cách đã đi trong quá trình chuyển đổi.

traffic_info_unavailable

bool

Khi có yêu cầu lưu lượng truy cập qua OptimizeToursRequest.consider_road_traffic và không truy xuất được thông tin giao thông cho Transition, giá trị boolean này được đặt thành true. Tình trạng này có thể là tạm thời (hiếm khi xảy ra sự cố trong máy chủ lưu trữ dữ liệu giao thông 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 của 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 đúng delay_duration giây trước sự kiện tiếp theo (lượt ghé thăm hoặc thời điểm kết thúc xe). Vui lòng xem TransitionAttributes.delay.

break_duration

Duration

Tổng thời lượng của các điểm chèn quảng cáo 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 nhau.

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:

  • lượt truy cập tiếp theo start_time (hoặc vehicle_end_time nếu đây là lần chuyển đổi cuối cùng) - start_time của hiệu ứng chuyển đổi này;
  • nếu ShipmentRoute.has_traffic_infeasibilities là false, thì các giá trị sau đây cũng sẽ giữ lại: "total_duration = Travel_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

Hình nhiều đường được mã hoá thể hiện tuyến đường được tuân theo trong quá trình chuyển đổi. Trường này chỉ được điền sẵn nếu bạn đặt populate_transition_polylines thành true.

vehicle_loads

map<string, VehicleLoad>

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

Các tải trong lần chuyển đổi đầu tiên là tải trọng bắt đầu trên tuyến đường của xe. 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 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 thực tế của xe tại một số điểm dọc theo tuyến đường, cho một loại xe nhất định (xem Transition.vehicle_loads).

Trường
amount

int64

Lượng tải trên xe, đối với loại xe nhất định. Đơ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 truy cập được thực hiện trong một tuyến đường. Lượt truy cập này tương ứng với một lượt đế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 nguồn ShipmentModel.

is_pickup

bool

Nếu true, lượt truy cập tương ứng với việc nhận một Shipment. Nếu không, nó tương ứng với việc 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 giờ này tại vị trí ghé thăm. Thời gian phù hợp với ShipmentModel.

load_demands

map<string, Load>

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

detour

Duration

Thời gian đi đường vòng do các lô hàng được vận chuyển trên tuyến đường trước khi đến và thời gian chờ tiềm năng do khung thời gian tính ra. 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 để lấy hàng 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, số liệu này sẽ đượ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 các trường hợp không tương thích giữa các lô hàng tuỳ thuộc vào shipment_type. Việc các kiện hàng không tương thích trong cùng một tuyến đường bị hạn chế do chế độ không tương thích.

Trường
types[]

string

Danh sách các loại không tương thích. Hai gói hàng có shipment_types khác nhau trong số các lô 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

Các phương thức xác định việc hạn chế xuất hiện những 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 được chỉ định. Tuyệt đối không sử dụng giá trị này.
NOT_PERFORMED_BY_SAME_VEHICLE Ở chế độ này, hai gói hàng có các loại không tương thích tuyệt đối không thể dùng chung một phương tiện.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

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

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

ShipmentTypeRequirement

Cho biết yêu cầu giữa các gói hàng dựa trên shipping_type [loại_ vận chuyển]. Các nội dung cụ thể của yêu cầu này được xác định theo chế độ yêu cầu.

Trường
required_shipment_type_alternatives[]

string

Danh sách các loại phương thức vận chuyển thay thế mà dependent_shipment_types yêu cầu.

dependent_shipment_types[]

string

Tất cả các lô hàng thuộc cùng loại trong trường dependent_shipment_types đều phải có ít nhất một lô hàng loại required_shipment_type_alternatives phải ghé thăm trên cùng một tuyến.

LƯU Ý: Không được phép sử dụng chuỗi yêu cầu mà shipment_type phụ thuộc vào chính nó.

requirement_mode

RequirementMode

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

RequirementMode

Các phương thức xác định việc xuất hiện của các gói hàng phụ thuộc trên một tuyến đường.

Enum
REQUIREMENT_MODE_UNSPECIFIED Chế độ yêu cầu chưa xác đị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 quảng cáo "phụ thuộc" các gói hàng phải có cùng phương tiện vận chuyển với ít nhất một trong những phương tiện vận chuyển "bắt buộc" lô hàng.
IN_SAME_VEHICLE_AT_PICKUP_TIME

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

Người "phụ thuộc" do đó, hình thức lấy hàng để vận chuyển phải có:

  • Mục "Bắt buộc" chỉ để phân phối lô hàng được giao trên tuyến đường sau, hoặc
  • A "bắt buộc" lô hàng đã được lấy trên tuyến đường trước đó và nếu "bắt buộc" thì việc giao hàng này phải được thực hiện sau phần "phụ thuộc" đến lấy hàng.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Giữ nguyên như trước, ngoại trừ phần "phụ thuộc" gói hàng cần có thông tin "bắt buộc" vận chuyển trên xe tại thời điểm giao hàng.

SkippedShipment

Nêu thông tin chi tiết về những lô hàng không thực hiện được trong một giải pháp. Đối với các trường hợp không đáng kể và/hoặc nếu chúng tôi có thể xác định 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 vì sao lô hàng bị bỏ qua. Xem nhận xét ở trên Reason. Nếu chúng tôi không thể tìm hiểu lý do vì sao lô hàng bị bỏ qua, chúng tôi sẽ không nêu lý do.

Lý do

Nếu chúng tôi có thể giải thích lý do bỏ qua đơn hàng vận chuyển, thì lý do sẽ được liệt kê tại đây. Nếu lý do không giống nhau cho tất cả các phương tiện, reason sẽ có nhiều hơn 1 phần tử. Mộ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ả phương tiện. Có thể mỗi loại xe sẽ có những lý do khác nhau, nhưng có ít nhất một mẫu xe có thể là "Táo" vượt quá sức chứa (bao gồm cả xe 1), có ít nhất một chiếc "Lê" của xe vượt quá sức chứa (bao gồm cả xe 3) và vượt quá giới hạn khoảng cách của ít nhất một xe (bao gồm cả xe 1).

Trường
code

Code

Hãy tham khảo nhận xét trong Code.

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 đã vượt quá.

example_vehicle_index

int32

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

Mã xác định loại lý do. Thứ tự ở đây là vô nghĩa. Cụ thể, nguyên tắc này không cho biết liệu một lý do nhất định 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 đều phù hợp.

Enum
CODE_UNSPECIFIED Bạn không nên sử dụng thuộc tính này.
NO_VEHICLE Không có chiếc xe nào trong mô hình khiến tất cả các lô hàng đều không khả thi.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Nhu cầu của lô hàng vượt quá sức chứa 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

Khoảng cách tối thiểu cần thiết để vận chuyển kiện hàng (tức là từ start_location của xe đến vị trí nhận hàng và/hoặc giao hàng của lô hàng và đến vị trí kết thúc của xe vượt quá route_distance_limit của xe).

Lưu ý rằng đối với 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 bảo dưỡng) 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à theo 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ể vận chuyển hàng trong trường hợp tốt nhất (xem CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT để biết cách tính thời gian) nếu xe 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 điểm kết thúc muộn nhất.
VEHICLE_NOT_ALLOWED Trường allowed_vehicle_indices của lô hàng không để trống và xe này không thuộc lô hàng đó.

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 nơi tại một lượt ghé thăm, thời gian bắt đầu và kết thúc của một chiếc xe.

Giới hạn khoảng 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, chẳng hạn như start_time <= event_time <= end_time. Giới hạn dưới của khoảng thời gian mềm soft_start_time cho biết sự kiện ưu tiên xảy ra vào hoặc sau soft_start_time bằng cách phát sinh chi phí tỷ lệ với khoảng thời gian trước khi sự kiện khởi động mềm. Giới hạn trên của khoảng thời gian mềm soft_end_time cho biết sự kiện cầ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 soft_end_time xảy ra sự kiện. 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 theo:

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

Timestamp

Thời gian bắt đầu của khoảng thời gian cố định. Nếu bạn chưa chỉ định, thì chế độ cài đặt này sẽ được đặt thành ShipmentModel.global_start_time.

end_time

Timestamp

Thời gian kết thúc của khoảng thời gian cố định. Nếu bạn chưa chỉ định, thì chế độ cài đặt này sẽ được đặt thành ShipmentModel.global_end_time.

soft_start_time

Timestamp

Thời gian khởi động mềm của khoảng thời gian.

soft_end_time

Timestamp

Thời gian kết thúc tạm thời của khoảng thời gian.

cost_per_hour_before_soft_start_time

double

Chi phí mỗi giờ được cộng vào các chi phí khác trong mô hình nếu sự kiện xảy ra trước soft_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ày nếu đã đặt soft_end_time.

TransitionAttributes

Chỉ định các thuộc tính của lượt chuyển đổi giữa hai lượt truy cập liên tiếp trên một tuyến đường. Một số TransitionAttributes có thể áp dụng cho cùng một quá trình chuyển đổi: trong trường hợp đó, mọi chi phí phát sinh cộng thêm và điều kiện ràng buộc hoặc giới hạn nghiêm ngặt nhất sẽ được áp dụng (tuân 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) sẽ áp dụng cho các thuộc tính này.

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

excluded_src_tag

string

Vui lòng xem src_tag. Không được để trống một trong hai giá trị src_tagexcluded_src_tag.

dst_tag

string

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

excluded_dst_tag

string

Vui lòng xem dst_tag. Không được để trống một trong hai giá trị dst_tagexcluded_dst_tag.

cost

double

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

cost_per_kilometer

double

Chỉ định chi phí mỗi km áp dụng cho quãng đường đã đi trong khi thực hiện quá trình chuyển đổi này. Giá trị này cộng với mọi Vehicle.cost_per_kilometer được chỉ định trên xe.

distance_limit

DistanceLimit

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

Kể từ ngày 6 tháng 2 năm 2021, chúng tôi chỉ hỗ trợ các 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.

Độ 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 đích.

Loại xe

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

Trường
display_name

string

Tên hiển thị của 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 ký tự UTF-8.

travel_mode

TravelMode

Chế độ di chuyển ảnh hưởng đến những con đường mà xe có thể đi và tốc độ của xe. Xem thêm travel_duration_multiple.

route_modifiers

RouteModifiers

Một nhóm điều kiện để đáp ứng cách tính toán tuyến đường cho một chiếc xe cụ thể.

start_location

LatLng

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, chiếc xe sẽ bắt đầu ngay từ 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_waypointstart_location, thì xe sẽ bắt đầu trong 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_waypoint.

end_location

LatLng

Vị trí địa lý nơi xe kết thúc sau khi hoàn tất VisitRequest cuối cùng. Nếu bạn không chỉ định, thì ShipmentRoute của xe sẽ kết thúc ngay khi chạy xong 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 chiếc xe kết thúc sau khi đã chạy xong VisitRequest cuối cùng. Nếu bạn không chỉ định end_waypointend_location, thì ShipmentRoute của xe sẽ kết thúc ngay khi kết thúc VisitRequest cuối cùng. Nếu mô hình lô hàng có ma trận thời lượng và khoảng cách, thì bạn không được chỉ định end_waypoint.

start_tags[]

string

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

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

end_tags[]

string

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

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

start_time_windows[]

TimeWindow

Khoảng thời gian mà xe có thể rời khỏi vị trí bắt đầu. Các trường này phải nằm trong giới hạn thời gian chung (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 các giới hạn thời gian chung đó.

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ể chồng chéo hoặc liền kề một khoảng thời gian khác, đồng thời các khoảng thời gian này 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 giá trị này phải nằm trong giới hạn thời gian chung (xem các trường ShipmentModel.global_*). Nếu không được chỉ định, thì sẽ không có giới hạn nào ngoài các giới hạn thời gian chung đó.

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ể chồng chéo hoặc liền kề một khoảng thời gian khác, đồng thời các khoảng thời gian này phải theo trình tự thời gian.

Bạn chỉ có thể thiết lập 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 về việc dỡ hàng đượ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ố lượng thùng xe). Các khoá trong tệp ánh xạ 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 không có một khoá cụ thể nào trên bản đồ này, thì dung lượng tương ứng được coi là không có giới hạn.

cost_per_hour

double

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

Chi phí mỗi giờ trên tuyến đường của phương tiện. Chi phí này được áp dụng cho tổng thời gian đi theo tuyến đường, bao gồm cả thời gian di chuyển, 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 độ trễ tăng thêm.

cost_per_traveled_hour

double

Chi phí mỗi giờ đi lại trên tuyến đường của phương tiện. Chi phí này chỉ áp dụng cho thời gian di chuyển theo tuyến đường (tức là thời gian được báo cáo trong 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 trên tuyến đường của 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 đi từ arrival_location đến departure_location của một VisitRequest.

fixed_cost

double

Chi phí cố định được áp dụng nếu xe này được dùng để xử lý một lô 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 xe không phục vụ bất kỳ lô hàng nào. Mã này cho biết có nên xem xe là đã qua sử dụng hay không trong trường hợp này.

Nếu đúng, chiếc xe sẽ đi từ điểm xuất phát đến vị trí kết thúc ngay cả khi không vận chuyển hàng nào, đồng thời chi phí về thời gian và quãng đường phát sinh từ điểm xuất phát --> cuối cùng sẽ được tính đến.

Nếu không, xe này sẽ không di chuyển từ vị trí bắt đầu đến vị trí kết thúc và sẽ không có break_rule hoặc chuyến chậm trễ nào (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 xe.

route_duration_limit

DurationLimit

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

travel_duration_limit

DurationLimit

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

route_distance_limit

DistanceLimit

Giới hạn được áp dụng cho tổng quãng đường trên tuyến đường của xe. Trong một OptimizeToursResponse nhất định, quãng đường của 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 bản đồ từ các chuỗi visit_types đến thời lượng. Khoảng thời gian này là thời gian ngoài VisitRequest.duration được thực hiện tại các lượt truy cập có visit_types được chỉ định. Thời lượng truy cập bổ sung này sẽ 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 truy cập có nhiều loại, thì thời lượng sẽ được thêm cho mỗi loại trong bản đồ.

break_rule

BreakRule

Mô tả lịch nghỉ thực thi trên xe này. Nếu trống, sẽ không có giờ nghỉ nào được lên lịch 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à xe này sẽ vẫn không được sử dụng.

Nếu quá trình vận chuyển được thực hiện bởi một phương tiện bị bỏ qua trong injected_first_solution_routes, thì quá trình vận chuyển đó sẽ bị bỏ qua trong giải pháp đầu tiên nhưng có thể được thực hiện trong phản hồi.

Nếu quá trình vận chuyển do một phương tiện bị bỏ qua thực hiện trong injected_solution_constraint và mọi hành động đến lấy hàng/giao hàng có liên quan bị buộc phải ở lại trên xe (tức là không thả lỏng để lên cấp RELAX_ALL_AFTER_THRESHOLD), thì phương tiện đó sẽ bị bỏ qua trong phản hồi. Nếu một lô hàng có trường allowed_vehicle_indices không để trống và tất cả các phương tiện đượ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ụ: việc đặt giá trị này thành 2.0 có nghĩa là xe này chạ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. Yếu tố 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 khoảng [0,001, 1000,0]. Nếu bạn không đặt chính sách này, xe sẽ là xe tiêu chuẩn và bội 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ỳ thao tác số nào, do đó, nếu chỉ số bội số nhỏ có thể làm giảm độ chính xác, thì thời gian di chuyển sẽ được làm tròn đến giây gần nhất.

Hãy xem thêm extra_visit_duration_for_visit_type bên dưới.

DurationLimit

Giới hạn xác định thời lượng tối đa của tuyến đường mà phương tiện di chuyển. Có thể là cứng hoặc mềm.

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

Trường
max_duration

Duration

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

soft_max_duration

Duration

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

Nếu được xác định, soft_max_duration không được là số âm. Nếu bạn 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 mềm không áp dụng giới hạn thời lượng tối đa, nhưng khi vi phạm sẽ khiến tuyến đường phải chịu chi phí, gấp đôi trong khoảng thời gian đó. 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 một đơn vị.

Nếu được xác định, quadratic_soft_max_duration không được là số âm. Nếu max_duration cũng được định nghĩa, thì quadratic_soft_max_duration phải nhỏ hơn max_duration và 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ải chịu nếu vi phạm ngưỡng soft_max_duration. Chi phí bổ sung là 0 nếu thời lượng nằm dưới ngưỡng, nếu không thì chi phí sẽ phụ thuộc vào thời lượng 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 vi phạm ngưỡng quadratic_soft_max_duration.

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

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

Chi phí phải là số không âm.

LoadLimit

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

Trường
soft_max_load

int64

Giới hạn tải nhẹ. Vui lòng xem cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Nếu tải vượt quá soft_max_load dọc theo tuyến đường của xe này, thì mức phạt chi phí sau đây sẽ được áp dụng (chỉ một lần cho mỗi xe): (tải – soft_max_load) * cost_per_unit_above_soft_max. Tất cả các chi phí đều được cộng lại và phải có 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 ở đầu tuyến.

end_load_interval

Interval

Khoảng tải trọng chấp nhận được của xe ở cuối tuyến đường.

max_load

int64

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

Khoảng thời gian

Khoảng thời gian tải được chấp nhận.

Trường
min

int64

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

max

int64

Tải trọng tối đa chấp nhận được. Phải ≥ 0. Nếu bạn không 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 có giá trị ≤ max.

TravelMode

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

Những phương thức di chuyển này phải là một nhóm nhỏ các phương thức đi lại sử dụng API ưu tiên cho Tuyến đường trên Nền tảng Google Maps, vui lòng xem: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enum
TRAVEL_MODE_UNSPECIFIED Chế độ đi lại chưa xác đị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ỡ hàng khỏi xe. Chỉ áp dụng cho những gói hàng có cả hình thức đến lấy hàng và giao hàng.

Các gói vận chuyển khác được miễn phí tại bất cứ đâu trên tuyến đường mà không phụ thuộc vào unloading_policy.

Enum
UNLOADING_POLICY_UNSPECIFIED Chính sách huỷ tải không xác định; việc phân phối chỉ được diễn ra sau lần đến lấy hàng tương ứng.
LAST_IN_FIRST_OUT Việc giao hàng phải diễn ra theo thứ tự đảo ngược thời gian giao hàng
FIRST_IN_FIRST_OUT Các đơn hàng giao hàng phải được thực hiện theo thứ tự tương tự như các đơn hàng đến lấy hàng

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

Trường
side_of_road

bool

Không bắt buộc. Cho biết rằng vị trí của điểm tham chiếu này được dành cho xe cộ ưu tiên 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í này để xe có thể dừng ở bên đường mà vị trí lệch về phía giữa đường. Tuỳ chọn này không hoạt động với chế độ đi bộ.

Trường kết 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 đây:
location

Location

Một điểm được chỉ định bằng toạ độ địa lý, bao gồm cả tiêu đề không bắt buộc.

place_id

string

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