Malliratkaisut Demot 4 3.4.017 Tehtävä 1 Tarkastellaan harjoituksen 1 nopeimman reitin ongelmaa ja etsitään sille lyhin virittävä puu käyttämällä kahta eri algoritmia. a) (Primin algoritmi) Lähtemällä solmusta 1 lyhimpään virittävään puuhun saadaan kaaret (1,), (,3), (3,4) ja (4,), jotka vastaavat reittiä 1 3 4. Kyseisen reitin pituus on 6 h. b) (Kruskalin algoritmi) Lyhimpään virittävään puuhun saadaan nyt kaaret (, 3), (4,), (3,4) ja (1,) ja reitti on sama kuin a)-kohdassa. Yllä saatu virittävä puu on piirretty kuvaan 1 graafin päälle paksunnetuilla viivoilla. 1 4 1 4 1 3 4 1 Turku Tampere 3 Hämeenlinna 4 Imatra Jyväskylä Kuva 1: Tehtävän 1 virittävä puu Tampereen ja Hämeenlinnan välinen ajomatka saa hidastua h ilman muutosta lyhimmässä virittävässä puussa. Jos matka hidastuu 3 h, niin saadaan useita virittäviä puita johtuen siitä että kolmella kaarella on sama paino. Kuvassa on esitetty yksi vaihtoehto virittävästä puusta tässä tapauksessa. 1 4 4 4 1 3 4 1 Turku Tampere 3 Hämeenlinna 4 Imatra Jyväskylä Kuva : Tehtävän 1 virittävä puu, kun matka hidastuu 3h 1
Tehtävä Olkoon 1, jos esine i otetaan mukaan x i = 0, muulloin. Tällöin harjoitusten 3 tehtävä 1 voidaan muotoilla selkäreppuongelmaksi seuraavasti: max 40x 1 +1x +0x 3 +10x 4 s.t. 4x 1 +x +3x 3 +x 4 7 x 1,x,x 3,x 4 {0,1}. Laskemalla hyötysuhteet kaavasta h i = c i a i saadaan h 1 = 40 4 = 10 h = 1 = 71 h 3 = 0 3 = 6 3 h 4 = 10 1 = 10. Valitaan sitten mukaan yksitellen esineitä parhaan hyötysuhteen mukaan, jolloin saadaan taulukko esine paino paino 7 hyöty x 1 4 kyllä 40 x 4 kyllä 0 x 7 kyllä 6 x 3 10 ei (8) Esinettä x 3 ei voida enää ottaa mukaan, koska painorajoitus ylittyy. Ratkaisuna on valita esineet x 1, x ja x 4, jolloin saatava hyöty on 6. Jos vaaditaan, että hyödyn on oltava vähintään 70, niin alkuperäisen tehtävän painorajoitus ei enää voi olla voimassa ja optimointitehtävällä ei ole sallittuja ratkaisuja. Jos taas ainoana rajoitteena on että hyödyn on oltava vähintään 70, niin alkuperäinen hyötyä maksimoiva kohdefunktio kasvaisi mahdollisimman suureksi ja tämä tarkoittaa sitä että kaikki tavarat otettaisiin mukaan. Optimointitehtävästä saa mielenkiintoisemman esimerkiksi siten, että hyödyn maksimoinnin sijaan minimoidaan mukaan otettavien esineiden kokonaispainoa. Kun optimointitehtävän kohdefunktiota ja rajoitteita muutetaan yllä kuvatulla tavalla, niin päädytään optimointitehtävään min 4x 1 +x +3x 3 +x 4 s.t. 40x 1 +1x +0x 3 +10x 4 70.
Valitaan aluksi mukaan kaikki esineet, jolloin hyöty on 8 ja paino 10. Sen jälkeen Pudotetaan pois esineitä hyötysuhteen mukaan siten, että ensin pudotetaan esine, jolla on heikoin hyötysuhde. esine hyöty hyöty 70 x 3 6 ei x 70 kyllä Ylläolevasta taulukosta nähdään että vaikka esineellä x 3 on huonoin hyötysuhde sitä ei voida pudottaa, koska rajoite ei tällöin enää toteudu. Jos taas pudotetaan esine x, jolla on toiseksi heikoin hyötysuhde, niin saadaan sallittu ratkaisu. Ratkaisuna on siis valita esineet x 1, x 3 ja x 4, joiden yhteispaino on 8. Tehtävä 3 Muodostetaan ensin maksimivirtausongelma, jossa mahdollisten parien lukumäärä vastaa virtauksen suuruutta. Merkitään miehiä numeroilla,...,6 ja naisia numeroilla 7,...,11. Tapio Lauri Aapo Heikki Vesa Päivi Virpi Laura Sanna Jonna 3 4 6 7 8 9 10 11 Tapio Päivi Lauri Virpi 1 Aapo Laura 1 Heikki Sanna Vesa Jonna Kuva 3: Tehtävän 3 maksimivirtausongelman graafi Piirretään graafi, jossa aloitussolmua merkitään numerolla 1. Aloitussolmusta lähtee nuolet kutakin miestä vastaavaan solmuun. Kunkin miehen solmusta taas lähtee nuolet niiden naisten solmuihin, joiden kanssa kyseiset miehet voivat muodostaa parin. Jokaisen naisen solmusta lähtee lopuksi nuoli lopetussolmuun, jota on merkitty numerolla 1. Koska parit ovat samanarvoisia, asetetaan jokaisen nuolen painoksi c ij = 1. Lisäksi koska kukin 3
mies voi muodostaa parin vain yhden naisen kanssa, asetetaan nuolten kapasiteetiksi u ij = 1. Koska maksimivirtausongelmassa kuhunkin solmuun tuleva virtaus on yhtä suuri kuin lähtevä virtaus (aloitus- ja lopetussolmua lukuun ottamatta), saadaan optimointitehtävä, joka on muotoa max s.t. j (i,j) E j (k,j) E c ij x ij (1) x kj i (i,k) E x ik = 0, k =,3,...,11, () 0 x ij u ij = 1, (i,j) E, (3) missä E on kuvassa 3 esitetyn maksimivirtausongelman graafin nuolijoukko. Tapio Päivi Lauri Virpi 1 Aapo Laura 1 Heikki Sanna Vesa Jonna 1, Kuva 4: Tehtävän 3 minimikustannusvirtausongelman graafi Muutetaan tehtävä minimikustannusvirtausongelmaksi (ohje luentomonisteen sivulla 61) merkitsemällä edellä piirrettyjen nuolten painoiksi 0 ja lisäämällä lopetussolmusta 1 aloitussolmuun 1 menevä nuoli, jonka paino on c 1,1 = 1 ja kapasiteetti u 1,1 =. Tällöin kohdefunktioksi saadaan min x 1,1 = max x 1,1. Maksimoinnin edestä voidaan jättää miinusmerkki pois koska se ei muuta tehtävän optimaalisen ratkaisun muuttujia x ij. Lisäksi rajoite () asetetaan myös aloitus- ja lopetussolmulle (k = 1 ja k = 1), koska nuolen (1, 1) lisäämisestä johtuen ne ovat nyt kautta- 4
kulkusolmuja. Lisättyä nuolta varten tulee myös rajoite x 1,1 0. Näin saatu optimointitehtävä on minimikustannusvirtausongelma, joka on samaa muotoa kuin luentomonisteen sivulla 4 esitetty. Tehtävä 4 Merkitään x ij = ravustajalta i ravintolaan j lähetetty määrä rapuja. Verkosto-ongelmasta saadaan optimointitehtävä min 7x 11 +7x 1 +8x 1 +8x +x 31 +x 3 s.t. x 11 +x 1 300 x 1 +x 300 x 31 +x 3 300 0.7x 11 +0.8x 1 +0.6x 31 30 0.6x 1 +0.8x +0.7x 3 7 x ij 0, jonka ratkaisu CPLEXillä on x 11 = 300 (elävänä perille 10) x 1 = 0 x 1 = 17 (elävänä perille 140) x = 81. (elävänä perille 6) x 31 = 0 x 3 = 300 (elävänä perille 10). Koska 10 + 140 = 30 ja 6 + 10 = 7, niin kumpikin ravintola sai tarvitsemansa määrän rapuja. Kokille tulevat kustannukset ovat 60 euroa. Jos vaaditaan, että toimitettavien rapujen määrät ovat kokonaislukuja (CPLEX: general), toisin sanoen x ij N, niin tehtävän ratkaisuksi saadaan x 11 = 6 (elävänä perille 179.) x 1 = 0 x 1 = 1 (elävänä perille 169.6) x = 83 (elävänä perille 66.4) x 31 = (elävänä perille 1.) x 3 = 98 (elävänä perille 08.6).
Nyt 179.+169.6+1. = 30 ja 66.4+08.6 = 7, joten rapuja on jälleen toimitettu oikea määrä (tarkalleen ottaen tässä pitäsi ottaa huomioon että elävinä toimitettujen rapujen määrät ovat kokonaislukuja). Kokille tulevat kustannukset ovat 6 euroa. Tehtävä Otetaan käyttöön binääriset kokonaislukumuuttujat 1, jos rehua i valmistetaan (eli x i > 0) y i = 0, jos rehua i ei valmisteta (eli x i = 0), missä i = 1,...,8 ja jatkuvat muuttujat x i = lajikkeen i valmistusmäärä missä i = 1,...,8. Muotoillaan sitten tuotannolle asetetut vaatimukset rajoitteiksi. a) Kutakin lajiketta i ei joko valmisteta tai sitten valmistetaan vähintään määrä l i ja enintään määrä u j. Tarvittava ehto on l i y i x i u i y i, i = 1,...,8. b) Jos samanaikaisesti saa valmistaa korkeintaan kuutta eri lajiketta, niin kirjoitetaan ehto y 1 +y +y 3 +y 4 +y +y 6 +y 7 +y 8 6. c) Jos valmistetaan lajiketta 1 tai lajiketta tai molempia, niin tulee valmistaa myös lajikkeita 3 ja 4. Tätä vastaava ehto on joko y 1 +y y 3 y 1 +y y 4 tai y 1 y 3 y 1 y 4 y y 3 y y 4. d) Jos ei valmisteta lajiketta eikä lajiketta 6, niin myöskään lajikkeita 7 ja 8 ei valmisteta. Tällöin tarvitaan ehtoa y +y 6 y 7 y +y 6 y 8. 6