JYVÄSKYLÄN YLIOPISTO 14. Luennon sisältö Kuljetustehtävä esimerkki Verkkoteoria ja optimointi verkkoteorian optimointitehtäviä verkon virittävä puu lyhimmät polut kevät 2012 TIEA382 Lineaarinen ja diskreetti optimointi
JYVÄSKYLÄN YLIOPISTO Esimerkki kuljetustehtävän ratkaisemisesta http://www.optimalon.com/examples/transport.htm kevät 2012 TIEA382 Lineaarinen ja diskreetti optimointi
Graafit ja verkot Suuntamaton graafi: eli haaroja Joukko solmuja ja joukko järjestämättömiä solmupareja Suunnattu graafi: Joukko solmuja ja joukko järjestettyjä solmupareja eli kaaria Haaran päätesolmut: Haaraan liittyvät solmut Kaaren alku- ja loppusolmut: Kaareen liittyvät solmut Solmun aste: Solmuun liittyvien haarojen lukumäärä 1
b 2 1 d e c a 3 4 f 5 Suuntaamaton graafi G(N, A) Solmut N = {1,2,3,4,5} Haarat A = {a, b, c, d, e, f} = {(1,4),(1,2),(1,3),(2,3),(2,3),(3,5)} 2
2 b 1 d e c a 3 4 f 5 Suunnattu graafi G(N, A) Solmut N = {1,2,3,4,5} Kaaret A = {a, b, c, d, e, f} = {(1,4),(2,1),(1,3),(2,3),(3,2),(5,3)} 3
Polku: Katkeamaton jono solmuja ja haaroja/kaaria Silmukka: Polku, jonka alku- ja loppusolmut ovat samat Yksinkertainen polku: Solmu esiintyy polussa vain kerran Yhdistetyt solmut: Solmujen välillä on ainakin yksi polku 4
Yhtenäinen (yhdistetty) graafi: Kaikki solmuparit ovat yhdistettyjä Renkaaton graafi: Ei yhtään silmukkaa Puu: Graafi, joka on yhtenäinen ja renkaaton 5
Verkko: Graafi, jonka solmuihin ja haaroihin/kaariin liittyy numeerisia arvoja (esimerkiksi pituus, kustannus tai kapasiteetti) Virtaus: Tavara tms. kulkee solmusta toiseen kaaria/haaroja pitkin Lähdesolmu: Solmu, josta tulee lisää tavaraa verkkoon Viemärisolmu: Solmu, josta tavaraa poistuu verkosta Virtauksen säilyvyys: Solmuun saapuva ja siitä lähtevä virtaus ovat samat (paitsi lähde- ja viemärisolmuissa) 6
Tuotannon ajoitus Tuotetta valmistetaan usean tuotantokauden aikana Tuotteen tarve kaudella i on d i Tuotetta voidaan valmistaa myös varastoon Valmistuksesta ja varastoinnista aiheutuvat tietyt kustannukset Tavoite: Määrää tuotteen valmistusmäärät kullakin kaudella siten, että kokonaiskustannukset minimoituvat 7
x i = valmistusmäärä kaudella i v i = varaston koko kaudelta i kaudelle i + 1 Solmut kuvaavat kausia, solmu 0 kuvaa alkutilannetta Kaaret kuvaavat tuotteen kulkeutumista kaudelta toiselle Jokaiseen kaareen liittyy joko valmistuskustannus tai varastointikustannus 8
d 1 + d 2 + d 3 + d 4 0 x 1 x 2 x 3 x 4 v 1 v 2 v 3 1 2 3 4 d 1 d 2 d 3 d 4 Tehtävä: Etsi minimihintainen virtaus verkon läpi 9
Lukujärjestysongelma Seminaarissa kuusi tunnin esitelmää Seminaarin kokonaiskesto neljä tuntia Esitelmän 1 kanssa ei samanaikaisesti esitelmää 3 Esitelmän 3 kanssa ei samanaikaisesti esitelmiä 1, 4, 5, 6 Esitelmän 4 kanssa ei samanaikaisesti esitelmiä 3, 5, 6 Esitelmän 5 kanssa ei samanaikaisesti esitelmiä 3, 4, 6 Esitelmän 6 kanssa ei samanaikaisesti esitelmiä 3, 4, 5 Tavoite: Järjestä esitelmät siten, että rajoitteet toteutuvat 10
Solmut kuvaavat esitelmiä Solmut yhdistetään haaralla, jos vastaavat esitelmät eivät saa olla samanaikaisesti Neljä eri tunnusta, yksi kullekin seminaarin tunnille 11
1 2 3 4 5 6 Tehtävä: Liitä jokaiseen solmuun yksi tunnus siten, että kahdella solmulla ei saa olla sama tunnus, jos niiden välillä on haara 12
Jakeluongelma Pizzerialla on kotiinkuljetusta varten käytössä n autoa Tavoite: Toimita pizzat asiakkaille siten, että toimituksille luvattu aikaraja ei ylity 13
Solmut kuvaavat pizzeriaa ja eri asiakkaita Haarat kuvaavat lyhimpiä reittejä eri solmujen välillä Jokaiseen haaraan liitetään ajoaika kyseisellä reitillä (= haaran pituus) Tehtävä: Muodosta n silmukkaa siten, että pizzeriasolmu on mukana jokaisessa silmukassa jokainen asiakassolmu on mukana jossain silmukassa jokaisen silmukan pituus viimeiseen asiakassolmuun asti ei ylitä aikarajaa 14
Koneen vaihto-ongelma Tarkastellaan n:ää aikaperiodia Jokaisen periodin alussa vanha kone voidaan vaihtaa uuteen tai säilyttää vanha kone Kun hankitaan uusi kone periodin i alussa ja myydään se periodin j alussa, siitä aiheutuu kustannus c ij Tavoite: Määrää, milloin kone vaihdetaan, jotta kokonaiskustannukset minimoituvat 15
Solmut kuvaavat periodeja 1,..., n + 1 Kaari (i, j) tarkoittaa, että kone hankitaan periodin i alussa ja myydään periodin j alussa Jokaiseen kaareen (i, j) liitetään vastaava kustannus c ij (= kaaren pituus) 16
1 2 3 4 5 Tehtävä: Etsi lyhin reitti solmusta 1 solmuun n + 1 17
Toimintaverkko Projektissa on n osatehtävää Osatehtävät on suoritettava tiettyjen sääntöjen mukaisessa järjestyksessä Osatehtävän i suoritusaika on t i Tavoite: Määrää osatehtävien suoritusjärjestys siten, että kokonaissuoritusaika minimoituu 18
s i = osatehtävän i aloitusaika Solmut kuvaavat osatehtäviä Solmu 0 on projektin aloitusosatehtävä, solmu n + 1 lopetusosatehtävä Kaari (i, j) tarkoittaa, että osatehtävä i on saatava valmiiksi ennen osatehtävän j aloittamista Jokaiseen kaareen (i, j) liitetään rajoite s j s i + t i 19
0 1 2 3 4 5 6 Tehtävä: Ratkaise min s n+1 s 0 kun s j s i + t i (i, j) A 20
Tavallisesti kuitenkin toimintaverkko kuvataan seuraavasti: Solmut kuvaavat osatehtävien alku- ja lopputapahtumia Kaaret kuvaavat osatehtäviä Jokaiseen kaareen liitetään osatehtävän kesto (= kaaren pituus) Kaikkien tiettyyn solmuun päättyvien osatehtävien täytyy olla suoritettu ennen kuin mikään kyseisestä solmusta alkava osatehtävä voidaan aloittaa Tehtävä: Etsi pisin polku ensimmäisestä solmusta viimeiseen solmuun 21
Graafien ja verkkojen tietorakenteita Naapurimatriisit Insidenssimatriisit Haara- ja kaarilistat Naapurilistat 22
1 2 3 4 5 Naapurimatriisi, suuntaamaton graafi: HUOM: Symmetrinen 1 2 3 4 5 1 0 1 1 0 0 2 1 0 0 1 1 3 1 0 0 1 1 4 0 1 1 0 1 5 0 1 1 1 0 23
1 2 3 4 5 Naapurimatriisi, suunnattu graafi: 1 2 3 4 5 1 0 1 1 0 0 2 0 0 0 0 1 3 0 0 0 1 0 4 0 1 0 0 1 5 0 0 1 0 0 24
1 2 3 4 5 Insidenssimatriisi, suuntaamaton graafi: (1,2) (1,3) (2,4) (2,5) (3,4) (3,5) (4,5) 1 1 1 0 0 0 0 0 2 1 0 1 1 0 0 0 3 0 1 0 0 1 1 0 4 0 0 1 0 1 0 1 5 0 0 0 1 0 1 1 HUOM: Täysin unimodulaarinen 25
1 2 3 4 5 Insidenssimatriisi, suunnattu graafi: (1,2) (1,3) (2,5) (3,4) (4,2) (4,5) (5,3) 1 1 1 0 0 0 0 0 2 1 0 1 0 1 0 0 3 0 1 0 1 0 0 1 4 0 0 0 1 1 1 0 5 0 0 1 0 0 1 1 HUOM: Täysin unimodulaarinen 26
1 6 12 2 2 4 3 2 5 4 7 5 Haaralista, suuntaamaton verkko: Päätesolmu Päätesolmu Pituus (1,2) 1 2 6 (1,3) 1 3 12 (2,4) 2 4 2 (2,5) 2 5 4 (3,4) 3 4 2 (3,5) 3 5 5 (4,5) 4 5 7 27
1 6 12 2 2 2 4 5 3 4 7 5 Kaarilista, suunnattu verkko: Alkusolmu Loppusolmu Pituus (1,2) 1 2 6 (1,3) 1 3 12 (2,5) 2 5 4 (3,4) 3 4 2 (4,2) 4 2 2 (4,5) 4 5 7 (5,3) 5 3 5 28
1 2 3 4 5 Naapurilista, suuntaamaton graafi: Naapurisolmut 1 2 3 2 1 4 5 3 1 4 5 4 2 3 5 5 2 3 4 29
1 2 3 4 5 Naapurilista, suunnattu graafi: Naapurisolmut (lähtevät kaaret) 1 2 3 2 5 3 4 4 2 5 5 3 Naapurisolmut (tulevat kaaret) 1 2 1 4 3 1 5 4 3 5 2 4 30
Graafin tai verkon virittävä puu Aligraafi: Graafi, jossa on mukana osa (tai kaikki) solmuista ja osa (tai kaikki) haaroista Virittävä aligraafi: Aligraafi, jossa on mukana kaikki solmut Yhtenäinen virittävä aligraafi: Virittävä aligraafi, joka on yhtenäinen Minimaalinen yhtenäinen virittävä aligraafi: on mukana mahdollisimman vähän haaroja Yhtenäinen virittävä aligraafi, jossa 31
Puu: Graafi, joka on yhtenäinen ja renkaaton Yhtenäisen graafin minimaalinen yhtenäinen virittävä aligraafi on puu = Graafin virittävä puu (Verkon virittävä puu vastaavasti) Graafi on yhtenäinen, jos sillä on olemassa virittävä puu 32
Esimerkki Tiedetään, ketkä kylän asukkaista keskustelevat keskenään Tavoite: Selvitä, saavuttaako juoru kaikki kylän asukkaat Solmut kuvaavat asukkaita Haara (i, j) tarkoittaa, että asukkaat i ja j keskustelevat keskenään Tehtävä: Tutki, onko graafilla virittävää puuta 33
Esimerkki Rakennetaan kaapeliyhteyksiä eri kaupunkien välille Jokaisen kaupungin on oltava mukana kaapeliverkossa Kun rakennetaan yhteys kaupunkien i ja j välille, siitä aiheutuu kustannus c ij Tavoite: Määrää rakennettavat kaapeliyhteydet siten, että kokonaiskustannukset minimoituvat 34
Solmut kuvaavat kaupunkeja Haara (i, j) tarkoittaa, että kaupunkien i ja j välille voitaisiin rakentaa kaapeliyhteys Jokaiseen haaraan (i, j) liitetään vastaava kustannus c ij (= haaran pituus) Tehtävä: Etsi verkon virittävä puu, jonka kokonaispituus on mahdollisimman pieni 35
Virittävän puun etsiminen Aluksi puu on tyhjä, jokainen solmu muodostaa oman komponenttinsa ja kaikki haarat (tai kaaret) ovat tutkimattomia. 1. Jos tutkimattomia haaroja ei ole jäljellä, niin lopeta. Muuten valitse jokin haara ja merkitse se tutkituksi. 2. Jos valitun haaran molemmat päätesolmut kuuluvat samaan komponenttiin, jatka kohdasta 1. Muuten lisää haara puuhun ja yhdistä päätesolmujen komponentit samaksi komponentiksi. 3. Jos jäljellä on vain yksi komponentti, niin lopeta. Muuten jatka kohdasta 1. 36
Jos algoritmin päättyessä jäljellä on vain yksi komponentti, virittävä puu on löytynyt Jos halutaan löytää verkon lyhin virittävä puu, niin haarat valitaan pituuden mukaan kasvavassa järjestyksessä Jos halutaan löytää verkon pisin virittävä puu, niin haarat valitaan pituuden mukaan laskevassa järjestyksessä 37
Lyhimmät polut Lyhimpien polkujen tehtäviä: Etsi lyhin polku kahden solmun välillä Etsi lyhimmät polut jostain solmusta verkon kaikkiin muihin solmuihin Etsi lyhimmät polut verkon kaikkien solmujen välillä Seuraavassa oletetaan, että verkko on suunnattu, yhdistetty ja kaarien pituudet ovat kokonaislukuja 38
Esimerkki Pakkausongelma: max a 1 x 1 + + a n x n kun w 1 x 1 + + w n x n W x 1,..., x n N Vastaava lyhimmän polun tehtävä: Solmut 0,1,..., W Jokaista tavaraa j kohti kaaret (i, i + w j ), i = 0,1,..., W w j, joiden pituus on a j Lisäksi kaaret (i, i + 1), i = 0,1,..., W 1, joiden pituus on 0 (vastaavat puutemuuttujaa) Tehtävä: Etsi lyhin polku solmusta 0 solmuun W 39
Lyhimpien etäisyyksien puu Lyhimpien etäisyyksien puu: Sellainen verkon virittävä puu, jossa polut juurisolmusta s puun muihin solmuihin ovat samat kuin verkon lyhimmän etäisyyden polut solmusta s verkon muihin solmuihin Olkoon s = i 1 i 2 i p = t lyhin polku solmusta s solmuun t = s = i 1 i 2 i j on lyhin polku solmusta s solmuun i j kaikilla j = 2,..., p 1 = On aina olemassa lyhimpien etäisyyksien puu 40
Lyhimmät polut yhdestä lähtösolmusta alkaen Solmuihin liitetään tunnuksia (etäisyys lähtösolmusta, solmun edeltäjäsolmu, jne.) Tunnukset voivat olla väliaikaisia tai lopullisia Väliaikaisia tunnuksia muutetaan iteratiivisesti Tunnuksen asettavat menetelmät: Joka iteraatiolla yksi väliaikainen tunnus kiinnitetään lopulliseksi Tunnusta korjaavat menetelmät: Kaikki väliaikaiset tunnukset kiinnitetään kerralla lopullisiksi sitten, kun muutoksia ei enää voi tehdä 41
Dijkstran menetelmä Tunnuksen asettava menetelmä Oletus: Kaarien pituudet d ij ovat ei-negatiivisia Tunnukset: d(i) = jonkin polun pituus lähtösolmusta s solmuun i e(i) = solmun i edeltäjäsolmu kyseisellä polulla Solmut jaetaan kahteen ryhmään: P = {solmut, joiden tunnukset ovat lopullisia} T = {solmut, joiden tunnukset ovat väliaikaisia} 42
1. Aluksi P =, T = N, d(s) = 0 ja d(i) = kaikilla i T \ {s}. 2. Jos P = N, niin lopeta. Muuten valitse jokin solmu i T siten, että d(i) = min{d(j) j T }. Kaikilla j T siten, että on olemassa (i, j) A tee seuraavaa: Jos d(i) + d ij < d(j), niin aseta d(j) = d(i) + d ij ja e(j) = i. 3. Kiinnitä solmun i tunnukset lopullisiksi, ts. aseta P = P {i} ja T = T \ {i}. Jatka kohdasta 2. 43
Algoritmin päätyttyä: Lyhin etäisyys lähtösolmusta s solmuun i on d(i) Vastaava polku on i e(i) e(e(i)) s Jos halutaan löytää lyhin polku lähtösolmusta s johonkin tiettyyn solmuun t, algoritmi voidaan lopettaa, kun solmun t tunnukset on kiinnitetty lopullisiksi 44
Solmuja n kpl Yhdellä iteraatiolla valitaan yksi solmu, jonka tunnukset ovat väliaikaisia = n operaatiota Yhdellä iteraatiolla kiinnitetään yhden solmun tunnukset lopullisiksi = n iteraatiota = Algoritmin suoritusaika (laskennallinen vaativuus) on O(n 2 ) 45
Dialin toteutustapa: Solmun valintaan kuluvaa aikaa pienennetään pitämällä joukon T solmut lajiteltuina väliaikaisten tunnusten d(i) mukaan kasvavassa järjestyksessä Käytössä on joukko lokeroita, jotka on numeroitu 0,1,2,... Lokeroon k tallennetaan ne joukon T solmut, joilla d(i) = k (jos d(i) =, solmua ei tarvitse tallentaa) = Valittava solmu löytyy ensimmäisestä epätyhjästä lokerosta 46
Olkoon C pisimmän kaaren pituus = Jokaisen solmun lopullinen d(i) on pienempi kuin nc = nc + 1 lokeroa riittää varmasti Jokaisella iteraatiokierroksella on d(i) d(j) d(i) + C kaikilla j T siten, että d(j) = Vain lokerot d(i), d(i) + 1,..., d(i) + C ovat epätyhjiä = C + 1 lokeroa riittää 47
Optimaalisuusehdot Olkoot d ij kaarien (i, j) A pituudet (voivat olla myös negatiivisia) Oletetaan, että verkossa ei ole silmukkaa, jonka pituus on negatiivinen Etäisyystunnukset d(i) ovat lyhimpien polkujen etäisyyksiä lähtösolmusta s solmuihin i, jos ja vain jos d(j) d(i) + d ij (i, j) A 48
Silmukka, jonka pituus on negatiivinen: Olkoon C = {silmukan kaaret} ja (i,j) C d ij < 0 Oletetaan, että optimaalisuusehdot ovat voimassa = d(j) d(i) + d ij (i, j) C = d(i) d(j) + d ij 0 (i, j) C = = (i,j) C (i,j) C (d(i) d(j) + d ij ) 0 d ij 0 = Ristiriita = Optimaalisuusehdot eivät voi olla voimassa 49
Optimaalisuusehtoihin perustuva menetelmä Tunnusta korjaava menetelmä Oletus: Verkossa ei ole silmukkaa, jonka pituus on negatiivinen Tunnukset: d(i) = jonkin polun pituus lähtösolmusta s solmuun i e(i) = solmun i edeltäjäsolmu kyseisellä polulla Tunnukset kiinnitetään lopullisiksi vasta, kun algoritmi on päättynyt 50
1. Aluksi d(s) = 0 ja d(i) = kaikilla i N \ {s}. 2. Jos d(j) d(i) + d ij kaikilla (i, j) A, niin lopeta. Muuten valitse jokin kaari (i, j) siten, että d(j) > d(i) + d ij ja tee seuraavaa: Aseta d(j) = d(i) + d ij ja e(j) = i. 3. Jatka kohdasta 2. Algoritmin päätyttyä: Lyhin etäisyys lähtösolmusta s solmuun i on d(i) Vastaava polku on i e(i) e(e(i)) s 51
Järjestys, jossa kaaret käydään läpi kullakin iteraatiolla, vaikuttaa algoritmin suoritusaikaan Huono järjestys (esim. satunnainen) = Suoritusaika voi olla eksponentiaalinen Järkevä järjestys (esim. aina samassa järjestyksessä) = Suoritusaika saadaan polynomiseksi 52
Algoritmin nopeuttaminen: Käydään kaaret läpi aina samassa järjestyksessä, siten että samasta solmusta lähtevät kaaret ovat aina peräkkäin Olkoon solmu i siten, että jollain iteraatiolla ehdot d(j) d(i) + d ij j siten että (i, j) A ovat voimassa Jos solmun i tunnukset eivät muutu kyseisellä iteraatiolla = Samat ehdot ovat voimassa myös seuraavalla iteraatiolla = Kaaria (i, j) A ei tarvitse tutkia seuraavalla iteraatiolla 53
Lyhimmät polut kaikkien solmuparien välillä Käytetään edellisiä menetelmiä n kertaa: Määrätään lyhimmät polut jostain lähtösolmusta s kaikkiin muihin solmuihin Vaihdetaan lähtösolmuksi s jokin muu solmu ja toistetaan Jos kaikki kaarien pituudet ei-negatiivisia, voidaan käyttää Dijkstran menetelmää; muuten täytyy käyttää (esimerkiksi) optimaalisuusehtoihin perustuvaa menetelmää 54
Kaarien pituuksien muuntaminen Olkoon osa kaarien pituuksista negatiivisia, mutta verkossa ei ole silmukkaa, jonka pituus on negatiivinen Määrätään lyhimmät polut jostain lähtösolmusta s kaikkiin muihin solmuihin optimaalisuusehtoihin perustuvalla menetelmällä = d(j) d(i) + d ij kaikilla (i, j) A Asetetaan jokaiselle kaarelle uusi pituus d ij = d ij + d(i) d(j) = d ij 0 kaikilla (i, j) A 55
Olkoon k = i 0 i 1 i p = l jokin polku ja P = {polun kaaret} = (i,j) P d ij = (i,j) P (d ij + d(i) d(j)) = (i,j) P d ij + d(k) d(l) = Polun pituus muuttuu vakiolla d(k) d(l) = Kaikki solmujen k ja l väliset polut muuttuvat samalla vakiolla = Lyhimmät polut säilyvät muunnoksessa = Lyhimmät polut kaikista muista solmuista N \ {s} alkaen voidaan määrätä Dijkstran menetelmällä 56