Tekoäly - yleisesti ja tietokonepeleissä erityisesti

kirjoittanut: Aapo Puhakka 1997


Sisältö


Mitä on tekoäly?

Älykyys - mitä se on? Kuinka sen voisi määritellä? Älykyydelle ei ole löydetty yleisesti hyväksyttyä, ei-rekursiivista määritelmää, joka siis ei viittaisi älykkäisiin olentoihin, ihmisiin. Tällainen määritelmä kuitenkin varmaan on olemassa; muualla maailmankaikkeudessa saattaa jossain olla muita älykkäitä olentoja tai me kenties jonain päivänä pystymme rakentamaan keinotekoisia ihmisiä tai koneita, joita voimme kutsua todella monipuolisesti älykkäiksi.

Toki on olemassa älykkyystestejä. Kuten sellaisia, joita Mensa tai Puolustusvoimat käyttävät. Mutta nykyisin on yhä laajemmassa määrin asetettu kyseenalaiseksi se, mittaako niissä menestyminen älykyyttä. Onko todella kuviopäättelykyky sama kuin älykkyys? Vai olisiko kenties mahdollista rakentaa esim. kohtuu yksinkertainen algoritmi, joka selvittää massamaisella kokeilulla 90% ns. 'älykyystesteistä'?

Tällä hetkellä on muotia puhua eri tyyppisestä älykkyydestä. Puhutaan matemaattisesta, kielellisestä, musiikillisesta, luovasta, sosiaalisesta, tunne-, ym. älykkyydestä. Mutta auttaako tällainen enemmän tai vähemmän ad hoc -periaatteella tehty jako ymmärtämään paremmin älykkyyden olemusta?

William Calvin on miettinyt ongelmaa tähän tapaan:
'Smart merely means good at convergent thinking problems, as when there is one right answer.

But intelligence, as Jean Piaget once said, is what you use when you don't know what to do -- when you must improvise with divergent thinking, and there is no right answer. Multiple-choice exams require smarts but long essay questions take intelligence.'

Ihmiset erottaa eliölajeista mm. se, että ihminen on levinnyt paljon laajemmalle aluelle maapallolla kuin yksikään muu eliölaji. Erään nykyisen käsityksen mukaan n. 3 milj. - 100 000 vuotta sitten maapallon lämpötila vaihteli huomattavasti nykyistä nopeammin. Uusi jääkausi saattoi kehittyä vain 15 vuodessa. Tällaiset aikavälit ovat liian nopeita evoluutiolle ja tämä seikka olisi merkittävästi vaikuttanut älykkään olennon ilmestymiseen. Onko älykkyys siis sama asia kuin sopeutumiskyky uusiin olosuhteisiin?

Kutsuisimme varmaankin tyhmäksi ihmistä, joka toistaa aina samat virheet kerrasta toiseen. Kuuluuko älykyyteen siis oppimiskyky?

Vaihtoehtoisia näkökulmia älykyyden tarkasteluun on siis useita. Ja nämä näkökulmat ovat vielä jossain määrin ristiriitaisia keskenään. Esim. älykkyystesti tehdään melko nopeassa ajassa, kenties henkisen paineen alla, eikä siinä ehdi oppimiskyky juuri vaikuttamaan testitulokseen

Mitä sitten on tekoöly (Artificial Intelligence, AI)? Tekoälyllekään ei ole yleisesti hyväksyttyä, ei-rekursiivista määritelmää. Eräs aika suosittu rekursiivinen on Minskyn vuodelta 1968: 'The science of making machines do things that would require intelligence if done by men.'

Tuota määritelmää voisi soveltaa tietokonepeleihin seuraavasti: 'Joku elementti tai olio tietokonepelissä on älykäs, jos voisimme kutsua samalla tavalla käyttäytyvää elementtiä ohjaavaa ihmistä älykkääksi.'

Nuo molemmat määritelmät ovat sekä rekursiivisia että subjektiivisia, mutta ne antavat jonkin käsityksen siitä, mitä tekoälyllä tarkoitetaan.

Noista määritelmistä on tehtävä sellainen huomio, että ne eivät ota kantaa siihen miten älykyys on toteutettu. Älykkään ohjelmanpätkän ei tarvitse toimia samalla tavalla kuin ihminen toimii, vaikka se onkin mielenkiintoinen vaihtoehto. Ohjelman ei välttämättä tarvitse olla edes oppiva. Nimittäin saatamme jonkin aikaa kutsua älykkääksi johonkin alaan syvällisesti perehtynyttä asiantuntijaa, vaikka hän ei enää oppisi alaltaan uusia asioita, kunhan hän vain aikoinaan on oppinut paljon ja tietää alasta huomattavasti meitä enemmän.

[AI],[Calvin],[Chess],[IQ]


Ihminen vs tietokone

Vaikkei tekoälyä välttämättä tarvitse toteuttaa ihmisen toimintoja kopioimalla, on tässä välissä kuitenkin hyvä hieman katsoa kuinka tekoälyn esikuva toimii. Ihmisen tietojenkäsittelyjärjestelmä, aivot ja muu hermojärjestelmä, eroaa aika paljon tavallisen tietokoneen arkkitehtuurista ja tyyppillisestä tietojenkäsittelysovelluksesta, vaikka joitain yhtenäisyyksiä löytyykin.

Tietokoneella on kuitenkin mahdollista simuloida ihmisen neuraaliverkkoja kuten melkein mitä tahansa muutakin asiaa. Ihmisen hermojärjestelmän toimintaa ei toistaiseksi ymmärretä toistaiseksi eikä todennäköisesti aivan lähitulevaisuudessakaan riittävän hyvin kokonaisen keinoihmisen rakentamiseksi. Nykypäivän tai lähitulevaisuuden tekniikka saattaisi riittää laajan ihmissimulaation rakentamiseen. Ei millään standardeilla kaupan hyllystä saatavilla Pentium-koneilla, mutta erikoisesti tarkoitukseen suunniteltu rautatason massiivinen rinnakkaisarkkitehtuuri saattaisi riittää.

Tavallinen tietokone koostuu prosessorista, työmuistista, massamuistista, väylämuistista, jne. Oletan, että lukija muutenkin tietää kuinka tavallinen tietokone toimii.

Ihmisen hermojärjestelmä koostuu n. 10^11:sta hermosolusta eli neuroneista, jotka ovat tietojenkäsittelyn perussoluja. Niiden tehtävänä on sekä käsitellä että varastoida tietoa. Hermosolujen välillä on n. 10^15 yhteyttä, jotka ovat osa hermosolua. Aivoissa ei ole mitään eriyistä keskusprosessoria, vaan ne käyttävät hyvin massiivista rinnakkaislaskentaa.

Hermosolujen laskenta ja tiedonvälitys perustuu sähkökemiallisiin ilmiöihin. Laskutoimituksista sellainen osaa plus-, miinus- ja kertolaskun. Yksittäinen neuroni on melko hidas, se pystyy 'laukeamaan' eli välittämään tietoa eteenpäin korkeitaan 2-3 ms välein eli n. taajuudella 500 Hz. Yleensä solut laukovat alle 200 Hz taajuudella. Hermosolut eivät toimi ihan samalla tavalla diskreetisti kuin tietokone, mutta kohtuullisena analogiana voisi sanoa tuolla taajuudella välitettävän yhden bitin. 40 Hz voisi olla karkea arvio yhden luvun välitykseen. Tieto kulkee yhteyksissä nopeudella 1m/s - 100m/s, riippuen siitä kuinka hyvin 'kaapeli on eristetty', pitemmillä ja tärkeämmillä yhteyksillä paremmin.

Ihmisen muisti jaetaan yleensä kolmeen ryhmään: puskuri-, työ- ja säilömuistiin, selkeä analogia tietokoneista. Puskurimuistissa aisteista tuleva signaali säilyy muutaman hetken kun aivot suorittavat pääosin tiedostamattomia peruskäsittelyoperaatioita, äänisignaali 2-3 s, näkösignaali alle sekunnin. Tietoisessa työmuistissa ihminen kykenee säilyttämään vain alle 10 (n. 5-7) asiaa kerrallaan, käyttämällä 'yleiskäsitteitä' voidaan hahmottaa isompiakin asioita. Työmuistissa asiat säilyvät vain n. 20 - 30 s ellei sitä 'virkistetä' eli asioita käytetä. Tiedostamattomat tietojenkäsittelyoperaatiot, 'intuitio', voivat käsitellä enemmänkin asioita kerrallan, pitemmän aikaa.

Aivot valikoivat jollain tuntemattomalla ja tiedostamattomalla tavalla mielestään 'tärkeimmät' asiat pitkäaikaiseen säilömuistiin, tärkeyteen vaikuttaa ainakin se, kuinka paljon asiaa on kerrattu työmuistissa. Tiedonsiirtonopeus säilömuistiin on rajallinen, mutta mitään rajoja itse säilömuistin kapasiteetille ei ole havaittu. Verrattuna hyvin suureen kapasiteettiin säilömuistin tiedonhakukyky on varsin hyvä. Mutta muisti on myös epävarma: ihminen pyrkii unohtamaan epämieluisia asioita, 'aika kultaa muistot', ja toisinaan ei heti kykene muistamaan jotain asiaa, vaikka kovasti yrittää, mutta hetken kuluttua se pulpahtaa itsestään esiin. Pitkäaikaisen muistin voisi jakaa oikeastaan vielä ainakin kahten osaan sen mukaan, kuinka pysyvästi tietoa on varastoitu aivoihin. Esim. aivotärähdyksen jälkeen ihminen on saattanut unohtaa tapahtumat edeltäneen puolen tunnin ajalta, mutta vanhemmat tapahtumat ovat yhä muistissa. Kenties puolessa tunnissa tiedot varastoituvat aivoissa johonkin pysyvämpään muotoon.

Muistin tarkkaa yksityiskohtaista toimintamekanismia ei tunneta: tämä erityisesti hankaloittaa neuraaliverkkojen käyttöä.

[Aivot], [Levine], [Psykologia]


Tekoäly yleisesti

Tekoälyn tarkoituksena on saada ohjelma vaikuttamaan älykkäältä. Tämä voidaan saada aikaan monella eri tavalla. Itse jakaisin tekoälyjärjestelmät kahteen pääryhmään: oppiviin ja oppimattomiin järjestelmiin. Valtaosa nykypäivän tekoälysovelluksista (niin asiantuntijajärjestelmät kuin IBM:n Deep Blue - shakkitietokone) kuuluvat oppimattomien luokkaan. Oppivat mallit voisi vielä jakaa kolmeen ryhmään sen mukaan miten niissä käytetty hyväksi luonnon toimintamalleja: 1. keksittyihin ja psykologisiin malleihin, 2. evolutiivisiin (geneettisiin) algoritmeihin ja 3. neuraaliverkkoihin. Kokonaisessa järjestelmässä voi toki olla osia kaikista näistä ryhmistä.

Tekoälysovelluksen tekemisessä käytettävällä välineistöllä ei ole ratkaisevaa merkitystä. Mikä tahansa ohjelmointikieli, jossa voidaan varastoida tietoa (on muuttujia) ja jossa on jotain logiikkaa (valintoja ja luuppeja) käy. Esim. asiantuntijajärjestelmien ero aiempiin tekoälyjärjestelmiin verrattuna on vain toteutustavassa: kun aiemmin tieto jaettiin dataan ja algoritmeihin, niin se on asiantuntijajärjestelmissä vain jaettu toisella tavalla. Varmaankin toisilla ohjelmointikielillä voidaan käytännössä toteuttaa tekoälyä tehokkaammin kuin toisilla, mutta se on suureksi osaksi mielipidekysymys, enkä aio siihen tässä yhteydessä sen kummemmin puuttua. Muuten kuin toteamalla oliopohjaisten lähestymistapojen edullisuuden tässäkin tapauksessa.

Tekoälyjärjestelmässä ei tarvitse hakea parasta mahdollista ratkaisua, vaan ns. heuristinen eli kohtuullisen järkevän ratkaisun hakeva algoritmi riittää. Ei ihminenkään etsi aina parasta mahdollista ratkaisuva, vaan sellaisen mikä on riittävän hyvä.

Ihmisellä voi olla jostain ongelmakentästä kahdenlaista tietoa ja osaamista: tiedostamatonta ja tietoista. Tietoisen asiantuntemuksensa hän voi purkaa ohjelmakoodiksi, mutta tiedostamatonta ei. Esimerkiksi hän voi kertoa kuinka hän suorittaa jonkun matemaattisen laskun, muttei sitä kuinka hän tunnistaa jonkun tutun henkilön kasvot. Ihmisen tiedostamatonta ongelmanratkaisua jäljittelevän ohjelman toteuttamiseen tarvitaan oppiva järjestelmä. Tietoista ongelmanratkaisua jäljittelevä ohjelma voi olla oppimaton.

[AI],[PCAI]


Toimivan pelisovellutuksen tekeminen

Pelien tekoälyjen yksityiskohdat voidaan toteuttaa hyvin monilla erilaisilla tavoilla, mutta hyvistä pelitekoälykomponenteista on havaittavissa useita yhteisiä ominaisuuksia ja yhtäläisyyksiä löytyy myös niiden 'tuotantoprosesseista'. Esitän ensin löytämiäni mielestäni hyviä yleisiä periaatteita ja sitten pari CASE-esimerkkiä.

Käytännön pelitekoälyä varten ei välttämättä kannata ruveta kehittämään erikoisia oppivia järjestelmiä. Hyviä esimerkkejä toimivista oppivista tekoälyistä peleissä en ole löytänyt. Asiakkaalle toimitettavan version ei tarvitse olla oppivia, koska pelin kehittämisprosessi on oppiva. Siinä on nimittäin mukana oppiva komponentti, ihminen, tekoälykehittäjä itse. Tyypillistä peliä pelataan ehkä 10-100 kertaa, tällainen aikajakso on aivan liian lyhyt evolutiivisella algoritmille ja useimmille oppiville malleille jotta oppimisesta olisi jotain oleellista hyötyä. Jotain yksittäistä kohtaa pelissä saatetaan tosin käydä läpi tuhansia kertoa ja tässä voisi ehkä jotain oppimista tapahtua. Joskus tulevaisuudessa teknologian kehittyessä oppiva systeemi saattaa olla toimiva vaihtoehto, mutten toistaiseksi pidä sitä realistisena kuin muutamissa erikoistapauksissa ja erikoisominaisuuksissa.

Tekoälysysteemistä tulee pakostakin laaja ja monimutkainen. Tällöin selkeän ohjelmointityylin, dokumentoinnin ja rajapintojen merkitys korostuu. Käytännössä menestyneet AI-systeemit ovat olleet yhden henkilön käsialaa. Tällöin tarvitaan toimiva rajapinta AI:n ja muun pelin välille; harvoin nykypelit enää ovat kokonaisuudessaan pelkästään yhden henkilön käsialaa.

Tekoälyä omaavaa oliota tekevän ihmisen täytyy itse osata pelata hyvin ao. oliota ja hänellä täytyy olla myös tietoinen käsitys siitä kuinka hän sitä pelaa. Tämä on AI-systeemin monimutkaisuuden lisäksi toinen tekijä, minkä takia hyvät tekoälyelementit ovat olleet yhden henkilön käsialaa: Koska ihmisen ongelmanratkaisu on heuristista on jokaisella hieman eri näkemys siitä mikä on paras toimintastrategia missäkin pelissä. Jos menettelytapaa jokaisessa yksityiskohdassa tarvitsee ruveta komiteassa miettimään kehitystyö on hidasta ja saattaa helposti jämähtää paikoilleen. Lisäksi on huomattava, että eri ihmisten hyvinkin erikseen toimivat strategiat eroavat toisistaan yksityiskohdissaan: jossain toisessa strategiassa toimiva taktiikka on todella typerä jossain muussa strategiassa.

Tekoälyohjelmoijalla on mielessään joku yleisperiaate, jonka mukaan hän lähtee projektia toteuttamaan ja johon hän sitten lisää yksityiskohtia. Hyvin tärkeä osa projektia on yleisperiaatteen valinta. Hyvä valinta voi säästää monen yksityiskohdan erilliseltä toteuttamiselta. Yleisstrategian on oltava selkeä ja siihen on voitava helposti lisätä paljon yksityiskohtia ilman erikoistapauksia, ilman että koodi käy liian sekavaksi. Rajapinnat, olioajattelu ja ongelmakentän jako osoittautunevat tärkeiksi.

Oleellinen osa kehitysprojektia on tekoälyn toiminnan tarkkailu: Laitetaan peli & tekoäly pyörimään ja katsotaan miten se käyttäytyy. Onko se älykäs? Jos kyseessä olisi ihmispelaaja, niin miten häntä neuvoisin? Tekoälyn tekemät mokat kirjoitetaan säännöllisesti ylös listalle ja ratkaisuja niihin sitten implementoidaan yksi kerrallaan ohjelmakoodiin. Tarkkailu- ja implementointikierroksia tarvitaan varmasti useita. Tekoäly versioita voi myöhemmässä vaiheessa lähetellä muille pelattavaksi ja virhepalautteen saamiseksi uusista näkökulmista.

Parhaita mahdollisia ratkaisuja ongelmiin ei tarvitse hakea, summittaiset, heuristiset riittävät hyvin. Ohjelman voi laittaa toimimaan niin kuin ohjelmoija itse vastaavassa tilanteessa toimisi. Älyn kehittäminen täydellisyyteen saattaa hyvinkin jatkua melkein ikuisesti. Jossain vaiheessa, kenties pelkän peliaikataulun pohjalta, on vain todettava älyn olevan riittävän hyvä ja lähetettävä koodi eteenpäin. Jäljelle jääneiden bugien varalta älylle on tehtävä toipumismekanismit: jossain tapauksissa sen on pystyttävä vain yksinkertaisesti toteamaan, ettei valittu toimintamalli (esim. olion kulkusuunta) johda mihinkään, vaan on palattava takaisin ja kokeiltava jotain muuta. Jottei jäisi jäljelle sellaisia mahdollisuuksia, missä joku olio vain jatkuvasti koettaa kävellä seinän läpi mihinkään pääsemättä. Satunnaislukugeneraattoria voi käyttää hyväksi, jotteivat elementit toimi aina samalla tavalla.

Seuraavaksi esittelemilleni tapauksille on ollut yhteistä nimenomaan seuraavat seikat:

[Angband], [Keating], [Reaper]


CASE: Angband-borg

Angband on ns. rogue-tyyppinen peli, jonka juuret juontavat 70-luvulle Robert Alan Koenoken kehittämään Unix moriaan. Se on täysin epäkaupallinen peli, joka on vuosikymmenten myötä kehittynyt vapaaehtoisten ylläpitäjien toimesta. Rogue- tyyppiset pelit ovat tekstigrafiikkaan pohjautuvia, joissa oma pelaaja on usein miuku (@) ja viholliset kirjaimia, seinät esim. risuaitoja (#) ja lattiat pisteitä (.). Moria- lähtöiset rogue-pelit ovat saaneet innoituksensa Tolkienin fantasiamaailmasta. Pelaaja seikkailee laajassa luolastossa, jota tulee näkyville pelikartalle sitä mukaan kun etenee johonkin suuntaan. Angband on pelattavuudessa hyvin monipuolinen peli, siinä on satoja erilaisia vihollisia, varusteita, aseita, ym. Esim. ovia voi avata, sulkea, lukita, hakata nauloilla kiinni ja rikkoa; lukkoja voi tiirikoida ja salaovia löytää. Erilaisia valaistusvaihtoehtoja löytyy, samoin ruokia ja juomia, joista osa myrkyllisiä ja osa tuo jotain hyödyllisiä/haitallisia maagisia ominaisuuksia. Voi tehdä taikoja, käyttää erilaisia maagisia esineitä, ym, ym. Pelissä on kaupunki asukkaineen, jossa on erilaisia kauppoja joista voi ostaa ja myydä tavaroita. Luolastoista voi löytää/kaivaa/tappamalla olioita hankkia rahana käyviä jalometalleja. Pelissä on myös unique-hirviöitä ja esineitä. Näillä on nimenä jotain Tolkien-maailmasta lainattua: esim. Saruman-velho, Glaurung-lohikäärme tai Anduril-miekka. Pelaaja kuuluu johonkin rotuun ja luokkaan, jotka rajoittavat/määrävät erityisesti hänen taika- ja taistelukykyjään. Pelaajalla on numeroarvo eri ominaisuuksissa (vahvuus, älykkkyys, taistelukestävyys, ym.) ja kyvyissä (lähitaistelu, magiikka, ym.) jotka kehittyvät pelin aikana. Samoin hänellä on tietty osaamistaso (1-50), hallussa oleva rahamäärä, ym. Pelin luolastot ovat eri syvyyksillä, syvemmällä oleva on aina vaikeampi. Pelin loppullisena tarkoituksena on tappaa Morgoth 'ultimate evil', joka asustaa syvyydellä 100 ja siten voittaa peli.

Angband on huomattavan pitkä, vaikea ja kärsivällisyyttä vaativa moria-versio. Sen läpipelaaminen vie kokeneeltakin pelaajalta kuukausia melkein täysipäiväistä pelaamista. Kaiken lisäksi peli ei anna tallentaa tilannetta kuin väliajoiksi kun peli ei ole käynnissä. Jos monen viikon pelaamisen jälkeen sattuu tekemään virheen ja kuolemaan, niin ei voi kuin aloittaa alusta. No, tuo on helppo kiertää parilla komentojonolla, mutta *tosi* pelaajat eivät sellaisia käytä. Angbandilla on oma, varsin aktiivinen uutisryhmänsä rec.games.roguelike.angband. Koska Angband on epäkaupallinen peli sen lähdekoodi on vapaasti saatavilla.

Angbandin nykyisellä ylläpitäjällä, Ben Harrisonilla, on ollut käynnissä mielenkiintoinen tekoälyprojekti: hän on kehittellyt automaattista angbandin pelaajaa, borgia. Ben Harrisonilla on ollut kokemusta laajoista ohjelmistoista ainakin Angbandin ylläpitäjänä. Hän itse on intohimoinen Angbandin pelaaja ja hän ylläpitää säännöllisesti borg-fix-listaa. Borg:in lähdekoodi on vapaasti saatavilla (ihan C:tä). Niinpä Ben Harrisonin borgin pohjalta ohjelmointitaitoiset pelaajat ovat kehitelleet omia borgejaan. Ottaen huomioon kuinka vaikea peli ihmiselle Angband on, niin borg on ollut varsinainen menestys, sillä peli on jopa pelattu muutamalla borg-versiolla pari kertaa läpi! (ainakin Eric Welsh:in ja Adam Goodman:in borgit (jälkimmäinen tosin huijaamalla kuolemaa)) Usein on läpipelaaminen tapahtunut siten, että borgin kehittäjä on katsonut vierestä kuinka borg-pelaa ja huomatessaan tyhmyyksiä, on mennyt korjaamaan koodia ja taas on päästy eteenpäin.

Borg toki saa etua ihmiseen verrattuna, mitä tulee kärsivällisyyteen: kone ei väsy käymään 'helppoja', 'tylsiä' ja 'vaarattomia' tasoja läpi paljon pelkästään kerätäkseen kokemusta ja jahdatakseen hyviä esineitä. Yksikään borg-versio ei ole täydelliseksi vielä tullut. Angbandissa on monia eri luokkia ja rotuja; eri rodun+luokan yhdistelmät vaativat usein omat taktiikkansa läpipääsyyn. Yhdelle rotu+luokka yhdistelmälle kehitetty taktiikka ei välttämättä toimi muilla.

Tämä tekoälysovellus ei 'huijaa' mitään, se ei käytä mitään tietoa hyväkseen, mitä ei pelaajallakaan ole käytettävistään. Se ikäänkuin lukee kuvaruutua ja syöttää ohjelmalle näppäinsignaaleja. Borgin perusidoina on tavoitelista, jonne borg asettaa itse tavoitteita haluamaansa järjestykseen. Ne vaihtelevat yksinkertaisista (avaa tuo ovi, tapa tuo monsteri) monimutkaisempiin (tutki luolasto, ota selville miten hallussa olevista varusteista tehdään paras mahdollinen yhdistelmä). Varusteiden paremmuutta borg selvittelee niiden arvon (kullassa) perusteella. Sillä on tietty perustaktiikka luolaston selvittelyyn. Perusideoihin kuuluu myös luolaston eri alueiden luokittelu 'vaarallisiksi', joita se pyrkii sitten välttämään. Borgin pelaamista on ihan hauska katsella ja kirjoittaa samalla ylös kommentteja miten sitä voisi parantaa. Koska sillä on sekä tavoitelista että alueiden vaarallisuus-luokittelu sillä tavallaan on inhimillisiä ominaisuuksia ja tunteita: tavoitteellisuutta, tahtoa ja pelkoa. Muuan suuri ongelma borgin suhteen on juuri tahdon ja pelon välisen ristiriidan pitäminen kurissa Jos se on liian varovainen, pelkuri, se voi jämähtää pysyvästi pyörimään helpoimmissa luolastoissa. Jos taas pelko ei vaikuta tarpeeksi se syyllistyy uhkarohkeuteen ja kuolee helpommin.

[Angband]


CASE: Quake-bot

Vaikkei Quake varsinaisesti ole mikään älypeli, on siihen kehitetty DeathMatch- moodiin muutamia mielenkiitoisia automaattisia pelaajia, bot:eja. Lukija varmaan tietää, mikä Quake on joten ei siitä sen enempää. Quakeen voi kehittää lisäominaisuuksia, kuten botteja käyttäen erityistä tarkoitukseen kehitettyä kieltä, QuakeC:tä. Hyvänä Quake-bot:ina yleisesti pidetään Steven Polgen Reaper bot:ia. Steven Bolgilla on kokemusta monimutkaisista ohjelmistoista hänen toimittuaan 7 vuotta IBM:n tietokoneverkko-osastolta. Hän on ollut intohimoinen Quaken pelaaja ja on pitänyt yllä tekoälyn parannuslistaa. Automaattinen Quake-pelaaja on ollut niin menestynyt, että Quaken kilpailijaa, Unrealia tekevä firma Epic Megagamges on palkannut Steven Polgen kehittämään Unrealin hirviöiden AI:tä. Koska UnReal:in AI kehitetään Reaper bot:in pohjalta, niin sen lähdekoodia ei luonnollisestikaan ole saatavilla. Vaikkei Reaperin sorsia sakaan julkisesti, niin sille on ilmestynyt useita kilpailijoita Reaperin innostamana 'tyhjältä pöydältä'.

Reaper bot:in Angbandin borgin tapaan ei pitäisi huijata. Toisaalta sitä on vaikea todentaa, koska koodia ei ole saatavilla. DeathMatchia Reaper bot:in vaikeustasoa 3 vastaan on pidetty hyvin vaikeana. On kuitenkin muistettava, että Quaken kaltaisessa pelissä menestys riippuu ennenkaikkea tarkasta tähtäyksestä ja nopeasta ampumisesta. Tällaiset ominaisuudet ovat pikemminkin kiinni reflekseistä kuin älykyydestä ja kunhan nuo toiminnot vain optimoidaan, niin tekoäly-vastustajasta saadaan varsin paha.

Reaper bot:ssa myös on (tekijän kertoman mukaan) Angband borg:in tapaan 'tavoitelista', tavoitteina esim. pelaajan jahtaaminen/tuhoaminen, aseen/ ammuksien/ lääketarpeiden etsintä, ym. Reaper ymmärtää kulmat, arvioi hyppäämiset, tietää ovet, triggerit, ym. pikkudetaljit.

Reaper bot:in väitetään myös kykenevän oppimaan, mutta se on melkein liioittelua. Oppiminen kattaa ainoastaan käytyjen alueiden 'muistamisen' ja tavaroiden sijainnin näillä alueilla. Tämä ei varsinaisesti ole oppimista omista virheistään vaan vain tiedon rekisteröintiä.

Unrealin tekoälyyn Steven Polge kertoo kehittävänsä vihollisille myös kyvyn 'oppia aikaisemmista tekemisistään'. Tässä yhteydessä sanaa oppia voi suhtautua skeptisesti, koska 'oppimiseen' käytetyt Polgen käyttämät mallit todennäköisesti ovat sen verran heppoisia (mitään todellisia neuraaliverkkoja tuskin Unrealissa tullaan näkemään) että niillä ei ole paljoakaan takeita, että menneestä toiminnasta tehdyt johtopäätökset ja toiminnan parannusstrategiat johtisivat parempaan suuntaan. Toisaalta, jos joku hirviö rupeaa pelkäämään pelaajaa ja jotkut toiset kenties toimimaan uhkarohkeasti, niin tämä tuo olioihin keinotekoisen persoonallisuuden vaikutelman samaan tapaan, kuin Angbandin borg:ssa voidaan havaita tahtoa ja pelkoa.

Unrealiin Steven Polge kertoo myös kehittävänsä hirviöiden välille kommunikointia ja yhteistyötä. Tämä on hyvinkin mahdollista eikä edes kovin vaikeasti toteutettavissa. Tehokkaimmat ratkaisut saadaan aikaan, mikäli lainataan konsepteja oikeista sotajoukoista. Joku pelaajaa pakeneva (tiedustelija) olio kertoo vastaantuleville muille hirviöille pelaajasta. Nämä vastaantulleet oliot sitten muodostavat joukon. Hirviöryhmälle valitaan joku johtajaksi (esim. vahvin/voimakkain), joka määrää muut sellaiseen asemaan, että lähestyvää pelaajaa vastaan saadaan aikaan yllättävä, yhdenaikainen tulenavaus. Esim. ryhmitys jonkun oviaukon molemmille puolille. Ja voidaan vielä käyttää lisää 'tiedustelijoita' ja 'syöttejä'.

[Reaper]


Oppivat mallit

Olen kasannut psykologiset ja keksityt mallit samaan ryhmään, koska psykologisista malleista ei toistaiseksi voida olla varmoja, kuvaavatko ne todella luonnon toimintaa. Esittelen tässä vain lyhyesti muutaman mallin, lisää löytyy lähteistä. Jollain tämäntapaisella (tai jollain itsekeksityllä) voidaan toteuttaa kohtuu helposti saada tekoälysovelluksen johonkin osaan auttavasti toimivaa oppimista. Perusheuristinen lähtökohta on vain arpoa kasa toimintamalleja, toteuttaa vuorotellen niitä kaikkia ja valita tulosten perusteella paras.

Aika yleisesti käytetty psykologiassa on käytetty seuraavaa kuusivaiheista oppimismallia. Jako ja nimeäminen Engeströmin (1988), ranskalaisten viivojen tulkinnat omiani. Siitä on mahdollista kehittää versio myös tietokoneohjelmaa varten.

  1. Motivoituminen:
    - Havaitaan tarve oppia.

  2. Orientoituminen:
    - Muodostetaan oppimisen lähtökohdat.

  3. Sisäistäminen:
    - Muokataan uuden tiedon avulla aikaisempaa ajattelu- ja toimintamallia.

  4. Ulkoistaminen:
    - Sovelletaan syntynyttä uutta mallia tietoa toimintaan.

  5. Arviointi:
    - Arvoioidaan mallin pätevyyttä ja toimivuutta.

  6. Kontrolli
    - Arvioidaan onko oppimisen tarpeet saavutettu vaiko jatketaanko oppimista.

Seuraava mallia on käytetty oppivissa tekoälyjärjestelmissä (Rosenblatt (1962), Selfridge (1959), Samuel (1967)):

Ideaalinen järjestelmä tuottaisi syötteellä (input) oikean (halutun) tulosteen (correct output). Todellisen järjestelmän säännöt tai tietämysvarasto (Rules or knowledge base) tuottavat kuitenkin niitä sovellettaessa käyttö-osassa (Performance-module) syötteeseen tulosteen, joka kenties poikkeaa halutusta. Kriitikko-osa (Critic) vertailee haluttua ja saavutettua tulosta. Kriitikko lähettää palautteen oppimisosalle (Learner) joka kehittää sääntöjä palautteen perusteella.

[Psykologia], [AI], [Levine]


Evolutiiviset (geneettiset) algoritmit

Näitä kutsutaan englanninkielisessä kirjallisuudessa usein nimellä 'genetic algorithms'. Mielestäni sana 'evolutionary' olisi parempi kuvaamaan näitä algoritmeja, koska ne nimenomaan käyttävät hyväkseen evoluution ideoita eivätkään niinkään simuloi geenijärjestelmän toimintaa.

Evoluutiivisen algoritmin perusidea on melko yksinkertainen: siinä käytetään hyväkseen mutaatiota ja suvullista lisääntymistä. Parhaat ratkaisut säästetään seuraavalle kierrokselle. Evolutiivisilla algoritmeillä ei juuri olle käyttöä asiakkaalle toimitetussa versiossa, koska ne vaativat tyyppillisesti tuhansia iteraatiokierroksia ennenkuin hyödyllisiä sääntöjä saadaan ulos, mutta jotain yksittäistä detaljia kehitettäessä ne saattavat olla hyödyllisiä.

Suurin vaikeus evolutiivisia algoritmeja suunniteltaessa on muokata säännöt tai muut kehitettävät tietoelementit sellaiseen muotoon, että niiden halkaisemisella ja satunnaisella yhdistämisellä (eli suvullisellä lisääntymisellä) saadaan jotain järkevää aikaan.

Esimerkkinä BEAGLE-tyylinen evolutiivinen algoritmi:

  1. Lasketaan jokaisen säännön 'hyöty' tai 'paremmuus' käyttäen esimerkki dataa.

  2. Järjestetään säännöt paremmuuden mukaan ja poistetaan huonompi puolisko sääntöjoukosta.

  3. Korvataan suurin osa poistetuista säännöistä 'parittamalla' jäljelle jääneitä sääntöjä satunnaisesti. Eli halkaistaan satunnaisesti valitut kaksi sääntöä ja yhdistetään puoliskot.

  4. Korvataan loput poistetut säännöt muuttamalla jäljelle jääneistä säänöistä satunnaisesti hieman uudenlaisia versioita.

[AI], [PCAI]


Neuraaliverkot

Neuraaliverkoista ei liene ihan vielä apua pelien tekoälyyn, mutta ne ovat mielenkiintoinen tutkimuskohde. Aluksi hieman lisää tietoa oikeiden neuronien toiminnasta.

Informaatio tulee hermosoluun dendriittejä pitkin muista neuroneista. Output:ia hoitaa yksi haarautuva, muihin soluihin vievä, jopa useita metrejä pitkä aksoni. Tieto siirtyy solusta toiseen aksonien ja dendriittejen välisissä synapseissa.

Input-haaroja pitkin tulevat aktiopotentiaalit vaikuttavat hermosoluun joko eksitatorisesti (toimintaa kiihdyttäen) tai inhibitoorisesti (toimintaa estäen) riippuen välittäjäaineesta. Mitkä vastaavan suunnilleen yhteenlaskua ja vähennyslaskua. Lisäksi eri paikoista tulevat signaalit kerrotaan eri painoarvoilla (kemiallisesti tähän painokertoimeen vaikuttaa mm. solujen välisen kontaktin pinta-ala ja välittäjäaine (niitä on kymmeniä ellei satoja tyyppejä)). Jos painokertoimella kerrottujen inputtien yhteismäärä ylittää tietyn rajan (kemiallisesti solun ulko- ja sisäosien välinen sähköpotentiaalien ero saavuttaa tietyn arvon ja solukalvo läpäisee hetken ajan solun ulkopuolisia ioneja eritavalla kuin aiemmin ja solun ja ympäristön välinen potentiaaliero muuttuu hetkessä räjähdysmäisesti.), solu laukeaa lähettäen aktiopotentiaalin (tämä sähköpotentiaaliero etenee solun reunoja pitkin nopeasti: näin siirtyy vain informaatiota, ei energiaa) eteenpäin aksonia pitkin muihin soluihin. Potentiaaliero palautuu takaisin alkuperäiseen perusarvoon n. 20-30 ms kuluessa. Jos tämän ajan kuluessa solun inputteihin tulee muualta uusia eksitatorisia aktiopotentiaaleja tarvitaan siis vähemmän vaikutusta uuden aktiopotententiaali laukaisemiseksi. Neuroni saattoi laueta 2-3 ms välein. Näin on mahdollista syntyä aivoihin suljettuja neuroniketjuja, joissa aktipotentiaalit kiertävät tiuhaa tahtia. Yhden kierroksen täytyy siis kestää selkeästi alle 20 ms tai sitten ketjussa täytyy kiertää useita aktiopotentiaaleja, jotta se pysyisi yllä. Niiden synapsien, joiden läpi aktiopotentiaali usein kulkee, painokertoimet kasvavat. Tämä on eräs tapa, jolla muisti toimii. Arvellaan, että osa pitkäaikaisesta muistista selittyisi sillä, että neuronien välille kasvaisi tarvittavia uusia yhteyksiä. Mutta sitä ei tiedetä miten tämä tapahtuu.

Tätä ideaa (muistin kehittymistä & todennäköisen vastauksen hakemista eksitatooristen & ihbitooristen yhteyksien avulla) voidaan simuloida tietokoneella. Muistin tarkkojen toimintamekanismien tuntemuksen puute estää lajemman ihmisen älykkyyden simuloinnin. Sovelluksia neuraaliverkoista on tällä hetkellä lähinnä hahmontunnistuksen alueella.

[Aivot], [Levine]


Lähteet

[AI]
Yazdani, Masoud (edited):
Artificial Intelligence, Principles and applications, 1986

[Aivot]
Ihmisaivojen rakenne ja toiminta -kurssin kotisivut:
http://www.biomag.helsinki.fi/brain.html

[Angband]
http://www.voicenet.com/~benh/Angband
rec.games.roguelike.angband

[Calvin]
http://weber.u.washington.edu/~wcalvin

[Chess]
http://www.chess.ibm.com

[IQ]
kuviopäättelytesti:
http://www.aanet.aanekoski.fi/iq/iqtest.html
Mensa:
http://www.mensa.org

[Keating]
Peli AI-kehittäjän Roger Keating:in haastattelu:
http://www.gamesdomain.com/gdreview/zones/strategy/craig/articles/rogerk.html

[Levine]
D. S. Levine: Introduction to Neural & Cognitive Modeling, 1991

[PCAI]
http://www.pcai.com/pcai

[Psykologia]
Luoma (toim.): Johdatus työpsykologiaan, 1990 (uusi painos 1997)

[Reaper]
Steven Polgen haastattelu:
http://www.planetquake.com/interviews/steve.shtm
Steven Polgen dokumentaatiota Reaper-bot:sta:
http://quakemecca.simplenet.com/files/downloads/reaprb75.txt
Epic Megagames:
http://www.epicgames.com
Unreal:
http://www.unreal.com
Huhuja Unreal:in AI:stä:
http://www.unrealnation.com/info/monai.html
Quake-botteja:
http://www.gibnet.gi/~wong/botp.htm
Kritiikkiä reaper-bot:sta:
http://win32ch.home.mindspring.com/Reapdemo.htm


Aapo Puhakka