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
가 페널티 비용을 초과하면 Shipment
는 Vehicle
의 경로에 포함되지 않고 응답 메시지의 skipped_shipments
목록에 표시됩니다.
ShipmentModel
비용 속성
ShipmentModel
메시지 (REST, gRPC)에는 단일 비용 속성 globalDurationCostPerHour
가 포함됩니다. 이 비용은 모든 차량이 ShipmentRoute
를 완료하는 데 필요한 총 시간을 기준으로 발생합니다. globalDurationCostPerHour
를 늘리면 모든 배송을 더 일찍 완료하는 데 우선순위가 부여됩니다.
경로 최적화 응답 비용 속성
OptimizeToursResponse
메시지 (REST, gRPC)에는 ShipmentRoute
를 완료하는 과정에서 발생하는 비용을 나타내는 비용 속성이 있습니다.
metrics.costs
및 metrics.totalCost
속성은 응답의 모든 경로에서 발생한 비용 단위 수를 나타냅니다. 각 routes
항목에는 해당 경로의 비용을 나타내는 routeCosts
및 routeTotalCosts
속성이 있습니다.
비용이 포함된 예시 요청에 대한 응답 보기
{ "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) 제약 조건에는 softMaxLoad
및 costPerUnitAboveSoftMax
속성이 있습니다. 이렇게 하면 softMaxLoad
를 초과하는 부하 단위에 비례하는 비용이 발생하므로 비용 관점에서 적절한 경우에만 한도를 초과할 수 있습니다.
마찬가지로 TimeWindow
제약 조건 (REST, gRPC)에는 soft_start_time
및 soft_end_time
속성이 있으며, 이에 상응하는 cost_per_hour_before_soft_start_time
및 cost_per_hour_after_soft_end_time
은 제약된 이벤트가 TimeWindow
와 관련하여 얼마나 일찍 또는 늦게 발생하는지에 따라 발생합니다.
모든 비용 모델 매개변수와 마찬가지로, 연약한 제약 조건 비용은 다른 비용 매개변수와 동일한 무차원 단위로 표현됩니다.
LoadLimit
제약 조건은 부하 수요 및 한도에서 자세히 다룹니다. TimeWindow
제약 조건은 수거 및 배송 시간 제한 제약 조건에 자세히 설명되어 있습니다.