Thông báo OptimizeToursRequest
(REST, gRPC) chứa một số
thuộc tính có liên quan đến
chi phí. Đồng thời, các thông số chi phí này
thể hiện yêu cầu
mô hình chi phí. Mô hình chi phí ghi nhận nhiều
thông tin cấp cao của yêu cầu
mục tiêu tối ưu hoá, 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 chiều ngược lại xung quanh - Quyết định xem chi phí để phân phối
Shipment
có xứng đáng với giá trị của Tỷ lệ hoàn thànhShipment
- Chỉ thực hiện việc đến lấy hàng và giao hàng trong khung thời gian giao hàng 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 một chiếc xe mỗi giờ bao gồm phương tiện công cộng, thời gian chờ, thời gian tham quan và thời gian nghỉ.Vehicle.cost_per_kilometer
: thể hiện chi phí mỗi km mà khách đi lại chiếc xe.Vehicle.cost_per_traveled_hour
: thể hiện chi phí vận hành xe chỉ khi đang vận chuyển, ngoại trừ 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á tính toán thời gian so với khoảng cách đi lại
đánh đổi. Chi phí phải chịu của tuyến đường được tối ưu hoá sẽ xuất hiện trong phản hồi
gửi tin nhắn bằng địa chỉ 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 xảy ra
ngắn nhất, vì vậy, các thay đổi đối với thông 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 số tốn kém
thông số:
Shipment.penalty_cost
thể hiện chi phí phát sinh do bỏ qua chuyển hàng.Shipment.VisitRequest.cost
thể hiện chi phí của một hình thức đến lấy hàng cụ thể hoặc giao hàng, được sử dụng chủ yếu để cho phép đánh đổi chi phí giữa nhiều lần đến lấy hàng hoặc tùy chọn giao hàng cho một lô hàng duy nhất.
Thông số chi phí Shipment
sử dụng cùng các đơn vị không có kích thước với chi phí Vehicle
tham số. Chi phí phát sinh hoàn tất Shipment
vượt quá chi phí hình phạt, chi phí
Shipment
không có trong bất kỳ tuyến đường nào của Vehicle
mà thay vào đó sẽ xuất hiện trong
Danh sách skipped_shipments
trong tin nhắn phản hồi.
ShipmentModel
thuộc tính chi phí
Thông báo ShipmentModel
(REST, gRPC) bao gồm một chi phí duy nhất
thuộc tính globalDurationCostPerHour
. Chi phí này phát sinh dựa trên tổng số
thời gian cần thiết để tất cả các phương tiện hoàn thành ShipmentRoute
. Tăng
globalDurationCostPerHour
ư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í
thể hiện chi phí phát sinh trong quá trình hoàn thành ShipmentRoute
.
Thuộc tính metrics.costs
và metrics.totalCost
biểu thị số lượng
đơn vị chi phí phát sinh trên tất cả lộ trình trong phản hồi. Mỗi mục routes
có
Các tài sản routeCosts
và routeTotalCosts
biểu thị chi phí cho loại tài sản đó
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
thể hiện chi phí phát sinh do
lô hàng đã bỏ qua. Thuộc tính skippedShipments
liệt kê các lô hàng đã vận chuyển
đã 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 chi phí
Khoá model.shipments.penalty_cost
trong phản hồi mẫu. Lô hàng sắp hết
penaltyCost
so với 40,0 costPerHour
và 10,0 của Vehicle
costPerKilometer
giúp tiết kiệm chi phí hơn là bỏ qua việc vận chuyển
để 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 OptimizeToursRequest
(REST, gRPC)
thể hiện những ràng buộc mềm. Đây là những ràng buộc phát sinh chi phí khi họ
không thể đáp ứng.
Ví dụ: các quy tắc ràng buộc của xe LoadLimit
(REST, gRPC) có
Thuộc tính softMaxLoad
và costPerUnitAboveSoftMax
. Việc kết hợp các chỉ số này sẽ tạo ra
chi phí tương ứng với các đơn vị tải vượt quá softMaxLoad
, cho phép
chỉ được vượt quá giới hạn nếu làm như vậy hợp lý về mặt chi phí.
Tương tự, các quy tắc ràng buộc của TimeWindow
(REST, gRPC) có
Thuộc tính soft_start_time
và soft_end_time
, tương ứng với
cost_per_hour_before_soft_start_time
và cost_per_hour_after_soft_end_time
phát sinh dựa trên việc sự kiện bị ràng buộc xảy ra sớm hay muộn với
đối với TimeWindow
.
Giống như tất 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 một đơn vị không có thứ nguyên với các thông số chi phí khác.
Các quy tắc ràng buộc đối với LoadLimit
được giải quyết chi tiết trong
Yêu 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 Ràng buộc cửa sổ thời gian đến lấy hàng và giao hàng.