Remarque pour la production
Par souci de simplicité, ce guide utilise REST et JSON. Toutefois, pour votre environnement de production, il est globalement recommandé d'utiliser gRPC et les bibliothèques clientes pour de meilleures performances. Pour en savoir plus, consultez Bibliothèques clientes de l'API Route Optimization.
Après avoir envoyé la requête dans Envoyer votre première requête, l'optimiseur renvoie un OptimizeToursResponse. Cette réponse correspond au plan d'itinéraire que votre conducteur doit suivre. Ce guide vous explique comment le lire.
Résumé du plan d'itinéraire
Pour le scénario de la garderie pour chiens, l'optimiseur attribue le bouvier bernois et le chihuahua à votre camionnette, et ignore le berger allemand. Le plan d'itinéraire de votre conducteur est le suivant :
- Commencer à travailler à 7h55 à la crèche.
- Récupère le bouvier bernois près de la Coit Tower à 8h20.
- Récupérer le chihuahua au South Sunset Playground Park à 8h58.
- Vous revenez à la garderie à 9h24 et attendez l'ouverture de la fenêtre de dépôt à 9h30.
- Déposer le bouvier bernois à 9h30.
- Déposez le chihuahua à 9h35.
- Fin de la période de travail à 9h40.
Le plan d'itinéraire coûte 147,22 $, y compris une pénalité de 100 $ pour avoir ignoré le berger allemand.
Pour vérifier vos résultats, comparez votre réponse à l'exemple de réponse complet. Vos résultats peuvent être légèrement différents, car les temps de trajet et les distances dépendent des données routières actuelles.
Exemple de réponse complète
{ "routes": [ { "vehicleStartTime": "2024-02-13T15:55:04Z", "vehicleEndTime": "2024-02-13T17:40:00Z", "visits": [ { "isPickup": true, "startTime": "2024-02-13T16:20:00Z", "detour": "0s", "shipmentLabel": "Bernese mountain dog", "visitType": "PICKUP_SHIPMENT" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2024-02-13T16:58:12Z", "detour": "2600s", "shipmentLabel": "Chihuahua", "visitType": "PICKUP_SHIPMENT" }, { "startTime": "2024-02-13T17:30:00Z", "detour": "2297s", "shipmentLabel": "Bernese mountain dog", "visitType": "DELIVER_SHIPMENT" }, { "shipmentIndex": 1, "startTime": "2024-02-13T17:35:00Z", "detour": "656s", "shipmentLabel": "Chihuahua", "visitType": "DELIVER_SHIPMENT" } ], "transitions": [ { "travelDuration": "1496s", "travelDistanceMeters": 7082, "waitDuration": "0s", "totalDuration": "1496s", "startTime": "2024-02-13T15:55:04Z" }, { "travelDuration": "1992s", "travelDistanceMeters": 16589, "waitDuration": "0s", "totalDuration": "1992s", "startTime": "2024-02-13T16:25:00Z" }, { "travelDuration": "1252s", "travelDistanceMeters": 7860, "waitDuration": "356s", "totalDuration": "1608s", "startTime": "2024-02-13T17:03:12Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2024-02-13T17:35:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2024-02-13T17:40:00Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "4740s", "waitDuration": "356s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "6296s", "travelDistanceMeters": 31531, "performedShipmentPenaltyCostSum": 2000 }, "routeCosts": { "model.vehicles.cost_per_hour": 47.22 }, "routeTotalCost": 47.22, "vehicleFullness": { "maxFullness": 0.3497777777777778, "activeSpan": 0.3497777777777778 } } ], "skippedShipments": [ { "index": 2, "label": "German shepherd", "penaltyCost": 100 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "4740s", "waitDuration": "356s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "6296s", "travelDistanceMeters": 31531, "performedShipmentPenaltyCostSum": 2000 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2024-02-13T15:55:04Z", "latestVehicleEndTime": "2024-02-13T17:40:00Z", "totalCost": 147.22, "costs": { "model.vehicles.cost_per_hour": 47.22, "model.shipments.penalty_cost": 100 } } }
Structure de la réponse
OptimizeToursResponse contient deux composants principaux :
routes: plan d'itinéraire pour chaque véhicule de votre flotte, y compris l'ordre et les horaires de chaque prise en charge et livraison. Vous avez un fourgon, donc un plan d'itinéraire.metrics: résumé de l'ensemble du plan d'itinéraire, y compris le coût total, la durée et la distance.
Comme l'optimiseur ignore le berger allemand, la réponse inclut également skippedShipments.
Les sections suivantes vous indiquent où trouver chaque détail du résumé du plan d'itinéraire dans la réponse.
Quel véhicule emprunte quel itinéraire ?
L'optimiseur génère un plan d'itinéraire (le tableau routes) qui correspond à l'ordre des vehicles dans votre requête.
Le champ vehicleIndex identifie chaque véhicule en fonction de sa position (index de base zéro), qui est de 0 pour votre camionnette. Les champs vehicleStartTime et vehicleEndTime indiquent au conducteur quand commencer et terminer son service.
L'API Route Optimization renvoie les codes temporels au format UTC, marqués par le suffixe Z, quel que soit le décalage dans votre requête. Pour obtenir l'heure de San Francisco, soustrayez huit heures. Pour votre camionnette, l'équipe s'étend de 7h55 à 9h40, comme indiqué dans l'exemple de code suivant.
{
"routes": [
{
// "vehicleIndex": 0, // Omitted in actual JSON response because it's 0
"vehicleStartTime": "2024-02-13T15:55:04Z",
"vehicleEndTime": "2024-02-13T17:40:00Z",
...
}
]
...
}
Quel est l'ordre de prise en charge et de dépose ?
Dans chaque itinéraire, le tableau visits contient chaque prise en charge et livraison pour le véhicule attribué, par ordre chronologique.
La valeur shipmentIndex de chaque visite correspond à la position de l'envoi dans votre requête (en commençant par zéro) : 0 correspond au bouvier bernois et 1 au chihuahua. Le champ shipmentLabel indique l'étiquette que vous avez définie pour chaque envoi.
Pour distinguer une prise en charge d'un dépôt (ou d'une livraison), vous pouvez vérifier les champs visitType ou isPickup :
visitType: définit explicitement l'action de visite.- Retrait :
visitType="PICKUP_SHIPMENT" - Livraison :
visitType="DELIVER_SHIPMENT"
- Retrait :
isPickup: champ d'assistance booléen.- Retrait :
isPickup=true - Livraison :
isPickup=false(omis dans JSON)
- Retrait :
Pour déterminer la séquence exacte des événements et l'heure d'arrivée prévue à chaque emplacement, lisez le tableau visits dans l'ordre. Le tableau suivant présente l'action du plan de routage en fonction de l'ordre et des valeurs des champs shipmentIndex, isPickup ou visitType, et startTime.
| Séquence | Valeur shipmentIndex |
Valeur isPickup ou visitType |
Valeur startTime (UTC) |
Action |
|---|---|---|---|---|
| Première visite | 0 (omis en JSON) | Vrai ou PICKUP_SHIPMENT |
2024-02-13T16:20:00Z | Récupérer le bouvier bernois à 8h20. |
| Deuxième visite | 1 | Vrai ou PICKUP_SHIPMENT |
2024-02-13T16:58:12Z | Récupérer le chihuahua à 8h58. |
| Troisième visite | 0 (omis en JSON) | False (omitted) ou DELIVER_SHIPMENT |
2024-02-13T17:30:00Z | Déposer le bouvier bernois à la garderie pour chiens à 9h30. |
| Quatrième visite | 1 | False (omitted) ou DELIVER_SHIPMENT |
2024-02-13T17:35:00Z | Déposer le chihuahua à la garderie pour chiens à 9h35. |
L'exemple de code suivant montre comment la réponse fournit cette séquence :
{
"routes": [
{
"visits": [
{
// "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
"isPickup": true,
"startTime": "2024-02-13T16:20:00Z",
"shipmentLabel": "Bernese mountain dog",
"visitType": "PICKUP_SHIPMENT"
},
{
"shipmentIndex": 1,
"isPickup": true,
"startTime": "2024-02-13T16:58:12Z",
"shipmentLabel": "Chihuahua",
"visitType": "PICKUP_SHIPMENT"
},
{
// "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
// "isPickup": false, // Omitted in actual JSON response because it's false
"startTime": "2024-02-13T17:30:00Z",
"shipmentLabel": "Bernese mountain dog",
"visitType": "DELIVER_SHIPMENT"
},
{
"shipmentIndex": 1,
// "isPickup": false, // Omitted in actual JSON response because it's false
"startTime": "2024-02-13T17:35:00Z",
"shipmentLabel": "Chihuahua",
"visitType": "DELIVER_SHIPMENT"
}
]
}
]
}
Chaque visite comporte également un visitRequestIndex, qui correspond à la position de base zéro de l'option de retrait ou de dépôt choisie par l'optimiseur pour l'envoi. Dans ce scénario, chaque chien n'a qu'une seule option de prise en charge et une seule option de dépose. Par conséquent, visitRequestIndex est toujours 0, et la réponse l'omet.
Que se passe-t-il entre les visites ?
Dans chaque itinéraire, le tableau transitions liste les détails du trajet entre les visites. Bien que visits et transitions soient des listes distinctes, elles s'entrelacent dans le temps, comme suit :
transitions[0](Trajet en voiture du point de départ à la première visite)visits[0](première visite)transitions[1](inciter à effectuer une deuxième visite)visits[1](deuxième visite)...visits[N-1](dernière visite, où N est le nombre total de visites)transitions[N](trajet en voiture de la dernière visite à la fin)
Vous pouvez suivre la chronologie de l'itinéraire en consultant le champ startTime dans les deux tableaux. Le startTime d'une transition correspond au moment où le conducteur commence à se déplacer, et le startTime d'une visite correspond au moment où le conducteur commence la prise en charge ou le dépôt.
Chaque transition indique la durée et la distance de trajet prévues entre les lieux.
Le tableau suivant met en correspondance les champs transitions et visits avec les actions d'itinéraire chronologiques pour le scénario de la garderie pour chiens.
| Séquence | Nom du champ | Valeur startTime (UTC) |
Détails | Action |
|---|---|---|---|---|
| Première transition | transitions[0] |
2024-02-13T15:55:04Z |
travelDuration : 1496stravelDistanceMeters : 7082 |
Parcourez 7 km pendant 25 minutes depuis la garderie pour récupérer le bouvier bernois. Le service commence à 7h55. |
| Première visite | visits[0] |
2024-02-13T16:20:00Z |
shipmentIndex : 0 (omis dans JSON)isPickup : True |
Récupérer le bouvier bernois à partir de 8h20. La visite dure 5 minutes. |
| Deuxième transition | transitions[1] |
2024-02-13T16:25:00Z |
travelDuration : 1992travelDistanceMeters : 16589 |
Parcourez 17 km en 33 minutes depuis la Coit Tower pour récupérer le chihuahua à partir de 8h25. |
| Deuxième visite | visits[1] |
2024-02-13T16:58:12Z |
shipmentIndex : 1isPickup : True |
Récupérez le chihuahua à partir de 8h58. La visite dure 5 minutes. |
| Troisième transition | transitions[2] |
2024-02-13T17:03:12Z |
travelDuration : 1 252 stravelDistanceMeters : 7 860waitDuration : 356 s |
Parcourir 8 km en 21 minutes depuis South Sunset Playground pour retourner à la garderie à partir de 9h03. Arrivée à 9h24 et attente de 6 minutes avant l'ouverture de la fenêtre de dépôt. |
| Troisième visite | visits[2] |
2024-02-13T17:30:00Z |
shipmentIndex : 0 (omis en JSON)isPickup : False (omis en JSON) |
Déposer le bouvier bernois à la garderie pour chiens à partir de 9h30. Durée de la visite : 5 minutes. |
| Quatrième transition | transitions[3] |
2024-02-13T17:35:00Z |
travelDuration : 0stravelDistanceMeters : 0 (omis dans JSON) |
Ne conduisez pas. Prêt à déposer le chihuahua à la garderie à 9h35. |
| Quatrième visite | visits[3] |
2024-02-13T17:35:00Z |
shipmentIndex : 1isPickup : False (omis dans JSON) |
Déposez le chihuahua à la garderie pour chiens à partir de 9h35. La visite dure cinq minutes. |
| Cinquième transition | transitions[4] |
2024-02-13T17:40:00Z |
travelDuration : 0stravelDistanceMeters : 0 (omis dans JSON) |
Ne conduisez pas. Le conducteur termine son service à 9h40. |
L'exemple de code suivant montre comment la réponse fournit cette séquence pour transitions[0] et transitions[1] :
{
"routes": [
{
"transitions": [
{
"travelDuration": "1496s",
"travelDistanceMeters": 7082,
"waitDuration": "0s",
"totalDuration": "1496s",
"startTime": "2024-02-13T15:55:04Z"
},
{
"travelDuration": "1992s",
"travelDistanceMeters": 16589,
"waitDuration": "0s",
"totalDuration": "1992s",
"startTime": "2024-02-13T16:25:00Z"
},
...
]
}
]
}
Combien coûte l'itinéraire ?
Vous pouvez examiner plusieurs champs de la réponse selon que vous avez besoin du coût d'un véhicule spécifique ou du coût total de l'ensemble du parc.
Le tableau suivant répertorie toutes les façons de trouver des informations sur les coûts dans la réponse :
| Parent | Paramètre | Champ d'application | Description |
|---|---|---|---|
ShipmentRoute |
routeCosts |
Par route | Une répartition des composants de coût spécifiques (comme le coût par heure) pour cet itinéraire spécifique. |
routeTotalCost |
Par route | Coût total calculé pour cet itinéraire spécifique. | |
Metrics |
totalCost |
Total (toutes les routes) | Coût total cumulé de tous les itinéraires de la solution. |
costs |
Total (toutes les routes) | Répartition des composants de coût agrégés sur tous les itinéraires de la solution. |
Les coûts spécifiés dans routeCosts et costs reflètent les contraintes de coût que vous spécifiez dans votre requête. Pour en savoir plus, consultez le document Concept clé du modèle de coût.
Dans ce scénario de garderie pour chiens, comme vous avez ignoré une livraison, le coût par itinéraire et le coût total agrégé sont différents. Le coût de l'itinéraire n'inclut que les coûts associés à cet itinéraire spécifique (le salaire du conducteur), tandis que le coût total agrégé inclut également la pénalité pour l'envoi ignoré. L'exemple de code suivant montre où trouver ces valeurs dans la réponse :
{
"routes": [
{
"vehicleStartTime": "2024-02-13T15:55:04Z",
"vehicleEndTime": "2024-02-13T17:40:00Z",
...
"routeCosts": {
"model.vehicles.cost_per_hour": 47.22
},
"routeTotalCost": 47.22
}
],
"metrics": {
"totalCost": 147.22,
"costs": {
"model.shipments.penalty_cost": 100,
"model.vehicles.cost_per_hour": 47.22
},
...
}
}
Selon le plan d'itinéraire, le conducteur conduit le van de 7h55 à 9h40, soit environ 1 heure et 45 minutes (6 296 secondes). Au tarif que vous avez défini (27 $ par heure), le coût de l'itinéraire est de 47,22 $. Comme l'optimiseur a ignoré l'expédition du berger allemand, il ajoute un coût de pénalité de 100 $, ce qui porte le coût total agrégé à 147,22 $.
Pourquoi un envoi a-t-il été ignoré ?
L'optimiseur liste tous les envois qu'il n'effectue pas dans le tableau skippedShipments. La raison pour laquelle un envoi est ignoré dépend de la définition ou non d'un penaltyCost :
- Envois obligatoires (pas de
penaltyCost) : l'optimiseur ne les ignore jamais simplement parce qu'ils sont coûteux à effectuer. Il n'en ignore un que s'il ne peut pas l'intégrer à un itinéraire, par exemple parce que son créneau horaire est en conflit avec d'autres envois. - Expéditions facultatives (avec un
penaltyCost) : l'optimiseur peut également les ignorer lorsque leur exécution coûte plus cher que la pénalité. Vous pouvez définir différents coûts de pénalité pour prioriser certains envois par rapport à d'autres.
Dans ce scénario, la fenêtre de collecte du berger allemand entre en conflit avec celle du bouvier bernois. La Coit Tower et Land's End sont à 25 minutes l'une de l'autre. Le conducteur ne peut donc pas effectuer les deux prises en charge dans un délai de 20 minutes. L'optimiseur doit ignorer l'un d'entre eux. Étant donné que le berger allemand a le coût de pénalité le plus bas (100 $ contre 1 000 $ pour le client standard), l'optimiseur l'ignore et encourt la pénalité de 100 $.
L'exemple de code suivant montre l'objet skippedShipments dans la réponse :
{
...
"skippedShipments": [
{
"index": 2,
"label": "German shepherd",
"penaltyCost": 100
}
],
...
}
L'objet skippedShipments de la réponse contient les champs suivants :
index: index de base zéro de l'envoi dans votre requête (2 pour le troisième envoi).label: étiquette que vous avez spécifiée dans la requête ("Berger allemand").penaltyCost: coût de pénalité que vous avez spécifié dans la requête, que l'API ajoute au coût total.
Pour éviter que l'optimiseur n'ignore un envoi, assouplissez la contrainte à l'origine du conflit. Par exemple, demandez au propriétaire du berger allemand un créneau de retrait plus flexible, puis mettez à jour le timeWindows pour ce retrait dans votre requête.
Champs de réponse dans l'exemple
Le tableau suivant décrit tous les champs de réponse renvoyés dans le OptimizeToursResponse de l'exemple de scénario. Bien que vous n'ayez pas besoin d'utiliser tous les champs pour comprendre le plan d'itinéraire, vous pouvez les analyser pour déterminer comment ajuster votre OptimizeToursRequest en fonction des besoins de votre entreprise. Pour en savoir plus, consultez Cycle de vie d'un plan d'itinéraire.
Vous pouvez filtrer le contenu par parent ou par recherche textuelle.
| Parent | Paramètre | Type de propriété | Description |
|---|---|---|---|
OptimizeToursResponse |
routes |
Tableau d'objets (ShipmentRoute) |
Il contient la liste des itinéraires calculés pour chaque véhicule (un par véhicule). Dans le cas de notre garderie pour chiens, il s'agit de l'itinéraire détaillé de votre unique camionnette. |
metrics |
Objet (Metrics) |
Il contient les métriques globales de la solution, agrégées pour tous les itinéraires. Pour ce scénario de garderie pour chiens, voici le récapitulatif des coûts et des durées d'exploitation pour la journée. | |
skippedShipments |
Tableau d'objets (SkippedShipment) |
Contient la liste des envois qui ont été ignorés dans la solution. Dans ce scénario, le troisième chien (berger allemand) est ignoré. | |
ShipmentRoute |
vehicleStartTime |
Horodatage | Il s'agit de l'heure à laquelle le véhicule commence son itinéraire. Dans ce scénario de garderie pour chiens, le conducteur commence à conduire le van à 7h55. |
vehicleEndTime |
Horodatage | Heure à laquelle le véhicule termine son itinéraire. Dans ce scénario de garderie pour chiens, le conducteur termine sa tournée à 9h40. | |
visits |
Tableau d'objets (Visit) |
Il s'agit de la liste ordonnée des collectes et des livraisons sur l'itinéraire. Dans ce scénario de garderie pour chiens, il s'agit de la séquence de prise en charge et de dépôt des deux chiens. | |
transitions |
Tableau d'objets (Transition) |
Il s'agit de la liste ordonnée de la distance, du temps de trajet et du temps d'attente entre les visites. Dans ce scénario de garderie pour chiens, cela indique la distance et le temps de trajet en voiture entre Coit Tower, South Sunset Playground Park et la garderie. | |
metrics |
Objet (AggregatedMetrics) |
Il s'agit des métriques spécifiques à cette route. Dans ce scénario de garderie pour chiens, voici les statistiques pour ce van spécifique. Ces métriques sont basées sur les coûts que vous avez spécifiés dans votre requête. Pour en savoir plus, consultez le document Concept clé du modèle de coût. | |
routeCosts |
Objet (carte) | Il s'agit d'une répartition des coûts spécifiques pour cet itinéraire. Pour ce scénario de garderie pour chiens, cela indique le coût calculé à partir du salaire du conducteur de 27 $ par heure. | |
routeTotalCost |
Nombre | Il s'agit du coût total de cet itinéraire spécifique. Dans ce scénario de garderie pour chiens, le coût total est de 47.22 pour l'itinéraire de ce van. |
|
vehicleFullness |
Objet (VehicleFullness) |
Il s'agit d'une répartition de la proximité du véhicule par rapport à ses limites opérationnelles, telles que le temps, la distance et la charge. Dans ce scénario de garderie pour chiens, seules les heures de début et de fin de l'équipe limitent le conducteur. L'optimiseur calcule donc vehicleFullness comme la fraction de la durée réelle de l'itinéraire et de la durée maximale disponible pour l'équipe du conducteur. |
|
Visit |
shipmentIndex |
Entier | Il s'agit de l'index basé sur zéro de l'envoi dans la requête d'origine. Dans ce scénario de garderie pour chiens, 0 représente le bouvier bernois et 1 représente le chihuahua. |
isPickup |
Booléen | Ce champ est défini sur "true" si cette visite est un retrait. Dans ce scénario de garderie pour chiens, la valeur est "true" lorsque le chien est récupéré et "false" (ou manquante) lorsqu'il est déposé à la garderie. | |
startTime |
Horodatage | Il s'agit de l'heure de début estimée de la visite. Dans ce scénario de garderie pour chiens, c'est le moment où le conducteur frappe à la porte. | |
detour |
Durée | Il s'agit du temps supplémentaire que l'optimiseur ajoute au trajet de cet envoi spécifique. Un détour est la différence entre l'itinéraire réel et le trajet direct idéal si le conducteur n'a pas d'autres livraisons ou tâches à effectuer. Dans ce scénario de garderie pour chiens, la première visite, qui consiste à récupérer le bouvier bernois, a un détour de 0, car le conducteur se rend directement de la garderie à ce point de prise en charge. Pour la prise en charge du chihuahua, le détour est de 43 minutes, car le conducteur prend d'abord en charge le bouvier bernois (et passe cinq minutes à le charger). |
|
shipmentLabel |
Chaîne | Il s'agit du libellé de la demande pour chaque envoi. Dans ce scénario de garderie pour chiens, les étiquettes sont "Chihuahua" ou "Bouvier bernois". | |
visitType |
Chaîne (énumération) | Indique le type de visite, qui peut être PICKUP_SHIPMENT pour les retraits ou DELIVER_SHIPMENT pour les livraisons. Pour ce scénario, il s'agit de PICKUP_SHIPMENT ou de DELIVER_SHIPMENT. |
|
Transition |
travelDuration |
Durée | Il s'agit du temps passé à se déplacer pendant cette transition entre les visites. Par exemple, dans ce scénario de garderie pour chiens, le conducteur passe environ 25 minutes à conduire de la garderie à la Coit Tower pour récupérer le bouvier bernois. |
travelDistanceMeters |
Entier | Distance parcourue en mètres pendant cette transition. Par exemple, dans ce scénario de garderie pour chiens, le conducteur parcourt 7 kilomètres entre la garderie et la Coit Tower pour récupérer le bouvier bernois. | |
waitDuration |
Durée | Il s'agit du temps d'attente avant la prochaine prise en charge ou livraison. Dans ce scénario de garderie pour chiens, cette valeur est de 6 minutes (356 secondes) pour la troisième transition, car le conducteur arrive à la garderie avant l'ouverture de la fenêtre de dépôt à 9h30. Pour les autres transitions, cette valeur est de 0. | |
totalDuration |
Durée | Il s'agit de la durée totale de la transition, y compris la conduite et l'attente. Par exemple, le conducteur passe 25 minutes (25 minutes de conduite et 0 minute d'attente) sur la première transition, et 27 minutes (21 minutes de conduite et 6 minutes d'attente) sur la troisième transition pour revenir à la garderie. | |
startTime |
Horodatage | Il s'agit de l'heure à laquelle le trajet commence. Elle correspond à l'heure de fin de la visite précédente (ou, pour la première transition, à l'heure de départ du véhicule). Dans le scénario de la garderie pour chiens, la première transition commence à 7h55, lorsque le conducteur quitte la garderie, et la deuxième transition commence à 8h25, lorsque le conducteur quitte la Coit Tower. | |
Metrics |
aggregatedRouteMetrics |
Objet (AggregatedMetrics) |
Il s'agit de la somme des métriques de toutes les routes. Dans ce scénario de garderie pour chiens, il s'agit des métriques totales pour votre camionnette. |
usedVehicleCount |
Entier | Il s'agit du nombre de véhicules utilisés dans la solution. Pour ce scénario de garderie pour chiens, vous n'utilisez qu'un seul van. | |
earliestVehicleStartTime |
Horodatage | Il s'agit de l'heure de début la plus précoce parmi tous les véhicules. Dans ce scénario de garderie pour chiens, l'itinéraire du van commence à 7h55. | |
latestVehicleEndTime |
Horodatage | Il s'agit de l'heure de fin la plus tardive parmi tous les véhicules. Dans ce scénario de garderie pour chiens, l'itinéraire du van se termine à 9h40. | |
totalCost |
Nombre | Il s'agit du coût total de la solution. Dans ce scénario de garderie pour chiens, le plan d'itinéraire complet coûte 147.22 pour la journée (y compris 47.22 de salaire du conducteur et 100 de pénalité pour livraison ignorée). |
|
costs |
Objet (carte) | Il s'agit d'une répartition du coût total par catégorie. Dans ce scénario de garderie pour chiens, l'optimiseur a calculé le coût de l'itinéraire en fonction du coût horaire et du coût de pénalité pour le berger allemand ignoré. | |
AggregatedMetrics |
performedShipmentCount |
Entier | Il s'agit du nombre d'envois correctement acheminés. Dans ce scénario de garderie pour chiens, le conducteur transporte deux chiens. |
travelDuration |
Durée | Il s'agit de la durée totale du trajet. Dans ce scénario de garderie pour chiens, le conducteur roule pendant 79 minutes. | |
waitDuration |
Durée | Il s'agit du temps d'attente total. Dans ce scénario de garderie pour chiens, le conducteur attend pendant six minutes (356 secondes) à la garderie que l'heure de dépôt commence. | |
delayDuration |
Durée | Il s'agit de la durée supplémentaire que vous définissez à l'aide d'attributs de transition, comme le temps réservé au stationnement. Pour ce scénario de garderie pour chiens, vous n'avez défini aucun attribut de transition dans la requête. Cette valeur est donc égale à zéro. | |
breakDuration |
Durée | Il s'agit de la durée totale des pauses. Dans ce scénario de garderie pour chiens, il n'y a pas de pause. | |
visitDuration |
Durée | Il s'agit de la durée totale passée à effectuer des services lors des visites. Dans ce scénario de garderie pour chiens, ce temps est de 20 minutes (5 minutes par visite pour 4 visites). | |
totalDuration |
Durée | Il s'agit de la somme de tous les composants de durée. Dans ce scénario de garderie pour chiens, la durée totale est de 105 minutes (6 296 secondes). | |
travelDistanceMeters |
Entier | Il s'agit de la distance totale du trajet en mètres. Dans ce scénario de garderie pour chiens, le conducteur parcourt une distance totale de 31,5 km. | |
performedShipmentPenaltyCostSum |
Double | Il s'agit de la somme des coûts de pénalité de tous les envois effectués. Dans ce scénario, il est de 2000, car le conducteur a pris en charge le bouvier bernois et le chihuahua (chacun avec un coût de pénalité de 1000). |
|
VehicleFullness |
maxFullness |
Nombre | Il s'agit du taux d'utilisation le plus élevé parmi tous les champs VehicleFullness. Pour ce scénario de garderie pour chiens, cette valeur est de 0,35, car le conducteur n'utilise le van que pendant 105 minutes de l'ensemble de la matinée, que vous avez définie comme étant de 5 heures dans la requête. |
activeSpan |
Nombre | Il s'agit du rapport entre la durée totale de la période de travail du conducteur et les horaires d'ouverture du plan d'itinéraire. Un nombre faible signifie que le conducteur passe moins de temps à conduire le véhicule pendant la journée de travail. Dans ce scénario de garderie pour chiens, cette valeur est de 0,35, car le conducteur conduit le van pendant 105 minutes au cours de son service de cinq heures. | |
SkippedShipment |
index |
Entier | Il s'agit de l'index basé sur zéro de l'envoi dans la requête d'origine. Dans ce scénario, 2 représente le berger allemand. |
label |
Chaîne | Il s'agit de l'étiquette que vous avez spécifiée pour l'envoi dans la requête. | |
penaltyCost |
Nombre | Il s'agit du coût de pénalité que vous encourez lorsque l'optimiseur ignore cet envoi. Il correspond au penaltyCost que vous avez spécifié dans la requête. |