Johnsonin periaatteet:

Samankaltaiset tiedostot
Johnson, A Theoretician's Guide to the Experimental Analysis of Algorithms.

Algoritmit 1. Luento 2 Ke Timo Männikkö

Harjoitus 7: NCSS - Tilastollinen analyysi

Identifiointiprosessi

Tilastollinen testaus. Vilkkumaa / Kuusinen 1

1. Tilastollinen malli??

pitkittäisaineistoissa

Ohjelmoinnin perusteet, syksy 2006

Eläinlääketieteen lisensiaatin tutkielma Seminaarityöskentelyohjeet

Identifiointiprosessi

Rahastosalkun faktorimallin rakentaminen

Algoritmit 1. Luento 1 Ti Timo Männikkö

C.C. McGeoch, Toward an experimental method for algorithm simulation. algorithm simulation = algoritmin testaus, experimental algorithmics

4 Tehokkuus ja algoritmien suunnittelu

Hyvin suunniteltu on puoliksi tehty. Tutkimussuunnitelma. Miten se tehdään?

Algoritmit 1. Luento 10 Ke Timo Männikkö

Määrittelydokumentti

Esimerkkejä vaativuusluokista

Ohjelmiston toteutussuunnitelma

Algoritmit 2. Luento 1 Ti Timo Männikkö

Preference Programming viitekehys: epätäydellisen preferenssi-informaation elisitointi ja mallintaminen, dominanssi

Kandidaatintutkielma, ryhmän ohjaus Teemu Kerola. Referaatti

Algoritmit 1. Luento 3 Ti Timo Männikkö

Alkukartoitus Opiskeluvalmiudet

Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014

Automaattinen yksikkötestaus

Päivitetty Text Mining -käyttöopas

Yleistä tietoa kokeesta

Estimointi. Estimointi. Estimointi: Mitä opimme? 2/4. Estimointi: Mitä opimme? 1/4. Estimointi: Mitä opimme? 3/4. Estimointi: Mitä opimme?

Vinkkejä hyvään graduun. Janne Hukkinen Helsingin yliopisto

Tilastollisen analyysin perusteet Luento 8: Lineaarinen regressio, testejä ja luottamusvälejä

Aineistoista. Laadulliset menetelmät: miksi tarpeen? Haastattelut, fokusryhmät, havainnointi, historiantutkimus, miksei videointikin

Harjoitustyön testaus. Juha Taina

2. TILASTOLLINEN TESTAAMINEN...

Mat Lineaarinen ohjelmointi

r = n = 121 Tilastollista testausta varten määritetään aluksi hypoteesit.

58160 Ohjelmoinnin harjoitustyö

Osakesalkun optimointi. Anni Halkola Turun yliopisto 2016

Johdatus tilastotieteeseen Estimointi. TKK (c) Ilkka Mellin (2005) 1

811312A Tietorakenteet ja algoritmit I Johdanto

Jatkuvat satunnaismuuttujat

ENG3043.Kand Kandidaatintyö ja seminaari aloitusluento Tutkimussuunnitelman laatiminen

Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Käsitteistä. Reliabiliteetti, validiteetti ja yleistäminen. Reliabiliteetti. Reliabiliteetti ja validiteetti

Suoritusraportointi: Loppuraportti

Harjoitusten 4 vastaukset

f(n) = Ω(g(n)) jos ja vain jos g(n) = O(f(n))

Arkkitehtuurien tutkimus Outi Räihä. OHJ-3200 Ohjelmistoarkkitehtuurit. Darwin-projekti. Johdanto

Tietorakenteet ja algoritmit - syksy

Tutkimuksen alkuasetelmat

pitkittäisaineistoissa

Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti

Tieteellisen kirjoittamisen kurssi, kevät Teemu Kerola. Referaatti. Valitse tutkielman aihepiiriin sopiva artikkeli

Mat Operaatiotutkimuksen projektityöseminaari

MS-A0501 Todennäköisyyslaskennan ja tilastotieteen peruskurssi

Luottamisvälin avulla voidaan arvioida populaation tuntematonta parametria.

3.6 Su-estimaattorien asymptotiikka

PSY181 Psykologisen tutkimuksen perusteet, kirjallinen harjoitustyö ja kirjatentti

TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit

Harjoitustehtävät ja ratkaisut viikolle 48

1.Työpaikan työntekijöistä laaditussa taulukossa oli mm. seuraavat rivit ja sarakkeet

Tutkimusmenetelmät-kurssi, s-2004

Aineistokoko ja voima-analyysi

Luottamisvälin avulla voidaan arvioida populaation tuntematonta parametria.

f (28) L(28) = f (27) + f (27)(28 27) = = (28 27) 2 = 1 2 f (x) = x 2

Väitöskirjan kirjoittaminen ja viimeistely

Algoritmit 2. Luento 13 Ti Timo Männikkö

Näistä standardoiduista arvoista laskettu keskiarvo on nolla ja varianssi 1, näin on standardoidulle muuttujalle aina.

Sovellettu todennäköisyyslaskenta B

Teemu Kerola Kandidaatintutkielma Kevät 2017 (Tieteellisen kirjoittamisen kurssi, tiki)

Tutkimustiedonhallinnan peruskurssi

Tietojen arviointi ja raportointi: (yksityiskohtaisen) tutkimustiivistelmän laatimisohjeet

FoA5 Tilastollisen analyysin perusteet puheentutkimuksessa. 9. luento. Pertti Palo

MATEMATIIKAN KOE, LYHYT OPPIMÄÄRÄ HYVÄN VASTAUKSEN PIIRTEITÄ

9.-luokkalaisen kulttuurikansio

Algoritmit 2. Luento 12 To Timo Männikkö

3 Yleistä estimointiteoriaa. Olemme perehtuneet jo piste-estimointiin su-estimoinnin kautta Tässä luvussa tarkastellaan piste-estimointiin yleisemmin

MS-C2103 Koesuunnittelu ja tilastolliset mallit (5 op)

Järvitesti Ympäristöteknologia T571SA

TAMPEREEN TEKNILLINEN YLIOPISTO

H7 Malliratkaisut - Tehtävä 1

Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen

Näistä standardoiduista arvoista laskettu keskiarvo on nolla ja varianssi 1, näin on standardoidulle muuttujalle aina.

Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä

Mittausjärjestelmän kalibrointi ja mittausepävarmuus

T Informaatiotekniikan seminaari: Kombinatorinen Optimointi

DOORS 7.1 Test Tracking Toolkit

JULKAISUILTAPÄIVÄ II ( ) Amanuenssi Heli Niskanen Humanistinen tiedekunta, palvelukeskus

Mittaustulosten tilastollinen käsittely

3 Lineaariset yhtälöryhmät ja Gaussin eliminointimenetelmä

NÄYTÖN ARVIOINTI: SYSTEMAATTINEN KIRJALLISUUSKATSAUS JA META-ANALYYSI. EHL Starck Susanna & EHL Palo Katri Vaasan kaupunki 22.9.

Regressioanalyysi. Vilkkumaa / Kuusinen 1

TUTKIMUSAINEISTON ANALYYSI. LTKY012 Timo Törmäkangas

Jos Q = kysytty määrä, Q = kysytyn määrän muutos, P = hinta ja P = hinnan muutos, niin hintajousto on Q/Q P/P

Kliininen arviointi ja kliininen tieto mikä riittää?

Odotusarvoparien vertailu. Vilkkumaa / Kuusinen 1

Ohjelmoinnin perusteet Y Python

Sovellettu todennäköisyyslaskenta B

TIE Ohjelmistojen testaus 2015 Harjoitustyö Vaiheet 1 ja 2. Antti Jääskeläinen Matti Vuori

BM20A5840 Usean muuttujan funktiot ja sarjat Harjoitus 7, Kevät 2018

Transkriptio:

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.

1. Tee testejä, joilla on uutuusarvoa. Kukaan ei halua lukea tylsistä ja merkityksettömistä testeistä! Testien mielenkiintoisuus lisääntyy, jos algoritmilla on selviä sovellusmahdollisuuksia (vaikkei artikkeli olisikaan tarkoitettu markkinoimaan algoritmia johonkin tiettyyn sovellustilanteeseen). Sellaisen algoritmin testaaminen, jota ei voi soveltaa mihinkään, on järjetöntä! Sovellusten olemassaolo takaa myös sen, että testiaineistoa on saatavilla. Oleellinen kysymys: voisiko testattava algoritmi korvata nykyisin käytettävät algoritmit jossain sovelluksessa? Koska asymptoottinen analyysi ei tämän kysymykseen voi vastata (ainakaan aina), tarvitaan testejä ym. kysymyksen selvittämiseen. Sanotaan, että algortmi on alisteinen, jos se on aina hitaampi kuin joku tunnettu algoritmi (tai approksimointialgoritmien tapauksessa tuottaa aina huonompia approksimaatioita).

Miten voi osoittaa, että algoritmi on alisteinen? (Huom! Samat kysymykset pätevät muihinkin kokeista tehtyihin yleistyksiin.) Oletko varmasti testannut algoritmia kaikilla järkevillä tapaustyypeillä? Onko ajoympäristön vaikutus eliminoitu? Onko algoritmit varmasti implementoitu oikein? Pätevätkö tulokset kaikkiin parametrikombinaatioihin? Onko alisteisen algoritmin esittelyssä mitään järkeä? Vältä alisteisten algoritmien testaamista tutustumalla huolellisesti kirjallisuuteen. Lue lähteet, joihin viittaat! Jos uusi algoritmi paljastuu alisteiseksi, tilanne ei ole hyvä, mutta... Alisteinen, mutta yksinkertainen algoritmi voi olla mielenkiintoinen. Tilanne voi olla mielenkiintoinen, jos alisteinen algoritmi käyttää sellaista yleistä suunnitteluperiaatetta tai tietorakennetta, joka voi olla sovellettavissa moneen muuhun tilanteeseen. Alisteiseksi tiedetyn algoritmin tarkempi karakterisointi voi olla mielenkiintoista osana laajempia testejä, joissa on mukana muitakin kuin alisteisia algoritmeja. Tunnetun ja paljon käytetyn algoritmin osoittaminen alisteiseksi voi olla mielenkiintoista.

Tulosten uutuusarvoa lisäävät niiden yleisyys, relevanttisuus ja luetettavuus. Tuloksen Algoritmi A on parempi kuin algoritmi B luetettavuutta lisäävät testit, jotka kertovat, mistä A:n paremmuus johtuu Tutki oleellisia asioita. Tyypillisiä virheitä: - testejä tehdään vain muutamilla parametrikombinaatioilla - testaa vasta algoritmin lopullista, tehokasta versiota - aloita testit vasta sitten, kun olet päättänyt koko testimateriaalisi Mieti ensin, tee vasta sitten! Mieti esimerkiksi seuraavia asioita: - Mihin kysymyksiin haluat testeilläsi vastauksen? - Ovatko testattavat algoritmit oikein implementoitu? - Ovat testit tarpeeksi kattavat? - Kuinka pieniä ja kuinka suuria testitapauksia kannattaa ottaa mukaan? Ennen varsinaisia testejä - kerää suuntaa-antavaa tietoa algoritmin käyttäytymisestä - kiinnitä erityistä huomiota poikkeukselliseen tuloksiin (anomalioihin)

Johnsonin ohjelma : - puolet testausajasta alustavia testejä, joiden tarkoituksena on selvittää, mitä kannattaa tutkia - hiotaan algoritmien toteutusta, päätetään, mitä yritetään selvittää, ja päätetään, mitä testiajoja ajetaan - ajetaan testit - analysoidaan tulokset Milloin testejä on tehty tarpeeksi??

Millaisilla kysymyksillä ja vastauksilla on uutuusarvoa? - Miten toteutuksen yksityiskohdat, parametrien arvot ja käytetyt tietorakenteet vaikuttavat tuloksiin? - Miten ajoaika riippuu testitapausten koosta? Onko riippuvuus erilainen eri tyyppisillä tapauksilla? - Mikä mittari kuvaa parhaiten kokonaisajoaikaa? - Mitkä ovat ratkaisun pullonkaulat? Riippuvatko ne tapaustyypistä? - Vaikuttaako ajoympäristö ajoajan riippuvuuteen tapausten koosta? - Vaihteleeko ajoaika samoilla syötteillä samassa ajoympäristössä? - Vaihteleeko muistin tarve samoilla syötteillä samassa ajoympäristössä? - Miten aikaisemmin tunnetut algoritmit käyttäytyvät tarkastelluilla tapauksilla? - Approksimaatioalgoritmien tapauksessa ajoajan voi korvata vastauksen laadulla

2. Perusta työsi kirjallisuuteen Pätee kaikkeen tieteelliseen kirjoittamiseen! Kirjallisuuskatsaus ennen testien aloittamista! Vältyt turhalta työltä. Voit saada ideoita siitä, mitä kannattaa selvittää. - Mitä seikkoja yleensä selvitetään ko. tilanteessa. - Mitkä asiat tiedetään avoimiksi - Millaisia tapauksia ei vielä ole tutkittu. Uutta algoritmia kannattaa/pitää testata aikaisemmin käytetyillä testitapauksilla. (aikaisemmilla ajoajoilla ei sinällään ole käyttöä) Tarkka aikaisempiin toteutuksiin vertaaminen on mahdollista vain, jos alkuperäinen koodi on saatavilla. Seuraavaksi paras vaihtoehto on implementoida aikaisempi algoritmi kirjallisuudessa esitetyn kuvauksen (esim. pseudokoodi) perusteella.

3. Tee testejä, jotka mahdollistavat yleiset johtopäätökset Kaksi testiaineistotyyppiä: 1) käytännön sovelluksista saadut aineistot 2) keinotekoisesti (tilastollisesti) tuotetut aineistot Tilastollisesti tuotetut aineistot voivat olla mielivaltaisen suuria - tulevaisuudessa sovellukset todennäköisesti suurempia kuin nykyisin - voivat mahdollistaa algoritmin asymptoottisen käyttäytymisen arvioinnin - suurimman mahdollisen tapauksen koon selvittäminen - arvio siitä, kuinka suuria tapauksia tulevaisuudessa voi ratkoa Huonosti valittu tilastollinen aineisto ei kerro mitään käytännön tapauksista Systemaattinen virhe tilastollisen aineiston muodostamisessa voi johtaa täysin väärin johtopäätöksiin Onko merkitystä sillä, kuluttaako algoritmi 0.01 vai 0.1 sekuntia? Vast: joskus on. Pitäisikö approksimointialgoritmeja testata tapauksissa, joissa optimi tunnetaan? - Mahdollistaa suhteellisen virheet laskemisen. - Voi vääristää tuloksia, sillä mielenkiintoiset tapaukset ovat niitä, joissa optimia ei tunneta! - Optimi tunnetaan yleensä vain melko pienille tapauksille. Testit eivät paljasta, miten algoritmin käyttäytyminen muuttuu tapausten kasvaessa.

4. Laadi testisi tehokkaiksi. Varianssin vähentäminen - McGeoch, Analyzing algorithms... - eräs versio: testataan approksimintialgoritmeja samoilla testitapauksilla ja verrataan algoritmien tekemiä virheitä keskenään bootstrapping - etsitään parasta tulosta ajamalla samaa satunnaistettua algoritmia k kertaa - huono tapa: toistetaan k:n ajokerran koetta m kertaa ja vertaillaan m:ää parasta arvoa tai lasketaan niiden keskiarvo - parempi tapa: tarkastellaan kaikkia km arvoa ja arvioidaan niiden perusteella parhaimman arvon odotusarvo k:n ajon sarjassa; voidaan myös arvioda parasta tulosssa muissa ajosarjoissa kuin k:n pituisissa kommentoi ohjelmasi ja kaikki muu testimateriaali kunnolla

5. Käytä tarpeeksi tehokkaita ratkaisuja. Ohjelmien tehokkuus vs. ohjelmointiaika ja -vaiva Perustuuko algoritmin hyvyys tehokkaaseen ratkaisuperiaatteeseen vai nopeutuskikkoihin? Perusratkaisujen (optimoimattomien ratkaisujen) vertailu? Vaikuttaako optimointi myös (approksimointialgoritmin) ratkaisujen hyvyyteen? (Kohtuullisesti) optimoidun ratkaisun käyttö helpottaa vertailtavuutta ja mahdollistaa suurempien testitapausten käytön.

6. Mahdollista testiesi uudelleen ajaminen ja suunnittele testit niin, että tulokset ovat riippumattomia testiympäristöstä. Mahdollisuus testien oikeellisuuden varmistamiseen toistamalla ne on keskeinen (luonnon)tieteellinen periaate Algoritmi, testiympäristö ja syötteet on raportoitava niin tarkasti, että testit voitaisiin tarvittaessa toistaa Testien toistaminen onnistui, jos ne tukivat samoja johtopäätöksiä kuin alkuperäiset testit. Toistamisen mahdollistamiseksi testit (koodi, syötteet, ajoympäristö) on raportoitava tarpeeksi tarkkaan. Tyypillisiä virheitä 1: - artikkelin tekstiosuus ja koodi eivät vastaa toisiaan - approksimointialgoritmin hyvyyden mittaus, kun optimia ei ole tiedossa - pelkkä tulos ilman vertailukohtaa - prosenttitulos suhteessa parhaaseen tunnettuun arvoon - vertaaminen toiseen algoritmiin, jonka ei hyvyys välttämättä selvää Vertailukohdan on oltava yleisesti tunnettu, yksikäsitteisesti määritelty ja helposti laskettavissa.

Tyypillisiä virheitä 2: Ajoajan käyttäminen etsintäalgoritmin pysähtymiskriteerinä. - Ajoaika riippuu ajoympäristöstä, eikä saman ajan käyttäminen jossain toisessa ympäristö tuota vertailukelpoisia tuloksia. - Algoritmien vertailu ajamalla vertailtavia algoritmeja edeltä sovittu aika voi vääristää algoritmien keskinäistä paremmuusjärjestystä. Parempi pysähtymiskriteeri: vertailtaville algorimeille yhteinen perusoperaatio Tyypillisiä virheitä 3: Etukäteen tunnetun optimin käyttö pysähtymiskriteerinä. - Todellisessa tilanteessa optimia ei tunneta, joten testit eivät ehkä anna tietoa algoritmin soveltuvuudesta käytännön tilanteisiin. Tyypillisiä virheitä 4: Epämääräiset parametrit algoritmeissa (esim. geneettisissä, simuloidussa jäähdytyksessä, jne.) Tyypillisiä virheitä 5: Johtopäätökset tehdään muutamien sattunaisesti valittujen testiajojen perusteella. Tyypillisiä virheitä 6: Parhaan tuloksen käyttö vertailuperusteena.

7. Tee testiesi tulokset vertailukelpoisiksi toisille tutkijoille Tee mahdolliseksi, että tulevat tutkijat voivat perustaa oman tutkimuksensa kirjallisuuteen! Kerro tarpeeksi tarkasti, missä ympäristössä testit on ajettu! Käytä benchmark-testejä ympäristön tehokkuuden kuvaamiseen. (Jos sopivia yleisesti tunnettuja benchmarkejä on olemassa.) Esittele testimateriaaliasi ja/tai koodisi esim. webissä, kirjoituksesi liitteessä, tms.

8. Kerro testeistäsi tarpeeksi tarkasti Käytä oikeata tarkkuustasoa. Kerro testeissä sattuneista poikkeavista tapahtumista, anomalioista. Yritä keksiä niille selityksiä. Ilmoita todelliset ajoajat (vaikka paras tulos olisikin löytynyt aiemmin). Ilmoita ajoajat vaikka ne eivät olisi varsinaisia tuloksiasi.

9. Tee tuloksista perusteltuja johtopäätöksiä ja etsi selityksiä testien tuloksille Tyypillinen virhe: Testien tulosten esittäminen ilman tulkintaa ja johtopäätöksiä. - Jos johtopäätöksiä ei voi tehdä, testit ovat olleet väärät eikä tuloksia kannata raportoida. Testitulosten on tuettava tehtyjä johtopäätöksiä!! Varo tekemästä testien perusteella vääriä johtopäätöksiä algoritmien asymptoottisesta käyttäytymisestä. Selvitä, millaisista tekijöistä algoritmin kokonaisajoaika muodostuu. - Esim. lineaarinen komponentti, jolla suuri vakiokerroin, voi dominoida ajoaikaa pienillä tapauksilla. Kun tapausten koko kasvaa, vähenee lineaarisen komponentin merkitys. - Profilointi auttaa muutenkin ymmärtämään algoritmin toimintaa.

10. Esitä tuloksesi havainnollisesti Tyypillisiä virheitä 1: Taulukko ilman havainnollistavaa kuvaa. - Kuvan esitettävä taulukon sisältämän datan trendit. Tyypillisiä virheitä 2: Kuva ilman taulukkoa. - Kuvat hukkaavat yksityiskohtia. Normalisoidut asteikot kuvissa. (ks. kuva 1) Kuvissa ei saa olla liikaa informaatiota; kuvien merkitys on selitettävä riittävän hyvin. Trendien esittäminen toisiinsa liittymättömien tapausten yhteydessä. (ks. kuva 2) Miten taulukon rivit ja sarakkeet pitäisi järjestää? Tee laskut lukijan puolesta! Älä vertaile taulukoissa tai kuvissa yhteismitattomia arvoja (esim. eri ympäristöissä saatuja tuloksia). Tyypillisiä virheitä 3: Liian paljon dataa lopullisessa raportissa/julkaisussa.