L'API Route Optimization renvoie les routes pour les véhicules dans la requête correspondante. Les expéditions sont attribuées à des véhicules ou peuvent être ignorées en fonction des propriétés de la requête.
Un message OptimizeToursResponse
(REST, gRPC) possède deux propriétés de premier niveau principales:
routes[]
correspond aux itinéraires de chaque véhicule avec les livraisons qui lui sont attribuées. ChaqueRoute
contient des métriques reflétant les propriétés de cette route individuelle.- Les
metrics
sont des métriques agrégées pour l'ensemble de la réponse, pour tous les véhicules et tous les plans d'itinéraire. Les métriques de premier niveau contiennent les mêmes propriétés que les métriques par itinéraire, avec des valeurs agrégées pour tous les itinéraires.
Il est possible que certaines propriétés ne soient pas toujours renseignées en fonction des résultats de l'optimisation:
skippedShipments[]
répertorie les livraisons qui ne sont effectuées par aucun véhicule. Une livraison peut être ignorée si elle ne peut pas être effectuée dans les limites spécifiées ou si le coût d'exécution de la livraison dépasse le montant des pénalités. Par exemple, si l'enlèvement ou la livraison d'un colis est associé à untimeWindow
très restreint, il peut être impossible ou rentable pour un véhicule d'effectuer la visite pendant la période requise.validationErrors[]
spécifie les erreurs qui rendent la requête non valide ou impossible à résoudre lorsque sonsolvingMode
est défini surVALIDATE_ONLY
. En modeDEFAULT_SOLVE
normal, les erreurs de validation apparaissent dans un message d'erreur au lieu du corps de la réponse. Notez que le mode de résolutionVALIDATE_ONLY
peut signaler plusieurs erreurs à la fois, ce qui est utile 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'affectation d'un itinéraire à un véhicule particulier de la requête. Voici quelques propriétés ShipmentRoute
importantes liées au Vehicle
correspondant:
vehicleIndex
est l'index de base zéro duVehicle
dans le message de requête correspondant. 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 est censé terminer son itinéraire.
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 complétera. Chaque Visit
(REST, gRPC) représente un VisitRequest
(REST, gRPC) de la requête correspondante. Voici les propriétés Visit
importantes:
shipmentIndex
est l'indice de base zéro de la livraison à laquelle cette visite appartient dans la requête correspondante.isPickup
a la valeur "true" lorsqu'une visite correspond à un retrait en magasin et la valeur "false" lorsqu'une visite est une livraison. Les réponses REST omettent cette propriété lorsque la valeur est "false".visitRequestIndex
est l'indice de base zéro duVisitRequest
à partir deShipment.pickups
ou deShipment.deliveries
dans la requête correspondante représentée parVisit
. Les réponses REST omettent cette propriété lorsque la valeur est égale à zéro.startTime
est l'heure de début prévue de la visite.loadDemands
: type de chargement de cartes permettant de charger la quantité demandée pour terminer leVisit
. Les volumes de chargement sont négatifs pour les visites de livraison, ce qui correspond à la suppression de la charge 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 les trajets entre visits
pour un véhicule donné. Les propriétés importantes du message Transition
(REST, gRPC) incluent:
startTime
est l'heure à laquelle le véhicule commencera à effectuer la transition.travelDuration
est la durée pendant laquelle le véhicule doit circuler pour effectuer la transition.travelDistanceMeters
est la distance, exprimée en mètres, que le véhicule doit parcourir pour effectuer la transition.trafficInfoUnavailable
indique si des données de trafic sont disponibles pour la transition.waitDuration
représente le temps d'inactivité que le véhicule passe à attendre avant de pouvoir démarrer son prochainVisit
. Cela peut être dû à lastart_time
desVisit
suivants.totalDuration
est la durée totale de la transition, y compris les temps de trajet, d'attente, de pause et de retard.vehicleLoads
mappe le type de chargement à la quantité de chargement transportée par le véhicule lors de 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 la section Optimisation des commandes à livrer à l'arrêt, ainsi que dans la documentation de référence 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. Pour en savoir plus sur les coûts, consultez la page 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 qui sont "obligatoires". Une livraison obligatoire ne spécifie pas de valeurpenaltyCost
qui sera appliquée si la livraison est ignorée. Les envois obligatoires peuvent toujours être ignorés si leurs performances ne sont pas réalisables sous les contraintes 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 sous la forme de messages AggregatedMetrics
(REST, gRPC). Le type de message AggregatedMetrics
est utilisé pour la propriété Metrics.aggregatedRouteMetrics
. Pour la propriété ShipmentRoute.metrics
, Metrics.aggregatedRouteMetrics
contient des métriques agrégées pour tous les ShipmentRoute
de OptimizeToursResponse
. Chaque propriété ShipmentRoute.metrics
contient des métriques pour ce ShipmentRoute
spécifique.
Voici quelques propriétés AggregatedMetrics
importantes:
performedShipmentCount
correspond au 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 pendant leur trajet.waitDuration
correspond au temps total d'attente des véhicules pour terminer leur itinéraire.delayDuration
correspond au temps de retard total des véhicules. Elle est généralement égale à zéro, sauf siTransitionAttributes
est utilisé dans la requête.breakDuration
correspond au temps total que les véhicules passent en pause pendant leur trajet.visitDuration
est le temps total que les véhicules passent à effectuer des visites pendant leur itinéraire. Il s'agit en fait de la somme de toutes les valeursVisitRequest.duration
pour lesVisitRequest
correspondant auxVisit
attribués au véhicule concerné.totalDuration
correspond à la durée totale nécessaire pour effectuer les itinéraires empruntés par le véhicule.travelDistanceMeters
correspond à la distance totale parcourue par les véhicules lors de leur trajet.maxLoads
met en correspondance les types de chargement avec la charge maximale transportée par les véhicules à tout 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
Voici un exemple de réponse complète à la requête de la section Construire une requête:
{
"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
}
}
}