A szimplex tábla Végződtetés: optimalitás és nem korlátos megoldások A szimplex algoritmus lépései A degeneráció fogalma Komplexitás (elméleti és gyakorlati) A szimplex tábla Példák megoldása a szimplex tábla segítségével p 1
Emlékeztető: a szimplex algoritmus Tekintsük az alábbi lineáris programot z = max c T x st Ax = b x 0 ahol A egy m n mátrix, rang(a) = rang(a,b) = m, b egy oszlop m-vektor, x pedig oszlop n-vektor Legyen B egy bázis, ekkor az oszlopok megfelelő átrendezése után A = [B N] [ ] [ ] xb B 1 b Legyen továbbá x = = x N 0 tartozó bázismegoldás és tegyük fel, hogy ez a bázismegoldás megengedett (B 1 b 0) a B bázishoz p 2
Emlékeztető: a szimplex algoritmus A lineáris program a nembázisváltozók terében max z 0 + j N z jx j st x B = b j N y jx j x B,x N 0 ahol N a nembázisváltozók halmaza b = B 1 b y j a B 1 N mátrix j-edik nembázisváltozóhoz tartozó oszlopa, y j = B 1 a j z 0 = c B T B 1 b = c B T b z j a c N T c B T B 1 N sorvektor j-edik nembázis-változóhoz tartozó eleme p 3
Emlékeztető: a szimplex algoritmus A pivotszabályok x k beléphet a bázisba, ha z k > 0 x r kilép a bázisból: r = argmin i {1,,m} { bi y ik : y ik > 0 A (primál) szimplex algoritmus optimalitási feltétele: az x megengedett bázismegoldás optimális megoldás, ha j N : z j 0 Az alábbiakban feltesszük, hogy a megengedett bázismegoldásunk nem degenerált, vagyis b > 0 A degenerált esettel később foglalkozunk } p 4
Nemkorlátos megoldás Adva egy x megengedett bázismegoldás, legyen x k egy nembázisváltozó úgy, hogy z k > 0 max st x = [ ] xb x N z 0 +z k x ] k [ b = 0 x 0 +[ yk e k ]x k Ekkor x k növelésével nő a célfüggvény értéke Tudjuk, hogy x k -t addig növelhetjük, amíg valamelyik bázisváltozó negatívvá nem válik x k min i B { bi y ik : y ik > 0 } p 5
Nemkorlátos megoldás A korlát csak akkor van értelmezve, ha van i bázisváltozó, melyre y ik > 0 Ha ilyen nincs, tehát y k 0, akkor nincs bázisváltozó, amely blokkolná x k növelését Tétel: Egy max{c T x : Ax = b,x 0} lineáris program megoldása nemkorlátos, ha van x megengedett bázismegoldás és x k nembázisváltozó, hogy z k > 0 és y k 0 [ ] yk Biz: a d = e k a megengedett tartomány egy iránya, és a x = x+dλ,λ 0 pontok mind megengedett megoldások Ilyenkor minden K > 0-hoz létezik λ > 0, hogy c T x = z 0 +λz k > K p 6
Nemkorlátos megoldás: példa Adott kanonikus formában a következő lineáris program max x 1 + 3x 2 st x 1 2x 2 4 x 1 + x 2 3 x 1, x 2 0 Az x 3 [ és x 4 slack-változók] bevezetésével [ ] 1 2 1 0 4 A =, b =, c 1 1 0 1 3 T = [1 3 0 0] [ ] 2 1 Tekintsük a B = [a 2 a 3 ] = [ ] [ ][ ] x2 0 1 4 x B = = = x 3 1 2 3 bázist 1 0 [ ] 3, x 10 N = [ x1 x 4 ] = [ ] 0 0 p 7
Nemkorlátos megoldás: példa A szokásos paraméterek z 0 = c B T b = 9 [ ] 1 1 c T N c T B B 1 N = [1 0] [3 0] = [4 3] 1 2 [ ][ ] [ ] 0 1 1 0 1 1 B 1 N = = 1 2 1 1 1 2 A lineáris program az aktuális bázisban max 9+4x 1 3x [ ] [ ] [ ] 4 x2 3 1 st = x x 3 10 1 1 x 1,x 2,x 3,x 4 0 [ ] 1 x 2 4 p 8
Nemkorlátos megoldás: példa A nemkorlátosságot okozó sugár x = x 1 x 2 x 3 x 4 = 0 3 10 0 + 1 1 1 λ, λ 0 0 A célfüggvény értéke 9+4λ Az eredeti változók terében [ x1 x 2 ] = [ 0 3 ] [ 1 + 1 ] λ : λ > 0 6 4 2 x 2 [0 3] T d -x 1 +x 2 3 2 4 6 x 1-2x 2 4 x p 9 1
A szimplex algoritmus Tekintsük az alábbi lineáris programot z = max c T x st Ax = b x 0 ahol A egy m n mátrix, rang(a) = rang(a,b) = m, b egy oszlop m-vektor, x pedig oszlop n-vektor Tegyük fel, hogy egyik bázismegoldás sem degenerált A szimplex algoritmus egy iteratív eljárás a fenti lineáris program megoldására, amely nem igényel mást csak lineáris egyenletrendszerek megoldását és egyszerű lineáris algebrai műveleteket Inicializálás: keressünk egy kezdeti megengedett bázismegoldást és a hozzá tartozó B bázist p 10
A szimplex algoritmus: fő ciklus 1 Oldjuk meg a Bx B = b egyenletrendszert A megoldás egyedi: x B = B 1 b = b és legyen x N = 0 2 Oldjuk meg a w T B = c B T egyenletrendszert A megoldás egyedi: w T = c B T B 1 Számoljuk ki minden j nembázisváltozóra z j = c j w T a j értékét és legyen a belépő (nembázis)változó k = argmax j N 3 Ha z k 0, akkor vége: z j [ ] xb x N (Dantzig s pivot rule) optimális megoldás és a célfüggvény értéke c B T x B Ellenkező esetben tovább a következő lépésre p 11
A szimplex algoritmus: fő ciklus 4 Oldjuk meg a By k = a k egyenletrendszert A megoldás egyedi: y k = B 1 a k Ha y k 0, akkor vége: a lineáris program nemkorlátos a ] ] } {[ b yk +[ λ : λ 0 sugár mentén 0 e k Ellenkező esetben tovább a következő lépésre 5 Pivot: x k belép a bázisba és x Br kilép a bázisból, ahol { } bi r = argmin : y ik > 0 i {1,,m} y ik (minimum ratio test) Frissítsük a B bázist (a Br -t felváltja a k ), N-t, c B T -t és c N T -t és vissza az első lépésre p 12
A szimplex algoritmus: komplexitás Tétel: Ha egyik lépésben sem talál degenerált bázismegoldást, akkor a szimplex algoritmus véges számú lépésben megtalálja az optimális megoldást vagy megmutatja, hogy a lineáris program nemkorlátos Biz: minden iterációban három eset egyike következhet be ha z k 0, akkor kiszállunk az optimális megoldással ha z k > 0 de y k 0, akkor megállapítjuk, hogy a lineáris program nemkorlátos és kiszállunk ha z k > 0 és y k 0, akkor a bázisból kilép egy r változó úgy, hogy b r > 0 és a célfüggvény értéke z k br > 0 határozottan nő Tehát minden iterációs lépésben vagy kiszállunk, vagy egy új, az előzőtől eltérő megengedett bázismegoldást adunk A bázismegoldások száma véges p 13
Degeneráció Ha x k belép a bázisba, x Br kilép onnan és y k 0 Pivot előtt z 0 x B x k = 0 Pivot után z 0 +z k br x B b r y k x k = b r A bázismegoldás degenerált, ha x B = b 0 Ekkor van x Br = b r = 0, és ha ráadásul > 0, akkor { } x Br bi blokkolja x k növelését: min : y ik > 0 = 0 y i {1,,m} y ik rk A pivot utánx k = b r = 0 és a célfüggvény értéke maradz 0 A pivot során ugyanabban az extrém pontban maradtunk p 14
Degeneráció Cycling: egyik degenerált bázismegoldásról a másikra ugorva körbejárunk ugyanazon az extrém ponton Ilyenkor a véges futás nem garantált A gyakorlatban nagyon ritkán fordul elő Pivotszabály: mivel a bázisba belépő változó kiválasztása tetszőleges ha z j > 0, különböző szabályok adhatók Dantzig s pivot rule: k = argmaxz j j N Mohó (greedy): válasszuk azt a változót, ami a legnagyobb növekedést okozza a célfüggvényben Bland s pivoting rule: válasszuk a legkisebb indexű nembázisváltozót amire z j > 0 és ha több bázisváltozóra is x Br = 0, válasszuk a legkisebb indexűt kilépő változónak Bland szabályának használatával elkerülhető a cycling p 15
A szimplex algoritmus: komplexitás A Dantzig pivot szabály használata esetén a szimplex algoritmus komplexitása exponenciális lehet Legrosszabb esetben végig kell nézni akár ( n m bázismegoldást Adható példa, ahol ez bekövetkezik Szinte minden determinisztikus szabályhoz van ellenpélda Nyitott kérdés: van-e determinisztikus szabály, amely az exponenciálisnál jobb futási időt ad? A gyakorlatban a szimplex algoritmus nagyon gyors Általában m és n függvényében lineáris számú pivot elég Léteznek garantáltan polinom-idejű belsőpontos megoldó algoritmusok (Hacsián-féle ellipszoid módszer, Karmarkar algoritmusa) ) p 16
A szimplex tábla A szimplex algoritmus jelen formájában minden lépésben három lineáris egyenletrendszer megoldását igényli A szimplex táblák használatával ez elkerülhető Tegyük fel, hogy van egy kezdeti megengedett bázismegoldásunk B bázissal Legyen z egy új változó, ami célfüggvény aktuális értékét jelöli z = c B T x B +c N T x N Tekintsük a lineáris programot az alábbi formában max z st z c T B x B c T N x N = 0 Bx B + Nx N = b x B, x N 0 p 17
A szimplex tábla A x N megadja x B -t: x B +B 1 Nx N = B 1 b És tudjuk, hogy z = c B T B 1 b+(c N T c B T B 1 N)x N z +0x B +(c B T B 1 N c N T )x N = c B T B 1 b A nembázisváltozók terében max z st z + 0x B + (c T B B 1 N c T N )x N = c T B B 1 b I m x B + B 1 Nx N = B 1 b x B, x N 0 A fenti alak táblázat formájában z x B x N RHS z 1 0 c B T B 1 N c N T c B T B 1 b 0 sor x B 0 I m B 1 N B 1 b 1m sorok p 18
A szimplex tábla z x B1 x Bm x N1 x Nn m RHS z 1 0 0 z 1 z n m z 0 x B1 0 1 0 y 1,1 y 1,n m b1 x Bm 0 0 1 y m,1 y m,n m bm x B1,x B2,,x Bm sorra a bázisváltozók x N1,x N2,,x Nn m sorra a nembázisváltozók z j a c B T B 1 N c N T sorvektor j nembázisváltozóhoz tartozó eleme és z 0 = c B T B 1 b bi a B 1 b oszlopvektor i-edik eleme y ij a B 1 N mátrix (i,j) eleme p 19
A szimplex tábla: belépő változó A célfüggvény alakja a korábbiakhoz képest megváltozott z + j N z j x j = z 0 A célfüggvény értékének növeléséhez olyan k nembázisváltozót kell keresnünk, amelyre z k < 0 A belépő változó a tábla nulladik sorából kiolvasható A bázisba belép k nembázisváltozó k = argmin j N z j Optimalitási feltétel z k = min j N z j 0 p 20
A szimplex tábla: kilépő változó A bázisváltozók kifejezése a szimplex táblában I m x B +B 1 Nx N = B 1 b A x Bi bázisváltozó a tábla i-edik sorából olvasható ki x Bi + j N y ij x j = b i x Bi értéke x k növelésére y ik x k -val csökken nemkorlátos a megoldás, ha nincs pozitív elem k oszlopában: y k 0 a bázisból kilépő r változó r = argmin i {1,,m} { } bi : y ik > 0 y ik p 21
A szimplex tábla: pivot Tegyük fel, hogy k belép a bázisba r kilép A pivot előtt a szimplex tábla z x B1 x Br x Bm x Nj x Nk RHS z 1 0 0 0 z j z k z 0 x B1 0 1 0 0 y 1j y 1k b1 x Br 0 0 1 0 y rj br x Bm 0 0 0 1 y mj y mk bm p 22
A szimplex tábla: pivot 1 Osszuk el az r-edik sort -val z x B1 x Br x Bm x Nj x Nk RHS z 1 0 0 0 z j z k z 0 x B1 0 1 0 0 y 1j y 1k b1 x Br 0 0 1 0 y rj 1 br x Bm 0 0 0 1 y mj y mk bm p 23
A szimplex tábla: pivot 2 Minden i = 1,2,,m : i r sorra vonjuk ki a sorból az r-edik sor y ik -szorosát z x B1 x Br x Bm x Nj x Nk RHS z 1 0 0 0 z j z k z 0 x B1 0 1 y 1k 0 y 1j y 1k y rj 0 br b1 y 1k x Br 0 0 1 0 y rj 1 br x Bm 0 0 y mk 1 y mj y mk y rj 0 bm y mk br p 24
A szimplex tábla: pivot 3 Vonjuk ki a nulladik sorból az r-edik sor z k -szorosát z x B1 x Br x Bm x Nj x Nk RHS z 1 0 z k y 1k 0 x B1 0 1 y 1k 0 y 1j y 1k y rj z j z k y rj 0 z 0 z k br 0 br b1 y 1k x k 0 0 1 0 y rj 1 br x Bm 0 0 y mk 1 y mj y mk y rj 0 bm y mk br x k belépett a bázisba, ezért az új szimplex táblában az r-edik sor most már x k -t adja meg x Br kilépett a bázisból és nembázis változó lett p 25
A szimplex tábla: példa Tekintsük a lineáris programot max x 1 x 2 + 4x 3 st x 1 + x 2 + 2x 3 9 x 1 + x 2 x 3 2 x 1 + x 2 + x 3 4 x 1, x 2, x 3 0 Slack-változókkal standard alakra hozva max x 1 x 2 + 4x 3 + 0x 4 + 0x 5 + 0x 6 st x 1 + x 2 + 2x 3 + x 4 = 9 x 1 + x 2 x 3 + x 5 = 2 x 1 + x 2 + x 3 + x 6 = 4 x 1, x 2, x 3, x 4, x 5, x 6 0 p 26
A szimplex tábla: példa Először kezdeti bázist kell választanunk: álljon ez a slack-változók oszlopaiból Kanonikus alakban adott max{c T x : Ax b,x 0} lineáris program esetén a bevezetendő x s slack-változók oszlopai mindig bázist alkotnak: max{c T x : Ax+Ix s = b,x 0,x s 0} és B = I mindig nemszinguláris Ha ráadásul b 0, akkor ez a bázis egyben megengedett is, hiszen b = B 1 b = b 0 Ellenkező esetben a kezdeti bázis keresése speciális lépéseket igényel (itt nem tárgyaljuk) Legyen tehát B = [a 4 a 5 a 6 ] A nulladik sor: c B T B 1 N c N T = c N T mert az x s bázisváltozókhoz a célfüggvényben 0 együttható áll és így c B T = 0, és hasonlóan z 0 = c B T B 1 b = 0 p 27
A szimplex tábla: példa A kezdeti szimplex tábla (a nulladik sort invertálni kell!) z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 1 1 4 0 0 0 0 x 4 0 1 1 2 1 0 0 9 x 5 0 1 1 1 0 1 0 2 x 6 0 1 1 1 0 0 1 4 A bázis nem optimális mert z 3 = 4 A belépő változó x 3 mert z 3 = min j N z j = 4 Nem kapunk nemkorlátos eredményt, mert van y i3 > 0 A kilépő változó x 6 mert b6 y 63 = min{ 9 2,4} = 4 p 28
A szimplex tábla: példa 1 Osszuk el az x 6 sorát y 63 -mal, ami most 1 a tábla sorait most a hozzá tartozó bázisváltozó indexével azonosítjuk, és nem a sorindexszel ezért az x 6 sorának elemei rendre az y 6j és b 6 indexet kapják hasonlóan a többi sorra z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 1 1 4 0 0 0 0 x 4 0 1 1 2 1 0 0 9 x 5 0 1 1 1 0 1 0 2 x 6 0 1 1 1 0 0 1 4 p 29
A szimplex tábla: példa 2 Az x 4 és x 5 sorából vonjuk ki az x 6 sorának y 4k - illetve y 5k -szorosát az x 4 sorából az x 6 sorának kétszeresét kell kivonni lényeg az y 43 és az y 53 kinullázása z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 1 1 4 0 0 0 0 x 4 0 3 1 0 1 0 2 1 x 5 0 0 2 0 0 1 1 6 x 6 0 1 1 1 0 0 1 4 p 30
A szimplex tábla: példa 3 Vonjuk ki a nulladik sorból az x 6 sorának z 3 -szorosát most az x 6 sorának négyszeresét kell hozzáadni a nulladik sorhoz lényeg a z 3 kinullázása z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 3 5 0 0 0 4 16 x 4 0 3 1 0 1 0 2 1 x 5 0 0 2 0 0 1 1 6 x 3 0 1 1 1 0 0 1 4 Pivot vége, új szimplex bázist kaptunk (B = {x 3,x 4,x 5 }) A szimplex tábla utolsó sora most már az x 3 -hoz tartozik, érdemes ezt a szimplex táblán jelölni p 31
A szimplex tábla: példa A szimplex tábla használata a nulladik sor utolsó eleme mindig a célfüggvény az aktuális bázishoz tartozó értéke, most z = 16 a bázisváltozók értékeit kiolvashatjuk az RHS oszlopból (ha negatív elem van benne, elrontottunk valamit) ha a nulladik sor nem tartalmaz negatív elemet, optimális a bázis z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 3 5 0 0 0 4 16 x 4 0 3 1 0 1 0 2 1 x 5 0 0 2 0 0 1 1 6 x 3 0 1 1 1 0 0 1 4 p 32
A szimplex tábla: példa Az aktuális tábla nem optimális, mert z 1 = 3 Tehát belép a bázisba x 1 Van kilépő változó (vagyis nem kaptunk nemkorlátos megoldást), mert y 41 > 0 Kilép x 4 z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 3 5 0 0 0 4 16 x 4 0 3 1 0 1 0 2 1 x 5 0 0 2 0 0 1 1 6 x 3 0 1 1 1 0 0 1 4 Osztjuk x 4 sorát 3-mal, a kapott sort hozzáadjuk x 3 sorához egyszer, és a nulladik sorhoz háromszor p 33
A szimplex tábla: példa z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 0 4 0 1 0 2 17 x 1 0 1 1 1 0 0 2 1 3 3 3 3 x 5 0 0 2 0 0 1 1 6 A bázis optimális 2 1 1 x 3 0 0 1 0 3 3 3 Az optimális megoldáshoz tartozó célfüggvény értéke a nulladik sor utolsó eleme: z = 17 A bázisváltozók értékei az RHS oszlopból: 13 3 [ x1 x 5 x 3 ] = [ 1 3 6 13 3 Az optimális megoldás: x T = [ 1 3 0 13 3 ] p 34 ]
A szimplex tábla: példa Oldjuk meg a következő lineáris programot max 2x 1 + x 2 + 3x 3 st 2x 1 3x 2 + x 3 0 2x 2 + 4x 3 1 x 1 x 2 3 x 1, x 2, x 3 0 Slack-változókkal standard alakra hozva max 2x 1 + x 2 + 3x 3 + 0x 4 + 0x 5 + 0x 6 st 2x 1 3x 2 + x 3 + x 4 = 0 2x 2 + 4x 3 + x 5 = 1 x 1 x 2 + x 6 = 3 x 1, x 2, x 3, x 4, x 5, x 6 0 p 35
A szimplex tábla: példa A kezdeti szimplex tábla z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 2 1 3 0 0 0 0 x 4 0 2 3 1 1 0 0 0 x 5 0 0 2 4 0 1 0 1 x 6 0 1 1 0 0 0 1 3 x 3 belép a bázisba, x 4 kilép x 4 sorának négyszeresét kivonjuk x 5 sorából, és a háromszorosát hozzáadjuk a nulladik sorhoz Degenerált pivot, mert b 4 = 0 A pivot után ugyanabban az extrém pontban fogunk maradni p 36
A szimplex tábla: példa A pivot utáni szimplex tábla z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 8 10 0 3 0 0 0 x 3 0 2 3 1 1 0 0 0 x 5 0 8 10 0 4 1 0 1 x 6 0 1 1 0 0 0 1 3 x 2 belép a bázisba, x 5 kilép p 37
A szimplex tábla: példa Az új szimplex tábla z x 1 x 2 x 3 x 4 x 5 x 6 RHS z 1 0 0 0 1 1 0 1 x 3 0 2 5 0 1 1 5 x 2 0 4 5 1 0 2 5 x 6 0 9 5 0 0 2 5 A bázisba belépő változó x 4 3 3 0 10 10 1 1 0 10 10 1 31 1 10 10 Azonban x 4 oszlopában minden elem negatív Vagyis x 4 szabadon növelhető anélkül, hogy bármely változó értéke negatívvá válna, miközben a célfüggvény értéke szintén nő Nincs korlátos megoldás p 38
A szimplex tábla: példa A szimplex táblából kiolvasható a nemkorlátosságot okozó x+λd : λ 0 félegyenes egyenlete x az aktuális bázismegoldás d előáll a szimplex tábla x 4 nembázisváltozóhoz tartozó oszlopából x = x 1 x 2 x 3 x 4 x 5 x 6 Az indexelésre és az előjelekre vigyázni kell = 0 1 10 3 10 0 0 31 10 + 0 2 5 1 5 1 0 2 5 λ, λ 0 p 39