비용 모델 매개변수

유럽 경제 지역 (EEA) 개발자

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는 배송을 건너뛰는 데 발생하는 비용을 나타냅니다. 배송의 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.0costPerHour 및 10.0costPerKilometer에 비해 배송의 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 제약 조건은 수령 및 배송 시간대 제약 조건에 자세히 설명되어 있습니다.