Cette page décrit le cycle de vie d'un plan de route à l'aide de l'API Route Optimization, depuis l'identification de vos besoins en matière de routage jusqu'à l'intégration d'un plan de route dans votre système.
En suivant les étapes du plan de route, vous pouvez atteindre les objectifs suivants :
- Cartographiez 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 de tournée pour votre entreprise : découvrez comment affiner votre plan de tournée pour qu'il réponde à vos objectifs et améliore vos opérations quotidiennes.
- Déployer en production : mettez en œuvre votre plan de tournée en l'intégrant à vos opérations quotidiennes.
Le schéma suivant illustre le cycle de vie d'un plan de route.
La phase d'implémentation d'un plan de route a lieu lorsque vous intégrez l'API pour la première fois ou lorsque vos besoins commerciaux changent de manière significative. Il couvre les étapes 1 à 5.
La phase d'opérations quotidiennes est plus légère et le raffinement est minime. Il couvre les étapes 2 à 4.
Voici les étapes du cycle de vie d'une route :
- Définissez l'étendue de votre problème : identifiez et organisez vos objectifs, ressources, tâches et contraintes pour avoir une vue complète 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 de route reflète le fonctionnement souhaité de votre flotte.
- Créer une demande et obtenir un plan d'itinéraire : saisissez vos données dans l'API et obtenez votre plan d'itinéraire optimisé.
- Affinez votre plan d'itinéraire : testez votre plan d'itinéraire et itérez dessus en ajustant vos contraintes et vos objectifs pour vous assurer qu'il répond à tous vos besoins.
- Intégrez le plan de route : connectez le plan de route à 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 dans des catégories de données claires. Cela vous permet de commencer votre processus d'implémentation en sachant clairement quelles sont vos ressources et tâches actuelles, quelles sont leurs contraintes et quels sont les objectifs que vous souhaitez atteindre avec votre parc.
Identifier vos ressources et vos tâches
Une étape importante lors de la planification de votre plan de tournée consiste à identifier vos ressources et vos tâches, c'est-à-dire vos véhicules et vos expéditions.
| Les véhicules | Les envois |
|---|---|
|
|
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 pour créer un plan d'itinéraire optimisé.
Les contraintes appartiennent généralement à deux catégories :
| Contraintes strictes | Contraintes flexibles |
|---|---|
| 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 chauffeur ne peut pas effectuer un 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 préférez peut-être charger un camion à seulement 80% de sa capacité ou effectuer une livraison 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 d'articles maximum qu'un véhicule peut transporter.
- Plages horaires : créneaux horaires spécifiques pendant lesquels un lieu est ouvert aux visites ou heures de travail spécifiques d'un chauffeur.
- Coûts : coût d'utilisation d'un véhicule ou d'annulation d'une livraison. 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 les lois sur le 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 lorsque vous planifiez un itinéraire.
Voici quelques exemples d'objectifs commerciaux :
| 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, mais potentiellement plus long en raison de l'utilisation d'autoroutes ? | Souhaitez-vous minimiser le nombre total d'heures travaillées ou privilégier les arrivées à des heures spécifiques, ce qui peut allonger le temps passé sur l'itinéraire ? | Souhaitez-vous minimiser les dépenses opérationnelles (salaires et carburant, par exemple) ou accepter des coûts plus élevés pour respecter des délais stricts ? |
Mapper vos données
Une fois vos données collectées, mappez-les pour qu'elles correspondent aux propriétés de l'API. L'outil d'optimisation dispose ainsi de toutes les informations nécessaires pour renvoyer un plan de tournée qui tient compte de la réalité de votre entreprise.
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 l'étendue de votre 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 parc. |
| Emplacements des dépôts |
vehicles[].startWaypointvehicles[].endWaypoint
|
Lieu de départ et d'arrivée du véhicule. |
| Vos horaires d'ouverture |
model.globalStartTimemodel.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. Il peut s'agir d'un pickup, d'un delivery ou des deux. |
| Lieu de la tâche |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
Emplacement géographique où se déroule le job. |
| Horaires de service |
pickups[].durationdeliveries[].duration
|
Temps passé sur le lieu pour effectuer la tâche (par exemple, le déchargement), à l'exclusion du temps de trajet. |
Mappage des contraintes
| Contrainte concrète | Paramètre d'API | Description |
|---|---|---|
| Capacité du véhicule | vehicles[].loadLimits |
Définit la limite stricte ou souple pour 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 qu'un envoi consomme. |
| Restriction de véhicule | shipments[].allowedVehicleIndices |
Limiter un envoi afin qu'il ne puisse être récupéré ou livré que par des véhicules ou des chauffeurs spécifiques. |
| Horaires d'ouverture | shipments[].pickups[].timeWindows ou shipments[].deliveries[].timeWindows |
Définit les heures disponibles pour visiter un lieu. Si un véhicule ne peut pas arriver dans ce délai, l'expédition est ignorée. |
| Limite de longueur des shifts | vehicles[].routeDurationLimit |
Définit une limite stricte ou souple sur la durée de travail d'un conducteur spécifique (par exemple, 8 heures maximum), quelle que soit l'heure de fin globale. |
| Pauses du chauffeur | vehicles[].breakRule |
Applique des règles de repos spécifiques, comme des pauses obligatoires après un certain nombre d'heures de travail. |
| Restrictions pour les routes | 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 |
|---|---|---|
| Minimiser la taille du parc | 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 réduire l'usure. |
| Minimiser 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). Privilégie l'achèvement 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 différence entre être bloqué dans les embouteillages (coûteux) et attendre à un arrêt(potentiellement moins cher). |
| Prioriser certaines tâches | shipments[].penaltyCost |
Applique un coût si un envoi spécifique est ignoré. En définissant une priorité é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 de tournée à l'aide de l'API Route Optimization, vous devez suivre les étapes suivantes :
- Configurez votre environnement : configurez votre projet Google Cloud, activez l'API et configurez l'authentification. Pour obtenir des instructions, consultez Premiers pas. Vous n'avez besoin de 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 le format des requêtes, consultez Effectuer une requête d'API.
- Comprendre la réponse : une fois que vous avez obtenu une réponse de l'API, comprenez le plan de route 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 de tournée initial ne corresponde pas à vos objectifs commerciaux ni aux attentes de vos conducteurs. Affiner 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 atteigne vos objectifs.
Ajuster les objectifs et les contraintes
Si le plan de route 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 resserrer ou de relâcher les paramètres modifie la façon dont les objectifs conflictuels sont résolus dans le plan de route. Relâcher les paramètres est un moyen efficace de découvrir ceux qui provoquent des erreurs dans vos plans de route.
Le tableau suivant liste les problèmes de routage courants et les paramètres que vous pouvez ajuster pour les résoudre.
| Scénario | Paramètre | Ajustement | Description |
|---|---|---|---|
| Une livraison importante est ignorée | shipments[].penaltyCost |
Augmenter sa valeur ou ajouter des frais de pénalité à d'autres expéditions | Si la livraison est facultative, augmentez son coût de pénalité pour la prioriser. Si l'expédition est obligatoire (sans frais de pénalité), ajoutez des frais de pénalité aux expéditions autres, moins critiques. Elles deviennent ainsi facultatives, ce qui libère du temps et de la capacité pour le véhicule afin de livrer le colis important. |
| Livraison interrompue en raison du timing | softStartTime/softEndTime |
Ajouter des créneaux horaires flexibles | Les créneaux horaires stricts suppriment les tâches qui ont même une minute de retard. Les fenêtres souples permettent au chauffeur d'arriver légèrement en retard en payant un "coût" plutôt que d'échouer la tâche. |
| Livraison interrompue en raison du poids | loadLimits[].softMaxLoad et costPerUnitAbove |
Ajouter des exigences de charge flexibles | Permet à un véhicule de dépasser légèrement sa capacité idéale (avec une pénalité) plutôt que de laisser un colis derrière lui. |
| Livraison interrompue en raison d'une surcharge de la flotte | model.vehicles[] ou shipments[].timeWindows |
Ajouter des véhicules ou des créneaux de détente | S'il y a trop de livraisons pour la flotte actuelle, en particulier pendant les heures de pointe, 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 |
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 pour créer des itinéraires plus compacts pour la flotte. |
| Les périodes de conduite sont trop longues | vehicles[].routeDurationLimit ou model.vehicles[] |
Ajouter des limites de durée, ou ajouter des véhicules et des limites | Applique un plafond strict (par exemple, 8 heures) à la durée totale pendant laquelle un conducteur est sur la route. L'ajout de véhicules seuls ne raccourcira 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 l'ensemble du parc. |
Modifier un itinéraire
Vous devez souvent mettre à jour un plan de tournée tout en conservant la base, par exemple en ajoutant une collecte à la tournée d'un chauffeur 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 de tournée 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 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 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 chauffeur ou de corriger les parties du plan qui ont déjà été exécutées. - Assurez-vous que l'itinéraire modifié reste attribué au bon véhicule en définissant
interpretInjectedSolutionsUsingLabelssurtrue. Cela est utile lors des tests lorsque vous ajoutez ou supprimez des expéditions et des véhicules, car cela permet de faire correspondre les itinéraires à l'aide d'étiquettes au lieu d'indices. Cela nécessite que tous les libellés de véhicules et d'envois soient uniques.
Intégrer votre plan de route
Votre plan de tournée finalisé est un objet de données représentant une gestion optimisée de vos ressources et tâches, tout en respectant vos contraintes et objectifs. Utilisez ce plan de tournée 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 d'envoyer des instructions de navigation détaillée aux conducteurs.
Visualisation
Pour permettre aux responsables de parc de valider et de surveiller votre plan de route, vous pouvez le visualiser de différentes manières :
Pour permettre aux responsables de flotte de vérifier et de surveiller votre plan de route, vous pouvez l'afficher sur une carte de tableau de bord. En fonction de votre phase 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 d'optimisation des itinéraires Open Source pour voir comment l'API traduit vos données en itinéraires 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 rendre visuellement vos plans de route 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, 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 géographiques 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. - Dessinez l'itinéraire physique : vous pouvez visualiser le trajet exact prévu sur une carte pour comprendre pourquoi l'outil d'optimisation a choisi une séquence spécifique. Cette polyligne représente le trajet 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 des itinéraires complets dans votre application pour les conducteurs à l'aide du SDK Navigation ou fournir des liens profonds vers l'application Google Maps pour les consommateurs.
- SDK Navigation : si vous disposez d'une application de chauffeur 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: 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 de route 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 en temps réel des véhicules.