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 v0 v: d v0 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 ec 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 ∑ pi , j ∑ pi , 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 ∑ pi 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 ∑ pi i∈A 1. Die gesuchte Projektmenge ist die Untermenge A \ {s} maximal ist