Malliratkaisut Demot 3 7.3.07 Tehtävä Olkoon tilamuuttujat Tällöin saadaan rekursioyhtälö f n (x n ) = max yn {0,} ynwn xn f 0 ( ) = 0. x n = vaiheessa n jäljellä oleva paino, n =,...,N, esine n pakataan y n = 0, esinettä n ei pakata. {y n u n +f n (x n y n w n )}, 0 x n W, n =,...,N Lasketaan sovelluksena tapaus, jossa W = 7 ja N = 4. Seuraavissa taulukoissa kussakin vaiheessa n toinen ja kolmas sarake esittävät lausekkeen y n u n +f n (x n y n w n ) arvoja y:n arvoilla 0 ja. Neljäs ja viides sarake esittävät yhtälöistä () lakettua f:n lauseketta sekä sitä y:n arvoa jolla lauseke y n u n +f n (x n y n w n ) saavuttaa maksiminsa. Otetaan käyttöön myös merkintä x n = x n y n w n. Vaiheessa n = saadaan taulukko Vaiheessa n = saadaan taulukko x y = 0 y = f (x ) y (x ) 0 0 0 0 0 0 0 0 0 0 3 0 0 0 4 0 40 40 0 40 40 6 0 40 40 7 0 40 40 x y = 0 y = f (x ) y (x ) 0 0+0 0 0 0+0 0 0 0+0 +0 3 0+0 +0 4 0+40 +0 40 0 0+40 +0 40 0 6 0+40 +40 7 0+40 +40 ()
Vaiheessa n = 3 saadaan taulukko Vaiheessa n = 4 saadaan taulukko x 3 y 3 = 0 y 3 = f 3 (x 3 ) y 3 (x 3 ) 0 0+0 0 0 0+0 0 0 0+ 0 3 0+ 0+0 0 4 0+40 0+0 40 0 0+40 0+ 40 0 6 0+ 0+ 0 7 0+ 0+40 60 x 4 y 4 = 0 y 4 = f 4 (x 4 ) y 4 (x 4 ) 0 0+0 0 0 0+0 0+0 0 0+ 0+0 0 3 0+0 0+ 4 0+40 0+0 40 0 0+40 0+40 0 6 0+ 0+40 0 7 0+60 0+ 6 Vaiheessa 4 taulukosta nähdään, että suurimmalla sallitulla yhteispainolla W = 7 päätösmuuttujan y 4 arvoksi tulee. Tästä voidaan laskea x 3 :n arvon rekursiokaavalla x 3 = x 4 y 4 w 4. Tätä muuttujan x 3 arvoa voidaan taas käyttää päätösmuuttujan y 3 määrittämiseen vaiheen n = 3 taulukosta. Näin jatkamalla rekursioketjun kulkemista takaperin vaiheeseen n = saadaan y 4 (7) =, x 3 = x 4 y 4 w 4 = 7 = 6 y 3 (6) = 0, x = x 3 y 3 w 3 = 6 0 3 = 6 y (6) =, x = x y w = 6 = 4 y (4) =. Ratkaisu on siis, että kannattaa valita esineet, ja 4, jolloin niistä saatava kokonaishyöty on 6.
Tehtävä i... t s cij j... Kuva : Tehtävän graafi Olkoon kaaren paino c ij 0 suurin sallittu kuorman korkeus tieosuudella (i,j). Etsitään reitti P solmusta s solmuun t siten, että reitin suurin sallittu korkeus pienimmillään olisi mahdollisimman suuri. Kohdefunktioksi saadaan nyt max P min {c ij}, (i,j) P missä käydään läpi kaikki reitit P solmusta s solmuun t. Olkoon y n = suurin sallittu korkeus solmusta s solmuun n. Dynaamisen optimoinnin rekursioyhtälöt ovat y = (solmu s) y j = max i (i,j) E {min {c ij,y i }}, j =,...,t. Tehtävän ratkaisemiseksi tarvittava algoritmi on seuraava: Modifioitu Dijkstran algoritmi Askel 0. Kun lähtösolmu on s, asetetaan, jos i = s v[i] = 0, jos i s. Merkitään kaikkien solmujen korkeudet väliaikaisiksi ja kiinnitetään seuraavaksi solmun p s korkeus. Askel. Merkitään solmu p kiinnitetyksi ja jokaiselle siitä kiinnittämättömään solmuun i lähtevälle kaarelle (p,i) päivitetään suurin sallittu korkeus v[i] max {v[i],min {v[p],c pi }}. Jos v[i]:n arvo muuttui, niin asetetaan d[i] p. 3
Askel. Lopetetaan jos väliaikaisia solmuja ei enää ole. Arvot v[i] ovat suurimmat sallitut korkeudet solmuun i. Askel 3. Kiinnitetään seuraavaksi solmu p, jonka väliaikainen suurin sallittu korkeus on suurin eli v[p] = max{v[i] i väliaikainen} ja palataan Askeleeseen. Tehtävä 3 Muotoillaan demojen tehtävä nopeimman reitin ongelma minimikustannusvirtausongelmaksi suunnatulla verkolla. Kuvaan on piirretty kyseinen graafi, jossa Turku on (tarjonta ), Jyväskylä on (kysyntä ) ja muut solmut ovat kauttakulkusolmuja. Eli nuolet jotka tulevat Turkuun tai lähtevät Jyväskylästä voidaan jättää huomioimatta. Turku, 4, Tampere, 4,, Jyväskylä,, Hämeenlinna Imatra Kuva : Tehtävän 3 graafi Olkoon x ij virtaus nuolella (i,j). Silloin saadaan optimointitehtävä min x +4x 3 +x 3 +x 3 +x +x 34 +x 43 +4x 3 +x 4 s.t. x +x 3 = x 3 +x x x 3 = 0 x 3 +x 34 +x 3 x 3 x 3 x 43 = 0 x 4 +x 43 x 34 = 0 x x 3 x 4 = x ij 0, (i,j) E. () 4
Tehtävää vastaava insidenssimatriisi on solmu (,) (,3) (,3) (3,) (,) (3,4) (4,3) (3,) (4,) + + 0 0 0 0 0 0 0 0 + + 0 0 0 0 3 0 + 0 + + 0 4 0 0 0 0 0 + 0 + 0 0 0 0 0 0 Koska virtausten ylärajat u ij = kaikilla nuolilla (i,j) ja vektorin b = (,0,0,0, ) komponentit ovat kokonaislukuja, niin tehtävällä on kokonaislukuratkaisu. Tämä seuraa luentomonisteen kohdassa.4 esitetyistä perusteluista (ottaen huomioon että u ij = ). Vaihtoehtoinen perustelu sille että tehtävällä on kokonaislukuratkaisu olisi että insidenssimatriisi on unimodulaarinen ja vektorin b komponentit ovat kokonaislukuja. Kuten luentomonisteessa on todettu, tästä seuraa että Simplex-algoritmin tuottamat ratkaisut ovat kokonaislukuja. Tehtävä 4 Ratkaistaan edellisen tehtävän optimointiongelma () kaksivaihemenetelmällä käyttäen luentomonisteen algoritmia.. Lähdetään ratkaisemaan tehtävää käyttäen alkuarvausta x 0 = (0,0,0,0,0,0,0,0,0). Alkuarvaus ei ole sallittu, koska ensimmäinen ja viimeinen rajoiteyhtälö ei toteudu. Tästä johtuen muodostetaan edellisen tehtävän optimointiongelmasta aputehtävä lisäämällä apumuuuttujat x 0 ja x 0. Aputehtävää vastaavassa graafis- 0,, Kuva 3: Aputehtävän 4 graafi sa (kuva 3) on lisätty ylimääräinen 0-solmu, johon on nuoli solmusta ja nuoli solmuun, ja kummankin nuolen paino on. Alkuperäisen optimointiongelman nuolia vastaaville
nuolille asetetaan paino 0. Aputehtäväksi saadaan min x 0 +x 0 s.t. x +x 3 +x 0 = x 3 +x x x 3 = 0 x 3 +x 34 +x 3 x 3 x 3 x 43 = 0 x 4 +x 43 x 34 = 0 (3) x x 3 x 4 x 0 = x 0 x 0 = 0 x ij 0, (i,j) Ẽ, missä Ẽ tarkoittaa kuvan 3 graafin nuolijoukkoa. Koska luentomonisteen algoritmissa. optimoidaan vektorimuuttujan suhteen, otetaan käyttöön vektorin x, jonka alkiot vastaavat optimointiongelmissa () ja (3) esiintyviä kaksi-indeksisiä muuttujia taulukon mukaisesti. x x 3 x 3 x 3 x x 34 x 43 x 3 x 4 x 0 x 0 x x x 3 x 4 x x 6 x 7 x 8 x 9 x 0 x Vaihe I Vaiheessa I ratkaitaan aputehtävä (3), josta saadaan sallittu alkuvirtaus varsinaiselle optimointiongelmalle. Merkitään aputehtävästä haettavaa virtausta muuttujalla x. Luentomonisteen algoritmi. sovellettuna aputehtävään antaa: Askel 0. Koska virtaus x 0 = (0,0,0,0,0,0,0,0,0,,) on selvästi sallittu, valitaan se aloitusvirtaukseksi. Aloitusvirtaus on myös piirretty kuvaan 3. Askel. Nykyisellä ratkaisulla on sallittu parantava lenkki, joten ei voida lopettaa. 0 Kuva 4: Vaiheen I sallittu parantava lenkki 6
Askel. Sallittu parantava lenkki on 0 ja sitä vastaa suunta x = (,0,0,0,,0,0,0,0,, ). Suunta x on sallittu, koska lenkin suuntaisilla nuolilla (,) ja (,) virtaukset x = x = 0 < ovat alle kapasiteetin ja lenkkiä vastakkaisilla nuolilla (0,) ja (,0) virtaukset x 0 = x 0 = > 0. Suunta on myös parantava, sillä tehtävän (3) kohdefunktiolle c(x) = x 0 +x 0 saadaan c( x) = =. Askel 3. Käyttäen luentomonisteen sivun 46 kaavoja saadaan λ + = min{, min{ 0, 0}} = λ = min{, min{,}} = ja askelpituudeksi tulee λ = min{λ +,λ } = min{, } =. Askel 4. Päivitetään virtaus kaavalla x = x 0 +λ x, jolloin saadaan x = (,0,0,0,,0,0,0,0,0,0). 0,, Kuva : Vaiheen I lopetustilanne Algoritmin. suoritus voidaan päättää vaiheessa I ensimmäisen iteraation jälkeen, koska apumuuttujia x 0 ja x 0 vastaavat vektorin x komponentit ovat nollia. Vertaamalla optimointitehtävien () ja (3) rajoitteita havaitaan, että vektorista x saatu vektori x 0 = (,0,0,0,,0,0,0,0) on vaiheen II optimointitehtävän () sallittu aloitusvirtaus. Tämä tieto tarvitaan vaiheessa II. Vaihe II Vaiheessa II ratkaitaan optimointitehtävä () käyttäen vaiheesta I saatua aloitusvirtausta. Luentomonisteen algoritmi. sovellettuna tehtävään antaa: Askel 0. Aloitusvirtaukseksi valitaan vaiheessa I saatu x 0 = (,0,0,0,,0,0,0,0). 7
Askel. Nykyisellä ratkaisulla on sallittu parantava lenkki, joten ei voida lopettaa., 4,, 4,,,, Kuva 6: Vaiheen II aloitustilanne Askel. Sallittu parantava lenkki on esim. 3 4 ja sitä vastaa suunta x = (0,0,,0,,,0,0,). Suunta x on sallittu, koska lenkin suuntaisilla nuolilla (,3), (3,4) ja (4,) nykyiset virtaukset x 3 = x 34 = x 4 = 0 ovat alle kapasiteetin, joka on, ja lenkkiä vastakkaisella nuolella (, ) virtaus x = > 0. Suunta on myös parantava, sillä kohdefunktiolle c(x) = x +4x 3 +x 3 +x 3 +x +x 34 +x 43 +4x 3 +x 4 = x +4x +x 3 +x 4 +x +x 6 +x 7 +4x 8 +x 9 saadaan c( x) = ++ =. Kuva 7: Vaiheen II sallittu parantava lenkki Askel 3. Käyttäen luentomonisteen sivun 46 kaavoja saadaan λ + = min{, min{ 0, 0, 0}} = λ = min{, min{}} = ja askelpituudeksi tulee λ = min{λ +,λ } = min{, } =. Askel 4. Päivitetään virtaus kaavalla x = x 0 +λ x, jolloin saadaan x = (,0,,0,0,,0,0,). 8
Algoritmin. suoritus voidaan päättää vaiheessa II ensimmäisen iteraation jälkeen, koska enää ei löydy sallittua parantavaa lenkkiä. Näin ollen ratkaisuksi saadaan x = (,0,,0,0,,0,0,). Alkuperäisen optimointitehtävän kaksi-indeksisillä merkinnöillä tämä voidaan kirjoittaa muotoon x = x 3 = x 34 = x 4 = ja x 3 = x 3 = x = x 43 = x 3 = 0. Kohdefunktion arvo on 6. Kuva 8: Tehtävän 4 optimiratkaisu Tehtävä Tietokoneiden tarjonta Oulussa ja Lappeenrannassa on kummassakin 00 konetta sekä kysyntä Turussa 300 ja Helsingissä 400 konetta. Annetaan kaupungeille numerot: = Oulu, = Lappeenranta, 3 = Jyväskylä, 4 = Turku, = Helsinki. Muodostetaan minimikustannusvirtausongelma (ks. luentomoniste s. 4) Solmut ja ovat lähteitä, joiden nettotarjonta on 00. Solmu 3 on kauttakulkusolmu, ja solmut 4 ja ovat ja. Koska osa tuotannosta jää yli, muodostetaan myös, jonka kysynnäksi asetetaan 00+00 300 400 = 300 konetta ja jolle annetaan numeroksi 6. Kuva 9 esittää näillä tiedoilla piirrettyä graafia, jonka nuolten painoissa on huomioitu sekä kuljetus- että yksikkötuotantokustannukset. Olkoon x ij virtauksen määrä nuolta (i,j) pitkin. Saadaan optimointitehtävä min 00x 4 +080x +880x 3 +000x 3 +040x 4 +90x +40x 34 +0x 3 +800x 6 +900x 6 s.t. x 4 +x +x 3 +x 6 = 00 x 6 +x 3 +x 4 +x = 00 x 3 x 3 +x 34 +x 3 = 0 x 4 x 34 x 4 = 300 x x 3 x = 400 x 6 x 6 = 300 x ij 0, (i,j) E. 9
300 Ö,6 00 00 880, 000, O, J,3 L, 00, 0, 300 40, T,4 H, 90, 400 080, 040, Kuva 9: Tehtävän minimikustannusvirtausongelman graafi Jos Jyväskylän kautta voidaan kuljettaa korkeintaan 00 tietokonetta, niin muutetaan tehtävää jakamalla Jyväskylää kuvaava solmu 3 solmuiksi 3A ja 3B. Näistä ensimmäiseen suunnataan Jyväskylään tulevat nuolet ja jälkimmäisestä laitetaan lähtemään Jyväskylästä lähtevät nuolet. Solmusta 3A solmuun 3B lisätään vielä nuoli, jonka paino on 0, ja virtauksen ylärajaksi nuolelle asetetaan u 3A,3B = 00, eli rajoite 0 x 3A,3B 00. Tilannetta on havainnollistettu kuvassa 0. O, 880, J,3A 000, L, 0,00 J,3B 40, 0, T,4 H, Kuva 0: Tehtävän graafin muutokset, kun kuljetusta Jyväskylän kautta rajoitetaan 0
Tehtävä 6 Muotoillaan annetuista tiedoista kuljetusongelma. Lähteitä ovat ostetut liinat sekä päivinä i (i =,..., 4) käytetyt ja pestyt liinat. Nieluja puolestaan ovat liinojen tarpeet päivinä i (i =,..., ). Tehtävässä annetuista tiedoista saadaan taulukko. päivä. päivä 3. päivä 4. päivä. päivä ylimääräiset tarjonta ostetut 0 730. pv pestyt M,,,, 0 0. pv pestyt M M,,, 0 0 3. pv pestyt M M M,, 0 90 4. pv pestyt M M M M, 0 0 kysyntä 0 0 90 0 00 630 Ostettavien liinojen tarjonta on saatu laskemalla 0+0+90+0+00= 730. Ylläolevassa taulukossa on myös sarake ylimääräiset ylijäämäliinoja varten. Koska varastoon ei osteta liinoja ja kaikki saatavilla olevat liinat käytetään, tähän sarakkeeseen tulevat luvut ovat viimeistä riviä lukuunottamatta nollia. Ylimääräiset-sarakkeen viimeiselle riville tulee sen n tarve, jonne ohjataan kokonaistarjonnasta ylijäävä osa, kun kokonaistarjonnasta on vähennetty kokonaiskysyntä. Kyseinen luku 630 on siis saaatu vähentämällä tarjontojen (oikea sarake) summasta, joka on 360, kysyntöjen (alin rivi) summa päiviltä.-., joka on 730. Ylläolevassa taulukossa olevat luvut ovat kustannuksia, alarivillä olevat luvut ovat jen tarpeet, ja oikeanpuoleisessa sarakkeessa olevat luvut ovat lähteiden tarjonnat. Kun merkitään näitä muuttujilla c ij, d j ja s i, missä i =,,..., ja j =,,...,6, ylläolevasta taulukosta saadaan optimointitehtävä, joka on samaa muotoa kuin luentomonisteen sivulla esitetty.