skriptikielten käyttö pelitekoälyssä
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 PresentationTRANSCRIPT
Skriptikielten käyttö pelitekoälyssä
Reima Halmetoja
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?
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.
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.
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ä
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
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
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
Johdatus skriptikieliin
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
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.
Pelitekoälyä skriptikielillä
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
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
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ä
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”.
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
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ää
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.
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
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
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ä