Operations Research Flüsse in Netzwerken Rainer Schrader Zentrum für Angewandte Informatik Köln 2. Juli 2007 1 / 53 2 / 53 Flüsse in Netzwerken Unimodularität Gliederung Zur Erinnerung: • Netzwerke und Flüsse • kürzeste Wege • Zirkulationen und Schnitte Proposition 5.9’ Sei A ∈ Zn×m total unimodular, b ∈ Zm und l, u ∈ Zn derart, dass P = {x ∈ Rn | Ax = b, l ≤ x ≤ u} 6= ∅. • bipartite Matchings Dann ist P eine Polytop mit ganzzahligen Ecken. Lemma 5.11 (Pioncaré) Ist A eine {−1, 0, 1}-Matrix, bei der jede Spalte höchstens eine +1 und eine −1 enthält, so ist A total unimodular. • sei A eine Matrix mit Einträgen in {−1, 0, +1} • A heißt Netzwerkmatrix, wenn in jeder Spalte genau eine −1 und eine +1 vorkommt 3 / 53 4 / 53 Netzwerke und Flüsse Netzwerke und Flüsse • sei A ∈ {−1, 0, +1}n×m eine Netzwerkmatrix Beispiel: • jedem A entspricht ein gerichteter Graph G = (V , E ): 4 6 5 • die Zeilen von A entsprechen einer Menge V von m Knoten 6 • sei j eine Spalte mit den Koeffizienten avj = +1 und auj = −1 2 1 • wir ordnen j eine (gerichtete) Kanten ej = (u, v ) wie folgt zu: 5 9 7 8 ej u −→ v 3 4 1 • damit entsprechen die Spalten einer Menge E von n gerichteten 3 2 Kanten • A heißt dann auch die (Knoten-Kanten-) Inzidenzmatrix von 0 G = (V , E ). B B B B B B @ −1 0 0 1 0 0 1 0 0 −1 0 0 1 −1 0 0 0 0 0 −1 1 0 0 0 0 −1 0 0 1 0 0 0 0 0 1 −1 0 −1 0 0 0 1 0 0 −1 0 0 1 0 0 1 0 0 −1 1 C C C C C C A 6 / 53 5 / 53 Netzwerke und Flüsse Netzwerke und Flüsse • ein Koordinatenvektor x ∈ Rn repräsentiert einen Fluss auf dem • sei A ∈ Rm×n die Inzidenzmatrix des gerichteten Graphen G = (V , E ) Graphen G, • seien c, l, u, b ganzzahlige Vektoren • die Komponente xj gibt die Quantität an, die über die Kante ej = (u, v ) „fließt“ • dann hat das folgende LP nur ganzzahlige Ecken: • im Fall xj > 0 fließt xj von u and v min cT x Ax = b l≤x≤u x ganzzahlig • im Fall xj < 0 fließt xj von v and u • der Nettozufluss im Knoten v ∈ V ist: • wir wollen versuchen, dieses LP graphentheoretisch zu interpretieren δv (x) = n X avj xj j =1 = X (u,v )∈E 7 / 53 x(u,v ) − X x(v ,u) (v ,u)∈E 8 / 53 Netzwerke und Flüsse δv (x) = n X Netzwerke und Flüsse avj xj (v ∈ V ) • zu gegebenen Parametern c, l, u ∈ Rn und b ∈ Rm definieren wir das j =1 Flussproblem auf G als das lineare Optimierungsproblem • der Nettozufluss ist die Differenz aus eingehendem und ausgehendem min cT x s.d. Ax = b, l ≤ x ≤ u. Fluss von x im Knoten v ∈ V (1) • allgemeiner ist der Vektor δ(x) = Ax ∈ RV • l und u liefern (untere bzw. obere) Kapazitätsbeschränkungen der Kanten von G der Vektor der Nettozuflüsse der Knoten von G • cj gibt die Kosten des Flusses pro Einheit über die Kante ej an • zu einem Fluss x heißt der Knoten v ∈ V : • gesucht ist somit ein Fluss, der • Senke, falls δv (x) ≥ 0 • Quelle, falls δv (x) ≤ 0 • in jedem Knoten v einen vorgegebenen Nettozufluss bv erzeugt, • die Kapazitäten der Kanten einhält, und • Transitknoten, falls δv (x) = 0 • kostenminimal ist 9 / 53 10 / 53 Netzwerke und Flüsse Flüsse in Netzwerken Aus der totalen Unimodularität von A folgt: Gliederung Satz 1 • Netzwerke und Flüsse • kürzeste Wege • Zirkulationen und Schnitte Sind b, l und u ganzzahlig, dann hat das Kosten-Flussproblem entweder keine Optimallösung oder es besitzt eine Optimallösung mit ganzzahligen Komponenten. • bipartite Matchings • etwas allgemeiner kann man als Kapazitätsrestriktionen die Funktionen l, u : E → R ∪ {−∞, +∞} zulassen • Satz 1 bleibt offensichtlich auch in dieser Allgemeinheit entsprechend gültig • das Kosten-Flussproblem kann z.B. mit dem Simplexalgorithmus gelöst werden und hat – unter den Annahmen von Satz 1 – eine ganzzahlige Optimallösung • es gibt allerdings auch speziellere Verfahren, die kombinatorische Struktur von G ausnützen und effizienter sind. 11 / 53 12 / 53 kürzeste Wege kürzeste Wege • sei V eine endliche Menge von Knoten Lemma 2 • sei E ⊆ V × V eine Menge von (gerichteten) Kanten eines Graphen Sei x ein ganzzahliger Punkt im Polyeder {x | Ax = b, x ≥ 0}. Dann enthält die Menge P = {e ∈ E | xe > 0} einen (gerichteten) Weg von s nach t in G. G = (V , E ) • sei wieder A = [ave ] ∈ RV ×E die zugehörige Inzidenzmatrix mit ave 8 <−1 = +1 : 0 Beweis: falls e = (v , w ) falls e = (w , v ) sonst • Induktion über ni=1 xi • da der Nettozufluss von s negativ ist, existiert eine Kante (s, v1 ) ∈ P P • ist v1 = t , so ist der Weg gefunden • wir wählen zwei feste Knoten s, t und definieren b ∈ RV als 8 <−1 bv = +1 : 0 • andernfalls seien falls v = s falls v = t sonst. xi0 = xi − 1, falls i = 1 xi , sonst • mit anderen Worten: wir wählen s als Quelle und t als Senke bzgl. eines zu konstruierenden Flusses. 8 < −1, falls v = v1 +1, falls v = t und bv = : 0, sonst • dann ist x0 ganzzahliger Punkt in {x | Ax = b0 , x ≥ 0} • und die Behauptung folgt per Induktion. 13 / 53 14 / 53 kürzeste Wege kürzeste Wege • kürzeste (s, t )-Wege in G = (V , E ) können auch anders berechnet • sei d : E → R+ eine Distanzfunktion auf den Kanten G = (V , E ) werden • der Algorithmus von Dijkstra löst das Problem, indem er vom zu (2) • sei x eine optimale Ecke des linearen Programms P min dT x = e∈E de xe Ax = b, x ≥ 0 dualen linearen Programm ausgeht: (2) max yT b y A ≤ dT T • dann entspricht x einer Menge von Kanten, die einen Weg von ←→ max yt − ys vw − yv ≤ de (e = (v , w ) ∈ E ) (3) s nach t enthält • gesucht ist also ein (Knoten)-Potential y : V → R so, dass: • und minimale gesamte Kantenlänge hat, • entlang jeder Kante e = (v , w ) ∈ E gilt: • und damit einem kürzesten Weg von s nach t . yw − yv ≤ de bzw. yw ≤ yv + de • und die Potentialdifferenz yt − ys maximiert wird. 15 / 53 16 / 53 kürzeste Wege kürzeste Wege Algorithmus von Dijkstra • der Einfachheit halber setzen wir dvw = +∞, wenn (v , w ) ∈ /E (1) Setze ys ← 0, U ← {s} und yv ← dsv für alle v ∈ V r U . (2) while U 6= V do: (3) wähle ein v ∈ V r U mit minimalem Potential yv (4) setze U ← U ∪ {v } markiere v (5) für alle w ∈ V r U do (5) yw ← min{yw , yv + dvw } schreibe fort (6) end do (7) end while • der Algorithmus baut nun ein optimales Potential sukzessive folgendermaßen auf: Algorithmus von Dijkstra (1) Setze ys ← 0, U ← {s} und yv ← dsv für alle v ∈ V r U . (2) while U 6= V do: (3) wähle ein v ∈ V r U mit minimalem Potential yv (4) setze U ← U ∪ {v } (5) für alle w ∈ V r U do (5) yw ← min{yw , yv + dvw } (6) end do (7) end while Lemma 3 Der Dijkstra-Algortithmus erzeugt dual-zulässige Potentiale. Beweis: • wir führen den Beweis in zwei Teilen 17 / 53 18 / 53 kürzeste Wege kürzeste Wege Algorithmus von Dijkstra Algorithmus von Dijkstra (1) Setze ys ← 0, U ← {s} und yv ← dsv für alle v ∈ V r U . (2) while U 6= V do: (3) wähle ein v ∈ V r U mit minimalem Potential yv (4) setze U ← U ∪ {v } markiere v (5) für alle w ∈ V r U do (5) yw ← min{yw , yv + dvw } schreibe fort (6) end do (7) end while (1) Setze ys ← 0, U ← {s} und yv ← dsv für alle v ∈ V r U . (2) while U 6= V do: (3) wähle ein v ∈ V r U mit minimalem Potential yv (4) setze U ← U ∪ {v } markiere v (5) für alle w ∈ V r U do (5) yw ← min{yw , yv + dvw } schreibe fort (6) end do (7) end while (i) wird u direkt vor v markiert, so gilt yu ≤ yv : (ii) für e = (u, v ) ∈ E ist zu zeigen: yv ≤ yu + de • wird u vor v markiert, so gilt diese Eigenschaft nach dem • in dem Schritt, in dem u markiert wird, gilt yu ≤ yv Fortschreiben • danach bleibt yv entweder gleich oder wird erniedrigt • danach bleibt yu konstant, yv kann nur noch verringert werden • im zweiten Fall folgt aus dem Fortschreiben yv = yu + duv ≥ yu 19 / 53 20 / 53 kürzeste Wege kürzeste Wege Algorithmus von Dijkstra • für jeden Knoten v gilt: (1) Setze ys ← 0, U ← {s} und yv ← dsv für alle v ∈ V r U . (2) while U 6= V do: (3) wähle ein v ∈ V r U mit minimalem Potential yv (4) setze U ← U ∪ {v } markiere v (5) für alle w ∈ V r U do (5) yw ← min{yw , yv + dvw } schreibe fort (6) end do (7) end while • es existiert ein Knoten u, der yv zum letzten Mal fortschreibt • damit gilt yv = yu + d(uv ) (4) • mit dieser Eigenschaft lässt sich leicht ein Weg von s nach t durch „Zurückrechnen“ gewinnen: • andernfalls gilt zum Zeitpunkt der Markierung von v : yv ≤ yu ≤ yu + de (1) (2) (3) (4) • danach bleibt yv konstant, yu kann nur noch verringert werden • yu kann nur fortgeschrieben werden, wenn ein Knoten w markiert wird • sei w der letzte solche Knoten setze v = t bestimme einen Knoten u, der (4) erfüllt falls u = s, stop andernfalls setze v = u und gehe zu (2) • dann gilt yv ≤ yw = yu − d(wu) ≤ yu ≤ yu + de . 21 / 53 22 / 53 kürzeste Wege Flüsse in Netzwerken Gliederung Satz 4 • Netzwerke und Flüsse • kürzeste Wege • Zirkulationen und Schnitte Der Dijkstra-Algorithmus berechnet eine kürzesten Weg. Beweis: • sei x ∈ RE der Inzidenzvektor des wie vorher bestimmten Weges • bipartite Matchings • dann ist x primal zulässig • y ist dual zulässig • per Konstruktion gilt: x(uv ) > 0 =⇒ yv = yu + d(uv ) • damit folgt die Behauptung aus dem Satz vom komplementären Schlupf. 23 / 53 24 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte • wir betrachten wieder einen gerichteten Graphen G = (V , E ) • wir betrachten somit eine Zirkulation (oder Strömung ) • mit Knoten-Kanten-Inzidenzmatrix A und Kantenkapazitäten c • d.h. einen Fluss x ∈ RE mit Nettozufluss δv (x) = 0 in jedem Knoten v ∈V • seien wiederum s und t zwei Knoten als Quelle und Senke • d.h. bei einer Zirkulation ist jeder Knoten Transitknoten • der Graph repräsentiert ein Netzwerk (Leitungen, Kanäle, usw.) • und es gilt • über das Netzwerk so viel wie möglich von s nach x ∈ RE ist Zirkulation auf G t „gepumpt“ werden ⇐⇒ Ax = 0. • wir fügen dazu eine Rückkante f = (t , s) mit unbeschränkter Kapazität hinzu Ford-Fulkerson-Problem • und messen die Stärke des Flusses in der Kante f bestimme eine nichtnegative Zirkulation x, die den Wert xf maximiert: max s.d . xf δv (x) ≤ xe 0 = ≤ 0 ce für alle v ∈ V für alle e ∈ E r {f } (5) 25 / 53 26 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte • im folgenden Beispielgraph sei ce = 1 für alle e ∈ E r f • sei nun x ≥ 0 eine zulässige Lösung von (5) • wir wollen versuchen, diese zu verbessern • sei dazu G(x) ein Hilfsgraph auf V • für eine Kante e = (v , w ) ∈ E r {f } enthält G(x) bis zu zwei Kanten f • eine mögliche Zirkulation x mit xf = 1 ist: (v , w ), falls xe < ce (Vorwärtskante) (w , v ), falls xe > 0 (Rückwärtskante) • sei ε > 0 so, dass xe + ε ≤ ce , xe − ε ≥ 0, f für alle Vorwärtskanten e für alle Rückwärtskanten e • x ist nicht maximal, kann aber nicht einfach erhöht werden. 27 / 53 28 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte • die aktuelle Zirkulation x: • sei P ein Weg von s nach t im Hilfsgraphen G(x) • dann kann x um mindestens ε > 0 erhöht werden: • erhöhe x um ε auf Vorwärtskanten von P und auf f = (t , s) • erniedrige x um ε auf den Rückwärtskanten von P f • offensichtlich ist die resultierende Zirkulation • der zugehörige Hilfsgraph G(x): • nichtnegativ • respektiert die Kapazitätsgrenzen • und genügt den Knotendurchflussbedingungen • P heißt augmentierender Weg • G(x) kann Kanten enthalten, die in G nicht vorkommen 30 / 53 29 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte • der Hilfsgraph G(x) mit einem augmentierendem Weg • sei S die Menge aller Knoten, die in G(x) von s aus auf einem gerichteten Weg erreicht werden können • dann wissen wir also: • im Fall t ∈ S kann x verbessert werden • aus den vorangegangenen Überlegungen ergibt sich der folgende • die verbesserte Zirkulation x0 : Algorithmus: f 31 / 53 32 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte • wir wollen zeigen, dass der Algorithmus optimale Zirkulationen Algorithmus von Ford-Fulkerson berechnet • dazu betrachten wir die LP-Formulierung des Flussproblems: (1) beginne mit x = 0 als Startlösung (2) konstruiere den Hilfsgraphen G(x) max xf δv (x) = 0 0 ≤ xe ≤ ce (3) suche in G(x) einen augmentierenden Weg P von s nach t (4) falls kein solcher Weg existiert, stop, (5) andernfalls erhöhe x entlang P zu einem neuen Fluss x0 mit xf0 = xf + ε für alle v ∈ V für alle e ∈ E r {f } (5) • äquivalent in Matrixschreibweise und mit Schlupfvariablen s ≥ 0: min − efT x Ax Ix x, (6) setze x = x0 und gehe zu (2) + Is s = = ≥ 0 c 0 • hierbei ist ef der zu f ∈ E gehörige Einheitsvektor 33 / 53 34 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte max s.d . • die LP-Formulierung mit Schlupfvariablen: min − efT x Ax Ix x, + Is s = = ≥ 0 c 0 yT 0 yT A + + zT c zT zT + + zT c zT zT • bzw. min s.d . • das dazu duale lineare Programm lautet: max s.d . yT 0 yT A ≤ ≤ y A − − − zT c zT zT ze zf ze ≥ ≥ ≥ 0 1 0. T −efT 0T ≤ ≥ −efT 0T • letzteres ist äquivalent zu ≤ ≤ −efT 0T min X ce ze e∈E s.d . 35 / 53 yw − yv ys − yt + + für alle z = (v , w ) ∈ E (6) 36 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte • sei S ⊆ V eine Knotenmenge mit s ∈ S Lemma 5 • dann bestimmt S einen s-Schnitt Sei x eine Zirkulation und S ein Schnitt. Dann gilt: X X xe − xe = 0 [S : V r S] = {(v , w ) ∈ E | v ∈ S, w ∈ / S} • der Schnitt S hat die Kapazität c[S : V r S] = e∈[S:V rS] X ce e∈[V rS:S] Beweis: e∈[S:V rS] • für alle v in V r S gilt: X x(u,v ) − (u,v ) X x(v ,u) = 0 (v ,u) • Summation ergibt: s X `X t v ∈V rS (u,v ) x(u,v ) − X ´ x(v ,u) = 0 (v ,u) S 37 / 53 38 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte Lemma 6 (Schnittlemma) • Summation ergibt: X `X v ∈V rS (u,v ) x(u,v ) − X Sei x eine zulässige Zirkulation auf G und [S : V r S] ein beliebiger s-Schnitt. Dann gilt xf ≤ c[S : V r S]. ´ x(v ,u) = 0 (v ,u) • sei e = (u, v ) eine Kante mit u, v ∈ V r S • dann wird xe in der Summation einmal positiv und einmal negativ Beweis: gezählt • setze • somit gehen in die Summation nur Kanten aus [S : V r S] und [V r S : S] ein yv = 1, für v ∈ S 0, für v ∈ /S ze = 1, für e ∈ [S : V r S] 0, sonst • woraus die Behauptung folgt. • dies liefert eine zulässige Lösung des dualen Problems (6) mit Zielfunktionswert X ce ze = c[S : V r S] e∈E • die Behauptung folgt dann aus der schwachen Dualität. 39 / 53 40 / 53 Zirkulationen und Schnitte Zirkulationen und Schnitte • sei wie vorher x ≥ 0 eine zulässige Zirkulation Satz 7 (Ford-Fulkerson) • sei S die Menge aller von s in G(x) erreichbaren Knoten Eine zulässige Zirkulation x ist optimal für (5) genau denn, wenn es im Hilfsgraphen G(x) keinen augmentierenden Weg von s nach t gibt. • angenommen t ∈ /S • das lineare Programm (5) hat auf jeden Fall x = 0 als zulässige • per Definition von G(x) und S dann gilt für jede Kante e = (v , w ) ∈ E r {f }: ce xe = 0 Lösung • also erhalten wir unter den obigen Voraussetzungen eine wenn v ∈ S und w ∈ V r S wenn v ∈ V r S und w ∈ S. kombinatorische (graphentheoretische) Form der LP-Dualität: Korollar 8 (max-flow-min-cut) • weiter folgt mit Lemma 5 xf = X xe = c[S : V r S]. max {xf | x ist zulässig für (5)} = min {c[S : V r S] | s ∈ S ⊆ V }. e∈[S:V rS] • somit ist x optimal • daher ergibt sich der folgende Satz: 41 / 53 42 / 53 Zirkulationen und Schnitte Flüsse in Netzwerken Gliederung Bemerkungen: • Netzwerke und Flüsse • kürzeste Wege • Zirkulationen und Schnitte • sind die Kapazitäten ce ganzzahlig, so ist klar, dass • der FF-Algorithmus nur ganzzahlige Lösungen x generiert • in jeder Iteration der Flusswert xf um ein ganzzahliges ε ≥ 1 verbessert wird • bipartite Matchings • man kann zeigen, dass der FF-Algorithmus: • sehr lange brauchen kann, um das Optimum zu bestimmen • höchstens |V | · |E | Augmentierungen erfordert, wenn man kürzeste augmentierende Wege wählt • ( also z.B., wenn man P mit dem Dijkstra-Algorithmus berechnet) 43 / 53 44 / 53 bipartite Matchings bipartite Matchings • seien S und T zwei endliche disjunkte Mengen und E ⊆ S × T • ein Matching ist eine Teilmenge M ⊆ E von paarweise • wir betrachten den (ungerichteten) Graphen G = (S ∪ T , E ) nichtinzidenten Kanten: • seine Kanten verlaufen nur zwischen S und T (s1 , t1 ), (s2 , t2 ) ∈ M s1 6= s2 , t1 6= t2 . =⇒ • innerhalb von S oder von T gibt es keine Kanten M S T S • ein solcher Graph G = (S ∪ T , E ) heißt bipartit T • wir suchen in G ein Matching maximaler Kardinalität 45 / 53 46 / 53 bipartite Matchings bipartite Matchings • das Matching-Problem lässt sich als Spezialfall des FF-Problems • wir setzen die Kapazität der Kanten vom Typ (s0 , s) und (t , t0 ) auf auffassen 1 (und „+∞“ sonst) , • dazu betrachten wir den Graphen G = (V , E ), mit zwei neuen Knoten • offensichtlich entspricht jedem Matching ein ganzzahliger Fluss und s0 und t0 , d.h. V = (S ∪ T ∪ {s0 , t0 }, E , und Kantenmenge umgekehrt • der FF-Algorithmus liefert einen Vektor x ∈ {0, 1}E mit maximalem E = E ∪ {(s0 , s) | s ∈ S} ∪ {(t , t0 ) | t ∈ T } ∪ {(t0 , s0 } Flusswert x(t0 ,s0 ) = X xe . e∈E • folglich ist M = {e ∈ E | xe = 1} ein maximales Matching in G. s t S T 47 / 53 48 / 53 bipartite Matchings bipartite Matchings • sei andererseits M ein maximales Matching, das nach dem • eine (Kanten-)Überdeckung von G = (S ∪ T , E ) ist Teilmenge der FF-Algorithmus konstruiert wurde Knoten C ⊆ S ∪ T mit der Eigenschaft (v , w ) ∈ E • sei C der Schnitt aller Knoten, die von s0 noch erreichbar sind v ∈ C oder w ∈ C . =⇒ • dann gilt; c[C : V r C] = |M | < ∞, C • daher existiert kein e ∈ E , das von S ∩ C nach T r C verläuft • also ist eine Überdeckung gegeben durch: C = (S r C) ∪ (T ∩ C) S • sie hat Mächtigkeit T • da jede Kante aus M durch C abgedeckt sein muss, folgt: |C| = |S r C| + |T ∩ C| = c[C : V r C] = |M |. |C| ≥ |M |. • somit ergibt sich: 50 / 53 49 / 53 bipartite Matchings bipartite Matchings • seien S und T disjunkte Mengen mit |S| = |T | = n < ∞ und Satz 9 (König) E =S ×T Sei G = (S ∪ T , E ) bipartit. Dann gilt • wir setzen V = S ∪ T und definieren die Matrix A = [ave ] ∈ RV ×E über max {|M | | M Matching} = min {|C| | C Überdeckung.} ave • das Matching- und Überdeckungsproblem kann sinnvoll auch im 8 <−1 = +1 : 0 falls e = (v , w ) falls e = (w , v ) sonst • der Vektor b ∈ RV sei gegeben durch nichtbipartiten Fall formuliert werden • während das Matchingproblem (mit etwas mehr Aufwand) noch effizient bv = lösbar bleibt, ist für das analoge Überdeckungsproblem kein effizienter Algorithmus bekannt −1 +1 falls v ∈ S falls v ∈ T • ein (S × T )-Matching entspricht einer (0, 1)-Lösung x von • insbesondere gilt der Satz von König in diesem Rahmen nicht mehr Ax = b. 51 / 53 52 / 53 bipartite Matchings • es liegt hier also ein Flussproblem vor, bei dem alle Knoten in S Quellen und alle Knoten in T Senken sind • nach Wahl von b erfüllt jedes nichtnegative x ∈ RE automatisch die Bedingung xe ≤ 1 für alle e ∈ E . A ist eine Netzwerkmatrix und damit total unimodular • also gilt P = {x ∈ RE | Ax = b, x ≥ 0} = PI . • die zulässigen Basislösungen des Simplexalgorithmus sind Ecken von P und folglich ganzzahlig • d.h. diese Basislösungen entsprechen Matchings • mit anderen Worten: P ist genau das Matching-Polytop. 53 / 53