Anwendungen von Netzwerkfluss

Werbung
Berlin, 13. 01. 2009
Anwendungen von Netzwerkfluss
Wojciech Polcwiartek
Institut für Informatik
FU Berlin
1. Einführung/ Definitionen
Modellieren der Probleme mit Hilfe von Netzwerken und Flüssen in den hat ein breites
Anwendungsfeld. Die Dualität, minimaler Schnitt – maximaler Fluss, erweitert die dieses
Feld noch mehr. Die Anwendungen reichen von Data Mining, Bildererkennung zur
Problemen, die sich kombinatorisch optimieren lassen.
Zuerst aber ein paar Grundbegriffe:
1. Netzwerk
Ein Netzwerk N=(V, E, s, t, c) ist ein gerichteter Graph ohne Mehrfachkanten mit zwei
ausgezeichneten Knoten, einer Quelle s und einer Senke t aus V sowie einer
Kapazitätsfunktion c, die jeder Kante (x,y) aus E eine nicht-negative, reellwertige
Kapazität c(x,y) zuweist.
2. s-t Fluss
Ein s-t-Fluss ist eine Funktion f, die jeder Kante (x,y) im Netzwerk einen nichtnegativen reellen Flusswert f(x,y) zuweist. Dabei müssen folgende Bedingungen erfüllt
sein:
1. Kapazitätsbeschränkung:
Der Fluss einer Kante ist höchstens so groß wie die Kapazität auf der Kante, d.h. es
gilt 0 f e c e , ∀ e ∈E
2. Flusserhaltung:
Abgesehen von der Quelle s und der Senke t muss in jeden Knoten genau so viel
f e − ∑ f  e=0
hineinfließen wie herausfließen, d.h. e∑
inc v
e ausv
Dabei sind „e inc v“ und „e aus v“ die Mengen der Kanten, die vom Knoten ausbzw. eingehen.
3. Restnetzwerk
Ein Restnetzwerk (Residualnetzwerk) vom N ist ein Netzwerk N'=(V, E, s, t, c'), in dem
die Kapazitäten jeder Kante um den Fluss durch diese Kante vermindert wurden
4. Wert vom s-t-Fluss im Netzwerk
Der Wert val(f) eines s-t-Flusses f ist die Summe der Flusswerte der eingehenden Kanten
abzüglich der Flusswerte der ausgehenden Kanten der Senke t. Dass der Wert der
Flusses genauso gut an der Quelle s als Summe der ausgehenden abzüglich der
eingehenden Flusswerte an s berechnet werden kann, folgt aus
Flusserhaltungsbedingung. Es gilt somit
val  f = ∑ f e − ∑ f  e= ∑ f e− ∑ f e
e aus s
e inc s
e inc t
e aus t
5. Schnitt im Netzwerk
Eine Teilmenge der Knoten in einem Netzwerk, die s aber nicht t enthält, nennt man
einen Schnitt. Die Kapazität eines Schnittes ist die Summe der Kapazitäten der aus dem
Schnitt herausgehenden Kanten.
6. Max-Flow-Min-Cut-Theorem
Das Max-Flow-Min-Cut-Theorem ist ein Satz über den maximalen Fluss in
Flussnetzwerken. Er besagt:
Der maximale Fluss im Netzwerk hat genau den Wert dessen minimalen Schnitts.
Anders gesagt, wird der Fluss durch ein Netzwerk durch dessen Flaschenhals beschränkt
- auch wenn an anderen Stellen ein größerer Fluss möglich wäre, so ist der Gesamtfluss
durch den Flaschenhals limitiert.
2. Algorithmen zur Bestimmung von maximalen Netzwerkfluss
Das Problem des maximalen Flusses im Netzwerk ist es den maximalen Fluss (oder sein
Wert) durch ein Netz mit einer Quelle und einer Senke zu bestimmen. Das Problem des
maximalen Flusses im Netzwerk kann als ein Sonderfall vom Zirkulationsproblem
betrachtet werden. Anderseits kann das Zirkulationsproblem mit Hilfe vom
Netzwerkflussproblem gelöst werden.
Der Wissenschaft sind Algorithmen zur Bestimmung von maximalen Netzwerkfluss
bekannt, dessen Laufzeit zwischen O(V*E*log(V*V/E)) (Relabel-to-front Algorithmus)und
O(E*maxFluss) (Ford-Fulkerson Algorithmus) beträgt.
1. Algorithmus von Ford und Fulkerson
Der Algorithmus von Ford und Fulkerson (nach seinen Erfindern Lester Randolph Ford
junior und Delbert Ray Fulkerson) dient der Berechnung eines maximalen Flusses in
einem Netzwerk. Er sucht sukzessive nach flussvergrößernden Pfaden
(Verbesserungspfade), vergrößert den Fluss entlang dieser Pfade und hält an, falls kein
solcher Pfad mehr existiert.
Zur Initialisierung kann man den Nullfluss, der jeder Kante (u,v) den Wert 0 zuordnet,
verwenden.
Ein Durchlauf des Algorithmus besteht aus folgenden Schritten:
1. Erweitere f auf umgekehrte Kanten durch f(v,u): = − f(u,v), und erweitere c durch
c(v,u): = 0 falls c(u,v) > 0.
2. Bilde das Restnetzwerk N' = (V,E',s,t,c') zum gegebenen Fluss f durch die Definition
der Restkapazität c'(u,v) = c(u,v) − f(u,v), für (u,v) aus E oder (v, u) aus E. Die
Menge E' besteht genau aus denjenigen Paaren (u,v) aus V x V mit c'(u,v) > 0.
3. Suche im Restnetzwerk N' einen Pfad W von der Quelle zur Senke, bei dem jede
Kante eine positive Restkapazität besitzt. Ein solcher Pfad wird Verbesserungs- oder
augmentierender Pfad genannt. Falls kein solcher Pfad existiert, beende den
Algorithmus mit f als Ausgabe.
4. Bestimme δ =min{c'(u,v): (u,v) aus W}.
5. Vergrößere den Fluss f entlang des augmentierenden Pfades W um δ durch
f'(u,v): = f(u,v) + δ und f'(v,u): = f(v,u) − δ, für alle Kanten (u,v) aus W.
2. Algorithmus von Edmonds und Karp
Der Edmonds-Karp-Algorithmus ist eine Implementierung der Ford-Fulkerson-Methode.
Sie verwendet den jeweils kürzesten augmentierenden Pfad in jedem Schritt, was
sicherstellt, dass der Algorithmus in polynomieller Zeit terminiert. In den meisten
Implementierungen wird der kürzeste Pfad durch eine Breitensuche ermittelt. Der
Algorithmus wurde zuerst 1970 von dem russisch-israelischen Wissenschaftler E. A.
Dinitz publiziert und später unabhängig von Jack Edmonds und Richard M. Karp, die
ihn 1972 publizierten, entdeckt.
3. Anwendungen von Netzwerkfluss
1. Bipartites Matching
1. Reales Problem
Eine Beispielanwendung für dieses Problem könnte eine
Partnervermittlungagentur verwenden. Diese besitzt Daten
über partnersuchende Frauen und Männer. Manche
Beziehungen kommen in Frage, manche sind nicht möglich.
2. Formulierung als Netzwerkflussproblem
1. Erstelle Graph G ' = L∪R∪{s , t} , E ' 
1. Richte alle Kanten von L nach R und weise den unendliche Kapazität zu
Füge Quelle s und Senke t hinzu
2. Füge Kanten mit einer Kapazität von 1 von der Quelle zu jedem der Knoten
aus L
3. Füge Kanten mit einer Kapazität von 1 von jedem der Knoten aus R zu der
Senke
4. Rechne den maximalen Fluss in G' aus
2. Zirkulation mit Anforderungen
1. Reales Problem:
Im Rechenzentrum sind mehrere Datenquellen
(z.B. Webserver) und Datensenken (z.B.
Datenbankserver) untergebracht. Die Rechner
haben unterschiedliche Rechenleistung. Das
Netz ist mit Hilfe von Leitungen verschiedener
Bandbreite aufgebaut. Das Routing ist wie im Bild organisiert.
2. Eingabe / Modell
1. Gerichteter Graph G=(V,E)
2. Kantenkapazität c(e), für alle e aus E
3. Angebot/Anforderung d(v), für alle v aus V
1. Anforderung d(v) > 0
2. Angebot d(v) < 0
4. Gültige Zirkulation ist eine Funktion, die erfüllt auf solchen Graphen
1. Kapazitätbeschränkung 0 f e c e , ∀ e ∈E
2. Flusserhaltung ∑ f e − ∑ f  e=d v 
e inc v
e ausv
5. Nötige Bedingung für eine gültige Zirkulation
∑ d v =− ∑ d v =D
v :d v0
v: d  v0
3. Formulierung als Netzwerkflussproblem
1. Erstelle Graph G ' =G∪{s , t }, E ' 
2. Füge eine Quelle s und Senke t hinzu
3. Verbinde die Quelle mit jedem Knoten mit Angebot mit Hilfe von einer
gerichteter Kante mit der Kapazität -d(v)
4. Verbinde jeden Knoten mit Anforderung mit der Senke mit Hilfe von einer
gerichteter Kante mit der Kapazität d(v)
4. G hat eine gültige Zirkulation, wenn der maximale Fluss in G' den Wert D hat
3. Zirkulation mit Anforderungen und unteren Schranken
1. Reales Problem:
In einem Ort wird das Kanalisationsnetz aufgebaut. Es gibt mehrere Wasserquellen
fürs Netz (z.B. Fabriken, Häuser, Straßen) und mehrere Wassermündungen (z.B.
verschiedene Wasserklärungsanlagen). Die verschiedenen Wasserquellen und
Mündungen erzeugen bzw. verarbeiten verschiedene Mengen von Wasser.
Damit das Netz nicht beschädigt wird darf der Fluss an bestimmten Strecken einen
Minimalwert für diese Strecke nicht unterschreiten.
2. Eingabe / Modell
1. Gerichteter Graph G=(V,E)
2. Kantenkapazität c(e) und untere Schranke l(e),für alle e aus E
3. Angebot/Anforderung d(v), für alle v aus V
1. Anforderung d(v) > 0
2. Angebot d(v) < 0
4. Gültige Zirkulation ist eine Funktion, die erfüllt auf solchen Graphen
1. Kapazitätbeschränkung l e  f ec e , ∀ e∈ E
2. Flusserhaltung ∑ f e − ∑ f  e=d v 
e inc v
e ausv
3. Formulierung als Netzwerkflussproblem
1. Erstelle Graph wie in „Zirkulation mit Anforderungen“
2. Modelliere untere Schranke mit Anforderungen im G'
1. Lasse l(e) Fluss durch die Kante durch
2. Aktualisiere Anforderungen an beiden Enden
3. Weiter wie „Zirkulation mit Anforderungen“
G
G'
4. Umfagenentwurf
1. Reales Problem
Bei einer Marktanalyse sollen n Kunden nach
m Produkten befragt werden. Man darf den
Kunden i nur dann nach dem Produkt j fragen,
wenn dieser das Produkt besitzt. Jedem
Kunden i dürfen nur wenige Fragen
(zwischen c(i) und c'(i)) gestellt werden. Zu
jedem Produkt j sollen zwischen p(j) und p'(j)
Meinungen abgegeben werden.
Ist solche Umfrage möglich? Wie sieht sie aus?
2. Formulierung als Netzwerkflussproblem
1. Modelliere Problem als Zirkulation mit
unteren Schranken
1. Kunden und Produkte als Knoten
2. Füge zwei Knoten s und t hinzu
3. Verbinde mit Kunden i und Produkt
j, wenn i j besitzt; Kantenschranken
[0,1]
4. Verbinde s mit allen Kunden;
Kantenschranken [c(i),c'(i)]
5. Verbinde alle Produkte mit t; Kantenschranken [p(j),p'(j)]
6. Verbinde t mit s; Kantenschranken [0, unendl.]
3. Eine Umfrage existiert wenn es im aufgebauten Graphen eine gültige Zirkulation
gibt
5. Bildsegmentierung
1. Reales Problem
Auf einem Röntgen – Bild sollen kohärente Teile (z.B. Knochen und Gewebe)
voneinander unterschieden werden. Das Bild ist ein wenig mit Rauschen belastet.
Jedes Pixel i hat ein Maß a(i)>=0 (z.B. Helligkeit), das seine Ähnlichkeit mit dem
Vordergrund A ausdrückt, so wie ein Maß b(i)>=0, das seine Ähnlichkeit mit dem
Hintergrund B ausdrückt. Damit das Rauschen begrenzt wird sollen helle Pixel, die
mit vielen dunklen benachbart sind, nicht als Vordergrund erkannt werden. Somit
gibt es eine Entfernungsstrafe p(i,j)>=0 zwischen zwei Pixeln i und j, von den ein
zum Vorder- und ein zum Hintergrund gehört.
Ziel: finde eine Partition ins Vorder- und Hintergrund
1. mit maximalem q  A , B =∑ a i∑ b  j−
i∈ A
j ∈B
oder
∑
pi , j
∑
pi , j
i , j ∈ E ;∣A∩ {i , j }∣=1
b i ∑ a  j
2. mit minimalem q '  A , B=∑
i∈A
j ∈B
 i , j ∈ E ;∣A∩ { i , j }∣=1
2. Formulierung als Netzwerkflussproblem
1. Erstelle einen Graph G=(V,E)
1. Pixel als Knoten
2. Füge zwei Knoten s und t hinzu
3. Verbinde s mit allen Pixeln i;
Kantenkapazität a(i)
4. Verbinde alle Pixeln j mit t;
Kantenkapazität b(j)
5. Verbinde Benachbarte Pixel i und j
mit zwei gerichteten Kanten
(entgegen gesetzte Richtung) mit
Kapazität p(i,j)
3. Die gesuchte Partition q'(A,B) hat die Größe
des Kapazität vom Schnitt c(A,B)
c  A , B=∑ b i ∑ a  j
i∈A
j∈ B
∑
p i , j =q '  A , B
i , j∈ E ;∣A∩ {i , j }∣=1
6. Projektauswahl
1. Reales Problem
Ein Technologieunternehmen möchte seine
Ressourcen so einsetzen, dass erwartete
Gewinn maximal ist. Dies kann das
Unternehmen durch Abwicklung von
Projekten erreichen. Manche unter den
Projekten bringen Gewinn p(v), manche
bringen aber Verlust -p(v). Unterhalb den
Projekten gibt es Abhängigkeiten – bevor
Projekt v abgewickelt werden kann müssen alle seine Vorgängerprojekte fertig sein.
Eine Menge der Projekte ist gültig, wenn alle voneinander abhängige Projekte zu
dieser Menge gehören
Ziel: Finde eine gültige Menge der Projekte, so dass der erwartete Gewinn maximal
ist
1. Eine Partition q(A,B), so dass ∑ pi maximal ist
i∈A
2. Formulierung als Netzwerkflussproblem
1. Erstelle einen Graph G=(V,E)
1. Projekte als Knoten
2. Füge zwei Knoten s und t hinzu
3. Verbinde jedes Projekt mit allen
seinen Vorbedingungen;
Kantenkapazität = unendl.
4. Verbinde s mit allen profitablen
Projekten; Kantenkapazität p(i)
5. Verbinde alle verlustbehaftete
Projekte mit t; Kantenkapazität -p(i)
3. Minimaler Schnitt ist die Partition q(A,B), für die
∑ pi
i∈A
1. Die gesuchte Projektmenge ist die Untermenge A \ {s}
maximal ist
Herunterladen