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 kết hợp lại với nhau đại diện cho 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 tuyến đường Vehicle nhanh hơn so với các 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ành Shipment hay không
  • Chỉ thực hiện việc đến lấy hàng và giao hàng trong khoảng thời gian khi làm như vậy sẽ 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 xe mỗi giờ, bao gồm cả thời gian đi phương tiện công cộng, thời gian chờ, thời gian tham quan và thời gian nghỉ giải lao.
  • Vehicle.cost_per_kilometer: biểu thị chi phí mỗi km mà xe đi được.
  • Vehicle.cost_per_traveled_hour: biểu thị chi phí vận hành xe chỉ trong khi vận chuyển, không bao gồm 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á thực hiện các sự đánh đổi so với thời gian so với khoảng cách. 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 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 sẽ ngắn nhất, vì vậy, các thay đổi đối với tham 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 vài thông số chi phí:

  • Shipment.penalty_cost là chi phí phát sinh khi bỏ qua quá trình vận chuyển.
  • Shipment.VisitRequest.cost thể hiện 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 đánh đổi chi phí giữa nhiều lựa chọn đến lấy hàng hoặc giao hàng cho một lô hàng.

Thông số chi phí Shipment sử dụng các đơn vị không có kích thước giống với thông số chi phí Vehicle. Chi phí phát sinh hoàn tất một Shipment vượt quá chi phí phạt, Shipment không được đưa vào bất kỳ tuyến nào của Vehicle và 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 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 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í biểu thị chi phí phát sinh trong quá trình hoàn thành ShipmentRoute. Thuộc tính metrics.costsmetrics.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 routes có thuộc tính routeCostsrouteTotalCosts biểu thị chi phí cho 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 biểu thị chi phí phát sinh do các lô hàng bị bỏ qua. 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 tổng khoá model.shipments.penalty_cost trong phản hồi mẫu. Việc vận chuyển có penaltyCost thấp so với 40 costPerHour và 10 của Vehicle costPerKilometer giúp việc bỏ qua việc vận chuyển trở nên tiết kiệm chi phí hơn là hoàn tất.

Chủ đề nâng cao: chi phí và những ràng buộc thường

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. Đây là các quy tắc ràng buộc 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 softMaxLoadcostPerUnitAboveSoftMax. Việc kết hợp các phương diện này phải chịu chi phí tỷ lệ với đơn vị tải vượt quá softMaxLoad, cho phép vượt quá giới hạn nếu làm như vậy hợp lý trên quan điểm chi phí.

Tương tự, các điều kiện 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 tuỳ thuộc vào thời điểm sớm hay muộn sự kiện bị ràng buộc đó xảy ra liên quan đến TimeWindow.

Giống như tất cả cá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 các đơn vị không có kích thước như các thông số chi phí khác.

Các quy tắc ràng buộc 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 đối với TimeWindow được giải quyết chi tiết trong phần Giới hạn đối với khoảng thời gian đến lấy hàng và thời gian giao hàng.