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부터 시작하는 색인입니다. REST 응답은 값이 0인 경우 이 속성을 생략합니다.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입니다. REST 응답은 값이 false인 경우 이 속성을 생략합니다.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은 차량이 경로를 완료하는 동안 방문을 수행하는 총시간입니다. 이는 적용 가능한 차량에 할당된Visits에 해당하는VisitRequests의 모든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
}
}
}