Harjoitus 1 (17.3.2015) Tehtävä 1 Piirretään tilanteesta verkko, jossa kaupungeille on annetttu seuraavat numerot: 1 = Turku 2 = Tampere 3 = Helsinki 4 = Kuopio 5 = Joensuu. a) Tehtävänä on ratkaista Bellman Ford-algoritmilla lyhimmät reitit Turusta muihin kaupunkeihin sekä lyhin reitti Turusta Jyväskylään. Bellman Ford-algoritmi määritellään kaavoilla 0, k = s v 0 [k] =, muulloin v t [k] = min {v t 1 [i]+c ik (i,k) E} = v t 1 [l]+c lk, d[k] l, missä k = 1,2,3,4,5. Algoritmin perusteella saadaan taulukot t v t [1] v t [2] v t [3] v t [4] v t [5] t d[1] d[2] d[3] d[4] [d5] 0 0 1 0 163 169 1 1 1 2 0 163 169 460 605 2 1 1 2 3 3 0 163 169 460 596 3 1 1 2 4 4 0 163 169 460 596 4 1 1 2 4 t = 2 : Turku-Tampere-Kuopio: 460 Turku-Helsinki-Kuopio:559 Turku-Tampere-Joensuu: 617 Turku-Helsinki-Joensuu: 605 t = 3 : Turku-Tampere-Kuopio-Joensuu: 596 Vasemmassa taulukossa ei enää tapahdu muutosta sarakkeessa v t [5], kun verrataan kahta alinta riviä. Lyhin reitti Turusta Joensuuhun on d[5] = 4, d[4] = 2,d[2] = 1 eli Turku Tampere Kuopio Joensuu. Reitin pituus on 596 km. 1
b) Tehtävänä on ratkaista Dijkstran algoritmilla nopeimmat reitit Turusta muihin kaupunkeihin sekä nopein reitti Turusta Jyväskylään. Dijkstran algoritmi määritellään kaavoilla 0, i = s v[i] =, muuten v[i] = min {v[i],v[p]+c pi }, d[i] p. Algoritmin perusteella saadaan taulukot p v[1] v[2] v[3] v[4] v[5] p d[1] d[2] d[3] d[4] d[5] 0 1 0 3 2 1 1 1 3 0 3 2 6 9 2 1 1 3 3 2 0 3 2 6 9 3 1 1 3 3 4 0 3 2 6 8 4 1 1 3 4 5 0 3 2 6 8 5 1 1 3 4 Nopein reitti Turusta Joensuuhun ond[5] = 4, d[4] = 3, d[3] = 1eli Turku Helsinki Kuopio Joensuu. Tämän reitin kesto on 8 h. Tehtävä 2 Muotoillaan edellisen tehtävän nopeimman reitin ongelma Turusta (solmu 1) Joensuuhun (solmu 5) lineaariseksi optimointitehtäväksi, joka on muotoa min c ij x ij s.t. (i,j) E (i,l) E x il (l,j) E x ij 0, (i,j) E. 1, kun l = k x lj = 1, kun l = s 0, muulloin Ajosuunnat määräytyvät taulukon yläkolmion mukaan. Toisin sanoen Turusta ajetaan Tampereelle ja Helsinkiin, Tampereelta Helsinkiin, Kuopioon ja Joensuuhun, jne. Näin valitsemalla sijoittaen graafin nuolijoukko E, painot c ij sekä aloitussolmu s = 1 ja lopetussolmu k = 5 optimointitehtävään (1), saadaan optimointitehtävä (1) min 3x 12 +2x 13 +2x 23 +4x 24 +6x 25 +4x 34 +7x 35 +2x 45 s.t. x 12 x 13 = 1 x 12 x 23 x 24 x 25 = 0 x 13 +x 23 x 34 x 35 = 0 x 24 +x 34 x 45 = 0 x 25 +x 35 +x 45 = 1 x 12,x 13,x 23,x 24,x 25,x 34,x 35,x 45 0. (2) 2
Tehtävän (1) duaali on max v k v s s.t. v j v i c ij, (i,j) E, joka sijoittamalla s, k ja E saadaan muotoon max v 5 v 1 s.t. v 2 v 1 3 v 3 v 1 2 v 3 v 2 2 v 4 v 2 4 v 5 v 2 6 v 4 v 3 4 v 5 v 3 7 v 5 v 4 2. Duaalin muodostuksessa minimointitehtävä muuttuu maksimointitehtäväksi, primäärin yhtälörajoitusten vuoksi duaalimuuttujat ovat rajoittamattomia, primääritehtävän päätösmuuttujien positiivisuusehdosta seuraa epäyhtälörajoitukset. Duaalissa voidaan valita v 1 = 0, jolloin saadaan max v 5 s.t. v 2 3 v 3 2 v 3 v 2 2 v 4 v 2 4 v 5 v 2 6 v 4 v 3 4 v 5 v 3 7 v 5 v 4 2 v i rajoittamaton. (3) Ratkaistaan duaalitehtävä (3) CPLEXillä, jolloin vastaukseksi tulee v 1 = 0, v 2 = 3, v 3 = 2, v 4 = 6jav 5 = 8. CPLEXantaamyösduaalitehtävänduaalin, eliprimaalitehtävän (2) ratkaisun. Primaalitehtävän ratkaisuksi saamme x 13 = x 34 = x 45 = 1, ja kohdefunktion arvoksi 8 joka on myös duaalitehtävän optimaalinen kohdefunktion arvo. Kyseessä on reitti Turku Tampere Hämeenlinna Imatra Jyväskylä ja sen pituus on 8 h. 3
Tehtävä 3 Lasketaan Floyd Warshall-algoritmilla tehtävän 1 nopeimmat reitit kaikkien kaupunkien välille. Jos kaupunkien välillä on yhteys, niin v 0 [k,l] c kl d[k,l] k. Jos taas kaupunkien välillä ei ole yhteyttä, niin 0, k = l v 0 [k,l], muulloin. Floyd Warshall-algoritmi määritellään kaavoilla v t [k,l] = min {v t 1 [k,l], v t 1 [k,t]+v t 1 [t,l]} d[k,l] d[t,l]. Seuraavissa taulukoissa on listattu lyhyimpien reittien pituudet v t [k,l] kunkin kierroksen t jälkeen. Edellisestä kierroksesta muuttuneet arvot on rengastettu. Vaiheessa t = 0 saadaan v 0 [k,l] l = 1 l = 2 l = 3 l = 4 l = 5 d[k,l] l = 1 l = 2 l = 3 l = 4 l = 5 k = 1 0 3 2 k = 1 1 1 k = 4 4 4 0 2 k = 4 4 4 4 k = 5 6 7 2 0 k = 5 5 5 5 Vaiheessa t = 1 saadaan v 1 [k,l] l = 1 l = 2 l = 3 l = 4 l = 5 d[k,l] l = 1 l = 2 l = 3 l = 4 l = 5 k = 1 0 3 2 k = 1 1 1 k = 4 4 4 0 2 k = 4 4 4 4 k = 5 6 7 2 0 k = 5 5 5 5 Vaiheessa t = 2 saadaan: esim. v 2 [1,4] = min{,3 + 4} = 7 ja v 2 [1,5] = min{,3 + 6} = 9. Päivitetään edeltäjätaulukkoon 2 vastaaville paikoille (d[1, 4] ja d[1, 5]). 4
v 2 [k,l] l = 1 l = 2 l = 3 l = 4 l = 5 d[k,l] l = 1 l = 2 l = 3 l = 4 l = 5 k = 1 0 3 2 7 9 k = 1 1 1 2 2 k = 4 7 4 4 0 2 k = 4 2 4 4 4 k = 5 9 6 7 2 0 k = 5 2 5 5 5 Vaiheessa t = 3 saadaan v 3 [k,l] l = 1 l = 2 l = 3 l = 4 l = 5 d[k,l] l = 1 l = 2 l = 3 l = 4 l = 5 k = 1 0 3 2 6 9 k = 1 1 1 3 2 k = 4 6 4 4 0 2 k = 4 3 4 4 4 k = 5 9 6 7 2 0 k = 5 2 5 5 5 Vaiheessa t = 4 saadaan v 4 [k,l] l = 1 l = 2 l = 3 l = 4 l = 5 d[k,l] l = 1 l = 2 l = 3 l = 4 l = 5 k = 1 0 3 2 6 8 k = 1 1 1 3 4 k = 3 2 2 0 4 6 k = 3 3 3 3 4 k = 4 6 4 4 0 2 k = 4 3 4 4 4 k = 5 8 6 6 2 0 k = 5 4 5 4 5 Vaiheessa t = 5 saadaan v 5 [k,l] l = 1 l = 2 l = 3 l = 4 l = 5 d[k,l] l = 1 l = 2 l = 3 l = 4 l = 5 k = 1 0 3 2 6 8 k = 1 1 1 3 4 k = 3 2 2 0 4 6 k = 3 3 3 3 4 k = 4 6 4 4 0 2 k = 4 3 4 4 4 k = 5 8 6 6 2 0 k = 5 4 5 4 5 Nopein reitti Turusta Joensuuhun onnytkin d[1,5] = 4, d[1,4] = 3, d[1,3] = 1. Reittiä voidaan merkitä myös 1 3 4 5. Kyseinen reitti on Turku Helsinki Kuopio Joensuu, ja sen kesto on 8 h. Tehtävä 4 Tulostimen ostohinta on 100 euroa. Käyttökustannukset vuosina 1 5 ovat 100, 150, 200, 250 ja 300 euroa. Olkoon solmu i päätöstilanne vuoden i alussa. Piirretään graafi, jossa 5
on solmut 1, 2, 3, 4, 5 ja 6. Nuolten painoiksi asetetaan c i,i+1 = 100+100 = 200 c i,i+2 = 100+100+150 = 350 c i,i+3 = 100+100+150+200 = 550 c i,i+4 = 100+100+150+200+250 = 800 c i,i+5 = 100+100+150+200+250+300 = 1100. Tehtävänä on etsiä lyhin reitti solmusta 1 solmuun 6. min 200(x 12 +x 23 +x 34 +x 45 +x 56 ) +350(x 13 +x 24 +x 35 +x 46 ) +550(x 14 +x 25 +x 36 ) +800(x 15 +x 26 ) +1100x 16 s.t. x 12 x 13 x 14 x 15 x 16 = 1 x 12 x 23 x 24 x 25 x 26 = 0 x 13 +x 23 x 34 x 35 x 36 = 0 x 14 +x 24 +x 34 x 45 x 46 = 0 x 15 +x 25 +x 35 +x 45 x 56 = 0 x 16 +x 26 +x 36 +x 46 +x 56 = 1 x ij 0. (4) Tehtävä 5 Edellinen tehtävä voidaan ratkaista mm. Bellman-Fordin, Floyd-Warshallin tai Dijkstran algoritmilla. Kyseessä on syklitön suunnattu verkko, joten algoritmi 1.17 (lyhimmät tiet syklittömässä verkossa) on myös mahdollinen ja vaihtoehdoista myös tehokkain. Vertailun vuoksi alla on listattu niiden taulukoiden koot joiden laskemisen kunkin luentomonisteen algoritmin suoritus vaatii. 1.8 (Bellman Ford) Yksi kokoa 6 6 oleva taulukko ja edeltäjätaulukko. 1.11 (Floyd Warshall) 7 kappaletta kokoa 6 6 olevia taulukoita ja edeltäjätaulukot. 1.14 (Dijkstra) Yksi kokoa 7 6 oleva taulukko ja edeltäjätaulukko. 1.17 (Lyhimmät tiet syklittömässä verkossa) Yksi kokoa 2 6 oleva taulukko sisältäen edeltäjätaulukon. 6
Algoritmi 1.17 määritellään kaavoilla v[i] v[s] 0 v[p] = min i d[p] l. Algoritmia käyttäen saadaan v[1] = 0 {v[i]+c ip (i,p) E} = v[l]+c ip v[2] = 200 d[2] = 1 v[3] = min {350,200+200} = 350 d[3] = 1 v[4] = min {550,350+200,200+350} = 550 d[4] = 1,2 tai 3 v[5] = min {800,200+550,350+350,550+200} = 700 d[5] = 3 v[6] = min {1100,200+800,350+550,550+350,700+200} = 900 d[6] = 3,4 tai 5 Matti Matikka ostaa tulostimen opintojen alkaessa. Lisäksi hänen kannattaa ostaa uusi tulostin joko kolmannen tai neljännen opiskeluvuoden alussa. Koska d[6] = 3, 4 tai 5, niin kustannuksia minimoidessaan Matti voi ostaa uuden tulostimen myös 5. vuoden alussa, mikäli hän oli ostanut uuden tulostimen 3. vuoden alussa (d[5] = 3). d[i] 7