Klassifikation der Min Cost Flow Algorithmen Martin Gruber Philipp Neuner Jakob Puchinger 11. November 2004 Aufgabe 5 Klassifikation der Min Cost Flow Algorithmen. Auf welchen Grundideen basieren die verschiedenen Klassen von Algorithmen? Welches sind die Algorithmen mit der theoretisch besten Worst Case Laufzeit? Welches sind die praktisch besten Min Cost Flow Algorithmen? 1 Einleitung Es gibt viele verschiedene Algorithmen zur Lösung des Min Cost Flow Problems, das folgendermaßen beschrieben werden kann: X Minimiere cij xij (1) (i,j)∈A u.d.N. X X xij − j:(i,j)∈A xji = bi ∀i ∈ V (2) ∀(i, j) ∈ A (3) j:(i,j)∈A 0 ≤ xij ≤ uij Definiert ist das Problem auf einem gerichteten Graphen G = (V, A) mit der Knotenmenge V (|V | = n) und der Kantenmenge A (|A| = m). Über jede Kante (i, j) ∈ A mit den assoziierten Kosten cij können höchstens uij Flusseinheiten geschickt werden; es gilt cij ≤ C und uij ≤ U für alle (i, j) ∈ A. Die Flussvariablen xij geben den über die Kante (i, j) tatsächlich transportierten Fluss wieder. Für eine Knoten i ∈ V beschreibt bi dessen Flussbalance: Ist sie positiv, fließt entsprechend mehr Fluss aus dem Knoten heraus als hinein; analog im negativen Fall. Wir haben zwei Klassen von Algorithmen für dieses Problem identifiziert: Feasible Flow und Optimal Infeasible Flow Algorithmen. Diese werden anhand von Beispielen erläutert und einige ihrer Vertreter kurz vorgestellt. Weiters gehen wir auf die Worst Case Laufzeiten und die Praxistauglichkeit der verschiedenen Algorithmen ein. Maßgebliche Quelle unserer Ausarbeitung ist das Buch Network Flows von Ahuja et al. [1]. 1 2 Feasible Flow Algorithmen Feasible Flow Algorithmen (FFA) beginnen mit einer – meist beliebigen – zulässigen Lösung als Ausgangspunkt und erzeugen aus dieser iterativ neue zulässige Lösungen, bis sie das Optimum erreicht haben. Ein Fluss stellt dann eine zulässige Lösung dar, wenn für alle Knoten des Netzwerks die Flusserhaltungsbedingungen (2) und für alle Kanten die Kapazitätsbeschränkungen (3) eingehalten werden. Die Lösung des Max Flow Problems für das Netzwerk kann hierbei in polynomieller Zeit berechnet und als zulässige Startlösung verwendet werden. Die Algorithmen dieser Klasse unterscheiden sich im Wesentlichen darin, wie sie aus einem gegebenem, zulässigen, aber nicht optimalen Fluss einen weiteren zulässigen, möglicherweise optimalen Fluss erzeugen. 2.1 Cost Scaling Algorithmus Ein Vertreter dieser Klasse von Algorithmen ist der Cost Scaling Algorithmus. Dieser nutzt aus, dass ein optimaler Fluss x für ein Netzwerk das Complementary Slackness Kriterium erfüllt: cπij > 0 ⇒ xij = 0 (4) cπij cπij = 0 ⇒ 0 < xij < uij (5) < 0 ⇒ xij = uij (6) cπij bezeichnet hierbei die reduzierten Kosten einer Kante (i, j) ∈ A bezüglich der dualen Knotenpotentiale πi , i ∈ V : cπij := cij − πi + πj Der Cost Scaling Algorithmus weicht dieses Optimalitätskriterium auf und berechnet -optimale Flüsse für immer kleinere . Analog zu (4) - (6) wird ein Fluss x als -optimal betrachtet, wenn cπij > ⇒ xij = 0 |cπij | cπij (7) ≤ ⇒ 0 < xij < uij (8) < ⇒ xij = uij (9) Man kann zeigen, dass jeder zulässige Fluss -optimal ist für ≥ C, wobei C für die höchsten Kosten einer Kante im Flussnetzwerk steht [1]. In jeder Iteration des Algorith- 2 mus wird nun aus einem -optimalen Fluss ein 2 -optimaler Fluss erzeugt. Hierzu wird der aktuelle Fluss so angepasst, dass (7) - (9) für = 2 erfüllt ist. Dadurch werden im Allgemeinen die Flusserhaltungsgleichungen (2) an einigen Knoten verletzt werden. Ähnlich dem Preflow-Push [1] Algorithmus für das Max Flow Problem wird nun solange Fluss über geeignete Kanten geschickt bzw. die Potentiale πi einiger Knoten angehoben, bis alle Nebenbedingungen wieder erfüllt sind. Die 2 -Optimalität bleibt hierbei jedenfalls erhalten. Es lässt sich zeigen, dass ein Fluss genau dann optimal ist, wenn er -optimal ist für < 1 |V | [1]. Nachdem in jeder Iteration halbiert wird, wird das Optimum sicher gefunden. 2.2 Weitere FAA Weitere Vertreter der FFA sind beispielsweise der in der Vorlesung vorgestellte Cycle Canceling Algorithmus, der Double Scaling Algorithmus – eine hinsichtlich der Laufzeit verbesserte Variante des Cost Scaling Algorithmus – und einige Varianten des Network Simplex Algorithmus. 3 Optimal Infeasible Flow Algorithmen Die Optimal Infeasible Flow Algorithmen (OIFA) arbeiten während der Optimierung mit so genannten Pseudoflüssen, d.h. mit Flüssen, die eine oder mehrere der Flussbedingungen – Flusserhaltung (2) bzw. Kapazitätsbeschränkung (3) – verletzen. Dafür stellen sie aber die Einhaltung der Optimalitätskriterien (Negative Cycle, Reduced Cost bzw. Complementary Slackness) sicher. Ziel eines solchen Algorithmus ist es nun, unter Beibehaltung des jeweils verwendeten Optimalitätskriteriums den Pseudofluss solange anzupassen, bis alle Flussbedingungen eingehalten sind und man damit gleichzeitig die optimale Lösung für das Minimum Cost Flow Problem gefunden hat. Gegenüber den FFA haben die OIFA die günstige Eigenschaft, dass sie meist mit einem Nullfluss, d.h. alle Flussvariablen sind gleich Null, beginnen können. Der Aufwand für die Erzeugung einer gültigen Startlösung entfällt damit im Normalfall. 3.1 Successive Shortest Path Algorithmus Der Successive Shortest Path Algorithmus ist einer der einfacheren Vertreter der OIFA. Die Grundidee besteht darin, dass, ausgehend von einem Nullfluss, zwischen Knoten mit einem Überschuss und Knoten mit einem Defizit ein Ausgleich hergestellt werden muss, um die Flusserhaltungsbedingungen (2) in jedem Knoten zu gewährleisten. Dies geschieht dadurch, dass zwei beliebige Knoten mit Überschuss bzw. Defizit genommen werden und der maximal mögliche Fluss über den kürzesten Weg, der diese beiden Knoten miteinander verbindet, geschickt wird, um die Niveaus möglichst anzugleichen. Der 3 Algorithmus terminiert, wenn alle Knoten im Gleichgewicht sind, d.h. die Flusserhaltungsbedingungen erfüllt sind. Überschuss bzw. Defizit e(i) eines Knotens i sind folgendermaßen definiert (mit A als die Menge der gerichteten Kanten): X X xij ∀ Knoten i xji − e(i) = bi + j:(i,j)∈A j:(j,i)∈A e(i) = 0: Knoten im Gleichgewicht e(i) > 0: Überschuss e(i) < 0: Defizit Während der Optimierung wird dabei immer das Reduced Cost Optimalitätskriterium (die reduzierten Kosten im Residualgraph müssen alle ≥ 0 sein) eingehalten. Es kann gezeigt werden, dass Fluss, der entlang des kürzesten Weges zwischen einem Überschussund einem Defizitknoten geschickt wird, die Gültigkeit dieses Kriteriums nicht beeinflusst. 3.2 Weitere OIFA Hier nun ein kurzer Überblick über weitere OIFA: Primal-Dual Algorithmus: Eine Variante des Successive Shortest Path Algorithmus, bei dem mit Hilfe der Berechnung eines maximalen Flusses in einem umgebauten Residualgraph in einem Iterationsschritt gleich mehrere Überschuss/Defizit Knotenpaare angeglichen werden. Capacity Scaling Algorithmus: Ebenfalls eine Variante von Successive Shortest Path, wobei hier in jeder Iteration nur kürzeste Wege betrachtet werden, über die eine Mindestmaß an Fluss geschickt werden kann. Dadurch wird gewährleistet, dass pro Iteration mehr als das theoretische Minimum von einer Flusseinheit zum Ausgleich von Überschüssen und Defiziten transportiert werden kann. Dies führt zu einem verbesserten Laufzeitverhalten. Parametric und Dual Network Simplex Algorithmen: Diese beiden Spielarten des Network Simplex Algorithmus verletzen während der Optimierung für zwei ausgezeichnete Knoten die Flusserhaltungsbedingungen (Parametric) bzw. für einige Kanten die Kapazitätsbedingungen (Dual), wobei die Optimalitätskriterien eingehalten werden. Relaxation Algorithmus: Der Relaxation Algorithmus nimmt Anleihen an der aus der ganzzahligen linearen Programmierung bekannten Technik der Lagrange Relaxierung [2]. Dabei werden Nebenbedingungen, die die Lösung des Problems stark erschweren (im konkreten Fall die Flusserhaltungsbedingungen), zunächst aus dem System entfernt, deren Verletzung aber als Strafterm in die Zielfunktion aufgenommen. Da es das Ziel ist, die Zielfunktion zu optimieren, müssen die Strafterme sukzessive auf Null gebracht 4 werden, was gleichzeitig der Einhaltung der zunächst entfernten Nebenbedingungen und damit einer gültigen Lösung entspricht. Etwas aus dem Rahmen fällt der Out-of-Kilter Algorithmus, denn dieser arbeitet während der Optimierung zwar mit Pseudoflüssen, die die Kapazitätsbeschränkungen (3) verletzen, hält allerdings die Optimalitätskriterien nicht ein. Wie der Name schon andeutet, versucht er, ein Gleichgewicht herzustellen, allerdings nicht wie der Successive Shortest Path Algorithmus zwischen Überschuss- und Defizitknoten, sondern bei den reduzierten Kosten des Netzwerks, um gleichzeitig sowohl auf die Einhaltung der Kapazitätsgrenzen als auch des Complementary Slackness Optimalitätskriteriums (7)-(9) hinzuarbeiten. 4 Worst Case Laufzeiten Mann kann bei der theoretischen Analyse der Worst Case Laufzeiten folgende Unterscheidung treffen: Pseudopolynomielle Laufzeit hängt polynomiell von der Größe (n und m) und den Werten (C und U ) der Eingabeinstanzen ab. Schwach polynomielle Laufzeit hängt polynomiell von der Größe und den Logarithmen der Werte der Eingabeinstanzen ab. Stark polynomielle Laufzeit hängt polynomiell ausschließlich von der Größe der Eingabeinstanzen ab. In Tabelle 1 sind die verschiedenen Min Cost Flow Algorithmen nach den oben beschriebenen Kategorien eingeteilt. Die verschiedenen Varianten des Netzwerk Simplex Algorithmus können in polynomieller Laufzeit implementiert werden. Als Beispiel führen wir hier den dualen Netzwerk Simplex Algorithmus von Plotkin und Tardos [4] an, welcher eine Worst Case Laufzeit von O(m3 log n) aufweist. Der primale Netzwerk Simplex Algorithmus von Orlin [3] mit einer Worst Case Laufzeit von O(min(n2 m log nC, n2 m2 log n)) war der erste stark polynomielle primale Netzwerk Simplex Algorithmus, welcher die lange Zeit ungelöste Frage nach der Existenz eines solchen beantwortete. 5 Zusammenfassung - Beste Algorithmen in der Praxis Wir haben gesehen, das es eine Vielzahl von Algorithmen zur Lösung des Min Cost Flow Problems gibt, welche sich (bis auf einige wenige Ausnahmen) in zwei Klassen unterteilen lassen: Feasible Flow Algorithmen und Optimal Infeasible Flow Algorithmen. 5 Pseudopolynomielle Laufzeit Cycle canceling O(nm2 CU ) Successive Shortest Path O(nU (m + n log n)) Primal-Dual O(min(nU, nC)(m + n log n)(M (n, m, U ))) Out-of-Kilter O(mU (m + n log n)) Relaxation schlechter als Cycle canceling Capacity Scaling Cost Scaling Double Scaling Schwach Polynomielle Laufzeit O((m log U )(m + n log n)) O(n3 log(nC)) O(nm log U log(nC)) Stark Polynomielle Laufzeit Minimum Mean Cycle Canceling O(n2 m3 log n) Repeated Capacity Scaling O((m2 log n)(m + n log n)) Enhanced Capacity Scaling O((m log n)(m + n log n)) Tabelle 1: Worst Case Laufzeiten der vorgestellten Min Cost Flow Algorithmen, wobei M (n, m, U ) für die Laufzeit eines Max-Flow Algorithmus steht. Es existieren stark polynomielle Algorithmen zur Lösung des Min Cost Flow Problems. In der Praxis haben sich vor allem die Netzwerk Simplex Algorithmen bewährt, wobei nicht unerwähnt bleiben sollte, dass der Relaxation Algorithmus, trotz seines theoretisch schlechten Worst Case Verhaltens, auf einigen Instanzklassen ebenbürtig oder zum Teil sogar schneller ist. Literatur [1] R. K. Ahuja, T. L. Magnanti, and J. B. Orlin. Network flows: theory, algorithms, and applications. Prentice-Hall, Inc., 1993. [2] G. L. Nemhauser and L. A. Wolsey. Integer and Combinatorial Optimization. WileyInterscience, 1988. [3] J. Orlin. A polynomial time primal network simplex algorithm for minimium cost flows. Mathematical Programming, 78B:109–129, 1997. [4] J. B. Orlin, S. A. Plotkin, and E. Tardos. Polynomial dual network simplex algorithms. Technical Report CS-TR-91-1374, 1991. 6