L'API Route Optimization renvoie des itinéraires 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 demande.
Un message OptimizeToursResponse
(REST, gRPC) comporte deux propriétés de premier niveau principales :
routes[]
: itinéraires de chaque véhicule avec les expéditions qui lui sont attribuées. ChaqueRoute
contient des métriques reflétant les propriétés de cet itinéraire.metrics
sont des métriques agrégées pour l'ensemble de la réponse, pour tous les véhicules et plans de route. Les métriques de niveau supérieur contiennent les mêmes propriétés que les métriques 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 :
skippedShipments[]
liste les expéditions qui ne sont effectuées par aucun véhicule. Un envoi peut être ignoré s'il ne peut pas être effectué dans les limites spécifiées ou si le coût de l'envoi dépasse son coût de pénalité. Par exemple, si l'enlèvement ou la livraison d'un colis a unetimeWindow
très courte, il peut être impossible ou peu rentable pour un véhicule d'effectuer la visite pendant le créneau horaire requis.validationErrors[]
spécifie les erreurs qui rendent la requête non valide ou impossible à résoudre lorsque lesolvingMode
de la requête est défini surVALIDATE_ONLY
. En modeDEFAULT_SOLVE
normal, les erreurs de validation s'affichent dans un message d'erreur au lieu du corps de la réponse. Notez que le modeVALIDATE_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'attribution d'un itinéraire à un véhicule spécifique de la requête. Les propriétés importantes de ShipmentRoute
liées à son Vehicle
correspondant incluent :
vehicleIndex
est l'index basé sur zéro deVehicle
dans le message de requête correspondant. Les réponses REST omettent cette propriété lorsque la valeur est nulle.vehicleStartTime
correspond à l'heure à laquelle le véhicule doit commencer son trajet.vehicleEndTime
correspond à l'heure à laquelle le véhicule devrait terminer son trajet.
Dans une réponse, routes
se présente comme suit :
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Chaque ShipmentRoute
inclut une liste ordonnée de visits
que le véhicule doit effectuer. Chaque Visit
(REST, gRPC) représente un VisitRequest
(REST, gRPC) de la requête correspondante. Voici les propriétés importantes de Visit
:
shipmentIndex
correspond à l'index de base zéro de l'envoi auquel appartient cette visite dans la requête correspondante.isPickup
est défini sur "true" lorsqu'une visite est un retrait et sur "false" lorsqu'une visite est une livraison. Les réponses REST omettent cette propriété lorsque la valeur est "false".visitRequestIndex
est l'index basé sur zéro deVisitRequest
à partir deShipment.pickups
ouShipment.deliveries
dans la requête correspondante queVisit
représente. Les réponses REST omettent cette propriété lorsque la valeur est nulle.startTime
est l'heure à laquelle la visite doit commencer.loadDemands
mappe le type de chargement à la quantité de chargement requise pour effectuer leVisit
. Les quantités chargées sont négatives pour les visites de livraison, ce qui signifie que la charge est retirée du véhicule.
Voici un exemple de fichier Visit
:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Chaque ShipmentRoute
inclut une liste ordonnée de transitions
qui représentent les déplacements entre les visits
pour un véhicule donné. Les propriétés importantes des messages Transition
(REST, gRPC) incluent :
startTime
correspond à l'heure à laquelle le véhicule commencera la transition.travelDuration
correspond à la durée pendant laquelle le véhicule doit se déplacer pour effectuer la transition.travelDistanceMeters
correspond à la distance en mètres que le véhicule doit parcourir pour terminer la transition.trafficInfoUnavailable
indique si des données sur le trafic sont disponibles pour la transition.waitDuration
représente le temps d'inactivité pendant lequel le véhicule attend avant de pouvoir démarrer son prochainVisit
. Cela peut être dû à lastart_time
desVisit
suivants.totalDuration
correspond à 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 charge à la quantité de charge transportée par le véhicule pendant cette transition.
Voici un exemple de fichier Transition
:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Pour en savoir plus sur la relation entre vists
et transitions
, consultez Optimisation de l'ordre des arrêts pour les enlèvements et les livraisons et la documentation de référence ShipmentRoute
(REST, gRPC). Pour en savoir plus sur les propriétés routePolyline
et routeToken
d'un message Transition
, consultez Polylignes de transition et jetons de route.
Propriétés des métriques
Le message Metrics
(REST, gRPC) résume l'ensemble de la solution.
Voici quelques propriétés importantes de Metrics
:
totalCost
correspond au coût total encouru pour effectuer les itinéraires. En savoir plus sur les coûts dans Paramètres du modèle de coûtsusedVehicleCount
correspond au 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 d'expéditions obligatoires ignorées. Une expédition obligatoire ne spécifie pas depenaltyCost
qui est encouru si l'expédition est ignorée. Les expéditions obligatoires peuvent toujours être ignorées si leurs performances ne sont pas réalisables dans les limites spécifiées. En savoir plus sur les coûts dans Paramètres du modèle de coûts
Les métriques supplémentaires sont signalées sous forme de messages AggregatedMetrics
(REST, gRPC). Le type de message AggregatedMetrics
est utilisé pour la propriété Metrics.aggregatedRouteMetrics
et pour la propriété ShipmentRoute.metrics
. La propriété Metrics.aggregatedRouteMetrics
contient des métriques agrégées pour tous les ShipmentRoute
dans OptimizeToursResponse
. Chaque propriété ShipmentRoute.metrics
contient des métriques pour ce ShipmentRoute
spécifique.
Voici quelques propriétés importantes de AggregatedMetrics
:
performedShipmentCount
correspond au nombre d'expéditions effectuées par les véhicules sur l'ensemble de leurs itinéraires.travelDuration
correspond à la durée totale pendant laquelle les véhicules sont en transit pour effectuer leurs itinéraires.waitDuration
correspond au temps total passé par les véhicules à attendre pendant qu'ils effectuent leurs itinéraires.delayDuration
correspond au temps de retard total des véhicules. Cette valeur est généralement nulle, sauf si desTransitionAttributes
sont utilisés dans la requête.breakDuration
correspond à la durée totale des pauses des véhicules lors de leurs trajets.visitDuration
correspond au temps total passé par les véhicules à effectuer des visites lors de leurs trajets. 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 des véhicules.travelDistanceMeters
correspond à la distance totale parcourue par les véhicules pour effectuer leurs itinéraires.maxLoads
mappe les types de chargement à la quantité de chargement maximale transportée par les véhicules à tout moment sur leurs itinéraires.
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 Créer 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
}
}
}