Skriptikielten käyttö pelitekoälyssä
|
|
- Jorma Hakola
- 7 vuotta sitten
- Katselukertoja:
Transkriptio
1 Skriptikielten käyttö pelitekoälyssä Reima Halmetoja Helsinki HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
2 HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto Fakultet/Sektion Faculty Laitos Institution Department Matemaattis-luonnontieteellinen Tekijä Författare Author Reima Halmetoja Työn nimi Arbetets titel Title Tietojenkäsittelytieteen laitos Skriptikielten käyttö pelitekoälyssä Oppiaine Läroämne Subject Tietojenkäsittelytiede Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages Tiivistelmä Referat Abstract sivua Tietojenkäsittelytieteen laitoksen Ohjelmistotuotanto ja tietokonepelit-seminaarin seminaariartikkeli. Artikkelissa käsitellään pelitekoälyä ja sen toteuttamista skriptikielillä. Avainsanat Nyckelord Keywords pelitekoäly, skriptikielet Säilytyspaikka Förvaringsställe Where deposited Muita tietoja övriga uppgifter Additional information
3 Sisältö ii 1 Johdanto 1 2 Pelitekoälystä Pelitekoälyn määrittely Kovakoodattu tekoäly Tehovaatimukset pelitekoälylle Lyhyt johdatus skriptikieliin 4 4 Pelitekoälyä skirptikielillä Tekoälyn skriptaaminen Triggerijärjestelmät Etuja ja haittoja Skriptikielet ja tehokkuus Laajennettavuus ja ei-ohjelmoijien skriptaus Skriptikielen valinta Yhteenveto 13 Lähteet 15
4 1 Johdanto 1 Ensimmäisessä osiossa Pelitekoälystä määrittelemme minkä tyyppisestä toiminnasta on kyse pelitekoälyä kehitettäessä (toteutustavasta riippumatta). Käymme myös läpi pinnallisesti kovakoodatun tekoälyn ideaa myöhempää vertailua varten. Tämän lisäksi tarkastelemme, minkä tyyppisiä tehovaatimuksia pelit asettavat tekoälylle. Tässä aineessa ei oleteta lukijalta erityistä tietämystä skriptikielistä (scripting language) tai skirptikielisten ohjelmien kirjoittamisesta. Tärkeimmät yleiset ominaisuudet skrpitikielten osalta pyritään käymään läpi ymmärrettävyyden parantamiseksi osiossa Lyhyt johdatus skriptikieliin. Katsaus ei sellaisenaan ole kuitenkaan erityisen kattava, koska aiheesta on yksinäänkin helposti aineksia omaan artikkeliinsa. Kolmannessa osiossa tarkastelemme skriptaamalla toteutettavaa pelitekoälyä. Osiossa keskitytään pelissä olevien älykkäältä toiminnalta vaikuttavien tapahtumien tarkasteluun sekä käsitellään epäpelaajahahmojen tekoälyä ryhmätason sodankäyntiä kuvaavan pelin eräässä osassa. Viimeisessä osiossa pyritään tarkastelemaan skriptikielten etuja ja haittoja peliprojekteissa. Tarkastelussa pyritään ottamaan huomioon aiemmin käsiteltyjä tehovaatimuksia. Lisäksi katsotaan minkä tyyppisiin projekteihin skriptikielen implementointi voi tarjota etuja. Yleisesti tässä seminaariaineessa pyritään käsittelemään skriptikielien ja tekoälyn perusteita johdattaen lukijaa aihepiiriin. Yksittäisiin skriptikieliin, peleihin tai toteutuksiin ei tarkemmin keskitytä, joskin esimerkkejä kustakin pyritään antamaan. Skriptikielistä kiinnostuneelle eräs tarkastelemisen arvoinen peli voi olla Amerikkalaisen Epic Gamesin Unreal-peli ja sen jatko-osat, joissa käytetystä skriptikielestä löytyy dokumentaatiota wiki-muodossa [Unr07]. Tämän lisäksi alkuperäisen pelin skriptikielellä toteutetut tekoälyvastukset tulivat aikanaan tunnetuiksi skaalautuvuudestaan ja taktisista kyvyistään [Toz02].
5 2 Pelitekoälystä 2 Osiossa käymme läpi muutamia aineessa käytettäviä peruskäsitteitä, kuten pelitekoälyn määritelmää. Lisäksi tutustumme tapaan, jolla tekoäly on perinteisesti liitetty osaksi pelejä. Osion lopuksi katsastamme, miten rajattu tietokoneiden ja pelikonsolien laskentateho vaikuttaa pelitekoälyyn. 2.1 Pelitekoälyn määrittely Mitä pelitekoäly oikeastaan on? Halutaanko itsenäisesti omia strategioitaan ja pelityylejään muodostava älykäs tietokonevastustaja vai ennalta ohjelmoitu kone, joka suorittaa tiettyjä operaatioita niille ennalta määrätyissä olosuhteissa. Tässä artikkelissa pelitekoäly määritellään tavalla, jota pääasiallisesti käytettäneen alan kirjallisuudessa [Mil06]. Tekoäly voidaan jakaa Russelin ja Norvigin tapaan seuraavanlaiseen nelikenttään: Systeemit, jotka ajattelevat kuin ihmiset Systeemit, jotka toimivat kuin ihmiset Systeemit, jotka ajattelevat rationaalisesti Systeemit, jotka toimivat rationaalisesti Kuva 1: Tekoälyn nelikenttä [RuN03]. Keskitymme näistä systeemeihin, jotka toimivat rationaalisesti. Pelitekoälyä ajateltaessa tärkeintä lienee lopputulos, jossa tekoälyn toiminta vaikuttaa pelaajan kannalta järkevältä. Tästä näkökulmasta tarkasteltuna termi tekoäly voi olla hieman harhaanjohtava. Termeinä agenttien suunnittelu tai käyttäytymisen mallintaminen voivatkin kuvastaa ongelmakenttää paremmin [Toz02]. Sana agentti tulee esiintymään aineessa myöhemminkin. Yksinkertaisesti sillä tarkoitetaan oliota joka toimii pelin ympäristössä ja on vuorovaikutuksessa sen kanssa. Vaikka pelitekoälyn tavoite on usein aiemmin mainitun oloinen, voivat lopputulokset erota suurestikin. Esimerkiksi pelaajan näkökulmasta kuvatuissa ampumispeleissä (FPS rst-person shooter), saattaa pelitekoäly olla niin vakuuttava, että pelaa-
6 3 ja voi luulla hahmon liikuttajan olevan verkkoyhteyden kautta pelaava ihminen. Tämäntyyppinen lopputulos ei kuitenkaan useimmiten ole tavoitteena pelitekoälyä suunniteltaessa. On kuitenkin mainittava, että ihmisen toiminnalta vaikuttavaa pelitapaa on yritetty kehittää erinäisiä tarkoituksia varten [LaD01]. On myös tärkeää käsittää, että pelitekoäly on riippuvainen asiayhteydestään [Toz02]. Esimerkiksi tietyssä FPS-pelissä erinomainen tekoälyvastustaja voi toiseen FPSpeliin siirrettynä olla erittäin huono, johtuen pelien erityyppisistä aseistuksista, taktiikoista, kenttäsuunnittelusta, jne., vaikka ohjelmakoodi sellaisenaan toimisi myös jälkimmäisessä pelissä. 2.2 Kovakoodattu tekoäly Perinteinen tapa pelitekoälyn toteuttamiseen on niin sanottu kovakoodattu tekoäly (hard-coded articial intelligence). Yksinkertaisimmillaan tämä voi tarkoittaa esimerkiksi Pac-Man-pelissä tehtyä painotettua satunnaisuutta, jonka perusteella Pac-Manin vastustajat valitsevat kulkusuuntansa saavuttuaan peliareenalla olevaan risteyskohtaan [Mil06]. Kovakoodatuksi tekoälyn tässä tapauksessa tekee se, että se on ohjelmoitu samalla ohjelmointikielellä kuin muut osat pelistä ja on sellaisenaan kiinteä osa pelin ohjelmakoodia. Kovakoodattu tekoäly sopii toteutustapana hyvin tekoälykomponentteihin, joita käytetään usein uudelleen. Esimerkki paljon uudelleenkäytettävästä komponentista, voi olla tekoälyhahmojen liikkumisalgoritmit. Suhteellisen yksinkertaisilla liikkumisalgoritmeilla voidaan toteuttaa useita tekoälyhahmojen liikkumistapoja, kuten hahmon seuraaminen, pakeneminen, väistäminen, jne. [Mil06], jotka ovat edelleen sovellettavissa moniin tarkoituksiin. Laskentatehon kannalta myös laskennallisesti vaativat algoritmit on hyvä toteuttaa kovakoodattuina palaamme aiheeseen myöhemmin.
7 2.3 Tehovaatimukset pelitekoälylle 4 Moderneille peleille on ominaista näyttävä 3d-graikka, jonkinasteisesti mallinnettu fysiikka ja muut runsaasti konetehoa vaativat ominaisuudet. Tästä johtuen pelin tekoäly voi usein varata vain pienen osan peliin käytettävästä laskentatehosta. Yksistään pelin graikan pyörittäminen vaatii yli 50% prosessorin tehosta [Her03]. Monissa peleissä noin 20% prosessorin kapasiteetista voidaan varata kaikkeen pelin tekoälyn vaatimaan laskentaan [Mil06], joskin tämä voi vaihdella riippuen pelin tapahtumista, pelistä yleisesti, pelin alustasta (pc, konsoli, jne). Tehovaatimukset asettavat pelitekoälylle merkittävän haasteen. Hyvää pelitekoälyä suunniteltaessa lienee siis hyvä ottaa huomioon käytössä oleva koneteho ja pyrkiä mahdollisimman tehokkaisiin ratkaisuihin kuhunkin ongelmaan. Optimointi- ja toteutustavoista riippumatta pelitekoälyssä esiintyy ongelmia, kuten reitinetsintä, joita voida ratkaista ilman merkittävää prosessoriresurssien käyttöä [Toz02]. 3 Lyhyt johdatus skriptikieliin Skriptikieli tai komentosarjakieli on ohjelmointikieli, joka on luotu yksinkertaistamaan monimutkaista tehtävää jollekin tietylle ohjelmalle [Ber02]. Itse peliohjelma voidaan puolestaan kirjoittaa jollain tavanomaisella ohjelmointikielellä, kuten C, C++ tai Java. Skriptikieltä käytetään siis valitulla ohjelmointikielellä kirjoitetun ohjelman yhteydessä jonkin sille soveltuvan tehtävän ratkaisemista varten. Skriptikielen rakenne koostuu tavanomaisesti kahdesta osasta: kielestä ja tulkista (scripting engine, virtual machine tai interpreter) [Ber02]. Kielellä määritellään syntaksi, jota ohjelmoija käyttää ohjatakseen tietokonetta suorittamaan jotakin tiettyjä operaatioita. Skriptikielet voivat muistuttaa hyvinkin paljon muita ohjelmointikieliä syntaktiselta arkkitehtuuriltaan, jolloin skriptikielellä kirjoitettu koodi voi näyttää paljon esimerkiksi Javalta, C++:lta, tms. Joissakin skriptikielissä kirjoitettua ohjelmakoodia, skriptiä (script) suoritetaan sellaisenaan tulkin avulla. Useimmissa peleissä käytetyissä skriptikielissä, mukaan lu-
8 5 kien esimerkiksi Lua, TLC, Quake-peliä varten suunniteltu Quake-C, tai Unrealpelisarjan UnrealScript, kirjoitettu skripti käännetään tavukoodiksi (bytecode) ennen sen suorittamista [Mil06]. Skriptille joudutaan tällöin tekemään muutamia toimenpiteitä tavukoodiksi kääntämistä varten. Ensimmäinen vaihe skriptin muuntamiseksi tavukoodiksi on skriptin tokenisointi (tokenizing). Tässä vaiheessa etsitään skriptin tekstistä erilliset elementit, kuten operaatiot, varatut sanat, merkkijonot, jne. Esimerkkinä skriptissä voi olla seuraava merkkijono apu = 12; joka voidaan jakaa tokeneihin seuraavasti apu (teksti) <väli> (tulostumaton merkki) = (sijoitusmerkki) <väli> (tulostumaton merkki) 12 (kokonaisluku) ; (lauseen lopetusmerkki) Tokenit syötetään edelleen parserille (parser). Parseri vastaa kielen lähdekoodin muuntamisesta muotoon, jota kääntäjä ymmärtää. Tämä tapahtuu muodostamalla parsimispuuksi (parse tree) kutsuttu tietorakenne, joka kuvaa käännettävää skriptiä [Ber02]. Aiemmin tokeneiksi muuntamamme esimerkki voidaan muuntaa seuraavalla tavalla kuvattavaksi parsimispuuksi:
9 6 lauseke = apu 12 Kuva 2: Yksinkertainen parsimispuu. Parsimispuu lähetetään edelleen koodin generoijalle (code generator), joka muuntaa sen tavukoodiksi. Tavukoodia voidaan tämän jälkeen ajaa skriptikielen tulkilla [Ber02]. Koko prosessi skriptistä tulkattavaksi tavukoodiksi voidaan kuvata alla esitetyllä tavalla: kääntäjä tokenisointi skripti parsiminen tavukoodi tavukoodin generointi ajonaikainen tulkki Kuva 3: Muunnos ihmisen kirjoittamasta skriptistä ajettavaan tavukoodiin. Käännösvaiheen jälkeen kielen tulkki suorittaa tavukoodiksi käännettyä ohjelmaa konekäskyjen tasolla. Tavukoodiksi käännettävät skriptikielet muistuttavat siis hieman Javaa, jossa myös käännetään selkokielinen ohjelma virtuaalikoneella pyöritettäväksi tavukoodiksi. Pienenä erona Javassa kuitenkin virtuaalikone edelleen kääntää tavukoodin konekieliseksi juuri ennen sen ajamista (ns. just-in-time compiling. Tätä tekniikkaa käytetään kuitenkin harvemmin skriptikielissä [Mil06]. Tällaisenaan
10 tulkattavat skriptikielet eroavat merkittävästi esimerkiksi C-ohjelmointikielestä, jossa ohjelmakoodi käännetään suoraan konekieleksi. 7 4 Pelitekoälyä skirptikielillä Pelien kehittäjillä on monenlaisia vaihtoehtoja pelitekoälyn kehittämiseen skirptikielten avulla. Tarkastelemme esimerkkiä pelistä, jossa on käytetty skiptaamista taktisen tason tekoälytoiminnan toteuttamiseen. Lisäksi tutustumme triggerijärjestelmiin, yksinkertaiseen skriptikielillä toteutettavaksi soveltuvaan tekniikkaan. 4.1 Tekoälyn skriptaaminen Tarkastellaan esimerkkiä vuonna 2006 tuotannossa olleesta, joskin mainitsemattomasta pelistä, joka käyttää hyväkseen tekoälyn skriptausta [Mil06]. Eräässä pelin osassa sotilasryhmän tarkoituksena on vallata huone. Pelin suunnittelussa keskityttiin siihen, että huoneen valtaaminen tapahtuisi amerikkalaisen sotilasohjeistuksen mukaan. Ohjeistuksessa yksi ryhmän sotilaista heittää huoneen oviaukosta käsikranaatin. Ensimmäinen sotilaista menee huoneeseen ja liikkuu seinää myöten huoneen nurkkaan. Toinen sotilas liikkuu huoneen toisella puolella olevaan nurkkaan. Kaksi jäljellä olevaa sotilasta liikkuvat oviaukon sisäpuolelle suojaamaan muuta ryhmää. Tarkastellaan valtaamisessa käytettyjä skriptejä: Liiku sijaintiin oven ulkopuolella Heitä kranaatti ovesta Liiku lähellä olevaan kulmaan huoneessa Suojaa oviaukon sisäpuoli Näitä toimintoja koordinoidaan edelleen ylemmän tason skriptillä, joka selvittää ovea lähimpänä olevat huoneen nurkat Esimerkkipelissä nurkat oli selvitetty eräällä toisella tekoälymenetelmällä, mutta tämä oltaisi voitu toteuttaa myös kentän suun-
11 8 nitteluvaiheessa. Selvittämällä tarvittavat nurkat etukäteen voidaan pelissä ajaa samaa skriptiä halutun toiminnan toteuttamiseen riippumatta huoneen muodosta. Tilanteissa, joissa ryhmän koko on aiempaa esimerkkiä pienempi (alle neljä) käytetään edelleen samoja toimintaan vaikuttavia skriptejä. Ainoa asia, joka muuttuu on skriptien koordinoimiseen käytettävä ylemmän tason skripti. Esimerkiksi kolmen hahmon valtauksessa vain yksi hahmoista jäisi suojaamaan oviaukkoa (kahden aikaisemman mennessä huoneen nurkkiin). Kuva 4: Huoneen vyöryttäminen neljällä hahmolla ryhmätason sotapelissä [Mil06]. Pelissä saatiin aikaan monimutkaiselta taktiselta kuviolta vaikuttava toiminta muutaman skriptin avulla. Skriptien käyttö tämän tyyppisiä tarkoituksia varten voikin olla hyvä ratkaisu, koska niiden avulla voidaan yksinkertaistaa monimutkaisempaa päätöksentekoprosessia. Esimerkin skriptit olivat myös melko hyvin uudelleenkäytettäviä ja esimerkiksi vajaan ryhmän toimintaa ohjatessa ei jouduta kirjoittamaan kaikkea ryhmän toimintaa ohjaavia skriptejä uudelleen. Vaikkakin esimerkkipelissä toteutettiin skriptien avulla suhteellisen monimutkaista toimintaa, voidaan vastaavan tyyppisesti kirjoittaa yksinkertaisemmillekin tekoälyhahmojen toiminnoille so-
12 pivia skriptejä, kuten pelaajan hahmoa kohti ampumista, lääkepakkausten käyttöä, jne Triggerijärjestelmät Triggerijärjestelmiä (trigger system) voidaan pitää yksinkertaisena tapana saada agentit toimimaan muun pelimaailman kanssa. Triggerijärjestelmällä on kaksi pääasiallista tarkoitusta pelissä: pitää kirjaa pelimaailmassa olevista tapahtumista, joiden kanssa agentti voi olla vuorovaikutussuhteessa ja minimoida prosessointitarve, jota käytetään agenttien vuorovaikutukseen näiden tapahtumien kanssa. Triggeri (trigger) voi olla mikä tahansa agenttiin vaikuttava ärsyke pelissä, kuten ampumisen äänen kuuleminen, johonkin paikkaan saapuminen, tietty vahingoittumisen taso, jne. Edelleen kullekin agentille voidaan määritellä, mitkä kytkimet vaikuttavat niihin [Ork02]. Katsastetaan esimerkkejä ärsykkeistä. FPS-pelissä pelaajan hahmo saattaa laukaista hälytyksen, joka toimii kytkimenä vaikuttaen tekoälyhahmojen toimintaan. Kaikki hälytyksen kuulevat tekoälyhahmot pyrkivät tällöin liikkumaan hälytyksen suuntaan. Toisena esimerkkinä tekoälyhahmo saattaa nähdä pelaajan hahmon ampuvan itseään kohti, josta tekoälyhahmo liikkuu jonkin suojan taakse. Suojan takaa tekoälyhahmo pyrkii heittämään käsikranaatteja pelaajan hahmoa kohti. Tässä voi olla kyseessä kaksi triggeriä: ensimmäinen on pelaajan hahmon havaitseminen, joka johtaa suojautumiseen. Toinen kytkimistä voi olla suojan takana oleminen, joka asettaa tekoälyn vaihtamaan aseensa epäsuorasti heitettäviin kranaatteihin. Aiemmin mainitun tyyppistä käyttäytymistä voidaan saada aikaan myös ilman kytkinjärjestelmää. Tämä voidaan toteuttaa kyselyjä (polling) tapahtumille kutakin agenttia kohden. Ongelmallista tässä ratkaisussa on esimerkiksi se, että kukin agentti joutuu kysymään kaikilta muilta agenteilta, oliko tämä juuri se, jonka ärsykkeeseen tuli reagoida (laskennan vaativuuden ollessa tällöin O(n 2 ))[Ork02]. Yleistetyssä kytkinjärjestelmässä kytkimet rekisteröidään tapahtumien sattuessa. Jokaisessa kytkinjärjestelmän syklissä käydään läpi kaikkien agenttien lista. Tässä ajetaan testejä, joiden avulla selvitetään, onko kyseinen agentti kiinnostunut mis-
13 10 tään tällä hetkellä olemassa olevista kytkimistä. Agentit puolestaan suorittavat prosessointia riippuen siitä, kuinka moni kytkin kyseistä agenttia kiinnostaa. Triggerijärjestelmä on mielenkiintoinen tekoälyratkaisu. Suhteellisen yksinkertaisella ärsykkeisiin reagoimisella voidaan aikaansaada illuusio siitä, että esimerkiksi tekoälypelaajat pystyvät monimutkaiseen taktiseen toimintaan (kuten suojaan hakeutumiseen ja siitä kranaattien heittelyyn) tai interaktioon pelimaailman kanssa (jääkaapille saapuva vartija juo maitoa kaapista). Sellaisenaan se sopii erinomaisesti pelitekoälyn tarkoitukseen: rationaaliselta vaikuttavan toiminnan aikaansaamiseen. Skriptaaminen voi puolestaan olla hyvä tapa toteuttaa triggerijärjestelmä, koska kieli itsessään voidaan määrittää vastaamaan hyvin pelin tapahtumia. Kenttien suunnittelussa voidaan muokata triggerien skriptejä ja liittää niitä pelikenttiin vaikuttamatta muun pelin ohjelmakoodiin. Jos pelissä käytettävä skriptikieli on suunniteltu sillä tavalla, että sen käyttämiseen ei tarvita erikoista ohjelmointitaitoa, voivat myös ohjelmointiin osallistumattomat kenttäsuunnittelijat luoda uusia triggereitä mielenkiintoisia pelitapahtumia varten. Mainitaan edelleen, että johdannossa esitelty Unreal-peli ja sen jatko-osat käyttävät hyväkseen triggerijärjestelmää pelien tekoälyn toteutuksessa [Unr07]. 5 Etuja ja haittoja Osiossa pyritään luomaan kriittinen katsaus skriptikielten käyttöön pelitekoälyä toteutettaessa. Tarkastelemme tekoälyn skriptikielellä toteuttamisen hyötyjä ja haittoja muun muassa laajennettavuuden, hyllyiän ja tehovaatimusten kannalta. 5.1 Skriptikielet ja tehokkuus Tulkattavana kielenä skriptikielellä kirjoitetut ohjelman osat ovat huomattavasti hitaampia kuin konekieliset ohjelmat. Unreal-pelissä käytetyn UnrealScript-kielen nopeus on arvioitu noin 20 kertaa hitaammaksi kuin konekielisen ohjelman [Swe98]. Ero on erittäin merkittävä. Toisaalta on otettava huomioon, mihin pelin osiin skriptaamista käytetään. Pelin kriittisimmät osat ovat Unreal-pelissä toteutettu tehok-
14 11 kaammalla ohjelmointikielellä. Eräs tapa minimoida kalliiden skriptien suoritukseen tarvittavaa laskentatehoa on pyrkiä kirjoittamaan skriptejä, joita ei tarvitse suorittaa kaiken aikaa [Swe98]. Skriptikielen tulkkaamisen ja kääntämisen optimoinnilla voidaan saada aikaan hyviä parannuksia tehokkuudessa. Parhaimmillaan tutkimalla tiettyjä osia generoidusta tavukoodista voidaan tietyillä optimointimenetelmillä lyhentää koodin pituutta jopa 50%:lla. Haittapuolena skriptikielen kääntäjän optimiselle voidaan pitää kääntäjän debuggaamisen (debugging) ja verioinnin minimutkaisuus lisääntyy koodia optimoitaessa [Her03]. Skriptikielinen ohjelman osa tulee silti olemaan huomattavan hidasta, vaikka skriptikieli saataisiin parhaammassa tapauksessa esimerkiksi vain 10 kertaa hitaammaksi kuin muu pelissä käytetty ohjelmakoodi. Useissa peleissä tarvitaan esimerkiksi reitinetsintäalgoritmeja, joiden avulla pyritään löytämään pelissä olevalle oliolle lyhin mahdollinen tie jostain pisteestä toiseen määriteltyyn pisteeseen. Reitinetsintäalgoritmeja on olemassa useita (esim. Dijkstran algoritmi tai A*), mutta niille on yleistä suurehkot laskentatehovaatimukset. Koska tulkattavien skriptikielten tehokkuus on merkittävästi heikompi kuin esimerkiksi C tai C++ ohjelmointikielillä, voi useimpia tarkoituksia varten reitinetsintäalgoritmien ja muiden vastaavien laskennallisesti vaativien ja usein käytettyjen tekoälyalgoritmien toteuttaminen olla järkevämpää kiinnittää suoraan pelissä pääasiallisesti käytettyyn tehokkaaseen ohjelmointikieleen. Eräs mielenkiintoinen tulkattaviin skriptikieliin liittyvä ominaisuus liittyy olennaisesti tehovaatimuksiin. Tulkattavilla skriptikielillä voidaan ajaa jotain tiettyä skriptiä kun resurssit sallivat sen. Tilanteessa, jossa konetehoa vaaditaan muualle, kuten ruudun päivittämiseen, voidaan skriptin tulkkaaminen keskeyttää. Kun konetehoa on jälleen vapaana, voidaan saman skriptin tulkkaamista jatkaa siitä mihin jäätiin. Tällä voidaan hillitä tulkattavien skriptikielten suurempaa tehon kulutusta, koska skriptien suorittamista voidaan mahdollisuuksien mukaan ajoittaa tilanteisiin, jossa konetehoa on enemmän vapaana. Aiempi tulkkamisen keskeyttäminen voidaan edelleen yhdistää milloin vain algoritmeiksi (anytime algorithms) tekoälytekniikkaan, joka voidaan integroida skripti-
15 12 kielen tulkkiin [Mil06]. Ajatus milloin vain algoritmeissa on siinä, että algoritmin tulosta voidaan kysyä jo ennen kuin algoritmi on lopullisesti suoritettu loppuun. Tällöin esimerkiksi pelissä oleva hahmo voi aloittaa suorittamaan jotain tehtävien sarjaa ilman, että tekoäly tietää vielä tarkalleen, mitkä seuraavat toimenpiteet tulevat olemaan, jne. 5.2 Laajennettavuus ja ei-ohjelmoijien skriptaus Hyvin valitulla ja suunnitellulla skriptikielellä ohjelmoijat eivät välttämättä ole ainoat mahdolliset skriptien toteuttajat. Skriptien kirjoittamiseen voivat osallistua esimerkiksi kenttien suunnittelijat (kts. erityisesti aiempi osio triggerijärjestelmistä) tai pelin loppukäyttäjät. Mielenkiintoisesti useimmiten skriptien kirjoittajat eivät olekaan ohjelmoijia, vaan pelin suunnittelijoita [Poi02]. Skriptaamisen mahdollistaminen pelin loppukäytäjille, eli pelaajille voi olla taloudellisesti kannattava ratkaisu. Tämä siitä syystä että se skriptaamisen mahdollistaminen voi synnyttää pelin ympärille ns. modauskulttuurin, jossa pelaajat muokkaavat osia pelistä muiden pelaajien käytettäviksi. Käytännössä tämä voi tarkoittaa pelin kehittäjän kannalta ilmaista lisäsisältöä pelille, joka voi edelleen vaikuttaa positiivisesti pelin hyllyikään. Hyvän skriptikielen kehittäminen erityisesti ei-ohjelmoijia silmällä pitäen voi olla vaikeaa. Skriptikielen tulee tarjota mahdollisimman paljon ohjelmointimahdollisuuksia, mutta toisaalta kielen oppimisen tulee olla nopeaa. Eräs tapa nopeuttaa oppimista on tarjota eri tyyppisille toiminnoille runsaasti kirjastoja, jotka voidaan kirjoittaa joko skriptikielellä tai pelin pääasiallisella ohjelmointikielellä [Poi02]. Laajennettavuuden kääntöpuoli voi ilmetä middleware-tekoälykehittäjille. Toisaalta peliin saatetaan haluta ostaa valmis tekoälyratkaisu. Middleware-kehittäjillä on harvemmin mahdollisuutta vaikuttaa peleissä käytettäviin skriptikieliin, joten kehittäjän tekoälysysteemi on yleisimmin varminta ohjelmoida samaan tapaan kuin esimeerkiksi fysiikkamoottorit, so. jollain tehokkaalla ohjelmointikielellä. Pelien kehittäjät voivat edelleen haluta tekoälysysteemiin laajennettavuutta ja käyttäjien muuntelumahdollisuuksia, jotka skriptikielet voivat tarjota. Lopputuloksena voi olla, että
16 13 skriptausmahdollisuus joudutaan keinotekoisesti lisätä muuten kauniisti suunniteltuun tekoälysysteemiin tai se on voitu toteuttaa toisella skriptikielellä kuin muu pelin mahdollinen skriptaus, molemmissa tapauksissa lisäten turhaa monimutkaisuutta peliin ja siten virheiden esiintymisen mahdollisuuksia. Tekoälyn middlewarekehittämisen mielekkyydestä on skriptikieliinkin liittymättä esitetty eriäviä mielipiteitä [Mil06][Toz02]. 5.3 Skriptikielen valinta Peliin käytettäväksi skriptikieleksi on olemassa useita vaihtoehtoja. Tehdäänkö oma, juuri peliin soveltuva kieli vai valitaanko jokin valmis kieli, kuten Lua, Tcl, Python, jne. Monet pelit käyttävät nimenomaan juuri niitä varten suunniteltua skriptikieltä, kuten aiemmin mainittu Unreal-pelin UnrealScript (jonka muunneltua versiota myös pelisarjan myöhemmät pelit käyttävät). Kutakin pelia varten räätölöity skriptikieli voi mahdollistaa melko hyvin aiemmin esitettyä näkökulmaa, jonka mukaan skriptikielen pääasiallinen tarkoitus on yksinkertaistaa jonkin ongelman ratkaisua. Oman kielen kirjoittaminen voi kuitenkin olla melko vaativa tehtävä, erityisesti jos kieltä ei suunnitella riittävän huolellisesti, ottaen huomioon myös sille tulevaisuudessa esiintyvät vaatimukset. Tämän tyyppisiä vaatimuksia voi kokemattoman kehittäjän olla vaikea ennakoida ja niiden lisäksi on skriptikieli suunniteltava mahdollisesti myös ohjelmointia taitamattomien pelaajien ja pelisuunnttelijoiden käytettäväksi. Joidenkin pelinkehittäjien mukaan ainakaan omaa parseria skriptikielelle ei kannata kirjoittaa [BrD02], vaan järkevämpää on valita jokin tunnettu ja tehokas parseri, kuten lex tai yacc. 6 Yhteenveto Pelitekoälyssä pyritään luomaan pelaajalle illuusio siitä, että pelin hahmot toimivat rationaalisesti. Kyse ei ole siitä, että pyritään huijaamaan pelaaja luulemaan pelaavansa ihmisiä vastaan
17 14 Useimmat peleissä käytettävät skriptikielet ovat tulkattavia kieliä. Tämäntyyppisissä kielissä kirjoitettu skripti tulee tokenisoida ymmärrettäviksi merkeiksi. Tokenisoidut merkit jäsennetään edelleen loogiseen muotoon parsimispuuksi. Parsimispuu muunnetaan tavukoodiksi, jota skriptikielen tulkki kykenee ajamaan konekielen tasolla. Skriptikieliä käytetään jollain muulla kielellä ohjelmoidun pelin yhteydessä ajamalla tulkilla tilanteeseen sopiva, usein tavukoodina oleva skripti. Skriptikieliä voidaan käyttää monipuolisesti erilaisten tekoälyratkaisujen toteutustapana. Aineessa tarkastelimme monimutkaiselta vaikuttavan ryhmätason sotilaspelissä esiintyvän huoneiden valtaamista neljän yksinkertaisen skriptin ajamisen yhdistelmänä. Lisäksi kävimme käsitteiden tasolla läpi triggerijärjestelmää, jonka avulla pelissä toimivat tekoälyhahmot voivat olla yhteydessä pelimaailman tapahtumiin ilman jatkuvaa kyselyiden tarvetta. Pelinäkökulmasta skriptikielen mukaan ottaminen tai pois jättäminen ei ole itsestään selvä ratkaisu. Toisaalta skriptikielet tarjoavat tiettyjä etuja, kuitenkin mahdollisesti monimutkaistaen peliä kokonaisuuden tasolla ja lisäämällä pelin tehovaatimuksia. Oman käsitykseni mukaan on tärkeää huomioida, että skriptikielten käyttö tai käyttämättä jättäminen pelitekoälyssä ovat valintoja, jotka liittyvät pelin arkkitehtuuriin, eivät sen käyttämiin algoritmeihin. Tällöin siis pelitekoälyssä tarvittavat algoritmit ovat samoja riippumatta siitä toteutetaanko ne kovakoodattuina tai liitetäänkö ne peliin skriptikielen avulla. Skriptikielen mukaan ottaminen, valinta, ja muut vastaavat ratkaisut lienee parasta tehdä tapauskohtaisesti kutakin peliä suunniteltaessa. Tekoälyn toteutustapana skriptikielet soveltuvat hyvin joustavuutta vaativiin ongelmiin ja sopivalla kielellä pelissä olevien tapahtumien ja kenttien yhteydessä toimimiseen. Toisaalta vaativaa laskentaa suorittavat tekoälyalgoritmit, kuten reitinetsintäalgoritmit voi olla järkevämpää toteuttaa skriptaamistakin hyväksi käyttävissä projekteissa kovakoodattuna huomattavasti paremman tehokkuuden varmistamiseksi. Näitä tehokkaammin toteutettuja algoritmeja voidaan edelleen käyttää kirjastojen avulla skriptikielellä totetutettavissa tekoälykomponenteissa.
18 Lähteet MLAKS04 LaD01 15 Magerko, B., Laird, J., Assanie, M., Kerfoot, A., Stokes, D. AI characters and directors for interactive computer games. Proceedings of the 2004 Innovative Applications of Articial Intelligence Conference, AAAI Press Laird, J., Duchi, J. Creating human-like synthetic characters with multiple skill levels: A case study using the soar quakebot. AAAI Spring Symposium on Articial Intelligence and Computer Games, sivut 54-58, Swe98 Sweeney, T. UnrealScript language reference. Unr07 Unreal wiki: the Unreal engine documentation site. Ork02 Ork02 Sco02 Orkin, J. A general-purpose trigger system. AI game programming wisdom, sivut 48-54, Cengage Delmar Learning Poiker, F. Creating scripting languages for nonprogrammers AI game programming wisdom, sivut , Cengage Delmar Learning Scott, B. The illusion of intelligence Ai game programming wisdom, sivut 16-20, Cengage Delmar Learning Her03 Herz, A. Optimized script execution. AI game programming wisdom 2, sivut , Cengage Delmar Learning Toz02 Mil06 Tozour, P. The evolution of game AI. AI game programming wisdom, sivut xx-xx, Cengage Delmar Learning Millington, I. Articial intelligence for games. Elsevier Science Technology Books 2006.
19 16 RuN03 Russell, S., Norvig, P., Articial intelligence: a modern approach. Prentice Hall 2003.
Skriptikielten käyttö pelitekoälyssä
Skriptikielten käyttö pelitekoälyssä Reima Halmetoja Helsinki 27.4.2008 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto
Selainpelien pelimoottorit
Selainpelien pelimoottorit Teemu Salminen Helsinki 28.10.2017 Seminaaritutkielma Helsingin yliopisto Tietojenkäsittelytiede ! 1 HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta
arvostelija OSDA ja UDDI palveluhakemistoina.
Hyväksymispäivä Arvosana arvostelija OSDA ja UDDI palveluhakemistoina. HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto Fakultet/Sektion Faculty/Section Laitos Institution
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...
4. Lausekielinen ohjelmointi 4.1
4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen ja tulkinta. - Kääntäminen,
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................................
Pro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA. Karoliina Ljungberg
Pro gradu -tutkielma Meteorologia SUOMESSA ESIINTYVIEN LÄMPÖTILAN ÄÄRIARVOJEN MALLINTAMINEN YKSIDIMENSIOISILLA ILMAKEHÄMALLEILLA Karoliina Ljungberg 16.04.2009 Ohjaajat: Ari Venäläinen, Jouni Räisänen
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,
Aika/Datum Month and year Kesäkuu 2012
Tiedekunta/Osasto Fakultet/Sektion Faculty Laitos/Institution Department Filosofian, historian, kulttuurin ja taiteiden tutkimuksen laitos Humanistinen tiedekunta Tekijä/Författare Author Veera Lahtinen
Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages
Tiedekunta/Osasto Fakultet/Sektion Faculty Laitos Institution Department Tekijä Författare Author Työn nimi Arbetets titel Title Oppiaine Läroämne Subject Työn laji Arbetets art Level Aika Datum Month
Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä
Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä olevilla komponenteilla? Voisiko jollakin ohjelmointikielellä
Maailman muutosta tallentamassa Marko Vuokolan The Seventh Wave -valokuvasarja avauksena taidevalokuvan aikaan
Maailman muutosta tallentamassa Marko Vuokolan The Seventh Wave -valokuvasarja avauksena taidevalokuvan aikaan Pro gradu -tutkielma 31.1.2012 Helsingin yliopisto Humanistinen tiedekunta Filosofian, historian,
4. Lausekielinen ohjelmointi 4.1
4. Lausekielinen ohjelmointi 4.1 Sisällys Konekieli, symbolinen konekieli ja lausekieli. Hyvä ohjelmointitapa. Lausekielestä konekieleksi: - Lähdekoodi, tekstitiedosto ja tekstieditorit. - Kääntäminen
! #! %! & #!!!!! ()) +
! #! %! & #!!!!! ()) + Tiedekunta/Osasto Fakultet/Sektion Faculty Humanistinen tiedekunta Laitos Institution Department Taiteiden tutkimuksen laitos Tekijä Författare Author Matti Pesonen Työn nimi Arbetets
Koht dialogia? Organisaation toimintaympäristön teemojen hallinta dynaamisessa julkisuudessa tarkastelussa toiminta sosiaalisessa mediassa
Kohtdialogia? Organisaationtoimintaympäristönteemojenhallinta dynaamisessajulkisuudessatarkastelussatoiminta sosiaalisessamediassa SatuMariaPusa Helsinginyliopisto Valtiotieteellinentiedekunta Sosiaalitieteidenlaitos
TIE Tietorakenteet ja algoritmit 1. TIE Tietorakenteet ja algoritmit
TIE-20100 Tietorakenteet ja algoritmit 1 TIE-20100 Tietorakenteet ja algoritmit TIE-20100 Tietorakenteet ja algoritmit 2 Lähteet Luentomoniste pohjautuu vahvasti prof. Antti Valmarin vanhaan luentomonisteeseen
Ohjelmointi 1. Kumppanit
Ohjelmointi 1 Kumppanit November 20, 2012 2 Contents 1 Mitä ohjelmointi on 7 2 Ensimmäinen C#-ohjelma 9 2.1 Ohjelman kirjoittaminen......................... 9 A Liite 11 3 4 CONTENTS Esipuhe Esipuhe 5
Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen
Chapel TIE-20306 Ryhmä 91 Joonas Eloranta Lari Valtonen Johdanto Chapel on Amerikkalaisen Cray Inc. yrityksen kehittämä avoimen lähdekoodin ohjelmointikieli. Chapel on rinnakkainen ohjelmointikieli, joka
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
GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen
GIS-automatisointi ja ohjelmointi/skriptaus Harri Antikainen Mistä nyt puhutaan? Automatisointi: Mikä tahansa tapa teettää tietokoneella asioita ilman että käyttäjän tarvitsee tehdä muuta kuin laittaa
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen
TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op FT Ari Viinikainen Tietokoneen rakenne Keskusyksikkö, CPU Keskusmuisti Aritmeettislooginen yksikkö I/O-laitteet Kontrolliyksikkö Tyypillinen Von Neumann
Solidity älysopimus ohjelmointi. Sopimus suuntautunut ohjelmointi
Solidity älysopimus ohjelmointi Sopimus suuntautunut ohjelmointi Merkle puu Kertausta eiliseltä Solidity on korkean tason älysopimus ohjelmointikieli Muistuttaa olio-ohjelmointia Javalla Sopimuskoodi on
Arkkitehtuurinen reflektio
Arkkitehtuurinen reflektio Toni Ruokolainen Toni.Ruokolainen@cs.helsinki.fi Helsinki 6.10.2003 Tiivistelmä HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET
TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 30. marraskuuta 2015
TIEA241 Automaatit ja kieliopit, syksy 2015 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 30. marraskuuta 2015 Sisällys t Väitöstilaisuus 4.12.2015 kello 12 vanhassa juhlasalissa S212 saa tulla 2 demoruksia
tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla
2.5. YDIN-HASKELL 19 tään painetussa ja käsin kirjoitetussa materiaalissa usein pienillä kreikkalaisilla kirjaimilla. Jos Γ ja ovat tyyppilausekkeita, niin Γ on tyyppilauseke. Nuoli kirjoitetaan koneella
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
Katsaus korruption vaikutuksesta Venäjän alueelliseen talouskasvuun ja suoriin ulkomaisiin investointeihin
INSTITUUTIOTTALOUSKASVUNEDELLYTYKSENÄ KatsauskorruptionvaikutuksestaVenäjänalueelliseentalouskasvuunjasuoriin ulkomaisiininvestointeihin2000 2010 AshekMohamedTarikHossain HelsinginYliopisto Valtiotieteellinentiedekunta
Luonnontieteiden popularisointi ja sen ideologia
Luonnontieteiden popularisointi ja sen ideologia Tapauksina Reino Tuokko ja Helsingin Sanomat 1960-luvulla Ahto Apajalahti Helsingin yliopisto Humanistinen tiedekunta Suomen ja Pohjoismaiden historia Pro
Virtualisointiympäristössä on kolme pääosaa: isäntä (host), virtualisointikerros ja vieras (guest).
1 Virtualisoinnin avulla voidaan purkaa suora linkki suoritettavan sovelluksen (tai käyttöjärjestelmän tms.) ja sitä suorittavan laitteiston välillä. Näin saavutetaan joustavuutta laitteiston käytössä.
TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD)
TT00AA12-2016 - Ohjelmoinnin jatko (TT10S1ECD) Ohjelmointikäytännöt 21/3/11 Mikko Vuorinen Metropolia Ammattikorkeakoulu 1 Sisältö 1) Mitä on hyvä koodi? 2) Ohjelmointikäytäntöjen merkitys? 3) Koodin asettelu
Luento 1 Tietokonejärjestelmän rakenne
Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone
Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus
Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone
Ohjelmoinnin perusteet Y Python
Ohjelmoinnin perusteet Y Python T-106.1208 2.3.2009 T-106.1208 Ohjelmoinnin perusteet Y 2.3.2009 1 / 28 Puhelinluettelo, koodi def lue_puhelinnumerot(): print "Anna lisattavat nimet ja numerot." print
13/20: Kierrätys kannattaa koodaamisessakin
Ohjelmointi 1 / syksy 2007 13/20: Kierrätys kannattaa koodaamisessakin Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy
TIE Principles of Programming Languages CEYLON
TIE-20306 Principles of Programming Languages CEYLON SISÄLLYSLUETTELO 1. YLEISTIETOA KIELESTÄ JA SEN KEHITTÄMISESTÄ... 1 2. CEYLONIN OMINAISUUKSIA... 2 2.1 Modulaarisuus... 2 2.2 Tyypit... 2 2.3 Muita
Kieliversiointityökalu Java-ohjelmistoon. Ohje
Kieliversiointityökalu Java-ohjelmistoon Ohje 2/6 SISÄLLYSLUETTELO 1 YLEISTÄ OHJELMASTA... 3 2 PÄÄ-IKKUNA...4 3 YLÄVALIKKO... 4 3.1 TIEDOSTO... 4 3.2 TOIMINTO... 4 3.3 ASETUKSET... 5 3.4 OHJE... 5 4 VÄLILEHDET...5
Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus
Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Tietokone
Pelisuunnittelua tulevaisuudessa. Karoliina Korppoo / Colossal Order
Pelisuunnittelua tulevaisuudessa Karoliina Korppoo / Colossal Order Puhuja Karoliina Korppoo Game Designer Lead designer projektissa Cities: Skylines Medianomi, Tampereen Ammattikorkeakoulu Filosofian
Dynaaminen kääntäminen ja Java HotSpot
Dynaaminen kääntäminen ja Java HotSpot Jukka Eskola Kimmo Kulovesi Tatu Säily Helsinki 11.4.2005 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö 1. Johdanto...1 1.1 JIT-kääntäjän ongelmat...2
Tutoriaaliläsnäoloista
Tutoriaaliläsnäoloista Tutoriaaliläsnäolokierroksella voi nyt täyttää anomuksen läsnäolon merkitsemisestä Esim. tagi ei toiminut, korvavaltimon leikkaus, yms. Hyväksyn näitä omaa harkintaa käyttäen Tarkoitus
Ohjelmistojen mallintaminen. Luento 11, 7.12.
Ohjelmistojen mallintaminen Luento 11, 7.12. Viime viikolla... Oliosuunnittelun yleiset periaatteet Single responsibility eli luokilla vain yksi vastuu Program to an interface, not to concrete implementation,
Virtuaalikoneiden generointi Vmgen-kääntäjällä
Virtuaalikoneiden generointi Vmgen-kääntäjällä Risto Saarelma Helsinki 18.4.2005 Ohjelmointikielten kääntäjät -kurssi HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos 1 Johdanto 1 Virtuaalikoneet ovat
Luento 1 Tietokonejärjestelmän rakenne
Luento 1 Tietokonejärjestelmän rakenne Järjestelmän eri tasot Laitteiston nopeus 1 Tietokonejärjestelmä Käyttäjä Tietokonelaitteisto Oheislaitteet (peripheral or I/O devices) Tietokone (computer) 2 Luento
Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python
Tähtitieteen käytännön menetelmiä Kevät 2009 Luento 4: Ohjelmointi, skriptaus ja Python 31. tammikuuta 2009 Ohjelmointi Perusteet Pythonin alkeet Esittely Esimerkkejä Muuttujat Peruskäsitteitä Käsittely
AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin
AS-0.1103 C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin Raimo Nikkilä Aalto-yliopiston sähkötekniikan korkeakoulu - Automaation tietotekniikan tutkimusryhmä 17. tammikuuta 2013
3. Muuttujat ja operaatiot 3.1
3. Muuttujat ja operaatiot 3.1 Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi. Operaattorit. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit.
Lisää pysähtymisaiheisia ongelmia
Lisää pysähtymisaiheisia ongelmia Lause: Pysähtymättömyysongelma H missä H = { w111x w validi koodi, M w ei pysähdy syötteellä x } ei ole rekursiivisesti lueteltava. Todistus: Pysähtymisongelman komplementti
Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python
Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python 8. marraskuuta 2010 Ohjelmointi Perusteet Peruskäsitteitä Olio-ohjelmointi Pythonin alkeet Esittely Esimerkkejä Muuttujat
Taktiikan opettamisen tulee tukeutua pelaajien lajitaitoihin ja siihen, että valmentajalla on selvä kuva käyttämästään pelisysteemistä.
Taktiikka yleisesti Sanalla taktiikka tarkoitetaan sitä, kuinka käytetään oman joukkueen vahvuuksia ja vastustajan heikkouksia hyväksi valmistauduttaessa otteluun sekä sen aikana valmentajan tekemiä muutoksia
Integrointialgoritmit molekyylidynamiikassa
Integrointialgoritmit molekyylidynamiikassa Markus Ovaska 28.11.2008 Esitelmän kulku MD-simulaatiot yleisesti Integrointialgoritmit: mitä integroidaan ja miten? Esimerkkejä eri algoritmeista Hyvän algoritmin
TIE448 Kääntäjätekniikka, syksy 2009. Antti-Juhani Kaijanaho. 7. joulukuuta 2009
TIE448 Kääntäjätekniikka, syksy 2009 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 7. joulukuuta 2009 Sisällys Sisällys Seuraava deadline Vaihe F maanantai 14.12. klo 12 rekisteriallokaatio Arvostelukappale
Tiedekunta/Osasto Fakultet/Sektion Faculty Valtiotieteellinen tiedekunta
Tiedekunta/Osasto Fakultet/Sektion Faculty Valtiotieteellinen tiedekunta Laitos Institution Department Politiikan ja talouden tutkimuksen laitos Tekijä Författare Author Virta, Mikko Antero Työn nimi Arbetets
ohjelman arkkitehtuurista.
1 Legacy-järjestelmällä tarkoitetaan (mahdollisesti) vanhaa, olemassa olevaa ja käyttökelpoista ohjelmistoa, joka on toteutettu käyttäen vanhoja menetelmiä ja/tai ohjelmointikieliä, joiden tuntemus yrityksessä
815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset
815338A Ohjelmointikielten periaatteet 2015-2016. Harjoitus 2 vastaukset Harjoituksen aiheena on BNF-merkinnän käyttö ja yhteys rekursiivisesti etenevään jäsentäjään. Tehtävä 1. Mitkä ilmaukset seuraava
Sisällys. 3. Muuttujat ja operaatiot. Muuttujat ja operaatiot. Muuttujat. Operaatiot. Imperatiivinen laskenta. Muuttujat. Esimerkkejä: Operaattorit.
3. Muuttujat ja operaatiot Sisällys Imperatiivinen laskenta. Muuttujat. Nimi ja arvo. Muuttujan nimeäminen. Muuttujan tyyppi.. Operandit. Arvon sijoitus muuttujaan. Aritmeettiset operaattorit. Arvojen
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
.NET ajoympäristö. Juha Järvensivu 2007
.NET ajoympäristö Juha Järvensivu juha.jarvensivu@tut.fi 2007 Käännösprosessi C# lähdekoodi C# kääntäjä CILtavukoodi JITkäännös Ajettava natiivikoodi Kehitysympäristössä ohjelmoijan toimesta Ajonaikana.NET
Peliteoria Strategiapelit ja Nashin tasapaino. Sebastian Siikavirta sebastian.siikavirta@helsinki.fi
Peliteoria Strategiapelit ja Nashin tasapaino Sebastian Siikavirta sebastian.siikavirta@helsinki.fi Helsinki 11.09.2006 Peliteoria Tomi Pasanen HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Sisältö
Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla
Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla ALKUHARJOITUS Kynän ja paperin avulla peilaaminen koordinaatistossa a) Peilaa pisteen (0,0) suhteen koordinaatistossa sijaitseva - neliö, jonka
8. Näppäimistöltä lukeminen 8.1
8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)
TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli
TIE-20306 PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli Seminaariesitelmä ryhmä 24 Markku Ahokas Jani Kuitti i SISÄLLYSLUETTELO 1. YLEISTÄ EIFFELISTÄ... 1 1.1 Historia ja tausta... 1 1.2
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
Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005
Algebralliset tietotyypit ym. TIEA341 Funktio ohjelmointi 1 Syksy 2005 Tällä luennolla Algebralliset tietotyypit Hahmonsovitus (pattern matching) Primitiivirekursio Esimerkkinä binäärinen hakupuu Muistattehan...
Oppimateriaalin kokoaminen ja paketointi
Oppimateriaalin kokoaminen ja paketointi Pekka Simola Helsinki 14.4.2004 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos HELSINGIN YLIOPISTO HELSINGFORS UNIVERSITET UNIVERSITY OF HELSINKI Tiedekunta/Osasto
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 =
Kulttuuritaidot Oppilas oppii tuntemaan Ranskaa ja ranskankielisiä alueita ranskankielisille kulttuureille ominaisia tapoja ja kohteliaisuussääntöjä
Ylöjärven opetussuunnitelma 2004 B2 RANSKA VUOSILUOKKA: 8 VUOSIVIIKKOTUNTEJA: 2 Tavoitteet ymmärtämään erittäin selkeästi puhuttuja tai kirjoitettuja lyhyitä viestejä viestintää tavallisimmissa arkielämän
Loppuraportti. Virtuaali-Frami, CAVE-ohjelmisto. Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu. Versio
1 Loppuraportti Virtuaali-Frami, CAVE-ohjelmisto Harri Mähönen projektiassistentti Seinäjoen ammattikorkeakoulu Versio 1.0 15.1.2006 2 Sisällys Tiivistelmä... 3 1 Johdanto... 4 1.1 Dokumentin tarkoitus...
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008. 1. Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen raine.kauppinen@haaga-helia.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen raine.kauppinen@haaga-helia.fi 1. Java-ohjelmoinnin alkeita Tietokoneohjelma Java-kieli ja Eclipse-ympäristö Java-ohjelma ja ohjelmaluokka
Ohjelmointi 1 / syksy /20: IDE
Ohjelmointi 1 / syksy 2007 10/20: IDE Paavo Nieminen nieminen@jyu.fi Tietotekniikan laitos Informaatioteknologian tiedekunta Jyväskylän yliopisto Ohjelmointi 1 / syksy 2007 p.1/8 Tämän luennon rakenne
Pong-peli, vaihe Aliohjelman tekeminen. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana
Muilla kielillä: English Suomi Pong-peli, vaihe 3 Tämä on Pong-pelin tutoriaalin osa 3/7. Tämän vaiheen aikana Jaetaan ohjelma pienempiin palasiin (aliohjelmiin) Lisätään peliin maila (jota ei voi vielä
Jypelin käyttöohjeet» Ruutukentän luominen
Jypelin käyttöohjeet» Ruutukentän luominen Pelissä kentän (Level) voi luoda tekstitiedostoon "piirretyn" mallin mukaisesti. Tällöin puhutaan, että tehdään ns. ruutukenttä, sillä tekstitiedostossa jokainen
4.12.2005. SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T
SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T SEPA: REFAKTOROINTI 2 (9) SEPA: REFAKTOROINTI 3 (9) VERSIOHISTORIA Version Date Author Description 0.1 2.12.2005 Erik Hakala Ensimmäinen
OHJ-2710 Peliohjelmointi. Syksy 2012 Timo Kellomäki
OHJ-2710 Peliohjelmointi Syksy 2012 Timo Kellomäki timo.kellomaki@tut.fi Käytännön juttuja Kurssihenkilökunta koostuu Timo Kellomäestä Luennot torstaisin salissa TB223 klo 12-14 2. viikko harkkatyöinfo,
PIENI KAMPANJAKOULU. Ohjeita onnistuneen kampanjan toteuttamiseen 1 PIENI KAMPANJAKOULU
PIENI KAMPANJAKOULU Ohjeita onnistuneen kampanjan toteuttamiseen 1 PIENI KAMPANJAKOULU PIENI KAMPANJAKOULU Sana kampanja on peräisin ranskalaisesta sanasta campagne ja tarkoittaa että, pyritään vaikuttamaan
Värähtelevä jousisysteemi
Mathematican version 8 mukainen. (5.10.01 SKK) Värähtelevä jousisysteemi Jousen puristumista ja venymistä voidaan kuvata varsin yksinkertaisella matemaattisella mallilla m d x k x, d t missä x on jousen
MS-C2105 Optimoinnin perusteet Malliratkaisut 5
MS-C2105 Optimoinnin perusteet Malliratkaisut 5 Ehtamo Demo 1: Arvaa lähimmäksi Jokainen opiskelija arvaa reaaliluvun välillä [0, 100]. Opiskelijat, joka arvaa lähimmäksi yhtä kolmasosaa (1/3) kaikkien
Algoritmit 1. Luento 3 Ti Timo Männikkö
Algoritmit 1 Luento 3 Ti 17.1.2017 Timo Männikkö Luento 3 Algoritmin analysointi Rekursio Lomituslajittelu Aikavaativuus Tietorakenteet Pino Algoritmit 1 Kevät 2017 Luento 3 Ti 17.1.2017 2/27 Algoritmien
15. Ohjelmoinnin tekniikkaa 15.1
15. Ohjelmoinnin tekniikkaa 15.1 Sisällys For-each-rakenne. Lueteltu tyyppi enum. Override-annotaatio. Geneerinen ohjelmointi. 15.2 For-each-rakenne For-rakenteen variaatio taulukoiden ja muiden kokoelmien
Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:
Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen: S A S B Samaan jäsennyspuuhun päästään myös johdolla S AB Ab ab: S A S B Yhteen jäsennyspuuhun liittyy aina tasan yksi vasen
!"#$%&'$("#)*+,!!,"*--.$*#,&--#"*/".,,%0 1&'23456789::94752;&27455<:4;2;&,9:=>23?277<&8=@74;9&ABBCDABBE
!"#$%&'$("#)*+,!!,"*--.$*#,&--#"*/".,,%0 1&'23456789::94752;&2745523?27747544H9;&IG@&JG9?=&15=5H42>:9 '28
Ohjelmoinnin perusteet, syksy 2006
Ohjelmoinnin perusteet, syksy 2006 Esimerkkivastaukset 1. harjoituksiin. Alkuperäiset esimerkkivastaukset laati Jari Suominen. Vastauksia muokkasi Jukka Stenlund. 1. Esitä seuraavan algoritmin tila jokaisen
Satunnaisalgoritmit. Topi Paavilainen. Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos
Satunnaisalgoritmit Topi Paavilainen Laskennan teorian opintopiiri HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos Helsinki, 23. helmikuuta 2014 1 Johdanto Satunnaisalgoritmit ovat algoritmeja, joiden
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
TIEA241 Automaatit ja kieliopit, syksy Antti-Juhani Kaijanaho. 3. lokakuuta 2016
TIEA241 Automaatit ja kieliopit, syksy 2016 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 3. lokakuuta 2016 Sisällys n tunnistin Jay : An Efficient Context-Free Parsing Algorithm. Communications of the
1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä
OULUN YLIOPISTO Tietojenkäsittelytieteiden laitos Johdatus ohjelmointiin 811122P (5 op.) 12.12.2005 Ohjelmointikieli on Java. Tentissä saa olla materiaali mukana. Tenttitulokset julkaistaan aikaisintaan
Tietotekniikan valintakoe
Jyväskylän yliopisto Tietotekniikan laitos Tietotekniikan valintakoe 2..22 Vastaa kahteen seuraavista kolmesta tehtävästä. Kukin tehtävä arvostellaan kokonaislukuasteikolla - 25. Jos vastaat useampaan
2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)
2. Lisää Java-ohjelmoinnin alkeita Muuttuja ja viittausmuuttuja Vakio ja literaalivakio Sijoituslause Syötteen lukeminen ja Scanner-luokka 1 Muuttuja ja viittausmuuttuja (1/4) Edellä mainittiin, että String-tietotyyppi
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
Automaattinen yksikkötestaus
Teknillinen Korkeakoulu T-76.115 Tietojenkäsittelyopin ohjelmatyö Lineaaristen rajoitteiden tyydyttämistehtävän ratkaisija L models Automaattinen yksikkötestaus Ryhmä Rajoitteiset Versio Päivämäärä Tekijä
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
Ohjelmointi 1 Taulukot ja merkkijonot
Ohjelmointi 1 Taulukot ja merkkijonot Jussi Pohjolainen TAMK Tieto- ja viestintäteknologia Johdanto taulukkoon Jos ohjelmassa käytössä ainoastaan perinteisiä (yksinkertaisia) muuttujia, ohjelmien teko
Liite 1: KualiKSB skenaariot ja PoC tulokset. 1. Palvelun kehittäjän näkökulma. KualiKSB. Sivu 1. Tilanne Vaatimus Ongelma jos vaatimus ei toteudu
Liite 1: skenaariot ja PoC tulokset 1. Palvelun kehittäjän näkökulma Tilanne Vaatimus Ongelma jos vaatimus ei toteudu Palvelun uusi versio on Palveluiden kehittäminen voitava asentaa tuotantoon vaikeutuu
S09 04 Kohteiden tunnistaminen 3D datasta
AS 0.3200 Automaatio ja systeemitekniikan projektityöt S09 04 Kohteiden tunnistaminen 3D datasta Loppuraportti 22.5.2009 Akseli Korhonen 1. Projektin esittely Projektin tavoitteena oli algoritmin kehittäminen
8. Näppäimistöltä lukeminen 8.1
8. Näppäimistöltä lukeminen 8.1 Sisällys Arvojen lukeminen näppäimistöltä Java-kielessä. In-luokka. In-luokka, käännös ja tulkinta Scanner-luokka. 8.2 Yleistä Näppäimistöltä annettujen arvojen (syötteiden)
Hahmon etsiminen syotteesta (johdatteleva esimerkki)
Hahmon etsiminen syotteesta (johdatteleva esimerkki) Unix-komennolla grep hahmo [ tiedosto ] voidaan etsia hahmon esiintymia tiedostosta (tai syotevirrasta): $ grep Kisaveikot SM-tulokset.txt $ ps aux
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2
TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos TKT-3200 Tietokonetekniikka I Harjoitustyö 4: Cache, osa 2.. 2010 Ryhmä Nimi Op.num. 1 Valmistautuminen Cache-työn toisessa osassa
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
Pelimatematiikka ja ohjelmointi ATMOS, Mikkeli - 16.11.2012
Pelimatematiikka ja ohjelmointi ATMOS, Mikkeli - 16.11.2012 Teemu Saarelainen, lehtori teemu.saarelainen@kyamk.fi GameLab gamelab.kyamk.fi & facebook.com/kyamk.gamelab Sisältö Miksi pelimatematiikkaa?
Jypelin käyttöohjeet» Miten saan peliin pistelaskurin?
Jypelin käyttöohjeet» Miten saan peliin pistelaskurin? Pistelaskurin saamiseksi tarvitaan kaksi osaa: Laskuri, joka laskee pisteitä Olio, joka näyttää pisteet ruudulla Laskuri voi olla esimerkiksi tyyppiä
Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten
Sisällys 16. Ohjelmoinnin tekniikkaa Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely ja alustaminen yhdellä lauseella. For-lause lyhemmin. If-else-lause vaihtoehtoisesti