{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Calcul du chemin le plus court" ] }, { "cell_type": "markdown", "source": "## Séance 6 (1/2) — Graphes pondérés et algorithme de Dijkstra : recap force brute\n\nJusqu'ici, nos graphes indiquaient seulement l'existence d'un lien entre deux individus (Séances 2 et 3). Mais en sociologie, toutes les relations ne se valent pas : deux personnes peuvent se croiser une fois par an ou se parler tous les jours. On peut représenter cette **intensité** par un **poids** sur chaque arête (voir FONDAMENTAUX.md, §2.3) — par exemple le temps qu'il faut pour transmettre une information d'une personne à l'autre, ou l'inverse de la fréquence de contact.\n\n**Question sociologique posée par cette séance :** dans un réseau où chaque lien a un coût (temps, distance, effort), quel est le chemin le *moins coûteux* entre deux individus ? C'est exactement le problème que résout l'**algorithme de Dijkstra**, que nous découvrirons juste après cette activité de recap (méthode \"force brute\").\n\nL'exercice ci-dessous l'illustre sur un cas logistique concret (circuits courts en Bretagne) : le raisonnement — trouver le chemin de poids minimal dans un graphe pondéré — est rigoureusement le même que pour calculer, par exemple, le canal de diffusion le plus rapide d'une information dans un réseau social pondéré par la force des liens.\n\n> Pour aller plus loin : la preuve formelle de l'algorithme de Dijkstra (terminaison, invariant de boucle) et l'analyse de sa complexité sont regroupées dans une **annexe optionnelle** (`Annexe_Dijkstra_Preuve_Complexite.ipynb`), à explorer si vous êtes à l'aise et que le temps le permet.", "metadata": {} }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lors de cette activité, vous allez travailler sur un algorithme permettant la détermination du chemin le plus court entre deux points d'un graphe. Vous allez réinvestir vos notions de programmation et d'algorithme (définition, correction et optimisation)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Énoncé" ] }, { "attachments": { "graphe.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "Un site web propose une plateforme reliant producteurs et consommateurs en Bretagne. Leur objectif étant de proposer des circuits courts et ainsi de contribuer au développement écologique et économique de la région. \n", " Afin d’aider les consommateurs a préparer leurs courses, les responsables du site web souhaitent développer un algorithme qui optimise leur trajet pour l’achat des différent vivres. \n", " En cochant les cases des produits que le consommateur souhaite acheter (fruits, légumes, produits carnés, produits laitiers, produits de la pêche,…) l’algorithme proposera le chemin le plus court pour faire l’ensemble des achats. \n", " Regardons l’exemple ci-dessous :\n", "![graphe.png](attachment:graphe.png)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 1\n", "Rechercher le chemin le plus court entre le point A et le point G. Notez les différentes étapes, ainsi que la distance parcouru en total." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "On représente ce graphe dans un premier temps sous forme de tableau:\n", " | | A | B | C | D | E | F | G | H |\n", "|:- |:-:|:-:|:-:|:-:|:-:|:-:|:-:|:-:|\n", "|A|0|4|2|-|-|-|-|-|\n", "|B|4|0|6|-|5|-|-|-|\n", "|C|2|6|0|3|-|-|-|5|\n", "|D|-|-|3|0|-|3|4|1|\n", "|E|-|5|-|-|0|2|-|-|\n", "|F|-|-|-|3|2|0|7|-|\n", "|G|-|-|-|4|-|7|0|10|\n", "|H|-|-|5|1|-|-|10|0|\n", " Puis on décide de modéliser ce graphe sous Python à l'aide d'une liste de listes:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Déclaration de notre graphe sous forme de liste de liste\n", "graphe = [\n", " [0 ,4 ,2 ,99,99,99,99,99],\n", " [4 ,0 ,6 ,99,5 ,99,99,99],\n", " [2 ,6 ,0 ,3 ,99,99,5 ,99],\n", " [99,99,3 ,0 ,99,3 ,4 ,1 ],\n", " [99,5 ,99,99,0 ,2 ,99,99],\n", " [99,99,99,3 ,2 ,0 ,7 ,99],\n", " [99,99,99,4 ,99,7 ,0 ,10],\n", " [99,99,5 ,1 ,99,99,10,0 ]\n", "]\n", "\n", "graphe # Vérification de notre sortie" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 2:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " 1. Quel choix a fait le développeur pour indiquer la non existence d'un arc entre deux sommets ?\n", " 2. Ce choix vous semble t-il judicieux ? Argumentez.\n", " 3. Que proposeriez-vous au développeur ? " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Calcul de la distance entre deux sommets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Le calcul de la distance entre deux noeuds se fait à l'aide d'une fonction intitulé distance dont le code est donne ci dessous:" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def distance(départ, arrivée) -> int:\n", " # on vérifie que les valeurs de départ et arrivée sont bien des entiers\n", " assert type(départ) == int, \"la valeur départ n'est pas un entier\"\n", " assert type(arrivée) == int, \"la valeur départ n'est pas un entier\"\n", " assert graphe[départ][arrivée] != 99, \"les noeuds ne sont pas adjacent\"\n", " \n", " return(graphe[départ][arrivée])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " 1. Que renvoie l'instruction $distance(2,3)$ ?\n", " 1. 6\n", " 2. \"La valeur n'est pas un entier\"\n", " 3. 3\n", " 4. 99\n", " 2. Démonstration de la correction de cette fonction. \n", " - Dans un premier temps montrez que la fonction se termine (pour rappel cela consiste a verifier que les calculs effectuées par l'algorithme s'arretent bien):\n", " 1. Il n'y a aucune boucle dans la fonction, elle se termine forcément\n", " 2. La fonction ne vérifie pas tout les cas possibles, elle ne se termine jamais dans certains cas\n", " 3. Une fonction ne se termine que lorsqu'il y a une boucle \"while\"\n", " - Dans un deuxieme temps montrer la correction partielle (pour rappel: l'algorithme donne bien le bon résultat)\n", " 1. Pour chaque couple de sommets la fonction retourne bien la distance demandée\n", " 2. Le développeur n'a pas prévu le cas où l'on passe le même sommet en arrivée et départ\n", " 3. L'algorithme ne donne pas le bon résultat.\n", " 3. Quel est le niveau de complexité de cette fonction ? QCM\n", " 1. Il s'agit du parcours séquentiel d'un tableau, $n \\log(n)$\n", " 2. $1$\n", " 3. $n^2$\n", " 4. $0$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Création d'une liste de sommets adjacents" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Maintenant que nous savons déterminer la distance entre deux noeuds, on a besoin de connaitre les différents parcours entre un point de départ et un point d'arrivée. On crée d'abord une fonction qui retourne la liste des noeuds adjacents par rapport a un noeud de référence." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def determine_adjacents(sommet) -> list:\n", " #************************************************************************\n", " # A partir d'un noeud en entrée, la fonction donne la liste des noeuds adjacents\n", " # Entrée : Le noeud de départ\n", " # Sortie : la liste des noeuds adjacents\n", " #************************************************************************\n", " # On sélectionne la ligne contenant les noeuds adjacent par rapport a notre point de départ\n", " ligne = graphe[sommet]\n", "\n", " # on détermine le nombre de noeuds adjacents pour ce point\n", " nb_adjacent = len(ligne)-ligne.count(99)-ligne.count(0)\n", "\n", " # Puis on crée la variable parcours sous forme de liste de listes\n", " liste_adjacents = [[] for i in range(0,nb_adjacent)]\n", "\n", " a = 0\n", " for i in range(0,len(ligne)):\n", " if (ligne[i] != 0 and ligne[i] != 99):\n", " liste_adjacents[a].append(sommet)\n", " liste_adjacents[a].append(i)\n", " a += 1\n", " \n", " # On retourne la liste des sommet adjacents\n", " return(liste_adjacents)\n", "\n", "#****************************************************************************\n", "# Ajouter votre code ici pour l'exécution de la fonction ci-dessous" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " 1. Faites fonctionner la fonction $determine$_$adjacents$ pour l'ensemble des sommets du graphe, imprimez le résultat.\n", " 2. Vérifier qu'il n'y ait pas d'erreur dans la transcription du graph. Le corriger le cas échéant." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Composition d'une liste de listes avec l'ensemble des chemins possibles entre un point de départ et un point d'arrivée." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pour commencer cette exercice, nous allons d'abord nous intéresser au nombre de noeuds adjacents par rapport a notre point de départ, puis, à partir de cette liste, nous allons bâtir l'ensemble des chemins possibles." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def recursive2(liste) -> list:\n", " #************************************************************************\n", " # La fonction récursive établit la liste exhaustive des chemins possibles\n", " # Entrée : La liste de chemins déja établie\n", " # Sortie : la liste de chemins jusqu'au noeuds suivants\n", " #************************************************************************\n", " \n", " sommets_adjacents = []\n", " # On détermine le nombre d'arcs adjacents aux noeuds\n", " for i in range(0,len(liste)): # on boucle dans notre liste existante\n", " for element in determine_adjacents(liste[i][-1]): # pour chaque sommet dans la liste des adjacents\n", " if element not in sommets_adjacents: # si le sommet n'est pas encore dans notre liste\n", " sommets_adjacents.append(element) # alors on le rajoute\n", " \n", " # On identifie les chemins qu'on doit créer, en ignorant les chemins:\n", " # - où on revient sur un noeud déja visité\n", " # - déja existant dans la liste\n", " # Puis on renseigne les chemins possibles\n", "\n", " entrees_a_supprimer = [] # On va garder en mémoire les entrées a supprimer\n", " for i in range(0,len(liste)) : # on boucle dans notre liste existante\n", " if liste[i][-1] != arrivée: # on ignore les chemins menant déja au point d'arrivée\n", " for j in range(0,len(sommets_adjacents)): # on boucle dans la liste qu'on vient d'obtenir\n", " if (sommets_adjacents[j][0] == liste[i][-1] and\n", " sommets_adjacents[j][-1] != liste[i][0] and\n", " sommets_adjacents[j][-1] not in liste[i]\n", " ):\n", " liste.append(liste[i] + sommets_adjacents[j][1:len(sommets_adjacents)])\n", " entrees_a_supprimer.append(i) # On va garder en mémoire les entrées a supprimer\n", " \n", " for i in range(0,len(entrees_a_supprimer)): # avant de retourner notre résultat on supprime les entrées superflus\n", " del liste[entrees_a_supprimer[i]-i]\n", " return(liste)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En étudiant la fonction $recursive2$ ci-dessus, répondez aux questions suivantes:\n", " 1. Identifier la ligne de code qui ajoute les chemins possible a la liste.\n", " 2. Ecrivez le commentaire de cette ligne de code en langage naturel ou pseudocode.\n", " 3. Quel est le coût de cette fonction ?\n", " 1. Il s'agit du parcours séquentiel d'un tableau, le coût est linéaire ;\n", " 2. Il s'agit d'un tri par insertion, au pire le coût de cette fonction est quadratique ($n^2$) ;\n", " 3. Il s'agit d'un succession d'instructions simple, le cout est de 1." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Programme principal" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": "#************************************************************************\n# Transcription du graphe sous forme de liste de listes\n#************************************************************************\n\ngraphe = [\n [0 ,4 ,2 ,99,99,99,99,99],\n [4 ,0 ,6 ,99,5 ,99,99,99],\n [2 ,6 ,0 ,3 ,99,99,5 ,99],\n [99,99,3 ,0 ,99,3 ,4 ,1 ],\n [99,5 ,99,99,0 ,2 ,99,99],\n [99,99,99,3 ,2 ,0 ,7 ,99],\n [99,99,99,4 ,99,7 ,0 ,10],\n [99,99,5 ,1 ,99,99,10,0 ]\n ]\n\ndef distance(Noeud_A, Noeud_B) -> int:\n #************************************************************************\n # Donne la distance entre deux noeuds adjacents Noeud_A et Noeud_B\n # Entrée : Le noeud de départ\n # Sortie : la liste des noeuds adjacents\n #************************************************************************\n # on vérifie que les valeurs de départ et arrivée sont bien des entiers\n assert type(Noeud_A) == int, \"la valeur départ n'est pas un entier\"\n assert type(Noeud_B) == int, \"la valeur départ n'est pas un entier\"\n assert graphe[Noeud_A][Noeud_B] != 99, \"les noeuds ne sont pas adjacent\"\n \n # On retourne la distance entre les deux noeuds\n return(graphe[Noeud_A][Noeud_B])\n\n\ndef determine_adjacents(noeud) -> list:\n #************************************************************************\n # A partir d'un noeud en entrée, la fonction donne la liste des noeuds adjacents\n # Entrée : Le noeud de départ\n # Sortie : la liste des noeuds adjacents\n #************************************************************************\n # On sélectionne la ligne contenant les noeuds adjacent par rapport a notre point de départ\n ligne = graphe[noeud]\n\n # on détermine le nombre de noeuds adjacents pour ce point\n nb_adjacent = len(ligne)-ligne.count(99)-ligne.count(0)\n\n # Puis on crée la variable parcours sous forme de liste de listes\n liste_adjacents = [[] for i in range(0,nb_adjacent)]\n\n a = 0\n for i in range(0,len(ligne)):\n if (ligne[i] != 0 and ligne[i] != 99):\n liste_adjacents[a].append(noeud)\n liste_adjacents[a].append(i)\n a += 1\n \n # On retourne la liste des noeuds adjacents\n return(liste_adjacents)\n\ndef recursive2(liste) -> list:\n #************************************************************************\n # La fonction récursive établit la liste exhaustive des chemins possibles\n # Entrée : La liste de chemins déja établie\n # Sortie : la liste de chemins jusqu'au noeuds suivants\n #************************************************************************\n \n sommets_adjacents = []\n # On détermine le nombre d'arcs adjacents aux noeuds\n for i in range(0,len(liste)): # on boucle dans notre liste existante\n for element in determine_adjacents(liste[i][-1]): # pour chaque sommet dans la liste des adjacents\n if element not in sommets_adjacents: # si le sommets n'est pas encore dans notre liste\n sommets_adjacents.append(element) # alors on le rajoute\n \n # On identifie les chemins qu'on doit créer, en ignorant les chemins:\n # - où on revient sur un noeud déja visité\n # - déja existant dans la liste\n # Puis on renseigne les chemins possibles\n\n entrees_a_supprimer = [] # On va garder en mémoire les entrées a supprimer\n for i in range(0,len(liste)) : # on boucle dans notre liste existante\n if liste[i][-1] != arrivée: # on ignore les chemins menant déja au point d'arrivée\n for j in range(0,len(sommets_adjacents)): # on boucle dans la liste qu'on vient d'obtenir\n if (sommets_adjacents[j][0] == liste[i][-1] and\n sommets_adjacents[j][-1] != liste[i][0] and\n sommets_adjacents[j][-1] not in liste[i]\n ):\n liste.append(liste[i] + sommets_adjacents[j][1:len(sommets_adjacents)])\n entrees_a_supprimer.append(i) # On va garder en mémoire les entrées a supprimer\n \n for i in range(0,len(entrees_a_supprimer)): # avant de retourner notre résultat on supprime les entrées superflus\n del liste[entrees_a_supprimer[i]-i]\n return(liste)\n\n\n#********************************************************************************\n# Début du programme principal\n#********************************************************************************\n\n# on définit un point de départ et d'arrivée\ndépart = 0\narrivée = 6\n\n\n# On détermine le nombre d'arcs partant de notre sommet départ\nliste_arcs_départs = determine_adjacents(départ)\n\n\n# Construction de la liste de chemins possibles\nfor i in range(0,len(graphe)):\n liste_arcs_départs = recursive2(liste_arcs_départs)\n print(liste_arcs_départs)\n\n# On imprime le nombre de chemins et les chemins possibles\nprint(\"Il y a\",len(liste_arcs_départs),\"chemins possibles:\",liste_arcs_départs)\n\n# On identifie le chemin le plus court\nthis_distance = 0\ncourt_distance = 9999\ncourt_chemin =[]\n\nfor element in liste_arcs_départs:\n this_distance = 0\n for i in range(0,len(element)-1):\n this_distance += distance(element[i],element[i+1])\n if this_distance < court_distance:\n court_distance = this_distance\n court_chemin = element\n \n# Ecrivez votre réponse à la question 6.1 ici" }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Question 6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Le programme ci dessous n'affiche pas le résultat attendu. Modifiez le pour qu'on vous affiche le chemin le plus court, et la distance a parcourir.\n", "2. Implementez la fonction $timeit$ et $memit$ afin de connaître le temps d'exécution et la mémoire occupé par la fonction \"recursive2\"\n", "3. Est-ce que les résultats confirment votre réponse à la question 5.3 ?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pip install memory_profiler" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "%load_ext memory_profiler" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Déclaration des variables en fonction des itérations\n", "chemins_it1 = [[0, 1], [0, 2]]\n", "chemins_it3 = [[0, 1, 2, 3], [0, 1, 2, 7], [0, 1, 4, 5], [0, 2, 1, 4], [0, 2, 3, 5], [0, 2, 3, 6], [0, 2, 3, 7], [0, 2, 7, 3], [0, 2, 7, 6]]\n", "chemins_it5 = [[0, 2, 3, 6], [0, 2, 7, 6], [0, 1, 2, 3, 6], [0, 1, 2, 7, 6], [0, 1, 4, 5, 6], [0, 2, 3, 5, 6], [0, 2, 3, 7, 6], [0, 2, 7, 3, 6], [0, 1, 2, 3, 5, 4], [0, 1, 2, 3, 5, 6], [0, 1, 2, 3, 7, 6], [0, 1, 2, 7, 3, 5], [0, 1, 2, 7, 3, 6], [0, 1, 4, 5, 3, 2], [0, 1, 4, 5, 3, 6], [0, 1, 4, 5, 3, 7], [0, 2, 1, 4, 5, 3], [0, 2, 1, 4, 5, 6], [0, 2, 3, 5, 4, 1], [0, 2, 7, 3, 5, 4], [0, 2, 7, 3, 5, 6]]\n", " \n", "# Time and memory Profile\n", "# # Ecrivez votre réponse à la question 6.2 ici" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" }, "latex_envs": { "LaTeX_envs_menu_present": true, "autoclose": false, "autocomplete": true, "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 1, "hotkeys": { "equation": "Ctrl-E", "itemize": "Ctrl-I" }, "labels_anchors": false, "latex_user_defs": false, "report_style_numbering": false, "user_envs_cfg": false } }, "nbformat": 4, "nbformat_minor": 4 }