Simplex-Verfahren
Das Simplex-Verfahren ist eine Lösungsmethode um Lineare Optimierungsmodelle
der Form
Max cTx
unter den Nebenbedingungen
Ax=b
x >= 0
zu lösen.
Diese Form bezeichnet man auch als Standardform, alle anderen linearen
Optimierungsmodelle (z.B. Min cTx oder Ax > b etc.) lassen sich
aber in diese Standardform umwandeln, so daß das Simplex-Verfahren
generell anwendbar ist (wichtig ist nur, daß das Lineare Optimierungsproblem
in der obigen Standardform ist!).
Beispiel:
Ein Unternehmen stellt zwei Güter her, welche mit Hilfe von drei
Maschinen produziert werden. Die entsprechenden Daten sind der folgenden
Tabelle zu entnehmen.
|
Produkt 1 |
Produkt 2 |
Einheit |
max. Kapazität [Min] |
| Maschine 1 |
4 |
2 |
Min/St |
200 |
| Maschine 2 |
2 |
4 |
Min/St |
200 |
| Maschine 3 |
2 |
2 |
Min/St |
120 |
| DB pro Einheit |
150 |
100 |
DM/St |
|
Die Zielsetzung besteht darin, ein Produktionsprogramm zu bestimmen,
welches den Gesamtdeckungsbeitrag maximiert (Operative Programmplanung
bei mehreren Engpässen).
Entscheidungsfrage:
Wieviel soll von Produkt 1, wieviel von Produkt 2 hergestellt werden?
Entscheidungsvariablen:
x1 = Anzahl der produzierten Menge von Produkt 1
x2 = Anzahl der produzierten Menge von Produkt 2
Nebenbedingungen:
-
Maximale Kapazität pro Maschine
4x1 + 2x2 <= 200
2x1 + 4x2 <= 200
2x1 + 2x2 <= 120
-
Nichtnegativität
x1, x2 >= 0
Zielfunktion:
Maximiere DB also
150x1 + 100x2 ---> Max
Zunächst wird diese Problem in mathematischer Form dargestellt, also:
Max cTx
unter den Nebenbedingungen
Ax<=b
x >= 0
Mit
cT = (150, 100)
x = x1, x2
bT = (200, 200, 120)
Das Simplex-Verfahren beinhaltet insgesamt 10 Schritte:
Schritt 1: Überführen in Standardform
Die Forderung für das Simplexstarttableau ist Ax=b (und nicht wie
hier Ax<=b). Man behilft sich, indem für jede Nebenbedingung ein
sog. Schlupfvariable eingeführt wird, die die Ungleichung dann in
eine Gleichung umwandelt:
4x1 + 2x2 + x3
= 200
2x1 + 4x2
+ x4 = 200
2x1 + 2x2
+ x5 = 120
Schritt 2: Aufstellen des Start-Tableaus
Damit kann nun das Start-Tableau für das Simplex-Verfahren direkt
angegeben werden. Dabei werden die Koeffizienten der Nebenbedingungen und
deren Funktionswert zeilenweise eingetragen. In die unterste Zeile wird
die Zielfunktion mit negativem Vorzeichen eingetragen.
| x1 |
x2 |
x3 |
x4 |
x5 |
Funktionswert |
| 4 |
2 |
1 |
0 |
0 |
200 |
| 2 |
4 |
0 |
1 |
0 |
200 |
| 2 |
2 |
0 |
0 |
1 |
120 |
| -150 |
-100 |
0 |
0 |
0 |
0 |
An diesem Tableau kann nun (und in jedem weiteren Schritt ebenfalls) direkt
eine sog. Basislösung abgelesen werden. Diese ist hier (0, 0, 200,
200, 120), also die entsprechenden Funktionswerte der in dem Tableau stehenden
Einheitsvektoren (bei x3, x4 und x5 =
Basisvariablen) mit den zu Null gesetzten Nichtbasisvariablen. Diese Lösung
ist sicherlich nicht optimal, was man daran erkennt, daß der Zielfunktionswert
= 0 ist (das rote Feld), was nichts anderes bedeutet, als daß man
keinen DB erwirtschaftet (klar, man produziert ja auch nichts, die Produkte
x3, x4 und x5 sind ja nur "imaginär").
Die Idee des Simplex-Verfahrens ist nun, diese Einheitsvektoren Spaltenweise
zu vertauschen, so daß der Zielfunktionswert maximal wird!
Schritt 3: Bestimmen der Pivot-Spalte
Es stellt sich zunächst die Frage, welches Produkt denn nun mit in
die Programmplanung aufgenommen werden soll. Dafür durchsucht man
die Zielfunktionszeile nach negativen Werten und bestimmt davon
den betragsmäßig kleinsten Wert. Die zugehörige Spalte
i wird als Pivot-Spalte bezeichnet.
| x1 |
x2 |
x3 |
x4 |
x5 |
Funktionswert |
| 4 |
2 |
1 |
0 |
0 |
200 |
| 2 |
4 |
0 |
1 |
0 |
200 |
| 2 |
2 |
0 |
0 |
1 |
120 |
| -150 |
-100 |
0 |
0 |
0 |
0 |
Schritt 4: Positive Elemente der Pivot-Spalte suchen
Für die gefundene Pivot-Spalte werden nun alle positiven Werte
xi bestimmt. Das sind hier:
Schritt 5: Berechnen des Quotienten Funktionswertj/aij
Für jedes der in Schritt 4 identifizierten Elemente wird nun der Quotient
aus der zugörigen rechten Seite und dem Element berechnet:
Fwi/a11 = 200/4 = 50
Fwi/a12 = 200/2 = 100
Fwi/a13 = 120/2 = 60
Schritt 6: Bestimmen des kleinsten Quotienten
Aus den in Schritt 5 berechneten Werten wird nun der kleinste bestimmt.
Die entsprechende Zeile wird als Pivot-Zeile, das zugehörige Element
der Pivot-Spalte als Pivot-Element bezeichnet. Für das Beispiel ist
dies die Zeile 1 (Fwi/a11 = 50), mit dem Pivot-Element
a11.
Schritt 7:
Nun wird in der Pivot-Zeile die Basisvariable gesucht, die den Wert 1 hat:
| x1 |
x2 |
x3 |
x4 |
x5 |
Funktionswert |
| 4 |
2 |
1 |
0 |
0 |
200 |
| 2 |
4 |
0 |
1 |
0 |
200 |
| 2 |
2 |
0 |
0 |
1 |
120 |
| -150 |
-100 |
0 |
0 |
0 |
0 |
Schritt 8: Austauschschritt
Die beiden Spalten werden "getauscht". Es wird also nun - im obigen Beispiel
- die Nichtbasisvariable x1 zur Basisvariablen, d.h. in dieser
Spalte muß im folgenden der Einheitsvektor stehen:
| x1 |
x2 |
x3 |
x4 |
x5 |
Funktionswert |
| 1 |
1/2 |
1/4 |
0 |
0 |
50 |
| 0 |
|
|
|
|
|
| 0 |
|
|
|
|
|
| 0 |
|
|
|
|
|
Die einzelnen Zeilen berechnen sich durch Addition und Subtraktion der
jeweiligen Zeile mit einem Vielfachen der Pivot-Zeile, also:
| x1 |
x2 |
x3 |
x4 |
x5 |
Funktionswert |
| 1 |
1/2 |
1/4 |
0 |
0 |
50 |
| 0 |
3 |
-1/2 |
1 |
0 |
100 |
| 0 |
1 |
-1/2 |
0 |
1 |
20 |
| 0 |
-25 |
37,5 |
0 |
0 |
7.500 |
Damit ergibt sich die nächste Basislösung zu (50, 0, 0, 100,
20), mit dem Funktionswert 7.500. D.h wenn 50 Teile von x1 produziert
werden, kann ein DB von 7.500 erzielt werden.
Schritt 9: Prüfen, ob optimale Lösung
Es stellt sich nur die Frage, ob es noch einen besseren Wert gibt. Da immer
noch einer der Zielfunktionskoeffizienten negativ ist (im Klartext bedeutet
das "das Hinzufügen dieser Variable erhöht den Zielfunktionswert)
werden die Schritte 3 - 8 wiederholt. Dies geschieht solange, bis alle
Zielfunktionskoeffizienten größer 0 Null sind.
Es gibt keine Zielfunktionskoeffizienten mehr, die den Zielfunktionswert
vergrößern können.
Schritt 10: Optimale Lösung gefunden
Die Optimale Lösung kann nun aus dem Tableau direkt abgelesen werden.
Es ergibt damit:
x1 = 40
x2 = 20
Maximale DB ist 8.000
D.h. das optimale Produktionsprogramm ist 40 Stück von Produkt 1 und
20 Stück von Produkt 2 herzustellen. Damit läßt sich ein
Deckungsbeitrag von 8.500 GE erzielen.
Diese Problem und dessen Lösung läßt sich auch einfach
grafisch nachvollziehen.
Der grauschraffierte Bereich stellt die gesamte Lösungsmenge dar,
d.h eine Lösung kann nur innerhalb dieses Bereiches vorhanden sein.
Betrachtet man nun noch die Zielfunktion (eine Schar paralleler Geraden),
so ergibt sich folgendes Bild:
Man kann also das Ergebnis ablesen, indem einfach die Zielfunktion über
den Zielbereich (in Richtung einer Vergrößerung des Zielfunktionswertes)
verschoben wird, bis das der Funktionswert maximal wird. Die entsprechenden
Mengen von x1 und x2 können dann abgelesen werden.
Diese Eigenschaften kann man sich für ein allgemeines Lösungsverfahren
zu Nutze machen, wenn man sich folgende Zusammenhänge klar macht:
-
Eine Lösung liegt immer in einem der Eckpunkte des eingegrenzten Zielbereiches
Man braucht also nur diese Eckpunkte "abzusuchen", der maximale gefundene
Funktionswert der Zielfunktion ist dann die Lösung.
-
Das ganze gilt ebenso für mehr als zwei Variablen (allerdings dürfte
die zeichnerische Lösung dann um einiges schwieriger werden)
-
Das Simplex-Verfahren macht sich das Absuchen der Eckpunkte zunutze, indem
nach und nach Basisvariablen und Nichtbasisvariablen vertauscht werden,
bis das der Zielfunktionswert maximal ist (dann erreicht, wenn es keine
NBV mehr gibt, die diesen Wert erhöhen kann, also alle >= 0 sind!)
Bitte lesen: Wichtige Hinweise zu diesen Seiten!
|