Loading AI tools
problèmes classiques mathématiques de la théorie des graphes De Wikipédia, l'encyclopédie libre
En théorie des graphes, le problème de plus court chemin est le problème algorithmique qui consiste à trouver un chemin d'un sommet à un autre de façon que la somme des poids des arcs de ce chemin soit minimale.
Il existe de nombreuses variantes de ce problème suivant que le graphe est fini, orienté ou non, que chaque arc ou arête possède ou non une valeur qui peut être un poids ou une longueur. Un chemin le plus court entre deux nœuds donnés est un chemin qui minimise la somme des valeurs des arcs traversés. Pour calculer un plus court chemin, il existe de nombreux algorithmes, selon la nature des valeurs et des contraintes supplémentaires qui peuvent être imposées. Dans de nombreux cas, il existe des algorithmes de complexité en temps polynomiale, comme l'algorithme de Dijkstra dans des graphes avec poids positifs. En revanche, lorsque des contraintes supplémentaires comme des fenêtres de temps sont ajoutées, le problème peut devenir NP-difficile.
L'exemple d'application le plus courant est la recherche d'un trajet le plus court entre deux agglomérations. Ce problème d'apparence facile, puisqu'il s'agit simplement d'additionner les distances kilométriques, devient plus compliqué si on veut en déduire le temps de parcours, car l'intensité du trafic, le temps de traversée des agglomérations, sont des contraintes additionnelles. La recherche de chemin est au contraire un problème d'intelligence artificielle qui se rattache à la planification. Il consiste à trouver comment se déplacer dans un environnement entre un point de départ et un point d'arrivée en prenant en compte différentes contraintes. Il devient ardu lorsque diverses contraintes additionnelles (exécution en temps réel, présence d'incertitudes, contrainte de ressources, environnement évolutif, etc.) doivent être prises en compte.
Le problème et ses solutions dépendent d'abord de la nature des poids : chaque arc est doté d'un poids qui est un nombre réel. Les différents cas considérés sont :
On distingue essentiellement deux variantes du problèmes :
On fixe un sommet , la source ou l'origine, et on cherche un chemin de longueur minimale de cette source à tous les sommets. Les algorithmes les plus importants sont
Des variantes sont :
Le problème dual est la recherche d'un plus court chemin de tous les sommets vers un sommet commun (la cible). Ce problème se traite en inversant le sens des arcs.
On cherche un plus court chemin, ou au moins la longueur d'un tel chemin, pour tous les couples de sommets.
Le problème du plus court chemin peut être formulé comme un problème d'optimisation linéaire comme suit.
Soit un graphe, avec deux sommets distingués (la source ou l'origine) et (le but ou le puits) ; on note le coût de l'arc . On considère le programme linéaire en les variables suivant
avec les contraintes et, pour tout i,
L'explication intuitive est que est une variable qui sert à indiquer si l'arc fait partie ou non du plus court chemin trouvé: elle vaut 1 si c'est le cas, et 0 sinon. On cherche à choisir l'ensemble d'arcs de poids total minimal, pourvu que les arcs composent un chemin de s à t ; cette condition est représentée par la contrainte qui exprime que, pour tout sommet autre que s et t, le nombre d'arcs entrants choisis doit être égal au nombre d'arcs sortant, et ainsi l'ensemble forme un chemin de s à t.
Le programme dual de ce programme linéaire est
avec les contraintes
Pour toute solution réalisable du dual, les coûts réduits sont non négatifs et sur ces coûts réduits, l'algorithme A* se comporte essentiellement comme l'algorithme de Dijkstra.
Une solution du programme dual est un potentiel aux nœuds nennt man ein Knotenpotential. On voit facilement que pour toute solution , le vecteur est aussi une solution pour tout . On peut en particulier choisir de sorte que . Ainsi la valeur à maximiser est .
Pour un chemin quelconque de à un sommet , la longueur peut être estimée
Ceci montre que le potentiel d'un nœud est une borne inférieure à la longueur d'un chemin. On trouve une solution optimale du programme dual en choisissant le potentiel d'un nœud comme la longueur du plus court chemin de à pour la fonction objectif .
La similitude entre l'algorithme de Warshall, l’algorithme de Floyd-Warshall et l'algorithme de McNaughton et Yamada s'explique par une structure algébrique sous-jacente, celle de demi-anneau. Cette interprétation a été présentée, en premier lieu, dans un article de Claude Pair en 1966[1], puis reprise dans un livre de Claude Pair et Jean-Claude Derniame[2]. La première version en anglais n’apparaît qu'en 1974 dans le livre d'Aho, Hopcroft et Ullman[3]. Elle est reprise ultérieurement, par Gondran et Minoux par exemple[4]; ces derniers citent un article français de 1968 de Pierre Robert et Jacques Ferland[5].
Un demi-anneau est un ensemble muni de deux lois binaires et . La loi est associative, commutative et admet un élément neutre noté 0 ou . La loi est associative et distributive par rapport à . Elle admet un élément neutre noté 1 ou . L'algèbre de Boole est un exemple de demi-anneau en prenant , (ou) et (et).
Pour que l'algorithme de Floyd-Warshall généralisé fonctionne, il faut de plus supposer que le neutre de la loi soit absorbant pour la loi . Autrement dit, pour tout élément du demi-anneau, l'égalité doit être vérifiée.
Soit donné un graphe dont les sommets sont . On associe à chaque arc un poids (une longueur, une distance, une densité de trafic selon le problème) qui est un élément d'un demi-anneau (demi-anneau plus ou moins simple selon la nature du problème à traiter). La matrice associée au graphe pondérée est la matrice dont l'élément en position est si l'arc existe, et égal à 0 (le du demi-anneau) sinon.
Le poids d'un chemin est le produit, dans le demi-anneau, des poids de arcs qui le composent :
La longueur du plus court chemin de à est, dans ce formalisme la somme des poids de à . Si l'on note l'ensemble des chemins de à , le chemin cherché est un chemin dont le poids est
Dans le cas où et , c'est le poids minimal d'un chemin reliant à .
Étant donné un graphe de matrice associée d'ordre , avec , on définit deux suites de matrices :
Il s'ensuit que est l'indice du premier sommet intermédiaire entre et , le second sommet est donné par où , etc.
C'est le problème de savoir, pour tout couple de sommets, s'il existe un chemin de à , ou de connaître, pour un sommet donné, les sommets accessibles à partir de . Ce problème de fermeture transitive se formule en choisissant un même poids pour chaque arc.
On peut donc résoudre le premier problème par l'algorithme de Warshall, le deuxième aussi par un simple parcours, en profondeur ou en largeur, à partir du somme s.
La distance minimum pour toute paire de sommets se calcule par l'algorithme de Floyd-Warshall, donc en prenant le demi-anneau tropical ou (max,+)-demi-anneau sur les nombres réels positifs ou nuls.
La capacité de trafic possible sur un chemin est le minimum des capacités des arcs qui composent le chemin. Le chemin de capacité maximale est celui qui maximise ce minimum. On calcule les valeurs par l'algorithme de Warshall généralisé, en prenant et .
Un réseau routier peut être considéré comme un graphe avec des poids positifs. Les nœuds représentent des croisements de routes et chaque arc du graphe est associé à un segment de route entre deux croisements. Le poids d'un arc peut correspondre à la longueur du segment de route associé, au temps nécessaire pour traverser le segment ou au coût de parcours du segment. En utilisant des graphes orientés, il est également possible de modéliser des rues en sens unique. Ces graphes ont des propriétés particulières en ce sens que certains arcs sont plus importants que d'autres pour les voyages à longue distance (typiquement les autoroutes). Cette propriété a été formalisée en utilisant un paramètre supplémentaire appelé « Highway Dimension »[6]. Elle permet de calculer des chemins optimaux plus rapidement que dans les graphes généraux. L'idée première est que si on veut aller d'une petite ville à une autre, située assez loin, on a intérêt à chercher une grande ville près du lieu de départ, et une grande ville près de l'arrivée, et de combiner le chemin en passant par les deux grandes agglomérations.
Ces algorithmes travaillent en deux phases. Dans une première phase de prétraitement, le graphe est adapté pour permettre une interrogation rapide. La deuxième phase est la phase d'interrogation ; les nœuds de départ et d'arrivée sont alors connus, et comme le réseau est statique, le prétraitement peut être fait une fois pour toutes et être utilisé pour de nombreuses interrogations.
L'algorithme le plus rapide connu (en 2011) est appelé « hub labelling », et calcule les chemins les plus courts en quelques fractions de secondes[7]
Dans certains problèmes de transport, les poids sont des fonctions qui peuvent varier avec le temps pour tenir compte des fluctuations du trafic par exemple. Dans ce cas, la méthode algébrique s'applique toujours en choisissant comme demi-anneau le demi-anneau des endomorphismes croissants sur un dioïde, avec la somme induite , et la composition pour produit. Ainsi, si l'on cherche à trouver le chemin le plus rapide dans un réseau où le trafic est variable en fonction de l'heure de départ, on peut appliquer les algorithmes usuels en valuant chaque route par une fonction donnant l'heure d'arrivée en fonction de l'heure de départ, et en considérant pour le minimum d'une fonction prise à l'heure de départ.
Il arrive, en particulier dans les réseaux de transports en commun, que certains arcs ne puissent être parcourus que dans certaines contraintes horaires (pas la nuit par exemple). On suppose que le temps de parcours de chaque arc est fixé, ainsi qu'un ensemble de plages horaires où il est possible d'emprunter cette route. On considère alors le dioïde des endomorphismes pris sur les intervalles de temps définis ainsi : soit l'intervalle de temps où l'on souhaite partir du sommet ; alors est l'intervalle de temps où il est possible d'arriver au sommet relié à . On peut ajouter d'autres contraintes à (par intersection avec des plages horaires pour éviter certaines périodes, en ajoutant des contraintes de prix par produit cartésien avec la matrice des coûts de transport muni d'une loi min pondérée entre temps et prix). Dans tous les cas, l'algorithme de Dijkstra permet une résolution efficace.
Dans des situations réelles, le réseau de transport est habituellement stochastique et dépend du temps. En effet, un voyageur qui parcourt un trajet quotidiennement peut connaître des temps de déplacement différents sur ce trajet en raison non seulement des fluctuations de l'intensité du trafic, mais aussi des incidents plus localisés tels que les zones de travaux sur la chaussée, les mauvaises conditions climatiques, les accidents et les pannes de véhicules. Par conséquent, un réseau stochastique temporel est une représentation plus réaliste d'un réseau routier réel qu'un réseau déterministe[8]. Malgré des progrès considérables, la définition et l'identification d'un chemin optimal dans les réseaux routiers stochastiques reste un sujet controversé. En d'autres termes, il n'y a pas de définition unique d'un chemin optimal en présence d'incertitude. Une réponse possible et répandue est un chemin qui réalise le temps de déplacement minimum prévu. Le principal avantage de cette approche qu'elle permet d'utiliser les algorithmes de plus court chemin introduits pour les réseaux déterministes pour identifier le trajet avec le temps de déplacement minimum attendu dans un réseau stochastique.
Cependant, le chemin optimal peut ne pas être satisfaisant, parce que cette approche ne prend pas en compte la variabilité du temps de déplacement. Pour résoudre ce problème, certains chercheurs utilisent une distribution du temps de déplacement plutôt que la valeur moyenne, et ils obtiennent la distribution de probabilité du temps de déplacement total en utilisant différentes méthodes d'optimisation telles que la programmation dynamique et l'algorithme de Dijkstra[9]. Ces méthodes utilisent l'optimisation stochastique, et notamment la programmation dynamique stochastique pour trouver le chemin le plus court dans les réseaux à longueur d'arc probabiliste[10]. Il convient de noter que le concept de fiabilité du temps de déplacement est utilisé de façon interchangeable avec la variabilité du temps de déplacement dans la littérature de recherche sur les transports, de sorte que, en général, on peut dire que plus la variabilité du temps de déplacement est élevée, plus la fiabilité est basse et vice-versa.
Afin de rendre compte plus précisément de la fiabilité du temps de déplacement, deux définitions alternatives communes pour un chemin optimal sous incertitude ont été suggérées. Certains ont introduit le concept de chemin le plus fiable, visant à maximiser la probabilité d'arriver à temps ou plus tôt qu'un coût de déplacement donné. D'autres ont mis en avant le concept d'un chemin α-fiable sur la base duquel ils ont eu l'intention de minimiser le coût du déplacement pour assurer une probabilité d'arrivée à l'heure prédéterminée.
Mulmulay et Shah ont donné des bornes inférieures de complexité pour le problème du plus court chemin[11].
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.