cours de grf du 05/06, besoin de mise en page
This commit is contained in:
parent
033dc24696
commit
07894cfb0e
173
grf/cours.tex
173
grf/cours.tex
@ -1123,3 +1123,176 @@ X=\bordermatrix{~ & 1 & 2 & 3 & 4 & 5 & 6 & ~\cr
|
|||||||
& {\color{yellow}28} & {\color{yellow}6}
|
& {\color{yellow}28} & {\color{yellow}6}
|
||||||
& {\color{yellow}14} & {\color{yellow}5} & {\color{yellow}73}\cr}
|
& {\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=<f(u)<=c(u)$
|
||||||
|
(2) $\forall$ le noeud x dans le réseau, loi de kirshoff.
|
||||||
|
[si f(u)=c(u), on dit que l'arc u est saturé]
|
||||||
|
|
||||||
|
|
||||||
|
$$\sum\text{flux entrants}=\sum\text{flux sortants}$$ $\forall$ le noeud x
|
||||||
|
-Tout flot qui respect dans le réseau les contraintes de type (1) et (2) est
|
||||||
|
dit valide:
|
||||||
|
exemple : flot nul.
|
||||||
|
val(f) se définit de 3 manières différentes.
|
||||||
|
(1) Valeur à la source [hypothès: pas de flux entrants dans s]
|
||||||
|
$$val(f)=\sum\text{flux des arcs issues de s}$$
|
||||||
|
= Chaque arc u est doté d'une capacité c(u)
|
||||||
|
(2) Valeur au puits p [pas de flux sortants de p]
|
||||||
|
$$val(f)=\sum\text{flux des arcs entrants dans p}$$
|
||||||
|
(3) Valeur au niveau d'une coupe $$(S, \bar{S})$$ séparant la source du puits.
|
||||||
|
S=ensemble de sommets du réseau qui contient
|
||||||
|
obligatoirement s et qui ne contient pas p.
|
||||||
|
$$\bar{S} = \text{ensemble de sonnets complémentaires}$$.
|
||||||
|
$$val(f)=(\sum{f(S,\bar{S})}) - (\sum{f(\bar(S), S)})$$
|
||||||
|
$\sum{f(S,\bar{S})}$ : somme des flux des ars ayant leur origine dans S
|
||||||
|
et leur extrémité dans $$\bar{S}$$
|
||||||
|
$\sum{f(\bar(S), S)}$ : somme des flux des arcs ayant leur origine dans
|
||||||
|
$$\bar{S}$$ et leur extrémité dans S
|
||||||
|
Propriété : $\forall$ la coupe $$(S, \bar{S})$$ considérée, la valeur du flot
|
||||||
|
mesurée au niveau de cette coupe est la même : c'est val(f)
|
||||||
|
|
||||||
|
-Capacité d'une coupe $$(S,\bar{S})$$
|
||||||
|
$c(S,\bar{S}) = \sum{c(u)}_{arcs allant de S vers \bar{S}}$
|
||||||
|
Propriétés (admises) :
|
||||||
|
[1] $\forall$ la coupe $$(S,\bar{S})$$ considérée, la valeur du flot mesurée
|
||||||
|
au niveau de cette coupe est la même
|
||||||
|
[2] Soit f un flot $\forall$ établi dans un réseau de transport
|
||||||
|
(1) $$val(f) =< c(S,\bar{S})$$, $\forall$ la coupe $$(S,\bar{S})$$ considérée
|
||||||
|
(2) Si on trouve un flot f et une coupe $$(S,\bar{S})$$ tels que :
|
||||||
|
$$val(f) = c(S,\bar{S})$$, alors le flot est de valeur maximale
|
||||||
|
-> 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)
|
||||||
|
Reference in New Issue
Block a user