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, depuis l'identification de vos besoins en matière d'itinéraire jusqu'à l'intégration d'un plan d'itinéraire dans votre système.

En suivant les étapes du plan d'itinéraire, vous pouvez atteindre les objectifs suivants :

  • Mapper 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 afin qu'il puisse atteindre vos objectifs et améliorer vos opérations quotidiennes.
  • Déployer en production : implémentez votre plan d'itinéraire 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 vos exigences commerciales changent de manière significative. Elle couvre les étapes 1 à 5.

La phase des opérations quotidiennes est plus légère et l'affinage est minimal. Elle couvre les étapes 2 à 4.

Voici les étapes du cycle de vie d'un itinéraire :

  1. Définissez la portée 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 le fonctionnement de votre flotte.
  3. Créez une requête et obtenez un plan d'itinéraire : saisissez vos données dans l'API et obtenez votre plan d'itinéraire optimisé.
  4. Affinez votre plan d'itinéraire : testez votre plan d'itinéraire et itérez-le en ajustant vos contraintes et vos objectifs pour vous assurer qu'il couvre tous vos besoins.
  5. Intégrez 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 du 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. Vous pouvez ainsi démarrer votre processus d'implémentation en sachant clairement quelles sont vos ressources et tâches actuelles, ce qui les contraint et quels sont les objectifs que vous souhaitez atteindre avec votre flotte.

Identifier vos ressources et vos tâches

Une étape importante lors de la planification de votre plan d'itinéraire consiste à identifier vos ressources et vos tâches, qui sont vos véhicules et vos expéditions.

Les véhicules Les expéditions
  • Nombre : combien de véhicules possédez-vous ?
  • Lieux : où les véhicules commencent-ils et terminent-ils leur trajet ?
  • Heure : quels sont les horaires 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 flotte ?
  • Lieux : où se trouvent les points de collecte et de livraison ?
  • Demandes : quel est le poids ou la taille des colis ?
  • Contraintes : existe-t-il des plages horaires spécifiques pour la livraison ?
  • Temps de service : combien de temps le conducteur doit-il se garer et décharger ?
  • Exigences : l'expédition nécessite-t-elle un type de véhicule ou un conducteur spécifique ?

Identifier vos contraintes

Vos contraintes sont les limites et les restrictions concernant l'utilisation de vos véhicules et la gestion de vos expéditions. Elles dictent la plupart de vos opérations et sont essentielles lors de la création d'un plan d'itinéraire optimisé.

Les contraintes se répartissent généralement en deux catégories :

Contraintes strictes Contraintes souples
Il s'agit de limites qui 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 une collecte 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 des frais 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.
  • Plages horaires : plages horaires spécifiques pendant lesquelles un lieu est ouvert aux visites ou horaires de travail spécifiques d'un conducteur.
  • Coûts : coût d'exploitation d'un véhicule ou d'une expédition ignorée. L'un des principaux objectifs de l'API est de générer un plan d'itinéraire rentable.
  • Pauses des conducteurs : périodes de repos des conducteurs généralement requises par le droit du travail après un certain nombre d'heures de travail.

Définir vos objectifs commerciaux

Une fois que vous avez défini vos ressources, vos tâches et leurs limites, il est temps de déterminer les métriques les plus importantes pour votre entreprise. Ces objectifs vont de pair avec les contraintes et vous aident à décider 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
Souhaitez-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 ? Souhaitez-vous emprunter le chemin 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 ? Souhaitez-vous minimiser le nombre total d'heures travaillées ou donner la priorité à l'arrivée à des heures spécifiques, ce qui peut allonger le temps passé sur l'itinéraire ? Souhaitez-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 la portée du problème.

Mappage de variables

Concept concret Paramètre d'API Description
Conducteur ou véhicule model.vehicles[] Représente un seul véhicule de votre flotte.
Lieux de dépôt vehicles[].startWaypoint
vehicles[].endWaypoint
Lieu où le véhicule commence et termine son trajet.
Vos horaires d'ouverture model.globalStartTime
model.globalEndTime
Heure de début la plus tôt 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. Peut être une pickup, une delivery ou les deux.
Lieu de la tâche pickups[].arrivalWaypoint
deliveries[].arrivalWaypoint
Lieu géographique où se déroule le job.
Temps de service pickups[].duration
deliveries[].duration
Temps passé sur le lieu pour effectuer la tâche (par exemple, le déchargement), sans compter le temps de trajet.

Mappage de contraintes

Contrainte concrète 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 la loadDemand d'une expédition dépasse la limite restante, elle n'est pas attribuée.
Taille du package shipments[].loadDemands Quantité de capacité du véhicule consommée par une expédition.
Restriction du véhicule shipments[].allowedVehicleIndices Limite une expédition afin qu'elle ne puisse être collectée ou livrée 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 pour visiter un lieu. Si un véhicule ne peut pas arriver pendant cette période, l'expédition est ignorée.
Limite de durée du travail vehicles[].routeDurationLimit Définit une limite stricte ou souple sur la durée pendant laquelle un conducteur spécifique peut travailler (par exemple, 8 heures maximum), quel 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 légales et détermine les vitesses utilisées pour calculer les temps de trajet.

Mappage des objectifs

Objectif concret Paramètre d'API Description
Minimiser la taille de la flotte vehicles[].fixedCost Applique un coût unique pour l'utilisation d'un véhicule. Un coût fixe élevé oblige un itinéraire à privilégier l'utilisation d'un nombre réduit de véhicules plutôt que d'augmenter la distance totale ou le temps de travail.
Minimiser 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 de l'usure.
Minimiser le temps total vehicles[].costPerHour Applique un coût pour chaque heure d'activité du véhicule (y compris le temps de trajet et d'attente). Privilégie une exécution plus rapide.
Minimiser le temps de conduite vehicles[].costPerTraveledHour Applique un coût spécifique au temps passé à se déplacer. Cela fait la distinction entre le fait d'être bloqué dans les embouteillages (coûteux) et d'attendre à un arrêt(potentiellement moins cher).
Prioriser certaines tâches shipments[].penaltyCost Applique un coût si une expédition spécifique est ignorée. Définir une valeur élevée permet de s'assurer que les tâches critiques sont prioritaires par rapport aux tâches facultatives.

Créer la requête et obtenir une réponse

L'utilisation de l'API Route Optimization pour générer un plan d'itinéraire implique les étapes suivantes :

  1. Configurez votre environnement : configurez votre projet Google Cloud, activez l'API et configurez l'authentification. Pour obtenir des instructions, consultez la section 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 la section Envoyer une requête API.
  3. Comprenez 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 du monde réel en coûts et contraintes d'API est une tâche complexe. Votre plan d'itinéraire initial peut ne pas correspondre à vos objectifs commerciaux ni aux attentes des conducteurs. L'affinage de votre plan d'itinéraire est le processus itératif qui consiste à tester les itinéraires renvoyés et à ajuster vos paramètres jusqu'à ce que vous trouviez une configuration qui atteigne 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 fait de renforcer ou d'assouplir les paramètres modifie la manière dont les objectifs conflictuels 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 liste les problèmes d'itinéraire courants et les paramètres que vous pouvez ajuster pour les résoudre.

Scénario Paramètre Ajustement Description
Une expédition importante est ignorée shipments[].penaltyCost Augmentez sa valeur ou ajoutez des coûts de pénalité à d'autres expéditions. Si l'expédition est facultative, augmentez son coût de pénalité pour la prioriser. Si l'expédition est obligatoire (sans coût de pénalité), ajoutez des coûts de pénalité à d'autres expéditions moins critiques. Cela les rend facultatives, ce qui libère du temps et de la capacité du véhicule pour l'expédition importante.
Expédition ignorée en raison du timing softStartTime / softEndTime Ajoutez des plages horaires souples. Les plages horaires strictes abandonnent les tâches qui ont même une minute de retard. Les plages horaires souples permettent au conducteur d'arriver légèrement en retard en payant un "coût" plutôt que d'échouer à l'attribution.
Expédition ignorée en raison du poids loadLimits[].softMaxLoad et costPerUnitAbove Ajoutez des demandes de charge souples. 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.
Expédition ignorée en raison d'une surcharge de la flotte model.vehicles[] ou shipments[].timeWindows Ajoutez des véhicules ou assouplissez les plages horaires. S'il y a trop d'expéditions pour la flotte actuelle, en particulier aux heures pleines, ajoutez des véhicules ou élargissez les plages de livraison pour répartir la charge de travail.
Les itinéraires sont trop longs ou inefficaces vehicles[].costPerKilometer / costPerHour Ajoutez des coûts ou augmentez leur valeur. Indique à l'API que le trajet est coûteux, ce qui l'encourage à supprimer les arrêts éloignés et isolés pour créer des itinéraires plus courts pour la flotte.
Les horaires de travail des conducteurs sont trop longs vehicles[].routeDurationLimit ou model.vehicles[] Ajoutez des limites de durée, ou ajoutez des véhicules et des limites. Applique une limite stricte (par exemple, 8 heures) au temps total qu'un conducteur passe sur la route. L'ajout de véhicules seul ne raccourcit pas les itinéraires, sauf si vous appliquez également des limites de durée pour forcer le solveur à répartir la charge de travail sur la flotte plus importante.

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 une collecte à l'emploi du temps 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 la replanification 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 modification à l'aide du champ injectedSolutionConstraint. Cela est utile lorsque les 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 véhicule approprié en définissant interpretInjectedSolutionsUsingLabels sur true. Cela est utile lors des tests lorsque vous ajoutez ou supprimez des expéditions et des véhicules, car il fait correspondre les itinéraires à l'aide d'étiquettes au lieu d'indices. Cela nécessite que toutes les étiquettes de véhicule et d'expédition soient 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 responsables de flotte et de transmettre des instructions détaillées aux conducteurs.

Visualisation

Pour permettre aux responsables 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 responsables de flotte de vérifier et de surveiller votre plan d'itinéraire, vous pouvez l'afficher sur une carte de tableau de bord. En fonction de votre étape de développement actuelle, vous pouvez visualiser votre plan d'itinéraire de différentes manières :

  • Explorer sans code : vous pouvez utiliser l'application Open Source Route Optimization 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 de générer visuellement vos plans d'itinéraire résultants avant d'écrire du code.
  • Afficher l'ordre des visites : vous pouvez afficher la séquence des 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, recherchez le tableau visits dans chaque itinéraire de la réponse de l'API. Les éléments de ce tableau sont classés exactement comme 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 mappage pour afficher des repères numérotés sur la carte en fonction de leur ordre dans la liste.
  • Dessiner l'itinéraire physique : vous pouvez visualiser le chemin exact prévu sur une carte pour comprendre pourquoi l'optimiseur a choisi une séquence spécifique. Cette polyligne représente le chemin 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.

Répartir les conducteurs

Vous pouvez intégrer la navigation détaillée dans votre application de conducteur à 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 conducteur personnalisée, vous pouvez intégrer le SDK Navigation pour Android ou iOS pour obtenir une navigation détaillée 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 la 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 chemin prévu pour l'évaluation, Fleet Engine associe votre séquence de visites planifiée au suivi en direct des véhicules.