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 đại diện cho mô hình chi phí của yêu cầu. Mô hình chi phí ghi lại nhiều mục tiêu tối ưu hoá cấp cao của yêu cầu, chẳng hạn như:

  • Ưu tiên tuyến đường Vehicle nhanh hơn thay vì 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 khung thời gian khi cách này tiết kiệm chi phí

Xem một yêu cầu mẫ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 phương tiện mỗi giờ, bao gồm thời gian vận chuyển, chờ, ghé thăm và nghỉ giải lao.
  • Vehicle.cost_per_kilometer: thể hiện chi phí mỗi km mà xe đã đi.
  • Vehicle.cost_per_traveled_hour: thể hiện chi phí vận hành xe trong khi vận chuyển, không bao gồm thời gian chờ, ghé qua và 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 sự đánh đổi giữa thời gian và khoảng cách di chuyển. 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 đường nhanh hơn và 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à tuyến ngắn nhất, do đó, các thay đổi đối với tham số chi phí sẽ có ít ảnh hưởng.

Shipment thuộc tính chi phí

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

  • Shipment.penalty_cost là chi phí phát sinh do bỏ qua vận chuyển.
  • Shipment.VisitRequest.cost là 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 cân bằng chi phí giữa nhiều cách đến lấy hàng hoặc giao hàng trong một lần vận chuyển.

Tham số chi phí Shipment sử dụng cùng đơn vị không phương diện như tham số chi phí Vehicle. Chi phí phát sinh khi hoàn thành Shipment vượt quá chi phí phạt, nên Shipment sẽ không được đưa vào tuyến đường của Vehicle mà 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 xe hoàn thành ShipmentRoute. Khi bạn tăng globalDurationCostPerHour, ưu tiên hoàn thành sớm hơn tất cả các lô hàng.

Thuộc tính chi phí phản hồi 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 các 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 nhập routes có các thuộc tính routeCostsrouteTotalCosts biểu thị chi phí cho tuyến 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 các lô hàng bị bỏ qua. Thuộc tính skippedShipments cho biết những lô hàng nào bị bỏ qua.

Trong ví dụ này, chỉ có model.shipments[1] trong yêu cầu mẫu được 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. Mức thấp penaltyCost của lô hàng so với 40.0 costPerHour và 10.0 costPerKilometer của Vehicle giúp việc bỏ qua khâu vận chuyển sẽ tiết kiệm chi phí hơn so với hoàn tất.

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

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, là những quy tắc ràng buộc phải 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. Đồng thời, những chi phí này phải chịu cùng với chi phí tỷ lệ với các đơn vị tải vượt quá softMaxLoad, cho phép giới hạn chỉ được vượt quá nếu việc này phù hợp từ góc độ chi phí.

Tương tự, các quy tắc ràng buộc của 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 được phát sinh dựa trên mức độ xuất hiện sớm hoặc muộn của sự kiện bị ràng buộc tương ứng với TimeWindow.

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

Các quy tắc ràng buộc của 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 của TimeWindow được giải quyết chi tiết trong Các điều kiện ràng buộc về khung thời gian nhận hàng và thời gian giao hàng.