Harjoitus 3 (3..) Tehtävä Olkoon kaaren paino c ij suurin sallittu korkeus tieosuudella (i, j). Etsitään reitti solmusta s solmuun t siten, että reitin suurin sallittu korkeus pienimmillään olisi mahdollisimman suuri. Kohdefunktioksi saadaan nyt reitillä P solmusta s solmuun t. max P min (i,j) P {c ij} Dynaamisen optimoinnin rekursioyhtälöt ovat y = y j = max i (i,j) E {min {c ij, y i }}, j =,...,n ja kaaren paino c ij. Tehtävän ratkaisemiseksi tarvittava modifioitu Dijkstran algoritmi on seuraava: Olkoon Kiinnitetään solmu p = s., jos i = s v[i] =, jos i s. Merkitään solmu p kiinnitetyksi ja jokaiselle siitä kiinnittämättömään solmuun i lähtevälle kaarelle (p, i) päivitetään v[i] max {v[i], min {v[p], c pi }}. Jos v[i]:n arvo muuttui, niin asetetaan d[i] p. Lopetus samoin kuin alkuperäisessä algoritmissa. 3 Kiinnitetään seuraavaksi solmu p, jonka väliaikainen maksimikorkeus on suurin. Tehtävä 3 Kuva : Tehtävän graafi.
Muotoillaan Harjoituksen Tehtävä nopeimman reitin ongelma minimikustannusvirtausongelmaksi suunnatulla verkolla. Turku on lähde (tarjonta ), Jyväskylä nielu (kysyntä ) ja muut solmut ovat kauttakulkusolmuja. Eli nuolet, jotka tulevat Turkuun tai lähtevät Jyväskylästä, voidaan jättää huomioimatta. Olkoon x ij virtaus nuolella (i, j). Silloin saadaan optimointitehtävä min x + x 3 + x 3 + x 3 + x + x 3 + x 3 + x 3 + x s. t. x + x 3 = x 3 + x x x 3 = x 3 + x 3 + x 3 x 3 x 3 x 3 = () x + x 3 x 3 = x x 3 x = x ij, (i, j) E. Tehtävää vastaava insidenssimatriisi on solmu (, ) (, 3) (, 3) (3, ) (, ) (3, ) (, 3) (3, ) (, ) + + + + 3 + + + + + Koska u ij = kaikilla i, j ja vektorin b = (,,,, ) komponentit ovat kokonaislukuja, niin tehtävällä on kokonaislukuratkaisu. Tämä seuraa luentomonisteen kohdassa. esitetyistä perusteluista (ottaen huomioon että u ij = ). Vaihtoehtoinen perustelu sille että tehtävällä on kokonaisratkaisu olisi että insidenssimatriisi on unimodulaarinen ja vektorin b alkiot ovat kokonaislukuja. Kuten luentomonisteessa on todettu, tästä seuraa että simpleksialgoritmin tuottamat ratkaisut ovat kokonaislukuja. Tehtävä 3 Ratkaistaan edellisen tehtävän optimointiongelma () kaksivaihemenetelmällä käyttäen luentomonisteen algoritmia.. Lähdemme ratkaisemaan tehtävää käyttäen alkuarvausta x = (,,,,,,,, ). Alkuarvaus ei ole sallittu, koska ensimmäinen ja viimeinen rajoiteyhtälö eivät toteudu. Tästä johtuen muodostamme edellisen tehtävän optimointiongelmasta aputehtävän lisäämällä apumuuttujat x ja x. Aputehtävää vastaavassa graafissa (kuva ) on lisätty ylimääräinen -solmu, johon on nuoli solmusta ja nuoli solmuun, ja kummankin nuolen paino on. Alkuperäisen optimointiongelman nuolia
3 Kuva : Tehtävän 3 aputehtävää varten täydennetty graafi. vastaaville nuolille asetetaan paino. Aputehtäväksi saadaan min x + x s. t. x + x 3 + x = x 3 + x x x 3 = x 3 + x 3 + x 3 x 3 x 3 x 3 = x + x 3 x 3 = x x 3 x x = x x = x ij, (i, j) Ẽ, () missä Ẽ tarkoittaa kuvan graafin nuolijoukkoa. Koska luentomonisteen algoritmissa. optimoidaan vektorimuuttujan suhteen, otamme käyttöön vektorin x jonka alkiot vastaavat optimointiongelmissa () ja () esiintyviä kaksi-indeksisiä muuttujia taulukon x x 3 x 3 x 3 x x 3 x 3 x 3 x x x x x x 3 x x x 6 x 7 x 8 x 9 x x mukaisesti. Vaihe I Vaiheessa I ratkaisemme aputehtävän, josta saamme sallitun aloitusvirtauksen varsinaiselle optimointiongelmalle. Merkitkäämme aputehtävästä haettavaa virtausta muuttujalla x. Luentomonisteen algoritmi. sovellettuna aputehtävään koostuu seuraavista vaiheista: Koska virtaus x = (,,,,,,,,,, ) on selvästi sallittu, valitsemme sen aloitusvirtaukseksi. ja Löytyy sallittu parantava lenkki, kuten esimerkiksi. Käyttäen luentomonisteen sivulla olevaa kaavaa lenkkiä vastaavalle suunnalle saamme suunnan 3
x = (,,,,,,,,,, ). Suunta x sallittu, koska lenkin suuntaisilla nuolilla (, ) ja (, ) virtaukset x = x = < ovat alle kapasiteetin ja lenkkiä vastakkaisilla nuolilla (, ) ja (, ) virtaukset x = x = >. Suunta on myös parantava on parantava, sillä ongelman () kohdefunktiolle c(x) = x x saadaan c( x) = =. 3 Käyttäen luentomonisteen sivulla 6 esitettyjä kaavoja askelpituudelle λ saamme min {, } λ = min = min {, } Päivitetään virtaus kaavalla x = x + λ x, jolloin saamme x = (,,,,,,,,,, ). Algoritmin. suoritus voidaan päättää ensimmäisen iteraation jälkeen, koska apumuuttujia x ja x vastaavat vektorin x komponentit ovat nollia. Vertaamalla optimointistehtävien () ja () rajoitteita havaitsemme että vektorista x saatu vektori x = (,,,,,,,, ) on vaiheen II optimointitehtävän () sallittu aloitusvirtaus. Tämä tieto riittää meille vaihetta II varten. Vaihe II Vaiheessa II ratkaisemme alkuperäisen optimointitehtävän () käyttäen vaiheessa I saatua aloitusvirtausta. Aloitusvirtaukseksi valitaan vaiheessa I saatu x = (,,,,,,,, ). ja Voidaan valita esimerkiksi lenkki 3. Luentomonisteen sivulla olevaa kaavaa käyttämällä saamme lenkkiä vastaavaksi suunnaksi x = (,,,,,,,, ). Suunta on sallittu, koska lenkin suuntaisilla nuolilla (, 3), (3, ) ja (, ) virtaukset ovat alle kapasiteetin joka on ja lenkkiä vastakkaisella nuolella (, ) on voimassa x = x = >. Suunta x on myös parantava, koska kohdefunktiolle c(x) = x + x 3 + x 3 + x 3 + x + x 3 + x 3 + x 3 + x = x + x + x 3 + x + x + x 6 + x 7 + x 8 + x 9 saamme c( x) = + + =. 3 Käyttäen luentomonisteen sivulla 6 esitettyjä kaavoja askelpituudelle λ saamme min {, } λ = min = min {, min{, }}
Päivitetään virtaus kaavalla x = x + λ x, jolloin saamme x = (,,,,,,,, ). Ensimmäisen iteraation jälkeen ei löydy enää sallittua ja parantavaa lenkkiä, joten optimiratkaisuksi saadaan x = (,,,,,,,, ). Alkuperäisen optimointitehtävän kaksi-indeksisillä merkinnöillä tämä voidaan kirjoittaa muotoon x =, x 3 =, x 3 =, x 3 =, x =, x 3 =, x 3 =, x 3 =, ja x =. Tehtävä Tietokoneiden tarjonta Oulussa ja Lappeenrannassa on kummassakin konetta sekä kysyntä Turussa 3 ja Helsingissä konetta. Annetaan kaupungeille numerot seuraavasti: = Oulu = Lappeenranta 3 = Jyväskylä = Turku = Helsinki. Muodostetaan minimikustannusvirtausongelma (ks. luentomoniste s. ). Solmut ja ovat lähteitä, joiden nettotarjonta on. Solmu 3 on kauttakulkusolmu, ja solmut ja ovat nieluja. Koska osa tuotannosta jää yli, muodostetaan myös nielu, jonka kysynnäksi asetetaan + 3 = 3 konetta ja jolle annetaan numeroksi 6. Kuva 3 esittää näillä tiedoilla piirrettyä graafia, jonka nuolten painoissa on huomioitu sekä kuljetus- että yksikkötuotantokustannukset. 9 6 9 8 8 88 3 Kuva 3: Tehtävän graafi.
Olkoon x ij virtauksen määrä nuolta (i, j) pitkin. Saadaan optimointitehtävä min x + 8x + 88x 3 + x 3 + x + 9x + x 3 + x 3 + 8x 6 + 9x 6 s. t. x + x + x 3 + x 6 = x 6 + x 3 + x + x = x 3 x 3 + x 3 + x 3 = x x 3 x = 3 x x 3 x = x 6 x 6 = 3 x ij, (i, j) E. Jos Jyväskylän kautta voidaan kuljettaa korkeintaan 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, ja virtauksen ylärajaksi nuolella asetetaan u 3a,3b =, eli rajoite x 3a,3b. 9 6 8 9 8 88 3a 3b Kuva : Tehtävän graafi kun Jyväskylän kautta voidaan kuljettaa korkeintaan tietokonetta. Tehtävä Muotoillaan annetuista tiedoista kuljetusongelma. Lähteitä ostetut liinat sekä päivinä i (i =,..., ) käytetyt ja pestyt liinat. Nieluja puolestaan ovat liinojen tarpeet päivinä i (i =,..., ). Tehtävässä annetuista tiedoista saadaan taulukko 6
. päivä. päivä 3. päivä. päivä. päivä ylimääräiset tarjonta ostetut 73. pv pestyt M,,,,. pv pestyt M M,,, 3. pv pestyt M M M,, 9. pv pestyt M M M M, kysyntä 9 63 Ostettavien liinojen tarjonta on saatu laskemalla + + 9 + + = 73. 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 nielun tarve, jonne ohjataan kokonaistarjonnasta yli jäävä osa, kun kokonaistarjonnasta on vähennetty kokonaiskysyntä. Kyseinen luku 63 on siis saaatu vähentämällä tarjontojen (oikea sarake) summasta, joka on 36, kysyntöjen (alin rivi) summa päiviltä.-., joka on 73. Ylläolevassa taulukossa olevat luvut ovat kustannuksia, alarivillä olevat luvut ovat nielujen 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. 7