Cette page décrit le cycle de vie d'un plan d'itinéraire à l'aide de l'API Route Optimization, de l'identification de vos besoins en matière d'itinéraires à l'intégration d'un plan d'itinéraire dans votre système.
En suivant les étapes du plan de routage, vous pouvez atteindre les objectifs suivants :
- Mappez les opérations de votre flotte : traduisez votre flotte physique, vos contraintes complexes et vos objectifs commerciaux en code pour l'API.
- Optimiser les plans d'itinéraire pour votre entreprise : découvrez comment affiner votre plan d'itinéraire pour atteindre vos objectifs et améliorer vos opérations quotidiennes.
- Déployer en production : implémentez votre plan de routage en l'incluant dans vos opérations quotidiennes.
Le schéma suivant illustre le cycle de vie d'un plan d'itinéraire.
La phase d'implémentation d'un plan d'itinéraire se produit lorsque vous intégrez l'API pour la première fois ou lorsque les exigences de votre entreprise changent de manière significative. Il couvre les étapes 1 à 5.
La phase des opérations quotidiennes est plus légère et l'affinement est minimal. Il couvre les étapes 2 à 4.
Les étapes du cycle de vie d'une route sont les suivantes :
- Définissez le champ d'application de votre problème : identifiez et organisez vos objectifs, vos ressources, vos tâches et vos contraintes pour avoir une vue d'ensemble de vos opérations avant de commencer à utiliser l'API.
- Mappez vos données : traduisez votre réalité commerciale en paramètres d'API afin que le plan d'itinéraire reflète la façon dont vous souhaitez que votre flotte fonctionne.
- Créer une requête et obtenir un plan d'itinéraire : saisissez vos données dans l'API et obtenez votre plan d'itinéraire optimisé.
- Affiner votre plan d'itinéraire : testez votre plan d'itinéraire et ajustez-le en modifiant vos contraintes et vos objectifs pour vous assurer qu'il couvre tous vos besoins.
- Intégrer le plan d'itinéraire : connectez le plan d'itinéraire à vos systèmes existants pour fournir une navigation exploitable.
Définir la portée de votre problème
Avant d'utiliser l'API, vous devez organiser les détails de vos opérations quotidiennes en catégories de données claires. Cela vous permet de commencer votre processus de mise en œuvre en ayant une idée claire de vos ressources et tâches actuelles, de leurs contraintes et des objectifs que vous souhaitez atteindre avec votre parc.
Identifier vos ressources et vos tâches
Une étape importante de la planification de votre itinéraire consiste à identifier vos ressources et vos tâches, c'est-à-dire vos véhicules et vos envois.
| Les véhicules | Les livraisons |
|---|---|
|
|
Identifier vos contraintes
Les contraintes sont les limites et les restrictions concernant l'utilisation de vos véhicules et la gestion de vos envois. Elles dictent la plupart de vos opérations et sont essentielles pour créer un plan d'itinéraire optimisé.
Les contraintes se répartissent généralement en deux catégories :
| Contraintes strictes | Contraintes souples |
|---|---|
| Ces limites ne peuvent pas être dépassées. Par exemple, un camion ne peut pas transporter plus de poids que sa capacité maximale, et un conducteur ne peut pas effectuer de retrait après la fermeture d'un magasin. | Il s'agit de préférences qui peuvent être enfreintes si nécessaire, généralement moyennant un coût de pénalité. Par exemple, vous pouvez préférer charger un camion à 80% de sa capacité ou livrer avant une heure cible, mais vous acceptez de dépasser ces limites pour obtenir un meilleur itinéraire. |
Voici quelques contraintes courantes :
- Limites de capacité : poids, volume ou nombre maximal d'articles qu'un véhicule peut transporter.
- Créneaux horaires : créneaux horaires spécifiques pendant lesquels un lieu est ouvert pour une visite, ou horaires de travail spécifiques d'un conducteur.
- Coûts : coût d'utilisation d'un véhicule ou d'annulation d'un envoi. L'un des principaux objectifs de l'API est de générer un plan d'itinéraire rentable.
- Pauses du conducteur : périodes de repos du conducteur généralement requises par le droit du travail après un certain nombre d'heures de travail.
Définir vos objectifs d'entreprise
Une fois que vous avez défini vos ressources, vos tâches et leurs limites, vous devez déterminer les métriques les plus importantes pour votre entreprise. Ces objectifs vont de pair avec les contraintes et vous aident à décider de ce qui compte le plus lors de la planification d'un itinéraire.
Voici quelques exemples d'objectifs d'entreprise :
| Taille de la flotte | Distance | Temps | Coût |
|---|---|---|---|
| Voulez-vous minimiser le nombre de véhicules utilisés ou utiliser l'ensemble de votre flotte pour terminer la journée de travail plus tôt ? | Voulez-vous l'itinéraire le plus court pour économiser du carburant, ou préférez-vous un itinéraire plus rapide qui pourrait être plus long en raison de l'utilisation d'autoroutes ? | Voulez-vous minimiser le nombre total d'heures travaillées ou privilégier l'arrivée à des heures spécifiques, ce qui peut allonger le temps passé sur l'itinéraire ? | Voulez-vous minimiser les dépenses opérationnelles telles que les salaires et le carburant, ou accepter des coûts plus élevés pour respecter des délais stricts ? |
Mapper vos données
Une fois que vous avez collecté vos données, mappez-les pour qu'elles correspondent aux propriétés de l'API. L'optimiseur dispose ainsi de toutes les informations nécessaires pour renvoyer un plan d'itinéraire qui tient compte de votre réalité commerciale.
Utilisez les paramètres des tableaux suivants pour mapper les ressources, les tâches, les contraintes et les objectifs que vous avez mappés dans la section Définir le champ d'application de votre problème.
Mappage de variables
| Concept du monde réel | Paramètre d'API | Description |
|---|---|---|
| Conducteur ou véhicule | model.vehicles[] |
Représente un seul véhicule de votre flotte. |
| Emplacements des dépôts |
vehicles[].startWaypointvehicles[].endWaypoint
|
Lieu où le véhicule commence et termine son itinéraire. |
| Vos horaires d'ouverture |
model.globalStartTimemodel.globalEndTime
|
Heure de début la plus précoce et heure de fin la plus tardive pour l'ensemble des opérations de la flotte. |
| Tâche ou package | model.shipments[] |
Représente un job. Il peut s'agir d'un pickup, d'un delivery ou des deux. |
| Emplacement de la tâche |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
Emplacement géographique où le job est exécuté. |
| Horaires de service |
pickups[].durationdeliveries[].duration
|
Temps passé sur le lieu pour effectuer la tâche (par exemple, déchargement), sans inclure le temps de trajet. |
Mappage de contraintes
| Contrainte réelle | Paramètre d'API | Description |
|---|---|---|
| Capacité du véhicule | vehicles[].loadLimits |
Définit la limite stricte ou souple de la capacité du véhicule. Si le loadDemand d'un envoi dépasse la limite restante, il n'est pas attribué. |
| Taille du colis | shipments[].loadDemands |
Capacité du véhicule consommée par un envoi. |
| Restriction de véhicule | shipments[].allowedVehicleIndices |
Limite un envoi afin qu'il ne puisse être récupéré ou livré que par des véhicules ou des conducteurs spécifiques. |
| Horaires d'ouverture | shipments[].pickups[].timeWindows ou shipments[].deliveries[].timeWindows |
Définit les horaires d'ouverture d'un établissement. Si un véhicule ne peut pas arriver dans ce créneau, l'envoi est ignoré. |
| Shift length limit | vehicles[].routeDurationLimit |
Définit une limite stricte ou souple pour la durée de travail d'un conducteur spécifique (par exemple, 8 heures maximum), quelle que soit l'heure de fin globale. |
| Pauses des conducteurs | vehicles[].breakRule |
Applique des règles de repos spécifiques, telles que des pauses obligatoires après un certain nombre d'heures de travail. |
| Restrictions pour la route | vehicles[].travelMode |
Spécifie le mode de transport (par exemple, DRIVE ou BICYCLE). Cela limite l'itinéraire aux routes autorisées et détermine les vitesses utilisées pour calculer les temps de trajet. |
Mappage des objectifs
| Objectif concret | Paramètre d'API | Description |
|---|---|---|
| Réduire la taille du parc | vehicles[].fixedCost |
Applique un coût unique pour l'utilisation d'un véhicule. Un coût fixe élevé force un itinéraire à privilégier l'utilisation de moins de véhicules plutôt que l'augmentation de la distance totale ou du temps de travail. |
| Réduire la distance | vehicles[].costPerKilometer |
Applique un coût pour chaque kilomètre parcouru. Privilégie les itinéraires plus courts pour économiser du carburant et réduire l'usure. |
| Réduire la durée totale | vehicles[].costPerHour |
Applique un coût pour chaque heure d'activité du véhicule (y compris le temps de trajet et d'attente). Donne la priorité à une exécution plus rapide. |
| Réduire le temps de trajet | vehicles[].costPerTraveledHour |
Applique un coût spécifiquement pour le temps passé à se déplacer. Cela permet de faire la distinction entre l'attente dans les embouteillages (coûteuse) et l'attente à un arrêt(potentiellement moins coûteuse). |
| Prioriser certaines tâches | shipments[].penaltyCost |
Applique un coût si un envoi spécifique est ignoré. En définissant une valeur élevée, vous vous assurez que les tâches critiques sont prioritaires par rapport aux tâches facultatives. |
Créer la requête et obtenir une réponse
Pour générer un plan d'itinéraire à l'aide de l'API Route Optimization, procédez comme suit :
- Configurez votre environnement : configurez votre projet Google Cloud, activez l'API et configurez l'authentification. Pour obtenir des instructions, consultez Premiers pas. Vous ne devez suivre cette étape qu'une seule fois.
- Envoyez la requête : créez le corps de la requête à l'aide du mappage de données défini dans la section précédente. Pour en savoir plus sur les points de terminaison, les en-têtes et la mise en forme des requêtes, consultez Effectuer une requête API.
- Comprendre la réponse : une fois que vous avez reçu une réponse de l'API, comprenez le plan d'itinéraire et la signification de chaque paramètre. Consultez Interpréter une réponse.
Affiner votre plan d'itinéraire
Traduire la logistique réelle en coûts et contraintes d'API est une tâche complexe. Il est possible que votre plan d'itinéraire initial ne corresponde pas à vos objectifs d'entreprise ou aux attentes des conducteurs. L'affinage de votre plan d'itinéraire est un processus itératif qui consiste à tester les itinéraires renvoyés et à ajuster vos paramètres jusqu'à ce que vous trouviez une configuration qui réponde à vos objectifs.
Ajuster les objectifs et les contraintes
Si le plan d'itinéraire généré ne répond pas à vos besoins, vous pouvez modifier certains paramètres pour obtenir des résultats différents. Le resserrement ou l'assouplissement des paramètres modifie la façon dont les objectifs contradictoires sont résolus dans le plan d'itinéraire. L'assouplissement des paramètres est un moyen efficace de découvrir les paramètres qui provoquent des erreurs dans vos plans d'itinéraire.
Le tableau suivant répertorie les problèmes de routage courants et les paramètres que vous pouvez ajuster pour les résoudre.
| Scénario | Paramètre | Ajustement | Description |
|---|---|---|---|
| Un envoi important est ignoré | shipments[].penaltyCost |
Augmentez sa valeur ou ajoutez des coûts de pénalité aux autres expéditions. | Si l'envoi est facultatif, augmentez son coût de pénalité pour lui donner la priorité. Si l'envoi est obligatoire (sans coût de pénalité), ajoutez des coûts de pénalité aux autres envois moins critiques. Cela les rend facultatifs, ce qui libère du temps et de la capacité pour le véhicule afin de livrer l'envoi important. |
| Livraison ignorée en raison du délai | softStartTime/softEndTime |
Ajouter des fenêtres de temps flexibles | Les fenêtres de temps strictes suppriment les tâches qui ont ne serait-ce qu'une minute de retard. Les fenêtres souples permettent au conducteur d'arriver légèrement en retard en payant un "coût" plutôt qu'en échouant à la mission. |
| Livraison ignorée en raison du poids | loadLimits[].softMaxLoad et costPerUnitAbove |
Ajouter des demandes de chargement progressif | Permet à un véhicule de dépasser légèrement sa capacité idéale (moyennant une pénalité) plutôt que de laisser un colis derrière lui. |
| Livraison ignorée en raison d'une surcharge de la flotte | model.vehicles[] ou shipments[].timeWindows |
Ajoutez des véhicules ou assouplissez les périodes de temps | S'il y a trop d'envois pour la flotte actuelle, en particulier pendant les heures pleines, ajoutez des véhicules ou élargissez les créneaux de livraison pour répartir la charge de travail. |
| Les itinéraires sont trop longs ou inefficaces | vehicles[].costPerKilometer/costPerHour |
Ajouter des coûts ou augmenter leur valeur | Indique à l'API que les déplacements sont coûteux, ce qui l'encourage à supprimer les arrêts éloignés et isolés afin de créer des itinéraires plus denses pour la flotte. |
| Les horaires des conducteurs sont trop longs | vehicles[].routeDurationLimit ou model.vehicles[] |
Ajouter des limites de durée, ou ajouter des véhicules et des limites | Applique une limite stricte (par exemple, huit heures) au temps total qu'un conducteur passe sur la route. L'ajout de véhicules ne suffit pas à raccourcir les itinéraires, sauf si vous appliquez également des limites de durée pour forcer le résolveur à répartir la charge de travail sur l'ensemble de la flotte. |
Mettre à jour un plan d'itinéraire
Vous devez souvent mettre à jour un plan d'itinéraire tout en conservant la même base, par exemple en ajoutant un point de retrait au planning d'un conducteur actif. Pour ce faire, utilisez des paramètres d'injection, qui fournissent à l'API un point de départ basé sur votre solution précédente, ce qui lui permet de modifier le plan existant plutôt que d'en calculer un nouveau à partir de zéro.
Voici différentes façons de mettre à jour un plan d'itinéraire avec des paramètres d'injection :
- Transmettez les itinéraires d'une réponse précédente dans le champ
injectedFirstSolutionRoutesde votre nouvelle requête. Cela accélère la recherche d'optimisation et est utile pour replanifier avant le début des opérations quotidiennes, par exemple pour intégrer des expéditions de dernière minute. - Contrôlez le degré de changement à l'aide du champ
injectedSolutionConstraint. Cela est utile lorsque des opérations sont déjà en cours, ce qui vous permet de conserver la séquence actuelle du conducteur ou de corriger des parties du plan qui ont déjà été exécutées. - Assurez-vous que l'itinéraire mis à jour reste attribué au bon véhicule en définissant
interpretInjectedSolutionsUsingLabelssurtrue. Cela est utile lors des tests, lorsque vous ajoutez ou supprimez des envois et des véhicules, car cela permet de faire correspondre les itinéraires à l'aide d'étiquettes plutôt que d'indices. Pour cela, toutes les étiquettes de véhicule et d'envoi doivent être uniques.
Intégrer votre plan d'itinéraire
Votre plan d'itinéraire finalisé est un objet de données représentant une gestion optimisée de vos ressources et de vos tâches, tout en respectant vos contraintes et vos objectifs. Utilisez ce plan d'itinéraire dans vos opérations quotidiennes en l'intégrant à votre système. Cela implique généralement de visualiser votre plan d'itinéraire pour les gestionnaires de flotte et d'envoyer des instructions de navigation détaillée aux conducteurs.
Visualisation
Pour permettre aux gestionnaires de flotte de vérifier et de surveiller votre plan d'itinéraire, vous pouvez le visualiser de différentes manières :
Pour permettre aux gestionnaires de flotte de vérifier et de surveiller votre plan d'itinéraire, vous pouvez l'afficher sur une carte du tableau de bord. En fonction de votre étape de développement actuelle, vous pouvez visualiser votre plan d'itinéraire de l'une des manières suivantes :
- Explorer sans code : vous pouvez utiliser l'application d'optimisation d'itinéraires Open Source pour voir comment l'API traduit vos données en chemins physiques sur une carte. Cette application Web sert d'outil d'exploration qui vous permet de créer des scénarios, d'ajuster les paramètres de contrainte et d'afficher visuellement les plans d'itinéraires obtenus avant d'écrire du code.
- Afficher l'ordre des visites : vous pouvez afficher la séquence de visites sous forme de points numérotés sur une carte pour évaluer vos plans d'optimisation et de répartition dans votre propre système. Pour ce faire, localisez le tableau
visitsdans chaque itinéraire de la réponse de l'API. Les éléments de ce tableau sont classés exactement dans l'ordre dans lequel le conducteur doit les exécuter. Vous pouvez parcourir cette liste, utilisershipmentIndexpour récupérer les coordonnées de chaque arrêt et utiliser votre bibliothèque de cartographie pour afficher des repères numérotés sur la carte en fonction de leur ordre dans la liste. - Tracer l'itinéraire physique : vous pouvez visualiser l'itinéraire exact prévu sur une carte pour comprendre pourquoi l'optimiseur a choisi une séquence spécifique. Cette polyligne représente l'itinéraire prévu pour la planification et l'évaluation, et non l'itinéraire en temps réel emprunté par un conducteur. Définissez
populatePolylines: truedans votre requête pour obtenir un champencodedPolylinepour chaque itinéraire, puis décodez-le à l'aide de la méthodegoogle.maps.geometry.encoding.decodePath()de l'API Maps JavaScript.
Envoyer aux conducteurs
Vous pouvez intégrer la navigation détaillée dans votre application pour les conducteurs à l'aide du SDK Navigation ou fournir des liens profonds vers l'application grand public Google Maps.
- SDK Navigation : si vous disposez d'une application de chauffeur personnalisée, vous pouvez intégrer le SDK Navigation pour Android ou iOS pour bénéficier d'un guidage détaillé dans l'application.
Vous pouvez intégrer les informations sur les tâches de la réponse de l'API dans votre système et utiliser le SDK pour la navigation. Pour transmettre les itinéraires de la réponse de l'API au SDK, définissez
populateTransitionPolylines: truedans votre requête. Cela génère unrouteTokenpour chaque transition dans la réponse. - Fleet Engine : pour une gestion avancée de votre flotte, vous pouvez importer le plan d'itinéraire généré par l'API dans Fleet Engine afin de surveiller l'exécution de l'itinéraire en temps réel. Bien que l'API fournisse une polyligne du trajet prévu pour l'évaluation, Fleet Engine associe votre séquence de visites planifiée au suivi des véhicules en temps réel.