Kurs:Algorithmen und Datenstrukturen/Vorlesung/Simplex Verfahren: Unterschied zwischen den Versionen

Aus testwiki
Zur Navigation springen Zur Suche springen
 
(kein Unterschied)

Aktuelle Version vom 11. Februar 2017, 14:55 Uhr

Vorlage:Navigationsleiste/Algorithmen und Datenstrukturen


Simplex Verfahren

Auf dieser Seite wird das Simplex Verfahren behandelt.

Idee

Simplex Verfahren
Simplex Verfahren

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 Grundlagen

Seien v1,...,vnm.

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

Matrix lineares Optimierungsproblem

maxx1+6x2

x1+s1=200

x2+s2=300

x1+x2+s3=400

A=(101000101011001), b=(200300400)

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ösung

Auf dieser Seite werden die Basen und Basislösungen beim Simplex Verfahren behandelt. Gegeben ist ein lineares Gleichungssystem ax=b,Amxn,bm,Rang(A)=m.

Dann bilden m lineare unabhängige Spaltenvektoren aus A eine Basis von A. Diese wird mit AB bezeichnet. B enthält die Indices der Basisvektoren. N enthält die Indices der Nichtbasisvektoren. Die Basislösung xBvonAB ist gegeben durch: ABxB=b dies gilt genau dann wenn: xB=AB1b. AB ist eine zulässige Basis von A, wenn gilt AB1b0. Wenn (XBXN)mitXN=0 ist, dann ist es eine zulässige Basislösung von A.

Beispiel 1

(101000101011001)(x1x2s1s2s3)=(200300400)

B1={3,4,5}N1={1,2}

AB1=(100010001) XB1=(s1s2s3)

AB1XB1=b(100010001)(s1s2s3)=(200300400)s1=200,s2=300;s3=400

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 2

(101000101011001)(x1x2s1s2s3)=(200300400)

B2={1,4,5}N2={2,3}

AB2=(100010101) XB2=(x1s2s3)

AB2XB2=b(100010101)(x1s2s3)=(200300400)x1=200,s2=300;s3=200

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 A

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

AB xB xN x
AB1=(100010001) (s1,s2,s3)=(200,300,400) (x1,x2) (0,0,200,300,400)
AB2=(100010101) (x1,s2,s3)=(200,300,200) (x2,s1) (200,0,0,300,200)
AB3=(100011110) (x1,x2,s2)=(200,200,100) (s1,s3) (200,200,000,100,0)
AB4=(101010110) (x1,x2,s1)=(100,300,100) (s2,s3) (100,300,100,0,0)
AB5=(010100101) (x2,s1,s3)=(300,200,100) (x1,s3) (0,300,200,0,100)
b=(200300400)

Basen von A- mit unzulässigen Lösung

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

AB xB xN x
AB6=(100010111) (x1,x2,s3)=(100,300,100) (s1,s2) (200,300,0,0,100)
AB7=(010101100) (x2,s1,s2)=(400,200,100) (x1,s3) (0,400,200,100,0)
AB8=(110001100) (x2,s1,s2)=(400,200,300) (x1,x3) (200,200,000,100,0)
AB4=(101010110) (x1,x2,s1)=(100,300,100) (s2,s3) (100,300,100,0,0)
AB5=(010100101) (x2,s1,s3)=(300,200,100) (x1,x3) (0,400,200,300,0)

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

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

Charakterisierung von Polyederecken

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

Sei das System Ax=b,x0 gegeben, Rang(A)=m<n. 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 AB gefunden und daraus das Starttableau konstruiert.
  2. Anschließend wir eine neue zulässige Basis AB aus AB konstruiert, so dass die zulässige Basislösung von AB besser ist, als die von AB. Das Tableau wird nun aktualisiert.
  3. Wenn es keine bessere Basislösung mehr gibt, dann ist die letzte optimal.

Ein Tableau entspricht dem Gleichungssystem (cTA)x=(cTxb) mit maxcTx,Ax=bundx0.

TB ist ein Simplextableau zur Basis AB


TB=(cNTcBTAB1ANcBTAB1bAB1ANAB1b) mit A=(ABAN),x=(xBxN),cT=(cNTcBT)

Beispiel Gewinnmaximierung

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

Zielfunktion:

maxx1+6x2+13x3.


Nebenbedingungen:

x1200

x2300

x1+x2+x3400

x2+3x3600

x1,x2,x30

Das System lässt sich umschreiben zu:

x1+6x2+13x3=z

x1+s1=200

x2+s2=300

x1+x2+x3+s3=400

x2+3x3+s4=600

x1,x2,x3,s1,s2,s3,s40

A=(1001000010010011100100130001),b=(200300400600)

Initialisierung

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

AB=(s1 s2 s3 s4)=(1000010000100001)=AB1

AN=(x1 x2 x3)=(100010111013) b=(200300400600)

cT=(16130000)=(cNTcBT)

AB1AN=(100010111013) AB1b=(200300400600)

Starttableau

x1 x2 x3 b
z 1 6 13 0
s1 1 0 0 200
s2 0 1 0 300
s3 1 1 1 400
s4 0 1 3 600

x1,x2,x3 sind Nichtbasiselemente, Z ist die Zielfunktion und s1,s2,s3,s4 sind Basiselemente. Dabei sind die blau hinterlegten Felder das cNTcNTAB1AN, die gelb hinterlegten Felder stellen den Teil von AB1AN dar und die grünen Felder sind AB1b. Das nicht markierte Feld ist dabei der negative Zielfunktionswert cBTAB1b.

Update eines Tableau

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: E={j|cxxj>0}. Wenn E= dann breche ab und gebe x zurück. Die Menge der Basisvektoren, die getauscht werden können, ist über ihre j-te Komponente bestimmt: Lj={i|xji>0}. Wenn Lj= für alle jE dann ist das LP unbeschränkt, da die Zielfunktion cTx durch xj unbeschränkt wächst.

Optimierungsphase

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

Beispiel
x1 x2 x3 b
z 1 6 13 0
s1 1 0 0 200
s2 0 1 0 300
s3 1 1 1 400
s4 0 1 3 600

E={j|cxxj>0}={1,2,3}{x1,x2,x3}

L1={i|x1i>0}={1,3}{s1,s3}

L2={i|x2i>0}={2,3,4}{s2,s3,s4}

L3={i|x3i>0}={3,4}{s3,s4}

Heuristik für die Auswahl der Tauschvektoren

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 Iteration

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

x1

0s1=200x1

0s3=400x1

x1=min(200,400)=200z=200

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

x2

0s2=300x2

0s3=400x2

0s4=600x2

x2=min(300,400,600)=300z=1800

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

x3

0s3=400x3

0s4=6003x3

x3=min(400,200)=200z=2600

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

Update des Tableaus

Der neue Wert von x3 wird nun berechnet.

s4=600x23x3x3=200x23s43.

Dieser Wert wird nun eingesetzt.

z=x1+6x2+13(200x23s43)=x1+53x2133s4+2600

s3=400x1x2(200x23s43)=200x123x2+s43

x3=200x23s43

Das neue Tableau sieht nun so aus:

x1 x2 s4 b
z 1 53 133 -2600
s1 1 0 0 200
s2 0 1 0 300
s3 1 23 13 200
x3 0 13 13 200

Was haben wir nun gemacht? Von der Basis B=(s1,s2,s3,s4) haben wir zu der Basis B=(s1,s2,s3,x3) gewechselt und zu der neuen Basis haben wir das entsprechende Tableau bestimmt.

TB=(cNTcBTAB1ANcBTAB1bAB1ANAB1b)


AB=(1000010000110003) AB1=(100001000011300013) AN=(100010110011) AB1AN=(1000101231301313) AB1b=(200300200200)


cT=(16000013)=(cNTcBT)


cNTcBTAB1AN=(153133)


cBTAB1b=2600

Zweite Iteration

E={j|cxxj>0}={1,2}{x1,x2}

L1={i|x1i>0}={1,3}{s1,s3}

L2={i|x2i>0}={2,3,4}{s2,s3,x3}

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

x1

0s1=200x1

0s3=200x1

x1=200z=2800

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

x2

0s2=300x2

0s2=20023x2

0x2=20013x2

x2=min(300,600)=300z=4400

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

Update des Tableaus

Der neue Wert von x2 wird nun berechnet.

s2=300x2x2=300s2. Dieser Wert wird nun eingesetzt.

z=x1+53(300s2)133s4+2600=x153s2133s4+3100

s3=200x1+23(300s2)+s43=x1+23s2+s43

x3=20013(300s2)s43=100+13s2s43

Das neue Tableau sieht nun so aus:

x1 s2 s4 b
z 1 53 133 -3100
s1 1 0 0 200
x2 0 1 0 300
s3 1 23 13 0
x3 0 13 13 100

Dritte Iteration

E={j|cxxj>0}={1}{x1}

L1={i|x1i>0}={1,3}{s1,s3}

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 x1 übrig.

x1

0s1=200x1

0s3=0x1

x1=min(200,0)z=3100

Update des Tableaus

Nun wird s3 durch x1 ersetzt.

s3=x1+23s2+s43x1=s3+23s2+s43. Dieser Wert wird nun eingesetzt.

z=s3+23s2+s4353s2133s4+3100=s3s24s4+3100

s1=200(s323s2s43)=200+s3+23s2+s43

Das neue Tableau sieht nun so aus:

s3 s2 s4 b
z -1 -1 -4 -3100
s1 -1 23 13 200
x2 0 1 0 300
x1 1 23 13 0
x3 0 13 13 100

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

Analyse

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.


Discussion