응답 해석

유럽 경제 지역 (EEA) 개발자

Route Optimization API는 해당 요청의 차량 경로를 반환합니다. 배송은 차량에 할당되거나 요청의 속성에 따라 건너뛸 수 있습니다.

OptimizeToursResponse 메시지 (REST, gRPC)에는 다음과 같은 두 가지 주요 최상위 속성이 있습니다.

  • routes[]는 각 차량의 경로와 할당된 배송입니다. 각 Route에는 해당 개별 경로의 속성을 반영하는 측정항목이 포함됩니다.
  • metrics는 모든 차량과 경로 계획에 걸쳐 전체 응답에 대한 집계된 측정항목입니다. 최상위 측정항목에는 경로별 측정항목과 동일한 속성이 포함되며, 값은 모든 경로에 걸쳐 집계됩니다.

최적화 결과에 따라 일부 속성이 항상 채워지지 않을 수 있습니다.

  1. skippedShipments[]에는 차량으로 수행되지 않은 배송이 나열됩니다. 지정된 제약 조건 내에서 배송을 수행할 수 없거나 배송 비용이 벌금 비용을 초과하는 경우 배송을 건너뛸 수 있습니다. 예를 들어 배송의 수령 또는 배송 timeWindow가 매우 좁은 경우 차량이 필수 시간 내에 방문을 수행하는 것이 불가능하거나 비용 효율적이지 않을 수 있습니다.
  2. validationErrors[]는 요청의 solvingModeVALIDATE_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 응답에서 이 속성이 생략됩니다.
  • visitRequestIndexVisit이 나타내는 해당 요청의 Shipment.pickups 또는 Shipment.deliveries에서 가져온 VisitRequest의 0부터 시작하는 색인입니다. 값이 0인 경우 REST 응답에서 이 속성이 생략됩니다.
  • startTime은 방문이 시작될 것으로 예상되는 시간입니다.
  • loadDemandsVisit을 완료하는 데 필요한 로드 양식에 로드 유형을 매핑합니다. 배송 방문의 경우 차량에서 제거되는 상품을 나타내므로 적재량이 음수입니다.

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를 시작하기 전에 대기하는 유휴 시간을 나타냅니다. 이는 다음 Visitstart_time로 인해 발생할 수 있습니다.
  • totalDuration는 이동, 대기, 휴식, 지연 시간을 포함한 전환의 총 지속 시간입니다.
  • vehicleLoads는 이 전환 중에 차량이 운반하는 적재 유형을 적재량에 매핑합니다.

Transition 예시는 다음과 같습니다.

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

viststransitions의 관계에 대한 자세한 내용은 수령 및 배송 중지 순서 최적화ShipmentRoute 참고 문서 (REST, gRPC)를 참고하세요. Transition 메시지의 routePolylinerouteToken 속성에 대한 자세한 내용은 전환 폴리라인 및 경로 토큰을 참고하세요.

측정항목 속성

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
    }
  }
}