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 đại diện cho
mô hình chi phí của yêu cầu. Mô hình chi phí ghi lại nhiều mục tiêu tối ưu hoá cấp cao của yêu cầu, chẳng hạn như:
- Ưu tiên tuyến đường
Vehicle
nhanh hơn thay vì 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 khung thời gian khi cách này tiết kiệm chi phí
Xem một yêu cầu mẫ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 một phương tiện mỗi giờ, bao gồm thời gian vận chuyển, chờ, ghé thăm và nghỉ giải lao.Vehicle.cost_per_kilometer
: thể hiện chi phí mỗi km mà xe đã đi.Vehicle.cost_per_traveled_hour
: thể hiện chi phí vận hành xe trong khi vận chuyển, không bao gồm thời gian chờ, ghé qua và 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 sự đánh đổi giữa thời gian và khoảng cách di chuyển. 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 đường nhanh hơn và 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à tuyến ngắn nhất, do đó, các thay đổi đối với tham số chi phí sẽ có ít ảnh hưởng.
Shipment
thuộc tính chi phí
Thông báo Shipment
(REST, gRPC) cũng có một số tham số chi phí:
Shipment.penalty_cost
là chi phí phát sinh do bỏ qua vận chuyển.Shipment.VisitRequest.cost
là 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 cân bằng chi phí giữa nhiều cách đến lấy hàng hoặc giao hàng trong một lần vận chuyển.
Tham số chi phí Shipment
sử dụng cùng đơn vị không phương diện như tham số chi phí Vehicle
. Chi phí phát sinh khi hoàn thành Shipment
vượt quá chi phí phạt, nên Shipment
sẽ không được đưa vào tuyến đường của Vehicle
mà 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 xe hoàn thành ShipmentRoute
. Khi bạn tăng globalDurationCostPerHour
, ưu tiên hoàn thành sớm hơn tất cả các lô hàng.
Thuộc tính chi phí phản hồi 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 các 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 nhập routes
có các thuộc tính routeCosts
và routeTotalCosts
biểu thị chi phí cho tuyến 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 các lô hàng bị bỏ qua. Thuộc tính skippedShipments
cho biết những lô hàng nào bị bỏ qua.
Trong ví dụ này, chỉ có model.shipments[1]
trong yêu cầu mẫu được 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. Mức thấp penaltyCost
của lô hàng so với 40.0 costPerHour
và 10.0 costPerKilometer
của Vehicle
giúp việc bỏ qua khâu vận chuyển sẽ tiết kiệm chi phí hơn so với hoàn tất.
Chủ đề nâng cao: chi phí và những ràng buộc mềm
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, là những quy tắc ràng buộc phải 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
. Đồng thời, những chi phí này phải chịu cùng với chi phí tỷ lệ với các đơn vị tải vượt quá softMaxLoad
, cho phép giới hạn chỉ được vượt quá nếu việc này phù hợp từ góc độ chi phí.
Tương tự, các quy tắc ràng buộc của 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 được phát sinh dựa trên mức độ xuất hiện sớm hoặc muộn của sự kiện bị ràng buộc tương ứng với TimeWindow
.
Giống như tất cả tham số của 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 tham số chi phí khác.
Các quy tắc ràng buộc của 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 của TimeWindow
được giải quyết chi tiết trong Các điều kiện ràng buộc về khung thời gian nhận hàng và thời gian giao hàng.