Algoritmit 2 Luento 12 Ke 26.4.2017 Timo Männikkö
Luento 12 Rajoitehaku Kauppamatkustajan ongelma Lyhin virittävä puu Paikallinen etsintä Vaihtoalgoritmit Geneettiset algoritmit Simuloitu jäähdytys Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 2/33
Algoritmien suunnittelu Raa an voiman käyttö: Tutkitaan kaikki mahdolliset vaihtoehdot Nopeuttaminen: Rajataan pois vaihtoehdot, joiden joukosta ei voi enää löytyä parempaa ratkaisua Rajoitusheuristiikka: Säännöt, joiden avulla päätellään, miten rajaus tehdään Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 3/33
Rajoitehaku Käydään läpi kaikkien mahdollisten ratkaisujen muodostamaa ratkaisupuuta Jokaiselle uudelle osittaisratkaisulle lasketaan raja sille, miten hyviä ratkaisuja tätä osittaisratkaisua täydentämällä voidaan saavuttaa Jos aiemmin löydetty sallittu ratkaisu, joka on tätä rajaa parempi, tämän osittaisratkaisun täydennyksiä ei tarvitse tutkia Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 4/33
Kauppamatkustajan ongelma Suuntaamaton verkko G = (V, E) Solmuja (kaupunkeja) n kpl Solmujen väliset etäisyydet etäisyysmatriisissa d(i, j) Tehtävä: Etsi reitti, joka käy täsmälleen kerran jokaisessa solmussa ja jonka pituus on mahdollisimman pieni Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 5/33
Kauppamatkustajan ongelma Osittaisratkaisu: Jotkut tiet on valittu reittiin mukaan, joitain teitä on kielletty ottamasta mukaan Täydennetään osittaisratkaisua lisäämällä tai kieltämällä teitä yksi kerrallaan Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 6/33
Kauppamatkustajan ongelma Kaikille verkon reiteille on voimassa pituus = 1 2 1 2 (d(u, v) + d(v, w)) v V v V s.e. (u, v), (v, w) reitti min (d(u, v) + d(v, w)) u,w V s.e. u w (Summattavana on solmuun v liittyvien kahden lyhimmän tien pituuksien summa) Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 7/33
Kauppamatkustajan ongelma Rajoitusheuristiikka: Lasketaan e.o. alaraja kulloinkin tarkasteltavana olevalle osittaisratkaisulle, huomioiden tiet jotka on kielletty Jos osittaisratkaisun alaraja on suurempi (huonompi) kuin parhaan tähän mennessä löydetyn ratkaisun pituus, ei ratkaisupuun kyseistä haaraa tarvitse tutkia Seuraavaksi tutkittavaksi osittaisratkaisuksi kannattaa valita se, jolla alaraja on pienin Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 8/33
Algoritmien suunnittelu Paikallinen etsintä: Aloitetaan jostain tunnetusta (mahdollisesti satunnaisesta) ratkaisusta Parannetaan ratkaisua sopivilla paikallisilla muutoksilla Jatketaan kunnes ratkaisu ei enää parane Saadaan lokaali optimi Joskus saadaan myös globaali optimi Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 9/33
Lyhin virittävä puu Yhtenäinen, suuntaamaton verkko G Solmujen joukko N, teiden joukko E Jokaiseen tiehen (i, j) liittyy pituus l(i, j) Verkon virittävä puu on aliverkko, joka yhdistää verkon kaikki solmut ja jossa ei ole yhtään silmukkaa Virittävän puun pituus on siihen kuuluvien teiden pituuksien summa Tehtävä: Selvitä verkon lyhin virittävä puu Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 10/33
Lyhin virittävä puu Paikalliseen etsintään perustuva menetelmä: Valitaan jokin G:n virittävä puu T Toistetaan kunnes T :n pituus ei enää pienene: Lisätään T :hen jokin kaari sen ulkopuolelta, jolloin T :hen muodostuu sykli Poistetaan syklistä se kaari, jonka pituus on suurin, jolloin T on jälleen puu Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 11/33
Lyhin virittävä puu Voidaan osoittaa, että edellinen menetelmä johtaa globaaliin optimiin (todistus kuten Kruskalin menetelmälle, ks. Algoritmit 1) Lopetustestin vaativuus O(ne), missä e = kaarien lukumäärä Lisäksi pitäisi analysoida, montako muunnosta pahimmillaan tarvitaan ( Hitaampi kuin Kruskal) Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 12/33
Paikallinen etsintä Ratkaisun parantaminen naapurimenetelmällä: Etsitään nykyisen ratkaisun hyviä naapuriratkaisuja Mitä suurempi naapuriratkaisujen joukko, sitä parempia ratkaisuja saavutettavissa Mutta: Silloin naapuriratkaisujen joukon tutkimiseen kuluu enemmän aikaa Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 13/33
Paikallinen etsintä paikallinen etsintä { ratkaisu = jokin sallittu alkuratkaisu; while (parempi ratkaisu löytyy) { tutki nykyratkaisun naapuriratkaisut; if (löytyy parempi ratkaisu) ratkaisu = parempi ratkaisu; } } Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 14/33
Verkon reitit Suuntaamaton verkko Tunnetaan jokin verkon solmujen kautta kulkeva reitti Naapuriratkaisu: Jokin paikallisella muutoksella saatu sallittu reitti Tavoite: Löytää lyhyempi reitti Esimerkiksi kauppamatkustajan ongelma Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 15/33
Vaihtoalgoritmit Linin ja Kernighanin 2-vaihtoalgoritmi: Poistetaan kaksi kaarta, jotka eivät ole reitillä peräkkäin Lisätään kaksi uutta kaarta siten, että muodostuu sallittu reitti Jos muutos lyhentää reitin pituutta, se hyväksytään Mahdollisesti tutkitaan useampia vaihtoja ja hyväksytään niistä paras Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 16/33
Vaihtoalgoritmit 2-vaihto: Poistetaan (a, b) ja (c, d) Lisätään (a, c) ja (b, d) Jos a d b c d(a, c) + d(b, d) < d(a, b) + d(c, d) niin muutos lyhentää reitin pituutta Huom: Osa reitistä kulkee nyt päinvastaiseen suuntaan Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 17/33
Vaihtoalgoritmit Linin ja Kernighanin 3-vaihtoalgoritmi: Poistetaan ja lisätään vastaavasti kolme kaarta Yksi parhaita heuristiikkoja kauppamatkustajan ongelmalle Huom: Kaarien lisäys ei yksikäsitteinen Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 18/33
Vaihtoalgoritmit Yleinen k-vaihtoalgoritmi: Poistetaan ja lisätään k kaarta Kaarivaihtoehtojen lukumäärä Θ(n k ) Ei yleensä kannata käyttää, jos k > 3 Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 19/33
Geneettiset algoritmit Tarkastellaan ratkaisuehdokkaiden joukkoa populaationa Muodostetaan uusi populaatio: Kahden ratkaisun risteytyksillä Yksittäisen ratkaisun mutaatioilla Suositaan hyviä ratkaisuja, estetään huonojen ratkaisujen lisääntyminen Ratkaisu esitetään usein bittijonona (tai merkkijonona tai kokonaislukujonona) Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 20/33
Geneettiset algoritmit 1. Muodostetaan k:n ratkaisun populaatio R 2. Toistetaan niin kauan kuin saadaan parannettua ratkaisua riittävästi: Valitaan R:stä m kpl kahden alkion osajoukkoja Risteytetään osajoukkojen ratkaisuparit Tehdään uusille ratkaisuille mutaatio pienellä todennäköisyydellä Joukko S Valitaan R:stä ja S:stä uusi k:n ratkaisun populaatio Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 21/33
Esimerkki: Kauppamatkustajan ongelma Kauppamatkustajan ongelma, 9 solmua Esitetään reitit kokonaislukujonoina Kahden reitin risteytys: Valitaan satunnaisesti yhtenäinen pätkä reittiä, joka vaihtaa paikkaa vanhemmissa Muilla reitin osilla säilytetään järjestys ja paikka niin monelle solmulle kuin mahdollista Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 22/33
Esimerkki: Kauppamatkustajan ongelma Vaihdettavat osat pystyviivojen välissä: 1 2 3 4 5 6 7 8 9 4 5 2 1 8 7 6 9 3 Solmut 2, 3 ja 9 pysyvät paikoillaan:? 2 3 1 8 7 6? 9?? 2 4 5 6 7 9 3 Muut solmut muutetaan vastaavasti: 4 2 3 1 8 7 6 5 9 1 8 2 4 5 6 7 9 3 Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 23/33
Geneettiset algoritmit Yleensä risteytyksiä kannattaa suosia, valintatodennäköisyys 80 90 % Mutaatioiden määrä kannattaa pitää alhaisena, 0.5 1.0 % Hyviä tuloksia suhteellisen pienillä populaatiolla, 20 30 kpl Ratkaisut valitaan hyvyyden mukaan: Joko ratkaisujen hyvyyden todellinen arvo Tai vain niiden keskinäinen järjestys Eliittiluokka: Ratkaisut, jotka valitaan aina mukaan Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 24/33
Esimerkki: Kapsäkkiongelma Esitetään ratkaisu bittijonona: i:s bitti on joko 0 tai 1 sen mukaan, onko tavara i valittu mukaan kapsäkkiin Muodostetaan (satunnaisesti) k kpl alkuratkaisuja: Jos alkuratkaisu ei sallittu (yhteispaino ylittää arvon W ), vaihdetaan satunnaisesti jokin bitti 1:stä 0:ksi Tarvittaessa toistetaan Ratkaisun hyvyysarvona käytetään vastaavan kapsäkin arvoa Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 25/33
Esimerkki: Kapsäkkiongelma Risteytys: Valitaan risteytettävät ratkaisut todennäköisyydellä, joka on suoraan suhteessa ratkaisujen hyvyyteen Generoidaan satunnaisesti kokonaisluku m väliltä 0,..., n Vaihdetaan risteytettävien ratkaisujen m ensimmäistä bittiä keskenään Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 26/33
Esimerkki: Kapsäkkiongelma Mutaatio: Käydään läpi ratkaisun bitit ja pienellä todennäköisyydellä käännetään bitti Uuden populaation valinta: Uusia ratkaisuja p %, loput vanhoja ratkaisuja Lopetusehto: Lopetetaan, jos populaation ratkaisuista 90 %:lla sama hyvyys Tai jos populaatioita muodostettu jo maksimimäärä Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 27/33
Paikallinen etsintä Ratkaisun parantaminen naapurimenetelmällä: Etsitään nykyisen ratkaisun hyviä naapuriratkaisuja Mitä suurempi naapuriratkaisujen joukko, sitä parempia ratkaisuja saavutettavissa Tutkittavan joukon kokoa voidaan pienentää rajoitusheuristiikoilla Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 28/33
Paikallinen etsintä Juuttuminen lokaaliin minimiin: Naapuriratkaisut lähellä nykyistä ratkaisua Jos ollaan jo lokaalissa minimissä, ei päästä siitä pois, vaikka kauempana olisi parempi (mahdollisesti globaali) minimi Simuloitu jäähdytys: Sallitaan satunnaisesti myös siirtyminen huonompiin ratkaisuihin Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 29/33
Simuloitu jäähdytys Minimoidaan kustannusta c Nykyinen ratkaisu x, uusi ratkaisu x Ratkaisujen kustannusten erotus d = c(x ) c(x) Satunnaisuutta säätelee lämpötila T Siirtyminen huonompaan ratkaisuun hyväksytään todennäköisyydellä e d/t, jos d > 0 Jäähdytys: T :n arvoa alennetaan arvosta T alku kohti arvoa T loppu 0 Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 30/33
Esimerkki: Kauppamatkustajan ongelma Naapuriratkaisu 2-vaihdolla: Poistetaan kaksi kaarta Lisätään kaksi kaarta Uusi reitti Siirtyminen naapuriratkaisuun: Erotus d = reitin pituuden muutos Jos d 0, hyväksytään naapuriratkaisu Jos d > 0, generoidaan satunnaisluku väliltä [0, 1] ja hyväksytään naapuriratkaisu, jos e d/t satunnaisluku Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 31/33
Simuloitu jäähdytys T = Talku; x = satunnainen alkuratkaisu; while (T > Tloppu) { while (lämpötilaa T ei vielä tutkittu) { x = satunnainen x:n naapuriratkaisu; d = c(x ) - c(x); if (d <= 0) x = x ; else if (exp(-d/t) >= random(0,1)) x = x ; } T = alenna(t); } return x; Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 32/33
Simuloitu jäähdytys Algoritmin yksityiskohdat tehtäväkohtaisia Tietyin edellytyksin voidaan osoittaa: Jos lämpötilaa T lasketaan riittävän hitaasti, globaali optimi löytyy todennäköisyydellä, joka lähestyy ykköstä Käytännössä voi antaa hyviä tuloksia myös nopeammalla jäähdytyksellä Algoritmit 2 Kevät 2017 Luento 12 Ke 26.4.2017 33/33