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
제약 조건은 수령 및 배송 기간 제약 조건에서 자세히 다룹니다.