Các thông số mô hình chi phí

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 nhau thể hiện 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 các tuyến Vehicle nhanh hơn so với các tuyến 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ành Shipment hay không
  • Chỉ thực hiện việc lấy hàng và giao hàng trong khung thời gian khi việc này mang lại hiệu quả về 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
      }
    ]
  }
}
    

Thuộc tính chi phí Vehicle

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 di chuyển, chờ, thăm và nghỉ.
  • Vehicle.cost_per_kilometer: biểu thị chi phí mỗi km mà xe đi được.
  • Vehicle.cost_per_traveled_hour: chỉ thể hiện chi phí vận hành xe trong khi đang di chuyển, không bao gồm thời gian chờ, thời gian ghé thăm và thời gian nghỉ.

Các tham số chi phí này cho phép trình tối ưu hoá đánh đổi thời gian so với quãng đường đã đi. Chi phí phát sinh do tuyến đường đượ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 lên, trình tối ưu hoá sẽ cố gắng tìm các tuyến đường nhanh hơn nhưng 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ại là tuyến đường ngắn nhất, vì vậy, các thay đổi đối với tham số chi phí sẽ ít ảnh hưởng.

Thuộc tính chi phí Shipment

Thông báo Shipment (REST, gRPC) cũng có một số tham số chi phí:

  • Shipment.penalty_cost thể hiện chi phí phát sinh do bỏ qua lô hàng.
  • Shipment.VisitRequest.cost thể hiện chi phí của một phương thức lấy hàng hoặc giao hàng cụ thể, chủ yếu dùng để cho phép đánh đổi chi phí giữa nhiều phương thức lấy hàng hoặc giao hàng cho một lô hàng.

Các tham số chi phí Shipment sử dụng cùng một đơn vị không thứ nguyên như các tham số chi phí Vehicle. Chi phí phát sinh khi hoàn tất một Shipment vượt quá chi phí phạt, Shipment sẽ không được đưa vào tuyến đường của Vehicle nào và thay vào đó sẽ xuất hiện trong danh sách skipped_shipments trong thông báo phản hồi.

Thuộc tính chi phí ShipmentModel

Tin nhắn 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 lô 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í đại diện cho các chi phí phát sinh trong quá trình hoàn tất ShipmentRoute. Thuộc tính metrics.costsmetrics.totalCost thể hiện 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ó các thuộc tính routeCostsrouteTotalCosts đại diện cho chi phí của tuyến đường 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 bỏ qua đơn hàng vận chuyển. 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 khoá tổng model.shipments.penalty_cost trong phản hồi mẫu. penaltyCost thấp của lô hàng so với costPerHour 40,0 và costPerKilometer 10,0 của Vehicle khiến việc bỏ qua lô hàng hiệu quả hơn về chi phí so với việc hoàn tất lô hàng.

Chủ đề nâng cao: chi phí và quy tắc ràng buộc mềm

Một số thuộc tính tin nhắn OptimizeToursRequest (REST, gRPC) đại diện cho các quy tắc ràng buộc mềm, là các quy tắc ràng buộc gây ra chi phí khi không thể đáp ứng.

Ví dụ: các quy tắc ràng buộc LoadLimit (REST, gRPC) của xe có thuộc tính softMaxLoadcostPerUnitAboveSoftMax. Tổng cộng, các chi phí này sẽ tăng lên theo tỷ lệ với các đơn vị tải vượt quá softMaxLoad, cho phép vượt quá giới hạn chỉ khi việc này hợp lý về mặt chi phí.

Tương tự, các quy tắc ràng buộc TimeWindow (REST, gRPC) có các thuộc tính soft_start_timesoft_end_time, với cost_per_hour_before_soft_start_timecost_per_hour_after_soft_end_time tương ứng phát sinh dựa trên thời điểm xảy ra sự kiện bị ràng buộc so với TimeWindow.

Giống như tất cả các thông số 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 thông số chi phí khác.

Các điều kiện ràng buộc LoadLimit được đề cập chi tiết trong phần Nhu cầu và giới hạn tải. Các điều kiện ràng buộc TimeWindow được đề cập chi tiết trong phần Điều kiện ràng buộc về khung giờ lấy hàng và giao hàng.