Desservir plusieurs clients depuis un seul centre distribution à l’aide la Livraison sur le dernier kilomètre

Complexité : DébutantExigences en matière de données : ArcGIS Tutorial Data for Desktop

Une start-up spécialisée dans le petit-déjeuner a connu un grand essor et est aujourd’hui une entreprise florissante qui livre ses viennoiseries dans des cafés partout à San Francisco. Les viennoiseries ont un succès fou et les cafés les commandent par douzaine. Pour que les viennoiseries arrivent à temps pour les heures de pointe des cafés, la société doit les livrer entre 5h et 7h30 et donc s’assurer que sa flotte de chauffeurs est aussi efficace que possible sur cette courte fenêtre horaire.

Pour le moment, les chauffeurs n’ont pas de problème de place en ce qui concerne le transport de toutes les viennoiseries ; en revanche, ils enregistrent des retards lorsque les quantités à livrer sont importantes. Du fait de l’importance capitale de la fenêtre horaire, la société veut pouvoir mieux prendre en compte de l’heure de livraison en fonction de la quantité livrée.

Remarque :
Les données utilisées dans ce didacticiel sont fictives et ont été créées uniquement dans le but de résoudre le scénario de cet exemple.

Obtenir les données

Les données de ce didacticiel sont disponibles au téléchargement.

  1. Accédez à la page de téléchargement des données.
  2. Cliquez sur le bouton Download (Télécharger) et enregistrez le fichier localement.
  3. Décompressez le fichier téléchargé.

Créer une carte

Pour créer une carte, procédez comme suit :

  1. Démarrez ArcGIS Pro.
  2. Créez un nouveau projet en cliquant sur le modèle Map (Carte). Si vous le souhaitez, vous pouvez modifier le nom de votre projet et son emplacement.

    Un nouveau projet avec une carte apparaît.

Ajouter les données du didacticiel au projet

Un jeu de données réseau est un modèle intelligent du système routier. Il contient non seulement l’emplacement et les attributs des routes, mais également des informations sur les relations qui les unissent, indiquant, par exemple, quelles routes sont connectées et quels tournants entre des routes connectées sont autorisés ou interdits. En outre, il propose d’autres données ayant une incidence sur les itinéraires de déplacement possibles et sur la durée du trajet.

Remarque :
Si vous effectuez une analyse à l’aide de ArcGIS Online, le solveur fait référence à un jeu de données réseau mondial de haute qualité stocké sur le cloud ArcGIS Online et utilise des crédits ArcGIS Online. Vous pouvez également utiliser votre propre jeu de données réseau stocké localement sur votre machine ou vous appuyer sur ArcGIS Enterprise pour publier des services de calcul d’itinéraire utilisant votre propre jeu de données réseau et configurer ces services avec votre portail d’entreprise afin de les utiliser depuis ArcGIS Pro.

Suivez les étapes ci-dessous pour ajouter un jeu de données réseau à la carte.

  1. Dans la fenêtre Catalog (Catalogue), qui se trouve par défaut sur le côté droit de l’application, cliquez avec le bouton droit sur Folders (Dossiers) et choisissez Add Folder Connection (Ajouter la connexion au dossier) Ajouter la connexion au dossier.

    La boîte de dialogue Ajouter la connexion au dossier apparaît.

  2. Accédez au dossier dans lequel vous avez placé les données du didacticiel, double-cliquez sur Network Analyst, puis cliquez sur Didacticiel pour sélectionner le dossier.
  3. Cliquez sur OK.

    Une connexion au dossier Didacticiel est créée.

  4. Ensuite, ajoutez à la carte le jeu de données réseau contenu dans le dossier.

  5. Dans la fenêtre Catalogue, développez Dossiers > Didacticiel > SanFrancisco.gdb > Transportation.
  6. Faites glisser Streets_ND, signalé par une icône de jeu de données réseau Jeu de données réseau, sur la carte.

    Le jeu de données réseau est ajouté à la fenêtre Contents (Contenu) et à la carte.

  7. Dans la fenêtre Contents (Contenu), désactivez Streets_ND pour afficher le fond de carte uniquement.

Géocoder les cafés

Vous allez maintenant géocoder le fichier CoffeeShops.csv pour élaborer une classe d’entités avec les localisations des clients. Lorsqu’une table comporte les adresses d’une localisation, elle peut être localisée sur une carte grâce au géocodage. Les adresses peuvent être stockées dans un seul champ ou dans plusieurs champs de la table.

Remarque :

Si vous disposez de vos propres données d’adresse, vous pouvez créer un localisateur avec. Sinon, Esri offre le ArcGIS World Geocoding Service, qui consomme des crédits.

  1. Dans la fenêtre Catalog (Catalogue), accédez à l’emplacement des données du didacticiel, cliquez avec le bouton droit sur SanFranciscoLocator.loc, puis cliquez sur Add to Project (Ajouter au projet).
  2. Cliquez avec le bouton droit sur CoffeeShops.csv, puis sélectionnez Geocode Table (Géocoder une table) dans le menu contextuel.

    La fenêtre Geocode Table (Géocoder une table) apparaît.

  3. Dans la fenêtre Geocode Table (Géocoder une table), cliquez sur Start (Démarrer).

    Fenêtre Geocode Table (Géocoder une table)

  4. Dans la liste déroulante Input Locator (Localisateur en entrée), sélectionnez SanFranciscoLocator.
  5. Dans la fenêtre Geocode Table (Géocoder une table), cliquez sur Next (Suivant).
  6. Vérifiez que la valeur de Input Table (Table en entrée) est CoffeeShops.csv, que la liste déroulante a pour valeur More than one field (Plusieurs champs) pour l’adresse des clients dans les champs StreetAddress, City (Ville) et Postal(Code postal), puis cliquez sur Next (Suivant).
  7. Appariez les champs d’adresses comme suit :
    • Address or Place (Adresse ou lieu) à StreetAddress
    • City (Ville) à City (Ville)
    • ZIP (Code postal) à Postal (Code postal)
    • State (État) à State (État)
  8. Cliquez sur Next (Suivant).

    Ne modifiez pas le champ Output (Sortie) pour l’enregistrer dans l’espace de travail du projet.

  9. Pour Preferred Location Type (Type de localisation préféré), sélectionnez Routing Location (Localisation d’itinéraire) dans les options de la liste déroulante.

    Cette option place les entités de localisations sur la localisation du réseau de rues et non sur le toit. Dans Network Analyst, les entités localisées se situent dans l’espace sur le tronçon de rue le plus proche. Le centre d’un bâtiment peut parfois être plus proche d’une rue autre que celle qui permet d’y accéder.

  10. Laissez la valeur All (Tout) dans le champ Output Fields (Champs en sortie) et cliquez sur Next (Suivant).
  11. Pour Category (Catégorie), cochez Address (Adresse) et cliquez sur Finish (Terminer).
  12. Cliquez sur Run (Exécuter).

    À l’issue du traitement, un message vous demandant si vous souhaitez à nouveau procéder à l’appariement s’affiche.

  13. Cliquez sur No (Non) puisque toutes les localisations ont été correctement appariées.

    Message indiquant que le géocodage est terminé

  14. Fermez la fenêtre Geocode Table (Géocoder une table).

Créer la couche d’analyse de la livraison sur le dernier kilomètre

Le solveur Livraison sur le dernier kilomètre sert à résoudre les problèmes de livraison de colis aux clients finaux des tournées de véhicules. Les problèmes de livraison sur le dernier kilomètre concernent un seul centre de distribution depuis lequel les véhicules de livraison sont répartis vers les localisations de desserte des clients. Cette couche permet d’ajouter des informations sur les clients, la localisation de début et de fin des itinéraires, les véhicules et les chauffeurs. Ces informations sont regroupées dans plusieurs classes d’entités et tables. Dans l’onglet Last Mile Delivery Layer (Couche Livraison sur le dernier kilomètre), plusieurs paramètres permettent de garantir que le calcul est exécuté pour la bonne date, à l’aide des unités correctes et des informations sur le déplacement des véhicules appropriées.

Pour créer la couche d’analyse de la livraison sur le dernier kilomètre, procédez comme suit :

  1. Dans l’onglet Analysis (Analyse), dans le groupe Workflows (Processus), cliquez sur Network Analysis (Analyse du réseau) > Last Mile Delivrey (Livraison sur le dernier kilomètre) Livraison sur le dernier kilomètre.

    La couche d’analyse Livraison sur le dernier kilomètre est ajoutée à la fenêtre Contents (Contenus). Elle comprend plusieurs sous-couches contenant les entrées et sorties de l'analyse.

    Elle fait référence au jeu de données réseau San Francisco, car le réseau était répertorié dans la fenêtre Contents (Contenu) lors de la création de la couche Livraison sur le dernier kilomètre.

    Remarque :

    Pour examiner ou modifier la source de données réseau qui servira à créer la couche d’analyse du réseau, dans l’onglet Analysis (Analyse), dans le groupe Workflows (Processus), cliquez sur le menu déroulant Network Analysis (Analyse du réseau) et affichez Network Data Source (Source de données réseau).

Ajouter des ordres

Les ordres servent à spécifier des informations sur les clients. Chaque ordre peut contenir des informations sur le temps qu’un chauffeur est censé passer à cette localisation, le nombre d’articles qu’il doit livrer ou prélever, les heures de rendez-vous, etc‎.

Pour ajouter des ordres, procédez comme suit :

  1. Sélectionnez la couche d’analyse Last Mile Delivery (Livraison sur le dernier kilomètre) dans la fenêtre Contents (Contenu) pour activer l’onglet.
    Ruban Couche Livraison sur le dernier kilomètre
  2. Cliquez sur l’onglet Last Mile Delivery Layer (Couche Livraison sur le dernier kilomètre), puis sur le bouton Import Orders (Importer des ordres) Importer des ordres dans la section Input Data (Données en entrée).

    La boîte de dialogue Add Locations (Ajouter des emplacements) apparaît.

  3. Sélectionnez CoffeeShops_Geocoded pour Input Locations (Localisations en entrée).
  4. Dans les étapes 4 à 6, vous allez effectuer l’appariement de champs. Vous allez ainsi vous assurer que les informations sur les cafés contenues dans la classe d’entités CoffeeShops_Geocoded sont appariées correctement et alimentées dans les champs de la sous-couche Ordres.
  5. Sous Field Mappings (Appariement de champs), choisissez Name (Nom) dans la section Property (Propriété).
  6. Dans la liste déroulante Field Name (Nom de champ), sélectionnez USER_Name vers la fin de la liste.

    Le solveur Livraison sur le dernier kilomètre exige que chaque ordre ait un nom unique. Comme chaque café de la liste à livrer a un nom unique, son nom (dans le champ USER_Name) est apparié au champ Name dans la sous-couche Ordres.

  7. Appariez la propriété supplémentaire suivante sous la forme DeliveryQuantity_1 > USER_DozensOfBreakfastSandwiches.

    La société livre les viennoiseries par douzaine. Le suivi de la quantité à livrer dans chaque café s’effectue avec le champ USER_DozensOfBreakfastSandwiches, qui va donc être apparié avec le champ DeliveryQuantity_1 afin que le solveur Livraison sur le dernier kilomètre puisse suivre les douzaines de viennoiseries livrées à chaque localisation.

  8. Sélectionnez CurbApproach dans la section Property (Prorpiété) et Right side of vehicle (Côté droit du véhicule) dans la liste déroulante Default Value (Valeur par défaut).

    Le champ CurbApproach désigne le côté de la rue où doit se trouver la localisation par rapport au véhicule lorsqu’il la dessert. Ces rues se trouvant à San Francisco, où la conduite s’effectue à droite, définir CurbApproach du côté droit du véhicule garantit que le chauffeur du camion de livraison pourra se garer le long du trottoir devant le café et n’aura pas à traverser la rue.

  9. Cliquez sur OK.

    Les cafés sont ajoutés à la sous-couche Ordres.

    Cafés dans la sous-couche Ordres

    Un message s’affiche pour indiquer que du fait du traitement de géocodage, le champ Name de la classe d’entités CoffeeShops_Geocoded est trop long pour le champ Name de la sous-couche Ordres. Fermez le message d’avertissement, car les noms ne sont pas trop longs.

    Message d’avertissement

  10. Vous allez maintenant mettre à jour la durée de desserte en fonction de la quantité livrée.
  11. Dans la fenêtre Contents (Contenu), cliquez avec le bouton droit sur la sous-couche Orders (Ordres) et sélectionnez Attribute Table (Table attributaire).
  12. Dans la table attributaire, cliquez avec le bouton droit de la souris sur le champ ServiceTime et sélectionnez Calculate Field (Calculer un champ).

    La boîte de dialogue Calculer un champ apparaît.

  13. Aux étapes 11 et 12, vous allez calculer la durée de desserte en fonction de la quantité de viennoiseries commandée par un café en particulier. La quantité commandée est exprimée en minutes, le temps de livraison en minutes. Selon que le café a commandé une, deux ou trois douzaines de viennoiseries, la livraison prend respectivement 3, 4 ou 5 minutes. La livraison de toute commande supérieure à trois douzaines prend 6 minutes.
  14. Définissez la valeur ServiceTime sur BasedOnQuantity(!DeliveryQuantity_1!) (Selonlaquantité(!Quantitélivrée_1!)).
  15. Utilisez ce qui suit pour Code Block (Bloc de code) :
  16. def BasedOnQuantity(quantity):
        if quantity == 1:
            time = 3
        elif quantity == 2:
            time = 4
        elif quantity == 3:
            time = 5
        else:
            time = 6
        return time
    La fenêtre doit ressembler à l’image suivante :

    Boîte de dialogue Calculer Field (Calculer un champ) avec les paramètres renseignés

  17. Cliquez sur la coche pour vérifier l’expression.
  18. Cliquez sur OK.

    Le champ ServiceTime est désormais alimenté avec une valeur appropriée.

  19. Fermez la table attributaire.

Ajouter la localisation du magasin de viennoiseries à la sous-couche Dépôts

Les dépôts sont les lieux où commencent et terminent les itinéraires. Tous les itinéraires doivent commencer et se terminer au même endroit. Pour cette analyse, le magasin de viennoiserie va être le dépôt. À l’instar des données des clients, l’adresse du magasin de viennoiseries peut être géocodée. Toutefois, comme il s’agit d’une seule et même adresse, vous allez plutôt utiliser la fenêtre Locate (Localiser) pour la géocoder, avant de l’ajouter à la sous-couche Dépôts.

Remarque :

L’utilisation de l’option Add to Feature Class (Ajouter à la classe d’entités) avec le ArcGIS World Geocoding Service consomme des crédits. L’utilisation du localisateur fourni n’en consomme pas.

Pour ajouter la localisation du magasin de viennoiseries, procédez comme suit :

  1. Cliquez sur l’onglet Map (Carte), et dans le groupe Inquiry (Requête), cliquez sur le bouton Locate (Localiser) Localiser.

    Bouton Localiser dans le groupe Requête

    La fenêtre Locate (Localiser) s’ouvre.

  2. Cliquez sur la flèche de la liste déroulante Options en regard de la zone de recherche.

    Bouton Options dans la fenêtre Locate (Localiser)

  3. Cochez SanFranciscoLocator.
  4. Dans la zone de texte de recherche, saisissez l’adresse du magasin de viennoiseries, 50 Southdale Ave. Daly City, CA 94015, puis appuyez sur Entrée.
  5. Dans la fenêtre Locate (Localiser), cliquez avec le bouton droit sur l’option A et sélectionnez Add To Feature Class (Ajouter à la classe d’entités).

    La fenêtre Add To Feature Class (Ajouter à la classe d’entités) apparaît. Vous pouvez y sélectionner la classe d’entités à laquelle ajouter l’adresse.

  6. Développez Last Mile Delivery: Depots (Livraison sur le dernier kilomètre : dépôts), sélectionnez le modèle Depots (Dépôts) et cliquez sur OK.
  7. Dans la fenêtre Contents (Contenu), cliquez avec le bouton droit sur la sous-couche Depots (Dépôts) et sélectionnez Attribute Table (Table attributaire).

    Une ligne représentant la localisation unique du magasin de viennoiseries a été ajoutée à la table attributaire. L’adresse complète du magasin de viennoiserie a été incluse dans le nom du dépôt.

  8. Fermez la table attributaire.
  9. Dans l’onglet Edit (Mise à jour), effacez la sélection et enregistrez les mises à jour.
  10. Fermez la fenêtre Localiser.

Ajouter des informations à la sous-couche Itinéraires

Les itinéraires renferment des informations à la fois sur le véhicule et le chauffeur. Il est possible d’y ajouter des détails sur la journée de travail du chauffeur, comme l’heure à laquelle elle commence ou le temps de travail, ou sur le véhicule, comme sa capacité et son coût d’exploitation.

Afin de livrer efficacement les ordres aux 173 cafés, vous allez configurer les paramètres suivants lorsque vous ajouterez les itinéraires. Vous allez indiquer le nombre d’itinéraires pouvant desservir les 173 cafés, la localisation initiale et finale de l’itinéraire (en l’occurrence, le magasin de viennoiseries), l’heure au plus tôt (la plus ancienne) à laquelle l’itinéraire peut commencer (sachant que la fenêtre horaire de livraison s’étend de 5h à 7h30), la capacité du camion, la durée de trajet totale maximale de l’itinéraire et la rémunération horaire du chauffeur.

Pour ajouter des itinéraires et d’autres informations à la sous-couche Itinéraires, procédez comme suit :

  1. Dans la fenêtre Contents (Contenu), cliquez avec le bouton droit sur le nom du groupe de couches Last Mile Delivery (Livraison sur le dernier kilomètre) et sélectionnez Zoom to Layer (Zoom sur la couche) pour faire un zoom arrière jusqu’à la vue générale.
  2. Revenez à l’onglet Last Mile Delivery Layer (Couche Livraison sur le dernier kilomètre).
  3. Dans le groupe Input Data (Données en entrée), cliquez sur la liste déroulante Import Routes (Importer des itinéraires) et sélectionnez Add Routes (Ajouter des itinéraires).

    La boîte de dialogue Add Vehicle Routing Problem Routes (Ajouter des itinéraires de tournée de véhicules) apparaît.

  4. Définissez les valeurs suivantes :
    1. Number of Routes (Nombre d’itinéraires) : 12

      Le magasin de viennoiseries comptant 12 véhicules pour effectuer les livraisons, c’est aussi le nombre d’itinéraires qu’ils peuvent emprunter.

    2. Start Depot Name (Nom du dépôt initial) : 50 Southdale Ave. Daly City, CA 94015

      L’itinéraire doit commencer et se terminer au magasin de viennoiseries. Par conséquent, la valeur des champs Start Depot Name (Nom du dépôt initial) et End Depot Name (Nom du dépôt final) est l’adresse du magasin.

      Vous pouvez sélectionner Start Depot Name (Nom du dépôt initial) dans la liste déroulante et la valeur doit correspondre à celle du champ Name dans la sous-couche Dépôts.

    3. End Depot Name (Nom du dépôt final) : 50 Southdale Ave. Daly City, CA 94015

      Vous pouvez sélectionner End Depot Name (Nom du dépôt final) dans la liste déroulante et la valeur doit correspondre à celle du champ Name dans la sous-couche Dépôts.

    4. Earliest Route Start Time (Heure de début la plus ancienne) : 5h00

      Les itinéraires doivent commencer à 5h00 pour que les viennoiseries soient livrées aux cafés à temps pour l’heure de pointe.

    5. Capacity_1 : 150

      Chaque véhicule peut contenir 150 douzaines de viennoiseries au maximum. Les unités utilisées pour Capacity_1 doivent impérativement être identiques à celles utilisées pour DeliveryQuantity_1, en l’occurrence la douzaine (de viennoiseries).

    6. Max Total Time (Durée totale maximale) : 150

      Les itinéraires doivent être terminés et les véhicules de retour au magasin de viennoiseries pour 7h30. Cela laisse aux chauffeurs 2,5 heures pour effectuer leur itinéraire. Comme l’unité de temps utilisée pour modéliser ce problème est la minute, vous devez saisir 150 minutes dans le champ Max Total Time (Temps maximal par véhicule).

    7. Cost Per Unit Time (Coût par unité de temps) : 0,5

      Les chauffeurs sont payés 30 $ de l’heure, soit 0,50 $ la minute, étant donné qu’il s’agit de l’unité de temps utilisé dans cette modélisation.

  5. Cliquez sur OK pour exécuter l'outil.

    Douze itinéraires sont ajoutés à la sous-couche Itinéraires.

Ajouter des zones

Afin que les chauffeurs puissent rester dans les régions de la ville qu’ils préfèrent, vous allez maintenant ajouter des zones.

  1. Dans l’onglet Last Mile Delivery Layer (Couche Livraison sur le dernier kilomètre), puis sur le bouton Create Features (Créer des entités) Créer des entités dans la section Input Data (Données en entrée).
  2. Dans la fenêtre Create Features (Créer des entités), sélectionnez le modèle Zones.
  3. Faites glisser deux polygones pour séparer le nord et le sud du Golden Gate Park et de San Miguel Hills. Les zones doivent ressembler à l’image ci-dessous :

    Zones nord et sud ajoutées

  4. Dans la fenêtre Contents (Contenu), cliquez avec le bouton droit sur Zones et sélectionnez Attribute Table (Table attributaire).
  5. Pour le polygone au sud du Golden Gate Park et de San Miguel Hills, changez la valeur du champ Name par South (Sud).
  6. Pour le polygone au nord du Golden Gate Park et de San Miguel Hills, changez la valeur du champ Name par North (Nord).
  7. Ouvrez la table attributaire Itinéraires et faites défiler vers la droite jusqu’aux champs ZoneName et IsHardZone.
  8. Cliquez avec le bouton droit sur le champ IsHardZone et cliquez sur Calculate Field (Calculer un champ).

    La boîte de dialogue Calculer un champ apparaît.

  9. Définissez la valeur IsHardZone sur True (Vrai).

    Ce paramètre spécifie que les itinéraires ne peuvent livrer les ordres que dans la zone définie.

  10. Sélectionnez les trois premières lignes de la table attributaire, cliquez avec le bouton droit sur le champ ZoneName, puis cliquez sur Calculate Field (Calculer un champ).

    La boîte de dialogue Calculer un champ apparaît.

  11. Définissez la valeur ZoneName sur South (Sud).

    Cela définit une limite, qui spécifie que les trois premiers itinéraires ne peuvent livrer les ordres que dans la zone sud.

  12. Inversez la sélection dans la table attributaire et utilisez le champ Calculate Field (Calculer un champ) pour définir la valeur ZoneName sur North (Nord) pour les neuf autres itinéraires.

    Cela définit une limite, qui spécifie que les neuf itinéraires restants ne peuvent livrer les ordres que dans la zone nord.

  13. Effacez la sélection et enregistrez les mises à jour.
  14. Fermez la table attributaire.

Définir la date et exécuter l’analyse

Vous allez maintenant définir la date à laquelle les itinéraires vont commencer. Vous n’avez pas à définir l’heure, car elle a été définie pour chacun des itinéraires lorsque vous les avez ajoutés à l’aide de l’outil Ajouter des itinéraires de tournée de véhicules précédemment.

  1. Sur le ruban Last Mile Delivery Layer (Couche Livraison sur le dernier kilomètre), dans la section Date and Time (Date et heure), cliquez sur la flèche de la liste déroulante Default Date (Date par défaut) et indiquez la date 14/03/2024.
  2. Dans le groupe Analysis (Analyse), cliquez sur Run (Exécuter).

    La couche Livraison sur le dernier kilomètre est résolue. Les ordres sont attribués aux itinéraires et la symbologie est mise à jour pour afficher les itinéraires et les ordres qui leur sont attribués dans des couleurs assorties.

    Les ordres desservis par un itinéraire spécifique sont affichés dans un code couleur correspondant

  3. Dans la fenêtre Contents (Contenu), cliquez avec le bouton droit sur la sous-couche Routes (Itinéraires) et sélectionnez Attribute Table (Table attributaire).
  4. Faites défiler la table vers la droite jusqu’au champ en sortie OrderCount.
  5. Examinez les résultats. Plusieurs classes d’entités de la couche d’analyse Livraison sur le dernier kilomètre comportent des champs en sortie qui fournissent des détails sur la solution du solveur. La table Itinéraires donne une vue d’ensemble de chaque itinéraire, mais vous pouvez également examiner le détail de chacun. La sortie Itinéraires inclut le nombre de localisations vers lequel se rend chaque chauffeur, la durée totale que cela prend, le moment où l’itinéraire débute et celui où le retour au magasin de viennoiseries est prévu. Notez que trois itinéraires n’ont desservi aucun café, car ces derniers étaient couverts par d’autres itinéraires. Par conséquent, la plupart des champs de ces trois itinéraires ont des valeurs nulles.