skriptikielten käyttö pelitekoälyssä

23
Skriptikielten käyttö pelitekoälyssä Reima Halmetoja

Upload: blake

Post on 22-Jan-2016

37 views

Category:

Documents


0 download

DESCRIPTION

Reima Halmetoja. Skriptikielten käyttö pelitekoälyssä. Esitelmän rakenne. Mitä on pelitekoäly? Johdatus skriptikieliin Pelitekoälyä skriptikielillä Skriptikielten etuja ja haittoja pelitekoälyn näkökulmasta. Mitä on pelitekoäly?. Mitä on pelitekoäly?. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Skriptikielten käyttö pelitekoälyssä

Skriptikielten käyttö pelitekoälyssä

Reima Halmetoja

Page 2: Skriptikielten käyttö pelitekoälyssä

Esitelmän rakenne

Mitä on pelitekoäly? Johdatus skriptikieliin Pelitekoälyä skriptikielillä Skriptikielten etuja ja haittoja pelitekoälyn näkökulmasta

Page 3: Skriptikielten käyttö pelitekoälyssä

Mitä on pelitekoäly?

Page 4: Skriptikielten käyttö pelitekoälyssä

Mitä on pelitekoäly?

Pelitekoälyssä tavoitellaan rationaaliselta vaikuttavaa toimintaa Pelitekoäly onnistuu tehtävässään, kun se luo pelaajalle vaikutelman

siitä, että pelissä olevat tapahtumat tai hahmot toimivat järkevällä tavalla

Vaihtoehtoisesti voidaan puhua esim. agenttien suunnittelusta tai käyttäytymisen mallintamisesta

Yleensä ei pyritä imitoimaan ihmispelaajia, tosin tämä vaikutus voidaan joskus saada aikaan

Käsite pelitekoäly on laaja ja sillä voidaan tarkoittaa mm. reitinetsintäalgoritmeja, epäpelaajahahmojen toiminnan määrittelemistä, mikrotason manageroinnin automatisoimista, jne.

Page 5: Skriptikielten käyttö pelitekoälyssä

Mitä on pelitekoäly?

Pelitekoäly on riippuvainen asiayhteydestä Jokin tekoälyagentti voi olla erinomainen esimerkiksi Quake-pelin

deathmatch-pelimoodissa... ...mutta sama tekoälyvastus voi epäonnistua eri genren peleissä tai

samassakin pelissä, jos kenttien suunnittelu eroaa merkittävästi kontekstista, johon agentti on suunniteltu ja jossa sitä on testattu.

Esimerkiksi Deep blue osaa shakkia, mutta sen on mahdotonta toimia missään muussa pelissä.

Vertaa ihmisen älykkyyden muotoihin: matemaattinen äly, sosiaalinen äly, jne.

Page 6: Skriptikielten käyttö pelitekoälyssä

Mitä on pelitekoäly?

Kovakoodattu tekoäly Pelin kirjoittamiseen käytetyllä ohjelmointikielellä kirjoitettu tekoäly Soveltuu hyvin prosessointiteholtaan vaativiin tai usein

uudelleenkäytettäviin tekoälykomponentteihin • Reitinetsintäalgoritmit (Dijkstra, A*, ...)• Liikkumisalgoritmit (pakeneminen, seuraaminen, väistäminen)

Koska tekoäly on kirjoitettu usein nopeasti ajettavalla ohjelmointikielellä, on sen suorittaminenkin verrattain tehokasta.

Pääasiallinen toteutustapa vanhemmissa ja pienimuotoisimmissa peleissä

Page 7: Skriptikielten käyttö pelitekoälyssä

Mitä on pelitekoäly?

Tehokkuusvaatimuksia Tavanomaisesti pelitekoälyyn on käytettävissä noin 20%

prosessointitehosta Vertaa esimerkiksi grafiikkaan, johon käytetään usein yli 50%

prosessointitehosta Ongelma kärjistynee erityisesti alustoilla, joissa teho on rajallinen

• Vanhemmat pc:t, konsolit, puhelimet

Page 8: Skriptikielten käyttö pelitekoälyssä

Johdatus skriptikieliin

Skriptikieli on ohjelmointikieli, jonka tarkoituksena on yksinkertaistaa jonkin ongelman ratkaisua

Esimerkiksi halutaan tarjota kenttien suunnittelijoille tai harrastelijoille ohjelmointikieli tekoälypelaajien luomiseen ilman, että itse pelin ohjelmakoodia tarvitsee muuttaa

Skriptikielet toimivat yhdessä muun pelin ohjelmakoodin kanssa, joka on useimmiten kirjoitettu tehokkaammalla ohjelmointikielellä (c++, c, tms.)

Useimmat peleissä käytettävät skriptikielet ovat tulkattavia kieliä, jossa kirjoitetusta skriptistä muodostetaan tavukoodia, jota puolestaan suoritetaan edelleen tulkin (interpreter, virtual machine tai scripting engine) avulla

Page 9: Skriptikielten käyttö pelitekoälyssä

Johdatus skriptikieliin

Jotta skriptikielistä ohjelmaa voidaan ajaa, tulee skripti useimpien kielten osalta muuntaa tavukoodiksi

Useimmissa kääntäjissä tämä koostuu kolmesta vaiheesta: Selaus eli leksikaalinen analyysi (tokenization)

• Muunnetaan skriptin merkkijonot tekstialkioiksi (tokens) Jäsentäminen eli syntaksianalyysi (parsing)

• Analysoidaan tekstialkoina oleva koodi, jotta voidaan selvittää ohjelman syntaktinen rakenne.

Koodin generointi (code generation)• Muodostetaan aiempien vaiheiden perusteella ohjelman tavukoodi, jota

voidaan edelleen ajaa tulkin avulla

Page 10: Skriptikielten käyttö pelitekoälyssä

Johdatus skriptikieliin

Page 11: Skriptikielten käyttö pelitekoälyssä

Pelitekoälyä skriptikielillä

Esimerkki skriptikielen hyväksikäyttämisestä pelin tekoälyn toteuttamisessa mainitsemattomassa pelissä

Eräässä pelin osassa sotilasryhmän tulee vallata huone tietyn ohjeistuksen mukaan

Page 12: Skriptikielten käyttö pelitekoälyssä

Pelitekoälyä skriptikielillä

Valtaus toteutetaan neljällä erillisellä skriptillä Liiku sijaintiin oviaukon edustalla Heitä kranaatti ovesta sisään Liiku lähellä olevaan kulmaan huoneessa Suojaa oviaukon sisäpuoli

Skriptejä koordinoidaan ylemmän tason skriptillä Ylemmän tason skriptin tulee selvittää kaksi lähintä nurkkaa, joka

voidaan toteuttaa jollain muulla tekoälymenetelmällä tai kenttien sunnitteluvaiheessa

Selvittämällä tarvittava tieto tällä tasolla mahdollistaa neljän aiemman skriptin uudelleenkäyttämisen myös muun muotoisissa huoneissa.

Vajaiden ryhmien toimintaa ohjataan jollain muulla ylemmän tason skriptillä, joka koordinoi hahmojen toimintaa eri tavalla.

Page 13: Skriptikielten käyttö pelitekoälyssä

Pelitekoälyä skriptikielillä

Page 14: Skriptikielten käyttö pelitekoälyssä

Pelitekoälyä skriptikielillä

Yksinkertaisempaakin tekoälyagenttien toimintaa voidaan saada aikaan kirjoittamalla kullekin tehtävälle tai toiminnalle sopiva skripti, jonka suorittamista ohjataan jollain menetelmällä

Menetelmä voi olla ylemmän tason skripti, jokin tapahtuma pelissä, tai niin sanottu triggeri, johon palaamme myöhemmin

Esimerkissä saatiin aikaan suhteellisen monimutkaiselta vaikuttavaa toimintaa käyttämällä hyväksi joukkoa skriptejä, jotka jakavat ongelman joukoksi yksinkertaisempia toimintoja

Page 15: Skriptikielten käyttö pelitekoälyssä

Pelitekoälyä skriptikielillä

Triggerijärjestelmä on yksinkertainen tapa saada pelin tekoälyagentit vuorovaikutukseen pelimaailman kanssa.

Pidetään kirjaa pelimaailman tapahtumista, joiden kanssa tekoälyagentti voi olla vuorovaikutussuhteessa

Pyritään minimoimaan prosessointi, jota käytetään näihin vuorovaikutuksiin

Page 16: Skriptikielten käyttö pelitekoälyssä

Pelitekoälyä skriptikielillä

Triggeri on jokin agenttiin vaikuttava asia tai tapahtuma pelissä: Ampumisäänen kuuleminen Vähäinen elämäpisteiden määrä Hissin eteen saapuminen

Esimerkki: Agentti näkee pelaajan ampuvan itseään kohti Agentti hakeutuu suojaan laatikon taakse Agentti heittää suojan takaa kranaatin pelaajaa päin

Vertaa toiminnan aikaansaaminen joukolla triggereitä, jotka käynnistävät skriptejä vs. skriptien koordinointi tehtävää varten suunnitellulla ylemmän tason skriptillä

Page 17: Skriptikielten käyttö pelitekoälyssä

Pelitekoälyä skriptikielillä

Tekoälyn kannalta triggereiden käyttäminen on yksinkertaista, koska siinä ei tapahdu päätöksentekoa: pikemminkin saadaan ärsykkeitä, joihin reagoidaan jollain määrätyllä tavalla.

Samantyyppistä toimintaa voidaan toteuttaa myös muilla menetelmillä, kuten ns. ”polling”.

Page 18: Skriptikielten käyttö pelitekoälyssä

Etuja ja haittoja

Tulkattavat skriptikielet ovat huomattavasti hitaampia, kuin konekieliset ohjelmat

Esim. UnrealScript on arviolta 20 kertaa hitaampi kuin konekielinen ohjelma

Toisaalta tulkattavaa skriptiä ei ole pakko ajaa jatkuvasti, eikä sitä ole pakko suorittaa loppuun yhdellä kertaa, jos prosessointiresurssit loppuvat

Tärkeimmät osat peliä lienee syytä ohjelmoida nopeammalla ohjelmointikielellä

Skriptien kirjoittamisessa on hyvä tähdätä kirjoittamaan skriptejä, joita ei juurikaan ajeta

Page 19: Skriptikielten käyttö pelitekoälyssä

Etuja ja haittoja

Tehottomuutta voidaan auttaa toteuttamalla skriptitekoäly ns. milloin-vain-algorimina (anytime algorithm)

Tällöin ajettaessa skriptiä voidaan pyytää tulos, vaikka ajaminen olisi edelleen kesken

Usein välitulos voi riittää siihen, että ruudulla tuntuu tapahtuvan jotain järkevää

• Vertaa hieman väärään suuntaan liikkuva hahmo ja paikallaan seisova, tulevaisuudessa oikeaan suuntaan liikkuva hahmo – kumpi vaikuttaa älykkäämmältä?

Soveltuu hyvin käytettäväksi tulkattavan skriptikielen kanssa, koska tulkkaaminen voidaan keskeyttää

Page 20: Skriptikielten käyttö pelitekoälyssä

Etuja ja haittoja

Merkittävimpiä skriptikielten etuja on itse pelin ohjelmoinnin ja skriptien kirjoittamisen erottaminen toisistaan

Usein tekoälytapahtumia, triggereitä, tms. saattaa kirjoittaa kentän suunnittelija, joka haluaa tekoälyhahmon toimivan älykkäältä vaikuttavalla tavalla jonkin pelikenttään lisätyn elementin kanssa

Pelien ”modaaminen”, eli harrastelijoiden tekemät muunnokset peliin voivat lisätä pelin hyllyikää ja suosiota

• Käytännössä melkein kaikki suositut FPS-genren pelit tarjoavat jonkinlaista skriptaamiseen liittyvää muokkausmahdollisuutta.

Page 21: Skriptikielten käyttö pelitekoälyssä

Etuja ja haittoja

Väliohjelmistojen ja skriptitekoälyn suhde on ongelmallinen Jos pyritään tekemään skriptikielisenä väliohjelmistona

tekoälypakettia, sidotaan paketin käyttäjä kyseiseen skriptikieleen tai tuodaan jo valmiiksi riittävän monimutkaiseen peliprojektiin mahdollinen toinen skriptikieli

Toisaalta pelin kehittäjä saattaa haluta mahdollisuuden laajentaa tekoälypakettia omilla skripteillä tai tarjota harrastelijoille mahdollisuuden samaan

Page 22: Skriptikielten käyttö pelitekoälyssä

Etuja ja haittoja

Skriptikielen valinta voi olla vaikeaa Yleisesti käytetyt skriptikielet kuten Lua, TCL, jne. voivat tarjota

jonkinlaisen ratkaisun, toisaalta ne eivät tällöin ole räätälöityjä juuri kyseiseen kehitteillä olevaan peliin

Useat pelit ovat käyttäneet omaa skriptikieltään• UnrealScript, Quake-C, BGScript, NWScript, jne.

Skriptikielen toteuttaminen voi kuitenkin olla sudenkuoppa• Huolehdittava kielen suunnittelusta, kääntäjästä, tulkista ja skriptikielen

sitomisesta konekieliseen ohjelmaan Skriptikielelle tulevaisuudessa esitettävät vaatimukset voivat olla

yllättäviä ja niihin voi olla vaikeaa varautua

Page 23: Skriptikielten käyttö pelitekoälyssä

Lopuksi...

Pelitekoälyn tai sen osan toteuttaminen skriptikielellä on ohjelmiston arkkitehtuuriin liittyvä valinta

Tekoälyssä käytetyt algoritmit ovat valinnasta riippumatta pääosin samoja

Skriptikielen mukaan ottaminen tekoälyä toteutettaessa on erityisen järkevää vain jos sille on selvä tarve

Halutaan esim. nimenomaan c++:aa taitamaton kenttäsuunnittelija toteuttamaan tekoälyä

Pieniin peliprojekteihin skriptikielen sisällyttäminen voi olla huono ratkaisu

Sama pätee esimerkiksi puhelimilla pelattaviin peleihin Vaikka tekoälyä toteutetaan skriptikielellä, ei kaikkia

tekoälykomponentteja ole pakko toteuttaa skriptaamalla Reitinetsintä, ym. vaativa, joskin yleiskäyttöinen koodi mieluummin

pelin pääasiallisella ohjelmointikielellä