Simplex-algoritmi T-6.5 Informaatiotekniikan seminaari..8, Susanna Moisala
Sisältö Simplex-algoritmi Lähtökohdat Miten ongelmasta muodostetaan ns. Simplextaulukko Miten haetaan käypä aloitusratkaisu Mitä pivotointi on ja miten se toimii Artificial variable eli Two-phase metodi Menetelmä, jossa jo aloitusratkaisun etsimisessä käytetään Simplexiä
Simplexin lähtökohta (/) Standardimuotoinen LP: min z=c T x, s.e. Ax = b, x A on mxn kokoinen matriisi, oletus m<=n, rank(a)=m Merkitään: A = [A B A N ], jossa A B on A:n kanta, eli A:n lineaarisesti riippumattomat sarakkeet (m kpl) A N on A:n muut sarakkeet
Simplexin lähtökohta (/) Kantaratkaisu (bs): x=a B - b Käypä kantaratkaisu (bfs): x =A B - b, x LP:tä vastaa polytooppi (käypä alue), jonka kulmapisteissä on käyvät kantaratkaisut Optimiratkaisu on joku käyvistä kantaratkaisuista Tarvitaan äärellinen määrä askelia optimiratkaisun löytämiseksi
Taulukon muodostaminen Min z=c T x, s.e. Ax=b, x ns. Simplex-taulukko Esimerkki z=x +x +x +x 4 +x 5 =x +x +x ratkaisu x - x - x - x4 - x5 - =5x +x +x +x 4 5 4=x +5x +x +x 5 4 5 Huom. Kustannusfunktio muotoon -z=-x -x -x -x 4 -x 5
Käypä aloitusratkaisu Jos alussa Ax b, niin slack-muuttujat muodostavat käyvän aloitusratkaisun (bfs) Ax b -> ylijäämämuuttujat Muuten käypä aloitusratkaisu saadaan esim. Gaussin eliminoinnin avulla Kantasarakkeet muodostavat identiteettimatriisin, lisäksi kantasarakkeiden kustannusfunktion kerroin on nolla Gaussin eliminointi ei toimi aina, koska saatu ratkaisu ei välttämättä ole käypä, tällöin käytetään Two-phase metodia
Aloitusratkaisu slack-muuttujista Esimerkki: z = 5x + 4x 6x + 4x 4 x + x 6 x x, x z = 5x + 4x 6x + 4x + s = 4 x + x + s = 6 x + s = x, x, s, s, s Kannan muodostavat s,s,s Bfs: s =4, s =6, s = (x =, x = => z=) ratkaisu 4 6 x -5 6 x -4 4 s s s
Aloitusratkaisu Gaussin eliminoinnilla Gaussin eliminointi: suoritetaan perus rivioperaatioita, kunnes kantasarakkeet muodostaa identiteettimatriisin ratkaisu 4 x 5 x 5 x x4 x5 Esimerkki: vähennetään rivi rivistä ja rivistä ja sitten vähennetään saadut rivit, ja rivistä ratkaisu -6 x - - x - - x x4 x5
Pivotointi (periaate) Käyvästä kantaratkaisusta bfs x saadaan uusi bfs x pivotoinnilla Pystytään liikkumaan käyvän alueen kärkipisteistä toiseen Kanta siis muuttuu Kantaan tulevalla muuttujalla on z-rivillä itseisarvoltaan suurin negatiivinen kerroin Kannasta lähtevällä muuttujalla on pienin positiivinen ratkaisun ja tulevan muuttujan arvon suhde (ko. muuttujan rivillä) Kantaan tulevan rivin ja kannasta lähtevän sarakkeen risteymässä on pivot-alkio Kun jokaisen muuttujan kerroin -z-rivillä on positiivinen, eli, saatu ratkaisu on optimiratkaisu
Pivotointi - Selitys kaavoilla (/) Käypä kantaratkaisu on muotoa: x =A B - b, x => Sum i= to m (x i A B(i) )=b Mikä tahansa kantaan kuulumaton sarake voidaan esittää kantasarakkeiden lineaarikombinaationa: A N(k) =Sum i= to m (x ik A B(i) ) Kertomalla alempi yhtälö skalaarilla Q> ja vähentämällä se ylemmästä, saadaan: Sum i= to m (x i -Qx ik )A B(i) +QA N(k) =b Q =min t such that Xik> (x i /x ik ), sillä x i -Qx ik >
Pivotointi - Selitys kaavoilla (/) Saatiin siis: Q =min i such that X ik> (x i /x ik ) = x m /x ik (Q on pienin positiivinen ratkaisun ja kantaan tulevan muuttujan (k) arvon suhde, m on vastaavan rivin indeksi) kun i!= m Uusi bfs: x i = x i -Q x ik = Q kun i = m kun i!= m Uusi kanta: A B (i) = A B(i) = A B(k) kun i = m
Pivotointi (esimerkki) Bfs alussa : (z=6) x =, x 4 =, x 5 = ratkaisu x x x x4 x5 Kantaan tuleva: x -z -6 - - Kannasta lähtevä: x Q =/, m= Uusi pivot rivi = (nykyinen pivot rivi) / (pivot alkio) x x4 x5 - - Uusi muu rivi = (nykyinen rivi) (rivin pivot sarakkeen alkio)* (uusi pivot rivi) -z x ratkaisu -9/ / x / / x x / / x4 x5 Uusi bfs: (z=9/) x4 5/ 7/ / x =/, x 4 =5/, x 5 = / x5 / -/ -/
Two-phase metodi (periaate) Lineaarisen optimointitehtävän ratkaiseminen Tapauksiin, joissa aloitusratkaisu ei ole käypä (joku b:n arvo on negatiivinen) Vaiheet:. Haetaan käypä aloitusratkaisu keinotekoisten muuttujien ja Simplex-algoritmin avulla. Ratkaistaan alkuperäinen ongelma Simplexillä käyttäen saatua aloitusratkaisua
Two-phase metodi (/). vaihe: aloitusratkaisun bfs etsiminen Tarvittaessa kerrotaan alkuperäisiä yhtälöitä -:llä, että kaikki ratkaisu-sarakkeen arvot b i Lisätään keinotekoiset muuttujat (artificial variables) x a i Simplex-taulukon vasemmalle: z-rivin arvot nollia, muut identiteettimatriisina Saadaan bfs: x a i =b i z b x a... x a m x A x n
Two-phase metodi (/) Minimoidaan kustannusfunktiota P= Sum i= to m (x a i ) Simplex-algoritmilla Jos P:n minimoinnista seurasi:. Saatiin optimiratkaisu ja P>: bfs:ää alkuperäiseen ongelmaan ei löydy => lopetetaan (jotta bfs löytyisi, täytyy min P, eli keinotekoisten muuttujien summan minimi olla nolla). P meni nollaan ja yksikään x a i ei kuulu kantaan: ratkaisu on alkuperäisen ongelman bfs => jatketaan.vaiheeseen. P meni nollaan, mutta osa x a i:stä kuuluu kantaan nolla tasolla: a basic degenerate feasible solution"
Two-phase metodi (/).vaihe, tapaus (jatkuu) Ajatellaan, että saadun kannan i:s sarake on vastaavan keinotekoisen muuttujan x a i sarake ja x i = Ajetaan keinotekoinen muuttuja x a i pois kannasta pivotoimalla mitä tahansa alkiota x ik!= (koska Q =, kustannus P ei muutu) Toistetaan kunnes saadaan käypä kanta, jossa on alkuperäiset muuttujat => jatketaan.vaiheeseen. vaihe: ratkaistaan alkuperäinen ongelma Simplexalgoritmilla, käyttäen saatua aloitusratkaisua
Yhteenveto Optimiratkaisua etsitään käyvän alueen kulmapisteistä, eli bfs:eistä Aloitusratkaisu bfs saadaan slack-muuttujista, Gaussin eliminoinnilla tai Two-phase metodilla Pivotoinnin avulla voidaan siirtyä yhdestä bfs:stä toiseen, kunnes optimiratkaisu löytyy
Kysymyksiä?