Kirjautuminen

Haku

Tehtävät

Kilpailut: Plokkis: tulokset

Järjestäjä: Metabolix

Vuodenvaihteessa 2017–2018 Ohjelmointiputkassa pidettiin tekoälykilpailu. Aiheena oli neljän pelaajan lautapeli, jossa laudalle piti saada mahtumaan mahdollisimman monta omaa pelilaattaa.

Kilpailuun osallistui 12 ohjelmaa. Tiukan aikarajan ja moninpelin vuoksi kilpailussa ei päässyt kovinkaan pitkälle laskemalla siirtoja eteenpäin, vaan tekoälyissä kukoistivat erilaiset nopeat arviot pelilaudasta.

Jäljempänä tällä sivulla on ohjelmien kuvauksia, ja tekoälyt voi ladata yhtenä pakettina. Tekoälyt on myös käännetty selaimella toimiviksi, ja testaussivulla voi nyt pelata kaikkia tekoälyjä vastaan sekä katsoa tekoälyjen otteluita keskenään.

Osallistujat ja tulokset

Alla ovat kaikki kilpailun osallistujat voittajasta alkaen. Kilpailussa pelattiin 11880 ottelua eli kaikki neljän eri tekoälyn ottelut. Jokaisesta ottelusta jaettiin pisteitä voittajalle 6, toiselle 4, kolmannelle 2 ja viimeiselle 0, ja tasapeliin päätyvien pelaajien osuudet pisteistä jaettiin heille tasan.

sijatekoälykielitekijänimimerkkikeskiaikapisteet
1.ebolaC++Mikko SysikaskiSisuaski1,42 s22358
2.raidC++Lari KoponenL2-K20,03 s20063
3.SuistoC++Teemu KekkonenTegu0,16 s16249
4.TaS4JavaTapani SjömanTapaniS1,27 s15986
5.kuolioC++Risto Paavolaroisto6660,03 s13595
6.SpindelC++Lauri KenttäMetabolix0,02 s11619
7.KiusaC++Lauri KenttäMetabolix0,21 s10781
8.Pl0kk3rJavaTimo SakariTimmmo4,05 s10312
9.kotivaloC++Antti LaaksonenAntti Laaksonen0,01 s6819
10.oskurunerPythonOskari Lehtoosku913,14 s5426
11.rndC++Lari KoponenL2-K20,01 s5008
12.ionPythonAntti VainioAnaatti2,71 s4344

Onnea voittajalle!

Sijat otteluissa

Oheinen taulukko näyttää, mitä sijoituksia tekoälyille tuli otteluissa. Jaetut sijat on merkitty lukuvälinä.

1. sija1.–2.1.–3.2. sija2.–3.2.–4.3. sija3.–4.4. sija
ebola33183752915529
raid256044956292791478
Suisto10584022043776391289
TaS4144141141064461663321
kuolio1143301122048474169704
Spindel81125210318451058118826
Kiusa73631977684997961051
Pl0kk3r36220412799921240127827
kotivalo2245160287412762171544
oskuruner33614721251013262591728
rnd1744531111012083051852
ion295130865512262522069

Laattojen käyttö

Tekoälyt käyttivät eri laattoja seuraavasti:

#
###
#  
## 
 ##
###
####
##
##
###
##
##
ebola78,2 %9,9 %4,6 %1,8 %3,8 %0,5 %0,9 %0,2 %0,0 %
raid74,9 %10,1 %6,1 %6,7 %1,2 %0,6 %0,3 %0,1 %
Suisto61,3 %2,9 %9,5 %22,8 %0,4 %2,1 %0,6 %0,4 %
TaS464,6 %8,6 %21,4 %1,5 %1,6 %0,9 %0,4 %1,0 %
kuolio73,5 %9,7 %8,8 %4,0 %2,0 %1,1 %0,4 %0,6 %
Spindel69,7 %30,3 %
Kiusa67,2 %8,1 %4,5 %2,8 %13,6 %1,3 %0,7 %1,7 %0,1 %
Pl0kk3r55,3 %6,1 %7,9 %0,1 %4,5 %14,0 %8,3 %3,4 %0,4 %
kotivalo100,0 %
oskuruner24,6 %20,1 %12,0 %9,2 %3,8 %13,7 %9,7 %4,5 %2,5 %
rnd26,6 %16,0 %13,5 %8,8 %6,8 %10,0 %7,7 %9,3 %1,2 %
ion62,7 %16,1 %4,4 %0,7 %6,6 %4,1 %5,4 %
yhteensä66,8 %8,4 %7,7 %5,8 %3,9 %3,3 %2,1 %1,5 %0,4 %

Minkään tietyn laatan käyttö ei ole selvästi taannut sen paremmin hyvää kuin huonoakaan tulosta kilpailussa.

Ohjelmat

Ohjelmien selainversioita voi testata testaussivulla, ja tekoälyjen lähdekoodit voi ladata yhtenä pakettina. Alla ovat tekijöiden omat kuvaukset ohjelmistaan.

ebola
Mikko Sysikaski
Sisuaski
Tekoäly käy läpi mahdolliset siirrot ja valitsee sen, joka päätyy lupaavimman näköiseen tilaan. Pelitiloja arvioidaan strategiapeleistä tutulla influence map -tekniikalla. Käytännössä lasketaan jokaiselle pelaajalle etäisyydet omista ruuduista yhä pelattaviin ruutuihin, ja etäisyyksien perusteella arvioidaan, montako ruutua on omassa hallinnassa.
raid
Lari Koponen
L2-K2

Tekoäly etsii kullakin vuorolla sen siirron, joka vie sen lähimmäs lähimpänä olevaa vastustajaansa. Päästyään ns. iholle, tekoäly pyrkii estämään vastustajansa liikettä peittämällä ne ruudut, mihin vastustaja pystyisi vähimmän vuoromäärän kuluessa pelaamaan. (Käytännössä siis kolme erillistä leveyshakua, joilla saadaan likimäärin ratkaistua kuvatut etäisyydet.)

Koska ylläolevan kuvauksen mukaisia siirtoja on useita, valitaan niistä kussakin vaiheessa yksi muutamalla heurestiikalla: tekoäly pyrkii hallitsemaan isointa mahdollista yhtenäistä aluetta ja pelaa aina laudan keskipistettä lähimmän siirron tasa-arvoisista siirroista (yksi leveyshaku lisää).

Tekoäly häviää selvästi ihmiselle, etenkin sen jälkeen kun ihminen keksii sen yhden heikkouden... Aggressiivisuuden maksimointi johtaa sopivissa oloissa huonoihin vaihtokauppoihin koko pelin mittakaavassa. Toisaalta, kyllä sille tuli myös alkuun hävittyäkin, koska tekoäly taitaa olla aika lähellä ei-eteenpäin-katsovien "tyhmien älyjen" maksimia.

Suisto
Teemu Kekkonen
Tegu
Hölmö pikkuäly, joka haarautuu kuin jokisuisto ikään. Yrittää luoda joka vuorolla mahdollisimman paljon uusia avoimia kulmittaisruutuja. Siten se tuhlaa välillä omia paikkojaan turhan suurilla laatoilla. Antaa toisaalta pisteitä myös sille, että laatta tukkii kilpailijan avoimen ruudun. Vuoroja ei lasketa eteenpäin. Tulos tuntuu riippuvan turhan paljon laattojen tutkimisjärjestyksestä ja aloitusnurkasta.
TaS4
Tapani Sjöman
TapaniS
Ruudukko pisteytetään, etsitään aina paras pistesaalis ja laitetaan oma pelimerkki siihen. Pisteytys on optimoitu Kiusa-ohjelmaa vastaan.
kuolio
Risto Paavola
roisto666
Ounastelee vastustajan siirtoja eteenpäin 10 siirtoa ja pyrkii tekemään mahdollisimman hyvän siirron vallitsevissa rajoissa. Lisäksi muita painotuksia, esim. vastustajan ahdistelu ja keskimmäisten ruutujen suosiminen.
Spindel
Lauri Kenttä
Metabolix
Spindel jakaa joka ruudusta näkyvän alueen kahdeksaan sektoriin, joista se etsii kustakin lähimmän täyden ruudun. Jos sektorin lähin ruutu on oma, siitä ei ole uhkaa, mutta muiden ruuduista lasketaan uhka etäisyyden mukaan. Sektorien uhka-arviot yhdistetään, ja oma laatta laitetaan ruutuun, jossa uhka on suurin. Tekoäly käyttää vain T-laattoja ja yhden ruudun paloja, ja laatan asento valitaan niin, että se yltää mahdollisimman hyvin uhka-arvion mukaiseen suuntaan.
Kiusa
Lauri Kenttä
Metabolix
Tekoäly pyrkii kohti ruutua, joka on pelivuoroina mitattuna mahdollisimman lähellä vastustajaa. Monesta vaihtoehdosta valitaan se, joka on myös lähimpänä omia ruutuja. Kun ei voi enää edetä vastustajaa kohti, oma alue täytetään tiiviisti pienillä laatoilla.
Pl0kk3r
Timo Sakari
Timmmo
Pelin alussa äly pyrkii pelaamaan 3-4 ruudun kokoisia laattoja pelilaudan keskustaa kohti. Tämän jälkeen äly sijoittaa 2-3 ruudun kokoisia laattoja laudalle, sen mukaan mikä siirto tuottaa älylle eniten jatkomahdollisuuksia. Vastustajien siirtoja ei varsinaisesti huomioida mitenkään. Kilpailussa menestymiseen vaadittaisiin suljettujen alueiden muodotus ja hahmottaminen, se jäi nyt kuitenkin ajanpuutteen takia tekemättä, joten en usko että äly sijoittuu kilpailun kärkisijoille.
kotivalo
Antti Laaksonen
Antti Laaksonen
Tekoäly sijoittaa aina 1x1-kokoisia laattoja ja valitsee uuden laatan sijainnin niin, että se on mahdollisimman kaukana alkupisteestä.
oskuruner
Oskari Lehto
osku91
Tekoäly on hyvin yksinkertainen. Jokaisella siirrollaan se harkitsee jokaista mahdollista siirtovaihtoehtoa ja valitsee niistä satunnaisen. Satunnaislukugeneraattori alustetaan toki aina samalla arvolla sääntöjen noudattamiseksi. Nimi oli alunperin oskurunner, mutta lyhentyi hiukan sääntöjen asettaman rajoituksen takia.
rnd
Lari Koponen
L2-K2

Ns. viihteellinen vastustaja. Ei älykäs. Ennen kuin muutettiin kilpailun sääntöjen mukaisesti käyttämään kiinteää satunnaislukugeneraattoria, toimi myös hyvänä tapana luoda erikoistapauksia...

Valitsee tasajakautuneen pseudosatunnaisesti seuraavan siirron kaikkien mahdollisten laillisten siirtojen joukosta. Häviää selvästi varsinaisille älyille, koska ei muun muassa pelaa missään määrin optimoitua loppupeliä, mutta näyttäisi voittavan esimerkkitekoälyn. Voisi myös ehkä olla pohjana perinteisemmälle syvyyshaulle.

ion
Antti Vainio
Anaatti
Tekoäly pisteyttää kaikki mahdolliset siirrot ja valitsee parhaimmat pisteet saanneen siirron. Tekoäly suosii laudan keskialuetta, yrittää sijoittaa paloja kauas omista paloista sekä lähelle vastustajien paloja ja yrittää suosia pienempiä paloja.

Lopuksi

Kiitos kaikille osallistujille hyvästä kilpailusta, ja tervetuloa mukaan taas ensi kerralla.

Tietoa sivustosta