Modèles de Flot - Cours 1 - Institut de Mathématiques de Bordeaux
Transcription
Modèles de Flot - Cours 1 - Institut de Mathématiques de Bordeaux
Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Modèles de Flot - Cours 1 P. Pesneau [email protected] Université de Bordeaux Bât A33 - Bur 265 P. Pesneau [email protected] Modèles de Flot - Cours 1 1 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Ouvrage de référence R. K. Ahuja, T. L. Magnanti and J. B. Orlin - “Network Flows : Theory, Algorithms, and Applications” - Prentice Hall, 1993. P. Pesneau [email protected] Modèles de Flot - Cours 1 2 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Sommaire 1 Introduction Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau 2 Quelques opérations sur les réseaux 3 Plus courts chemins (PCC) P. Pesneau [email protected] Modèles de Flot - Cours 1 3 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Un exemple de flot de coût minimum Une entreprise désire définir le plan de transport du produit qu’elle fabrique depuis ses usines vers ses points de vente. Ce plan de transport doit respecter des contraintes de capacités définies sur les différents axes empruntés, et minimiser une fonction coût défini comme étant la somme des coûts d’utilisation de chaque axe routier. Ces derniers varient linéairement en fonction de la quantité transportée sur l’axe. P. Pesneau [email protected] Modèles de Flot - Cours 1 4 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Modélisation du réseau routier On va représenter le réseau routier sous la forme d’un graphe orienté G = (N, A) : L’ensemble N des nœuds du graphe va représenter l’ensemble des croisements du réseau routier, des usines et des vendeurs. L’ensemble A des arcs du graphe va représenter l’ensemble des axes possibles au sein du réseau routier. A chaque arc (i, j) ∈ A on associe : une capacité maximale uij pouvant être transportée. un coût cij de transport d’un produit sur cet axe. A chaque sommet i ∈ N on associe une valeur b(i) représentant : si b(i) > 0, une quantité de produit fabriquée à ce nœud. si b(i) < 0, une quantité de produit demandée à ce nœud. si b(i) = 0, un nœud de transit. P. Pesneau [email protected] Modèles de Flot - Cours 1 5 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Modélisation du plan de transport Soit xij le nombre de produits transportés sur l’axe (i, j) ∈ A. Le plan de transport doit respecter : les contraintes de conservation de flot à chaque nœud du réseau. Penser qu’un nœud avec du stock ou de la demande, peut également servir de nœud de transit pour d’autres produits. si b(i) = 0 (nœud de transit), alors quantité quittant le nœud = quantité arrivant au nœud. si b(i) > 0 (nœud d’approvisionnement), alors quantité quittant le nœud = quantité arrivant au noeud +b(i) si b(i) < 0 (nœud de demande), alors quantité quittant le nœud = quantité arrivant au noeud −(−b(i)). les contraintes de capacités. les contraintes de positivité. P. Pesneau [email protected] Modèles de Flot - Cours 1 6 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Modèle mathématique Min X cij xij (i,j)∈A t.q. X j:(i,j)∈A xij − X xji = b(i) ∀i ∈ N, j:(j,i)∈A lij (= 0) ≤ xij ≤ uij ∀(i, j) ∈ A. Ecriture sous forme matricielle : Min c.x t.q. N x = b, l (= 0) ≤ x ≤ u, N : matrice d’incidence du graphe orienté G représentant le réseau. P. Pesneau [email protected] Modèles de Flot - Cours 1 7 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Caractéristiques La matrice N est totalement unimodulaire : le déterminant de toutes sous-matrices carrées extraites de N vaut −1, 0 ou 1. Conséquence : Si les données du problème (c, b, l, u) sont entières alors toutes solutions de base (et en particulier les solutions de base optimales) sont entières Pourquoi regarder des algorithmes combinatoires ? Complexité polynomiale assurée. Pas besoin d’avoir un solveur linéaire. Peuvent être plus rapide que les solveurs linéaires. P. Pesneau [email protected] Modèles de Flot - Cours 1 8 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Cas particuliers Si b(i) = 0 pour tout i ∈ N, le flot est appelé circulation. Problème du(des) plus court(s) chemin(s) : Rechercher dans un réseau le plus court chemin d’un sommet s à un sommet t. les plus courts chemins d’un sommet s vers tous les autres sommets. Problème du flot maximum : Quelle est la quantité maximum de produits que l’on peut envoyer dans le réseau entre un sommet s et un sommet t. P. Pesneau [email protected] Modèles de Flot - Cours 1 9 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Notations G = (N, A) : le graphe représentant le réseau, N = {1, . . . , n = |N|} l’ensemble des nœuds, A l’ensemble des arcs, et m = |A| b(i) quantité de stock (positif) ou de demande (négatif) au sommet i ∈ N. cij coût unitaire de l’arc (i, j) ∈ A, lij la borne inférieure du flot circulant sur l’arc (i, j) ∈ A. uij la borne supérieure du flot circulant sur l’arc (i, j) ∈ A. xij la quantité (variable) de flot circulant sur l’arc (i, j) ∈ A. Hypothèse : on a une seule commodité (c-à-d un seul type de produit). P. Pesneau [email protected] Modèles de Flot - Cours 1 10 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Sommaire 1 Introduction Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau 2 Quelques opérations sur les réseaux 3 Plus courts chemins (PCC) P. Pesneau [email protected] Modèles de Flot - Cours 1 11 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Rappel sur la complexité La complexité d’un algorithme correspond à l’effort fournit par celui-ci pour résoudre un problème. Comment evaluer la complexité ? Temps de calcul : mauvaise idée, il dépend de la machine. Nombre d’opérations élémentaires (addition, multiplication, comparaison, ...) : execution en temps constant. Le nombre d’opérations effectuées (la complexité) est fonction de la taille du problème. Plus particulièrement, on s’intéresse à l’ordre de grandeur de l’effort de calcul requis quand la taille du problème devient grande. La taille d’un problème peut se définir comme la quantité d’information nécessaire pour spécifier le problème à résoudre (taille du fichier de données). P. Pesneau [email protected] Modèles de Flot - Cours 1 12 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Différentes complexités Analyse empirique : la complexité est estimée en pratique (tests intensifs). Analyse du meilleur des cas : calcule une borne inférieure de la complexité (représente rarement la réalité). Analyse de la complexité moyenne : estime l’effort de calcul moyen (basée sur des hypothèses probabilistes, analyse complexe). Analyse du pire des cas : calcule une borne supérieure sur le nombre d’opérations. P. Pesneau [email protected] Modèles de Flot - Cours 1 13 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Comparaison asymptotique : notation de Landau O(g (n)) = {f (n) : ∃C0 ∈ IR + , N0 ∈ IN / |f (n)| ≤ C0 |g (n)|, ∀n > N0 } Ω(g (n)) = {f (n) : ∃C0 ∈ IR + , N0 ∈ IN / C0 |g (n)| ≤ |f (n)|, ∀n > N0 } Θ(g (n)) = {f (n) : ∃C1 , C2 ∈ IR + , N0 ∈ IN / C1 |g (n)| ≤ |f (n)| ≤ C2 |g (n)|, ∀n > N0 } P. Pesneau [email protected] Modèles de Flot - Cours 1 14 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Complexité d’un algorithme Notations : T (i) : nombre d’opérations pour résoudre une instance I . l(I ) : taille du fichier de données décrivant I . T (n) : nombre max d’opération pour résoudre un problème de taille n. T (n) = maxI {T (I ) : l(I ) = n} Complexité : Algorithme polynômial : T (n) ∈ O(nk ) Bon algorithme, algorithme efficace. Algorithme exponentiel : T (n) ∈ Ω(αn ), α > 1. P. Pesneau [email protected] Modèles de Flot - Cours 1 15 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Taux de croissance Temps pour un ordinateur de 1GHz Compl. n n2 n3 n5 2n 3n 10 1 10−8 sec. 1 10−7 sec. 1 10−6 sec. 1 10−3 sec. 20 2 10−8 sec. 4 10−7 sec. 8 10−6 sec. 3.2 10−3 sec. 1 10−6 sec. 5.9 10−5 sec. 1 10−3 sec. 3.5 sec. taille n 30 40 3 10−8 4 10−8 sec. sec. 9 10−7 16 10−7 sec. sec. 27 10−6 64 10−6 sec. sec. 24.3 10−3 1 10−1 sec. sec. 1 sec. 2.4 jours P. Pesneau [email protected] 18 min. 3.8 siècles 50 5 10−8 sec. 25 10−7 sec. 125 10−6 sec. 3.1 10−1 sec. 60 6 10−8 sec. 36 10−7 sec. 216 10−6 sec. 7.8 10−1 sec. 313 heures 22.7 103 mill. 36.5 ans 1.3 109 mill. Modèles de Flot - Cours 1 16 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Sommaire 1 Introduction Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau 2 Quelques opérations sur les réseaux 3 Plus courts chemins (PCC) P. Pesneau [email protected] Modèles de Flot - Cours 1 17 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Matrice d’incidence Le réseau est représenté 1 −1 ni,(j,k) = 0 2 (25,30) (15,40) par une matrice N ∈ {−1, 0, 1}n×m où si i = j, si i = k, sinon 4 (35,50) (45,10) (45,60) 1 (35,50) (15,30) 3 (25,20) ∀i ∈ N, ∀(j, k) ∈ A. 5 1 2 3 4 5 (1, 2) 1 −1 0 0 0 (1, 3) 1 0 −1 0 0 (2, 4) 0 1 0 −1 0 (3, 2) 0 −1 1 0 0 (4, 3) 0 0 −1 1 0 (4, 5) 0 0 0 1 −1 (5, 3) 0 0 −1 0 1 (5, 4) 0 0 0 −1 1 (cij , uij ) i j P. Pesneau [email protected] Modèles de Flot - Cours 1 18 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Matrice d’adjacence Le réseau est représenté par une matrice N ∈ {0, 1}n×n où 1 si (i, j) ∈ A, ni,j = ∀i, j ∈ N. 0 sinon 2 (25,30) (15,40) 4 (35,50) (45,10) (45,60) 1 (35,50) (15,30) 3 (25,20) 5 (cij , uij ) i 1 2 3 4 5 1 0 0 0 0 0 2 1 0 1 0 0 3 1 0 0 1 1 4 0 1 0 0 1 5 0 0 0 1 0 j P. Pesneau [email protected] Modèles de Flot - Cours 1 19 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Flot de coût minimum Introduction à la complexité Représentation informatique d’un réseau Liste d’adjacence 2 (25,30) (15,40) i 4 (45,60) (35,50) (15,30) 3 (25,20) 5 (cij , uij ) i cij uij (35,50) (45,10) 1 j j P. Pesneau [email protected] 1 2 25 30 2 4 15 40 0 3 2 45 10 0 4 3 15 30 5 45 60 0 5 3 25 20 4 35 50 0 Modèles de Flot - Cours 1 3 35 50 0 20 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Sommaire 1 Introduction 2 Quelques opérations sur les réseaux Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots 3 Plus courts chemins (PCC) P. Pesneau [email protected] Modèles de Flot - Cours 1 21 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Orienter le réseau Dans certains cas, il arrive que le réseau étudié contient des arêtes (arcs non orientés) permettant ainsi au flot de circuler dans les deux sens. Soit {i, j} une arête. Si le coût c{i,j} de l’arête est positif et si la capacité inférieure l{i,j} de l’arête est nulle, alors on remplace l’arête {i, j} par deux arcs (i, j) et (j, i) de coût cij = cji = c{i,j} et de capacité supérieure uij = uji = u{i,j} . i (c{i,j} , u{i,j} ) j i (cij , uij ) j (cji , uji ) P. Pesneau [email protected] Modèles de Flot - Cours 1 22 / 54 Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Supprimer les bornes inférieures Lorsqu’un flot minimum est requis sur un arc (i, j) ∈ A (c-à-d lij > 0), on effectue le changement de variable xij0 = xij − lij ⇔ xij = xij0 + lij . Cela revient à augmenter la demande (diminuer b(i)) du nœud i de lij . augmenter la production (augmenter b(j)) du nœud j de lij . diminuer la capacité uij de l’arc (i, j) de lij . i b(i) (cij , uij ) xij j b(j) P. Pesneau [email protected] i (cij , uij − lij ) b(i) − lij Modèles de Flot - Cours 1 xij0 j b(j) + lij 23 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Diviser les nœuds Il arrive que l’on ait un coût ci et/ou une capacité maximum ui sur un nœud i ∈ N. Dans ce cas, on divise le nœud i en deux nœuds i − et i + correspondants respectivement au point d’entrée et au point de sortie du nœud i. On ajoute un arc (i − , i + ) de coût ci et de capacité maximum ui . i b(i), ci , ui P. Pesneau [email protected] i− (ci , ui ) i+ b(i)− xi − j + b(i)+ Modèles de Flot - Cours 1 24 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Sommaire 1 Introduction 2 Quelques opérations sur les réseaux Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots 3 Plus courts chemins (PCC) P. Pesneau [email protected] Modèles de Flot - Cours 1 25 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Algorithme de parcours Soient G = (N, A) un graphe orienté et s ∈ N. Un algorithme de parcours va explorer le graphe à partir du nœud s afin de déterminer les nœuds ateignables par un chemin à partir de s. Algorithme générique : Démarquer tous les nœuds de N Marquer s Pred(s) = −1 Liste = {s} tant que Liste non vide faire Prendre un élément i de Liste si i est adjacent à un nœud j non marqué alors Marquer nœud j Pred(j) = i Ajouter j à Liste sinon Retirer i de Liste fin si fin tant que P. Pesneau [email protected] Complexité : Matrice d’adjacence → O(n2 ) Liste d’adjacence → O(m) Modèles de Flot - Cours 1 26 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Algorithme de parcours Un algorithme de parcours permet (entre autre) de : vérifier la connexité d’un graphe non-orienté. vérifier la forte connexité d’un graphe orienté. déterminer les composantes connexe d’un graphe. détecter la présence de cycles. déterminer si un graphe est biparti. P. Pesneau [email protected] Modèles de Flot - Cours 1 27 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Parcours en largeur / profondeur Parcours en largeur (breadth-first search) : La liste des nœuds de l’algorithme de parcours est géré comme une file (le premier arrivé est le premier servi - first in, first out - FIFO). Parcours en profondeur (depth-first search) : La liste des nœuds de l’algorithme de parcours est géré comme une pile (le dernier arrivé est le premier servi - last in, first out - LIFO). P. Pesneau [email protected] Modèles de Flot - Cours 1 28 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Sommaire 1 Introduction 2 Quelques opérations sur les réseaux Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots 3 Plus courts chemins (PCC) P. Pesneau [email protected] Modèles de Flot - Cours 1 29 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Ordre topologique Un ordre (ou permutation) des nœuds de N est une fonction qui à tout sommet de N associe un entier distinct de {1, . . . , n}. Un ordre σ est dit topologique si pour tout arc (i, j) ∈ A on a σ(i) < σ(j). Un graphe orienté possède un ordre topologique sur ses nœuds si et seulement si il ne contient pas de circuits. Pour un graphe orienté sans circuit, il peut exister plusieurs ordres topologiques. P. Pesneau [email protected] Modèles de Flot - Cours 1 30 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Ordre topologique Algorithme permettant de trouver un ordre topologique : pour tout i ∈ N faire DegEnt(i) = 0 fin pour pour tout (i, j) ∈ A faire DegEnt(j) = DegEnt(j) + 1 fin pour List = ∅, next = 0 pour tout i ∈ N faire si DegEnt(i) == 0 alors Ajouter i à list fin si fin pour tant que List n’est pas vide faire Prendre et retirer un nœud i de List next = next + 1, Ordre(i) = next pour tout voisin j de i faire DegEnt(j) = DegEnt(j) − 1 si DegEnt(j) == 0 alors Ajouter j à List fin si fin pour fin tant que si next < n alors Le graphe contient un circuit sinon Ordre définit un ordre topologique fin si Complexité en O(m). P. Pesneau [email protected] Modèles de Flot - Cours 1 31 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Sommaire 1 Introduction 2 Quelques opérations sur les réseaux Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots 3 Plus courts chemins (PCC) P. Pesneau [email protected] Modèles de Flot - Cours 1 32 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Représentation des flots Un flot peut être représenté de deux façons : flot sur les arcs (arc flow) : variables xij , (i, j) ∈ A représentant la quantité de flot circulant sur cet arc. flot sur les chemins et cycles (path and cycle flow) : Soit P = ensemble des chemins du réseau et W = l’ensemble des circuits. Variables fp , p ∈ P, et fw , w ∈ W, indiquant la quantité de flot circulant sur le chemin ou le circuit. 4 2 6 4 2 4 4 4 1 2 0 2 3 2 6 1 6 3 3 3 5 3 5 3 P. Pesneau [email protected] Modèles de Flot - Cours 1 33 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Représentation des flots A chaque flot sur les chemins et cycles correspond un unique flot sur les arcs donné par : X X xij = fp + fw . p∈P:(i,j)∈p w ∈W:(i,j)∈w En revanche, à un flot sur les arcs peuvent correspondre plusieurs flot sur chemins et cycles. P. Pesneau [email protected] Modèles de Flot - Cours 1 34 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Algorithme de décomposition de flots pour chaque arc (i, j) ∈ A faire Excess(i) = Excess(i) − xij , Excess(j) = Excess(j) + xij fin pour pour chaque nœud i ∈ N tel que Excess(i) < 0 faire Ajouter i à ListDef fin pour tant que ListDef n’est pas vide faire Prendre un nœud s de ListDef, i = s Prendre un arc (i, j) ∈ A avec xij > 0, F = {(i, j)} tant que j n’a pas été visité et Excess(j) ≤ 0 faire i = j, Prendre un arc (i, j) ∈ A avec xij > 0, F = F ∪ {(i, j)} fin tant que si Excess(j) > 0 alors δ = min(−Excess(s), Excess(j), min(i,j)∈F xij ), fF = δ xij = xij − δ pour tout (i, j) ∈ F Excess(s) = Excess(s) + δ, Excess(j) = Excess(j) − δ si Excess(i) == 0 alors Retirer s de ListDef fin si sinon δ = min(i,j)∈F xij , fW = δ xij = xij − δ pour tout (i, j) ∈ W fin si fin tant que pour tout arc (i, j) ∈ A tel que xij > 0 faire Ajouter (i, j) à ListPos fin pour tant que ListPos n’est pas vide faire Prendre un arc (s, t) de ListPos, W = {(s, t)}, i = t Prendre un arc (i, j) ∈ A avec xij > 0, W = {(i, j)} tant que j n’a pas été visité faire i = j, Prendre un arc (i, j) ∈ A avec xij > 0, W = W ∪ {(i, j)} fin tant que δ = min(i,j)∈W xij , fW = δ pour tout (i, j) ∈ W faire xij = xij − δ si xij = 0 alors Retirer (i, j) de ListPos. fin si fin pour fin tant que Complexité en 0(nm) P. Pesneau [email protected] Modèles de Flot - Cours 1 35 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Simplification du réseau Parcours de graphe Ordre topologique Décomposition de flots Théorème de décomposition de flots Théorème 1 Tout flot sur les chemins et cycles a une unique représentation en un flot sur les arcs. Tout flot sur les arcs possède au moins une représentation en un flot sur chemins et cycles avec les propriétés : 1 2 Chaque chemin connecte un nœud de stock à un nœud de demande. le flot est décomposé en au plus n + m chemins et cycles dont au plus m cycles. Propriété 2 Toute circulation définie par un flot sur les arcs peut être décomposé en un flot sur au plus m cycles. P. Pesneau [email protected] Modèles de Flot - Cours 1 36 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Sommaire 1 Introduction 2 Quelques opérations sur les réseaux 3 Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra P. Pesneau [email protected] Modèles de Flot - Cours 1 37 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Problème des plus courts chemins Soient G = (N, A) un réseau, c une fonction coût sur les arcs, et s un sommet. Le problème consiste à trouver les plus courts chemins de s vers tous les sommets de N \ {s}. Intérêts : Problème simple illustrant l’intérêt de l’optimisation de flot dans les réseaux. Nombreuses applications directes. Intervient dans beaucoup problèmes plus généraux. Problème facile à résoudre mais demandant de l’ingéniosité pour être vraiment efficace. C’est un cas particulier du problème de flot de coût minimum : b(s) = n − 1, b(i) = −1 ∀i ∈ N \ {s}. P. Pesneau [email protected] Modèles de Flot - Cours 1 38 / 54 Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Modèle mathématique Min X cij xij (i,j)∈A t.q. X xsj − j:(s,j)∈A X j:(i,j)∈A X xjs = n − 1, j:(j,s)∈A xij − X xji = −1 ∀i ∈ N \ {s}, j:(j,i)∈A xij ≥ 0 P. Pesneau [email protected] ∀(i, j) ∈ A. Modèles de Flot - Cours 1 39 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Hypothèses On suppose les éléments suivants : Les coûts cij , (i, j) ∈ A, sont entiers. Le réseau contient un chemin de s vers tous les autres nœuds. Le réseau ne contients pas de cycles de coût négatif. Le réseau est orienté. P. Pesneau [email protected] Modèles de Flot - Cours 1 40 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Sommaire 1 Introduction 2 Quelques opérations sur les réseaux 3 Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra P. Pesneau [email protected] Modèles de Flot - Cours 1 41 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Arbre des plus courts chemins Propriété 3 Si le chemin P = {s, i1 , i2 , . . . , ik−1 , ik } est un plus court chemin de s vers ik , alors pour tout q ∈ {1, . . . , k − 1} le sous-chemin Ps,iq = {s, i1 , i2 , . . . , iq } est un plus court chemin de s à iq . Preuve. Supposons que P est un plus court chemin de s à ik mais, au contraire, qu’il existe q ∈ {1, . . . , k − 1} tel que Ps,iq ne soit pas un plus court chemin de s à iq . Notons par Piq ,ik le sous-chemin de P allant de iq à ik . 0 Soit Ps,i un chemin strictement plus court que Ps,iq pour aller de s à iq . La q 0 concaténation des chemins Ps,i et Piq ,ik définit un cheminement de s à ik de longueur q strictement plus petite que celle de P. Ce cheminement est composé d’un chemin P 0 de s à ik et de possibles circuits. Comme par hypothèse on n’a pas de circuit de coût négatif, le chemin P 0 est un chemin de s à ik plus court que le chemin P, une contradiction. P. Pesneau [email protected] Modèles de Flot - Cours 1 42 / 54 Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Arbre des plus courts chemins Propriété 4 Si le chemin P = {s, i1 , i2 , . . . , ik−1 , ik } est un plus court chemin de s vers ik , alors pour tout q ∈ {1, . . . , k − 1} le sous-chemin Ps,iq = {s, i1 , i2 , . . . , iq est un plus court chemin de s à iq . iq Ps,iq Piq ,ik s 0 Ps,i q P. Pesneau [email protected] ik Modèles de Flot - Cours 1 43 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Arbre des plus courts chemins Propriété 5 Soit d ∈ Nn un vecteur représentant pour chaque nœud i ∈ N la longueur du plus court chemin de s à i. Alors un chemin P de s à un sommet k ∈ N \ {s} est un plus court chemin si et seulement si pour tout arc (i, j) ∈ P on a d(j) = d(i) + cij . Preuve. ⇒ Si P est un plus court chemin de s à k, alors par la propriété 3 on a d(j) = d(i) + cij pour tout arc (i, j) ∈ P. ⇐ Supposons que P = {s, i1 , i2 , . . . , ik−1 , k} et que d(j) = d(i) + cij pour tout arc (i, j) ∈ P. On a alors d(k) = (d(k)−d(ik−1 ))+(d(ik−1 )−d(ik−2 ))+· · ·+(d(i2 )−d(i1 ))+(d(i1 )−d(s)), en notant que d(s) = 0. Il s’ensuit que P d(k) = ck,ik−1 + cik−1 ,ik−2 + · · · + ci2 ,i1 + ci1 ,s = (i,j)∈P cij . La longueur du chemin P est donc égale à la longueur du plus court chemin de s à k. P. Pesneau [email protected] Modèles de Flot - Cours 1 44 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Arbre des plus courts chemins Propriété 6 Il existe un arbre couvrant T du réseau G enraciné en s tel que pour tout sommet i ∈ N \ {s}i, l’unique chemin de s à i dans T est un plus court chemin de s à i. Preuve. Soit d ∈ Nn un vecteur représentant pour chaque nœud i ∈ N la longueur du plus court chemin de s à i. Par la propriété 5, on sait que les plus courts chemins de la source s vers un sommet i appartient au réseau G 0 induit par les arcs (i, j) ∈ A tels que d(j) = d(i) + cij . Un parcours en largeur de ce graphe à partir de s va donner un arbre des plus courts chemins issus de s. P. Pesneau [email protected] Modèles de Flot - Cours 1 45 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Sommaire 1 Introduction 2 Quelques opérations sur les réseaux 3 Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra P. Pesneau [email protected] Modèles de Flot - Cours 1 46 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra PCC dans les graphes acycliques Soit G = (N, A) un réseau ne contenant pas de circuit. On suppose que les nœuds sont numérotés suivant un ordre topologique. Soient s un nœud source et c une fonction coût sur les arcs de A. Les arcs peuvent avoir des coûts négatifs. L’algorithme suivant calcule l’arbre des plus courts chemins issus de s dans G . d(s) = 0, d(i) = +∞ pour tout i ∈ N \ {s} pred(i) = −1 pour tout nœud i ∈ N pour i allant de 1 à n faire pour tout les arcs (i, j) ∈ A faire si d(j) > d(i) + cij alors d(j) = d(i) + cij pred(j) = i fin si fin pour fin pour Compléxité en O(m) P. Pesneau [email protected] Modèles de Flot - Cours 1 47 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra PCC dans les graphes acycliques Assertion 7 L’algorithme précédent est correct. Preuve. On montre par récurrence qu’à chaque itération le nœud traité a une distance d(.) qui est optimale. Selon nos hypothèses, le réseau contient un chemin de s vers tous les autres nœuds. Par conséquent, le nœud s est le premier nœud de l’ordre topologique. Ainsi d(1 = s) = 0. Supposons que l’on a traité les nœuds {1, . . . , k} et que l’on va traiter le nœud k + 1. Soit j le nœud précédent k + 1 dans le plus court chemin de s à k + 1. Du fait de l’ordre topologique, j < k + 1 et donc a déjà été traité. Lors du traitement du nœud j, la valeur de d(k + 1) a été mise à jour avec la valeur d(j) + cj,k+1 . d(k + 1) contient donc la valeur du plus court chemin de s à k + 1. P. Pesneau [email protected] Modèles de Flot - Cours 1 48 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Sommaire 1 Introduction 2 Quelques opérations sur les réseaux 3 Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra P. Pesneau [email protected] Modèles de Flot - Cours 1 49 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Algorithme de Dijkstra L’algorithme de Dijkstra permet de trouver les plus courts chemins issus d’un nœud source dans un réseau quelconque. En revanche, les coûts sur les arcs doivent tous être positifs. L’algorithme maintient pour chaque nœud un label de distance d(.) donnant une borne supérieure sur la longueur du plus court chemin de la source vers ce nœud. Il maintient également une partition des nœuds en deux sous-ensembles : les nœuds avec un label permanent : ce sont les nœuds traités ayant un label correspondant à la valeur du plus court chemin à partir de s. les nœuds avec un label temporaire. Le label correspond à la distance du plus court chemin de s vers ce nœud ne passant que par des nœuds avec un label permanent. P. Pesneau [email protected] Modèles de Flot - Cours 1 50 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Algorithme de Dijkstra A chaque itération, l’algorithme va choisir le nœud avec le label temporaire le plus petit. le désigner comme un nœud avec un label permanent. mettre à jour le label de ses voisins. Perm = ∅, Temp = N d − s) = 0, d(i) = +∞ pour tout i ∈ N \ {s} pred(s) = 0 tant que Temp n’est pas vide faire i ∗ = argmin{d(i) : i ∈ Temp} Temp = Temp \ {i ∗ } Perm = Perm ∪ {i ∗ } pour tout arc (i ∗ , j) ∈ A faire si d(j) > d(i ∗ ) + ci ∗ j alors d(j) = d(i ∗ ) + ci ∗ j pred(j) = i ∗ fin si fin pour fin tant que P. Pesneau [email protected] Modèles de Flot - Cours 1 51 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Correction de l’algorithme Assertion 8 L’algorithme de Dijkstra est correct. Preuve. Les hypothèses de récurrence sont les suivantes : 1 Les labels des nœuds de Perm sont optimaux 2 Les labels des nœuds de Temp correspond à la longueur du plus court chemin ne contenant que des nœuds de Perm. La preuve se fait par récurrence sur la cardinalité de Perm. On doit montrer qu’à l’itération suivante les deux hypothèses seront toujours satisfaites. P. Pesneau [email protected] Modèles de Flot - Cours 1 52 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Correction de l’algorithme Preuve (suite). Pour l’hypothèse 1 : Soit i ∗ = argmin{d(i) : i ∈ Temp}. Soit P un chemin de s vers i ∗ passant par des nœuds de Temp. Notons par k le premier nœud de Temp visité par P, par Ps,k le sous-chemin de P entre s et k et par Pk,i ∗ le sous-chemin de P entre k et i ∗ . La longueur de P est donnée par la longueur de Ps,k plus la longueur de Pk,i ∗ . Par l’hypothèse de récurrence 2, la longueur de Ps,k est plus grande que d(k). De plus, comme les coûts sont positifs, la longueur de Pk,i ∗ est positive. Comme d(k) ≥ d(i ∗ ), il s’ensuit que la longueur de P est ≥ d(i ∗ ). Ainsi d(i ∗ ) représente bien la longueur du plus court chemin de s à i ∗ . La preuve pour l’hypothèse 2 est similaire à la preuve de l’assertion 7. P. Pesneau [email protected] Modèles de Flot - Cours 1 53 / 54 Introduction Quelques opérations sur les réseaux Plus courts chemins (PCC) Introduction Arbre des plus courts chemins PCC dans les graphes acycliques Algorithme de Dijkstra Complexité de l’algorithme Théorème 9 La complexité de l’algorithme de Dijkstra est en O(n2 ) Preuve. Complexité = # itérations × (recherche i ∗ + mise à jour label) (# itérations × recherche i ∗ ) + (# itérations × mise à jour label) O(n × n) + O(m) O(n2 ) P. Pesneau [email protected] Modèles de Flot - Cours 1 54 / 54