Thông báo OptimizeToursRequest
(REST, gRPC) chứa một số thuộc tính liên quan đến chi phí. Các thông số chi phí này cùng nhau thể hiện mô hình chi phí của yêu cầu. Mô hình chi phí ghi nhận nhiều mục tiêu tối ưu hoá tổng thể của yêu cầu, chẳng hạn như:
- Ưu tiên các tuyến
Vehicle
nhanh hơn so với các tuyến ngắn hơn hoặc ngược lại - Quyết định xem chi phí phân phối
Shipment
có xứng đáng với giá trị của việc hoàn thànhShipment
hay không - Chỉ thực hiện việc lấy hàng và giao hàng trong khung thời gian khi việc này mang lại hiệu quả về chi phí
Xem ví dụ về yêu cầu có chi phí
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
Thuộc tính chi phí Vehicle
Thông báo Vehicle
(REST, gRPC) có một số thuộc tính chi phí:
Vehicle.cost_per_hour
: thể hiện chi phí vận hành xe mỗi giờ, bao gồm cả thời gian di chuyển, chờ, thăm và nghỉ.Vehicle.cost_per_kilometer
: biểu thị chi phí mỗi km mà xe đi được.Vehicle.cost_per_traveled_hour
: chỉ thể hiện chi phí vận hành xe trong khi đang di chuyển, không bao gồm thời gian chờ, thời gian ghé thăm và thời gian nghỉ.
Các tham số chi phí này cho phép trình tối ưu hoá đánh đổi thời gian so với quãng đường đã đi. Chi phí phát sinh do tuyến đường được tối ưu hoá sẽ xuất hiện trong thông báo phản hồi dưới dạng metrics.costs
:
Khi costPerHour
tăng lên, trình tối ưu hoá sẽ cố gắng tìm các tuyến đường nhanh hơn nhưng có thể không phải là tuyến đường ngắn nhất. Trong ví dụ này, tuyến đường nhanh nhất lại là tuyến đường ngắn nhất, vì vậy, các thay đổi đối với tham số chi phí sẽ ít ảnh hưởng.
Thuộc tính chi phí Shipment
Thông báo Shipment
(REST, gRPC) cũng có một số tham số chi phí:
Shipment.penalty_cost
thể hiện chi phí phát sinh do bỏ qua lô hàng.Shipment.VisitRequest.cost
thể hiện chi phí của một phương thức lấy hàng hoặc giao hàng cụ thể, chủ yếu dùng để cho phép đánh đổi chi phí giữa nhiều phương thức lấy hàng hoặc giao hàng cho một lô hàng.
Các tham số chi phí Shipment
sử dụng cùng một đơn vị không thứ nguyên như các tham số chi phí Vehicle
. Chi phí phát sinh khi hoàn tất một Shipment
vượt quá chi phí phạt, Shipment
sẽ không được đưa vào tuyến đường của Vehicle
nào và thay vào đó sẽ xuất hiện trong danh sách skipped_shipments
trong thông báo phản hồi.
Thuộc tính chi phí ShipmentModel
Tin nhắn ShipmentModel
(REST, gRPC) bao gồm một thuộc tính chi phí duy nhất là globalDurationCostPerHour
. Chi phí này phát sinh dựa trên tổng thời gian cần thiết để tất cả các phương tiện hoàn thành ShipmentRoute
. Việc tăng globalDurationCostPerHour
sẽ ưu tiên hoàn tất tất cả các lô hàng sớm hơn.
Thuộc tính chi phí phản hồi của tính năng Tối ưu hoá tuyến đường
Thông báo OptimizeToursResponse
(REST, gRPC) có các thuộc tính chi phí đại diện cho các chi phí phát sinh trong quá trình hoàn tất ShipmentRoute
.
Thuộc tính metrics.costs
và metrics.totalCost
thể hiện số lượng đơn vị chi phí phát sinh trên tất cả các tuyến trong phản hồi. Mỗi mục routes
có các thuộc tính routeCosts
và routeTotalCosts
đại diện cho chi phí của tuyến đường cụ thể đó.
Xem phản hồi cho yêu cầu mẫu có chi phí
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
Trong phản hồi mẫu, metrics.costs
cấp cao nhất là:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
Giá trị model.shipments.penalty_cost
thể hiện chi phí phát sinh do bỏ qua đơn hàng vận chuyển. Thuộc tính skippedShipments
liệt kê những lô hàng đã bị bỏ qua.
Trong ví dụ này, chỉ model.shipments[1]
trong yêu cầu mẫu bị bỏ qua.
model.shipments[1]
có chi phí phạt là 5 đơn vị, khớp với khoá tổng model.shipments.penalty_cost
trong phản hồi mẫu. penaltyCost
thấp của lô hàng so với costPerHour
40,0 và costPerKilometer
10,0 của Vehicle
khiến việc bỏ qua lô hàng hiệu quả hơn về chi phí so với việc hoàn tất lô hàng.
Chủ đề nâng cao: chi phí và quy tắc ràng buộc mềm
Một số thuộc tính tin nhắn OptimizeToursRequest
(REST, gRPC) đại diện cho các quy tắc ràng buộc mềm, là các quy tắc ràng buộc gây ra chi phí khi không thể đáp ứng.
Ví dụ: các quy tắc ràng buộc LoadLimit
(REST, gRPC) của xe có thuộc tính softMaxLoad
và costPerUnitAboveSoftMax
. Tổng cộng, các chi phí này sẽ tăng lên theo tỷ lệ với các đơn vị tải vượt quá softMaxLoad
, cho phép vượt quá giới hạn chỉ khi việc này hợp lý về mặt chi phí.
Tương tự, các quy tắc ràng buộc TimeWindow
(REST, gRPC) có các thuộc tính soft_start_time
và soft_end_time
, với cost_per_hour_before_soft_start_time
và cost_per_hour_after_soft_end_time
tương ứng phát sinh dựa trên thời điểm xảy ra sự kiện bị ràng buộc so với TimeWindow
.
Giống như tất cả các thông số mô hình chi phí, chi phí ràng buộc mềm được biểu thị bằng cùng một đơn vị không có kích thước như các thông số chi phí khác.
Các điều kiện ràng buộc LoadLimit
được đề cập chi tiết trong phần Nhu cầu và giới hạn tải. Các điều kiện ràng buộc TimeWindow
được đề cập chi tiết trong phần Điều kiện ràng buộc về khung giờ lấy hàng và giao hàng.