Skriptikielten kytt pelitekolyss Reima Halmetoja Esitelmn rakenne Mit

  • Slides: 23
Download presentation
Skriptikielten käyttö pelitekoälyssä Reima Halmetoja

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

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?

Mitä on pelitekoäly? Pelitekoälyssä tavoitellaan rationaaliselta vaikuttavaa toimintaa Pelitekoäly onnistuu tehtävässään, kun se luo

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

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

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,

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

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

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

Johdatus skriptikieliin

Pelitekoälyä skriptikielillä Esimerkki skriptikielen hyväksikäyttämisestä pelin tekoälyn toteuttamisessa mainitsemattomassa pelissä Eräässä pelin osassa sotilasryhmän

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

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ä

Pelitekoälyä skriptikielillä Yksinkertaisempaakin tekoälyagenttien toimintaa voidaan saada aikaan kirjoittamalla kullekin tehtävälle tai toiminnalle sopiva

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

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ä: Esimerkki: Ampumisäänen kuuleminen

Pelitekoälyä skriptikielillä Triggeri on jokin agenttiin vaikuttava asia tai tapahtuma pelissä: Esimerkki: Ampumisäänen kuuleminen Vähäinen elämäpisteiden määrä Hissin eteen saapuminen 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

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. Unreal. Script

Etuja ja haittoja Tulkattavat skriptikielet ovat huomattavasti hitaampia, kuin konekieliset ohjelmat Esim. Unreal. Script 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

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

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 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

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,

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 • Unreal. Script, 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

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ä