Kurs:Algorithmen und Datenstrukturen/Vorlesung/Simplex Verfahren




Simplex VerfahrenBearbeiten

Auf dieser Seite wird das Simplex Verfahren behandelt.

IdeeBearbeiten

Es wird in einer beliebigen Ecke des Polyeders begonnen. Dann wird verglichen, ob einer der Nachbarn eine bessere Lösung für die Optimierung bietet und anschließend wird dieser Knoten betrachtet. Am Ende erreichen wir eine Ecke, die keinen Nachbarn mit einer besseren Lösung hat. Die Lösung ist nun ein lokales Optimum. Bei der linearen Optimierung gilt, dass ein lokales Optimum automatisch ein globales Optimum ist, da der Polyeder eine konvexe Menge ist. Graphisch kann mit dieser Idee jedes lineare Optimierungsproblem gelöst werden. Dies wird aber sehr schnell unübersichtlich (und kann schlecht implementiert werden). Wir benötigen eine einfache Charakterisierung der “Ecken” des Polyeders. Diese erhalten wir durch Betrachtung der Basen der Matrix A.

Das Simplex-Verfahren löst ein lineares Programm in endlich vielen Schritten oder stellt seine Unlösbarkeit oder Unbeschränktheit fest. Im Worstcase hat es exponentielle Laufzeit unabhängig von den gewählten Pivotregeln, in der Praxis ist es sehr effizient. Das Simplex-Verfahren berechnet auch die Lösung für das duale Problem zu einem linearen Programm.


Wiederholung algebraischer GrundlagenBearbeiten

Seien  .

  • Die Linearkombination von   mit den Koeffizienten   ist der Vektor  .
  • Die Vektoren   sind linear abhängig, wenn es ein   gibt, so dass sich   als Linearkombination von   darstellen lässt.
  • Eine maximale Menge linear unabhängiger Vektoren heißt Basis des zugehörigen Raumes. Eine Basis des   besteht beispielsweise aus m linear unabhängigen Vektoren.
  • Der Rang einer Matrix A ist die maximale Anzahl linear unabhängiger Spaltenvektoren.

Matrix lineares OptimierungsproblemBearbeiten

 

 

 

 

 ,  

Da wir für jede unserer ursprünglichen Ungleichungen eine Schlupfvariable eingeführt haben, gilt stets Rang(A)=m (=Anzahl der Gleichungen=Länge des Vektors b).

Basis und BasislösungBearbeiten

Auf dieser Seite werden die Basen und Basislösungen beim Simplex Verfahren behandelt. Gegeben ist ein lineares Gleichungssystem  .

Dann bilden m lineare unabhängige Spaltenvektoren aus A eine Basis von A. Diese wird mit   bezeichnet. B enthält die Indices der Basisvektoren. N enthält die Indices der Nichtbasisvektoren. Die Basislösung   ist gegeben durch:   dies gilt genau dann wenn:  .   ist eine zulässige Basis von A, wenn gilt  . Wenn   ist, dann ist es eine zulässige Basislösung von A.

Beispiel 1Bearbeiten

 

 

   

 

Nicht-Basisvariablen werden stets auf 0 gesetzt. Die zulässige Basislösung von A mit Zielfunktionswert 0, die man durch einsetzen erhält ist dann (0,0,200,300,400).

Beispiel 2Bearbeiten

 

 

   

 

Nicht-Basisvariablen werden stets auf 0 gesetzt.

Die zulässige Basislösung von A, die man durch einsetzen erhält ist dann (200,0,0,300,200) mit dem Zielfunktionswert 200.

Basen von ABearbeiten

Hier gibt es eine Übersicht der Basen von A mit dessen zulässigen Lösungen.

      x
       
       
       
       
       

 

Basen von A- mit unzulässigen LösungBearbeiten

Hier gibt es eine Übersicht der Basen von A mit unzulässigen Lösungen.

      x
       
       
       
       
       

Diese Basen haben keine zulässige Lösungen, da   negative Werte enthält.

Die Teilmengen   von A sind keine Basen von A, da die Vektoren jeweils linear abhängig sind.

Charakterisierung von PolyedereckenBearbeiten

Warum schauen wir uns Basen und Basislösungen an? Wir waren doch an Ecken des Polyeders interessiert...

Sei das System   gegeben,  . Dann sind äquivalent:

  1. x ist eine Ecke des zugehörigen Polyeders
  2. x ist eine zulässige Basislösung von Ax=b

Wir wissen, dass die optimale Lösung in einem Eckpunkt liegen muss, falls sie existiert. D.h. wir müssen nur über die Basen von A optimieren (diese bestimmen ja die zulässigen Basislösungen von Ax=b). Dies erfolgt mit sogenannten Tableaus.

Das Simplex-Verfahren besteht aus einer Folge von Basen bzw. Tableus.

  1. Zuerst wird die zulässige Basis   gefunden und daraus das Starttableau konstruiert.
  2. Anschließend wir eine neue zulässige Basis   aus   konstruiert, so dass die zulässige Basislösung von   besser ist, als die von  . Das Tableau wird nun aktualisiert.
  3. Wenn es keine bessere Basislösung mehr gibt, dann ist die letzte optimal.

Ein Tableau entspricht dem Gleichungssystem   mit  .

  ist ein Simplextableau zur Basis  


  mit  

Beispiel GewinnmaximierungBearbeiten

Nun wird der Simplex Algorithmus anhand des Beispiels der Gewinnmaximierung Schritt für Schritt durchgegangen.

Zielfunktion:

 .


Nebenbedingungen:

 

 

 

 

 

Das System lässt sich umschreiben zu:

 

 

 

 

 

 

 

InitialisierungBearbeiten

Gestartet wird mit der Basislösung, die durch die Schlupfvariable gegeben ist.

 

   

 

   

StarttableauBearbeiten

      b
z 1 6 13 0
  1 0 0 200
  0 1 0 300
  1 1 1 400
  0 1 3 600

  sind Nichtbasiselemente, Z ist die Zielfunktion und   sind Basiselemente. Dabei sind die blau hinterlegten Felder das  , die gelb hinterlegten Felder stellen den Teil von   dar und die grünen Felder sind  . Das nicht markierte Feld ist dabei der negative Zielfunktionswert  .

Update eines TableauBearbeiten

Für das Update eines Tableau wird eine neue zulässige Basis bestimmt, indem ein Basisvektor durch einen Nichtbasisvektor ausgetauscht wird. Die Menge der Nichtbasisvektoren, die getauscht werden können, ist über die positiven Koeffizienten c der Zielfunktion definiert als:  . Wenn   dann breche ab und gebe x zurück. Die Menge der Basisvektoren, die getauscht werden können, ist über ihre j-te Komponente bestimmt:  . Wenn   für alle   dann ist das LP unbeschränkt, da die Zielfunktion   durch   unbeschränkt wächst.

OptimierungsphaseBearbeiten

Berechne für eine zulässige Basis, das zugehörige Tableau. Nun wird E bestimmt. Wenn   dann wird abgebrochen und x zurückgegeben. Ansonsten wird   durch eine geeignete Pivotregel gewählt. Als nächstes wird   bestimmt. Wenn   dann wird zurückgegeben, dass LP unbeschränkt ist. Ansonsten wird   durch eine geeignete Pivotregel gewählt. Führe nun einen Basiswechsel durch und starte wieder oben.

BeispielBearbeiten
      b
z 1 6 13 0
  1 0 0 200
  0 1 0 300
  1 1 1 400
  0 1 3 600

 

 

 

 

Heuristik für die Auswahl der TauschvektorenBearbeiten

Als erstes werden die größten Koeffizienten in der Zielfunktion gewählt (Dantzig). Eine andere Möglichkeit ist das steepest-edge pricing, welches die Kombination aus Spalten- und Zeilenvektor wählt, die den größten Zuwachs für die Zielfunktion bringt. Oder der kleinste Index wird gewählt. Die letzte Möglichkeit ist eine zufällige Auswahl.

Erste IterationBearbeiten

Heuristik: Ersetze einen Basisvektor durch den Nichtbasisvektor, der den größten Zugewinn für die Zielfunktion bringt.

 

 

 

 

Hier wird die Zeile von   betrachtet und die Spalte von  . Der alte Wert ist 0. Der Koeffizient von   in der Zielfunktion ist 1 und der Zugewinn durch   ist 200.

 

 

 

 

 

Hier wird die Zeile von   betrachtet und die Spalte von  . Der alte Wert ist 0. Der Koeffizient von   in der Zielfunktion ist 6 und der Zugewinn durch   ist 1800.

 

 

 

 

Hier wird die Zeile von   betrachtet und die Spalte von  . Der alte Wert ist 0. Der Koeffizient von   in der Zielfunktion ist 13 und der Zugewinn durch   ist 2600. Nun wird   durch   ersetzt.

Update des TableausBearbeiten

Der neue Wert von   wird nun berechnet.

 .

Dieser Wert wird nun eingesetzt.

 

 

 

Das neue Tableau sieht nun so aus:

      b
z 1     -2600
  1 0 0 200
  0 1 0 300
  1     200
  0     200

Was haben wir nun gemacht? Von der Basis   haben wir zu der Basis   gewechselt und zu der neuen Basis haben wir das entsprechende Tableau bestimmt.

 


         


 


 


 

Zweite IterationBearbeiten

 

 

 

Heuristik: Ersetze einen Basisvektor durch den Nichtbasisvektor, der den größten Zugewinn für die Zielfunktion bringt.

 

 

 

 

Hier wird die Zeile von   betrachtet und die Spalte von  . Der alte Wert ist 2600. Der Koeffizient von   in der Zielfunktion ist 1 und der Zugewinn durch   ist 200.

 

 

 

 

 

Hier wird die Zeile von   betrachtet und die Spalte von  . Der alte Wert ist 2600. Der Koeffizient von   in der Zielfunktion ist 6 und der Zugewinn durch   ist 1800. Nun wird   durch   ersetzt.

Update des TableausBearbeiten

Der neue Wert von   wird nun berechnet.

 . Dieser Wert wird nun eingesetzt.

 

 

 

Das neue Tableau sieht nun so aus:

      b
z 1     -3100
  1 0 0 200
  0 1 0 300
  1     0
  0     100

Dritte IterationBearbeiten

 

 

Ersetze einen Basisvektor durch den Nichtbasisvektor, der den größten Zugewinn für die Zielfunktion bringt. Es müssen nur Terme aus z mit positivem Vorzeichen betrachtet werden, d.h. es bleibt nur noch   übrig.

 

 

 

 

Update des TableausBearbeiten

Nun wird   durch   ersetzt.

 . Dieser Wert wird nun eingesetzt.

 

 

Das neue Tableau sieht nun so aus:

      b
z -1 -1 -4 -3100
  -1     200
  0 1 0 300
  1     0
  0     100

Die Zielfunktion kann nun nicht weiter verbessert werden. Unser x ist nun (0,300,100) und unser z ist 3100.

AnalyseBearbeiten

Das Simplex-Verfahren löst ein lineares Programm in endlich vielen Schritten oder stellt seine Unlösbarkeit oder Unbeschränktheit fest. Im Worstcare hat es eine exponentielle Laufzeit, unabhängig von den gewählten Pivotregeln. In der Praxis ist es sehr effizient.