TW2020 Optimalisering Hoorcollege 3 Leo van Iersel Technische Universiteit Delft 21 september 2016 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 1 / 36
LP: Lineair Programmeren min x 1 2 x 2 x 3 o.d.v. x 1 + 2 x 2 2 x 1 + x 2 + x 3 2 x 1, x 2, x 3 0 Het toegelaten gebied van een LP probleem wordt beschreven door een polyeder: x 3 (0,0,2) (0,1,1) x 2 (0,1,0) (2,0,0) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 2 / 36
Vorige week Een LP in standaard vorm: met A een m n matrix. min c T x o.d.v. Ax = b x 0 Een basis is een verzameling van lineair onafhankelijke kolommen van A. De bijbehorende variabelen zijn de basisvariabelen. In de bijbehorende basisoplossing zijn alle niet-basisvariabelen 0 en worden de basisvariabelen dan bepaald door het stelsel Ax = b. Een toegelaten basisoplossing of basic feasible solution (bfs) is een basisoplossing waarin de basisvariabelen niet-negatief zijn. Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 3 / 36
Vorige week x 3 (0,0,2) (0,1,1) x 2 (0,1,0) (2,0,0) x 1 Elk LP met een optimale oplossing heeft een optimale oplossing die zich in een hoepkunt van het polyeder bevindt. De hoekpunten van het polyeder komen overeen met de toegelaten basisoplossingen. De simplex methode gaat van bfs naar bfs zodanig dat de doelfunctiewaarde niet slechter wordt. Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 4 / 36
Deze week Oplossen van LP problemen met de simplex methode. 1. Hoe maken we een transitie van een gegeven bfs naar een volgende bfs? (Een pivot.) 2. Hoe kiezen we een goede zoekrichting? (De pivotkolom.) 3. Hoe weten we of een bfs optimaal is? 4. Hoe vinden we een start bfs? Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 5 / 36
1. Hoe maken we een transitie van een gegeven bfs naar een volgende bfs? (Een pivot.) Voorbeeld (1) max z = 2 x 1 + x 2 o.d.v. 4 x 1 3 x 2 6 (1) 3 x 1 + 4 x 2 12 (2) x 1, x 2 0 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 6 / 36
1. Hoe maken we een transitie van een gegeven bfs naar een volgende bfs? (Een pivot.) Voorbeeld (1) In standaardvorm: max z = 2 x 1 + x 2 o.d.v. 4 x 1 3 x 2 + s 1 = 6 3 x 1 + 4 x 2 + s 2 = 12 x 1, x 2, s 1, s 2 0 Wat is een voordehandliggende start bfs? Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 7 / 36
1. Hoe maken we een transitie van een gegeven bfs naar een volgende bfs? (Een pivot.) Voorbeeld (1) In standaardvorm: max z = 2 x 1 + x 2 o.d.v. 4 x 1 3 x 2 + s 1 = 6 3 x 1 + 4 x 2 + s 2 = 12 x 1, x 2, s 1, s 2 0 Stel we brengen x 1 in de basis. Hoeveel kan de waarde van x 1 verhoogd worden zodat de oplossing toegelaten blijft? De andere niet-basisvariabelen blijven 0. Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 8 / 36
Voorbeeld (1) max z = 2 x 1 + x 2 o.d.v. 4 x 1 3 x 2 6 (1) 3 x 1 + 4 x 2 12 (2) x 1, x 2 0 x 2 (1) F C (0,0) (2) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 9 / 36
Voorbeeld (1) max z = 2 x 1 + x 2 o.d.v. 4 x 1 3 x 2 6 (1) 3 x 1 + 4 x 2 12 (2) x 1, x 2 0 x 2 (1) F C (0,0) (3/2,0) (2) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 10 / 36
Neem aan A = [B N] met B de kolommen van de basisvariabelen en N de kolommen van de niet-basisvariabelen. Dan is Bx B + Nx N = b maar de niet-basisvariabelen in x N zijn allemaal 0, dus Bx B = b x B = B 1 b [ ] [ ] xb b Als B = I en b 0 dan is = een bfs. 0 x N De simplex methode zorgt er voor dat in elke iteratie B = I en b 0. Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 11 / 36
Als variabele x j de basis in wordt gebracht, dan is kolom j de pivotkolom. Variabele x j kan verhoogd worden totdat een basisvariabele nul wordt. Één zo n basisvariabele x l verlaat de basis. Rij l is dan de pivotrij. pivotkolom x 1 +... + ā 1j x j +... = b 1 x 2 +... + ā 2j x j +... = b 2............ x l +... + ā lj x j +... = b l pivotrij............ x m +... + ā mj x j +... = b m basisvariabelen niet-basisvariabelen ā lj is het pivotelement Hier zijn ā ij en b i de huidige waarden (na eventuele eerdere pivots). Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 12 / 36
Minimum ratio test: als kolom j de pivotkolom is, dan is de pivotrij de rij l waarvoor { } b l b i = min ā ij > 0. ā lj i ā ij Pivot: pas elementaire rijoperaties toe zodanig dat de kolommen van de basisvariabelen weer een identiteitsmatrix vormen: 1 deel de pivotrij door het pivotelement (rij l) := (rij l)/ā lj 2 maak daarna de andere elementen in de pivotkolom gelijk aan nul: (rij i) := (rij i) ā ij (rij l) i l Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 13 / 36
2. Hoe kiezen we de pivotkolom? Druk de doelfunctie uit in niet-basisvariabelen: z = n c j x j j=1 z = A j / B c j x j met behulp van elementaire rijoperaties. De c j heten de gereduceerde doelstellingscoëfficiënten of de relatieve kosten. Vraag Wat is het effect op de waarde van z als we de waarde van een niet-basisvariabele x j verhogen, als de relatieve kosten c j negatief zijn? Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 14 / 36
2. Hoe kiezen we de pivotkolom? Voor een minimaliseringsprobleem: Kies een kolom j met c j < 0. Makkelijkste selectiecriterium: kies j waarvoor c j < 0 minimaal. Voor een maximaliseringsprobleem: Kies een kolom j met c j > 0. Makkelijkste selectiecriterium: kies j waarvoor c j > 0 maximaal. Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 15 / 36
Voorbeeld (1) max z = 2 x 1 + x 2 o.d.v. 4 x 1 3 x 2 6 (1) 3 x 1 + 4 x 2 12 (2) x 1, x 2 0 x 2 (1) F C (0,0) (3/2,0) (2) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 16 / 36
Voorbeeld (1) max z = 2 x 1 + x 2 o.d.v. 4 x 1 3 x 2 6 (1) 3 x 1 + 4 x 2 12 (2) x 1, x 2 0 x 2 (1) F C (12/5,6/5) (0,0) (3/2,0) (2) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 17 / 36
3. Hoe weten we of een bfs optimaal is? Stelling (2.8) Als x een bfs is van een minimaliseringsprobleem met c j 0 voor alle j, dan is x optimaal. Als x een bfs is van een maximaliseringsprobleem met c j 0 voor alle j, dan is x optimaal. Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 18 / 36
Samenvatting Simplex Algoritme voor minimaliseringsprobleem: 1 Als c j 0 voor alle j dan is de huidige bfs optimaal. Stop! 2 Kies intredende variabele x j met c j < 0. 3 Als ā ij 0 voor alle i dan is het probleem onbegrensd. Stop! 4 Kies uittredende variabele x i waarvoor b i ā i j { b i = min i ā ij } ā ij > 0. 5 Pas elementaire rijoperaties toe zodanig dat kolom j een 1 krijgt in rij i en verder alleen 0 en. Ga naar (1). Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 19 / 36
Voorbeeld (2) min x 1 2 x 2 x 3 o.d.v. x 1 + 2 x 2 2 x 1 + x 2 + x 3 2 x 1, x 2, x 3 0 x 3 (0,0,2) (0,1,1) x 2 (0,1,0) (2,0,0) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 20 / 36
Voorbeeld (2) min z = x 1 2 x 2 x 3 o.d.v. x 1 + 2 x 2 + s 1 = 2 x 1 + x 2 + x 3 + s 2 = 2 x 1, x 2, x 3, s 1, s 2 0 De doelstellingsfunctie schrijven we om naar z x 1 2x 2 x 3 = 0 en we stellen het Simplextableaux op: basis b x 1 x 2 x 3 s 1 s 2 s 1 2 1 2 0 1 0 s 2 2 1 1 1 0 1 z 0-1 -2-1 0 0 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 21 / 36
De start bfs. basis b x1 x 2 x 3 s 1 s 2 s 1 2 1 2 0 1 0 s 2 2 1 1 1 0 1 z 0-1 -2-1 0 0 x 3 (0,0,2) (0,1,1) (0,0,0) x 2 (0,1,0) (2,0,0) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 22 / 36
x 1 komt basis in voor s 1. basis b x 1 x 2 x 3 s 1 s 2 x 1 2 1 2 0 1 0 s 2 0 0-1 1-1 1 z 2 0 0-1 1 0 x 3 (0,0,2) (0,1,1) x 2 (0,1,0) (2,0,0) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 23 / 36
x 3 komt basis in voor s 2. basis b x 1 x 2 x 3 s 1 s 2 x 1 2 1 2 0 1 0 x 3 0 0-1 1-1 1 z 2 0-1 0 0 1 x 3 (0,0,2) (0,1,1) x 2 (0,1,0) (2,0,0) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 24 / 36
x 2 komt in basis voor x 1. Optimale oplossing! basis b x 1 x 2 x 3 s 1 s 2 x 2 1 1/2 1 0 1/2 0 x 3 1 1/2 0 1-1/2 1 z 3 1/2 0 0 1/2 1 x 3 (0,0,2) (0,1,1) x 2 (0,1,0) (2,0,0) x 1 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 25 / 36
Samenvatting Simplex Algoritme voor maximaliseringsprobleem: 1 Als c j 0 voor alle j dan is de huidige bfs optimaal. Stop! 2 Kies intredende variabele x j met c j > 0. 3 Als ā ij 0 voor alle i dan is het probleem onbegrensd. Stop! 4 Kies uittredende variabele x i waarvoor b i ā i j { b i = min i ā ij } ā ij > 0. 5 Pas elementaire rijoperaties toe zodanig dat kolom j een 1 krijgt in rij i en verder alleen 0 en. Ga naar (1). Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 26 / 36
4. Hoe vinden we een start bfs? Als het oorspronkelijke probleem alleen restricties heeft: min c T x o.d.v. Ax b x 0 Dan krijgt elke restrictie een slackvariabele: min c T x o.d.v. Ax + Is = b x, s 0 En is een start bfs makkelijk te vinden: x = 0 s = b niet-basisvariabelen basisvariabelen Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 27 / 36
Als het oorspronkelijke probleem = en/of restricties heeft: Vervang elke restrictie n j=1 a ijx j b i door n j=1 a ijx j + s i = b i met s i 0 een slackvariabele. Vervang elke restrictie n j=1 a ijx j b i door n j=1 a ijx j s i + x a i = b i met s i 0 een surplusvariabele en x a i 0 een kunstmatige variabele. Vervang elke restrictie n j=1 a ijx j = b i door n j=1 a ijx j +x a i = b i met x a i 0 een kunstmatige variabele. Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 28 / 36
Twee fasen methode: Eerste fase: los het LP op met als doelfunctie min w = i x a i Laat w de optimale waarde van w zijn. 1 Als w = 0 en geen kunstmatige variabelen in de basis dan is een bfs van het originele probleem gevonden. Verwijder kolommen van kunstmatige variabelen. Zet originele doelfunctie terug en druk uit in niet-basisvariabelen. Ga verder met Simplex methode (dit is de tweede fase). 2 Als w = 0 en kunstmatige variabele xi a zit in de basis (met waarde 0). Haal x a i uit de basis door een pivot, met het pivotelement een willekeurig niet-nul element in de rij van xi a. Herhaal totdat we in geval (1) terecht komen. 3 Als w > 0 dan heeft het oorsponkelijke probleem geen toegelaten oplossing. Stop! Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 29 / 36
Voorbeeld (3) min 3 x 1 + x 2 o.d.v. x 1 + 2 x 2 1 x 1 + x 2 = 1 x 1, x 2 0 Eerste fase probleem: min x a 2 o.d.v. x 1 + 2 x 2 + s 1 = 1 x 1 + x 2 + x a 2 = 1 x 1, x 2 0 Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 30 / 36
Voorbeeld (3) Eerste fase probleem: Simplextableau: min x a 2 o.d.v. x 1 + 2 x 2 + s 1 = 1 x 1 + x 2 + x a 2 = 1 x 1, x 2 0 basis b x 1 x 2 s 1 x a 2 s 1 1 1 2 1 0 x a 2 1 1 1 0 1 w 0 0 0 0 1 Let op! De doelfunctie is nog niet uitgedrukt in niet-basisvariabelen. Dit moeten we eerst doen! Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 31 / 36
Voorbeeld (3) Nu is de doelfunctie uitgedrukt in niet-basisvariabelen: basis b x 1 x 2 s 1 x2 a s 1 1 1 2 1 0 x2 a 1 1 1 0 1 w -1-1 -1 0 0 We kunnen x 1 of x 2 in de basis brengen. Kies bijvoorbeeld x 1 : basis b x 1 x 2 s 1 x a 2 x 1 1 1 2 1 0 x a 2 0 0-1 -1 1 w 0 0 1 1 0 We hebben een optimale oplossing van de eerste fase met w = 0. Let op! Er zit nog een kunstmatige variabele in de basis! Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 32 / 36
Voorbeeld (3) We hebben de kunstmatige variabele uit de basis gehaald: basis b x1 x 2 s 1 x a 2 x 1 1 1 0-1 2 x 2 0 0 1 1-1 w 0 0 0 0 1 Tweede fase: verwijder de kolom van de kunstmatige variabele en zet de originele doelfunctie terug: basis b x 1 x 2 s 1 x 1 1 1 0-1 x 2 0 0 1 1 z 0 3 1 0 Let op! We moeten eerst de doelfunctie uitdrukken in niet-basisvariabelen! Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 33 / 36
Voorbeeld (3) Druk de doelfunctie uit in niet-basisvariabelen: basis b x1 x 2 s 1 x 1 1 1 0-1 x 2 0 0 1 1 z -3 0 0 2 Ga verder met de Simplexmethode. In dit geval zijn alle c j niet-negatief. De huidige oplossing is dus optimaal. Optimale oplossing: met waarde z = 3. x B = [ x1 x 2 ] = [ ] 1 0 x N = [ s 1 ] = [ 0 ] Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 34 / 36
Cycling Het Simplex algoritme zoals beschreven kan oneindig lang doorgaan. Dit gebeurt als we na een aantal pivots weer bij een eerder beschouwde bfs uitkomen. Dit heet cycling. Bland s anti-cycling regels: Als meerdere intredende variabelen mogelijk zijn (met c j < 0), kies die met de kleinste index. Als meerdere uittredende variabelen mogelijk zijn (met dezelfde ratio in de minimum ratio test), kies die met de kleinste index. Stelling (2.9) De Simplex methode met Bland s anti-cycling regels termineert na een eindig aantal stappen. Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 35 / 36
Simplex Method Tool http://www.zweigmedia.com/realworld/simplex.html Leo van Iersel (TUD) TW2020 Optimalisering 21 september 2016 36 / 36