Mat-2.3140 Lineaarinen ohjelmointi 4.10.2007 Luento 4 Ekstreemipisteiden optimaalisuus ja Simplex (kirja 2.4-2.6, 3.1-3.2) Lineaarinen ohjelmointi - Syksy 2007 / 1
Luentorunko Degeneroituvuus Ekstreemipisteiden olemassaolo ja optimaalisuus Yhteenveto tähän asti Simplex Periaate Kantasuunnat Redusoidut kustannukset Optimaalisuusehdot Menetelmä Lineaarinen ohjelmointi - Syksy 2007 / 2
Degeneroituvuus (1/3) Edellinen luento: ratkaisun kiinnittää n kpl lineearisesti riippumattomia aktiivisia rajoitteita Kantaratkaisussa aktiivisia rajoitteita saattaa olla enemmän kuin n kpl usea tapa valita näistä n lineaarisesti riippumatonta, eli kannan valinta ei 1- käs! Tällöin sanotaan, että kantaratkaisu on degeneroitunut Standardimuotoisessa tehtävässä = yksi tai useampi kantamuuttuja nollassa Lineaarinen ohjelmointi - Syksy 2007 / 3
Degeneroituvuus (2/3) Esimerkki kakkutehtävästä Kylän leipomusvirasto päättää, ettei päivittäin leivottavien kinuskikakkujen lukumäärä saa ylittää suklaakakkujen määrää enemmällä kuin kolmella kakulla. Leipomo lisää siis rajoitteen x1 + x2+ x6 = 3 LP-tehtäväänsä: x 6 x 4 x 5 x 1 x 3 x 2 Nyt kantaratkaisussa D aktiivisina kolme rajoitetta x1 = x4 = x6, eli D on degeneroitunut (3>2) Kolme eri kantaa johtavat samaan ratkaisuun! Mitkä? Lineaarinen ohjelmointi - Syksy 2007 / 4
Degeneroituvuus (3/3) Degeneroituvuus on Simplexin kannalta kiusallinen ongelma Joakin degeneroituvuutta aiheuttavaa rajoitetta hieman poikkeuttamalla voidaan ongelmasta päästä eroon Esim. kinuskikakkujen määrä saa ylittää suklaakakkujen määrän enintään 2,9:llä... 3 2,9 Lineaarinen ohjelmointi - Syksy 2007 / 5
Ekstreemipisteiden olemassaolo (1/2) Teoreema 2.6: { i=1,...,m} n Ol. P= x R a i' x bi, seuraavat ovat ekvivalentteja: a) P:llä on ainakin yksi ekstreemipiste b) P ei sisällä suoraa a 1,...,a m c) Joukosta löytyy n kpl lineaarisesti riippumattomia vektoreita. Tällöin Lineaarinen ohjelmointi - Syksy 2007 / 6
Ekstreemipisteiden olemassaolo (2/2) Rajoitettu monitahokas ei sisällä suoraa Positiivisten akselien rajaama alue ei sisällä suoraa Siispä rajoitetulle monitahokkaalle ja monitahokkaalle standardimuodossa löytyy ainakin yksi käypä kantaratkaisu eli ekstreemipiste! Lineaarinen ohjelmointi - Syksy 2007 / 7
Ekstreemipisteiden optimaalisuus Seurauslause 2.3 Olkoon tehtävänä minimoida kustannusta c x monitahokkaassa P. Tällöin joko optimikustannus on - tai P:llä on olemassa ekstreemipiste, joka on optimaalinen Lineaarinen ohjelmointi - Syksy 2007 / 8
Yhteenveto tähän asti (1/2) LP-tehtävän ratkaisusta: Jos käypä joukko on epätyhjä ja rajoitettu, optimaalinen ratkaisu on olemassa ja löytyy ekstreemipisteestä Jos käypä joukko on rajoittamaton i) Optimi on olemassa ja löytyy ekstreempisteestä ii) Optimi on olemassa, mutta ei ekstreemipistettä (ei voi käydä standarimuodossa) iii) Optimaalinen kustannus on Lineaarinen ohjelmointi - Syksy 2007 / 9
Yhteenveto tähän asti (2/2) Kantaratkaisu saatiin kiinnittämällä kaksi lineaarisesti riippumatonta rajoitetta aktiivisiksi Rajoitteita vastaavat muuttujat nollassa loput muuttujat kannassa Kantamatriisi = kantamuuttujia vastavaavat sarakkeet matriisista A x 2 x 4 x 5 x 1 x 3 x 2 x x 1 3 = x5 x1,x2, x Aktiiviset rajoitteet Kannassa loput muuttujat 4 Lineaarinen ohjelmointi - Syksy 2007 / 10
Simplex: periaate (1/3) Standardimuotoisen tehtävän ratkaisu löytyy siis aina ekstreemipisteestä käydään ne kaikki läpi ja valitaan paras? Ekstreemipisteiden lkm on äärellinen, mutta voi kuitenkin kasvaa eksponentiaalisesti rajoitteiden lkm:n kanssa Tarvitaan menetelmä, joka siirtyy ekstreemipisteestä toiseen vain ratkaisun parantuessa Lineaarinen ohjelmointi - Syksy 2007 / 11
Simplex: periaate (2/3) Konveksin funktion lokaali minimi on konveksissa joukossa myös globaali Monitahokas on konveksi joukko, ja kustannusfunktio lineaarisena myös konveksi Riittää siis tutkia ratkaisun lähiympäristöä jos kustannus ei parane, ollaan lokaalissa eli globaalissa optimissa. Tehtävän ratkaisu löytyy aina kulmapisteestä - rajoitutaan tutkimaan liikkumista alueen reunoja pitkin kulmasta toiseen Lineaarinen ohjelmointi - Syksy 2007 / 12
Simplex: periaate (3/3) Simplex: 1) Etsitään mikä tahansa käypä kantaratkaisu 2) Siirrytään sellaiseen vierekkäiseen käypään kantaratkaisuun, joka antaa paremman arvon kustannukselle. Jatketaan tätä, kunnes parannusta ei enää tapahdu, ja ollaan optimissa. x 2 (0,0), kustannus 0 (2,0), kustannus -30 c ' x= 15x1+ 10x (2,2), kustannus -50, optimi (1,3), kustannus -45 x 1 Lineaarinen ohjelmointi - Syksy 2007 / 13 2
Simplex: kantasuunnat (1/4) Simplexissä liikutaan käyvän alueen reunoja pitkin Kulmapisteessä aktiivisia rajoitteita vastaavat muuttujat (siis ei-kantamuuttujat) nollassa poistuttaessa jokin x j näistä kasvaa (astuu kantaan) muiden pysyessä nollassa Kulmapisteestä lähdetään siis suuntaan d, jossa d j =1 ja d i kaikille muille eikantamuuttujien indekseille i x 2 x 1 x 4 x 2 x 5 x 3 Aktiivisina rajoitteet x 2. Lähdetään kasvattamaan x1 :ä, joten d1=1 ja d 2. x 1 x 1 Lineaarinen ohjelmointi - Syksy 2007 / 14
Simplex: kantasuunnat (2/4) Kantamuuttujia vastaa suunta = d,..., d. Jotta pysyttäisiin käyvässä alueessa, kun suuntaan d on liikuttu θ :n verran, tulee toteutua A ( x+θd) = b. Koska x on käypä (Ax=b), tarkoittaa edellinen Ad=0 Siis: 0 kääntyvä, eli j:s kantasuunta ( ) x d ( 1) ( m) n m = Ad = A d = A d + A = d + i i i= 1 i= 1 d = 1 A j A ( i) ( i) j j Lineaarinen ohjelmointi - Syksy 2007 / 15
Simplex: kantasuunnat (3/4) Jos lähtöpiste x ei ole degeneroitunut, toteutuvat suunnassa d myös muuttujien ei-negatiivisuusehdot : x 0 Ei-kantamuuttujien kohdalla selvästi, sillä j:s muuttuja kasvaa ja muut pysyvät nollassa Kantamuuttujien kohdalla riittävän pienellä θ x > 0, joten x θd 0 + Lineaarinen ohjelmointi - Syksy 2007 / 16
Simplex: kantasuunnat (4/4) Degeneroituneessa tilanteessa jokin kantamuuttuja on nollassa, eli saatetaan joutua pois käyvästä alueesta x ( ) Jos i, siirtyminen negatiiviseen suuntaan johtaa välittömästi ei-käyvään alueeseen x, Olkoot 1 x 6 eikantamuuttujia. Tuodaan x 1 kantaan, jolloin sitä kasvatetaan pitämällä x 6 nollassa. Tämä suunta vie välittömästi ulos käyvästä alueesta x 4 < 0 ( ) x 6 x 4 x 5 x 1 x 3 d ( i) Lineaarinen ohjelmointi - Syksy 2007 / 17
Simplex: redusoidut kustannukset (1/2) Siirryttäessä yksikön verran suuntaan d, kustannus muuttuu c ' d = c ' d + c Sijoitetaan tähän d :n yhtälö, jolloin saadaan muuttujaa x j vastaava redusoitu kustannus : c j j c j = c j c ' 1 A j Mudostavat vektorin c' = c' c ' 1 A Lineaarinen ohjelmointi - Syksy 2007 / 18
Simplex: redusoidut kustannukset (2/2) Ei-kantamuuttujan tapauksessa kertoo, miten muuttujan x j kantaan tuominen vaikuttaa kustannukseen Kantamuuttujan tapauksessa : c ( i ) = sillä c ( i ) c ' 1 A ( i ) c c Ts. ei hyödytä tuoda kantaan muuttujaa, joka siellä jo on = [ A,..., A ] = ( 1 ) ( m ) c ( i ) c j ' c j e i = c ( i ) ( i ) = 0 Lineaarinen ohjelmointi - Syksy 2007 / 19
Simplex: optimaalisuusehdot x j Muuttuja kannattaa tuoda kantaan, jos se aiheuttaa kustannuksen pienenemisen Optimiratkaisussa tällaista muuttujaa ei löydy Määritelmä 3.3: Kanta on optimaalinen, jos: 1 x = b 0 1 c' = c' c ' A 0 a) (käypyys) b) (ei kustannusta vähentäviä suuntia) Lineaarinen ohjelmointi - Syksy 2007 / 20
Simplex: menetelmä (1/6) Siirtyminen vierekkäiseen ratkaisuun: 1) Kasvatetaan kantaan astuvan, kustannusta pienentävän eikantamuuttujan arvoa 2) Suunta vähentää kustannusta, eli kannattaa siirtyä sitä pitkin niin pitkälle kuin mahdollista, t.s. alueen reunalle 3) Reunalla uusi rajoite aktiiviseksi = vastaava kantamuuttuja nollaksi eli pois kannasta: vierekkäinen ratkaisu! x 2 x 1 x 4 x 5 x 3 x x1 2 Aktiivisina rajoitteet x1 = x2 Tuodaan x 1 kantaan eli kasvatetaan sen arvoa kunnes törmätään alueen reunaan, jossa, siis pois kannasta x3 x3 Lineaarinen ohjelmointi - Syksy 2007 / 21
Simplex: menetelmä (2/6) Etsitään siis sellaista askelpituutta θ *, jolla juuri ja juuri pysytään alueessa: { θ 0 A( x+ θd) = b, x+ 0} θ* = max θd Koska Ad=0, on huolehdittava vain muuttujien einegatiivisuusehdoista Jos d 0, voidaan suuntaan d liikkua mielivaltaisen pitkälle, eli θ* =. Lineaarinen ohjelmointi - Syksy 2007 / 22
Simplex: menetelmä (3/6) Jos < 0 jollakin i, d i x i + θd 0 θ i x d i i Edellisen täytyy toteutua kaikilla i, θ :n arvo on: x { } = i θ* min i d i< 0 di { } < 0, joten suurin Koska ei-kantamuuttujille d i 0, 1, voidaan edellinen mininmointi rajoittaa kantamuuttujia vastaaviin indekseihin 1,..., m. ( ) ( ) d i Lineaarinen ohjelmointi - Syksy 2007 / 23
Simplex: menetelmä (4/6) Muuttujien päivitys: x j : = θ * x ( ) : = x ( ) + θ * d ( ), i=,..., m i i i 1 x ( l) menee nollaksi, eli poistuu kannasta; taas poikkeaa nollasta, eli astuu kantaan Uusi kantamatriisi saadaan korvaamalla :n muuttujaa x ( l) vastaava sarake A ( l ) kantaan otettua muuttujaa vastaavalla sarakkeella. x j x j A j Lineaarinen ohjelmointi - Syksy 2007 / 24
Simplex: menetelmä (5/6) Merkitään selkeyden vuoksi u= d Menetelmä: 1) Aloitetaan jostain käyvästä kantaratkaisusta x ja kantamatriisista 2) Lasketaa redusoidut kustannukset j j j jos kaikki positiivisia, ollaan optimissa. Jos ei, valitaan jokin neg. kustannusta vastaava kantaan astuvaksi u = 1 A j c 3) Lasketaan. Jos kaikki u:n komponentit einegatiivisia, on optimikustannus. x j c = c ' 1 A Lineaarinen ohjelmointi - Syksy 2007 / 25
Simplex: menetelmä (6/6) 4) Jos u:lla pos. komponentteja, lasketaan θ* 5) Edellisen minimoivaa indeksiä ( l ) vastaava muuttuja x ( poistuu kannasta. Uusi kantamatriisi saadaan l ) korvaamalla :n sarake A ( l ) sarakkeella A j. Uudet kantamuuttujien arvot ovat x j : = θ * ja : = x θ * u, i l. Ei-kantamuuttujat nollassa. x ( i ) ( i ) ( i ) x { } ( i ) = min i= 1,...,m u > ( i ) 0 u( i ) Lineaarinen ohjelmointi - Syksy 2007 / 26