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. ChaqueRoute
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:
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 latimeWindow
de la collecte ou de la livraison d'un envoi est très étroite, il est possible qu'il ne soit pas possible ou rentable pour un véhicule d'effectuer la visite dans la période requise.validationErrors[]
spécifie les erreurs qui rendent la requête non valide ou impossible à résoudre lorsque le paramètresolvingMode
de la requête est défini surVALIDATE_ONLY
En modeDEFAULT_SOLVE
normal, les erreurs de validation apparaître 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'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'index basé sur zéro de l'Vehicle
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 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 valeurVisitRequest
issueShipment.pickups
ouShipment.deliveries
dans la requête correspondante que représenteVisit
. 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 chargementVisit
Les quantités de charge sont négatives pour les visites de livraison, car elles représentent la charge retirée 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 démarrer son prochainVisit
. Cela peut être dû à lastart_time
suivantVisit
.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 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
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
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
est le nombre d'expéditions ignorées qui sont "obligatoires". Une livraison obligatoire ne spécifie pas depenaltyCost
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
correspond au nombre d'envois effectués par les véhicules sur l'ensemble de leur parcours.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 siTransitionAttributes
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 passé par les véhicules à effectuer des visites lors de l'exécution de leurs itinéraires. C'est en fait la somme de toutes ValeursVisitRequest.duration
pour lesVisitRequest
correspondant auxVisit
attribuée au véhicule concerné.totalDuration
correspond à la durée totale nécessaire pour effectuer les trajets des véhicules.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
}
}
}