비용 모델 매개변수

OptimizeToursRequest 메시지 (REST, gRPC)에는 비용과 관련된 여러 속성이 포함되어 있습니다. 이러한 비용 매개변수는 요청의 비용 모델을 나타냅니다. 비용 모델은 다음과 같은 요청의 상위 수준 최적화 목표를 대부분 포착합니다.

  • 짧은 경로 또는 그 반대로 더 빠른 Vehicle 경로에 우선순위를 둡니다.
  • Shipment를 제공하는 비용이 Shipment의 완료 가치에 해당하는지 결정합니다.
  • 정해진 시간 내에 수령 및 배달을 하는 것이 비용 효율적임

비용이 포함된 요청 예시 보기

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

Vehicle 메시지 (REST, gRPC)에는 몇 가지 비용 속성이 있습니다.

  • Vehicle.cost_per_hour: 대중교통, 대기, 방문, 휴식 시간을 포함하여 시간당 차량 운행 비용을 나타냅니다.
  • Vehicle.cost_per_kilometer: 차량의 킬로미터당 이동 비용을 나타냅니다.
  • Vehicle.cost_per_traveled_hour: 대기, 방문, 휴식 시간을 제외하고 이동 중에만 차량을 운행하는 비용을 나타냅니다.

이러한 비용 매개변수를 사용하면 옵티마이저가 이동 거리 대비 이동 거리를 절충할 수 있습니다. 최적화된 경로로 인해 발생하는 비용은 응답 메시지에 metrics.costs로 표시됩니다.

costPerHour가 증가하면 최적화 도구가 가장 짧은 경로가 아닐 수도 있는 더 빠른 경로를 찾으려고 시도합니다. 이 예에서는 가장 빠른 경로가 최단 경로이므로 비용 매개변수를 변경해도 거의 영향을 미치지 않습니다.

비용 속성 Shipment

Shipment 메시지 (REST, gRPC)에도 몇 가지 비용 매개변수가 있습니다.

  • Shipment.penalty_cost는 배송을 건너뛰면 발생하는 비용을 나타냅니다.
  • Shipment.VisitRequest.cost는 특정 수령 또는 배달의 비용을 나타내며, 단일 배송의 여러 수령 또는 배달 옵션 간에 비용 절충을 위해 주로 사용됩니다.

Shipment 비용 매개변수는 Vehicle 비용 매개변수와 동일한 측정기준 없는 단위를 사용합니다. 완료된 Shipment가 발생한 비용이 페널티 비용을 초과합니다. ShipmentVehicle의 경로에 포함되지 않으며 대신 응답 메시지의 skipped_shipments 목록에 표시됩니다.

비용 속성 ShipmentModel

ShipmentModel 메시지 (REST, gRPC)에는 단일 비용 속성인 globalDurationCostPerHour가 포함되어 있습니다. 이 비용은 모든 차량이 ShipmentRoute를 완료하는 데 필요한 총 시간을 기준으로 발생합니다. globalDurationCostPerHour를 늘리면 모든 배송을 조기에 완료할 수 있습니다.

경로 최적화 응답 비용 속성

OptimizeToursResponse 메시지 (REST, gRPC)에는 ShipmentRoute를 완료하는 과정에서 발생하는 비용을 나타내는 비용 속성이 있습니다. metrics.costsmetrics.totalCost 속성은 응답의 모든 경로에서 발생한 비용 단위 수를 나타냅니다. 각 routes 항목에는 특정 경로의 비용을 나타내는 routeCostsrouteTotalCosts 속성이 있습니다.

비용이 포함된 예시 요청에 대한 응답 보기

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

응답 예에서 최상위 metrics.costs는 다음과 같습니다.

{
  "metrics": {
    ...
    "costs": {
      "model.vehicles.cost_per_hour": 18.911111111111111,
      "model.vehicles.cost_per_kilometer": 33.53,
      "model.shipments.penalty_cost": 5
    }
  }
}

model.shipments.penalty_cost 값은 배송 건너뛴으로 인해 발생한 비용을 나타냅니다. skippedShipments 속성은 건너뛴 배송을 나열합니다.

이 예시에서는 예시 요청의 model.shipments[1]만 건너뜁니다. model.shipments[1]의 페널티 비용은 5단위이며 이는 예시 응답의 총 model.shipments.penalty_cost 키와 일치합니다. Vehicle의 40.0 costPerHour 및 10.0 costPerKilometer에 비해 배송 상품의 penaltyCost가 낮으므로 배송을 완료하는 것보다 건너뛰는 것이 더 비용 효율적입니다.

고급 주제: 비용 및 유연한 제약조건

여러 OptimizeToursRequest 메시지 (REST, gRPC) 속성은 충족될 수 없을 때 비용이 발생하는 제약 조건인 소프트 제약 조건을 나타냅니다.

예를 들어 차량 LoadLimit (REST, gRPC) 제약조건에는 softMaxLoadcostPerUnitAboveSoftMax 속성이 있습니다. 이와 함께, softMaxLoad를 초과하는 부하 단위에 비례하는 비용이 발생하므로 비용 측면에서 타당한 경우에만 한도를 초과할 수 있습니다.

마찬가지로 TimeWindow 제약 조건 (REST, gRPC)에는 soft_start_timesoft_end_time 속성이 있으며, TimeWindow와 관련하여 제한된 이벤트가 얼마나 일찍 또는 늦게 발생하는지에 따라 발생하는 상응하는 cost_per_hour_before_soft_start_timecost_per_hour_after_soft_end_time 속성이 있습니다.

모든 비용 모델 매개변수와 마찬가지로 유연한 제약조건 비용은 다른 비용 매개변수와 동일한 측정기준 없는 단위로 표현됩니다.

LoadLimit 제약조건은 부하 수요 및 한도에서 자세히 다룹니다. TimeWindow 제약 조건은 수령 및 배송 시간 창 제약 조건에서 자세히 다룹니다.