Kyseessä on itseään pelaava Tetris, jonka taustalla toimii pieni ohjelma. Se tekee päätöksiä kahdeksan eri tekijän perusteella, kuten pinon korkeus, reikien määrä ja pinnan epätasaisuus. Jokaisella näistä on oma painoarvonsa, ja niiden yhdistelmä määrittää miltä koneen pelityyli näyttää.
Alempaa löydät linkin, josta voit seurata tätä reaaliajassa.
Mielenkiintoinen osa on se, että nämä painotukset eivät ole pysyviä. Jokaisen pelin alussa ohjelma arpoo itselleen uudet arvot, eli jokainen peli on vähän eri pelaaja. Kun pelejä kertyy, parhaat tulokset jäävät talteen ja niiden perusteella muodostetaan seuraava kierros. Jakauma kapenee voittajien ympärille, mutta ei koskaan täysin, jotta mukaan jää myös sattumaa.
Tekniikka itsessään on yksinkertainen ja yllättävän vanha. Taustalla on cross entropy method, eikä tämä vaadi mitään raskasta infraa. Koko oppiva osa pyörii pienessä Python-prosessissa palvelimen nurkassa. Ei neuroverkkoja, ei GPU:ta, ei massiivisia klustereita. Vain muutama numero ja aikaa.
Tämä on hyvä muistutus yhdestä asiasta. AI:sta puhutaan tällä hetkellä lähes aina suurten mallien ja valtavan laskentatehon kautta. Se on yksi tapa tehdä asioita, mutta ei läheskään aina järkevin. Monissa tapauksissa oppiva järjestelmä voi olla pieni, ymmärrettävä ja silti toimiva.
Jotta peli ei jatkuisi loputtomiin, olemme tehneet siitä tarkoituksella vaikeamman. Tietyin väliajoin peliin lisätään roskarivi, joka pakottaa tilanteen kiristymään ja lopulta päättymään. Vasta silloin oppiminen oikeasti tapahtuu.
Se mitä näet sivulla, on yksi oikea peli käynnissä. Ei tallenne. Jos jäät seuraamaan, saatat nähdä sukupolven vaihtuvan. Ja jos palaat myöhemmin, se on jo vähän parempi kuin ennen.
Tämän rinnalle olemme rakentaneet abstraktimman näkymän nimeltä BLOOM. Se ei piirrä peliä eikä pinoja, vaan agentin mieltä. Keskellä hehkuu ydin, jonka ympärille kasvaa kahdeksan terälehteä — yksi jokaista painokerrointa kohden. Terälehden pituus kertoo painon voimakkuuden, leveys taas sen epävarmuuden, eli kuinka laajalla alueella populaatio vielä etsii. Jokaisella terälehdellä on oma värinsä.
Pelin tapahtumat näkyvät kukan elämässä. Rivin tyhjentyessä terälehtien läpi kulkee energia-aalto. Neljän rivin yhtäaikainen tyhjennys lähettää keskeltä laajenevan väriaallon. Kun peli päättyy, kukka kiertyy hetkeksi sisäänpäin, ja sukupolven vaihtuessa se hajoaa hiukkasiksi ja kasvaa uudelleen uusien keskiarvojen ympärille. Jokaisella sukupolvella on oma kukkansa.
BLOOMia voi halutessaan myös kuunnella. Kukkasen alapuolella on painike, josta voi aktivoida BLOOMin äänimaailman. Oletuksena ääni on pois päältä.
Kukkaa voi myös koskettaa. Napauta jotain terälehteä — se kirkastuu hetkeksi ja soi omaa säveltään. Napauta keskeltä, niin ydin vastaa pehmeällä soinnulla.
Sama peli, sama data, eri kerros.
Toistaiseksi järjestelmä pelaa ihan rauhassa, ilman että tietää yleisöstä mitään. Jännittävää, eikö?