Tälle sivulle on koottu esittelytekstit, jotka kilpailijat kirjoittivat ohjelmistaan. Tekoälyt ovat listassa aakkosjärjestyksessä. Lisää selityksiä on monen tekoälyn lähdekoodissa.
Tekoälyjen esittelyt
- arpAI, Antti Karhu (C#)
Tekoäly etsii ryhmät ja arpoo niistä yhden. Arpomisella saatu ryhmä on todennäköisimmin suurin ryhmä, mutta muutkin alueet ovat mahdollisia.
- bingo, Juhani Åhman (C++)
5-vuotiaan lapsen tasoinen ja erittäin buginen botti.
- colorado, Marko Rintamäki (C++)
Yksinpelissä Colorado etsii loogisessa järjestyksessä mahdollisimman monta eri tapaa ratkaista väripeli. Ohjelma valitsee ratkaisuista parhaan. Jos ohjelma ei kerkeä käydä ratkaisuja läpi (isoissa ruudukoissa), se valitsee ensimmäisen vastaantulevan ryhmän. Loppua kohti mahdollisuuksien vähentyessä ohjelma näkee pelin loppuun asti ja tekee loppuspurtin.
Moninpelissä ohjelma valitsee ensimäisen vastaantulevan ryhmän. Näin tapahtuu ohjelmoinnin ajanpuutteen vuoksi.
Colorado on parhaimmillaan pienissä yksinpeliruudukoissa.
- ESKO, Jaakko Puntila (QBasic)
Tekoäly aloittaa vasemmasta yläkulmasta ja käy läpi kenttää ensin vaaka- ja sitten pystyrivein etsien kahta vierekkäistä samanväristä palikkaa. Ei mitään järkeilyä...
- Fantti, Joonas Mäkinen (C++)
Tekoäly valitsee parhaan siirtonsa yksinpelissä tarkastellen seuraavanlaisia arvoja: 1) ryhmiin kuulumattomien palikoiden lukumäärä poiston jälkeen 2) ryhmien pinta-ala poiston jälkeen 3) ryhmien määrä poiston jälkeen 4) suurimman ryhmän koko poiston jälkeen 5) poistettavan ryhmän koko. Eniten valintaan vaikuttavat arvot 1, 2, 3 ja 5.
Moninpelissä tarkastellaan seuraavanlaisia arvoja: 1) omanväristen ryhmiin kuulumattomien palikoiden lukumäärä poiston jälkeen 2) muidenväristen ryhmiin kuulumattomien palikoiden lukumäärä poiston jälkeen 3) omanväristen ryhmien pinta-ala poiston jälkeen 4) muidenväristen ryhmien pinta-ala poiston jälkeen 5) omanväristen ryhmien määrä poiston jälkeen 6) muidenväristen ryhmien määrä poiston jälkeen 7) omanväristen suurimman ryhmän koko poiston jälkeen 8) muidenväristen suurimman ryhmän koko poiston jälkeen 9) poistettavan ryhmän koko. Eniten valintaan vaikuttavat arvot 1, 2, 3, 4, 5, 6 ja 9.
Molemmissa pelimoodeissa on omat kaavat, jotka olen nähnyt toimiviksi. Jos kaavoista tulee arvoiksi enemmän kuin 0, niin tekoäly asettaa tarkastellun ryhmän parhaaksi ja jatkaa seuraavaan ryhmään. Kaavassa käytetään edellisen parhaan ryhmän arvoja ja niitä verrataan tarkasteltavan ryhmän arvoihin. Kaavat ovat lähdekoodissa riveillä 197 ja 397.
- ilepirav, Antti Laaksonen (Python)
Tekoäly pelaa samalla tavalla kuin minäkin pelaan väripeliä. Tekoäly pyrkii poistamaan erivärisiä ryhmiä mahdollisimman epätasapuolisesti niin, että tietynvärisiä neliöitä on aivan vähän ja toisia ruudukon täydeltä. Tekoäly poistaa sellaisen ryhmän, jonka värisiä neliöitä on ruudukossa pienin määrä ja joka on mahdollisimman korkealla.
- illi, Ilja Mäki (C++)
Yhden pelaajan pelissä tekoäly etsii parasta mahdollista ratkaisua best-first search -menetelmällä. Pelitilanteen hyvyyden (oikeastaan huonouden) arvioinnissa käytetään yksinkertaisesti sellaisten palasten lukumäärää, joiden koko on yksi palanen eli joita ei pelin sääntöjen mukaan voi sillä vuorolla poistaa pelistä. Mitä vähemmän arvioitavassa pelitilanteessa on tällaisia yksinäisiä paloja, sitä paremmaksi tekoäly kyseisen tilanteen arvioi. Arvioidut pelitilanteet tallennetaan taulukkoon paremmuusjärjestykseen siten, että pelitilanteelle arvioidun hyvyysarvon lisäksi tilanteen paikkaan taulukossa vaikuttaa se, kuinka monta siirtoa pelaajan pitää tehdä ennen kuin kyseiseen tilanteeseen päästään senhetkisestä todellisesta pelitilanteesta. Algoritmi valitsee aina taulukon ensimmäisen tilanteen jatkokäsittelyä eli seuraavien siirtojen arviointia varten (tästä tuo nimi best-first search).
Koska huomasin tämän kilpailun vasta niin myöhään että ohjelmointiaikaa jäi käytännöllisesti katsoen vain neljä päivää, jouduin jättämään monen pelaajan peliin tekoälyn, joka tyytyy vain ottamaan ensimmäisen pelitilanteesta löytämänsä palikan jonka se saa pelata.
- iro, Niko Pahajoki (PHP)
Tekoäly etsii kaikki mahdolliset siirrot kentästä, laskee viidelle ensiksi löytyneelle "pisteet" eli montako siirtoa jää jäljelle siirron jälkeen. Tämä on kyllä aika tyhmä toimintatapa, mutta aika loppui kesken.
- Naattori, Heikki Lehtosalo (C)
Naattori on aika yksinkertainen: se käy läpi jokaisen ruudun ja katsoo, mitä käy, jos valitsee sen. Yksinpelissä se laskee neljä siirtoa eteenpäin isoimmat poistot yhteen ja valitsee suurimman tuloksen tuoneen ruudun. Moninpelissä se antaa jokaiselle pelaajalle "tasoituksen", joka on siis suoraan kyseisen pelaajan pelin alussa omistamien ruutujen määrä. Tällä se sitten kertoo pelaajan suurimman ryhmän ruutujen määrän ja vähentää vastustajien pisteet omistaan. Eli moninpelissä se ottaa huomioon myös valintojensa vaikutukset vastustajien peliin.
- ogre, Jorma Sainio (C)
Yksinpelissä on käytössä lokalisoitu syvyyshaku, jossa lisäksi poistetaan huonolta näyttävät vaihtoehdot. Pisteytysfunktiona käytetään jäljelle jääneiden yksinäisten nappuloiden määrää. Moninpeli puolestaan käyttää minmax-hausta tuttua ideaa, mutta sovellettuna kahdelle tai useammalle pelaajalle. Kyseessä on siis syvyyshaku, jossa jokainen pelaaja vuorollaan yrittää maksimoida piste-eroa parhaaseen vastustajaan. Pisteytysfunktiona on tässä tapauksessa poistettujen palikoiden lukumäärä.
- pupilli, Ville Pettersson (C++)
Yksinpelissä ohjelma luo jokaiselle mahdolliselle aloitussiirrolle oman A*-tyylisen pelipuun, ja päivittää puita tasapuolisesti aikarajan rajoissa. Ajan päätyttyä ohjelma palauttaa parhaan tuloksen löytäneen puun aloitussiirron. Moninpelissä sen sijaan ohjelma tyytyy nopeahkoon suoraan arvioon.
- python, Henrik Huttunen (C++)
Tekoäly hakee alkutilanteen ryhmien edustajat ja valitsee vuorollaan ryhmän. Ryhmän valittuaan python poistaa satunnaisesti ryhmiä, kunnes tulee tilanne, jossa ryhmiä ei ole. Tällöin python katsoo, paljonko neliöitä on jäljellä, ja pitää yllä tietyn verran minimilöytöjä jokaiselle ryhmälle. Kun aika loppuu, lasketaan keskiarvo jokaisen ryhmän parhaista ja valitaan paras ryhmä. Jos neliöitä on jäljellä alkutilanteessa vähemmän kuin 250, python ainoastaan pitää yllä pienintä löydettyä tulosta, joka saadaan valittaessa tietty alkuryhmä. Moninpelissä python laskee jokaisen läpikäynnin ko. ryhmän pisteisiin ja lopussa valitsee pienimmän.
- TIT, Harry Karvonen (Java)
Tekoäly koettaa poistaa mahdollisimman paljon palikoita kentältä. Valintaa tehdessään tekoäly simuloi muutamia siirtoja eteenpäin ja katsoo siitä, millä siirroilla saa eniten palikoita pois.
- yritys, Otto Seiskari (C++)
Yksinpelissä tekoäly välttää korkeita torneja ja yrittää saada palikat järjestäytymään ryhmiin, etenkin alarivillä. Moninpelissä valitaan käytännössä satunnainen alue palikoiden numeroiden summan funktiona...