API Tối ưu hoá tuyến đường trả về tuyến đường cho xe trong của bạn. Các lô hàng được chỉ định cho phương tiện vận chuyển hoặc có thể được bỏ qua tuỳ thuộc vào các thuộc tính của yêu cầu.
Thông báo OptimizeToursResponse
(REST, gRPC) có hai cấp cao nhất chính
thuộc tính:
routes[]
là tuyến đường của mỗi chiếc xe có lô hàng được chỉ định. MộtRoute
chứa các chỉ số phản ánh thuộc tính của tuyến đường riêng lẻ đó.metrics
là các chỉ số tổng hợp cho toàn bộ câu trả lời trên tất cả phương tiện và kế hoạch tuyến đường. Chỉ số cấp cao nhất chứa các thuộc tính giống như chỉ số mỗi Tuyến đường, với các giá trị được tổng hợp trên tất cả các Tuyến đường.
Một số tài sản không phải lúc nào cũng được điền sẵn tuỳ thuộc vào kết quả tối ưu hoá:
skippedShipments[]
liệt kê các lô hàng không do bất kỳ loại xe nào thực hiện. Một kiện hàng có thể bị bỏ qua nếu không thể thực hiện trong quy định hoặc nếu chi phí để thực hiện việc vận chuyển vượt quá chi phí phạt. Ví dụ: nếu phạm vi nhận hàng hoặc giao hàng của một gói hàng rất hẹptimeWindow
có thể không phù hợp hoặc không tiết kiệm chi phí cho một phương tiện di chuyển để thực hiện lượt truy cập trong khoảng thời gian yêu cầu.validationErrors[]
chỉ định lỗi khiến yêu cầu không hợp lệ hoặc không thể giải quyết khisolvingMode
của yêu cầu được đặt thànhVALIDATE_ONLY
. Ở chế độDEFAULT_SOLVE
thông thường, lỗi xác thực sẽ xuất hiện trong thông báo lỗi thay vì nội dung phản hồi. Lưu ý rằng Chế độ giải quyết củaVALIDATE_ONLY
có thể báo cáo nhiều lỗi cùng lúc, đó là rất hữu ích để giúp các yêu cầu gỡ lỗi nhanh chóng.
Thuộc tính tuyến đường
Mỗi mục routes[]
là một thông báo ShipmentRoute
(REST, gRPC). Một
ShipmentRoute
biểu thị việc chỉ định tuyến đường cho một chiếc xe cụ thể từ
yêu cầu. Các thuộc tính ShipmentRoute
quan trọng liên quan đến tương ứng
Vehicle
bao gồm:
vehicleIndex
là chỉ số từ 0 củaVehicle
trong giá trị thuộc tính tương ứng tin nhắn yêu cầu. Phản hồi REST sẽ bỏ thuộc tính này khi giá trị bằng 0.vehicleStartTime
là thời điểm xe phải bắt đầu tuyến đường.vehicleEndTime
là thời điểm xe dự kiến sẽ chạy xong tuyến đường.
Trong câu trả lời, routes
sẽ có dạng như sau:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Mỗi ShipmentRoute
bao gồm một danh sách visits
được sắp xếp theo thứ tự mà chiếc xe sẽ
đã hoàn tất. Mỗi Visit
(REST, gRPC) đại diện cho một VisitRequest
(REST, gRPC) khỏi yêu cầu tương ứng. Visit
quan trọng
thuộc tính bao gồm:
shipmentIndex
là chỉ số từ 0 của lô hàng chứa chuyến ghé thăm này trong yêu cầu tương ứng.isPickup
là đúng khi một lượt ghé thăm là đến lấy hàng và sai khi lượt ghé thăm là một lượt ghé thăm của bạn. Phản hồi REST sẽ bỏ thuộc tính này khi giá trị là false.visitRequestIndex
là chỉ mục gốc 0 củaVisitRequest
từShipment.pickups
hoặcShipment.deliveries
trong yêu cầu tương ứng màVisit
đại diện. Phản hồi REST bỏ thuộc tính này khi có giá trị bằng 0.startTime
là thời gian dự kiến bắt đầu lượt truy cập.loadDemands
liên kết loại tải với tải cần thiết để hoàn thànhVisit
Số lượng tải là số âm đối với số lượt truy cập phân phối, thể hiện tải bị lấy ra khỏi xe.
Ví dụ về Visit
sẽ có dạng như sau:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Mỗi ShipmentRoute
bao gồm một danh sách transitions
được sắp xếp theo thứ tự đại diện cho
di chuyển trong khoảng visits
cho một chiếc xe cụ thể. Thông báo quan trọng Transition
Thuộc tính (REST, gRPC) bao gồm:
startTime
là thời điểm mà xe sẽ bắt đầu thực hiện chuyển đổi.travelDuration
là khoảng thời gian mà xe phải đi đến hoàn tất quá trình chuyển đổi.travelDistanceMeters
là khoảng cách tính bằng mét mà xe phải đi để hoàn tất quá trình chuyển đổi.trafficInfoUnavailable
cho biết liệu dữ liệu lưu lượng truy cập có sẵn cho chuyển đổi.waitDuration
biểu thị thời gian xe không hoạt động đang chờ trước khi có thể bắt đầuVisit
tiếp theo. Việc này có thể phát sinh dostart_time
của đang theo dõiVisit
.totalDuration
là tổng thời gian của quá trình chuyển đổi, bao gồm cả việc đi lại, thời gian chờ, ngắt kết nối và hoãn.vehicleLoads
liên kết loại tải trọng với tải trọng xe đã chở trong khoảng thời gian hiệu ứng chuyển đổi này.
Ví dụ về Transition
sẽ có dạng như sau:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Mối quan hệ giữa vists
và transitions
được mô tả trong
Tối ưu hoá đơn đặt hàng tự đến lấy và ngừng giao hàng, cũng như trong
Tài liệu tham khảo ShipmentRoute
(REST, gRPC).
Thuộc tính chỉ số
Thông báo Metrics
(REST, gRPC) tóm tắt toàn bộ giải pháp.
Một số thuộc tính Metrics
quan trọng bao gồm:
totalCost
là tổng chi phí phát sinh khi hoàn thành các tuyến đường. Đọc thêm giới thiệu về chi phí trong Thông số mô hình chi phí.usedVehicleCount
là tổng số phương tiện được sử dụng trong giải pháp. Xe có thể có tuyến đường trống khi trình tối ưu hoá xác định rằng việc sử dụng xe là không cần thiết.skippedMandatoryShipmentCount
là số lượng gói hàng đã bỏ qua "bắt buộc". Trường hợp vận chuyển bắt buộc không chỉ địnhpenaltyCost
là nếu việc vận chuyển bị bỏ qua. Các gói hàng bắt buộc vẫn có thể là bị bỏ qua nếu hiệu suất của chúng không khả thi trong các điều kiện ràng buộc đã chỉ định. Tìm hiểu thêm về chi phí trong bài viết Thông số mô hình chi phí.
Các chỉ số bổ sung được báo cáo dưới dạng thông báo AggregatedMetrics
(REST,
gRPC). Loại thông báo AggregatedMetrics
được dùng cho
thuộc tính Metrics.aggregatedRouteMetrics
và cho ShipmentRoute.metrics
tài sản Metrics.aggregatedRouteMetrics
chứa các chỉ số được tổng hợp trên tất cả
ShipmentRoute
trong OptimizeToursResponse
. Mỗi ShipmentRoute.metrics
thuộc tính này chứa các chỉ số cho ShipmentRoute
cụ thể đó.
Các thuộc tính AggregatedMetrics
quan trọng bao gồm:
performedShipmentCount
là số gói hàng do phương tiện vận chuyển thực hiện trên toàn bộ tuyến đường của họ.travelDuration
là tổng thời gian phương tiện vận chuyển trong khi hoàn thành tuyến đường của mình.waitDuration
là tổng thời gian mà xe chờ hoàn tất tuyến đường của mình.delayDuration
là tổng thời gian trễ của các phương tiện. Việc này thường 0 trừ phi sử dụngTransitionAttributes
trong yêu cầu.breakDuration
là tổng thời gian xe nghỉ giải lao trong khi hoàn thành tuyến đường của mình.visitDuration
là tổng thời gian mà xe dành để thực hiện các lượt ghé thăm trong khi hoàn thành tuyến đường của mình. Đây thực sự là tổng của tất cả Giá trịVisitRequest.duration
choVisitRequest
tương ứng vớiVisit
được chỉ định cho xe thích hợp.totalDuration
là tổng thời gian cần thiết để chạy xong một chiếc xe tuyến đường.travelDistanceMeters
là tổng quãng đường xe đã đi được trong khi hoàn thành tuyến đường của mình.maxLoads
liên kết các loại tải với tải trọng tối đa mà xe tại bất kỳ thời điểm nào trên tuyến đường của họ.
Thông báo Metrics
mẫu sẽ có dạng như sau:
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
Ví dụ đầy đủ
Một phản hồi mẫu hoàn chỉnh cho yêu cầu từ Tạo yêu cầu sẽ có vẻ như:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}