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 kết hợp lại với nhau
đại diện cho 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 tuyến đường
Vehicle
nhanh hơn so với các tuyến đường 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 đến lấy hàng và giao hàng trong khoảng thời gian khi làm như vậy sẽ tiết kiệm 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 } ] } }
Vehicle
thuộc tính chi phí
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 đi phương tiện công cộng, thời gian chờ, thời gian tham quan và thời gian nghỉ giải lao.Vehicle.cost_per_kilometer
: biểu thị chi phí mỗi km mà xe đi được.Vehicle.cost_per_traveled_hour
: biểu thị chi phí vận hành xe chỉ trong khi vận chuyển, không bao gồm thời gian chờ, thời gian ghé thăm và thời gian nghỉ giải lao.
Các thông số chi phí này cho phép trình tối ưu hoá thực hiện các sự đánh đổi so với thời gian so với khoảng cách. Chi phí phát sinh của tuyến đượ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, trình tối ưu hoá sẽ cố gắng tìm các tuyến nhanh hơn mà 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 sẽ ngắn nhất, vì vậy, các thay đổi đối với tham số chi phí sẽ ít ảnh hưởng.
Shipment
thuộc tính chi phí
Thông báo Shipment
(REST, gRPC) cũng có một vài thông số chi phí:
Shipment.penalty_cost
là chi phí phát sinh khi bỏ qua quá trình vận chuyển.Shipment.VisitRequest.cost
thể hiện chi phí của một lần đến lấy hàng hoặc giao hàng cụ thể, dùng chủ yếu để cho phép đánh đổi chi phí giữa nhiều lựa chọn đến lấy hàng hoặc giao hàng cho một lô hàng.
Thông số chi phí Shipment
sử dụng các đơn vị không có kích thước giống với thông số chi phí Vehicle
. Chi phí phát sinh hoàn tất một Shipment
vượt quá chi phí phạt, Shipment
không được đưa vào bất kỳ tuyến nào của Vehicle
và thay vào đó sẽ xuất hiện trong danh sách skipped_shipments
trong thông báo phản hồi.
ShipmentModel
thuộc tính chi phí
Thông báo 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 gói 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í
biểu thị chi phí phát sinh trong quá trình hoàn thành ShipmentRoute
.
Thuộc tính metrics.costs
và metrics.totalCost
đại diện cho 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ó thuộc tính routeCosts
và routeTotalCosts
biểu thị chi phí cho tuyến đường cụ thể đó.
Xem phản hồi cho yêu cầu mẫu kèm theo 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
biểu thị chi phí phát sinh do các lô hàng bị bỏ qua. 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 tổng khoá model.shipments.penalty_cost
trong phản hồi mẫu. Việc vận chuyển có penaltyCost
thấp so với 40 costPerHour
và 10 của Vehicle
costPerKilometer
giúp việc bỏ qua việc vận chuyển trở nên tiết kiệm chi phí hơn là hoàn thành.
Chủ đề nâng cao: chi phí và những ràng buộc thường
Một số thuộc tính thông báo OptimizeToursRequest
(REST, gRPC) đại diện cho các quy tắc ràng buộc mềm. Đây là các quy tắc ràng buộc phát sinh chi phí khi không được đáp ứng.
Ví dụ: các quy tắc ràng buộc của xe LoadLimit
(REST, gRPC) có các thuộc tính softMaxLoad
và costPerUnitAboveSoftMax
. Việc kết hợp các phương diện này phải chịu chi phí tỷ lệ với đơn vị tải vượt quá softMaxLoad
, cho phép vượt quá giới hạn nếu làm như vậy hợp lý trên quan điểm chi phí.
Tương tự, các điều kiện 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 tuỳ thuộc vào thời điểm sớm hay muộn sự kiện bị ràng buộc đó xảy ra liên quan đến TimeWindow
.
Giống như tất cả các thông số của mô hình chi phí, chi phí ràng buộc mềm được biểu thị trong cùng các đơn vị không có kích thước như các thông số chi phí khác.
Các quy tắc ràng buộc LoadLimit
được giải quyết chi tiết trong phần Nhu cầu và giới hạn tải. Các quy tắc ràng buộc đối với TimeWindow
được giải quyết chi tiết trong phần Giới hạn đối với khoảng thời gian đến lấy hàng và thời gian giao hàng.