Diễn giải câu trả lời

Nhà phát triển ở Khu vực kinh tế Châu Âu (EEA)

Route Optimization API trả về các tuyến đường cho xe trong yêu cầu tương ứng. Các lô hàng được chỉ định cho xe hoặc có thể bị bỏ qua tuỳ thuộc vào thuộc tính của yêu cầu.

Thông báo OptimizeToursResponse (REST, gRPC) có 2 thuộc tính chính ở cấp cao nhất:

  • routes[] là các tuyến đường cho từng xe có lô hàng được chỉ định. Mỗi Route chứa các chỉ số phản ánh thuộc tính của từng tuyến đường.
  • metrics là các chỉ số được tổng hợp cho toàn bộ phản hồi, trên tất cả các xe và kế hoạch tuyến đường. Các chỉ số ở cấp cao nhất chứa các thuộc tính giống như chỉ số trên 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ố thuộc tính có thể 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á:

  1. skippedShipments[] liệt kê các lô hàng mà không có xe nào thực hiện. Một lô hàng có thể bị bỏ qua nếu không thể thực hiện trong các ràng buộc đã chỉ định hoặc nếu chi phí thực hiện lô hàng vượt quá chi phí phạt. Ví dụ: nếu lô hàng có thời gian nhận hoặc giao hàng timeWindow rất ngắn, thì xe có thể không thực hiện được chuyến ghé thăm trong khoảng thời gian bắt buộc hoặc không hiệu quả về chi phí.
  2. validationErrors[] chỉ định các lỗi khiến yêu cầu không hợp lệ hoặc không thể giải quyết khi solvingMode của yêu cầu được đặt thành VALIDATE_ONLY. Ở chế độ DEFAULT_SOLVE thông thường, các 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. Xin lưu ý rằng chế độ giải quyết VALIDATE_ONLY có thể báo cáo nhiều lỗi cùng một lúc, điều này hữu ích cho việc gỡ lỗi yêu cầu một cách nhanh chóng.

Thuộc tính tuyến đường

Mỗi routes[] mục nhập là một ShipmentRoute thông báo (REST, gRPC). Mỗi ShipmentRoute đại diện cho việc chỉ định tuyến đường cho một xe cụ thể từ yêu cầu. Các thuộc tính ShipmentRoute quan trọng liên quan đến Vehicle tương ứng bao gồm:

  • vehicleIndex là chỉ mục dựa trên 0 của Vehicle trong thông báo yêu cầu tương ứng. Phản hồi REST bỏ qua thuộc tính này khi giá trị là 0.
  • vehicleStartTime là thời gian mà xe phải bắt đầu tuyến đường.
  • vehicleEndTime là thời gian mà xe dự kiến sẽ hoàn thành tuyến đường.

Trong phản hồ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 danh sách có thứ tự của visits mà xe sẽ hoàn thành. Mỗi Visit (REST, gRPC) đại diện cho một VisitRequest (REST, gRPC) từ yêu cầu tương ứng. Các thuộc tính Visit quan trọng bao gồm:

  • shipmentIndex là chỉ mục dựa trên 0 của lô hàng mà chuyến ghé thăm này thuộc về trong yêu cầu tương ứng.
  • isPickup là true khi chuyến ghé thăm là chuyến nhận hàng và là false khi chuyến ghé thăm là chuyến giao hàng. Phản hồi REST bỏ qua thuộc tính này khi giá trị là false.
  • visitRequestIndex là chỉ mục dựa trên 0 của VisitRequest từ Shipment.pickups hoặc Shipment.deliveries trong yêu cầu tương ứng mà Visit đại diện. Phản hồi REST bỏ qua thuộc tính này khi giá trị là 0.
  • startTime là thời gian dự kiến bắt đầu chuyến ghé thăm.
  • loadDemands ánh xạ loại tải đến lượng tải được yêu cầu để hoàn thành Visit. Lượng tải là số âm đối với các chuyến ghé thăm giao hàng, đại diện cho lượng tải đang được gỡ bỏ khỏi xe.

Ví dụ về Visit có dạng như sau:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

Mỗi ShipmentRoute bao gồm danh sách có thứ tự của transitions đại diện cho hành trình giữa visits cho một xe nhất định. Các thuộc tính quan trọng của thông báo Transition (REST, gRPC) bao gồm:

  • startTime là thời gian mà xe sẽ bắt đầu thực hiện quá trình chuyển đổi.
  • travelDuration là khoảng thời gian mà xe phải di chuyể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 di chuyển để hoàn tất quá trình chuyển đổi.
  • trafficInfoUnavailable cho biết liệu dữ liệu giao thông có sẵn cho quá trình chuyển đổi hay không.
  • waitDuration đại diện cho thời gian chờ không hoạt động mà xe dành ra để chờ trước khi có thể bắt đầu Visit tiếp theo. Điều này có thể xảy ra do start_time của Visit tiếp theo.
  • totalDuration là tổng thời lượng của quá trình chuyển đổi, bao gồm thời gian di chuyển, chờ đợi, nghỉ giải lao và thời gian trễ.
  • vehicleLoads ánh xạ loại tải đến lượng tải do xe chở trong quá trình chuyển đổi này.

Ví dụ về Transition có dạng như sau:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

Để biết thêm thông tin về mối quan hệ giữa viststransitions, hãy xem bài viết Tối ưu hoá thứ tự điểm dừng nhận và giao hàng và tài liệu tham khảo ShipmentRoute (REST, gRPC Để biết thêm thông tin về các thuộc tính routePolylinerouteToken của thông báo Transition, hãy xem Đường nhiều đoạn chuyển đổi và mã thông báo tuyến đường.

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 về chi phí trong Tham số mô hình chi phí.
  • usedVehicleCount là tổng số xe được sử dụng trong giải pháp. Xe có thể có các tuyến đường trống khi trình tối ưu hoá xác định rằng không cần sử dụng xe.
  • skippedMandatoryShipmentCount là số lô hàng bị bỏ qua là "bắt buộc". Lô hàng bắt buộc không chỉ định penaltyCost phát sinh nếu lô hàng bị bỏ qua. Các lô hàng bắt buộc vẫn có thể bị bỏ qua nếu hiệu suất của chúng không khả thi trong các ràng buộc đã chỉ định. Đọc thêm về chi phí trong bài viết Tham 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 thuộc tính ShipmentRoute.metrics Metrics.aggregatedRouteMetrics chứa các chỉ số được tổng hợp trên tất cả ShipmentRoute trong OptimizeToursResponse. Mỗi thuộc tính ShipmentRoute.metrics chứa các chỉ số cho ShipmentRoutecụ thể đó.

Các thuộc tính AggregatedMetrics quan trọng bao gồm:

  • performedShipmentCount là số lô hàng do xe thực hiện trên toàn bộ tuyến đường.
  • travelDuration là tổng thời gian mà xe dành cho việc vận chuyển trong khi hoàn thành các tuyến đường.
  • waitDuration là tổng thời gian mà xe dành cho việc chờ đợi trong khi hoàn thành các tuyến đường.
  • delayDuration là tổng thời gian trễ của xe. Giá trị này thường là 0, trừ phi TransitionAttributes được dùng trong yêu cầu.
  • breakDuration là tổng thời gian mà xe dành cho việc nghỉ giải lao trong khi hoàn thành các tuyến đường.
  • visitDuration là tổng thời gian mà xe dành cho việc thực hiện các chuyến ghé thăm trong khi hoàn thành các tuyến đường. Đây là tổng của tất cả các VisitRequest.duration giá trị cho VisitRequest tương ứng với Visits được chỉ định cho xe áp dụng.
  • totalDuration là tổng thời lượng cần thiết để hoàn thành các tuyến đường của xe.
  • travelDistanceMeters là tổng khoảng cách mà xe đã đi trong khi hoàn thành các tuyến đường.
  • maxLoads ánh xạ các loại tải đến lượng tải tối đa do xe chở tại bất kỳ thời điểm nào trên tuyến đường.

Ví dụ về thông báo Metrics 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 đủ

Phản hồi ví dụ đầy đủ cho yêu cầu từ phần Tạo yêu cầu có dạng như sau:

{
  "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
    }
  }
}