diff --git a/grf/cours.tex b/grf/cours.tex index 969857f..7bbe7ab 100644 --- a/grf/cours.tex +++ b/grf/cours.tex @@ -1123,3 +1123,176 @@ X=\bordermatrix{~ & 1 & 2 & 3 & 4 & 5 & 6 & ~\cr & {\color{yellow}28} & {\color{yellow}6} & {\color{yellow}14} & {\color{yellow}5} & {\color{yellow}73}\cr} \] + +%cours du 5/06 +\section{Problèmes de flot maximal} +Applications de 2 sortes : +-> type réseau (de communication, routier, fluvial) +Comment faire passer les éléments pour acheminer le débit maximun tout en +respectant toutes les contraintes de capacité ? +%ici faire petit dessin :) +-> type affectation -> exemple : graphe biparti +%ici faire petit dessin :) +employés : +-couplage de cardinal maximun (employé, tâche) +(1, b) -> coupable de cardinal 1 +(1, a) +(2, b) cardinal 2 + +Définitions : +Un réseau de transport est un graphe sans boucle qui comporte une entrée ou une +source et une sortie ou puits. +%graphe ici +-Chaque arc u est doté d'une capacité c(u) +On s'intéresse à une fonction, appelée le flot. On associe à chaque arc une +fonction f(u) = flux transitant dans l'arc u. +$flot = \{\ flux\ \}_\text{tous les arcs}$ +f(u): inconnue +c(u): donnée +-Le flot doit respecter 2 types de contraintes : +(1) $\forall{u}: 0= c'est le flot optimal + +Théoreme de la coupe et du flot : +Flot de valeur maximum $$\equiv$$ coupe de capacité minimal +(3) Lorsque le flot maximal (et la coupe de $$(S,\bar{S})$$ capacité minimale) : +{ Pour tout arc de $$(S,\bar{S})$$, il est saturé: $$f(u)=c(u)$$ +{ Pour tout arc de $$(\bar{S},S)$$, il est de flux nul: $$f(u) = 0$$ + +Détermination du flot maximal; algorithme de FORD-FULKERSON +-On suppose établi un certain flot dans le réseau de transport (peut être +un flôt de bonne qualité déterminé empiriquement, ou alors peut être le +flot nul) +-On cherche s'il existe dans le réseau une chaîne augmentante: +-> si oui, alors on exploite cette chaine => nouveau flot de valeur supérieur +-> si non, alors le flot considéré est optimal. +-Chaîne augmentante : chaîne reliant s à p: +%ici schema +-Cette chaîne est dite augmentante si et seulement si il existe un nombre +positif $\alpha$ que l'on peut ajouter au flux de tous les arcs à l'endroit +(sans aller au delà de leur saturation) et retrancher de tous les arcs à +l'envers (sans aller en-dessous du flux nul) +-Exploiter une chaine augmentante, c'est rechercher le $\alpha$ maximum. +$$\alpha = [Min(c(u)-f(u)); Min f(u)]$$ +Algo de Ford-Fullkerson +(1) Faire passer un flot au pigé +(2) Améliorer ce flot pour le rendre complet -> tout chemin de s à p comporte +au moins 1 arc saturé. + +(3) * marquer l'entrée du réseau + * marquer l'extrémité terminale J de tout arc (I,J) non saturé dont +l'extrémité initiale est déjà marquée + * marquer l'extrémité initiale K de tout arc (K,L) de flux non nul dont +l'extrémité terminale L est déjà marquée. + +Ces deux phaes de marquage avant et en arriere sont alternées jusqu'au blocage +-> 2 cas de figure : +(a) on a pu marquer p -> alors il existe une chaîne augmentante identifiée à +l'aide des marques. On explicite cette chaîne (recherche du $\alpha$) +=> augmentationn de $\alpha$ de la valeur du flot +(b) on n'a pas pu marquer p => il n'existe pas de chaîne augmentante reliant +s à p : le flot considéré est optimal. +Remarque : à l'issue de l'étape p, la coupe $$(S,\bar{S})$$ où S = liste des +sommets marqués est la coupe de capacité minimale. + +Application (polycop. p103) +-2 ports A et B -> quantités 10 et 10 +-marchandises demadée dans 3 ports C, D et E selon les quantités 9, 12 et 7 +\begin{figure}[h] + \centering + \begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.5cm, + thick,main node/.style={circle,fill=blue!20,draw,font=\sffamily\Large\bfseries}] + \node[main node] (s) {$s$}; + \node[main node] (A) [right of=s]{$A$}; + \node[main node] (C) [right of=A]{$C$}; + \node[main node] (D) [below right of=A]{$D$}; + \node[main node] (B) [left of=D]{$B$}; + \node[main node] (E) [below right of=B]{$C$}; + \node[main node] (p) [right of=D]{$p$}; + + \path[every node/.style={font=\sffamily\small}] + (A) edge [right] node[right] {[7]} (C) + (A) edge [right] node[right] {[4]} (D) + (B) edge [right] node[right] {[5]} (C) + (B) edge [right] node[right] {[5]} (E) + ; + \end{tikzpicture} +\end{figure} + +(1) Peut-on satisfaire toutes les demandes ? Non. +offre totale = $10+10=20$ +demande totale = $9+12+7=28$ + +(2) Comment organiser les expéditions de façon à louer un maximun +de marchandise ? + +-transformer ce problème en un problème de recherche du flot maximal dans +un réseau de transport. +-résoudre par l'algo de Ford-Fulkerson +-Initialisation -> on s'efforce de démarrer l'algo à partir d'un flot complet +(tout chemin de s à p comporte au moins 1 arc saturé : +* flux 7 de A vers C +* flux 9 de C vers p +* Kirschoff au noeud C => flux 2 de B vers C (OK car < capacité de 5) +* flux 10 de s vers A +* Kirschoff en A => flux 3 de A vers D (OK car < capacité de 4) +* Kirschoff en D => flux 3 de D vers p (OK car < capacité de 12) +* on sature B-E +* Kirschoff au moeud E => flux de 5 sur E-p (OK car < capacité de 7) +* Kirshchoff au noeud B => flux de 7 sur s-B (OK car < capacité de 10) + +On a un flot complet de valeur 17. + +On a pu marquer p => le flot considéré n'est pas optimal : +%faire un graphe avec ça : s ->[10](7) B ->[5](2) C <-[7](7) A ->[4](3) D ->[12](3) p +%devient 8, 3, 6, 4, 4 +$\alpha=1$ -> flot: de 17 à 18. +-Le nouveau flot est encore complet. +-Le nouveau flot est de valeur 18 ($10 + 8$ ou $9 + 4 + 5$) +2e itération -> on ne peut pas marquer p => le flot optimal est de valeur 18 +-> La coupe où S = ensemble des sommets marqués en dernière itération +La capacité de la coupe $$(S,\bar{S})$$ est : +$c(C,p) + c(A,D) + c(B,E) = [9] + [4] + [5] = 18$ +On a trouvé une coupe dont la capacité est alors à la valeur d'un flot. +-> C'est que le flot es de valeur maximum et la coupe est de la capacité mini +Remarque: tous les acs de $$(S,\bar{S})$$ sont saturés +(tous les arcs de $$(\bar{S},S)$$ sont de flux nul) + +%ici graphe et tableau exo + +Flot max de 4 (En partant du flot nul)