Interpreta la respuesta

Desarrolladores del Espacio Económico Europeo (EEE)

La API de Route Optimization devuelve rutas para los vehículos en la solicitud correspondiente. Los envíos se asignan a vehículos o se pueden omitir según las propiedades de la solicitud.

Un mensaje OptimizeToursResponse (REST, gRPC) tiene dos propiedades principales de nivel superior:

  • routes[] son las rutas de cada vehículo con sus envíos asignados. Cada Route contiene métricas que reflejan las propiedades de esa ruta individual.
  • metrics son métricas agregadas para toda la respuesta, en todos los vehículos y planes de ruta. Las métricas de nivel superior contienen las mismas propiedades que las métricas por ruta, con valores agregados en todas las rutas.

Es posible que algunas propiedades no siempre se completen según los resultados de la optimización:

  1. skippedShipments[] enumera los envíos que no se realizan con ningún vehículo. Se puede omitir un envío si no se puede realizar dentro de las restricciones especificadas o si el costo de realizar el envío supera su costo de penalización. Por ejemplo, si el retiro o la entrega de un envío tiene un timeWindow muy estrecho, es posible que no sea posible o rentable que un vehículo realice la visita durante el período requerido.
  2. validationErrors[] especifica errores que invalidan la solicitud o la imposibilitan cuando el solvingMode de la solicitud se establece en VALIDATE_ONLY. En el modo DEFAULT_SOLVE normal, los errores de validación aparecerán en un mensaje de error en lugar del cuerpo de la respuesta. Ten en cuenta que el modo de resolución de VALIDATE_ONLY puede informar varios errores a la vez, lo que resulta útil para depurar solicitudes rápidamente.

Propiedades de la ruta

Cada entrada routes[] es un mensaje ShipmentRoute (REST, gRPC). Cada ShipmentRoute representa la asignación de ruta para un vehículo en particular de la solicitud. Las propiedades ShipmentRoute importantes relacionadas con su Vehicle correspondiente incluyen lo siguiente:

  • vehicleIndex es el índice basado en cero del Vehicle en el mensaje de solicitud correspondiente. Las respuestas de REST omiten esta propiedad cuando el valor es cero.
  • vehicleStartTime es la hora en la que el vehículo debe comenzar su ruta.
  • vehicleEndTime es la hora en la que se espera que el vehículo termine su ruta.

En una respuesta, routes se verá de la siguiente manera:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

Cada ShipmentRoute incluye una lista ordenada de visits que completará el vehículo. Cada Visit (REST, gRPC) representa un VisitRequest (REST, gRPC) de la solicitud correspondiente. Las propiedades importantes de Visit incluyen las siguientes:

  • shipmentIndex es el índice basado en cero del envío al que pertenece esta visita en la solicitud correspondiente.
  • isPickup es verdadero cuando una visita es una recolección y falso cuando es una entrega. Las respuestas de REST omiten esta propiedad cuando el valor es falso.
  • visitRequestIndex es el índice basado en cero del VisitRequest de Shipment.pickups o Shipment.deliveries en la solicitud correspondiente que representa el Visit. Las respuestas de REST omiten esta propiedad cuando el valor es cero.
  • startTime es la hora en la que se espera que comience la visita.
  • loadDemands asigna el tipo de carga a la cantidad de carga solicitada para completar el Visit. Los importes de carga son negativos para las visitas de entrega, lo que representa la carga que se quita del vehículo.

Un ejemplo de Visit se ve de la siguiente manera:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

Cada ShipmentRoute incluye una lista ordenada de transitions que representan el viaje entre visits para un vehículo determinado. Las propiedades importantes de los mensajes Transition (REST, gRPC) incluyen las siguientes:

  • startTime es la hora a la que el vehículo comenzará a realizar la transición.
  • travelDuration es la duración durante la cual el vehículo debe viajar para completar la transición.
  • travelDistanceMeters es la distancia en metros que debe recorrer el vehículo para completar la transición.
  • trafficInfoUnavailable indica si hay datos de tráfico disponibles para la transición.
  • waitDuration representa el tiempo de inactividad que el vehículo pasa esperando antes de poder comenzar su próximo Visit. Esto puede deberse a la start_time de los siguientes Visit.
  • totalDuration es la duración total de la transición, incluidos los tiempos de viaje, espera, descanso y demora.
  • vehicleLoads asigna el tipo de carga al importe de carga que transporta el vehículo durante esta transición.

Un ejemplo de Transition se ve de la siguiente manera:

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

Para obtener más información sobre la relación entre vists y transitions, consulta Optimización del orden de paradas de retiro y entrega y la documentación de referencia de ShipmentRoute (REST, gRPC). Para obtener más información sobre las propiedades routePolyline y routeToken de un mensaje Transition, consulta Polilíneas de transición y tokens de ruta.

Propiedades de las métricas

El mensaje Metrics (REST, gRPC) resume toda la solución. Algunas propiedades importantes de Metrics son las siguientes:

  • totalCost es el costo total incurrido para completar las rutas. Obtén más información sobre los costos en Parámetros del modelo de costos.
  • usedVehicleCount es la cantidad total de vehículos que se usan en la solución. Los vehículos pueden tener rutas vacías cuando el optimizador determina que su uso es innecesario.
  • skippedMandatoryShipmentCount es la cantidad de envíos omitidos que son "obligatorios". Un envío obligatorio no especifica un penaltyCost en el que se incurre si se omite el envío. Los envíos obligatorios aún se pueden omitir si su rendimiento no es factible según las restricciones especificadas. Obtén más información sobre los costos en Cost Model Parameters.

Las métricas adicionales se registran como mensajes AggregatedMetrics (REST, gRPC). El tipo de mensaje AggregatedMetrics se usa para la propiedad Metrics.aggregatedRouteMetrics y para la propiedad ShipmentRoute.metrics. La propiedad Metrics.aggregatedRouteMetrics contiene métricas agregadas en todos los ShipmentRoute de OptimizeToursResponse. Cada propiedad ShipmentRoute.metrics contiene métricas para ese ShipmentRoute específico.

Las propiedades importantes de AggregatedMetrics incluyen las siguientes:

  • performedShipmentCount es la cantidad de envíos que realizan los vehículos en todas sus rutas.
  • travelDuration es el tiempo total que los vehículos pasan en tránsito mientras completan sus rutas.
  • waitDuration es el tiempo total que los vehículos pasan esperando mientras completan sus rutas.
  • delayDuration es el tiempo total de retraso de los vehículos. Por lo general, es cero, a menos que se usen TransitionAttributes en la solicitud.
  • breakDuration es el tiempo total que los vehículos pasan en descansos mientras completan sus rutas.
  • visitDuration es el tiempo total que los vehículos dedican a realizar visitas mientras completan sus rutas. Este valor es, en efecto, la suma de todos los valores de VisitRequest.duration para los VisitRequests correspondientes a los Visits asignados al vehículo aplicable.
  • totalDuration es la duración total requerida para completar las rutas de los vehículos.
  • travelDistanceMeters es la distancia total recorrida por los vehículos mientras completan sus rutas.
  • maxLoads asigna los tipos de carga a la cantidad máxima de carga que transportan los vehículos en cualquier punto de sus rutas.

Un ejemplo de mensaje de Metrics se ve de la siguiente manera:

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

Ejemplo completo

A continuación, se muestra un ejemplo de respuesta completa para la solicitud de Cómo crear una solicitud:

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