Cycle de vie d'un plan de route

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.

Organigramme du cycle de vie d'un plan d'itinéraire expliqué dans le texte ci-dessous

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 :

  1. 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.
  2. 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.
  3. 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é.
  4. 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.
  5. 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
  • Nombre : combien de véhicules possédez-vous ?
  • Emplacements : où les véhicules commencent-ils et terminent-ils leur trajet ?
  • Temps : quelles sont les heures de travail des conducteurs des véhicules ?
  • Capacité : quelles sont les limites de vos véhicules ?
  • Coûts : quels sont les coûts d'exploitation de votre parc ?
  • Lieux : où se trouvent les points de retrait et de livraison ?
  • Demandes : quel est le poids ou la taille des colis ?
  • Contraintes : existe-t-il des périodes spécifiques pour la livraison ?
  • Temps de service : de combien de temps le conducteur a-t-il besoin pour se garer et décharger ?
  • Exigences : l'envoi nécessite-t-il un type de véhicule ou un conducteur spécifique ?

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[].startWaypoint
vehicles[].endWaypoint
Lieu où le véhicule commence et termine son itinéraire.
Vos horaires d'ouverture model.globalStartTime
model.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[].arrivalWaypoint
deliveries[].arrivalWaypoint
Emplacement géographique où le job est exécuté.
Horaires de service pickups[].duration
deliveries[].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 :

  1. 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.
  2. 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.
  3. 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 injectedFirstSolutionRoutes de 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 interpretInjectedSolutionsUsingLabels sur true. 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 visits dans 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, utiliser shipmentIndex pour 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: true dans votre requête pour obtenir un champ encodedPolyline pour chaque itinéraire, puis décodez-le à l'aide de la méthode google.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: true dans votre requête. Cela génère un routeToken pour 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.