Interpréter la réponse

L'API Route Optimization renvoie des routes pour les véhicules requête. Les expéditions sont attribuées à des véhicules ou peuvent être ignorées en fonction de les propriétés de la requête.

Un message OptimizeToursResponse (REST, gRPC) présente deux instances principales propriétés:

  • routes[] correspond aux itinéraires de chaque véhicule avec les livraisons qui lui sont attribuées. Chaque Route contient des métriques reflétant les propriétés de cet itinéraire individuel.
  • Les metrics sont des métriques agrégées pour l'ensemble de la réponse, pour l'ensemble les véhicules et les plans d'itinéraire. Les métriques de premier niveau contiennent les mêmes propriétés que par route, avec des valeurs agrégées pour toutes les routes.

Il est possible que certaines propriétés ne soient pas toujours renseignées en fonction des résultats de l'optimisation:

  1. skippedShipments[] répertorie les livraisons qui ne sont effectuées par aucun véhicule. Un colis peut être ignoré s'il ne peut pas être effectué dans les délais spécifiés ou si le coût d'exécution de l'expédition dépasse le coût de pénalité. Par exemple, si la période de retrait ou de livraison d'un colis comporte timeWindow Il n'est pas toujours possible ou rentable pour un véhicule de d'effectuer la visite pendant la période requise.
  2. validationErrors[] spécifie les erreurs qui rendent la requête non valide ou impossible à résoudre lorsque le paramètre solvingMode de la requête est défini sur VALIDATE_ONLY En mode DEFAULT_SOLVE normal, les erreurs de validation apparaître dans un message d'erreur au lieu du corps de la réponse. Notez que VALIDATE_ONLY mode de résolution peut signaler plusieurs erreurs à la fois, ce qui est utiles pour déboguer rapidement les requêtes.

Propriétés de la route

Chaque entrée routes[] est un message ShipmentRoute (REST, gRPC). Chaque ShipmentRoute représente l'itinéraire attribué à un véhicule spécifique à partir de la demande. Propriétés ShipmentRoute importantes liées aux propriétés Vehicle incluent:

  • vehicleIndex est l'indice de base zéro du Vehicle dans la message de requête. Les réponses REST omettent cette propriété lorsque la valeur est égale à zéro.
  • vehicleStartTime correspond à l'heure à laquelle le véhicule doit commencer son itinéraire.
  • vehicleEndTime est l'heure à laquelle le véhicule doit terminer sa via un routage réseau.

Dans une réponse, routes se présentera comme suit:

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

Chaque ShipmentRoute inclut une liste numérotée de visits que le véhicule terminé. Chaque Visit (REST, gRPC) représente un VisitRequest (REST, gRPC) à partir de la requête correspondante. Important Visit sont les suivantes:

  • shipmentIndex correspond à l'indice de base zéro du colis à laquelle appartient cette visite. dans la requête correspondante.
  • isPickup a la valeur "true" lorsqu'une visite est considérée comme un retrait et la valeur "false" lorsqu'il s'agit d'une visite la livraison. Les réponses REST omettent cette propriété lorsque la valeur est "false".
  • visitRequestIndex est l'indice base zéro de la valeur VisitRequest issue Shipment.pickups ou Shipment.deliveries dans la requête correspondante que représente Visit. Les réponses REST omettent cette propriété lorsque la méthode est égale à zéro.
  • startTime est l'heure de début prévue de la visite.
  • loadDemands type de chargement de cartes à charger pour effectuer le chargement Visit Les volumes chargés sont négatifs pour les visites liées à la livraison. Ils correspondent à la charge en train d'être retiré du véhicule.

Voici un exemple de Visit:

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

Chaque ShipmentRoute inclut une liste numérotée de transitions qui représentent de trajets entre visits pour un véhicule donné. Message important Transition (REST, gRPC) incluent:

  • startTime est l'heure à laquelle le véhicule commencera à effectuer la transition.
  • travelDuration correspond à la durée du trajet jusqu'au terminer la transition.
  • travelDistanceMeters est la distance en mètres que le véhicule doit pour effectuer la transition.
  • trafficInfoUnavailable indique si des données de trafic sont disponibles pour transition.
  • waitDuration représente le temps d'inactivité que le véhicule passe à attendre avant de pouvoir commencer son prochain Visit. Cela peut être dû à la start_time suivant Visit.
  • totalDuration est la durée totale de la transition, voyage compris les temps d'attente, de pause et de retard.
  • vehicleLoads mappe le type de chargement pour charger la quantité transportée par le véhicule pendant cette transition.

Voici un exemple de Transition:

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

La relation entre vists et transitions est décrite dans Optimisation des commandes à livrer à l'arrêt et à emporter, de même que Documentation de référence sur ShipmentRoute (REST, gRPC).

Propriétés des métriques

Le message Metrics (REST, gRPC) résume la solution dans son ensemble. Voici quelques propriétés Metrics importantes:

  • totalCost correspond au coût total facturé pour les itinéraires. En savoir plus sur les coûts dans Paramètres du modèle de coût.
  • usedVehicleCount est le nombre total de véhicules utilisés dans la solution. Les véhicules peuvent avoir des itinéraires vides lorsque l'optimiseur détermine que leur utilisation n'est pas nécessaire.
  • skippedMandatoryShipmentCount correspond au nombre de livraisons ignorées "obligatoire". Une livraison obligatoire ne spécifie pas de penaltyCost en cas de non-livraison. Les livraisons obligatoires peuvent toujours être ignorées si leurs performances ne sont pas réalisables dans les limites spécifiées. Pour en savoir plus sur les coûts, consultez l'article Paramètres du modèle de coût.

Les métriques supplémentaires sont signalées par des messages AggregatedMetrics (REST, gRPC). Le type de message AggregatedMetrics est utilisé pour Propriété Metrics.aggregatedRouteMetrics et pour ShipmentRoute.metrics la propriété Metrics.aggregatedRouteMetrics contient des métriques agrégées ShipmentRoute dans le OptimizeToursResponse. Chaque ShipmentRoute.metrics contient des métriques pour cet ShipmentRoute spécifique.

Voici quelques propriétés AggregatedMetrics importantes:

  • performedShipmentCount est le nombre de livraisons effectuées par les véhicules sur l'ensemble de leurs itinéraires.
  • travelDuration correspond au temps total que les véhicules passent en transit pour terminer leur parcours.
  • waitDuration est le temps total que les véhicules ont passé à attendre pendant la fin leurs itinéraires.
  • delayDuration correspond au temps de retard total des véhicules. C'est généralement zéro, sauf si TransitionAttributes est utilisé dans la requête.
  • breakDuration correspond au temps total que les véhicules passent en pause pour terminer leur parcours.
  • visitDuration correspond au temps total que les véhicules passent à effectuer des visites pour terminer leur parcours. C'est en fait la somme de toutes Valeurs VisitRequest.duration pour les VisitRequest correspondant aux Visit attribuée au véhicule concerné.
  • totalDuration est la durée totale nécessaire pour terminer les routes.
  • travelDistanceMeters correspond à la distance totale parcourue par les véhicules lorsque pour terminer leur parcours.
  • maxLoads associe les types de chargement à la quantité de chargement maximale autorisée par des véhicules à n'importe quel moment de leur itinéraire.

Voici un exemple de message 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
    }
  }
}

Exemple complet

Un exemple complet de réponse à la requête de la section Construire une requête ressemble à par exemple:

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