Malliratkaisut Demot 1 12.3.2018 Tehtävä 1 Piirretään tilanteesta verkko, jossa kaupungeille on annetttu seuraavat numerot: 1 297 4 2 4 163 3 454 6 179 2 136 2 169 2 390 4 3 436 7 5 Kuva 1: Tehtävän 1 graafi 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 Joensuuhun. Bellmann 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] d[5] 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 Vasemmanpuoleisessa taulukossa on v 4 [k] = v 3 [k] jokaiselle solmulle k (eli kaksi alinta riviä ovat samat), joten voidaan lopettaa. Lyhin reitti Turusta Joensuuhun on d[5] = 4, d[4] = 2, d[2] = 1 eli Turku Tampere Kuopio Joensuu. Reitin pituus on 596 km. b) Tehtävänä on ratkaista Dijkstran algoritmilla nopeimmat reitit Turusta muihin kaupunkeihin sekä nopein reitti Turusta Joensuuhun. Dijkstan algoritmi määritellään 1
kaavoilla 0, i = s v[i] =, muuten v[i] = min {v[i],v[p]+c pi }. Jos arvo v[i] muuttuu niin aseta 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 3 1 1 3 3 2 0 3 2 6 9 2 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] = 1 eli 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 s.t. (i,j) E i (i,l) E c ij x ij x il j (l,j) E x lj = x ij 0, (i,j) E. 1, kun l = k 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, Helsingistä Kuopioon ja Joensuuhun sekä Kuopiosta Joensuuhun. Näin valitsemalla sekä sijoittamalla graafin nuolijoukko E, painot c ij ja aloitussolmu s = 1 yhdessä lopetussolmun k = 5 (1) 2
kanssa optimointitehtävään (1), saadaan optimointitehtävä 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 (2) 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. Tehtävän (2) duaali on joka saadaan muotoon max v k v s s.t. v j v i c ij, (i,j) E, 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 v i R, i = 1,2,3,4,5 sijoittamalla s, k ja E. 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. Du- 3
aalissa 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 R, i = 1,2,3,4,5. (3) Ratkaistaan duaalitehtävä (3) CPLEXillä, jolloin vastaukseksi tulee v 1 = 0, v 2 = 3, v 3 = 2, v 4 = 6 ja v 5 = 8. CPLEX antaa myös duaalitehtävän duaalin, eli primaalitehtävän (2) ratkaisun. Primalitehtävän ratkaisuksi saadaan x 13 = x 34 = x 45 = 1. Kohdefunktion arvo on 8, joka on myös duaalitehtävän optimaalinen kohdefunktion arvo. Kyseessä on reitti Turku Helsinki Kuopio Joensuu ja sen pituus on 8 h. Tehtävä 3 Lasketaan Floyd Warshall-algoritmilla Tehtävän 1 aineistoa käyttäen nopeimmat reitit kaupunkien välille ja selvitetään jälleen lyhin reitti Turusta Joensuuhun. 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 kaavalla v t [k,l] = min {v t 1 [k,l], v t 1 [k,t]+v t 1 [t,l]}. Mikäli v t [k,l] < v t 1 [k,l], niin aseta d[k,l] d[t,l]. Seuraavissa taulukoissa on listattu lyhimpien reittien pituudet v t [k,l] kunkin kierroksen t jälkeen. Edellisestä kierroksesta muuttuneet arvot on rengastettu. 4
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 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 3 5 4 5 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 3 5 4 5 Nopein reitti Turusta Joensuuhun on nytkin 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 pituus on 8 h. Tehtävä 4 Tulostimen ostohinta on 100 euroa. Käyttökustannukset vuosina 1 5 ovat 50, 100,, 200 ja 300 euroa. Olkoon solmu i päätöstilanne vuoden i alussa. Piirretään graafi, jossa on solmut 1, 2, 3, 4, 5 ja 6. Nuolten painoiksi asetetaan c i,i+1 = 100+50 = c i,i+2 = 100+50+100 = 250 c i,i+3 = 100+50+100+ = 400 c i,i+4 = 100+50+100++200 = 600 c i,i+5 = 100+50+100++200+300 = 900. Tehtävänä on etsiä lyhin reitti solmusta 1 solmuun 6. 600 600 250 250 250 250 1 2 3 4 5 6 400 400 400 900 Kuva 2: Tehtävän 4 graafi 6
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 7 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. Algoritmi 1.17 määritellään kaavoilla v[s] 0 v[p] = min i d[p] l. Algoritmia käyttäen saadaan: v[i] v[1] = 0 {v[i]+c ip (i,p) E} = v[l]+c lp v[2] = d[2] = 1 v[3] = min {250,+} = 250 d[3] = 1 v[4] = min {400,250+,+250} = 400 d[4] = 1,2 tai 3 v[5] = min {600,+400,250+250,400+} = 500 d[5] = 3 v[6] = min {900,+600,250+400,400+250,500+} = 650 d[6] = 3,4 tai 5 Ossi Opiskelijan kannattaa ostaa uusi tulostin jollain seuraavista tavoista ensimmäisen, toisen ja neljännen vuoden alussa ensimmäisen ja kolmannen vuoden alussa ensimmäisen, kolmannen ja neljännen vuoden alussa ensimmäisen, kolmannen ja viidennen vuoden alussa ensimmäisen ja neljännen vuoden alussa d[i] 7