Byron Das Simplexverfahren. Worum es geht: Es ist eine lineare Gleichung f gegeben, sowie ein System von Ungleichungen, die nähere Aussagen über die Unbekannten von f geben. Durch das Simplexverfahren ist es möglich, diese Unbekannten zu ermitteln, für den Fall daß f ein Maximum annimmt. Thema Grundrechenarten 2. benötigtes Vorwissen: Bezugsquelle In der Grundschule deines Vertrauens 3. Zum Verfahren: Das Verfahren ähnelt sehr dem Gauß schen Eliminierungsverfahren, da es auf der Darstellung in Tabellen (mit Vertauschungen und Pivot) basiert. Leider wäre eine formale Präsentation des Verfahrens sehr umständlich und es würde vor lustigen Variablen mit Doppelindex ( λ k,j σ τ ) geradezu wimmeln. Also werde ich das Verfahren wider dem Konzept der Skripte gleich an einem Beispiel demonstrieren: Sei unsere Aufgabe derart: Löse mittels Simplexmethode: max(f(x) = x + 2 x 2 + 3 x 3 ) Wobei folgende Ungleichungen die Unbekannten x, x 2 und x 3 (mit x, x 2, x 3 0) näher bestimmen: () x + x 2 8 (2) 2 x + x 2 26 (3) x + x 2 + x 3 2 Der Algorithmus: () Schritt I: Ungleichungen umformen/ Unbekannte hinzufügen Bilde aus den gegeben Ungleichungen (hier -3) ein System von Gleichungen, durch das Hinzufügen von neuen Variablen. Die ist legitim, da die neuen Variablen praktisch die Differenz zwischen den Funktionen der Unbekannten und dem konstanten Zahlenwert entfernen (Z.B. bei x +x 2 8 wird die Differenz zwischen x + x 2 und 8 durch x + x 2 + x neu aufgefangen ). Es folgt: (mit x neu, x neu2, x neu3 0) (a) x + x 2 + x neu = 8 (b) 2 x + x 2 + x neu2 = 26 (c) x + x 2 + x 3 + x neu3 = 2 Hierzu noch ein Wort zu den Ungleichungen () und (2): Beide Ungleichungen hängen von x und x 2 ab, und ein böser Mensch könnte glatt behaupten, daß du beide Ungleichungen nur durch x neu erweitern brauchst, um eine Gleichung zu erzeugen. Dem ist nicht so, da beide (Un-)Gleichungen linear
2 unabhängig voneinander sind - es gibt also keinen konstanten Zahlenwert mit dem du die Ungleichung () erweitern könntest um (2) zu erhalten. Wäre dies der Fall, so müsstest du sowieso eine der Ungleichungen entfernen, da sie nicht zur Lösung beihilft (ja, da darf man nicht so zimperlich sein). (2) Schritt II: Aufstellen der ersten Simplextabelle. Die Simplextabelle (oder auch Simplextableau - wer s französisch mag...) ist der Kern des Verfahrens und alles was wir rechnen werden, bezieht sich einzig und allei auf diese Tabelle. Die erste Tabelle wird folgendermaßen aufgebaut: x x 2 x 3 Spaltenköpfe 0 2 3.Zeile x neu 8 0 2.Zeile x neu2 26 2 0 3.Zeile x neu3 2 4.Zeile Zeilen köpfe Ergebnis spalte In den Spaltenköpfen stehen die gesuchten Unbekannten und in den Zeilenköpfen die neu eingefügten Variablen. Die erste Zeile wird gebildet mit einer 0 (steht in der Ergebnisspalte, ergibt sich daraus, daß f keinen Ergebniswert hat) sowie folgend die einzelnen negierten Koeffizienten zu x bis x 3 aus f(x) = x + 2 x 2 + 3 x 3. Die restlichen Zeilen (2-4) ergeben sich wie die Erste, nur daß die unter Schritt I neu erzeugten Gleichungen betrachtet werden (also in Zeile 2 die Gleichung mit x neu, in Zeile 3 die Gleichung mit x neu2,...) sowie daß die Koeffizienten nicht negiert werden. Vergleiche Tabelle mit: (a) x + x 2 + x neu = 8 (b) 2 x + x 2 + x neu2 = 26 (c) x + x 2 + x 3 + x neu3 = 2 (3) Schritt III: Ermitteln vom Pivot-Element. Das Pivotelement ist ein spezielles Element unserer Tabelle, nach dem wir immer wieder die Tabelle neu erzeugen (und zwar so lange, bis in der. Zeile nur positive Werte stehen - dann ist der Algorithmus am Ende). Das Pivotelement muß folgende Kriterien erfüllen: (a) Das Pivotelement steht immer in einer Spalte mit einer negativen Zahl in der ersten Zeile. (b) Erfüllen mehrere Spalten dieses Kriterium, so ist die Spaltenwahl beliebig (beachte nächstes Kriterium). (c) Das Pivotelement ist grösser als Null. (d) Sollten mehrere Elemente grösser als Null sein, so wird das Element genommen, daß bei Division von der Ergebnisspalte durch sich den kleinsten Quotienten hat (den Satz sollte man auf ein Handtuch sticken).
3 Zu unserem Beispiel bedeutet dies: x x 2 x 3 0 2 3 x neu 8 0 x neu2 26 2 0 x neu3 2 In der x -Spalte könnte ein Pivot liegen, da der erste Zeileneintrag negativ ist (-). Nun sind aber die restlichen Spaltenwerte grösser als Null Es wird dividiert: 8 = 8 26 2 = 3 = 2 der kleinste Quotient 2 Also wird die in der letzten Zeile unser neues Pivotelement: x x 2 x 3 0 2 3 x neu 8 0 x neu2 26 2 0 x neu3 2 (4) Schritt IV: Erzeugen der neuen Pivottabelle: Zuerst einmal ist in der neuen Tabelle der Zeilenkopf und der Spaltenkopf, die das Pivotelement charakterisieren, zu vertauschen. Ausserdem sind noch bei der Erzeugung 4 Fälle zu betrachten: (a) Die Stelle des Pivotelementes: Das neue Pivot ergibt sich aus: P ivot neu = (b) Die Spalte des Pivotelementes (ohne dieses): Die Elemente der neuen Spalte ergeben sich nach folgender Formel: Element neu = Element alt (c) Die Zeile des Pivotelementes (ohne dieses): Die Elemente der neuen Zeile ergeben sich nach folgender Formel: Element neu = Element alt (d) Der Rest der Tabelle: Sei S P ivot der Wert, der mit unserem Element in der gleichen Zeile steht, sowie mit dem Pivotelement die Spalte teilt. Sei weiterhin Z P ivot der Wert, der mit unserem Element in der gleichen Spalte steht, sowie mit dem Pivot die Zeile teilt. Dann werden die restlichen Elemente wie folgt gebildet: Element neu = Element alt (S P ivot Z P ivot ) Nun folgt für unsere alte Simplextabelle: Alte Tabelle x x 2 x 3 0 2 3 x neu 8 0 x neu2 26 2 0 x neu3 2 Neue Tabelle x neu3 x 2 x 3 2 2 x neu2 2 2 2 x 2 (5) Schritt V: Prüfen, ob Abbruchbedingung erfüllt ist. Sind alle Werte in der obersten Zeile positiv, so ist der Algorithmus am Ziel. Das Ergebnis wäre dann, daß alle Unbekannten in den Zeilenköpfen
4 als Inhalt den entsprechenden Wert der Ergebnisspalte haben, sowie alle Unbekannten in den Spaltenköpfen den Inhalt Null haben. Da aber das Kriterium für unser Beispiel noch nicht erfüllt ist, gehen wir wieder zu Schritt III und ermitteln ein neues Pivotelement. (3) Das neues Pivot wird wieder nach den genannten Regeln gesucht (Sei ): x neu3 x 2 x 3 2 2 x neu2 2 2 2 x 2 (4) Neue Tabelle aufstellen: Alte Tabelle x neu3 x 2 x 3 2 2 x neu2 2 2 2 x 2 Neue Tabelle x neu3 x x 3 24 0 x neu2 4 x 2 2 (5) Das Abbruchkriterium wurde noch nicht erfüllt - zurück zu Schritte 3. (3) Das neues Pivot wird wieder nach den genannten Regeln gesucht (Sei ): x neu3 x x 3 24 0 x neu2 4 x 2 2 (4) Neue Tabelle aufstellen: Alte Tabelle x neu3 x x 3 24 0 x neu2 4 x 2 2 Neue Tabelle x neu3 x x 2 36 2 x neu 8 0 x neu2 26 0 2 x 3 2 (5) Das Abbruchkriterium ist erfüllt! Alle Werte in der ersten Zeile sind positiv. Es folgt aus der Tabelle: x Neu3 = 0 x Neu = 8 x = 0 x Neu2 = 26 x 2 = 0 x 3 = 2 Durch Einsetzen der Werte in die Ausgangsgleichungen kannst du leicht nachvollziehen, daß diese Werte korrekt sind. Alles in allem ist das Simplexverfahren jedoch sehr Zeitaufwendig und Fehleranfällig, weswegen es meist nur in der Datenverarbeitung Beachtung findet.
5 Quickie Das Simplexverfahren Was das Verfahren kann: Ermittelt Unbekannte in einer linearen Gleichung bei ihrem Maximum. Vorraussetzung: Die lineare Gleichung ist durch Ungleichungen näher beschrieben. Algorithmus () Schritt I: Ungleichungen umformen/ Unbekannte hinzufügen Bilde aus den gegeben Ungleichungen ein System von Gleichungen, durch das Hinzufügen von neuen Variablen. (2) Schritt II: Aufstellen der ersten Simplextabelle. x x 2 x 3 Spaltenköpfe 0 2 3.Zeile x neu 8 0 2.Zeile x neu2 26 2 0 3.Zeile Zeilen Ergebnis köpfe spalte In den Spaltenköpfen stehen die gesuchten Unbekannten und in den Zeilenköpfen die neu eingefügten Variablen. Die erste Zeile wird gebildet mit einer 0 sowie folgend die einzelnen negierten Koeffizienten. Die restlichen Zeilen ergeben sich wie die Erste, nur daß die unter Schritt I neu erzeugten Gleichungen betrachtet werden (also in Zeile 2 die Gleichung mit x neu, in Zeile 3 die Gleichung mit x neu2 ) sowie daß die Koeffizienten nicht negiert werden. (3) Schritt III: Ermitteln vom Pivot-Element. Das Pivotelement muß folgende Kriterien erfüllen: (a) Das Pivotelement steht immer in einer Spalte mit einer negativen Zahl in der ersten Zeile. (b) Erfüllen mehrere Spalten dieses Kriterium, so ist die Spaltenwahl beliebig (beachte nächstes Kriterium). (c) Das Pivotelement ist grösser als Null. (d) Sollten mehrere Elemente grösser als Null sein, so wird das Element genommen, daß bei Division von der Ergebnisspalte durch sich den kleinsten Quotienten hat (den Satz sollte man auf ein Handtuch sticken). (4) Schritt IV: Erzeugen der neuen Pivottabelle: Zuerst einmal ist in der neuen Tabelle der Zeilenkopf und der Spaltenkopf, die das Pivotelement charakterisieren, zu vertauschen. Weiterhin gilt: (a) Das neue Pivot ergibt sich aus: P ivot neu = (b) Die Elemente der neuen Spalte ergeben sich nach: Element neu = Element alt (c) Die Elemente der neuen Zeile ergeben sich nach: Element neu = Element alt (d) Der Rest der Tabelle: Sei S P ivot der Wert, der mit unserem Element in der gleichen Zeile steht, sowie mit dem Pivotelement die Spalte teilt. Sei weiterhin Z P ivot der Wert, der mit unserem Element in der gleichen Spalte steht, sowie mit dem Pivot die Zeile teilt. Dann gilt für die restlichen Elemente:
6 Element neu = Element alt (S P ivot Z P ivot ) (5) Schritt V: Prüfen, ob Abbruchbedingung erfüllt ist. Sind alle Werte in der obersten Zeile positiv, so ist der Algorithmus am Ziel. Das Ergebnis wäre dann, daß alle Unbekannten in den Zeilenköpfen als Inhalt den entsprechenden Wert der Ergebnisspalte haben, sowie alle Unbekannten in den Spaltenköpfen den Inhalt Null haben. Ansonsten gehe zurück zu Schritt III.