Kokeellinen algoritmiikka (3 ov) syventäviä opintoja edeltävät opinnot: ainakin Tietorakenteet hyödyllisiä opintoja: ASA, Algoritmiohjelmointi suoritus harjoitustyöllä (ei tenttiä) Kirjallisuutta: Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms. http://www.research.att.com/~dsj/papers/experguide.pdf Moret & Shapiro, Algorithms and Experiments: The New (and Old) Methodology. Journal of Universal Computer Science 7, 5 (2001), 434-446. Moret, Towards a Discipline of Experimental Algorithmics, DIMACS Series in Discrete Mathematics and Theoretical Computer Science. http://www.cs.unm.edu/~moret/dimacs_algorithmics.ps
Alan lähteitä: ACM Journal of Experimental Algorithms (http://www.acm.org/dl) Konferensseja: SODA ACM-SIAM Symposium on Discrete Algortims (http://www.acm.org/dl) WAE Workshop on Algorithm Engineering (LNCS) ALENEX Workshop on Algorithm Engineering and Experimentation (LNCS) Yksittäisiä artikkeleita eri lehdissä ja konferensseissa Kurssin suorittaminen: johonkin algoritmiin tutustuminen (tai uuden kehittäminen) kirjallisuusselvityksen tekeminen ko. algoritmista algoritmin kokeellinen tutkiminen jossain tilanteessa testien raportointi artikkelina yksin / kaksin oma aihe / annettu aihe
Miten algoritmeja voi analysoida? 1. Asymptoottiset ylärajat Miten algoritmin resurssitarve käyttäytyy, kun tapauksen koko kasvaa? + riippumaton toteutuksesta, sillä resurssitarve ilmaistaan jonkun tapaukseen liittyvän suureen avulla (koodauksessa tarvittavien bittien määrä, tapauksen luonnollinen mittayksikkö [vrt. graafialgoritmit ja solmujen lukumäärä]) - asymptoottinen tulos ei välttämättä kerro mitään tapauksista, jotka ovat mielenkiintoisia sovellusten kannalta n
- asymptoottisesti tehokas voi olla hidas pienillä syötteillä - asymptoottinen tulos kertoo vain kasvuvauhdin, ei vakiokertoimien suuruutta kokeellista tutkimusta tarvitaan vakiokertoimien selvittämiseen ja käyttäytymisen selvittämiseen sovellusten kannalta mielenkiintoisissa instansseissa
2. Keskimääräisen tapauksen analyysi vaatia tietoa tai oletuksia syötteiden jakaumista usein matemaattisesti vaativia 3. Tehtyjen operaatioiden tarkka lukumäärä (keskimäärin, pahimassa tapauksessa) Knuth: MIXAL-kieli 4. Approksimointialgoritmien hyvyys normaalit resurssivaatimukset ratkaisun hyvyys: kuinka lähelle optimia päästään suhteellinen virhe ε-approksimointialgoritmit PTAS
5. Kokeellinen analyysi Kysymyksiä: mitä testataan/mihin verrataan? miten testisyötteet valitaan? mitä mitataan? miten tuloksia analysoidaan? miten tulokset raportoidaan?
Miten algoritmeja Olli Nevalaisen mukaan pitää esitellä? 1. Idea sanallisena. Algoritmin toimintaperiaate kuvataan aivan yleisin termein. 2. Pseudokielinen kuvaus. Tekstissä kuvataan käytetyt merkinnät, syötteet, tulosteet ja sisäiset muuttujat. 3. Pseudokielinen algoritmi. Luonnollisen kielen lauseita ohjataan tavanomaisilla ohjelmointikielen kontrollirakenteilla (if then else, while do, repeat until, jne.); käytetään muuttujia, sijoituslauseita yms. ohjelmointikielten ilmauksia; myös matemaattisia merkintöjä voi käyttää abstraktiotason nostamiseksi (summalauseke vs. silmukka). 4. Koodi jollain yleisesti käytetylllä kielellä (esim. liitteenä tai muuten saatavilla). 5. Algoritmin toimintaperiaatteen esittely kommenttien avulla. Periaatteen läpikäynti aliohjelmittain tai muuten järkeviin kokonaisuuksiin jaettuna. 6. Algoritmin toimintaperiaatteen esittely esimerkkien avulla. Esimerkkien on oltava tarpeeksi yksinkertaisia, mutta toisaalta tarpeeksi yleisiä (!). Mielenkiintoisia erikoistapauksia voi käsitellä erikseen. 7. Algoritmin oikeellisuustodistus. (Ei aina tarpeen teoreemojen muodossa.) 8. Algoritmin hyvyyden arviointi. (Tämän kurssi aihe!)
Johnson, A theoretician s guide to the experimental analysis of algorithms näkökulma 1: teoreettisen algorimtitutkimuksen täydentäminen (ei niinkään algoritmin etsiminen tiettyyn sovellukseen) näkökulma 2: kokeellisen tutkimuksen tulosten raportoiminen artikkelina kokeellisen algoritmitutkimuksen tyyppejä 1. Sovellustutkimus. Parhaan mahdollisen algoritmin etsintä tiettyyn sovellukseen. 2. Kuka keksii parhaan algoritmin? (a horse race paper) Algoritmin testaaminen tunnettujen benchmark-tapausten avulla. (esim. TSP) 3. Vaikean keskimääräisen tapauksen analyysin korvaaminen testeillä (experimental average-case paper) 4. Algorimin ominaisuuksien tarkempi tutkiminen testien avulla. (experimental analysis paper)
Johnsonin periaatteet: 1. Tee testejä, joilla on uutuusarvoa. 2. Perusta työsi kirjallisuuteen. 3. Tee testejä, jotka mahdollistavat yleiset johtopäätökset. 4. Laadi testisi tehokkaiksi. 5. Käytä tarpeeksi tehokkaita ratkaisuja. 6. Mahdollista testiesi uudelleen ajaminen ja suunnittele testit niin, että tulokset ovat riippumattomia testiympäristöstä. 7. Tee testiesi tulokset vertailukelpoisiksi toisille tutkijoille. 8. Kerro testeistäsi tarpeeksi tarkasti. 9. Tee tuloksista perusteltuja johtopäätöksiä ja etsi selityksiä testien tuloksille. 10. Esitä tuloksesi havainnollisesti.