Route Optimization API는 해당 요청에서 차량의 경로를 반환합니다. 배송 상품은 차량에 할당되며 요청 속성에 따라 건너뜁니다.
OptimizeToursResponse
메시지 (REST, gRPC)에는 두 가지 주요 최상위 수준 속성이 있습니다.
routes[]
는 할당된 배송이 포함된 각 차량의 경로입니다. 각Route
에는 해당 경로의 속성을 반영하는 측정항목이 포함됩니다.metrics
는 모든 차량 및 경로 계획의 전체 응답에 대해 집계된 측정항목입니다. 최상위 측정항목에는 모든 경로에서 집계된 값이 포함된 경로별 측정항목과 동일한 속성이 포함됩니다.
최적화 결과에 따라 일부 속성이 채워지지 않을 수도 있습니다.
skippedShipments[]
에는 차량에서 처리하지 않은 배송이 표시됩니다. 지정된 제약 조건 내에 배송을 실행할 수 없거나 배송을 실행하는 데 드는 비용이 패널티 비용을 초과하는 경우 배송을 건너뛸 수 있습니다. 예를 들어 배송의 수령 또는 배송에timeWindow
가 매우 좁은 경우 차량이 필요한 시간 내에 방문을 수행할 수 없거나 비용 효율적이지 않을 수 있습니다.validationErrors[]
는 요청의solvingMode
가VALIDATE_ONLY
로 설정된 경우 요청을 무효화하거나 해결할 수 없게 만드는 오류를 지정합니다. 일반DEFAULT_SOLVE
모드에서는 유효성 검사 오류가 응답 본문 대신 오류 메시지에 표시됩니다.VALIDATE_ONLY
해결 모드는 한 번에 여러 오류를 보고할 수 있으므로 요청을 빠르게 디버그하는 데 유용합니다.
경로 속성
각 routes[]
항목은 ShipmentRoute
메시지 (REST, gRPC)입니다. 각 ShipmentRoute
는 요청의 특정 차량에 대한 경로 할당을 나타냅니다. 상응하는 Vehicle
와 관련된 중요한 ShipmentRoute
속성은 다음과 같습니다.
vehicleIndex
는 상응하는 요청 메시지의Vehicle
의 0부터 시작하는 색인입니다. 값이 0인 경우 REST 응답은 이 속성을 생략합니다.vehicleStartTime
은 차량이 경로를 시작해야 하는 시간입니다.vehicleEndTime
는 차량이 경로를 완료할 것으로 예상되는 시간입니다.
응답에서 routes
는 다음과 같이 표시됩니다.
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
각 ShipmentRoute
에는 차량이 완료할 visits
의 순서가 지정된 목록이 포함됩니다. 각 Visit
(REST, gRPC)는 상응하는 요청의 VisitRequest
(REST, gRPC)를 나타냅니다. 중요한 Visit
속성은 다음과 같습니다.
shipmentIndex
은 해당 요청에서 이 방문이 속한 배송의 0 기반 색인입니다.isPickup
는 방문이 승차인 경우 true이고, 방문이 배달인 경우 false입니다. 값이 false인 경우 REST 응답은 이 속성을 생략합니다.visitRequestIndex
는Visit
가 나타내는 해당 요청의Shipment.pickups
또는Shipment.deliveries
에서VisitRequest
의 0부터 시작하는 색인입니다. REST 응답은 값이 0인 경우 이 속성을 생략합니다.startTime
은 방문이 시작될 것으로 예상되는 시간입니다.loadDemands
는Visit
를 완료하는 데 필요한 로드 유형을 로드 양에 매핑합니다. 적재량은 배달 방문의 경우 음수이며 차량에서 부하가 삭제됨을 나타냅니다.
Visit
예는 다음과 같습니다.
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
각 ShipmentRoute
에는 지정된 차량의 visits
간의 이동을 나타내는 정렬된 transitions
목록이 포함됩니다. 중요한 Transition
메시지(REST, gRPC) 속성은 다음과 같습니다.
startTime
은 차량이 전환을 실행하기 시작하는 시간입니다.travelDuration
은 전환을 완료하기 위해 차량이 이동해야 하는 시간입니다.travelDistanceMeters
는 전환을 완료하기 위해 차량이 이동해야 하는 거리(미터)입니다.trafficInfoUnavailable
는 전환에 트래픽 데이터를 사용할 수 있는지 여부를 나타냅니다.waitDuration
는 차량이 다음Visit
를 시작하기 전에 대기하는 유휴 시간을 나타냅니다. 이는 다음Visit
의start_time
로 인해 발생할 수 있습니다.totalDuration
는 이동, 대기, 휴식, 지연 시간을 포함한 전환의 총 시간입니다.vehicleLoads
는 이 전환 중에 차량이 운반하는 짐의 양에 짐 유형을 매핑합니다.
Transition
예시는 다음과 같습니다.
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
vists
와 transitions
의 관계에 관한 자세한 내용은 픽업 및 배송 중지 주문 최적화 및 ShipmentRoute
참조 문서 (REST, gRPC)를 참고하세요. Transition
메시지의 routePolyline
및 routeToken
속성에 관한 자세한 내용은 전환 다중선 및 경로 토큰을 참고하세요.
측정항목 속성
Metrics
메시지 (REST, gRPC)는 전체 솔루션을 요약합니다.
몇 가지 중요한 Metrics
속성은 다음과 같습니다.
totalCost
은(는) 경로를 완료하는 데 발생한 총 비용입니다. 비용 모델 매개변수에서 비용에 대해 자세히 알아보세요.usedVehicleCount
는 솔루션에 사용되는 총 차량 수입니다. 옵티마이저가 차량 사용이 불필요하다고 판단하면 차량의 경로가 비어 있을 수 있습니다.skippedMandatoryShipmentCount
는 건너뛴 '필수' 배송의 수입니다. 필수 배송은 배송을 건너뛰면 발생하는penaltyCost
를 지정하지 않습니다. 지정된 제약 조건에 따라 실행할 수 없는 경우에도 필수 전송을 건너뛸 수 있습니다. 비용 모델 매개변수에서 비용에 대해 자세히 알아보세요.
추가 측정항목은 AggregatedMetrics
메시지 (REST, gRPC)로 보고됩니다. AggregatedMetrics
메시지 유형은 Metrics.aggregatedRouteMetrics
속성에 사용되며 ShipmentRoute.metrics
속성의 경우 Metrics.aggregatedRouteMetrics
에는 OptimizeToursResponse
의 모든 ShipmentRoute
에서 집계된 측정항목이 포함됩니다. 각 ShipmentRoute.metrics
속성에는 해당 ShipmentRoute
의 측정항목이 포함됩니다.
중요한 AggregatedMetrics
속성은 다음과 같습니다.
performedShipmentCount
는 차량이 전체 경로에서 수행한 배송 수입니다.travelDuration
은 차량이 경로를 완료하는 동안 운송에 소비한 총 시간입니다.waitDuration
는 차량이 경로를 완료하는 동안 대기하는 데 소비한 총 시간입니다.delayDuration
는 차량의 총 지연 시간입니다. 이는 요청에TransitionAttributes
가 사용되지 않는 한 일반적으로 0입니다.breakDuration
은 차량이 경로를 완료하는 동안 휴식 시간에 소비한 총 시간입니다.visitDuration
는 차량이 경로를 완료하는 동안 방문을 실행하는 데 소비한 총 시간입니다. 이는 해당 차량에 할당된Visit
에 해당하는VisitRequest
의 모든VisitRequest.duration
값의 합계입니다.totalDuration
는 차량 경로를 완료하는 데 필요한 총 시간입니다.travelDistanceMeters
은 차량이 경로를 완료하는 동안 이동한 총거리입니다.maxLoads
는 루트의 어느 지점에서든 차량이 운송하는 최대 짐의 양에 짐 유형을 매핑합니다.
Metrics
메시지 예시는 다음과 같습니다.
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
전체 예
요청 구성의 요청에 대한 전체 응답 예는 다음과 같습니다.
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}