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
속성이 있으며, TimeWindow
와 관련하여 제한된 이벤트가 얼마나 일찍 또는 늦게 발생하는지에 따라 발생하는 상응하는 cost_per_hour_before_soft_start_time
및 cost_per_hour_after_soft_end_time
속성이 있습니다.
모든 비용 모델 매개변수와 마찬가지로 유연한 제약조건 비용은 다른 비용 매개변수와 동일한 측정기준 없는 단위로 표현됩니다.
LoadLimit
제약조건은 부하 수요 및 한도에서 자세히 다룹니다. TimeWindow
제약 조건은 수령 및 배송 시간 창 제약 조건에서 자세히 다룹니다.