Mat-2.34 Lineaarinen ohjelmointi..27 Luento 5 Simplexin implementaatioita (kirja 3.2-3.5) Lineaarinen ohjelmointi - Syksy 27 /
Luentorunko (/2) Simplexin implementaatiot Naiivi Revised Full tableau Syklisyys Degeneroituvuuden vaikutus Leksikograafinen sääntö landin sääntö Lineaarinen ohjelmointi - Syksy 27 / 2
Luentorunko (2/2) Lähtöratkaisun löytäminen Aputehtävä Kaksivaiheinen Simplex Iso M -menetelmä Lineaarinen ohjelmointi - Syksy 27 / 3
Simplexin implementaatiot Muistin virkistykseksi: Redusoitu kustannus: Kantasuunta: c d c c j j A j ' A j Askelpituus: θ* x { } i min i d i di < Lineaarinen ohjelmointi - Syksy 27 / 4
Simplexin implementaatiot Erot implementaatioissa: Kuinka A j lasketaan Informaation säilytys iteraatiolta toiselle vaikutus laskentatehokkuuteen Lineaarinen ohjelmointi - Syksy 27 / 5
Simplexin implementaatiot: Naiivi Edellisellä luennolla esitetty Ei iteraatiolta toiselle säilytettävää informaatiota: Redusoidut kustannukset ja kerta alusta asti uudelleen Laskenta-aika O ( m 3 + mn ) lasketaan joka Sopii kuitenkin hyvin tehtäville, joilla erikoisrakenne (esim. verkkotehtävät) Lineaarinen ohjelmointi - Syksy 27 / 6
Simplexin implementaatiot: Revised (/5) Peräkkäisten iteraatioiden kantamatriisit ovat yhtä saraketta vaille samat [ A... A ] ( ) ( m) + [ A... A A A,... A ] ( ) ( l ) j ( l ) ( m) Käytetään :tä hyödyksi :n laskemisessa Lineaarinen ohjelmointi - Syksy 27 / 7
Simplexin implementaatiot: Revised (2/5) Yksinkertainen rivioperaatio (elementary row operation) matriisille: Lisätään rivin j β-monikerta riviin i Ekvivalenttia matriisilla Q kertomisen kanssa s.e. Q I+ D, [ D [ D Usea rivioperaatio kerrotaan vasemmalta matriisilla ] β, ij kl ij ], ij kl Q Q Q k jos k i ja l j muuten Q Q k L 2 Lineaarinen ohjelmointi - Syksy 27 / 8
Simplexin implementaatiot: Revised (3/5) I [ A,.., A,.., A ] ( ) j ( m) Koska ja, pätee: e Le u e l l+ Le m e i, missä on i:s yksikkövektori ja u A j ( d ) Lineaarinen ohjelmointi - Syksy 27 / 9
Simplexin implementaatiot: Revised (4/5) Muutetaan :n sarake u sarakkeeksi yksinkertaisilla rivioperaatioilla u / u Jos Jaa l. rivi :lla lisää l. rivi -kertaisena i. riviin Merkitään tätä operaatiojonoa Q:lla Tällöin: i l u l i l e l Q I - Q Käänteismatriisin päivitys saadaan siis hoideltua em. yksinkertaisin rivioperaatioin Lineaarinen ohjelmointi - Syksy 27 /
Simplexin implementaatiot: Revised (5/5) Revised Simplex: Sama kuin naiivi, mutta lisätään 6. askel ( :n päivitys): 6. Muodostetaan m x (m+)-matriisi [ u], ja muunnetaan sen viimeinen sarake rivioperaatioin vektoriksi e l. Tuloksen ensimmäiset m saraketta ovat matriisi. Muisti + laskenta-aika 2 O ( m + mn) Lineaarinen ohjelmointi - Syksy 27 /
Simplexin implementaatiot: Full tableau (/8) Ylläpidetään ja päivitetään täyttä taulukkoa Muisti + laskenta-aika O ( mn+ mn) -Kustannus ko. kannalla Redusoidut kustannukset Nollas rivi m riviä - c ' - b - b c' c ' - A - A Kantamuuttujat Kantasuunnat u - d Lineaarinen ohjelmointi - Syksy 27 / 2
Simplexin implementaatiot: Full tableau (2/8) Taulukon päivitys tapahtuu samalla tavalla kuin Revised Simplexissä Muuten selkeä, ks. nollannen rivin tapaus kirjasta (s. 99-) Terminologiaa: Pivot-sarake vastaa kantaan astuvaa muuttujaa Pivot-rivi vastaa kannasta poistuvaa muuttujaa Pivot-alkio on pivot-sarakkeen ja -rivin kiinnittämä alkio Lineaarinen ohjelmointi - Syksy 27 / 3
Simplexin implementaatiot: Full tableau (3/8). Taulukko vastaten kantaa ja ratkaisua x 2. Redusoidut kustannukset nollannella rivillä Jos kaikki ei-negatiivisia, ollaan optimissa. Muuten valitaan pivot-sarake j s.e. 3. Tarkastellaan pivot-sarakkeen alkioita Jos mikään niistä ei positiivinen, optimikustannus on -. 4. Valitaan pivot-rivi pivot-sarakkeen positiivisista alkioista Valitaan rivi l jolle suhde x / u, u > on pienin ( l ) 5. Lisätään jokaiseen taulukon riviin l. rivin sellainen monikerta, että pivot-sarake muuntuu l. yksikkövektoriksi c j ( l ) < ( l ) Lineaarinen ohjelmointi - Syksy 27 / 4
Simplexin implementaatiot: Kirjan esimerkki 3.5: Full tableau (4/8) min s.e. x x 2x 2 2 x + 2x + 2x 2 3 2x + x + 2x 2 3 2x + 2x + x 2 3 x x, x, 2 3 3 2 2 2 s.e. min x x 2x 2 2 x + 2x + 2x + x 2 3 4 2x + x + 2x + x 2 3 5 2x + 2x + x + x 2 3 6 x,..., x 6 3 2 2 2 Aloitusratkaisuksi x(,,,2,2,2) eli c c ' x ja c c x ( x, x, x ) 4 5 6 Lineaarinen ohjelmointi - Syksy 27 / 5
Simplexin implementaatiot: Full tableau (5/8) x 3 A(,,) (,,) 2/2 2/ 2 x 4 x 5 x 6 2 2 2 x x 2 x 3 - - 2-2 2 2 2 2 2 2 x 4 x 5 x 6 *- *-.5 *5 /2 D(,,) E(4,4,4) C(,,) 2/2 x x 2 x 2 Lineaarinen ohjelmointi - Syksy 27 / 6
Simplexin implementaatiot: Full tableau (6/8) x 3 A(,,) (,,) x 4 x x 6 x x 2-7.5.5 x 3-2 - x 4 x 5 5 -.5.5 - x 6 D(,,) E(4,4,4) C(,,) x x 2 Lineaarinen ohjelmointi - Syksy 27 / 7
Simplexin implementaatiot: Full tableau (7/8) x 3 A(,,) (,,) x 3 x x 6 2 x x 2-4.5-2.5 x 3 x 4 2 - x 5 4 -.5 -.5 x 6 D(,,) E(4,4,4) C(,,) x x 2 Lineaarinen ohjelmointi - Syksy 27 / 8
Simplexin implementaatiot: Full tableau (8/8) x 3 A(,,) (,,) x 3 x x 2 36 4 4 4 x x 2 x 3 x 4 3.6.4 -.6.4 x 5.6.4.4 -.6 x 6.6 -.6.4.4 D(,,) E(4,4,4) C(,,) x x 2 Lineaarinen ohjelmointi - Syksy 27 / 9
Syklisyys: Degeneroituvuuden vaikutus (/2) Degeneroitunut ratkaisu: yksi tai useampi kantamuuttuja nollassa liikaa rajoitteita aktiivisina Sopiva kantaan astuvan muuttujan valinta -> nollaa suuremmalla askeleella ulos alueesta d x x 6 x 4 x 5 x 3 Kantamuuttujat ja x x 6 Valitaan kantaan astuvaksi -> nollaa suurempi askel vastaavaan suuntaan d johtaa välittömästi ulos alueesta x S x 2 ysteemianalyysin Lineaarinen ohjelmointi - Syksy 27 / 2
Syklisyys: Degeneroituvuuden vaikutus (2/2) Tyydytään nolla-askeleeseen: ratkaisu pysyy samana mutta kanta vaihtuu Kannan vaihdoksilla saatetaan kuitenkin päätyä alkuperäiseen ratkaisuun, eli algoritmi jää pyörimään paikoillaan Ilmiötä kutsutaan syklisyydeksi Ilmiö voidaan estää valitsemalla kantaan astuva ja siitä poistuva muuttuja sopivasti Lineaarinen ohjelmointi - Syksy 27 / 2
Syklisyys: Leksikograafinen sääntö Sanotaan, että u on leksikograafisesti pienempi kuin v ( u< L v), jos vektorin v-u ensimmäinen nollasta poikkeava komponentti on positiivinen (,3,5,7) < L (,4,,) Leksikograafinen sääntö: pivot-rivi l valitaan siten, että se on kandidaateista ( x / u, u > l l l minimissä) leksikograafisesti pienin Lineaarinen ohjelmointi - Syksy 27 / 22
Syklisyys: landin sääntö landin sääntö eli pienimmän indeksin sääntö: Valitaan kantaan astuva muuttuja kandidaateista ( c j < ) siten, että muuttujan indeksi on pienin (eniten vasemmalla) Valitaan kannasta poistuva muuttuja kandidaateista ( x / u, u > l l l minimissä) siten, että muuttujan indeksi on pienin (ylimpänä) Lineaarinen ohjelmointi - Syksy 27 / 23
Syklisyys Leksikograafinen ja landin sääntö estävät syklisyyden ja terminoivat algoritmin äärellisessä ajassa Muita sääntöjä: Kantaan astuvaksi muuttujaksi se, jolla pienin redusoitu kustannus Kantaan astuvaksi muuttujaksi se, joka vaikuttaa kustannusmuutokseen eniten (askelpituus huomioidaan) Ei takuita terminoitumisesta Lineaarinen ohjelmointi - Syksy 27 / 24
Lähtöratkaisun löytäminen Simplex vaatii lähtötilanteeksi käyvän kantaratkaisun Tehtävän rajoitteet muodossa Ax b, b Ax + s b x, s b min s.e. x 5x x x + s 2 x + s 3 2 2 + x + s 4 2 3 x, s, 2, 2, 3 2 ( x, x ) 2 s, s, s ) ( 2 3 (,) (2,3,4) Lineaarinen ohjelmointi - Syksy 27 / 25
Lähtöratkaisun löytäminen: Aputehtävä (/3) Rajoitteet standardimuodossa ( b ) -> aputehtävä keinotekoisilla muuttujilla y y, y,..., y )' min c x s.e Axb x ( 2 m min y + y +... + 2 s.e. Ax+yb x y Jos aputehtävän optimikustannus on nolla, pätee y -> vastaava x käypä ratkaisu alkuperäiselle tehtävälle! Jos kannassa vain x-muuttujia, tiputetaan taulukosta y-muuttujia vastaavat sarakkeet ja käytetään kantaa alkuperäisen tehtävän alustukseen y m Lineaarinen ohjelmointi - Syksy 27 / 26
Lähtöratkaisun löytäminen: Aputehtävä (2/3) Kantaan saattaa jäädä y-muuttujia, vaikka niiden arvo onkin degeneroitunut ratkaisu Tarkastellaan matriisin A täysiasteisuutta: - A Jos matriisin (alkuperäisiä muuttujia vastaavat sarakkeet) rivin l alkiot ovat kaikki nollia, on ko. rajoite lineaarisesti riippuvainen muista eli redundantti Redundantti rajoite ja vastaava kantamuuttuja voidaan turhina poistaa Lineaarinen ohjelmointi - Syksy 27 / 27
Lähtöratkaisun löytäminen: Aputehtävä (3/3) Jos nollariviä ei löydy, on matriisi A täysiasteinen Tällöin siirrytään kannanvaihdoksilla y:istä x- muuttujiin Täysiasteisesta m x n matriisista A, m n, löytyy m kpl lineaarisesti riippumattomia vektoreita kanta u l Kantaa vaihdettaessa voi olla negatiivinen, sillä degeneroituvuuden takia askelpituus θ * on joka tapauksessa nolla Menettelyllä ajetaan keinotekoiset muuttujat ulos kannasta Lineaarinen ohjelmointi - Syksy 27 / 28
Vaihe Lähtöratkaisun löytäminen: Kaksivaiheinen Simplex (/8). Rajoitteet muodossa Ax b, x ( b ) 2. Tarvittaessa ratkaistaan aputehtävä keinotekoisin muuttujin y 3. Aputehtävän optimikustannus positiivinen -> alkuperäinen tehtävä ei käypä 4. Kustannus nolla: Jos kannassa vain alkuperäisiä muuttujia, poistetaan taulukosta y-muuttujat ja niitä vastaavat sarakkeet ja siirrytään alkuperäiseen tehtävään 5. Kannassa y-muuttujia: tutkitaan matriisia A. Jos rivin l alkiot nollia, poistetaan rivi ja vastaava kantamuuttuja. Jos alkio j poikkeaa nollasta, tuodaan x j kantaan korvaamaan. Jatketaan kunnes kannassa enää x-muuttujia. y (l ) Lineaarinen ohjelmointi - Syksy 27 / 29
Vaihe 2: Lähtöratkaisun löytäminen: Kaksivaiheinen Simplex (2/8). Alkuperäinen kanta ja taulukko vaiheen lopputilanteesta 2. Lasketaan redusoidut kustannukset kannalle käyttäen alkuperäisen tehtävän kustannuksia 3. Sovelletaan Simplexiä alkuperäiseen tehtävään Lineaarinen ohjelmointi - Syksy 27 / 3
Tehtävä: min 2x Lähtöratkaisun löytäminen: Kaksivaiheinen Simplex (3/8) + 3x + 3x + x 2 2 3 4 x + 3x + 4x + x 2 4 5 x + x 3x + x 2 2 4 5 x 4x + 3x 2 3 x,..., x 5 x 2 2 5 Aputehtävä: min x 4x + 3x + y 2 3 3 Käypä ratkaisu aputehtävälle x(,,,,,2,2,), x c (,,) c ' x 5, c (,, 3,, 2,,,) y + y + 2 x + 3x + 4x + x + y 2 4 5 x + x 3x + x + y 2 2 4 5 2 y 3 2 2 x i, y i ( y, y, y ) 2 3 Lineaarinen ohjelmointi - Syksy 27 / 3
Lähtöratkaisun löytäminen: Kaksivaiheinen Simplex (4/8) y y 2 y 3-5 2 2 x x x 2 3 4 - - -3 x 5 x y - -2 3 4 2-3 - -4 3 y y 2 3 /3 Lineaarinen ohjelmointi - Syksy 27 / 32
Lähtöratkaisun löytäminen: Kaksivaiheinen Simplex (5/8) y y 2 x 3-4 2 2 /3 x x x x 2 3 4 5 x y -2-5 - -2 3 4 2-3 -/3-4/3 y y 2 3 /3 *2 *(-) Lineaarinen ohjelmointi - Syksy 27 / 33
Lähtöratkaisun löytäminen: Kaksivaiheinen Simplex (6/8) Kustannus nolla, mutta kannassa -> ajetaan pois tuomalla kantaan x 5 y 2 x 3 2 /3 x 4 x x x y 3 x x 2 4 5 -/3 3 - -4/3 /3 Huomaa: askelpituus nolla, joten :n sallittua olla negatiivinen y 2 7 4-7 u l 2 - y y 2 3 *(4/7) /(-7) Lineaarinen ohjelmointi - Syksy 27 / 34
x 5 x 4 x 3 2 /3 x x x y 2 3 x x 4 5 7/7 3/7 /7 /7 -/3-4/3 y2 y3 4/7 -/7 /3 Kannassa enää x-muuttujia! Alkuperäistä tehtävää voidaan alkaa ratkaista tiputtamalla yo. taulukosta y-muuttujia vastaavat sarakkeet Lisäksi tulee laskea alkuperäistä kustannusfunktiota vastaavat redusoidut kustannukset Lineaarinen ohjelmointi - Syksy 27 / 35
tehtävän optimi! Lähtöratkaisun löytäminen: Kaksivaiheinen Simplex (8/8) x 5 x 4 x 3 Kustannus c ' c' c 3 2 /3 x x x x 2 3 x4 5 3 -/3 82/7 7/7 /7-4/3 Red. kustannukset ei-negatiivisia -> myös alkuperäisen c' (2,3,3,, 2) c ' ' A (3,82/ 7,,,) ( 2,,3) Lineaarinen ohjelmointi - Syksy 27 / 36
Lähtöratkaisun löytäminen: Iso M -menetelmä Vaiheet voidaan yhdistää käyttämällä kustannusfunktiota c' x+ M missä M aina suurempi kuin siihen verrattava luku Ratkaistaan tehtävä Simplexillä tavalliseen tapaan; lähtöratkaisu (x,y)(,b) Jos alkuperäisellä tehtävällä on käypä ratkaisu, y:t menevät nollaan -> kustannusfunktio palautuu c x:ksi m i y i, Lineaarinen ohjelmointi - Syksy 27 / 37