TIETOKONEPELIEN TEKOÄLYN RAJAT
|
|
- Eero Turunen
- 9 vuotta sitten
- Katselukertoja:
Transkriptio
1 Lappeenrannan teknillinen yliopisto Tuotantotalouden tiedekunta Tietotekniikan koulutusohjelma Kandidaatintyö Joonas Salminen TIETOKONEPELIEN TEKOÄLYN RAJAT Työn tarkastaja(t): TkT Jussi Kasurinen Työn ohjaaja(t): TkT Jussi Kasurinen
2 TIIVISTELMÄ Lappeenrannan teknillinen yliopisto Tuotantotalouden tiedekunta Tietotekniikan koulutusohjelma Joonas Salminen Tietokonepelien tekoälyn rajat Kandidaatintyö sivua, 7 kuvaa, 0 taulukkoa, 0 liitettä Työn tarkastajat: TkT Jussi Kasurinen Hakusanat: tekoäly, tietokone, pelit, algoritmi, pelinkehitys, älykäs laskenta Keywords: artificial intelligence, games, algorithm, game development, intelligent computing, AI Tutkimuksessa selvitettiin, kuinka hyvä tekoäly tietokonepeliin on mahdollista toteuttaa nykytiedolla ja -tekniikalla. Tekoäly rajattiin tarkoittamaan tekoälyn ohjaamia pelihahmoja. Lisäksi yksinkertaisia tekoälytoteutuksia ei huomioitu. Työ toteutettiin tutustumalla aiheeseen liittyvään kirjallisuuteen sekä kehittäjäyhteisön web-sivustojen tietoon. Hyvän tekoälyn kriteereiksi valikoituivat viihdyttävyys ja uskottavuus. Katsaus suosituimpiin toteuttamistekniikoihin ja tekoälyn mahdollisuuksiin osoitti, että teoriassa hyvinkin edistynyt tekoäly on toteutettavissa. Käytännössä tietokoneen rajalliset resurssit, kehittäjien rajalliset taidot ja pelinkehitysprojektien asettamat vaatimukset näyttävät kuitenkin rajoittavan tekoälyn toteuttamista kaupallisessa tuotteessa. ii
3 ABSTRACT Lappeenranta University of Technology School of Industrial Engineering and Management Degree Program in Computer Science Joonas Salminen Limits of artificial intelligence in computer games Bachelor s Thesis 38 pages, 7 figures, 0 tables, 0 appendices Examiners: D.Sc. Jussi Kasurinen Keywords: artificial intelligence, games, algorithm, game development, intelligent computing, AI The purpose of this research was to find out how good artificial intelligence it is possible to implement in a computer game using modern technology and techniques. AI was delimited to include AI controlled characters only. Simple AI implementations were left out. The research was carried out by exploring related literature and game development community websites. Believability and entertainment value were chosen for the criteria of good AI. A review through the most popular AI techniques and a look at the possibilities of AI indicated that in theory highly advanced AI is realizable. In practice, however, limited resources of computers, limited knowledge of game developers and requirements set by game development projects seem to constrain commercial AI implementations. iii
4 ALKUSANAT Tämä työ on tehty Lappeenrannan teknillisessä yliopistossa syksyllä Haluaisin kiittää läheisiäni henkisestä tuesta työtä tehdessäni. iv
5 SISÄLLYSLUETTELO 1 JOHDANTO TAUSTA TAVOITTEET JA RAJAUKSET TYÖN RAKENNE TEKOÄLY TEKOÄLY KÄSITTEENÄ AKATEEMINEN TEKOÄLY JA TEKOÄLYTUTKIMUS TEKOÄLY TIETOKONEPELEISSÄ TEKOÄLYN HYVYYS TEKOÄLYN TOTEUTTAMINEN LIIKKUMINEN POLUNETSINTÄ PÄÄTÖKSENTEKO TAKTIIKKA JA STRATEGIA VUOROVAIKUTUS PELIMAAILMAN KANSSA SUORITUKSEN HALLINTA TYÖKALUKETJUT TEKOÄLYN HAASTEET JA MAHDOLLISUUDET RAJOITTEET JA ONGELMAT NYKYTILA, MAHDOLLISUUDET JA TEKOÄLYN TULEVAISUUS JOHTOPÄÄTÖKSET YHTEENVETO LÄHTEET
6 SYMBOLI- JA LYHENNELUETTELO FSM KR NLP NPC POV Finite State Machine Knowledge Representation Natural Language Processing Non-Player-Character Point of Visibility 2
7 1 JOHDANTO 1.1 Tausta Peliteollisuus on viime vuosikymmenen aikana noussut yhdeksi merkittävimmistä ja nopeimmin kasvavista viihdeteollisuuden haaroista. Vuonna 2012 pelimarkkinoiden maailmanlaajuinen arvo oli noin 79 miljardia dollaria [7] ja myynnin odotetaan saavuttavan 81,5 miljardin dollarin rajapyykin tämän vuoden aikana. [11] Yhtenä syynä pelibisneksen kukoistukseen voidaan pitää tekniikan kehitystä, joka on mahdollistanut vuosi vuodelta näyttävämmän graafisen ulkoasun ja paremman pelattavuuden tehden peleistä näin helpommin lähestyttäviä. Toisaalta suhtautuminen elektronisten pelien pelaamiseen on muuttunut: pelaamista ei enää pidetä tietokoneharrastajien keskinäisenä huvina, vaan se mielletään yhdeksi viihdemuodoksi siinä missä elokuvat ja musiikkikin. Vuosittain julkaistaan valtava määrä erilaisia videopelejä eri laitealustoille PC:stä pelikonsolien kautta mobiililaitteisiin. Luonnollisesti jotkut pelit ovat parempia kuin toiset ja parhaimmat niistä onnistuvatkin houkuttelemaan miljoonia ihmisiä sadoiksi tunneiksi pelin pariin. Mikä sitten saa ihmisen pelaamaan tiettyä peliä yhä uudestaan? Koukuttava idea, näyttävä grafiikka ja sujuva pelattavuus eivät välttämättä vielä riitä pitämään yllä pelaajan mielenkiintoa. Sovelluksesta riippuen tarvitaan myös toimiva tekoäly. Tekoälyn tehtävänä on haastaa pelaaja ja tuoda sisältöä pelimaailmaan. Toisinaan yksinkertaisestikin toteutettu tekoäly riittää näiden vaatimusten täyttämiseen. Nykyaikaisissa suuren budjetin peleissä tarvitaan kuitenkin usein huomattavasti monimutkaisempaa lähestymistapaa. Nykyteknologialla ja -tietotaidolla hyvän tekoälyn rakentamisen luulisi olevan helppoa. Näin ei kuitenkaan ole, sillä kunnollisen tekoälyn toteuttamiseen liittyy omat tekniikkansa, ongelmansa ja rajoitteensa. Lisäksi päänvaivaa tuottaa tekoälyn hyvyyden määrittely: milloin voidaan sanoa, että pelissä on hyvä tekoäly? Otetaan esimerkiksi EA Sportsin FIFA-pelisarja. Pelistä julkaistaan vuosittain uusi versio, jota varten pelistä pyritään korjaamaan edellisen version epäkohdat ja lisäämään uusia ominaisuuksia. Vuodesta toiseen eniten kritiikkiä saa juuri pelin tekoäly, joka tuntuu siitä huolimatta edistyvän turhan hitaasti. Kysymys siis kuuluu: onko pelitekoälyn rajat saavutettu? 3
8 1.2 Tavoitteet ja rajaukset Tämän työn tavoitteena on selvittää, kuinka hyvä tekoäly tietokonepeliin on mahdollista toteuttaa nykytiedolla ja -tekniikalla. Lähtökohtana on pohtia tekoälyn hyvyyden määrittelyä ja sen jälkeen syventyä erilaisiin lähestymistapoihin ja tekniikoihin tekoälyn toteuttamiseksi. Kun tekniikoiden perusteet ovat tiedossa, tarkoituksena on selvittää millaiseen lopputulokseen niillä voidaan parhaimmillaan päästä, mitä rajoitteita ja ongelmia tekoälyn rakentamiseen liittyy ja kuinka näitä rajoitteita voidaan mahdollisesti kiertää nyt ja tulevaisuudessa. Työn pitämiseksi maltillisissa mittasuhteissa on hyvä tehdä myös muutamia rajauksia. Ensinnäkin tässä tutkimuksessa rajoitutaan tarkastelemaan ainoastaan tietokonepelien tekoälyä tietokoneiden suuremman laskentatehon ansiosta verrattuna varsinaisiin pelikonsoleihin [4]. Myös tekoälyn määrittelyä on syytä rajata, sillä nykyaikaisissa tietokonepeleissä on monia komponentteja, joiden toimintaa voidaan pitää älykkäänä, kuten fysiikkamoottori tai pelitapahtumiin mukautuva kamerakulma. Koska ihmisen kaltaisen päätöksenteon ja taktisen ajattelun mallintaminen on huomattavasti hankalampaa, ja täten rajoituksille alttiimpaa, kuin esimerkiksi perusfysiikan toteuttaminen peliin, tässä tutkimuksessa tekoälyllä tarkoitetaan yksinomaan pelaajaa vastaan kilpailevien, pelaajan puolella olevien tai pelaajaa tukevien hahmojen toimintaälyä. [9] Tekoälyn rakentamiseen on olemassa lukuisia lähestymistapoja, mutta tässä työssä on tarkoituksenmukaista käydä läpi ainoastaan yleisimmät ja tutkimuskysymykseen vastaamisen kannalta olennaisimmat tekniikat tekoälyn eri osa-alueilta. Tekniikoita käyttävistä sovelluksista rajataan pois yksinkertaiset tekoälytoteutukset, jotka hyödyntävät ainoastaan muutamia tekniikoita ja tiettyä tekoälyn osa-aluetta. Tällaisia ovat esimerkiksi tietokoneella pelattavat lautapelit, kuten shakki [9], ja Nintendon Super Mario-pelisarjan kaltaiset tasohyppelyt. Edellä mainitun kaltaiset yksinkertaiset tekoälytoteutukset ovat usein sellaisia, että niiden parantaminen ei ole enää pelikokemuksen kannalta järkevää tai rajat ovat selvästi tiedossa ja kyse on pelkästä algoritmin viilaamisesta suorituskyvyn nostamiseksi. Tästäkin syystä niiden tarkastelu on tämän työn tavoitteen kannalta turhaa. 4
9 1.3 Työn rakenne Aiheen käsittely aloitetaan luvussa 2 paneutumalla tekoälyn käsitteeseen: mitä tekoälyllä tarkoitetaan yleisesti ja mitä sillä tarkoitetaan tietokonepeleissä. Tämän jälkeen pohditaan vielä tekoälyn hyvyyttä ja pyritään luomaan kuva siitä, minkälaista tekoälyä tässä tutkimuksessa haetaan. Luku 3 käsittelee tekoälyn toteuttamista ja esittelee joukon tekniikoita, joita voidaan soveltaa tekoälyn eri osa-alueiden rakentamiseen. Luku 4 taas tarkastelee tekoälyn haasteita, eli mitä ongelmia ja rajoitteita tekoälyn toteuttamiseen liittyy ja pohtii onko niitä mahdollista kiertää. Lisäksi luku sisältää lyhyen katsauksen pelitekoälyn nykytilaan ja tulevaisuuteen. Luvussa 5 kootaan yhteen luvuissa 3 ja 4 tehdyt havainnot sekä johtopäätökset ja esitetään yhteenveto tutkimuksen tuloksista. 5
10 2 TEKOÄLY 2.1 Tekoäly käsitteenä Tekoälyllä tarkoitetaan tietokoneen näennäistä kykyä ajatella ja toimia elävän olennon tavoin. Käytännön tasolla tekoäly on algoritmi tai joukko algoritmeja, joilla pyritään yleensä jäljittelemään ihmisen ajatusprosesseja esimerkiksi aistihavaintoihin tai päättelyyn liittyen. Usein tekoälyn käsite rinnastetaan suoraan samannimiseen tutkimusalaan ja tutkimuksen pohjalta tuotettuihin sovellutuksiin. Tekoälyä ja sen luomista onkin tutkittu 1950-luvulta lähtien, ja se on nykyisin yksi merkittävimmistä tutkimusaloista tietojenkäsittelytieteessä. [5] Tietokone- ja konsolipelien yleistymisen myötä tekoälyn käsite on puhekielessä laajentunut tarkoittamaan myös peleissä itsenäisesti toimivia pelihahmoja, jotka voivat olla pelaajan puolella, pelaajaa vastaan tai jotakin siltä väliltä. Pelihahmojen toimintaälystä käytetty nimitys on kuitenkin kiistanalainen, sillä pelitekoälyn toteuttamiseen liittyy elementtejä, jotka ovat ristiriidassa niin sanotun akateemisen tekoälykäsityksen kanssa. Lisäksi pelitekoälyn arviointikriteerit poikkeavat merkittävästi akateemisen puolen vastaavista. 2.2 Akateeminen tekoäly ja tekoälytutkimus Kirjallisuudessa akateemisella tekoälyllä viitataan yleensä juuri korkeakoulutasolla harjoitettuun tekoälytutkimukseen ja sen tuloksiin. Tekoälytutkimus on jakautunut alatutkimusalueisiin, joiden tutkimuskohteet voidaan edelleen luokitella tekoälyn luonteen perusteella vahvoihin ja heikkoihin tekoälyihin. Vahvan tekoälyn tapauksessa pyrkimyksenä on luoda täydellisesti ihmisen ajatustoimintaa imitoiva järjestelmä, kuten ihmisen tavoin toimiva robotti. Tätä pidetään tekoälyn perimmäisenä tavoitteena, johon ei toistaiseksi ole vielä päästy. Heikon tekoälyn tapauksessa tarkoituksena on hyödyntää tekoälyteknologioita erilaisten käytännön ongelmien ratkaisemiseksi tietyillä sovellusalueilla [3], kuten ihmisten tunnistamisessa. Käytännöllisyytensä ansiosta suurin osa tekoälyn alatutkimusalueista on keskittynyt pääasiassa heikkoon tekoälyyn [3]. 6
11 Koska älykkyyden mallintamista voidaan lähestyä niin filosofisesta, psykologisesta kuin puhtaasti teknisestä näkökulmasta, on erilaisia alatutkimusalueita ja tutkimuskohteita luonnollisesti useita [5]. Tärkeimmiksi alatutkimusalueiksi tekoälyn saralla voidaan tällä hetkellä lukea päättely, suunnittelu, koneoppiminen, luonnollisen kielen käsittely (engl. NLP, natural language processing), puheen ja kohteiden tunnistaminen sekä tiedon esittäminen (engl. KR, knowledge representation). Tutkimuskohteet vaihtelevat käytännön sovellutuksista teoreettisen tason konsepteihin. Käytännön sovellutusten puolella tekoälytutkimukseen liittyy usein olennaisesti robotiikka. Akateemisen tekoälysovellutuksen onnistuneisuuden voidaan katsoa tulevan siitä, kuinka hyvin se mukailee ihmiselle ominaista ajatusprosessia ratkaistessaan jonkin tietyn ongelman. Yleensä ongelma halutaan vielä ratkaista optimaalisesti, mikäli mahdollista [3]. Esimerkiksi kasvojentunnistusjärjestelmän laatua voitaisiin tarkastella arvioimalla sen osoittamaa älykkyyttä päätöksenteossa. Järjestelmää, joka ottaisi kuvan kasvoista ja vertailisi sitä suoraan tietokannasta löytyviin kasvokuviin, kunnes sattuisi samankaltaisen kuvan kohdalle, ei pidettäisi kovin älykkäänä. Sen sijaan järjestelmä, joka päättelisi kuvasta skannattujen kasvonpiirteiden ja tietokannasta löytyvien kasvoprofiilien perusteella parhaan vastaavuuden, täyttäisi jo akateemisen tekoälyn kriteerit. Lisäksi se antaisi lähes aina optimaalisemman tuloksen kuin päätöksensä puhtaaseen kuvien vertailuun perustava järjestelmä. 2.3 Tekoäly tietokonepeleissä Tietokonepelien tekoälyä toteutettaessa tavoite on periaatteessa sama kuin akateemisen tekoälynkin tapauksessa, eli mallintaa älykkyyttä. Mutta siinä missä akateemisessa tutkimuksessa pyritään jäljittelemään elävän olennon ajattelua ja ratkaisemaan ongelmia optimaalisesti, pelitekoälyn tapauksessa ei ole väliä, miten lopputulokseen päästään. Tärkeintä on, että toiminta vaikuttaa älykkäältä. Tämä johtuu yksinkertaisesti siitä, että laitteistoresurssit (suoritinaika, muisti) ovat rajalliset. [3] Tietokoneiden on pystyttävä suorittamaan pelejä reaaliajassa ilman suurempia viiveitä, ja hiemankin monimutkaisempi tekoälytoteutus saattaa vaatia valtavia määriä laskutoimituksia sekunnissa. Suorituskyvyn takaamiseksi on toteutuksen suhteen tehtävä tiettyjä kompromisseja, joiden pohjalta onkin herännyt kiistaa siitä, voiko pelitekoälyä edes pitää tekoälynä. [5] 7
12 On esitetty, että pelitekoäly koostuu osaksi algoritmeista, osaksi heuristiikoista ja osaksi huijaamisesta [5]. Peliteollisuudessa käytettävät algoritmit ammentavat pitkälti akateemisen tutkimuksen tuloksista. Akateemiselta puolelta tuttuja tekniikoita ovat esimerkiksi tilakoneet, päätöspuut ja polunetsintäalgoritmit, jotka ovat laajalti käytössä erilaisissa peleissä. Nämä algoritmit ovat yleensä syy siihen, miksi useimmat mieltävät pelitekoälyn osaksi tekoälyjen kenttää. Heuristiikoilla ja huijaamisella sen sijaan ei ole mitään tekemistä älykkyyden kanssa. Siitä huolimatta ne ovat yhtä tärkeässä osassa pelitekoälyn rakentamista kuin algoritmitkin. Heuristiikalla tarkoitetaan tavallisesti ns. peukalosääntöä, jonka avulla ratkaisua johonkin ongelmaan lähdetään hakemaan. [5] Jos tehtävänä on esimerkiksi löytää lyhin mahdollinen reitti kahden pisteen välillä, voidaan määrittää heuristiikka, jonka avulla ratkaisua lähdetään hakemaan aina parhaaksi katsotusta suunnasta sen sijaan, että käytäisiin joka kerta kaikki reittivaihtoehdot vaihtoehdot läpi ilman erikseen laadittua järjestystä. Tämä ei välttämättä tuota optimaalista ratkaisua, mutta riittävän hyvän, jotta sitä voidaan pelissä hyödyntää. Huijaamisella viitataan erilaisiin ad hoc -ratkaisuihin ja temppuihin, jotka ovat toisinaan välttämättömiä, jotta suorituskyky saadaan pidettyä järjellisellä tasolla [5]. Otetaan esimerkiksi tilanne, jossa tekoälyhahmon on selviytyäkseen pääteltävä pelaajan ohjastaman hahmon piilopaikka sekunnin murto-osassa. Sen sijaan, että tekoäly tuhlaisi laitteistoresursseja pelaajan paikantamiseen älykkäästi tekemällä päätelmiä aiempien havaintojensa pohjalta, se voi huijata katsomalla pelaajan sijainnin suoraan muistiin talletetuista tiedoista. Toinen hyvä esimerkki luovasta tekoälyn rakentamisesta on pelihahmojen tunteiden esittäminen. Ei ole tarvetta käyttää monimutkaisia kognitiivisia malleja, geneettisiä algoritmeja tai oppimista, jotta hahmo saadaan näyttämään esimerkiksi vihaiselta. Usein riittää esittää tunnetta ilmaiseva animaatio, kuten kulmien kurtistaminen pelihahmon kasvoilla, sopivassa kohdassa. [5] Heuristiikkojen ja erilaisten ad hoc -ratkaisuiden hyödyntäminen pelien tekoälytoteutuksissa on hämärtänyt käsitystä siitä, mikä lasketaan tekoälyksi [5]. Siksi onkin tärkeää jo varhaisessa vaiheessa tehdä selkeä ero akateemisen tekoälyn ja 8
13 pelitekoälyn välille. Siihen, onko pelitekoäly loppujen lopuksi varsinaista tekoälyä vai ei, ei tässä työssä lähdetä ottamaan sen enempää kantaa. 2.4 Tekoälyn hyvyys Kuten johdannossa jo aiemmin todettiin, yksi merkittävä tekijä pelaajan mielenkiinnon kannalta peliä kohtaan on se, kuinka hyvä tekoäly pelissä on. Milloin sitten voidaan sanoa, että pelissä on hyvä tekoäly? Yleensä tekoälyä rakennettaessa tavoitellaan uskottavuutta [10] ja ennen kaikkea viihdyttävyyttä [3]. Näiden tavoitteiden täyttymistä voidaan hyvällä syyllä pitää myös hyvän tekoälyn kriteereinä. Tekoälyn hyvyyttä arvioitaessa tärkeää on myös ottaa huomioon yksittäisen pelihahmon rooli pelissä eli se, onko kyseessä pelaajaa vastaan kilpaileva, pelaajan puolella oleva vai pelaajan toimintaa tukeva hahmo. [10] Pelaajaa vastaan kilpailevien hahmojen (esimerkiksi vastustajajoukkueen pelaajat urheilupelissä tai tekoälyviholliset eli botit ensimmäisen persoonan ammuskelupelissä) tehtävänä pelissä on haastaa pelaaja pelin sääntöjen rajoissa. Koska tekoäly ottaa tässä yhteydessä usein toisen ihmispelaajan roolin, uskottavuuden voidaan katsoa syntyvän siitä, kuinka hyvin tekoäly pystyy jäljittelemään ihmisen toimintaa erilaisissa pelitilanteissa. [10] Mikäli tekoälyvastustajat eivät ole ihmisiä tai ihmisenkaltaisia olentoja, vaan esimerkiksi eläimiä, uskottavuus riippuu siitä, minkälaista käytöstä tietyntyyppiseltä oliolta odotetaan. Pelin viihdyttävyyden kannalta taas on tärkeää, että tekoälyvastustajat tarjoavat riittävästi haastetta pelaajalle. Ne eivät kuitenkaan saa olla niin älykkäitä ja taitavia, että pelissä menestyminen on mahdotonta. Toisaalta taas heikkotasoiset tekoälyvastustajat tekevät pelistä liian helpon. [8] Sopivan vaikeustason löytäminen pelin viihdyttävyyden takaamiseksi onkin siksi yksi suurimmista haasteista tekoälyvastustajia kehitettäessä. Pelaajan puolella olevat hahmot (esimerkiksi joukkuetoverit urheilupelissä) yrittävät auttaa pelaajaa saavuttamaan tavoitteensa pelissä. Tällaisia hahmoja kutsutaan joissakin yhteyksissä myös nimellä NPC (engl. non-player-character) eli ei-pelaajahahmo. [10] Suora kommunikointi tekoälyn ohjaamien kumppaneiden kanssa on kuitenkin usein varsin rajoitettua, joten tekoälyn on mukauduttava pelaajan pelityyliin pelitapahtumien perusteella. [9] Uskottavuuden kannalta kumppanihahmojen ei tarvitse toimia ihmispelaajan tavoin, vaan tärkeintä on, että toiminta on ylipäätään älykästä. [10] 9
14 Viihdyttävyyden suhteen kriteerit ovat pitkälti samat kuin pelaajaa vastaan kilpailevien hahmojen tapauksessa: kumppaneiden tekoäly ei saa tehdä peliä liian helpoksi tai vaikeaksi pelaajalle. Pelaajan avustamisen lisäksi tekoäly voi olla pelaajan toimintaa tukevassa roolissa. Myös tällaisia hahmoja kutsutaan ei-pelaajahahmoiksi, koska ne eivät vaadi ihmispelaajan roolin ottamista. [10] Tukihahmojen tehtävänä on kansoittaa pelimaailmaa ja tukea pelaajaa esimerkiksi vastaamalla tämän kysymyksiin. Usein kommunikointi pelaajan kanssa tapahtuu niin, että pelaajan annetaan valita tietyistä vaihtoehdoista kysymys tai muu ilmaus, johon tekoälyhahmo antaa valinnasta riippuvan valmiiksi purkitetun vastauksen. [9] Uskottavuus on tärkeässä osassa tukihahmojen tekoälyn hyvyyttä määritettäessä. Ensinnäkin käyttäytymisen tulee vaikuttaa älykkäältä: tekoälyhahmo, joka kulkee ympyrää pelimaailmassa ilman suurempaa tarkoitusta, ei näytä pelaajan silmissä kovin uskottavalta. Toisekseen reagoinnin erilaisissa kommunikointitilanteissa pelaajan kanssa tulee olla uskottavaa. Viihdyttävyyden voidaan katsoa tulevan siitä, kuinka monipuoliset kommunikointimahdollisuudet pelissä on. Jos kaikki keskustelut tukihahmojen kanssa ovat liki identtisiä, pelaaja kyllästyy nopeasti kuulemaan samoja vakiorepliikkejä. Kaiken kaikkiaan pelin tekoälyn hyvyyttä arvioitaessa on siis mietittävä, mitä eri rooleja tekoälyllä pelissä on ja kuinka hyvin ne täyttävät tekoälylle asetetut tavoitteet viihdyttävyydestä ja uskottavuudesta. Ihmisillä saattaa kuitenkin olla erilaisia käsityksiä siitä, mikä on uskottavaa tekoälyhahmon käyttäytymistä ja milloin peli on viihdyttävä. Tähän on esitetty syyksi sitä, että pelaajien taso vaihtelee: osa on kokeneita pelaajia, kun osa taas vasta aloittelee peliharrastustaan. [10] Tässä tutkimuksessa voidaan ottaa ainakin uskottavuuden osalta ottaa lisäkriteeriksi se, että tekoälyn on oltava uskottava pelaajan tasosta riippumatta. Tekoälyn viihdyttävyyttä sen sijaan on ymmärrettävästi tarkasteltava ns. keskivertopelaajan näkökulmasta. 10
15 3 TEKOÄLYN TOTEUTTAMINEN Ennen kuin voidaan tarkastella pelien tekoälyyn liittyviä ongelmia ja rajoituksia on tiedettävä kuinka tekoäly rakennetaan. Tekoälyn rakentamiseen ei ole olemassa yhtä oikeaa tapaa, vaan työkalut ja tekniikat on valittava aina toteutettavan pelin mukaan. Sovelluksesta riippumatta tekoälyn voidaan kuitenkin peruspiirteissään katsoa noudattavan aina tiettyä rakennetta. Funge ja Millington esittelevät kirjassaan mallin, joka jakaa pelitekoälyn osa-alueisiin sen suorittamien tehtävien luonteen perusteella. Malli on esitetty kuvassa 1. Kuva 1. Pelitekoälyn malli [5] Kuten Funge ja Millington kirjassaan toteavat, malli on vain yksi vaihtoehto tekoälyn rakenteen esittämiselle [5]. Selkeytensä vuoksi sitä tullaan kuitenkin käyttämään pohjana tässä tutkimuksessa, kun tarkastellaan tekoälyn toteuttamista. Seuraavissa aliluvuissa avataan tarkemmin mallin eri osien merkitystä sekä käydään läpi erilaisten tekoälyn tehtävien toteuttamisen kannalta olennaisimpia tekniikoita ja työkaluja. 11
16 3.1 Liikkuminen Alimmalla tasolla tekoälyn tehtävänä on huolehtia pelihahmojen liikkumisesta pelimaailmassa. Jokaisella pelihahmolla on yleensä lista ominaisuuksia, jotka määrittelevät sen tilan. Liikkumisen kannalta olennaisia ovat esimerkiksi sijainti, nopeus tai jokin muu liikkumiseen vaikuttava fyysinen ominaisuus. Näitä ominaisuuksia sekä pelimaailman tilasta kerättyä tietoa käytetään geometrisessä muodossa liikkumisalgoritmien syötteenä. Liikkumisalgoritmit palauttavat vastaavasti geometrisessä muodossa tiedon siitä, miten ja minne pelihahmon tulisi liikkua. Tämä tieto välitetään liikkumisen toteuttaville fysiikkamoottorille sekä animaatioteknologialle. [5] Liikkumisalgoritmeja on kahdenlaisia: kinemaattisia ja dynaamisia. Kinemaattiset algoritmit käyttävät pelkästään staattista dataa, kuten pelihahmon sijaintia ja orientaatiota (katseen suuntaa) liikesuunnan ja nopeuden määrittämiseen. Yksinkertaisimmillaan ne voivat esimerkiksi ottaa syötteenä vastaan pelihahmon sekä sen kohteen koordinaatit ja palauttaa nopeuden sekä suunnan kohteeseen vektorimuodossa. Kinemaattiset algoritmit eivät ota huomioon liikkeen kiihtymistä tai hidastumista, mikä voi saada liikkeen näyttämään epäuskottavalta etenkin silloin, kun nopeus muuttuu jyrkästi. Liikettä on tosin mahdollista pehmentää jakamalla sen esittäminen näytöllä useammalle kehykselle (engl. frame). [5] Melkein kaikissa nykypeleissä pelihahmojen on kyettävä väistelemään esteitä matkalla kohteeseensa. Tyypillisesti staattisten esteiden, kuten seinien, välttelystä pitää huolen tekoälyn polunetsinnän (kts. luku 3.2) toteuttava osa. Tyypillinen ongelma ovat kuitenkin dynaamiset esteet, joiden paikka pelimaailmassa vaihtelee pelin edetessä. Tällaisia ovat esimerkiksi muut pelihahmot tai liikuteltavat esineet. Muun muassa tämän ongelman ratkaisemiseksi käytetään dynaamisia liikkumisalgoritmeja, joita voidaan myös nimittää ohjauskäyttäytymiseksi (engl. steering behaviors). [3] Toisin kuin kinemaattiset algoritmit, dynaamiset algoritmit ottavat huomioon kiihtyvyyden ja palauttavat nopeuden sijaan voiman, jolla pelihahmon liiketilaa pyritään muuttamaan. [5] Tämä luonnollisesti lisää liikkeen uskottavuutta, joka, kuten aiemmin todettiin, saattaa toisinaan olla ongelma kinemaattisen liikkeen yhteydessä. 12
17 Dynaamisia algoritmeja on lukuisia erilaisia ja niillä voidaan saada aikaan monenlaista käyttäytymistä. Mainitun esteiden välttelyn lisäksi pelihahmo voidaan esimerkiksi asettaa hakeutumaan kohteeseen, ajamaan takaa kohdetta, pakenemaan uhkaa, seuraamaan tiettyä polkua tai vaeltelemaan näennäisen vapaasti pelimaailmassa. Halutun käytöksen aikaansaamiseksi algoritmeja on yhdisteltävä sopivalla tavalla. [3] Dynaamisia algoritmeja käytetään yksittäisten hahmojen lisäksi pelihahmoryhmien käyttäytymistä mallinnettaessa. Itse asiassa suosituin dynaamisten algoritmien käyttökohde onkin parveilukäyttäytymisen (engl. flocking), kuten eläinlauman yhtenäisen liikkeen, aikaansaaminen. [5] 3.2 Polunetsintä Pelitekoälyn mallissa polunetsintä voidaan ajatella päätöksentekotason ja liikkumistason välille. Usein se on upotettu osaksi liikkumisjärjestelmää, jolloin sitä voidaan kutsua tarpeen tullen. Polunetsinnässä tarkoituksena on yleensä löytää sopivin reitti paikasta A paikkaan B. Tämä reitti toimii ikään kuin seurattavana karttana pelihahmon liikkumisen toteuttavalle osalle. Reitin löytämiseksi käytetään useimmiten A* -nimistä algoritmia, josta on olemassa kymmenittäin erilaisia variaatioita. A* -algoritmi pohjautuu Dijkstran algoritmiin, jota sovelletaan enemmänkin tekoälyn strategiatasolla. [5] Siitä on kuitenkin toisinaan hyötyä myös polunetsinnässä [3]. Ennen kuin polunetsintäalgoritmi voi aloittaa sopivimman reitin hakemisen, on pelimaailma esitettävä sille sopivassa muodossa. Tämä tarkoittaa maaston yksinkertaistamista solmuista ja kaarista koostuvan graafin muotoon. Tätä yksinkertaistamisprosessia kutsutaan kvantisoinniksi. Solmuihin jakaminen voi tapahtua useilla eri tavoilla ja näitä tapoja kutsutaan ositusskeemoiksi (engl. division schemes). [5] Solmut voivat edustaa esimerkiksi näkyvyyspisteitä (engl. POV, points of visibility), eli kohteita, joilla on näköyhteys vähintään yhteen naapurikohteeseen. Reaaliaikaisissa strategiapeleissä taas on tapana jakaa maasto laattoihin tai soluihin, joiden keskipisteet toimivat reittipisteinä. [3] Suosituin ositusskeema nykypäivänä lienee kuitenkin navigaatioverkko, jossa maasto on jaettu konvekseihin monikulmioihin [5]. Sen avulla tiedetään täsmälleen, millä alueilla 13
18 hahmojen on mahdollista liikkua, mikä mahdollistaa lyhyemmät reitit ja luonnollisemman liikkumisen. Tämä on nähtävissä kuvassa 2, jossa on esimerkinomaisesti esitetty laskettu reitti ensin näkyvyyspisteisiin ja sitten navigaatioverkkoon pohjautuen. Toisena etuna samaa verkkoa voidaan käyttää kaikkien tekoälyn ohjaamien hahmojen kohdalla riippumatta niiden ominaisuuksista, jolloin esimerkiksi erikokoisille hahmoille ei tarvitse määritellä omia reittipistejoukkoja. [8] Kuva 2. Näkyvyyspisteisiin (vas.) ja navigaatioverkkoon (oik.) pohjautuvien reittien ero Kun halutaan löytää sopivin (yleensä lyhin) reitti pelihahmon ja tietyn kohteen välillä käytetään käytännössä aina A* -algoritmia tai paremminkin jotakin sen variaatioista. Pohjimmiltaan A* -algoritmi käy iteroiden läpi graafin solmuja ja solmujen välisiä kaaria pyrkien löytämään reitin, jota noudattamalla reitin muodostavien kaarien kustannusten summa olisi mahdollisimman pieni. Läpikäyntijärjestys perustuu valittuun heuristiikkaan. Oikean heuristiikan valitseminen on tärkeä osa A* -algoritmin toteutusta, sillä mitä tarkempi heuristiikka on, sitä tehokkaammin algoritmi suoriutuu. Yksi laajalti käytössä oleva heuristiikka on hakusuunnan valitseminen perustuen euklidiseen etäisyyteen kahden solmun välillä. Tämä heuristiikka on hyvä esimerkki ympäristön huomioimisen tärkeydestä heuristiikan valinnassa. Avoimessa maastossa se toimii hyvin, koska esteitä ei juuri ole. Suljetussa tilassa, kuten rakennuksessa, polunetsintäalgoritmin suorituskyky sen sijaan voi laskea huomattavasti, koska heuristiikka aliarvioi etäisyyttä muun muassa seinien takia. [5] 14
19 Alla on nähtävissä mukailtuna Fungen ja Millingtonin kirjassaan esittämä pseudokoodiversio A* -algoritmista. Funktio ottaa syötteenä vastaan graafin, aloitussolmun, maalisolmun sekä heuristiikka-objektin, jonka estimate-jäsenfunktion avulla voidaan luoda arvio kustannuksesta minkä tahansa solmun saavuttamiseksi. Funktio palauttaa löydetyn reitin listarakenteena, joka sisältää reitin muodostavat kaaret. def pathfindastar(graph, start, goal, heuristic): # Tietue, joka sisältää solmun tiedot struct NodeRecord: node connection costsofar estimtotalcost # Aloitussolmun tietojen alustus startrecord = new NodeRecord() startrecord.node = start startrecord.connection = None startrecord.costsofar = 0 startrecord.estimtotalcost = heuristic.estimate(start) # Listojen (avoimet ja läpikäydyt) alustus open = PathFindingList() open += startrecord closed = PathFindingList() # Iteroidaan solmut läpi while length(open) > 0: # Etsitään pienin elementti avointen listassa # estimtotalcost arvojen perusteella current = open.smallestelement() # Poistutaan silmukasta, jos nykyinen solmu # on maalisolmu if current.node == goal: break # Muuten haetaan kaaret (yhteydet muihin solmuihin) connections = graph.getconnections(current) 15
20 # Käydään kaaret läpi for connection in connections: # Kustannusarvio solmuun kaaren päässä endnode = connection.gettonode() endnodecost = current.costsofar + connection.getcost() # Jos solmu on läpikäytyjen listassa, se # poistetaan sieltä tai jätetään väliin if closed.contains(endnode): # Etsitään solmun tiedot endnoderecord = closed.find(endnode) # Jätetään väliin, jos reitti ei parane if endnoderecord.costsofar <= endnodecost: continue: # Muuten poistetaan läpikäytyjen listasta closed -= endnoderecord # Käytetään solmun vanhoja kustannusarvoja # heuristiikan laskentaan, jolloin vältetään # ylimääräinen funktiokutsu endnodeheuristic = endnoderecord.cost endnoderecord.costsofar # Jos solmu avointen listassa, se jätetään # väliin, mikäli reitti ei parane else if open.contains(endnode): # Etsitään solmun tiedot endnoderecord = open.find(endnode) # Jätetään väliin, jos reitti ei parane if endnoderecord.costsofar <= endnodecost: continue: # Lasketaan heuristiikka-arvo vastaavasti kuin # läpikäytyjen listan tapauksessa endnodeheuristic = endnoderecord.cost endnoderecord.costsofar 16
21 # Muuten kyseessä solmu, jossa ei ole käyty # Tehdään uusi tietue else: endnoderecord = new NodeRecord() endnoderecord.node = endnode # Käytetään heuristiikkafunktiota, koska # tietoja kustannuksista ei ole endnodeheuristic = heuristic.estimate(endnode) # Mikäli päästään tänne asti, päivitetään solmun # tietoja endnoderecord.cost = endnodecost endnoderecord.connection = connection endnoderecord.estimtotalcost = endnodecost + endnodeheuristic # Lisätään solmu avointen listaan, jos ei ole jo if not open.contains(endnode): open += endnoderecord # For-silmukka päättyy tässä nykyisen solmun osalta # Poistetaan nykyinen solmu avointen listasta ja lisätään # läpikäytyjen listaan open -= current closed += current # While-silmukasta päästään tähän, kun kaikki solmut on # käyty läpi tai maalisolmu on löytynyt if current.node!= goal: # Jos viimeisin käsitelty solmu ei vastaa haluttua # maalisolmua, ratkaisua ei löytynyt return None else: # Muodostetaan lista, joka tulee sisältämään reitin path = [] # Kerätään kaaret listaan lopusta alkuun while current.node!= start: 17
22 path += current.connection current = current.connection.getfromnode() # Käännetään listaelementtien järjestys ja palautetaan tulos return reverse(path) Dijkstran algoritmi on periaatteessa A* ilman heuristiikkaa. Täten se palauttaa lyhimmät reitit jokaiseen graafin solmuun. Koska reiteistä ei loppujen lopuksi tarvita kuin yhtä, voidaan tätä perinpohjaista läpikäymistä pitää resurssien tuhlaamisena, mikä on perimmäinen syy Dijkstran algoritmin vähäiselle käytölle pelinkehittäjien keskuudessa. [5] Siitä voi kuitenkin olla hyötyä, mikäli pelihahmon on esimerkiksi paikannettava jokin useista samanlaisista kohteista pelimaailmassa. Siinä missä A* -algoritmi olisi ajettava useamman kerran, Dijkstran algoritmilla yksi ajokerta riittäisi lähimmän esiintymän paikallistamiseksi. [3] 3.3 Päätöksenteko Itsestään selvin tekoälyn tehtävistä lienee päätöksenteko. Erilaisia päätöksentekotekniikoita on olemassa lukuisia, mutta pohjimmiltaan ne kaikki toimivat samankaltaisesti. Algoritmit käyttävät syötteenä pelihahmon sisäistä tietoa sekä pelimaailmasta saatua ulkoista tietoa ja palauttavat toimenpiteen, joka halutaan suorittaa. Toimenpide voi olla vaikkapa hahmon liikuttaminen, jolloin pyyntö ohjataan tekoälyn polunetsinnästä ja liikkumisesta vastaaville tasoille, jotka edelleen välittävät sen omien operaatioidensa kautta fysiikkamoottorille tai animaatioteknologialle. Mikäli pelihahmo taas päättää esimerkiksi hyökätä, voidaan pyyntö välittää suoraan animaatioteknologialle, joka käynnistää sopivan hyökkäysanimaation. Kyseessä voi olla myös hahmon tai pelimaailman tilaa muuttava toimenpide, kuten haavojen parantaminen parannusjuomalla tai esineen poimiminen maasta. Tällaiset toiminnot ovat usein huomaamattomampia pelaajalle, sillä niitä ei ole tapana animoida tekoälyn kohdalla. [5] Mahdollisesti käytetyin päätöksentekotekniikka peleissä lajityypistä riippumatta on äärellinen tilakone (engl. FSM, Finite State Machine). Äärelliset tilakoneet ovat yksinkertaisia ja nopeita toteuttaa sekä testata. Lisäksi ne mukautuvat helposti muihin tekniikoihin, ja niiden vaatima prosessointiteho on alhainen. [3] Yksinkertaisimmillaan 18
23 tilakoneiden voidaan katsoa koostuvan neljänlaisista elementeistä: tiloista, siirtymistä tilojen välillä, siirtymät laukaisevista säännöistä ja tapahtumista, jotka laukaisevat sääntöjen tarkistamisen [8]. Kuvassa 3 on esitetty mahdollinen tilakone yksikertaiselle tekoälyvastustajalle. Kuva 3. Yksinkertainen tilakone [5] Käytännössä tilojen määrä voi kasvaa hyvinkin suureksi, jolloin ei ole järkevää sisällyttää kaikkea yhteen tilakoneeseen. Ratkaisu tähän on rakentaa tietyille toiminnoille omat tilakoneensa, jotka toimivat varsinaisen tilakoneen alitiloina. Tällöin puhutaan hierarkkisesta tilakoneesta. Hierarkian avulla tilojen kokonaismäärä pysyy järkevänä, ja toimintojen priorisointi poikkeustilanteissa sekä niiden jälkeen on selkeämpää. [5] Toinen suosittu päätöksentekotekniikka on päätöspuiden käyttäminen. Äärellisten tilakoneiden tavoin päätöspuut ovat helppoja ja nopeita toteuttaa, mutta voivat kasvaa nopeasti hyvinkin suuriksi. Puun läpikäyminen alkaa juuresta, jossa tarkastellaan jonkin ehdon toteutumista, tehdään päätös ja haaraudutaan sen perusteella johonkin alemman tason solmukohdista. Solmukohdassa tehdään jälleen uusi päätös ja edetään vastaavasti seuraavalle tasolle. Solmukohtien läpikäymistä jatketaan, kunnes päädytään suoritettavaan toimintoon puun latvassa. [5] Yksi esimerkki päätöspuusta on nähtävissä kuvassa 4. Päätöksentekoa voidaan mallintaa myös käytöspuiden avulla. Päätöspuiden tavoin käytöspuissa edetään tarkastelemalla ehtojen toteutumista ja suorittamalla sitten asiaankuuluvat toimenpiteet. Erona on kuitenkin se, että siinä missä päätöspuiden kohdalla päädytään lopulta yhteen suoritettavaan toimintoon, käytöspuissa erilaisia toimintoja 19
24 Kuva 4. Yksinkertainen päätöspuu [5] voidaan ketjuttaa. Tämä tapahtuu koostesolmujen (engl. composite node) avulla, joita on kahta tyyppiä: valitsin- ja sarjakooste. Valitsinkooste (merkitään?) haarautuu toimenpiteisiin, joita valitaan yksi kerrallaan suoritettavaksi, kunnes jokin niistä onnistuu ja valintatehtävä voidaan lopettaa näin onnistuneena. Mikäli yksikään toimenpide ei onnistu, valintatehtävä on luonnollisesti epäonnistunut. Sarjakooste (merkitään ) taas haarautuu ehtojen tarkistamiseen ja toimenpiteisiin, jotka on suoritettava peräkkäin onnistuneesti. Jos yksikin ehto tai toimenpide epäonnistuu, sarjatehtävä on epäonnistunut. [5] Kuvassa 5 on esitetty yksinkertainen käytöspuu, jonka mukaan pelihahmo voisi toimia kohdatessaan oviaukon. Usein tilakoneissa uuteen tilaan siirtyessä tai puurakenteissa seuraavaan kohtaan edetessä tarkasteltava seikka ei ole selkeästi tosi tai epätosi, vaan jotakin siltä väliltä. Otetaan esimerkiksi autopeli, jossa tekoälyn ohjaaman kuskin on jarrutettava lähestyessään mutkaa. Pelkkä tieto siitä, jarrutetaanko vai ei, ei kuitenkaan riitä, vaan on tiedettävä kuinka kovaa jarrutetaan. Loivissa mutkissa aina täydellä teholla jarruttava tekoälykuski ei anna kovin älykästä kuvaa itsestään. Tästä syystä monissa peleissä käytetään esimerkiksi sumean logiikan (engl. fuzzy logic) kaltaista järjestelmää, jossa lasketaan arvoja (esim. välillä 0-1), jotka kuvaavat kuinka paljon jokin ratkaistava asia kuuluu tietyn päätöksen piiriin. Esimerkin tapauksessa voitaisiin laskea, kuinka paljon tietyntyyppiseen mutkaan ajaminen 20
25 Kuva 5. Yksinkertainen käytöspuu [5] kuuluisi jarrutuspäätöksen piiriin (loivan mutkan tapauksessa arvo voisi olla 0,2), ja sen perusteella määrätä jarrutusvoima, eli tässä vaikkapa 20 % kokonaisjarrutusvoimasta. [5] Aiemmin kuvattujen tekniikoiden ohella suosiota saanut tapa tekoälyn päätöksenteon toteuttamiselle on komentosarjojen, eli skriptien käyttö. Tärkeimpänä syynä komentosarjojen suosiolle on se, että ne helpottavat huomattavasti koodin muokkaamista ja testaamista. Esimerkiksi äärellisen tilakoneen tapauksessa pääpelikoodiin kirjatut tilat voidaan korvata erillisillä ajettavilla skripteillä, jolloin pääpelikoodia ei tarvitse kääntää joka kerta uudestaan, ja pelihahmon käyttäytymistä on näin helppo säätää. Lisäksi komentosarjakielet ovat monesti helppotajuisia, mikä mahdollistaa eiohjelmointitaustaisten henkilöiden osallistumisen säätöjen tekemiseen. Samoista syistä skriptejä käytetään paljon myös muilla pelien osa-alueilla, kuten kameran, äänten tai animaation ohjaamisessa. [3] 3.4 Taktiikka ja strategia Pelitekoälyn mallissa strategiatason tehtävänä on huolehtia suuremman mittakaavan tavoitteiden asettamisesta ja saavuttamisesta. Käytännössä strategiatasolla tehdään siis päätelmiä pelitilanteesta ja välitetään tätä taktista tietoa eteenpäin yhden tai useamman pelihahmon käytettäväksi suoraan päätöksenteossa tai toisinaan polunetsinnässä. Taktinen tieto voi olla esimerkiksi tietoa pelikentän taktisista sijainneista, kuten suojapaikoista, tai 21
26 tietoa maaston luonteesta tai vihollisen vaikutusalueesta. Taktisen tarkastelun mahdollistamiseksi pelikenttä esitetään yleensä joko taktisten reittipisteiden tai taktisen analysointikartan muodossa. [5] Polunetsinnän yhteydessä pelikenttä jaettiin solmuihin, jotka olivat yhteydessä toisiinsa kaarien avulla. Strategisella tasolla näitä solmuja kutsutaan reittipisteiksi (engl. waypoint). Olennaisena erona polunetsinnässä käytettyihin solmuihin on kuitenkin se, että nyt pisteet voivat sisältää tietoa sijaintinsa taktisista ominaisuuksista. Taktiset reittipisteet voivat olla esimerkiksi suoja, piilo- tai väijytyspaikkoja. Reittipiste voi luonnollisesti omata useita taktisia ominaisuuksia samanaikaisesti, eli esimerkiksi hyvä suojapaikka voi samanaikaisesti olla myös loistava piilopaikka. Taktiset ominaisuudet asetetaan yleensä suoraan kenttäsuunnittelijan toimesta tai luodaan laskennallisesti. Vaikka taktista reittipistegraafia on toisinaan mahdollista hyödyntää myös polunetsinnässä, Funge ja Millington suosittelevat käyttämään erillisiä graafeja polunetsintään ja reittipisteiden analysointiin. [5] Syy tähän nähdään hyvin kuvassa 6, jossa taktiset reittipisteet on merkattu valkoisilla palloilla. Kuva 6. Taktiset reittipisteet [5] Muita, pitkälti reittipistejärjestelmän kaltaisia, tapoja saada tietoa pelikentän taktisesta tilanteesta ovat taktiset analyysit, joista käytetään pääasiassa vaikutusaluekarttaa (engl. influence map) ja maastoanalyysiä (engl. terrain analysis). Vaikutusaluekartta kertoo esimerkiksi reaaliaikaisessa strategiapelissä yksinkertaisesti tekoälyn ja pelaajan ohjaamien joukkojen vaikutuksen kussakin pelikentän osassa. Vaikutuksen suuruuden tietyllä alueella 22
27 voi pelistä riippuen määrätä esimerkiksi joukkojen läheisyys, määrä, aseistus tai kunto. Maastoanalyysissa taas on tarkoituksena selvittää laskennallisesti maaston ominaisuuksien vaikutus alueittain. Tarkasteltavia ominaisuuksia voivat olla muun muassa maaston vaikeakulkuisuus ja paikan aukeus. Kummankin analysointitavan kohdalla pelikentän osittamiseen voidaan käyttää polunetsinnän puolelta tuttuja tekniikoita. [5] Kuvassa 7 on esitetty vaikutusaluekartta reaaliaikastrategianpelin pelikentästä. Kentällä on kaksi joukkuetta, mustat ja valkoiset, joilla on kummallakin joukkoja kentän eri alueilla. Kuvassa näkyvät numerot kuvaavat joukkojen määrää näillä alueilla. Jokainen alue on kuitenkin joko mustien (B) tai valkoisten (W) vaikutuksen alla riippumatta siitä, onko juuri siinä kohtaa joukkoja vai ei. Mitä tummempi tietyn joukkueen hallitsemaa aluetta kuvaava ruutu on, sitä voimakkaampi joukkojen vaikutus on siellä. Kuvaan on piirretty myös hallinta-alueiden raja. Kuva 7. Vaikutusaluekartta [5] Monesti strategisella tasolla tehdyt päätökset koskevat useita tekoälyhahmoja, jotka toimivat yhteistyössä jonkin tavoitteen saavuttamiseksi. Tällöin tarvitaan monikerroksista tekoälyä, jossa kullakin pelihahmolla on oma tekoälynsä, mutta ne noudattavat samaa 23
28 suuremman mittakaavan suunnitelmaa. Toisinaan tekoäly toimii kuitenkin yhdessä pelaajan kanssa, jolloin strategia tulee suoraan pelaajalta tai epäsuorasti pelaajan aikeita ennakoimalla. Varsinkin jälkimmäisessä tapauksessa monikerroksinen lähestymistapa voi aiheuttaa ongelmia, mikäli niitä ei oteta huomioon esimerkiksi kenttäsuunnittelussa. Monikerroksinen tekoäly voidaan kuitenkin toteuttaa monella tavalla, joten oikean arkkitehtuurin valitseminen helpottaa myös pelaajan sovittamista kuvioon. [5] 3.5 Vuorovaikutus pelimaailman kanssa Useimmat tekoälyalgorimit hyödyntävät pelihahmon sisäisen tiedon, kuten varustuksen, terveystilanteen tai liiketilan, ohella ulkoista, pelimaailmasta saatua tietoa, kuten muiden pelihahmojen sijaintia tai ovien tilaa (auki vai kiinni). Mikäli tekoälystä halutaan tehdä uskottava, tätä ulkoista tietoa ei voida antaa suoraan tekoälyn ohjaamille hahmoille, vaan pelissä on oltava jonkinlainen tapa välittää sitä tasaisin väliajoin tekoälyn eri osille. Näin saadaan aikaan illuusio siitä, että pelihahmo havainnoi ympäristöään ja reagoi havaintoihinsa. [5] Funge ja Millington esittelevät kirjassaan kaksi tekniikkaa, joita käytetään tekoälyn ja pelimaailman välisessä vuorovaikutuksessa: kiertokysely (engl. polling) ja tapahtumien välitys (engl. event passing). Kiertokysely toimii siten, että tekoälyhahmot tekevät jatkuvalla syötöllä kyselyitä niitä kiinnostavista kohteista pelimaailmassa. Tekoälyhahmojen määrän kasvaessa käytetään keskusta, jonka läpi kyselyt kulkevat, jotta niitä voidaan paremmin hallita. Tapahtumien välitys taas toimii siten, että erillinen koodinpätkä tekee tarkistuksia pelimaailman tilasta ja välittää tiedon kiinnostavista tapahtumista asianosaisille tekoälyhahmoille. Lähestymistavan valinta riippuu sovelluksesta: joskus kiertokysely on parempi vaihtoehto, toisinaan taas tapahtumien välitys. Myös yhdistelmät ovat mahdollisia, tosin hankalampia hallita. [5] 3.6 Suorituksen hallinta Koska käytettävissä oleva prosessoriaika on rajallinen, on varsinkin monimutkaisempien tekoälyjen tapauksessa tekoälyn eri osa-alueiden tehtäviä aikataulutettava. Aikataulutus tapahtuu jakamalla käytössä oleva prosessoriaika kehyksittäin sitä tarvitsevien algoritmien 24
29 kesken erillisen suorituksenhallintakoodin (aikatauluttajan) avulla. Saadun prosessoriajan määrä vaihtelee tekoälyn osien välillä riippuen niiden prioriteetista. Suoritustaajuus, eli kuinka monen kehyksen välein jotakin tehtävää suoritetaan, voi olla erikseen määritelty ja/tai pohjautua prosessoriajan tavoin tehtävän prioriteettiin. Mikäli on hallittava suurta joukkoa itsenäisesti toimivia tekoälyhahmoja, aikatauluttajia on useita. Tällöin ne muodostavat hierarkian, jonka huipulla on yksittäisten hahmojen aikatauluttajien toimintaa koordinoiva aikatauluttaja. [5] Huomionarvoinen asia aikataulutettaessa on myös se, että usein on tarpeen huolehtia vain pelaajan havaintoalueella olevien tekoälyhahmojen toiminnan uskottavuudesta. Tietyllä etäisyydellä pelaajasta oleville tekoälyhahmoille annetaan tällöin vapaus liikkua epäuskottavasti tai kävellä seinien läpi ja säästetään näin arvokasta prosessoriaikaa. Niin kauan kuin pelaaja ei näe tätä outoa käyttäytymistä, illuusio siitä, että hahmot tekevät pelaajan poissa ollessakin jotain järkevää, säilyy. [5] Aikataulutuksen ohella suorituksen hallintaan liittyvät olennaisesti erilaiset huijaustekniikat, joihin viitattiin lyhyesti luvussa 2.3. Huijaustekniikoita käytetään etenkin reaaliaikastrategiapeleissä, joissa monikerroksinen tekoäly raskaine polunetsintä- ja analysointimenetelmineen tuottaa monesti suorituskykyongelmia. Tyypillisiä huijaustekniikoita niissä ovat esimerkiksi sellaisen tiedon hankkiminen, jota pelaaja ei voisi hankkia, tyhjästä ilmestyvät vastustajajoukot sekä pelin sääntöjen hienovarainen kiertäminen vaikkapa suomalla tekoälylle ilmaisia varusteita tai rakennuksia. Muista peligenreistä mainittakoon autoilupelit, joiden yhteydessä taas puhutaan usein ns. kuminauhatekoälystä, jolla tarkoitetaan tekoälykuskien tapaa pysytellä mukana pelaajan vauhdissa riippumatta siitä, kuinka hyvin tämä ajaa. Huijaustekniikoilla pyritään yleensä antamaan tasoitusta huomattavasti tietokonetta älykkäämpää ihmispelaajaa vastaan ja korvaamaan näin varsinaista älykkyyttä osoittavia tekniikoita hyvän suorituskyvyn ylläpitämiseksi. Esimerkiksi kuminauhatekoälyn tapauksessa sen sijaan, että tekoälykuskit hakisivat älykkäästi optimaalista ajolinjaa pelaajan voittamiseksi, ne ajavat aina tiettyä ajolinjaa ja autoa nopeutetaan tai hidastetaan pelaajan etäisyydestä riippuen. Hyvin toteutettuna tekoälyn huijaaminen voi tarjota 25
30 tasaisen vastuksen pelaajalle ja nostaa tekoälyn täysin uudelle tasolle. Huonosti toteutettuna se taas voi pilata illuusion älykkyydestä ja laskea pelin viihdyttävyysarvoa merkittävästi. 3.7 Työkaluketjut Työkaluketjut tarjoavat pelikehittäjille välineet sisällönluontiin, kuten äänten, animaation, tekstuurien ja mallien tuottamiseen. Erilaiset työkaluketjut ovat tärkeä osa nykyaikaista pelikehitystä, sillä ne standardoivat sisällönluomisprosessin niin, että sitä voidaan hyödyntää useissa peleissä. Työkaluketjut ovat tärkeässä osassa myös tekoälyn rakentamisessa. Jotta muun muassa polunetsintä- ja liikkumisalgoritmeja voitaisiin hyödyntää tehokkaasti, niiden on saatava tarvitsemansa tieto oikeassa muodossa. Esimerkiksi luvussa 3.2 puhuttiin polunetsinnän yhteydessä kvantisoinnista, jossa pelikenttä yksinkertaistettiin graafin muotoon. Tämänkaltainen sisällönluonti tekoälyä varten tapahtuu juuri hyödyntämällä työkaluketjuja. [5] Työkaluketjut nopeuttavat huomattavasti tekoälyn kehitystyötä huolehtimalla sisällönluonnista ja tarjoamalla pohjan tekoälyn kehittämiselle. Ne sisältävät valmiita työkaluja esimerkiksi tekoälyn suunnitteluun (esim. tilakoneiden laatiminen) ja toteuttamiseen (esim. skriptaustyökalut) sekä virheidenetsintään. Valmiiden työkalujen ansiosta tekoälyn säätäminen ei ole enää pelkästään ohjelmoijien harteilla, vaan siitä ovat yhtä lailla vastuussa muun muassa kenttäsuunnittelijat. [5] 26
31 4 TEKOÄLYN HAASTEET JA MAHDOLLISUUDET Luvussa 3 esitellyt lähestymistavat ja tekniikat antavat hyvät lähtökohdat tekoälyn toteuttamiselle, mutta niihin liittyy omat rajoitteensa ja ongelmansa. Tekninen puoli ei kuitenkaan ole ainoa ongelmien aiheuttaja. Hyvän tekoälyn toteuttaminen tietokonepeliin on monivaiheinen prosessi, jossa on otettava huomioon monia asioita aina laitteistotasolta pelinkehitysprojektin tasolle asti. Tämä tuo luonnollisesti mukanaan joukon uusia haasteita. Haasteista huolimatta tekoälyä kehitettäessä sovelletaan toisinaan kokeellista teknologiaa ja epätavallisempia tekniikoita. Hyvänä esimerkkinä tästä ovat akateemisen tekoälyn puolelta tuttuja oppimisalgoritmeja hyödyntävät lähestymistavat, jotka mahdollistavat muun muassa tekoälyhahmojen mukautumisen tietyn pelaajan pelityyliin. Vaikka toimivia ratkaisuja löytyy lähinnä indiepelien puolelta (esimerkiksi geneettisiä algoritmeja käyttävä Warning Forever), lähestymistavat kertovat kuitenkin tekoälyn potentiaalista, joka myös suurempien pelinkehittäjästudioiden on syytä huomioida. Tässä luvussa tarkoituksena on luoda kokonaiskuva pelitekoälyn haasteista ja mahdollisuuksista nyt sekä tulevaisuudessa. Kokonaiskuvan avulla pyritään saamaan jonkinlainen käsitys siitä, missä pelitekoälyn rajat lopulta kulkevat. Viimeisessä aliluvussa 4.3 kootaan yhteen tehdyt päätelmät ja esitetään johtopäätökset tutkimusongelman suhteen. 4.1 Rajoitteet ja ongelmat Tekoälyn toteuttamiseen liittyvät rajoitteet ja ongelmat voidaan jakaa kolmeen luokkaan: tekniset rajoitteet, osaamiseen liittyvät rajoitteet ja pelinkehitysprojektien asettamat rajoitteet. Jako perustuu pitkälti kirjallisuudessa ja pelitekoälyn kehittäjien lausunnoissa esille nousseisiin seikkoihin. Seuraavassa esiteltävistä rajoitteista suurin osa tullee siis väistämättä vastaan etenkin suuren budjetin pelinkehitysprosessien yhteydessä. Suurin ja selkein rajoittava tekijä tekoälyä rakentaessa on tekniset rajoitteet, joka käsittää laitteiston asettamat rajoitukset ja algoritmien rajoitteet. Laitteistopuolelta tekoälyn käyttöön annetut resurssit, suoritinaika ja muisti, ovat luonnollisesti rajalliset. Fungen ja 27
32 Millingtonin mukaan tekoälylle varattu suoritinaika on tyypillisesti noin 20 % kokonaissuoritinajasta, joskus se voi kuitenkin olla jopa 50 % tai enemmän. Yksinkertaisen tekoälyn tapauksessa suoritinaikaa saattaa olla riittävästi, mutta monimutkainen, useista kerroksista ja lukuisista aikaavievistä algoritmeista koostuva tekoäly voi äkkiä laskea suorituskyvyn pohjalukemiin, jos sen ohella ajetaan vielä esimerkiksi fysiikkamallinnusta. Tällöin tärkeässä osassa on suorituksen hallinta, josta puhuttiin luvussa 3.6. Taitavalla suoritinresurssien hallinnalla monimutkainenkin tekoäly voidaan saada toimimaan sulavasti. Suorituskykyä voidaan parantaa myös hyödyntämällä nykyaikaisten moniydinprosessorien ominaisuuksia rakentamalla koodi siten, että tekoälyn eri osia on mahdollista ajaa rinnakkain. [5] Muistin osalta ongelma ei ole Fungen ja Millingtonin mukaan niinkään muistin rajallinen määrä, vaan siihen käsiksi pääseminen. Koska tiedon hakeminen muistista vie huomattavasti aikaa, prosessori operoi välimuistiin kopioiduilla varsinaisen muistin tiedoilla. Varsinainen muisti pidetään ajan tasalla lähettämällä välimuistin tiedot sinne prosessorin suoritussyklien välillä. Välimuisti sisältää kuitenkin vain osan varsinaista muistia, joten mikäli tarvittavaa tietoa ei löydy sieltä, se joudutaan noutamaan varsinaisesta muistista, mikä saattaa seisauttaa tekoälyn toiminnan. Tekoälyalgoritmien suorituskyvyn kannalta on siis tärkeää, että oikea tieto löytyy välimuistista oikeaan aikaan. [5] Käytettävissä olevan suoritinajan maksimoiminen ei kuitenkaan ratkaise varsinaista ongelmaa, joka on Fungen ja Millingtonin mukaan se, että käytössä olevat algoritmit ovat yksinkertaisesti hitaita [5]. Runsaasti suoritinaikaa kuluttavat algoritmit, kuten polunetsintä ja strateginen päättely pyritään viilaamaan mahdollisimman tehokkaiksi. Jokaisella pelinkehittäjällä lienee esimerkiksi oma optimoitu versionsa suositusta A* -algoritmista. Tästä huolimatta tekoälyä joudutaan monesti yksinkertaistamaan suorituskyvyn parantamiseksi. Esimerkiksi reaaliaikastrategiapelissä Total War: Rome II (The Creative Assembly, 2013) hyödynnettiin polunetsinnässä approksimoituja reittejä ja strategisella puolella valmiiksi laskettuja vaikutusaluekarttoja [1]. Tämänkaltainen yksinkertaistaminen ei vielä vaikuta juurikaan tekoälyn laatuun, mutta jos tekoälyn on sorruttava esimerkiksi huijaamiseen suorituskyvyn takaamiseksi, pelaaja saattaa huomata tämän hyvin nopeasti. Tällöin pelin viihdyttävyys luonnollisesti kärsii. 28
Vasteaika. Vasteaikaa koskeva ohje ei ole juuri muuttunut Robert B. Millerin vuonna 1968 pitämästä esityksestä:
Nielsen: "Olen tutkinut Webin käytettävyyttä vuodesta 1994, ja jokaisessa tutkimuksessa esiin on noussut sama asia: käyttäjät haluaisivat sivujen latautuvan nopeammin. Aluksi olin sitä mieltä, että käyttäjät
Määrittelydokumentti
Määrittelydokumentti Aineopintojen harjoitustyö: Tietorakenteet ja algoritmit (alkukesä) Sami Korhonen 014021868 sami.korhonen@helsinki. Tietojenkäsittelytieteen laitos Helsingin yliopisto 23. kesäkuuta
58131 Tietorakenteet (kevät 2009) Harjoitus 11, ratkaisuja (Topi Musto)
811 Tietorakenteet (kevät 9) Harjoitus 11, ratkaisuja (Topi Musto) 1. Bellmanin-Fordin algoritmin alustusvaiheen jälkeen aloitussolmussa on arvo ja muissa solmuissa on arvo ääretön. Kunkin solmun arvo
Joonas Haapala Ohjaaja: DI Heikki Puustinen Valvoja: Prof. Kai Virtanen
Hävittäjälentokoneen reitin suunnittelussa käytettävän dynaamisen ja monitavoitteisen verkko-optimointitehtävän ratkaiseminen A*-algoritmilla (valmiin työn esittely) Joonas Haapala 8.6.2015 Ohjaaja: DI
13 Lyhimmät painotetut polut
TIE-20100 Tietorakenteet ja algoritmit 297 13 Lyhimmät painotetut polut BFS löytää lyhimmän polun lähtösolmusta graafin saavutettaviin solmuihin. Se ei kuitenkaan enää suoriudu tehtävästä, jos kaarien
Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14
Arkkitehtuurikuvaus Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy Ryhmä 14 Muutoshistoria Versio Pvm Päivittäjä Muutos 0.4 1.11.2007 Matti Eerola 0.3 18.10.2007 Matti Eerola 0.2
Nollasummapelit ja bayesilaiset pelit
Nollasummapelit ja bayesilaiset pelit Kristian Ovaska HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Seminaari: Peliteoria Helsinki 18. syyskuuta 2006 Sisältö 1 Johdanto 1 2 Nollasummapelit 1 2.1
Zeon PDF Driver Trial
Matlab-harjoitus 2: Kuvaajien piirto, skriptit ja funktiot. Matlabohjelmoinnin perusteita Numeerinen integrointi trapezoidaalimenetelmällä voidaan tehdä komennolla trapz. Esimerkki: Vaimenevan eksponentiaalin
Algoritmit 1. Luento 1 Ti Timo Männikkö
Algoritmit 1 Luento 1 Ti 10.1.2017 Timo Männikkö Luento 1 Algoritmi Algoritmin toteutus Ongelman ratkaiseminen Algoritmin tehokkuus Algoritmin suoritusaika Algoritmin analysointi Algoritmit 1 Kevät 2017
Solmu 3/2001 Solmu 3/2001. Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä:
Frégier n lause Simo K. Kivelä Kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa oli seuraava tehtävä: Suorakulmaisen kolmion kaikki kärjet sijaitsevat paraabelilla y = x 2 ; suoran kulman
Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.
Tehtävä. Tämä tehtävä on aineistotehtävä, jossa esitetään ensin tehtävän teoria. Sen jälkeen esitetään neljä kysymystä, joissa tätä teoriaa pitää soveltaa. Mitään aikaisempaa tehtävän aihepiirin tuntemusta
Tasohyppelypeli. Piirrä grafiikat. Toteuta pelihahmon putoaminen ja alustalle jääminen:
Tasohyppelypeli 1 Pelissä ohjaat liikkuvaa ja hyppivää hahmoa vaihtelevanmuotoisessa maastossa tavoitteenasi päästä maaliin. Mallipelinä Yhden levelin tasohyppely, tekijänä Antonbury Piirrä grafiikat Pelaajan
Algoritmit 1. Luento 10 Ke Timo Männikkö
Algoritmit 1 Luento 10 Ke 14.2.2018 Timo Männikkö Luento 10 Algoritminen ongelmanratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Lisäyslajittelu Valintalajittelu Permutaatiot
Algoritmit 1. Luento 10 Ke 11.2.2015. Timo Männikkö
Algoritmit 1 Luento 10 Ke 11.2.2015 Timo Männikkö Luento 10 Algoritminen ongelman ratkaisu Suunnittelumenetelmät Raaka voima Järjestäminen eli lajittelu Kuplalajittelu Väliinsijoituslajittelu Valintalajittelu
Tietorakenteet ja algoritmit - syksy 2015 1
Tietorakenteet ja algoritmit - syksy 2015 1 Tietorakenteet ja algoritmit - syksy 2015 2 Tietorakenteet ja algoritmit Johdanto Ari Korhonen Tietorakenteet ja algoritmit - syksy 2015 1. JOHDANTO 1.1 Määritelmiä
etunimi, sukunimi ja opiskelijanumero ja näillä
Sisällys 1. Algoritmi Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.1 1.2 Algoritmin määritelmä Ohjelmointi
SUOMEN KUNTALIITTO RY
Karttaliittymä Versio: 18.10.2011 Julkaistu: 27.10.2011 Voimassaoloaika: Toistaiseksi Sisällys 1 Johdanto... 2 1.1 Suosituksen tausta... 2 1.2 Suosituksen rakenne... 2 2 Soveltamisala... 2 3 Lyhenteet...
1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa:
Tietorakenteet, laskuharjoitus 10, ratkaisuja 1. (a) Seuraava algoritmi tutkii, onko jokin luku taulukossa monta kertaa: SamaLuku(T ) 2 for i = 1 to T.length 1 3 if T [i] == T [i + 1] 4 return True 5 return
Kuva Suomen päätieverkko 1 Moottoritiet on merkitty karttaan vihreällä, muut valtatiet punaisella ja kantatiet keltaisella värillä.
POHDIN projekti TIEVERKKO Tieverkon etäisyyksien minimointi ja esimerkiksi maakaapeleiden kokonaismäärän minimointi sekä ylipäätään äärellisen pistejoukon yhdistäminen reitityksillä toisiinsa niin, että
Neuroverkkojen soveltaminen vakuutusdatojen luokitteluun
Neuroverkkojen soveltaminen vakuutusdatojen luokitteluun Sami Hokuni 12 Syyskuuta, 2012 1/ 54 Sami Hokuni Neuroverkkojen soveltaminen vakuutusdatojen luokitteluun Turun Yliopisto. Gradu tehty 2012 kevään
JOHDATUS TEKOÄLYYN TEEMU ROOS
JOHDATUS TEKOÄLYYN TEEMU ROOS KURSSIN PERUSTIEDOT VALINNAINEN AINEOPINTOTASOINEN KURSSI, 5 OP PERIODI 3: 16.1.2017-3.3.2016 (7 VIIKKOA+KOE) LUENNOT (CK112): MA 14-16, TI 14-16 LASKUHARJOITUKSET: RYHMÄ
Johdatus verkkoteoriaan 4. luento
Johdatus verkkoteoriaan 4. luento 28.11.17 Viikolla 46 läpikäydyt käsitteet Viikolla 47 läpikäydyt käsitteet Verkko eli graafi, tasoverkko, solmut, välit, alueet, suunnatut verkot, isomorfiset verkot,
JOHDATUS TEKOÄLYYN TEEMU ROOS
JOHDATUS TEKOÄLYYN TEEMU ROOS KURSSIN PERUSTIEDOT VALINNAINEN AINEOPINTOTASOINEN KURSSI, 5 OP PERIODI 3: 18.1.2016-6.3.2016 (7 VIIKKOA+KOE) LUENNOT (CK112): MA 14-16, TI 14-16 LASKUHARJOITUKSET: RYHMÄ
Luku 7. Verkkoalgoritmit. 7.1 Määritelmiä
Luku 7 Verkkoalgoritmit Verkot soveltuvat monenlaisten ohjelmointiongelmien mallintamiseen. Tyypillinen esimerkki verkosta on tieverkosto, jonka rakenne muistuttaa luonnostaan verkkoa. Joskus taas verkko
Yhtälönratkaisusta. Johanna Rämö, Helsingin yliopisto. 22. syyskuuta 2014
Yhtälönratkaisusta Johanna Rämö, Helsingin yliopisto 22. syyskuuta 2014 Yhtälönratkaisu on koulusta tuttua, mutta usein sitä tehdään mekaanisesti sen kummempia ajattelematta. Jotta pystytään ratkaisemaan
Aiheen rajaus Tutkimussuunnitelma
Aiheen rajaus Tutkimussuunnitelma Digitaalisen kulttuurin tutkimusmenetelmät 5.2. 2008 Aiheen rajaaminen Aihepiirin täsmentäminen ja supistaminen Aihetta helpompi tutkia Mahdollistaa syvemmän analyysin
Tietorakenteet, laskuharjoitus 7, ratkaisuja
Tietorakenteet, laskuharjoitus, ratkaisuja. Seuraava kuvasarja näyttää B + -puun muutokset lisäysten jälkeen. Avaimet ja 5 mahtuvat lehtisolmuihin, joten niiden lisäys ei muuta puun rakennetta. Avain 9
Lauseen erikoistapaus on ollut kevään 2001 ylioppilaskirjoitusten pitkän matematiikan kokeessa seuraavassa muodossa:
Simo K. Kivelä, 13.7.004 Frégier'n lause Toisen asteen käyrillä ellipseillä, paraabeleilla, hyperbeleillä ja niiden erikoistapauksilla on melkoinen määrä yksinkertaisia säännöllisyysominaisuuksia. Eräs
JOHDATUS TEKOÄLYYN TEEMU ROOS
JOHDATUS TEKOÄLYYN TEEMU ROOS KURSSIN PERUSTIEDOT VALINNAINEN AINEOPINTOTASOINEN KURSSI, 4 OP PERIODI 1: 6.9.2012-12.10.2012 (6 VIIKKOA) LUENNOT (B123, LINUS TORVALDS -AUDITORIO): TO 10-12, PE 12-14 LASKUHARJOITUKSET
Ohjelmistojen mallintaminen, mallintaminen ja UML
582104 Ohjelmistojen mallintaminen, mallintaminen ja UML 1 Mallintaminen ja UML Ohjelmistojen mallintamisesta ja kuvaamisesta Oliomallinnus ja UML Käyttötapauskaaviot Luokkakaaviot Sekvenssikaaviot 2 Yleisesti
Graafiset käyttöliittymät Sivunparantelu
Graafiset käyttöliittymät Sivunparantelu Johdanto Tarkoituksenamme on parantaa Konebox.fi-verkkokaupan nettisivuja. Ensivaikutelman perusteella sivusto tuntuu todella kömpelöltä ja ahdistavalta. Sivu on
Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo
Concurrency - Rinnakkaisuus Group: 9 Joni Laine Juho Vähätalo Sisällysluettelo 1. Johdanto... 3 2. C++ thread... 4 3. Python multiprocessing... 6 4. Java ExecutorService... 8 5. Yhteenveto... 9 6. Lähteet...
811312A Tietorakenteet ja algoritmit 2015-2016. I Johdanto
811312A Tietorakenteet ja algoritmit 2015-2016 I Johdanto Sisältö 1. Algoritmeista ja tietorakenteista 2. Algoritmien analyysistä 811312A TRA, Johdanto 2 I.1. Algoritmeista ja tietorakenteista I.1.1. Algoritmien
Datatähti 2019 loppu
Datatähti 2019 loppu task type time limit memory limit A Summa standard 1.00 s 512 MB B Bittijono standard 1.00 s 512 MB C Auringonlasku standard 1.00 s 512 MB D Binääripuu standard 1.00 s 512 MB E Funktio
Luku 8. Aluekyselyt. 8.1 Summataulukko
Luku 8 Aluekyselyt Aluekysely on tiettyä taulukon väliä koskeva kysely. Tyypillisiä aluekyselyitä ovat, mikä on taulukon välin lukujen summa tai pienin luku välillä. Esimerkiksi seuraavassa taulukossa
Matematiikan tukikurssi
Matematiikan tukikurssi Kurssikerta 4 Jatkuvuus Jatkuvan funktion määritelmä Tarkastellaan funktiota f x) jossakin tietyssä pisteessä x 0. Tämä funktio on tässä pisteessä joko jatkuva tai epäjatkuva. Jatkuvuuden
Algoritmit 1. Luento 9 Ti Timo Männikkö
Algoritmit 1 Luento 9 Ti 7.2.2017 Timo Männikkö Luento 9 Graafit ja verkot Kaaritaulukko, bittimatriisi, pituusmatriisi Verkon lyhimmät polut Floydin menetelmä Lähtevien ja tulevien kaarien listat Forward
Ohjelmoinnin peruskurssi Y1
Ohjelmoinnin peruskurssi Y1 CSE-A1111 30.9.2015 CSE-A1111 Ohjelmoinnin peruskurssi Y1 30.9.2015 1 / 27 Mahdollisuus antaa luentopalautetta Goblinissa vasemmassa reunassa olevassa valikossa on valinta Luentopalaute.
Aiheen rajaus Tutkimussuunnitelma. Aiheen rajaaminen. Aiheen rajaaminen tutkittavaan muotoon
Aiheen rajaus Tutkimussuunnitelma Digitaalisen kulttuurin tutkimusmenetelmät 17.3. 2009 2 Aiheen rajaaminen Aihepiirin täsmentäminen ja supistaminen Aihetta helpompi tutkia Mahdollistaa syvemmän analyysin
Matematiikan tukikurssi, kurssikerta 3
Matematiikan tukikurssi, kurssikerta 3 1 Epäyhtälöitä Aivan aluksi lienee syytä esittää luvun itseisarvon määritelmä: { x kun x 0 x = x kun x < 0 Siispä esimerkiksi 10 = 10 ja 10 = 10. Seuraavaksi listaus
Oikeasta tosi-epätosi -väittämästä saa pisteen, ja hyvästä perustelusta toisen.
Tietorakenteet, kevät 2012 Kurssikoe 2, mallivastaukset 2. (a) Järjestämistä ei voi missään tilanteessa suorittaa nopeammin kuin ajassa Θ(n log n), missä n on järjestettävän taulukon pituus. Epätosi: Yleisessä
A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä.
Esimerkki otteluvoiton todennäköisyys A ja B pelaavat sarjan pelejä. Sarjan voittaja on se, joka ensin voittaa n peliä. Yksittäisessä pelissä A voittaa todennäköisyydellä p ja B todennäköisyydellä q =
Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta.
Ohjeissa pyydetään toisinaan katsomaan koodia esimerkkiprojekteista (esim. Liikkuva_Tausta1). Saat esimerkkiprojektit opettajalta. Vastauksia kysymyksiin Miten hahmon saa hyppäämään? Yksinkertaisen hypyn
T Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet )
T-79144 Syksy 2004 Logiikka tietotekniikassa: perusteet Laskuharjoitus 7 (opetusmoniste, kappaleet 11-22) 26 29102004 1 Ilmaise seuraavat lauseet predikaattilogiikalla: a) Jokin porteista on viallinen
Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä?
Ongelma 1: Ovatko kaikki tehtävät/ongelmat deterministisiä? 2013-2014 Lasse Lensu 2 Ongelma 2: Milloin ongelmat muuttuvat oikeasti hankaliksi? 2013-2014 Lasse Lensu 3 Ongelma 3: Miten hankalia ongelmia
Seniorit ja tietokonepelit. Tietokonepelien pelaamisesta senioreiden näkökulmasta. Seniorien pelitapahtuma 16.11.2015 Enter ry
Seniorit ja tietokonepelit Tietokonepelien pelaamisesta senioreiden näkökulmasta Seniorien pelitapahtuma 16.11.2015 Enter ry 1 Seniorit ovat erilaisia Kiinnostus tietokonepelien pelaamiseen vaihtelee tietokonepelien
2. Seuraavassa kuvassa on verkon solmujen topologinen järjestys: x t v q z u s y w r. Kuva 1: Tehtävän 2 solmut järjestettynä topologisesti.
Tietorakenteet, laskuharjoitus 11, ratkaisuja 1. Leveyssuuntaisen läpikäynnin voi toteuttaa rekursiivisesti käsittelemällä jokaisella rekursiivisella kutsulla kaikki tietyllä tasolla olevat solmut. Rekursiivinen
ELM GROUP 04. Teemu Laakso Henrik Talarmo
ELM GROUP 04 Teemu Laakso Henrik Talarmo 23. marraskuuta 2017 Sisältö 1 Johdanto 1 2 Ominaisuuksia 2 2.1 Muuttujat ja tietorakenteet...................... 2 2.2 Funktiot................................
Testidatan generointi
Testidatan generointi Anu Ahonen Kevät 2008 Tämä työ on tehty Creative Commons -lisenssin alla Työn tarkasti 9.4.2008 Jouni Huotari (JAMK/IT) 1 SISÄLTÖ 1 TYÖN LÄHTÖKOHDAT JA TOTEUTUS...2 2 TESTIDATAN GENEROINTI
811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2018-2019 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari Korhonen
Tietorakenteet ja algoritmit Johdanto Lauri Malmi / Ari 1 1. JOHDANTO 1.1 Määritelmiä 1.2 Tietorakenteen ja algoritmin valinta 1.3 Algoritmit ja tiedon määrä 1.4 Tietorakenteet ja toiminnot 1.5 Esimerkki:
Algoritmit 2. Luento 11 Ti Timo Männikkö
Algoritmit 2 Luento 11 Ti 24.4.2018 Timo Männikkö Luento 11 Rajoitehaku Kapsäkkiongelma Kauppamatkustajan ongelma Paikallinen etsintä Lyhin virittävä puu Vaihtoalgoritmit Algoritmit 2 Kevät 2018 Luento
Valmistaudu peliin, keskity omaan pelaamiseesi. Porin Narukerä Markku Gardin 6.2.2015
Valmistaudu peliin, keskity omaan pelaamiseesi Porin Narukerä Markku Gardin 6.2.2015 Mentaaliharjoittelun perusta (hyvä tietää) Aivot ohjaavat - hermojärjestelmät, hormonit ja lihakset toimeenpanevat Omat
Liikehavaintojen estimointi langattomissa lähiverkoissa. Diplomityöseminaari Jukka Ahola
Liikehavaintojen estimointi langattomissa lähiverkoissa Diplomityöseminaari Jukka Ahola ESITYKSEN SISÄLTÖ Työn tausta Tavoitteen asettelu Johdanto Liikehavaintojen jakaminen langattomassa mesh-verkossa
18 Komponentit, ulkoasu ja visuaalisuus. Materiaalit CC-BY 4.0 Mikko Lampi
18 Komponentit, ulkoasu ja visuaalisuus Materiaalit CC-BY 4.0 Mikko Lampi Sisältö Alustus 1. Pelikomponentit 2. Ulkoasu ja visuaalisuus 3. Esimerkkejä Työskentelyä Pelikomponenttien suunnittelu Visuaalisuuden
Kieli merkitys ja logiikka. 2: Helpot ja monimutkaiset. Luento 2. Monimutkaiset ongelmat. Monimutkaiset ongelmat
Luento 2. Kieli merkitys ja logiikka 2: Helpot ja monimutkaiset Helpot ja monimutkaiset ongelmat Tehtävä: etsi säkillinen rahaa talosta, jossa on monta huonetta. Ratkaisu: täydellinen haku käy huoneet
811120P Diskreetit rakenteet
811120P Diskreetit rakenteet 2016-2017 1. Algoritmeista 1.1 Algoritmin käsite Algoritmi keskeinen laskennassa Määrittelee prosessin, joka suorittaa annetun tehtävän Esimerkiksi Nimien järjestäminen aakkosjärjestykseen
Firmaliiga Högbacka
Firmaliiga 16.5.2017 Högbacka Analyysi reittihärvelipiirrosten pohjalta A-rata 3-4: Pitkä väli, jossa oli useita eri reitinvalintavaihtoehtoja. Haasteita oli rastilta lähdössä ja toteutuksen sujuvuudessa.
Pelin kautta opettaminen
Pelin kautta opettaminen Pelin kautta opettaminen Pelaamaan oppii vain pelaamalla?? Totta, mutta myös harjoittelemalla pelinomaisissa tilanteissa havainnoimista, päätöksentekoa ja toimintaa. Pelikäsitystä
58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, , vastauksia
58131 Tietorakenteet ja algoritmit (kevät 2014) Uusinta- ja erilliskoe, 10..2014, vastauksia 1. [9 pistettä] (a) Todistetaan 2n 2 + n + 5 = O(n 2 ): Kun n 1 on 2n 2 + n + 5 2n 2 + n 2 +5n 2 = 8n 2. Eli
1. Algoritmi 1.1 Sisällys Algoritmin määritelmä. Aiheen pariin johdatteleva esimerkki. Muuttujat ja operaatiot (sijoitus, aritmetiikka ja vertailu). Algoritmista ohjelmaksi. 1.2 Algoritmin määritelmä Ohjelmointi
Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana
Muilla kielillä: English Suomi Pong-peli, vaihe 2 Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana Laitetaan pallo liikkeelle Tehdään kentälle reunat Vaihdetaan kentän taustaväri Zoomataan
10. Painotetut graafit
10. Painotetut graafit Esiintyy monesti sovelluksia, joita on kätevä esittää graafeina. Tällaisia ovat esim. tietoverkko tai maantieverkko. Näihin liittyy erinäisiä tekijöitä. Tietoverkkoja käytettäessä
Peliteoria luento 1. May 25, 2015. Peliteoria luento 1
May 25, 2015 Tavoitteet Valmius muotoilla strategisesti ja yhteiskunnallisesti kiinnostavia tilanteita peleinä. Kyky ratkaista yksinkertaisia pelejä. Luentojen rakenne 1 Joitain pelejä ajanvietematematiikasta.
Testaajan eettiset periaatteet
Testaajan eettiset periaatteet Eettiset periaatteet ovat nousseet esille monien ammattiryhmien toiminnan yhteydessä. Tämä kalvosarja esittelee 2010-luvun testaajan työssä sovellettavia eettisiä periaatteita.
Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit
Liite E - Esimerkkiprojekti E Esimerkkiprojekti Olet lukenut koko kirjan. Olet sulattanut kaiken tekstin, Nyt on aika soveltaa oppimiasi uusia asioita pienen, mutta täydellisesti muotoiltuun, projektiin.
Rekursiolause. Laskennan teorian opintopiiri. Sebastian Björkqvist. 23. helmikuuta Tiivistelmä
Rekursiolause Laskennan teorian opintopiiri Sebastian Björkqvist 23. helmikuuta 2014 Tiivistelmä Työssä käydään läpi itsereplikoituvien ohjelmien toimintaa sekä esitetään ja todistetaan rekursiolause,
Peliteoria luento 2. May 26, 2014. Peliteoria luento 2
May 26, 2014 Pelien luokittelua Peliteoriassa pelit voidaan luokitella yhteistoiminnallisiin ja ei-yhteistoiminnallisiin. Edellisissä kiinnostuksen kohde on eri koalitioiden eli pelaajien liittoumien kyky
JOHDATUS TEKOÄLYYN TEEMU ROOS
JOHDATUS TEKOÄLYYN TEEMU ROOS KURSSIN PERUSTIEDOT VALINNAINEN AINEOPINTOTASOINEN KURSSI, 5 OP PERIODI 1: 4.9.2014-17.10.2012 (7 VIIKKOA+KOE) LUENNOT (B123, LINUS TORVALDS -AUDITORIO): TO 10-12, PE 12-14
Kontrollilaitteet. Arsenaali
Arsenaali Kontrollilaitteet Tietokonepeleissä käytettäviä kontrollilaitteita on valtava määrä Kaikilla alustoilla, joilla pelejä pelataan on jokin vakio kontrolleri PC: Hiiri ja näppäimistö Konsolit: Controller
8.1. Tuloperiaate. Antti (miettien):
8.1. Tuloperiaate Katseltaessa klassisen todennäköisyyden määritelmää selviää välittömästi, että sen soveltamiseksi on kyettävä määräämään erilaisten joukkojen alkioiden lukumääriä. Jo todettiin, ettei
Luku 6. Dynaaminen ohjelmointi. 6.1 Funktion muisti
Luku 6 Dynaaminen ohjelmointi Dynaamisessa ohjelmoinnissa on ideana jakaa ongelman ratkaisu pienempiin osaongelmiin, jotka voidaan ratkaista toisistaan riippumattomasti. Jokaisen osaongelman ratkaisu tallennetaan
Opistojohtaminen muutoksessa hanke. Kansanopiston kehittämissuunnitelma. Tiivistelmä kehittämissuunnitelman laatimisen tukiaineistoista
Opistojohtaminen muutoksessa hanke Kansanopiston kehittämissuunnitelma Tiivistelmä kehittämissuunnitelman laatimisen tukiaineistoista Opistojohtaminen muutoksessa hankkeessa ryhmä kansanopistoja laati
Agenda. Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu ohjelmointi
1. Luento: Sulautetut Järjestelmät Arto Salminen, arto.salminen@tut.fi Agenda Johdanto Ominaispiirteitä Kokonaisjärjestelmän määrittely Eri alojen edustajien roolit Sulautetut järjestelmät ja sulautettu
Jouni Huotari OLAP-ohjetekstit kopioitu Microsoftin ohjatun OLAP-kuution teko-ohjeesta. Esimerkin kuvaus ja OLAP-määritelmä
OLAP-kuution teko Jouni Huotari OLAP-ohjetekstit kopioitu Microsoftin ohjatun OLAP-kuution teko-ohjeesta Esimerkin kuvaus ja OLAP-määritelmä Tavoitteena on luoda OLAP-kuutio Northwind-tietokannan tilaustiedoista
Verkko-optimointiin perustuva torjuntatasan laskenta mellakkapoliisin resurssien kohdentamisessa (valmiin työn esittely) Paavo Kivistö
Verkko-optimointiin perustuva torjuntatasan laskenta mellakkapoliisin resurssien kohdentamisessa (valmiin työn esittely) Paavo Kivistö 21.01.2013 Ohjaaja: Kai Virtanen Valvoja: Raimo P. Hämäläinen Työn
M =(K, Σ, Γ,, s, F ) Σ ={a, b} Γ ={c, d} = {( (s, a, e), (s, cd) ), ( (s, e, e), (f, e) ), (f, e, d), (f, e)
Tik-79.148 Kevät 2001 Tietojenkäsittelyteorian perusteet Laskuharjoitus 7 Demonstraatiotehtävien ratkaisut 1. Pinoautomaatti M = K Σ Γ s F missä K Σ s ja F on määritelty samalla tavalla kuin tilakoneellekin.
Algoritmit 2. Luento 12 Ke Timo Männikkö
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
UML -mallinnus TILAKAAVIO
UML -mallinnus TILAKAAVIO SISÄLLYS 3. Tilakaavio 3.1 Tilakaavion alku- ja lopputilat 3.2 Tilan nimi, muuttujat ja toiminnot 3.3 Tilasiirtymä 3.4 Tilasiirtymän vai tilan toiminnot 3.5 Tilasiirtymän tapahtumat
Ongelma(t): Voiko älykkyyden määritellä ja voiko sitä mitata, myös objektiivisesti? Onko älykkyyttä ilman (näkyvää) toimintaa? Voiko kone olla älykäs
Ongelma(t): Voiko älykkyyden määritellä ja voiko sitä mitata, myös objektiivisesti? Onko älykkyyttä ilman (näkyvää) toimintaa? Voiko kone olla älykäs ja jos voi, niin tulisiko sellainen rakentaa? 2012-2013
Ampumahiihto. Hiihto. Pelihahmon piirtäminen. Jos tahdot animoida hiihtämisen, Peli muodostuu kahdesta erilaisesta osasta: ensin
Ampumahiihto 1 Peli muodostuu kahdesta erilaisesta osasta: ensin hiihdetään ammuntapaikalle rämpyttämällä nuolinäppäimiä ja sen jälkeen yritetään ampua maalitaulut mahdollisimman nopeasti aikasakot välttäen.
KANNATTAVUUDEN ARVIOINTI JA KEHITTÄMINEN ELEMENTTILIIKETOIMINNASSA
LAPPEENRANNAN TEKNILLINEN YLIOPISTO TEKNISTALOUDELLINEN TIEDEKUNTA Tuotantotalouden koulutusohjelma KANNATTAVUUDEN ARVIOINTI JA KEHITTÄMINEN ELEMENTTILIIKETOIMINNASSA Diplomityöaihe on hyväksytty Tuotantotalouden
Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010
kielenä 9. joulukuuta 2010 Historia kielenä Historia Sovelluksia kehitettiin vuonna 1972 Kehittäjinä ranskalaiset Pääkehittäjä Alain Colmerauer Philippe Roussel programmation en logique Robert Kowalski
Pong-peli, vaihe Aliohjelmakutsu laskureita varten. 2. Laskurin luominen. Muilla kielillä: English Suomi
Muilla kielillä: English Suomi Pong-peli, vaihe 7 Tässä vaiheessa lisäämme peliin pistelaskun. Pong-pelissä pelaaja saa pisteen kun pallo ohittaa toisen pelaajan mailan. 1. Aliohjelmakutsu laskureita varten
Paikkatiedon hyödyntäminen vesiensuojeluyhdistyksissä
Everything happens somewhere. - Unknown Paikkatiedon hyödyntäminen vesiensuojeluyhdistyksissä Sini Pöytäniemi Paikkatietosuunnittelija Länsi-Uudenmaan vesi ja ympäristö ry 80 % (esim. julkishallinnon tuottamasta)
11/20: Konepelti auki
Ohjelmointi 1 / syksy 2007 11/20: Konepelti auki Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/11 Tämän luennon
BaRE Käyttövalmis vaatimusmäärittelymenetelmä
BaRE Käyttövalmis vaatimusmäärittelymenetelmä Uolevi Nikula, Tietotekniikan osasto, LTKK, Uolevi.Nikula@lut.fi 13.11.2002 un/tsoft 1 Esityksen sisältö Jatko-opinnot Lisensiaatintutkimus BaRE menetelmä
811312A Tietorakenteet ja algoritmit Kertausta jälkiosasta
811312A Tietorakenteet ja algoritmit 2018-2019 Kertausta jälkiosasta V Hashtaulukot ja binääriset etsintäpuut Hashtaulukot Perusajatus tunnettava Tiedettävä mikä on tiivistefunktio Törmäysongelman hallinta:
KUMPI OHJAA, STRATEGIA VAI BUDJETTI?
KUMPI OHJAA, STRATEGIA VAI BUDJETTI? Aalto University Executive Education Teemu Malmi Professori, AUSB WORKSHOP Alustus: Budjetti ohjaa, kaikki hyvin? Keskustelu pöydissä Yhteenveto Alustus: Miten varmistan,
T : Max-flow / min-cut -ongelmat
T-61.152: -ongelmat 4.3.2008 Sisältö 1 Määritelmät Esimerkki 2 Max-flow Graafin leikkaus Min-cut Max-flow:n ja min-cut:n yhteys 3 Perusajatus Pseudokoodi Tarkastelu 4 T-61.152: -ongelmat Virtausverkko
SYSTEEMIJOHTAMINEN! Sami Lilja! itsmf Finland 2014! Oct 2-3 2014! Kalastajatorppa, Helsinki! Reaktor 2014
SYSTEEMIJOHTAMINEN! Sami Lilja! itsmf Finland 2014! Oct 2-3 2014! Kalastajatorppa, Helsinki! Reaktor Mannerheimintie 2 00100, Helsinki Finland tel: +358 9 4152 0200 www.reaktor.fi info@reaktor.fi 2014
TIETOJEN TUONTI TIETOKANNASTA + PIVOT-TAULUKON JA OLAP-KUUTION TEKO
TIETOJEN TUONTI TIETOKANNASTA + PIVOT-TAULUKON JA OLAP-KUUTION TEKO JOUNI HUOTARI 2005-2010 OLAP-OHJETEKSTIT KOPIOITU MICROSOFTIN OHJATUN OLAP-KUUTION TEKO-OHJEESTA ESIMERKIN KUVAUS JA OLAP-MÄÄRITELMÄ
Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi
Rinnakkaisuuden hyväksikäyttö peleissä Paula Kemppi 24.4.2008 Esityksen rakenne Johdantoa Rinnakkaisuus Pelimoottorien rinnakkaisuuden mallit Funktionaalisen rinnakkaisuuden malli Rinnakkaisen tiedon malli
Selainpelien pelimoottorit
Selainpelien pelimoottorit Teemu Salminen Helsinki 28.10.2017 Seminaaritutkielma Helsingin yliopisto Tietojenkäsittelytiede ! 1 HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta
Kiinteistöjen paloturvallisuuden ajankohtaispäivät 2016 Muuttuva ympäristö ja teknologian haasteet Palontorjunnan laitteistot Lauri Lehto,
Kiinteistöjen paloturvallisuuden ajankohtaispäivät 2016 Muuttuva ympäristö ja teknologian haasteet Palontorjunnan laitteistot Lauri Lehto, Turvallisuusasiantuntija Kilpailu aikaa vastaan Nykyhetki 1v 5v
Tilastotiede ottaa aivoon
Tilastotiede ottaa aivoon kuinka aivoja voidaan mallintaa todennäköisyyslaskennalla, ja mitä yllättävää hyötyä siitä voi olla Aapo Hyvärinen Laskennallisen data-analyysin professori Matematiikan ja tilastotieteen
Algoritmit 2. Luento 10 To Timo Männikkö
Algoritmit 2 Luento 10 To 19.4.2018 Timo Männikkö Luento 10 Peruutusmenetelmä Osajoukon summa Verkon 3-väritys Pelipuut Pelipuun läpikäynti Algoritmit 2 Kevät 2018 Luento 10 To 19.4.2018 2/34 Algoritmien
Useasti Kysyttyä ja Vastattua
1. Miksen ostaisi tykkääjiä, seuraajia tai katsojia? Sinun ei kannata ostaa palveluitamme mikäli koet että rahasi kuuluvat oikeastaan kilpailijoidesi taskuun. 2. Miksi ostaisin tykkääjiä, seuraajia tai
Evolutiivisesti stabiilin strategian oppiminen
Evolutiivisesti stabiilin strategian oppiminen Janne Laitonen 8.10.2008 Maynard Smith: s. 54-60 Johdanto Käytös voi usein olla opittua perityn sijasta Tyypillistä käytöksen muuttuminen ja riippuvuus aikaisemmista