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.
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.
sija | tekoäly | kieli | tekijä | nimimerkki | keskiaika | pisteet |
---|---|---|---|---|---|---|
1. | ebola | C++ | Mikko Sysikaski | Sisuaski | 1,42 s | 22358 |
2. | raid | C++ | Lari Koponen | L2-K2 | 0,03 s | 20063 |
3. | Suisto | C++ | Teemu Kekkonen | Tegu | 0,16 s | 16249 |
4. | TaS4 | Java | Tapani Sjöman | TapaniS | 1,27 s | 15986 |
5. | kuolio | C++ | Risto Paavola | roisto666 | 0,03 s | 13595 |
6. | Spindel | C++ | Lauri Kenttä | Metabolix | 0,02 s | 11619 |
7. | Kiusa | C++ | Lauri Kenttä | Metabolix | 0,21 s | 10781 |
8. | Pl0kk3r | Java | Timo Sakari | Timmmo | 4,05 s | 10312 |
9. | kotivalo | C++ | Antti Laaksonen | Antti Laaksonen | 0,01 s | 6819 |
10. | oskuruner | Python | Oskari Lehto | osku91 | 3,14 s | 5426 |
11. | rnd | C++ | Lari Koponen | L2-K2 | 0,01 s | 5008 |
12. | ion | Python | Antti Vainio | Anaatti | 2,71 s | 4344 |
Onnea voittajalle!
Oheinen taulukko näyttää, mitä sijoituksia tekoälyille tuli otteluissa. Jaetut sijat on merkitty lukuvälinä.
1. sija | 1.–2. | 1.–3. | 2. sija | 2.–3. | 2.–4. | 3. sija | 3.–4. | 4. sija | |
---|---|---|---|---|---|---|---|---|---|
ebola | 3318 | 37 | 529 | 15 | 52 | 9 | |||
raid | 2560 | 44 | 956 | 29 | 279 | 14 | 78 | ||
Suisto | 1058 | 40 | 2 | 2043 | 77 | 639 | 12 | 89 | |
TaS4 | 1441 | 41 | 1410 | 64 | 4 | 616 | 63 | 321 | |
kuolio | 1143 | 30 | 1 | 1220 | 48 | 4 | 741 | 69 | 704 |
Spindel | 811 | 25 | 2 | 1031 | 84 | 5 | 1058 | 118 | 826 |
Kiusa | 736 | 31 | 977 | 68 | 4 | 997 | 96 | 1051 | |
Pl0kk3r | 362 | 20 | 4 | 1279 | 99 | 2 | 1240 | 127 | 827 |
kotivalo | 224 | 5 | 1 | 602 | 87 | 4 | 1276 | 217 | 1544 |
oskuruner | 33 | 6 | 1 | 472 | 125 | 10 | 1326 | 259 | 1728 |
rnd | 17 | 4 | 453 | 111 | 10 | 1208 | 305 | 1852 | |
ion | 29 | 5 | 1 | 308 | 65 | 5 | 1226 | 252 | 2069 |
Tekoälyt käyttivät eri laattoja seuraavasti:
# | ### # | ## ## | ### # | #### | ## # | ## | ### | ## ## | |
---|---|---|---|---|---|---|---|---|---|
ebola | 78,2 % | 9,9 % | 4,6 % | 1,8 % | 3,8 % | 0,5 % | 0,9 % | 0,2 % | 0,0 % |
raid | 74,9 % | 10,1 % | 6,1 % | 6,7 % | 1,2 % | 0,6 % | 0,3 % | 0,1 % | |
Suisto | 61,3 % | 2,9 % | 9,5 % | 22,8 % | 0,4 % | 2,1 % | 0,6 % | 0,4 % | |
TaS4 | 64,6 % | 8,6 % | 21,4 % | 1,5 % | 1,6 % | 0,9 % | 0,4 % | 1,0 % | |
kuolio | 73,5 % | 9,7 % | 8,8 % | 4,0 % | 2,0 % | 1,1 % | 0,4 % | 0,6 % | |
Spindel | 69,7 % | 30,3 % | |||||||
Kiusa | 67,2 % | 8,1 % | 4,5 % | 2,8 % | 13,6 % | 1,3 % | 0,7 % | 1,7 % | 0,1 % |
Pl0kk3r | 55,3 % | 6,1 % | 7,9 % | 0,1 % | 4,5 % | 14,0 % | 8,3 % | 3,4 % | 0,4 % |
kotivalo | 100,0 % | ||||||||
oskuruner | 24,6 % | 20,1 % | 12,0 % | 9,2 % | 3,8 % | 13,7 % | 9,7 % | 4,5 % | 2,5 % |
rnd | 26,6 % | 16,0 % | 13,5 % | 8,8 % | 6,8 % | 10,0 % | 7,7 % | 9,3 % | 1,2 % |
ion | 62,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.
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. |
Kiitos kaikille osallistujille hyvästä kilpailusta, ja tervetuloa mukaan taas ensi kerralla.