Package google.maps.routeoptimization.v1

Chỉ mục

RouteOptimization

Một dịch vụ để tối ưu hoá hành trình xe.

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

  • google.protobuf.Timestamp
    • Thời gian tính theo thời gian Unix: số giây kể từ 00:00:00 ngày 01/01/1970.
    • số giây phải nằm trong khoảng [0, 253402300799], tức là trong khoảng [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • Bạn không được đặt nanos hoặc phải đặt thành 0.
  • google.protobuf.Duration
    • số giây phải nằm trong khoảng [0, 253402300799], tức là trong khoảng [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • Bạn không được đặt nanos hoặc phải đặt thành 0.
  • 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 giá trị vĩ độ và kinh độ phải khác 0.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

Tối ưu hoá hành trình xe cho một hoặc nhiều thông báo OptimizeToursRequest dưới dạng một lô.

Phương thức này là một Thao tác diễn ra trong thời gian dài (LRO). Đầu vào để tối ưu hoá (thông báo OptimizeToursRequest) và đầu ra (thông báo OptimizeToursResponse) được đọc và ghi vào Cloud Storage ở định dạng do người dùng chỉ định. Giống như phương thức OptimizeTours, mỗi OptimizeToursRequest đều chứa một ShipmentModel và trả về một OptimizeToursResponse chứa các trường 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ò operations.get để kiểm tra trạng thái của LRO:

Nếu trường LRO done là false, thì ít nhất một yêu cầu vẫn đang được xử lý. Những yêu cầu khác có thể đã hoàn tất thành công và kết quả của các yêu cầu đó có trong Cloud Storage.

Nếu trường done của LRO là true, thì tất cả cá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 Cloud Storage. Mọi yêu cầu không thành công sẽ không có kết quả trong Cloud Storage. Nếu trường error của LRO được đặt, thì trường này sẽ chứa lỗi của 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 IAM

Yêu cầu quyền IAM sau đây trên 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 một OptimizeToursRequest chứa ShipmentModel và trả về một OptimizeToursResponse chứa các 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 để vận chuyển các Shipment. Các ShipmentRoute sẽ chỉ định Shipment cho Vehicle. Cụ thể hơn, họ chỉ định một loạt Visit cho mỗi chiếc xe, trong đó Visit tương ứng với VisitRequest, là một chuyến nhận hàng hoặc giao hàng cho Shipment.

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

Phạm vi uỷ quyền

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

  • https://www.googleapis.com/auth/cloud-platform
Quyền IAM

Yêu cầu quyền IAM sau đây trên tài nguyên parent:

  • routeoptimization.locations.use

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

OptimizeToursLongRunning

rpc OptimizeToursLongRunning(OptimizeToursRequest) returns (Operation)

Đây là một biến thể của phương thức OptimizeTours được thiết kế để tối ưu hoá với các giá trị thời gian chờ lớn. Bạn nên ưu tiên sử dụng phương thức OptimizeTours cho những hoạt động tối ưu hoá mất hơn vài phút.

long-running operation (LRO) được trả về sẽ có tên theo định dạng <parent>/operations/<operation_id> và có thể dùng để theo dõi tiến trình tính toán. Loại trường metadataOptimizeToursLongRunningMetadata. Loại trường responseOptimizeToursResponse, nếu thành công.

Thử nghiệm: Hãy xem https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request để biết thêm thông tin chi tiết.

Phạm vi uỷ quyền

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

  • https://www.googleapis.com/auth/cloud-platform
Quyền IAM

Yêu cầu quyền IAM sau đây trên tài nguyên parent:

  • routeoptimization.operations.create

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

OptimizeToursUri

rpc OptimizeToursUri(OptimizeToursUriRequest) returns (Operation)

Đây là một biến thể của phương thức OptimizeToursLongRunning được thiết kế để tối ưu hoá với các giá trị thời gian chờ lớn và kích thước đầu vào/đầu ra lớn.

Ứng dụng chỉ định URI của OptimizeToursRequest được lưu trữ trong Google Cloud Storage và máy chủ ghi OptimizeToursResponse vào một URI Google Cloud Storage do ứng dụng chỉ định.

Bạn nên dùng phương thức này thay vì phương thức OptimizeTours cho những hoạt động tối ưu hoá mất nhiều hơn vài phút và kích thước đầu vào/đầu ra lớn hơn 8 MB, mặc dù bạn cũng có thể dùng phương thức này cho những hoạt động tối ưu hoá ngắn hơn và nhỏ hơn.

long-running operation (LRO) được trả về sẽ có tên theo định dạng <parent>/operations/<operation_id> và có thể dùng để theo dõi tiến trình tính toán. Loại trường metadataOptimizeToursLongRunningMetadata. Loại trường responseOptimizeToursUriResponse, nếu thành công.

Thử nghiệm: Hãy xem https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request để biết thêm thông tin chi tiết.

Phạm vi uỷ quyền

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

  • https://www.googleapis.com/auth/cloud-platform
Quyền IAM

Yêu cầu quyền IAM sau đây trên tài nguyên parent:

  • routeoptimization.operations.create

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

AggregatedMetrics

Các chỉ số tổng hợp cho ShipmentRoute (tương ứng cho OptimizeToursResponse trên tất cả các phần tử Transition và/hoặc Visit (tương ứng trên tất cả các phần tử 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 lấy hàng và giao hàng chỉ được tính một lần.

travel_duration

Duration

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

wait_duration

Duration

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

delay_duration

Duration

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

break_duration

Duration

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

visit_duration

Duration

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

total_duration

Duration

Tổng thời lượng phải bằng tổng của tất cả thời lượng ở trên. Đối với các tuyến đường, tham số 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 di chuyển cho một tuyến đường hoặc một giải pháp.

max_loads

map<string, VehicleLoad>

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

performed_mandatory_shipment_count

int32

Số lượng lô hàng bắt buộc đã thực hiện.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

performed_shipment_penalty_cost_sum

double

Tổng Shipment.penalty_cost của các lô hàng đã thực hiện.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

BatchOptimizeToursMetadata

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

Siêu dữ liệu thao tác cho các lệnh gọi BatchOptimizeToursRequest.

BatchOptimizeToursRequest

Yêu cầu tối ưu hoá hàng loạt các chuyến tham quan dưới dạng một thao tác 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 nằm trong cùng một dự án.

Trường
parent

string

Bắt buộc. Dự án và vị trí mục tiêu để 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 từng mô hình mua hàng, chẳng hạn như đường dẫn tệp và định dạng dữ liệu.

AsyncModelConfig

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

Trường
display_name

string

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

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 BatchOptimizeToursRequest. Giá trị này được trả về trong Thao tác kéo dài sau khi thao tác hoàn tất.

BreakRule

Các quy tắc để tạo khoảng thời gian nghỉ cho xe (ví dụ: giờ nghỉ trưa). Thời gian nghỉ là một khoảng thời gian liên tục mà xe vẫn ở trạng thái không hoạt động tại vị trí hiện tại và không thể thực hiện bất kỳ lượt ghé thăm nào. Quảng cáo chèn có thể xuất hiện:

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

BreakRequest

Trình tự các đoạn nghỉ. Xem thông báo BreakRequest.

frequency_constraints[]

FrequencyConstraint

Có thể áp dụng một số FrequencyConstraint. Tất cả các điều kiện này phải được đáp ứng trước ngày BreakRequest của BreakRule. Hãy xem FrequencyConstraint.

BreakRequest

Bạn phải biết trước trình tự của các điểm dừng (tức là số lượng và thứ tự của các điểm dừng) áp dụng cho từng xe. Các BreakRequest lặp lại sẽ xác định trình tự đó, theo thứ tự mà chúng phải xảy ra. Khung thời gian của họ (earliest_start_time / latest_start_time) có thể trùng nhau, nhưng phải tương thích với thứ tự (hệ thống sẽ kiểm tra điều này).

Trường
earliest_start_time

Timestamp

Bắt buộc. Giới hạn dưới (bao gồm cả giới hạn này) khi bắt đầu khoảng thời gian nghỉ.

latest_start_time

Timestamp

Bắt buộc. Giới hạn trên (bao gồm) của thời điểm bắt đầu khoảng thời gian ngắt.

min_duration

Duration

Bắt buộc. Thời lượng tối thiểu của khoảng thời gian nghỉ. Phải là số dương.

FrequencyConstraint

Bạn có thể hạn chế thêm tần suất và thời lượng của các khoảng nghỉ được chỉ định ở trên bằng cách thực thi tần suất nghỉ tối thiểu, chẳng hạn như "Phải có khoảng nghỉ ít nhất 1 giờ sau mỗi 12 giờ". Giả sử rằng điều này có thể được diễn giải là "Trong bất kỳ khoảng thời gian 12 giờ nào, phải có ít nhất một khoảng nghỉ dài ít nhất một giờ", ví dụ đó sẽ được chuyển thành FrequencyConstraint sau đây:

{
   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 khoảng nghỉ trong giải pháp sẽ tuân thủ tất cả cá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 khoảng thời gian không liên tục. Ví dụ: lịch biểu sau đây tuân theo ví dụ "1 giờ mỗi 12 giờ":

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
Trường
min_break_duration

Duration

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

max_inter_break_duration

Duration

Bắt buộc. Khoảng thời gian tối đa được phép của bất kỳ khoảng thời gian nào trong tuyến đường không bao gồm ít nhất một phần thời gian nghỉ ngơi là 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 Ký hiệu đối tượng JavaScript.
PROTO_TEXT Định dạng văn bản Protocol Buffers. Xem https://protobuf.dev/reference/protobuf/textformat-spec/

DistanceLimit

Một giới hạn xác định khoảng cách tối đa có thể di chuyển. Có thể là cứng hoặc mềm.

Nếu bạn 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 âm.

Trường
max_meters

int64

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

soft_max_meters

int64

Giới hạn mềm không áp dụng giới hạn khoảng cách tối đa, nhưng khi bị vi phạm, giới hạn này sẽ dẫn đến một chi phí cộng thêm vào 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, soft_max_meters phải nhỏ hơn max_meters và không được âm.

cost_per_kilometer_below_soft_max

double

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

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

route_distance_limit không hỗ trợ chi phí này.

cost_per_kilometer_above_soft_max

double

Chi phí trên 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 dưới hạn mức, nếu không, công thức dùng để tính chi phí là:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

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

GcsDestination

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

Trường
uri

string

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

GcsSource

Vị trí của Google Cloud Storage nơi tệp đầu vào sẽ được đọc.

Trường
uri

string

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

InjectedSolutionConstraint

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

Trường
routes[]

ShipmentRoute

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

skipped_shipments[]

SkippedShipment

Các lô hàng bị bỏ qua của giải pháp cần chèn. 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 0 hoặc nhiều nhóm xe, hãy chỉ định thời điểm và mức độ nới lỏng các ràng buộc. Nếu trường này trống, thì tất cả các tuyến đường không trống của xe đều bị hạn chế hoàn toàn.

ConstraintRelaxation

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

Trường
relaxations[]

Relaxation

Tất cả các quy tắc nới lỏng về lượt ghé thăm sẽ áp dụng cho các lượt ghé thăm trên những tuyến đường có phương tiện trong vehicle_indices.

vehicle_indices[]

int32

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

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

Thư giãn

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

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

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

Tương tự, quá trình khởi động xe được nới lỏng thành relaxations(i).level nếu đáp ứng các điều kiện sau:

  • vehicle_start_time >= relaxations(i).threshold_time
  • relaxations(i).threshold_visit_count == 0 và đầu xe được nới lỏng thành relaxations(i).level nếu đáp ứng các điều kiện sau:
  • 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 điều kiện threshold_visit_count HOẶC threshold_time, hãy thêm hai relaxations có cùng level: một chỉ có threshold_visit_count và một chỉ có threshold_time. Nếu một lượt truy cập đáp ứng các điều kiện của nhiều relaxations, thì cấp độ ít hạn chế nhất sẽ được áp dụng. Do đó, từ khi xe bắt đầu đến khi xe kết thúc, mức độ thư giãn sẽ tăng lên: tức là mức độ thư giãn sẽ không giảm khi tuyến đường tiến triển.

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

Trường
level

Level

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

threshold_time

Timestamp

Thời gian mà bạn có thể áp dụng quy tắc nới lỏng level.

threshold_visit_count

int32

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

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

Cấp độ

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

Phần liệt kê dưới đây được sắp xếp theo thứ tự tăng dần mức độ thư giãn.

Enum
LEVEL_UNSPECIFIED

Cấp độ nới lỏng mặc định ngầm ẩn: không có ràng buộc nào được nới lỏng, tức là tất cả các 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 lượt ghé thăm và 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 ghé thăm vẫn phải gắn với cùng một chiếc xe và bạn phải tuân thủ trình tự ghé thăm: không được chèn lượt ghé thăm giữa hoặc trước các lượt ghé thăm.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Tương tự như RELAX_VISIT_TIMES_AFTER_THRESHOLD, nhưng trình tự ghé thăm cũng được nới lỏng: chỉ có xe này mới có thể thực hiện các lượt ghé thăm, nhưng có thể không thực hiện được.
RELAX_ALL_AFTER_THRESHOLD Tương tự như RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, nhưng xe cũng được thả lỏng: các 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 một đầu vào cho [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].

Trường
data_format

DataFormat

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

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

GcsSource

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

Thông tin vị trí

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

Trường
lat_lng

LatLng

Toạ độ địa lý của điểm đánh dấu.

heading

int32

Hướng la bàn liên quan đến hướng lưu lượng truy cập. Giá trị này dùng để chỉ định phía đường cần sử dụng để đón và trả khách. Giá trị hướng có thể từ 0 đến 360, trong đó 0 chỉ định hướng Bắc, 90 chỉ định hướng Đông, v.v.

OptimizeToursLongRunningMetadata

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

Siêu dữ liệu thao tác cho các lệnh gọi OptimizeToursLongRunning.

OptimizeToursRequest

Yêu cầu được đưa ra cho một trình giải quyết tối ưu hoá hành trình, xác định mô hình lô hàng cần giải quyết cũng như các thông số tối ưu hoá.

Trường
parent

string

Bắt buộc. Nhắm đến dự án hoặc vị trí cần 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, máy chủ sẽ trả về một phản hồi trước khi hết thời gian chờ hoặc đạt đến thời hạn của máy chủ cho các yêu cầu đồng bộ, tuỳ theo thời đ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 ra một giải pháp (nếu có thể) trước khi hết thời gian chờ.

model

ShipmentModel

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

solving_mode

SolvingMode

Theo mặc định, chế độ giải 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á tìm giải pháp đầu tiên tương tự như một giải pháp trước đó.

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

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

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

Nếu giải pháp được chèn không khả thi, thì không nhất thiết phải trả về lỗi xác thực mà thay vào đó, có thể trả về lỗi cho biết giải pháp không khả thi.

injected_solution_constraint

InjectedSolutionConstraint

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

Nếu giải pháp được chèn không khả thi, thì không nhất thiết phải trả về lỗi xác thực mà thay vào đó, có thể trả về lỗi cho biết giải pháp không khả thi.

refresh_details_routes[]

ShipmentRoute

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

Kể từ ngày 11/2020, phương thức này chỉ điền sẵn các đường nhiều đoạn của những tuyến đường không trống và yêu cầu populate_polylines là true.

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

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

Shipment.ignoreVehicle.ignore không ảnh hưởng đến hành vi. Đường nhiều đoạn vẫn được điền sẵn giữa tất cả các lượt ghé thăm trong mọi tuyến đường không trống, bất kể các lô hàng hoặc xe có 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. Bạn có thể sử dụng tham số này khi chỉ mục lô hàng hoặc xe trong yêu cầu đã thay đổi kể từ khi giải pháp được tạo, có thể là do lô hàng hoặc xe đã bị xoá hoặc thêm vào yêu cầu.

Nếu là true, nhãn trong các danh mục sau đây chỉ được xuất hiện tối đa một lần trong danh mục của nhãn:

Nếu vehicle_label trong giải pháp được chèn 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. Nếu shipment_label trong giải pháp được chèn không tương ứng với một yêu cầu vận chuyển, thì lượt truy cập tương ứng sẽ bị xoá khỏi giải pháp. Nếu SkippedShipment.label trong giải pháp được chèn 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 chèn có thể ảnh hưởng đến các ràng buộc ngầm định, điều này 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 mỗi Vehicle.label (tương ứng. Shipment.label) xác định duy nhất một thực thể xe (tương ứng là lô hàng) được dùng trong 2 yêu cầu có liên quan: yêu cầu trước đó đã tạo ra OptimizeToursResponse được dùng trong giải pháp được chèn và yêu cầu hiện tại có chứa giải pháp được chèn. Các bước kiểm tra tính duy nhất nêu trên là không đủ để đảm bảo yêu cầu này.

consider_road_traffic

bool

Hãy cân nhắc việc ước tính lưu lượng truy cập khi tính toán 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, các đường nhiều đoạn sẽ được điền sẵn trong các phản hồi ShipmentRoute.

populate_transition_polylines

bool

Nếu là true, các mã thông báo đường đa tuyến và tuyến đường sẽ được điền sẵn trong phản hồi ShipmentRoute.transitions.

allow_large_deadline_despite_interruption_risk

bool

Nếu được đặt, thì yêu cầu có thể có thời hạn (xem https://grpc.io/blog/deadlines) tối đa là 60 phút. 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 tồn tại lâu dài có nguy cơ bị gián đoạn cao hơn đáng kể (nhưng vẫn nhỏ).

use_geodesic_distances

bool

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

label

string

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

geodesic_meters_per_second

double

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

max_validation_errors

int32

Cắt bớt số lượng lỗi xác thực được trả về. Những lỗi này thường được đính kèm vào 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ừ phi solving_mode=VALIDATE_ONLY: xem trường OptimizeToursResponse.validation_errors. Giá trị mặc định là 100 và giới hạn là 10.000.

SearchMode

Chế độ xác định hành vi của hoạt động tìm kiếm, đánh đổi độ trễ so với chất lượng giải pháp. Trong mọi chế độ, thời hạn yêu cầu chung sẽ đượ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 Dừng tìm kiếm sau khi tìm thấy giải pháp phù hợp đầu tiên.
CONSUME_ALL_AVAILABLE_TIME Dành tất cả 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. 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ảnh báo có thể được đưa ra trong [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors].
VALIDATE_ONLY Chỉ xác thực mô hình mà không giải quyết: điền càng nhiều OptimizeToursResponse.validation_errors càng tốt.
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 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 các tuyến đường không khả thi trong injected_solution_constraint, thì các tuyến đường đó sẽ được điền sẵn vào trường OptimizeToursResponse.validation_errors và trường OptimizeToursResponse.skipped_shipments sẽ bị bỏ trống.

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

TRANSFORM_AND_RETURN_REQUEST

Chế độ này chỉ hoạt động nếu ShipmentModel.objectives không trống. Yêu cầu chưa được giải quyết. Chỉ được xác thực và điền sẵn các chi phí tương ứng với mục tiêu đã cho. Ngoài ra, hãy xem tài liệu về ShipmentModel.objectives. Yêu cầu thu được sẽ được trả về dưới dạng OptimizeToursResponse.processed_request.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request để biết thêm thông tin chi tiết.

OptimizeToursResponse

Phản hồi sau khi giải quyết vấn đề tối ưu hoá hành trình, bao gồm các tuyến đường mà mỗi xe đã đi, các 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 từng 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 bạn đã chỉ định một nhãn 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 một cách độc lập. Xem phần giải thích "NHIỀU LỖI" cho thông báo OptimizeToursValidationError. Thay vì lỗi, trường hợp này sẽ bao gồm cả cảnh báo nếu solving_modeDEFAULT_SOLVE.

processed_request

OptimizeToursRequest

Trong một số trường hợp, chúng tôi sửa đổi yêu cầu nhận được trước khi giải quyết, tức là thêm chi phí. Nếu solving_mode == TRANSFORM_AND_RETURN_REQUEST, thì yêu cầu đã sửa đổi sẽ được trả về tại đây.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request để biết thêm thông tin chi tiết.

metrics

Metrics

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

Chỉ số

Các 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 trên các tuyến đường. Mỗi chỉ số là tổng (hoặc tối đa, đối với 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ị bỏ qua.

used_vehicle_count

int32

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

earliest_vehicle_start_time

Timestamp

Thời gian bắt đầu sớm nhất cho một chiếc xe đã qua sử dụng, được tính là thời gian tối thiểu của tất cả cá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 cho một chiếc xe đã qua sử dụng, được tính là thời gian tối đa của tất cả cá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í. Khoá là đường dẫn proto, tương ứng với OptimizeToursRequest đầu vào, ví dụ: "model.shipments.pickups.cost" và 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, costs["model.shipments.pickups.cost"] là tổng của tất cả chi phí lấy hàng trong 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ừ chi phí liên quan đến TransitionAttributes (Thuộc tính chuyển đổi) 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í.

OptimizeToursUriMetadata

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

Siêu dữ liệu thao tác cho các lệnh gọi OptimizeToursUri.

OptimizeToursUriRequest

Yêu cầu được phương thức OptimizeToursUri sử dụng.

Trường
parent

string

Bắt buộc. Nhắm đến dự án hoặc vị trí cần 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.

input

Uri

Bắt buộc. URI của đối tượng Cloud Storage chứa OptimizeToursRequest.

output

Uri

Bắt buộc. URI của đối tượng Cloud Storage sẽ chứa OptimizeToursResponse.

OptimizeToursUriResponse

Phản hồi do phương thức OptimizeToursUri trả về.

Trường
output

Uri

Không bắt buộc. URI của đối tượng Cloud Storage chứa OptimizeToursResponse được mã hoá dưới dạng JSON hoặc textproto. Nếu đối tượng được mã hoá dưới dạng JSON, thì phần mở rộng của tên đối tượng sẽ là .json. Nếu đối tượng được mã hoá dưới dạng textproto, thì phần mở rộng của tên đối tượng sẽ là .txtpb.

Bạn có thể dùng crc32_checksum của tài nguyên để xác minh nội dung của tài nguyên chưa bị sửa đổi.

OptimizeToursValidationError

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

Trường
code

int32

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

Các trường sau phần này cung cấp thêm bối cảnh về lỗi.

NHIỀU LỖI: Khi có nhiều lỗi, quy trình xác thực sẽ cố gắng xuất một số lỗi trong số đó. Giống như 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ẽ là "nghiêm trọng", tức là những lỗi này sẽ dừng toàn bộ quy trình xác thực. Đây là trường hợp đối với lỗi display_name="UNSPECIFIED", trong số những lỗi khác. Một số lỗi có thể khiến quy trình xác thực bỏ qua các lỗi khác.

TÍNH ỔN ĐỊNH: codedisplay_name phải rất ổn định. Tuy nhiên, mã 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 nhất định (không hợp lệ) tạo ra một cặp (code, display_name) khác vì lỗi mới đã ẩn lỗi cũ. Ví dụ: xem "NHIỀU LỖI".

display_name

string

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

fields[]

FieldReference

Bối cảnh lỗi có thể liên quan đến 0, 1 (hầu hết thời gian) hoặc nhiều trường. Ví dụ: bạn có thể tham khảo lần nhận hàng đầu tiên của xe số 4 và lô hàng số 2 như sau:

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

Tuy nhiên, lưu ý rằng số lượng 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").

ĐỘ ỔN ĐỊNH: Không ổn định: thông báo lỗi liên kết với một code nhất định có thể thay đổi (hy vọng là để làm rõ) theo thời gian. Thay vào đó, vui lòng dựa vào display_namecode.

offending_values

string

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

FieldReference

Chỉ định một bối cảnh cho lỗi xác thực. FieldReference luôn đề cập đến một trường nhất định trong tệp này và tuân theo cùng một cấu trúc phân cấp. Ví dụ: chúng ta 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 làm thông báo trở nên rối rắm.

Trường
name

string

Tên của trường, ví dụ: "vehicles".

sub_field

FieldReference

Trường con lồng nhau đệ quy (nếu cần).

Trường nhóm index_or_key.

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

index

int32

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

key

string

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

OutputConfig

Chỉ định đích đến cho kết quả [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].

Trường
data_format

DataFormat

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

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

GcsDestination

Vị trí của Google Cloud Storage để ghi đầu ra.

RouteModifiers

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

Trường
avoid_tolls

bool

Chỉ định có nên tránh đường thu phí nếu có thể hay không. Chúng tôi sẽ ưu tiên những tuyến đường không có đường thu phí. Chỉ áp dụng cho các chế độ di chuyển bằng động cơ.

avoid_highways

bool

Chỉ định xem có nên tránh đường cao tốc hay không (nếu có thể). Các tuyến đường không có đường cao tốc sẽ được ưu tiên. Chỉ áp dụng cho các chế độ di chuyển bằng động cơ.

avoid_ferries

bool

Chỉ định xem có tránh phà khi hợp lý hay không. Các tuyến đường không có phà sẽ được ưu tiên. Chỉ áp dụng cho các chế độ di chuyển bằng động cơ.

avoid_indoor

bool

Không bắt buộc. Chỉ định có nên tránh điều hướng trong nhà khi hợp lý hay không. Các tuyến đường không có chỉ dẫn điều hướng trong nhà sẽ được ưu tiên. Chỉ áp dụng cho chế độ di chuyển WALKING.

Lô hàng

Việc vận chuyển một mặt hàng, từ một trong các điểm lấy hàng đến một trong các điểm giao hàng. Để được coi là đã thực hiện chuyến giao hàng, một chiếc xe riêng biệt phải đến một trong các địa điểm lấy hàng (và giảm công suất dự phòng tương ứng), sau đó đến một trong các địa điểm giao hàng (và do đó tăng công suất dự phòng tương ứng).

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 các ký tự UTF-8.

pickups[]

VisitRequest

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

deliveries[]

VisitRequest

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

load_demands

map<string, Load>

Nhu cầu tải 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à giá trị nhận dạng mô tả loại tải tương ứng, lý tưởng nhất là cũng bao gồm các đơn vị. Ví dụ: "weight_kg", "volume_gallons", "pallet_count", v.v. Nếu một khoá nhất định không xuất hiện trong bản đồ, thì tải tương ứng sẽ đượ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 chuyến vận chuyển này. Nếu bạn để trống, tất cả các phương tiện đều có thể thực hiện thao tác này. Phương tiện được cung cấp theo chỉ mục trong danh sách ShipmentModel của vehicles.

costs_per_vehicle[]

double

Cho biết chi phí phát sinh khi mỗi chiếc xe giao lô hàng này. Nếu được chỉ định, thì giá trị này PHẢI có MỘT TRONG HAI:

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

Các khoản phí này phải có cùng đơn vị với penalty_cost và không được nhỏ hơn 0. Để trống trường này nếu không có các khoản phí như vậy.

costs_per_vehicle_indices[]

int32

Chỉ số của những chiếc xe mà costs_per_vehicle áp dụng. Nếu không trống, thì trường này phải có cùng số phần tử như costs_per_vehicle. Bạn không thể chỉ định chỉ mục xe nhiều lần. Nếu một chiếc xe bị loại trừ khỏi costs_per_vehicle_indices, thì chi phí của chiếc xe đó là 0.

pickup_to_delivery_absolute_detour_limit

Duration

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

Ví dụ: giả sử t là thời gian ngắn nhất để đi từ địa điểm tự đến lấy đã chọn đến địa điểm giao hàng đã chọn. Sau đó, chế độ cài đặt pickup_to_delivery_absolute_detour_limit sẽ thực thi:

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

Nếu cả giới hạn tương đối và tuyệt đối đều được chỉ định trên cùng một lô hàng, thì giới hạn ràng buộc hơn sẽ được sử dụng cho mỗi cặp nhận hàng/giao hàng có thể có. Kể từ ngày 10/2017, chúng tôi chỉ hỗ trợ đường vòng 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 lấy hàng đến khi bắt đầu giao hàng. Nếu được chỉ định, giá trị này phải không âm và lô hàng phải có ít nhất một lần đến lấy và một lần giao hàng. Điều này không phụ thuộc vào lựa chọn thay thế nào được chọn để lấy hàng và giao hàng, cũng như tốc độ của xe. Bạn có thể chỉ định thông số này cùng với các ràng buộc tối đa về đường vòng: 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 một "type" cho lô hàng này. Bạn có thể dùng tính năng này để xác định các điểm 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 với visit_types được chỉ định cho một lần ghé thăm: Tất cả các lần nhận hàng/giao hàng thuộc cùng một lô hàng đều có cùng một shipment_type.

label

string

Chỉ định 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ó thể bỏ qua một chuyến giao hàng được thực hiện trong injected_first_solution_routes hoặc injected_solution_constraint; trình giải quyết sẽ xoá các lượt ghé thăm liên quan để lấy/giao hàng khỏi tuyến đường 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 chưa hoàn tất việc vận chuyển, khoản tiền phạt này sẽ được cộng vào tổng chi phí của các tuyến đường. Một chuyến hàng được coi là hoàn tất nếu bạn truy cập vào một trong các lựa chọn thay thế về việc đến lấy hàng và giao hàng. Bạn có thể biểu thị chi phí bằng cùng đơn vị được 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.

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

pickup_to_delivery_relative_detour_limit

double

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

Ví dụ: giả sử t là thời gian ngắn nhất để đi từ địa điểm tự đến lấy đã chọn đến địa điểm giao hàng đã chọn. Sau đó, chế độ cài đặt pickup_to_delivery_relative_detour_limit sẽ thực thi:

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

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

Hoạt động tải

Khi thực hiện một lượt ghé thăm, một số tiền đượ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 xác định số tiền đó. Vui lòng xem load_demands.

Trường
amount

int64

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

VisitRequest

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

Trường
arrival_location

LatLng

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

arrival_waypoint

Waypoint

Điểm tham chiếu mà xe đến khi thực hiện VisitRequest này. Nếu mô hình vận chuyển có ma trận khoảng cách về 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. Bạn có thể bỏ qua nếu URL này giống với arrival_location. Nếu mô hình vận chuyển có ma trận khoảng cách về thời gian, bạn không được chỉ định departure_location.

departure_waypoint

Waypoint

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

tags[]

string

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

time_windows[]

TimeWindow

Khung thời gian giới hạn thời gian đến của một lượt truy cập. Xin lưu ý rằng xe có thể khởi hành bên ngoài khung thời gian đến, tức là thời gian đến + thời lượng không cần nằm trong một khung thời gian. Điều 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, tức là xe có thể thực hiện chuyến ghé thăm này bất cứ lúc nào.

Các khung thời gian phải rời rạc, tức là không có khung thời gian nào được chồng chéo hoặc liền kề với khung thời gian khác và các khung thời gian phải theo thứ tự tăng dần.

Bạn chỉ có thể đặt cost_per_hour_after_soft_end_timesoft_end_time nếu chỉ có một khung thời gian.

duration

Duration

Thời gian của chuyến ghé thăm, tức là thời gian mà xe đã dành ra giữa thời điểm đến và thời điểm rời đi (sẽ được thêm vào thời gian chờ có thể có; xem time_windows).

cost

double

Chi phí để phục vụ yêu cầu ghé thăm này trên một tuyến đường của xe. Bạn có thể sử dụng thuộc tính này để thanh toán các khoản phí khác nhau cho từng lựa chọn thay thế để đến lấy hàng hoặc giao hàng của một lô hàng. 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 các yêu 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ì toàn bộ Shipment. Các yêu cầu được liệt kê tại đây sẽ được thêm vào các yêu cầu được liệt kê trong Shipment.load_demands.

visit_types[]

string

Chỉ định các loại lượt truy cập. Bạn có thể dùng thông tin này để phân bổ thêm thời gian cần thiết cho xe hoàn tất chuyến 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 dưới dạng visit_label trong ShipmentRoute.Visit tương ứng.

avoid_u_turns

bool

Chỉ định xem có nên tránh quay đầu xe trong các tuyến đường lái xe tại vị trí này hay không. Tính năng tránh quay đầu xe sẽ cố gắng hết sức để hoạt động và không đảm bảo tránh hoàn toàn. Đây là một tính năng thử nghiệm và hành vi của tính năng này có thể thay đổi.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request để biết thêm thông tin chi tiết.

ShipmentModel

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

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

Shipment

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

vehicles[]

Vehicle

Tập hợp các phương tiện có thể dùng để thực hiện chuyến thăm.

objectives[]

Objective

Tập hợp các mục tiêu cho mô hình này mà chúng ta sẽ chuyển đổi thành chi phí. Nếu không trống, mô hình đầu vào phải không tốn kém. Để nhận được yêu cầu đã sửa đổi, vui lòng sử dụng solving_mode = TRANSFORM_AND_RETURN_REQUEST. Xin lưu ý rằng yêu cầu sẽ không được giải quyết trong trường hợp này. Xem tài liệu tương ứng.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request để biết thêm thông tin chi tiết.

global_start_time

Timestamp

Thời gian bắt đầu và kết thúc chung của mô hình: không có thời gian nào bên ngoài phạm vi này đượ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 để tăng hiệu suất (ví dụ: nếu lập mô hình một ngày, bạn nên đặt giới hạn thời gian chung cho ngày đó). Nếu bạn không đặt, hệ thống sẽ dùng 00:00:00 UTC, ngày 1 tháng 1 năm 1970 (tức là giây: 0, nano giây: 0) làm giá trị mặc định.

global_end_time

Timestamp

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

global_duration_cost_per_hour

double

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

duration_distance_matrices[]

DurationDistanceMatrix

Chỉ định ma trận khoảng thời gian và 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 dùng thay thế, tuỳ thuộc vào giá trị của trường use_geodesic_distances. Nếu không trống, use_geodesic_distances không thể là true và cả duration_distance_matrix_src_tags lẫn duration_distance_matrix_dst_tags đều không thể trống.

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

  • Có hai vị trí: locA và locB.
  • 1 xe bắt đầu tuyến đường tại locA và kết thúc tại locA.
  • 1 yêu cầu đến lấy hàng tại locB.
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Có 3 vị trí: locA, locB và locC.
  • 1 xe bắt đầu tuyến đường tại locA và kết thúc tại locB, sử dụng ma trận "fast".
  • 1 xe bắt đầu tuyến đường tại locB và kết thúc tại locB, sử dụng ma trận "slow".
  • 1 xe bắt đầu tuyến đường tại locB và kết thúc tại locB, sử dụng ma trận "fast".
  • 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

Các 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ừ các lượt ghé thăm có thẻ duration_distance_matrix_src_tags(j) đến các lượt ghé thăm 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) (tương ứng. duration_distance_matrices(i).rows(j).meters(k)) xác định thời lượng (tương ứng là khoảng cách) của chuyến đi 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

Các nhóm shipment_type không tương thích (xem ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

Bộ yêu cầu shipment_type (xem ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

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

QUAN TRỌNG: Việc sử dụng các quy tắc ưu tiên sẽ giới hạn quy mô của vấn đề có thể được tối ưu hoá. Các yêu cầu sử dụng quy tắc thứ tự ưu tiên bao gồm nhiều lô hàng có thể bị từ chối.

max_active_vehicles

int32

Hạn chế số lượng tối đa các phương tiện đang hoạt động. Xe được coi là đang hoạt động nếu tuyến đường của xe thực hiện ít nhất một chuyến giao hàng. Bạn có thể dùng tham số 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ố lượng xe và đội xe không đồng nhất. Sau đó, quá trình tối ưu hoá sẽ chọn nhóm nhỏ gồm những chiếc xe phù hợp nhất để sử dụng. Phải là số dương.

DurationDistanceMatrix

Chỉ định ma trận khoảng cách và thời lượng từ vị trí bắt đầu của lượt ghé thăm và phương tiện đến vị trí kết thúc của lượt ghé thăm và phương tiện.

Trường
rows[]

Row

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

vehicle_start_tag

string

Thẻ xác định những chiếc xe mà ma trận khoảng thời gian và khoảng cách này áp dụng. Nếu bạn để trống trường này, thì quy tắc này sẽ áp dụng cho tất cả các phương tiện và chỉ có thể có một ma trận.

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

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

Hàng

Chỉ định một hàng của ma trận khoảng thời gian 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ố lượng phần tử bằng với 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 ràng buộc nào đề cập đến khoảng cách trong mô hình, thì bạn có thể để trống trường này; nếu không, trường này phải có số lượng phần tử bằng với durations.

Mục tiêu

Mục tiêu thay thế hoàn toàn mô hình chi phí, do đó, mục tiêu không tương thích với chi phí đã có từ trước. Mỗi mục tiêu tương ứng với một số chi phí được xác định trước, ví dụ: chi phí cho xe, lô hàng hoặc thuộc tính chuyển đổi.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request để biết thêm thông tin chi tiết.

Trường
type

Type

Loại mục tiêu.

weight

double

Mức độ quan trọng của mục tiêu này so với các mục tiêu khác. Đây có thể là bất kỳ số không âm nào, trọng số không nhất thiết phải có tổng bằng 1. Trọng số mặc định là 1.0.

Loại

Loại mục tiêu sẽ được liên kết với một nhóm chi phí.

Enum
DEFAULT Một bộ chi phí mặc định sẽ được sử dụng để đảm bảo có một giải pháp hợp lý. Lưu ý: mục tiêu này có thể được sử dụng riêng, nhưng cũng sẽ luôn được thêm với trọng số 1.0, làm đường cơ sở, vào các mục tiêu do người dùng chỉ định, nếu mục tiêu này chưa có.
MIN_DISTANCE Mục tiêu "MIN". Giảm thiểu tổng quãng đường đã đi.
MIN_WORKING_TIME Giảm thiểu tổng thời gian làm việc, được tính tổng trên tất cả các xe.
MIN_TRAVEL_TIME Tương tự như trên nhưng chỉ tập trung vào thời gian di chuyển.
MIN_NUM_VEHICLES Giảm thiểu số lượng xe được sử dụng.

PrecedenceRule

Quy tắc về thứ tự ưu tiên giữa 2 sự kiện (mỗi sự kiện là việc 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ố thứ tự ưu tiên có thể đề cập đến cùng một (hoặc các) sự kiện liên quan, ví dụ: "B đến lấy hàng sau khi giao A" và "C đến lấy hàng sau khi B đến lấy hàng".

Ngoài ra, 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 sự kiện "đầu tiên" có phải là một lượt phân phối hay không.

second_is_delivery

bool

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

offset_duration

Duration

Độ lệch giữa sự kiện "đầu tiên" và sự kiện "thứ hai". Điều này có thể gây ảnh hưởng tiêu cực.

first_index

int32

Chỉ mục lô hàng của sự kiện "đầu tiê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 phương tiện có thể được phân tích theo trục thời gian như sau (giả sử có n lượt ghé thăm):

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

Xin lưu ý rằng chúng tôi phân biệt giữa:

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

Khi phóng to, bạn sẽ thấy những gì diễn ra trong một Transition và một Visit:

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

Cuối cùng, đây là cách sắp xếp TRAVEL, BREAKS, DELAY và WAIT trong quá trình chuyển đổi.

  • Chúng không trùng lặp.
  • DELAY là duy nhất và phải là một khoảng thời gian liên tục ngay trước lần truy cập tiếp theo (hoặc khi xe kết thúc hành trình). Do đó, chỉ cần biết thời lượng trễ là đủ để biết thời gian bắt đầu và kết thúc của độ trễ.
  • BREAKS là các khoảng thời gian liên tiếp, không trùng lặp. 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 thời gian quảng cáo chèn.
  • TRAVEL và WAIT là "có thể bị gián đoạn": chúng có thể bị gián đoạn nhiều lần trong quá trình chuyển đổi này. Các ứng dụng có thể giả định rằng chuyến đi diễn ra "sớm nhất có thể" và "thời gian chờ" sẽ 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 trong ShipmentModel nguồn.

vehicle_label

string

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

vehicle_start_time

Timestamp

Thời gian xe bắt đầu hành trình.

vehicle_end_time

Timestamp

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

visits[]

Visit

Trình tự có thứ tự của các lượt ghé thăm đại diện cho một tuyến đường. visits[i] là lượt ghé thăm thứ i trong tuyến đường. Nếu trường này trống, thì xe được coi là chưa sử dụng.

transitions[]

Transition

Danh sách các hiệu ứng chuyển cảnh theo thứ tự cho tuyến đường.

has_traffic_infeasibilities

bool

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

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

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

route_polyline

EncodedPolyline

Biểu thị hình 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

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

metrics

AggregatedMetrics

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

vehicle_fullness

VehicleFullness

trường VehicleFullness để tính toán mức độ gần của các chỉ số bị giới hạn so với giới hạn tương ứng của xe. Các trường của chỉ số này là tỷ lệ giữa một trường chỉ số có giới hạn (ví dụ: AggregatedMetrics.travel_distance_meters) và giới hạn liên quan của xe (ví dụ: Vehicle.route_distance_limit).

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

route_costs

map<string, double>

Chi phí của tuyến đường, được chia nhỏ theo các trường yêu cầu liên quan đến chi phí. Khoá là đường dẫn proto, tương ứng với OptimizeToursRequest đầu vào, ví dụ: "model.shipments.pickups.cost" và 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, costs["model.shipments.pickups.cost"] là tổng của tất cả chi phí lấy hàng trên 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ừ chi phí liên quan đến TransitionAttributes (Thuộc tính chuyển đổi) 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ả các chi phí trong bản đồ chi phí.

Nghỉ

Dữ liệu biểu thị việc thực thi một điểm ngắt.

Trường
start_time

Timestamp

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

duration

Duration

Thời lượng của một khoảng nghỉ.

EncodedPolyline

Biểu thị được mã hoá của một đường nhiều đường. Bạn có thể xem thêm thông tin về việc mã hoá đường nhiều đoạn 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 biểu thị các điểm được mã hoá của đường nhiều đoạn.

Hiệu ứng chuyển cảnh

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

Nếu xe không có start_location và/hoặc end_location, thì các chỉ số tương ứng về hành trình 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

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

traffic_info_unavailable

bool

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

delay_duration

Duration

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

break_duration

Duration

Tổng thời lượng của các khoảng thời gian xuất hiện 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 khoảng thời gian 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 rảnh 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 tục.

total_duration

Duration

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

  • lần truy cập tiếp theo start_time (hoặc vehicle_end_time nếu đây là quá trình chuyển đổi cuối cùng) – start_time của quá trình chuyển đổi này;
  • nếu ShipmentRoute.has_traffic_infeasibilities là false, thì điều kiện sau cũng được áp dụng: "total_duration = travel_duration + delay_duration
  • break_duration + wait_duration`.
start_time

Timestamp

Thời gian bắt đầu của hiệu ứng chuyển đổi này.

route_polyline

EncodedPolyline

Biểu thị bằng hình nhiều đường được mã hoá của tuyến đường đã đi 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.

route_token

string

Chỉ có đầu ra. Một mã thông báo không công khai có thể được truyền đến Navigation SDK để tạo lại tuyến đường trong quá trình điều hướng và trong trường hợp định tuyến lại, hãy tôn trọng ý định ban đầu khi tuyến đường được tạo. Hãy coi mã thông báo này là một blob mờ. Đừng so sánh giá trị này giữa các yêu cầu vì giá trị này có thể thay đổi ngay cả khi dịch vụ trả về chính xác cùng một tuyến đường. 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 trọng của xe trong quá trình chuyển đổi này, đối với mỗi loại xuất hiện trong Vehicle.load_limits của xe này hoặc có Shipment.load_demands khác 0 trên một số chuyến hàng được thực hiện trên tuyến đường này.

Tải trong lần chuyển đổi đầu tiên là tải khởi động của tuyến đường 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 được số 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à lượt đến lấy hàng hay lượt giao hàng.

VehicleLoad

Báo cáo tải trọng thực tế của xe tại một thời điểm nào đó trên tuyến đường, đối với 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 tải đã cho. Đơn vị tải thường được biểu thị bằng loại. Vui lòng xem Transition.vehicle_loads.

Truy cập

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

Trường
shipment_index

int32

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

is_pickup

bool

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

visit_request_index

int32

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

start_time

Timestamp

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

load_demands

map<string, Load>

Tổng nhu cầu tải trọng của lượt ghé thăm là tổng của yêu cầu vận chuyển và yêu cầu ghé thăm load_demands. Các giá trị này là â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 loại với Transition.loads (xem trường này).

detour

Duration

Thời gian đi đường vòng thêm do các chuyến hàng được ghé thăm trên tuyến đường trước khi ghé thăm và do thời gian chờ tiềm ẩn do khung thời gian gây ra. Nếu lượt ghé thăm là lượt giao hàng, thì đường vòng sẽ được tính từ lượt ghé thăm tương ứng để lấy hàng và bằng:

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

Nếu không, giá trị này sẽ được tính từ start_location của xe 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.

injected_solution_location_token

int32

Một mã thông báo mờ đại diện cho thông tin về vị trí mà người dùng đã ghé thăm.

Trường này có thể được điền sẵn trong các lượt truy cập vào tuyến đường kết quả khi VisitRequest.avoid_u_turns được đặt thành true cho lượt truy cập này hoặc nếu ShipmentModel.avoid_u_turns được đặt thành true trong yêu cầu OptimizeToursRequest.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request để biết thêm thông tin chi tiết.

ShipmentTypeIncompatibility

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

Trường
types[]

string

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

incompatibility_mode

IncompatibilityMode

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

IncompatibilityMode

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

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

Ở chế độ này, hai lô hàng có loại không tương thích không bao giờ được phép ở trên cùng một xe cùng một lúc:

  • Họ chỉ có thể dùng chung một chiếc xe nếu một người đã nhận xe trước khi người kia đến lấy.
  • Khi cả hai lô hàng đều chỉ có thể đến lấy (không giao hàng) hoặc chỉ giao hàng (không đến lấy), thì chúng hoàn toàn không thể dùng chung một chiếc xe.

ShipmentTypeRequirement

Nêu rõ các yêu cầu giữa các lô hàng dựa trên shipment_type. Các thông tin cụ thể về yêu cầu được xác định theo chế độ yêu cầu.

Trường
required_shipment_type_alternatives[]

string

Danh sách các loại hình 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 có loại trong trường dependent_shipment_types đều yêu cầu ít nhất một lô hàng thuộc loại required_shipment_type_alternatives được ghé thăm trên cùng một tuyến đường.

LƯU Ý: Không được phép có các 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 chế độ xác định hình thức của các lô hàng phụ thuộc trên một tuyến đường.

Enum
REQUIREMENT_MODE_UNSPECIFIED Chế độ yêu cầu chưa chỉ định. Bạn không bao giờ nên sử dụng giá trị này.
PERFORMED_BY_SAME_VEHICLE Ở chế độ này, tất cả các lô hàng "phụ thuộc" phải dùng chung một chiếc xe với ít nhất một trong các lô hàng "bắt buộc".
IN_SAME_VEHICLE_AT_PICKUP_TIME

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

Do đó, một yêu cầu lấy hàng "phụ thuộc" phải có một trong hai thông tin sau:

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

SkippedShipment

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

Trường
index

int32

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

label

string

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

reasons[]

Reason

Danh sách các lý do giải thích tại sao lô hàng bị bỏ qua. Xem bình luận ở trên Reason. Nếu chúng tôi không thể hiểu lý do khiến một lô hàng bị bỏ qua, thì lý do sẽ không được đặt.

penalty_cost

double

Đây là bản sao của Shipment.penalty_cost, được đưa vào đây để bạn dễ dàng xem mức độ nghiêm trọng của một lô hàng bị bỏ qua.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

estimated_incompatible_vehicle_ratio

double

Tỷ lệ ước tính của những xe không thể thực hiện chuyến vận chuyển này vì ít nhất một trong những lý do dưới đây. Lưu ý: trường này chỉ được điền khi lý do liên quan đến xe.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

Lý do

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

Trường
code

Code

Tham khảo phần bình luận của Mã.

example_vehicle_indices[]

int32

Tương tự như example_vehicle_index, ngoại trừ việc chúng tôi cung cấp danh sách nhiều xe được xác định. Danh sách này chưa chắc đã đầy đủ. Trường này chỉ được điền nếu [fill_example_vehicle_indices_in_skipped_reasons][] là true.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

example_exceeded_capacity_type

string

Nếu mã lý do là DEMAND_EXCEEDS_VEHICLE_CAPACITY, thì tài liệu này vượt quá một loại dung lượng.

example_vehicle_index

int32

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

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

Enum
CODE_UNSPECIFIED Bạn không bao giờ nên sử dụng thuộc tính này.
NO_VEHICLE Không có xe nào trong mô hình khiến mọi chuyến hàng đều không thực hiện được.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Nhu cầu vận chuyển vượt quá sức chứa của xe đối với một số loại sức chứa, trong đó có example_exceeded_capacity_type.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

Khoảng cách tối thiểu cần thiết để thực hiện chuyến vận chuyển này, tức là từ start_location của xe đến địa điểm nhận và/hoặc giao hàng của chuyến vận chuyển và đến địa điểm kết thúc của xe vượt quá route_distance_limit của xe.

Xin lưu ý rằng đối với phép tính này, chúng ta 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 chuyến vận chuyển này, bao gồm thời gian di chuyển, thời gian chờ và thời gian phục vụ vượt quá route_duration_limit của xe.

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

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT Tương tự như trên nhưng chúng ta 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 Trong trường hợp tốt nhất, xe không thể thực hiện chuyến vận chuyển này (xem CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT để biết cách tính thời gian) nếu bắt đầu vào thời gian bắt đầu sớm nhất: tổng thời gian sẽ khiến xe kết thúc sau thời gian kết thúc muộn nhất.
VEHICLE_NOT_ALLOWED Trường allowed_vehicle_indices của lô hàng không trống và chiếc xe này không thuộc lô hàng đó.
VEHICLE_IGNORED

Trường ignore của xe là true.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

SHIPMENT_IGNORED

Trường ignore của lô hàng là true.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

Gói hàng bị bỏ qua trong injected_solution_constraint.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

Chế độ nới lỏng tuyến đường của xe được chỉ định trong injected_solution_constraint không cho phép chèn bất kỳ lượt ghé thăm nào.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

ZERO_PENALTY_COST

Lô hàng có phí phạt bằng 0. Mặc dù có thể hữu ích khi bạn chọn mô hình nâng cao, nhưng điều này cũng có thể giải thích sau khi thực tế xảy ra lý do một lô hàng bị bỏ qua.

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

TimeWindow

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

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

  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 khung thời gian cố định. Nếu bạn không chỉ định, giá trị này sẽ được đặt thành ShipmentModel.global_start_time.

end_time

Timestamp

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

soft_start_time

Timestamp

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

soft_end_time

Timestamp

Thời gian kết thúc tương đối của khung thời gian.

cost_per_hour_before_soft_start_time

double

Chi phí mỗi giờ được thêm vào các chi phí khác trong mô hình nếu sự kiện xảy ra trước 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 quá trình chuyển đổi giữa hai lượt truy cập liên tiếp trên một tuyến đường. Có thể áp dụng một số TransitionAttributes cho cùng một lượt chuyển đổi: trong trường hợp đó, tất cả các chi phí bổ sung sẽ cộng lại và quy tắc hạn chế hoặc giới hạn nghiêm ngặt nhất sẽ được áp dụng (theo ngữ nghĩa "VÀ" tự nhiên).

Trường
src_tag

string

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

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

excluded_src_tag

string

Vui lòng xem src_tag. Phải có đúng một trong src_tagexcluded_src_tag.

dst_tag

string

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

excluded_dst_tag

string

Vui lòng xem dst_tag. Phải có đúng một trong dst_tagexcluded_dst_tag.

cost

double

Chỉ định chi phí để thực hiện quá trình chuyển đổi này. Đây là cùng một đơn vị với tất cả cá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 thêm vào tất cả các chi phí hiện có khác.

cost_per_kilometer

double

Xác định chi phí trên mỗi ki-lô-mét áp dụng cho quãng đường đã đi trong khi thực hiện quá trình chuyển đổi này. Khoản phí này được cộng thêm vào bất kỳ Vehicle.cost_per_kilometer nào đượ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 hiệu ứng chuyển đổi này.

Kể từ ngày 6/2021, chỉ giới hạn mềm được hỗ trợ.

delay

Duration

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

Độ trễ này luôn xảy ra sau khi hoàn tất lượt truy cập nguồn và trước khi bắt đầu lượt truy cập đích.

URI

Giá trị nhận dạng tài nguyên thống nhất trỏ đến một tài nguyên mà Route Optimization API có thể đọc và ghi.

Trường
uri

string

URI của tài nguyên. Tài nguyên có thể chưa tồn tại.

Nội dung của tài nguyên được mã hoá dưới dạng JSON hoặc textproto. Hệ thống chỉ hỗ trợ các tài nguyên trên Google Cloud Storage. Nếu tài nguyên được mã hoá dưới dạng JSON, thì tên tài nguyên phải có hậu tố là .json. Nếu tài nguyên được mã hoá dưới dạng textproto, thì tên tài nguyên phải có hậu tố là .txtpb. Ví dụ: URI Google Cloud Storage đến một tệp được mã hoá JSON có thể có dạng như sau: gs://bucket/path/input/object.json.

Xe

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

Trường
display_name

string

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

travel_mode

TravelMode

Chế độ di chuyển ảnh hưởng đến 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 cần đáp ứng ảnh hưởng đến cách tính toán tuyến đường cho một chiếc xe nhất định.

start_location

LatLng

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

start_waypoint

Waypoint

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

end_location

LatLng

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

end_waypoint

Waypoint

Điểm tham chiếu đại diện cho một vị trí địa lý nơi xe dừng lại sau khi hoàn thành VisitRequest cuối cùng. Nếu bạn không chỉ định end_waypoint hoặc end_location, thì ShipmentRoute của xe sẽ kết thúc ngay khi xe hoàn thành VisitRequest cuối cùng. Nếu mô hình vận chuyển có ma trận khoảng cách và thời gian, 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 của tuyến đường của xe.

Không được phép có chuỗi trống hoặc chuỗi 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 có chuỗi trống hoặc chuỗi trùng lặp.

start_time_windows[]

TimeWindow

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

Các khung 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ó khung thời gian nào được trùng lặp hoặc nằm cạnh một khung thời gian khác và các khung thời gian phải theo thứ tự thời gian.

Bạn chỉ có thể đặt cost_per_hour_after_soft_end_timesoft_end_time nếu chỉ có một khung thời gian.

end_time_windows[]

TimeWindow

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

Các khung 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ó khung thời gian nào được trùng lặp hoặc nằm cạnh một khung thời gian khác và các khung thời gian phải theo thứ tự thời gian.

Bạn chỉ có thể đặt cost_per_hour_after_soft_end_timesoft_end_time nếu chỉ có một khung thời gian.

unloading_policy

UnloadingPolicy

Chính sách dỡ hàng được thực thi trên xe.

load_limits

map<string, LoadLimit>

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

cost_per_hour

double

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

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

cost_per_traveled_hour

double

Chi phí cho mỗi giờ di chuyển của tuyến đường dành cho xe. Chi phí này chỉ áp dụng cho thời gian di chuyển của 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í trên mỗi ki-lô-mét của tuyến đường dành cho xe. Chi phí này được áp dụng cho khoảng cách được báo cáo trong ShipmentRoute.transitions và không áp dụng cho bất kỳ khoảng cách nào được ngầm định đi từ arrival_location đến departure_location của một VisitRequest duy nhất.

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 những xe không vận chuyển hàng hoá trên tuyến đường của mình. Thuộc tính này cho biết liệu xe có được coi là xe đã qua sử dụng hay không trong trường hợp này.

Nếu đúng, xe sẽ đi từ vị trí bắt đầu đến vị trí kết thúc ngay cả khi không phục vụ bất kỳ lô hàng nào, đồng thời chi phí thời gian và khoảng cách phát sinh từ hành trình bắt đầu --> kết thúc sẽ được tính đến.

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

route_duration_limit

DurationLimit

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

travel_duration_limit

DurationLimit

Giới hạn được áp dụng cho thời gian di chuyển của tuyến đường mà xe đi. 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 áp dụng cho tổng quãng đường của tuyến đường mà xe đi. Trong một OptimizeToursResponse nhất định, khoảng cách 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 khoảng thời gian. Thời lượng là thời gian ngoài VisitRequest.duration được tính cho các lượt ghé thăm có visit_types được chỉ định. Thời gian ghé thăm bổ sung này sẽ làm tăng chi phí nếu bạn chỉ định cost_per_hour. Không được để trống các khoá (tức là visit_types).

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

break_rule

BreakRule

Mô tả lịch nghỉ giải lao bắt buộc đối với xe này. Nếu bạn không nhập thông tin, thì sẽ không có thời gian 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 là true, thì used_if_route_is_empty phải là false và chiếc xe này sẽ không được sử dụng.

Nếu một lô hàng được thực hiện bằng một phương tiện bị bỏ qua trong injected_first_solution_routes, thì lô hàng đó 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 một lô hàng được thực hiện bằng một phương tiện bị bỏ qua trong injected_solution_constraint và mọi hoạt động nhận/giao hàng liên quan đều bị hạn chế ở trên phương tiện (tức là không được nới lỏng đến cấp RELAX_ALL_AFTER_THRESHOLD), thì lô hàng đó 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 hệ số nhân có thể dùng để tăng hoặc giảm thời gian di chuyển của phương tiện này. Ví dụ: nếu bạn đặt giá trị này thành 2.0, tức là chiếc xe này chạy chậm hơn và thời gian di chuyển gấp đôi so với xe tiêu chuẩn. Hệ số này không ảnh hưởng đến thời lượng của lượt truy cập. Điều này ảnh hưởng đến chi phí nếu bạn chỉ định cost_per_hour hoặc cost_per_traveled_hour. Giá trị này phải nằm trong phạm vi [0,001, 1000,0]. Nếu bạn không đặt, thì xe sẽ là xe tiêu chuẩn và hệ số này được coi là 1.0.

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

Xem thêm extra_visit_duration_for_visit_type bên dưới.

DurationLimit

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

Khi bạn xác định một 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ùng nhau.

Trường
max_duration

Duration

Một giới hạn cứng 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, tuyến đường sẽ phát sinh chi 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 phải là số không â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 bị vi phạm, tuyến đường sẽ phải chịu chi phí, bình phương theo thời lượng. 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, quadratic_soft_max_duration phải là số không âm. Nếu bạn cũng xác định max_duration, thì quadratic_soft_max_duration phải nhỏ hơn max_duration và sự khác biệt không được lớn hơn một ngày:

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

Chi phí mỗi giờ phát sinh nếu bạn vi phạm ngưỡng soft_max_duration. Chi phí phát sinh thêm là 0 nếu thời lượng dưới ngưỡng, nếu không, 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í cho mỗi giờ vuông phát sinh nếu bạn vi phạm ngưỡng quadratic_soft_max_duration.

Chi phí phát sinh thêm là 0 nếu thời lượng dưới ngưỡng, nếu không, 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í không được là số âm.

LoadLimit

Xác định giới hạn tải trọng áp dụng cho một chiếc xe, ví dụ: "xe tải này chỉ được phép chở tối đa 3.500 kg". Vui lòng xem load_limits.

Trường
soft_max_load

int64

Giới hạn linh hoạt của tải. Vui lòng xem cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Nếu tải trọng vượt quá soft_max_load trên 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 trọng – 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. Bạn chỉ có thể xác định giới hạn mềm cho các loại chỉ áp dụng cho việc đến lấy hoặc chỉ áp dụng cho việc giao hàng trong toàn bộ mô hình.

start_load_interval

Interval

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

end_load_interval

Interval

Khoảng thời gian chấp nhận được để tải hàng lên xe ở cuối tuyến đường.

max_load

int64

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

cost_per_kilometer

LoadCost

Chi phí di chuyển một đơn vị tải trọng trên quãng đường một ki-lô-mét cho xe này. Bạn có thể dùng thông tin này làm thông tin thay thế cho mức tiêu thụ nhiên liệu: nếu tải là trọng lượng (tính bằng Newton), thì tải*km sẽ có kích thước của năng lượng.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request để biết thêm thông tin chi tiết.

cost_per_traveled_hour

LoadCost

Chi phí di chuyển với một đơn vị tải trong một giờ cho xe này.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request để biết thêm thông tin chi tiết.

Khoảng thời gian

Khoảng thời gian có thể chấp nhận được đối với số lượng tải.

Trường
min

int64

Mức tải tối thiểu có thể chấp nhận được. Phải lớn hơn hoặc bằng 0. Nếu cả hai đều được chỉ định, thì min phải ≤ max.

max

int64

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

LoadCost

Chi phí di chuyển một đơn vị tải trong Transition. Đối với một tải nhất định, chi phí là tổng của hai phần:

  • min(load, load_threshold) * cost_per_unit_below_threshold
  • max(0, load - load_threshold) * cost_per_unit_above_threshold

Với chi phí này, các giải pháp ưu tiên đáp ứng nhu cầu cao trước hoặc tương đương với việc đáp ứng nhu cầu cao sau cùng. Ví dụ: nếu một chiếc xe có

load_limit {
  key: "weight"
  value {
    cost_per_kilometer {
      load_threshold: 15
      cost_per_unit_below_threshold: 2.0
      cost_per_unit_above_threshold: 10.0
    }
  }
}

và tuyến đường của nó là start,pickup,pickup,delivery,delivery,end với các hiệu ứng chuyển đổi:

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

thì chi phí mà LoadCost này phải chịu là (cost_below * load_below * kilometers + cost_above * load_above * kms)

  • chuyển cảnh 0: 0,0
  • chuyển đổi 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • chuyển đổi 2: 2.0 * 15 * 1.0 + 10.0 * (20 – 15) * 1.0 = 80.0
  • chuyển đổi 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • chuyển cảnh 4: 0.0

Vậy LoadCost trên tuyến đường này là 120.0.

Tuy nhiên, nếu tuyến đường là start,pickup,delivery,pickup,delivery,end có hiệu ứng chuyển cảnh:

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

thì chi phí mà LoadCost này phải chịu là

  • chuyển cảnh 0: 0,0
  • chuyển đổi 1: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • chuyển cảnh 2: 0.0
  • chuyển đổi 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
  • chuyển cảnh 4: 0.0

Ở đây, LoadCost trên tuyến đường là 40.0.

LoadCost khiến các giải pháp có hiệu ứng chuyển cảnh tải nhiều dữ liệu trở nên tốn kém hơn.

Thử nghiệm: Xem https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request để biết thêm thông tin chi tiết.

Trường
load_threshold

int64

Lượng tải mà khi vượt quá, chi phí di chuyển một đơn vị tải sẽ thay đổi từ cost_per_unit_below_threshold thành cost_per_unit_above_threshold. Phải lớn hơn hoặc bằng 0.

cost_per_unit_below_threshold

double

Chi phí di chuyển một đơn vị tải, cho mỗi đơn vị từ 0 đến ngưỡng. Phải là một giá trị hữu hạn và lớn hơn hoặc bằng 0.

cost_per_unit_above_threshold

double

Chi phí di chuyển một đơn vị tải, cho mỗi đơn vị vượt quá ngưỡng. Trong trường hợp đặc biệt, ngưỡng = 0, đây là chi phí cố định cho mỗi đơn vị. Phải là một giá trị hữu hạn và lớn hơn hoặc bằng 0.

TravelMode

Các chế độ di chuyển mà xe có thể sử dụng.

Đây phải là một nhóm nhỏ các chế độ di chuyển của Routes API của Nền tảng Google Maps, hãy xem: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode

Lưu ý: Các tuyến đường WALKING đang ở giai đoạn thử nghiệm và đôi khi có thể không có vỉa hè hoặc đường dành cho người đi bộ rõ ràng. Bạn phải hiển thị cảnh báo này cho người dùng đối với tất cả các tuyến đường đi bộ mà bạn hiển thị trong ứng dụng của mình.

Enum
TRAVEL_MODE_UNSPECIFIED Chế độ di chuyển không được chỉ định, tương đương với DRIVING.
DRIVING Chế độ di chuyển tương ứng với chỉ đường lái xe (ô tô, ...).
WALKING Chế độ di chuyển tương ứng với chỉ đường đi bộ.

UnloadingPolicy

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

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

Enum
UNLOADING_POLICY_UNSPECIFIED Chính sách dỡ hàng không được chỉ định; các lượt giao hàng chỉ được phép diễn ra sau lượt lấy hàng tương ứng.
LAST_IN_FIRST_OUT Việc giao hàng phải diễn ra theo thứ tự ngược lại với việc đến lấy hàng
FIRST_IN_FIRST_OUT Việc giao hàng phải diễn ra theo thứ tự giống như việc đến lấy hàng

VehicleFullness

VehicleFullness là một chỉ số tính toán mức độ đầy của một chiếc xe. Mỗi trường VehicleFullness có giá trị từ 0 đến 1, được tính là tỷ lệ giữa một trường chỉ số có giới hạn (ví dụ: AggregatedMetrics.travel_distance_meters) và giới hạn liên quan của xe (ví dụ: Vehicle.route_distance_limit), nếu có. Nếu không, tỷ lệ đầy sẽ không được đặt. Nếu giới hạn là 0, thì trường này được đặt thành 1. Lưu ý: khi một tuyến đường không thể đi qua do tình trạng giao thông, một số tỷ lệ đầy thô có thể vượt quá 1,0, ví dụ: xe có thể vượt quá giới hạn khoảng cách. Trong những trường hợp này, chúng tôi giới hạn giá trị độ đầy ở mức 1.0.

Trường
max_fullness

double

Tối đa cho tất cả các trường khác trong thư này.

distance

double

Tỷ lệ giữa AggregatedMetrics.travel_distance_metersVehicle.route_distance_limit. Nếu bạn không đặt Vehicle.route_distance_limit, thì trường này sẽ không được đặt.

travel_duration

double

Tỷ lệ giữa [AggregatedMetrics.travel_duration_seconds][] và Vehicle.travel_duration_limit. Nếu bạn không đặt Vehicle.travel_duration_limit, thì trường này sẽ không được đặt.

active_duration

double

Tỷ lệ giữa [AggregatedMetrics.total_duration_seconds][] và Vehicle.route_duration_limit. Nếu bạn không đặt Vehicle.route_duration_limit, thì trường này sẽ không được đặt.

max_load

double

Tỷ lệ tối đa trong số tất cả các loại [AggregatedMetrics.max_load][] và Vehicle.load_limits tương ứng của chúng. Nếu bạn huỷ thiết lập tất cả các trường Vehicle.load_limits, thì trường này cũng sẽ bị huỷ thiết lập.

active_span

double

Tỷ lệ (vehicle_end_time – vehicle_start_time) / (latest_vehicle_end_time – earliest_vehicle_start_time) cho một chiếc xe cụ thể. Nếu không có mẫu số, hệ thống sẽ dùng (ShipmentModel.global_end_timeShipmentModel.global_start_time) để thay thế.

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 VisitRequest, cũng như vị trí bắt đầu và kết thúc của Vehicle.

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ó nghĩa là xe nê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í đó để xe có thể dừng ở bên đường mà vị trí đó hướng đến từ giữa đường. Lựa chọn này không hoạt động đối với chế độ di chuyển "ĐI BỘ".

vehicle_stopover

bool

Cho biết rằng điểm tham chiếu dành cho xe dừng lại, nơi có ý định đón hoặc trả khách. Lựa chọn này chỉ hoạt động cho chế độ di chuyển "DRIVING" và khi "location_type" là "location".

Thử nghiệm: Hành vi hoặc sự tồn tại của trường này có thể thay đổi trong tương lai.

Trường nhóm location_type. Các cách thể hiện vị trí. location_type chỉ có thể là một trong những trạng thái sau:
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 của địa điểm yêu thích được liên kết với điểm tham chiếu.

Khi sử dụng mã địa điểm để chỉ định vị trí đến hoặc đi của VisitRequest, hãy sử dụng mã địa điểm đủ cụ thể để xác định vị trí LatLng cho chỉ đường đến địa điểm đó. Ví dụ: mã địa điểm đại diện cho một toà nhà là phù hợp, nhưng mã địa điểm đại diện cho một con đường thì không nên dùng.