Modèles de Flot - Cours 4
Transcription
Modèles de Flot - Cours 4
Problème du flot maximum - Algorithmes polynomiaux Modèles de Flot - Cours 4 P. Pesneau [email protected] Université de Bordeaux Bât A33 - Bur 265 P. Pesneau [email protected] Modèles de Flot - Cours 4 1 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Sommaire 1 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots P. Pesneau [email protected] Modèles de Flot - Cours 4 2 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Labels de distance Les algorithmes de ce cours seront basés sur des labels de distances d(i), i ∈ N associés aux nœuds du réseau. Conditions de validités : d(t) = 0, d(i) ≤ d(j) + 1 pour tout arc (i, j) du graphe résiduel G [x] (avec rij > 0). P. Pesneau [email protected] Modèles de Flot - Cours 4 3 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Labels de distance Propriété 1 Si les labels de distance sont valides alors d(i), i ∈ N, va représenter une borne inférieure sur la longueur du plus court chemin (en nombre d’arcs) du nœud i au nœud t dans le graphe résiduel. Preuve. Soit P = {i = i1 , i2 , i3 , . . . , ik = t} un plus court chemin de i à t de longueur k − 1. En écrivant et combinant successivement les conditions de validité pour les arcs de P en partant du dernier, on obtient d(i) ≤ k − 1. P. Pesneau [email protected] Modèles de Flot - Cours 4 4 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Labels de distance Propriété 2 Si d(s) ≥ n alors le graphe résiduel ne contient pas de chemin de s à t. Les labels de distances sont dits exacts si ils égalent la longueur du plus court chemin des nœuds vers la destination t/ Un arc (i, j) est dit admissible si et seulement si d(i) = d(j) + 1. Un chemin est dit admissible s’il n’est composé que d’arcs admissibles Propriété 3 Un chemin admissible de s à t est un plus court chemin augmentant. P. Pesneau [email protected] Modèles de Flot - Cours 4 5 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Algorithme des plus courts chemins augmentants Algorithme de Ahuja et Orlin : Initialiser les labels de distance d à l’aide d’un parcours en largeur inverse. x =0 i =s tant que d(s) < n faire si i a un arc admissible (i, j) alors pred(j) = i, i = j si i == t alors Identifier le chemin augmentant à l’aide de pred. Augmenter le flot le long du chemin i =s fin si sinon d(i) = min{d(j) + 1 : (i, j) ∈ A et rij > 0} si i 6= s alors i = pred(i) fin si fin si fin tant que P. Pesneau [email protected] Modèles de Flot - Cours 4 6 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Initialisation des labels Caractéristiques d’un parcours en largeur : Un parcours en largeur à partir d’un sommet s visite d’abord les sommets qui sont à une distance de 1 arc de s, puis les sommets à une distance de 2 arcs, . . . L’arbre obtenu par un parcours en largeur est un arbre des plus courts chemins en nombre d’arcs. Pour initialiser les labels de distances, on effectue un parcours en largeur inversé du réseau G à partir de t : Les labels initiaux sont exacts. Les nœuds peuvent être rassemblés par labels identiques. P. Pesneau [email protected] Modèles de Flot - Cours 4 7 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots graphe de niveau et labels valides Soient d un vecteur de labels de distances valide et Vk l’ensemble des sommets i ∈ N avec un label d(i) = k. On a : t ∈ V0 . Les arcs admissibles vont d’un ensemble Vk vers l’ensemble Vk−1 . Les autres arcs (i, j) avec rij > 0 vont d’un ensemble Vk vers un ensemble Vl avec l ≥ k. Les seuls arcs pouvant aller d’un ensemble Vk vers un ensemble Vl avec l ≤ k − 2 ont une capacité résiduelle nulle. P. Pesneau [email protected] Modèles de Flot - Cours 4 8 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots La longueur des plus courts chemins ne diminue pas Augmentation de flot le long d’un plus court chemin augmentant : Si d(s) = q, un plus court chemin augmentant va successivement visiter les ensembles Vq , Vq−1 , Vq−2 , . . .,V1 et V0 . Les nouveaux arcs avec une capacité résiduelle positive vont d’un ensemble Vk vers un ensemble Vk+1 , et ne peuvent pas rapprocher un nœud i de t. On en déduit que la longueur des plus courts chemins ne diminue pas. P. Pesneau [email protected] Modèles de Flot - Cours 4 9 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Correction de l’algorithme Propriété 4 L’algorithme des plus courts chemins augmentants maintient des labels de distance valides. Preuve. Du transparent précédent, on en déduit qu’une phase d’augmentation ne modifie pas la validité des labels. Lorsqu’un sommet i n’a plus d’arc admissible, cela signifie que tous les arcs issus de i dans le graphe résiduel vont vers des sommets j tels que d(j) ≥ d(i). Le plus court chemin de i à t a donc une valeur au moins égale à min{d(j) : (i, j) ∈ A, rij > 0} + 1. Théorème 5 L’algorithme des plus courts chemins augmentants est correct. Preuve. L’algorithme se termine quand d(s) ≥ n, c’est-à-dire quand il n’y a plus de chemin augmentant dans le graphe résiduel. P. Pesneau [email protected] Modèles de Flot - Cours 4 10 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Gestion de la recherche d’arcs admissibles Propriété 6 Un arc (i, j) non-admissible ne peut pas devenir admissible sans que le nœud i soit relabélisé. Pour chaque nœud, un ordre arbitraire des arcs issus de ce nœud est définit et ne sera pas modifié au cours de l’algorithme. Pour chaque nœud, l’algorithme va maintenir un arc courrant : initialisé au premier arc définit par l’ordre précédent. à chaque recherche d’un arc admissible, on teste l’arc courrant. S’il n’est pas admissible on passe à l’arc suivant. on stoppe quand on a trouvé un arc admissible ou quand on a atteint la fin de la liste des arcs. si on atteint la fin de la liste, alors le nœud n’a pas d’arc admissible et doit être relabélisé. P. Pesneau [email protected] Modèles de Flot - Cours 4 11 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Complexité Théorème 7 La complexité de l’algorithme des plus courts chemins augmentants est en O(n2 m) Preuve. L’algorithme effectue 3 types d’opération : recherche d’un arc admissible, relabélisation d’un n’œud, augmentation de flot. Avant tout, pour chaque nœud, il y a au plus n relabélisation. Recherche d’arc admissible : pour chaque label pris par un nœud, on visite une fois la liste des arcs sortant du nœud. Pour chaque valeur de label, on visite au plus une fois tous les arcs O(m). Comme un nœud peut être relabélisé au plus n fois, le temps pris pour la recherche d’arc admissible est en O(nm). Relabélisation des nœuds : à chaque relabélisation, on parcourre une fois la liste des arcs sortant du nœud. Pour chaque valeur des labels, on parcourre tous les arcs O(m). Comme un nœud peut être relabélisé au plus n fois, le temps pris pour la relabélisation est en O(nm). Augmentation de flot : entre deux saturations d’un arc (i, j), le label de i a augmenté d’au moins 2. Un arc (i, j) ne peut pas être saturé si d(i) ≥ n. Par conséquent, un arc peut être saturé au plus n/2 fois ⇒ au plus O(nm) saturations d’arc et donc d’augmentation de flot. Une augmentation est réalisé en O(n). La complexité totale des augmentations est en O(n2 m). Complexité totale O(nm) + O(nm) + O(n2 m) = O(n2 m). P. Pesneau [email protected] Modèles de Flot - Cours 4 12 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Amélioration du test d’arrêt On a vu qu’un plus court chemin augmentant passait par tous les ensembles Vk pour k = 0, . . . , d(s). Si l’ensemble Vk est vide pour un k dans {1, . . . , d(s) − 1} alors il n’existe plus de chemins augmentants dans le graphe résiduel et on peut arrêter l’algorithme. Au début de l’algorithme, on initialise un tableau de taille n comptabilisant le nombre de nœuds pour chaque label 1, . . . , n. A chaque relabélisation d’un nœud i, on décrémente de 1 la valeur du tableau associé à l’ancien label de i. On incrémente de 1 la valeur du tableau associé au nouveau label de i. Si au moment de la décrementation, la valeur du tableau associée à l’ancien label passe à 0, on peut arrêter l’algorithme. P. Pesneau [email protected] Modèles de Flot - Cours 4 13 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Sommaire 1 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots P. Pesneau [email protected] Modèles de Flot - Cours 4 14 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Introduction Les algorithmes de chemins augmentants attendent d’avoir détecté un chemin augmentant pour envoyer du flot sur celui-ci. Les algorithmes de préflots vont essayer de pousser le plus de flot possible sur les arcs admissibles sortant d’un nœud, sans se soucier de savoir si tout le flot arrivera à la destination. Le flot envoyé en trop reviendra par la suite vers la source. P. Pesneau [email protected] Modèles de Flot - Cours 4 15 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Les préflots Un préflot est un flot qui satisfait aux contraintes de capacité, mais qui ne vérifie pas les contraintes de conservation de flot dans le sens où les nœuds (hormis le nœud s) peut recevoir plus de flot qu’il n’en renvoie. Ce sont des nœuds en excès de flot. On pose e(i) = X j:(j,i)∈A xji − X xij . j:(i,j)∈A La valeur e(i) représente l’excès de flot au nœud i ∈ N. Un nœud i ∈ N \ {s, t} est dit actif si e(i) > 0. P. Pesneau [email protected] Modèles de Flot - Cours 4 16 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Algorithme générique des préflots L’algorithme des préflots va essayer d’obtenir un flot réalisable en éliminant les nœuds actifs. Pour cela, il va selectionner les nœuds actifs et essayer de distribuer leur excès de flot. Le but étant d’envoyer un maximum de flot vers la destination, ce flot sera envoyer sur des arcs admissibles en se fiant à des labels valides de distance vers la destination. Si un nœud actif n’a pas d’arc admissible, on va augmenter son label afin d’en créer. Le(s) nouvel(eaux) arc(s) admissible(s) pourra(ont), dans certains cas, être un(des) arc(s) inverse(s) permettant ainsi de renvoyer l’excès de flot vers son expéditeur. L’algorithme s’arrête lorsque seul les nœuds s et t on un excès different de 0. Comme d(s) ≥ n, le graphe résiduel ne contient plus de chemin augmentant. P. Pesneau [email protected] Modèles de Flot - Cours 4 17 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Algorithme générique des préflots Algorithme générique de préflots : Initialiser les labels de distance d à l’aide d’un parcours en largeur inverse. x =0 xsj = usj , e(j) = usj pour tout arc (s, j) ∈ A d(s) = n tant que il existe un nœud actif dans le réseau faire Choisir un nœud actif i. si il existe un arc admissible (i, j) ∈ A alors δ = min{e(i), rij } xji = max{0, xji − δ}, xij = max{0, xij + δ − xji } e(i) = e(i) − δ, e(j) = e(j) + δ. sinon d(i) = min{d(j) + 1 : (i, j) ∈ A, rij > 0} fin si fin tant que Complexité en O(n2 m) P. Pesneau [email protected] Modèles de Flot - Cours 4 18 / 19 Problème du flot maximum - Algorithmes polynomiaux Algorithme des plus courts chemins augmentants Algorithmes de préflots Algorithme de Goldberg L’algorithme précédent peut être amélioré sur 2 points : Au lieu de choisir à chaque itération un nœud actif et un arc admissible, on choisit un nœud actif et onle traite jusqu’au bout : on pousse du flot sur les arcs admissibles jusqu’à ce que l’excès de flot du nœud devienne nul, ou qu’il n’y a plus d’arc admissible. Dans le second cas, on relabélise le nœud. L’ensemble des nœuds actifs est géré par un liste FIFO : le nœud actif est choisi en début de liste tandis que les nœuds sont ajoutés en fin de liste. Un nœud est ajouté à cette liste lorsqu’on lui envoie du flot alors qu’il avait un excès nul, ou lorsqu’il vient d’être relabélisé. La complexité de l’algorithme de Goldberg est en O(n3 ) P. Pesneau [email protected] Modèles de Flot - Cours 4 19 / 19