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