Järjestäjä: Metabolix
Vuodenvaihteessa 2019–2020 Ohjelmointiputkassa pidettiin tekoälykilpailu kuurupiilon leikkimisestä.
Kilpailuun osallistui 10 ohjelmaa. Aihe osoittautui melko vaikeaksi. Piiloutumisessa nähdään paljon suuremmat piste-erot kuin etsimisessä, mutta muuten on vaikea sanoa, mitkä seikat tekoälyissä johtivat menestykseen.
Jäljempänä tällä sivulla on ohjelmien kuvauksia, ja tekoälyt voi ladata yhtenä pakettina.
Alla ovat kaikki kilpailun osallistujat voittajasta alkaen. Kisassa pelattiin yhteensä 5040 peliä: käytiin läpi kaikki kolmen etsijän yhdistelmät kaikissa järjestyksissä ja seitsemän piiloutujan seitsemän eri järjestystä. Pelissä piiloutuja sai joka kierroksella 3 pistettä, kunnes putosi pelistä, ja etsijä sai joka kierroksella miinuspisteitä sen verran, kuin piiloutujia oli vielä mukana. Lisäksi aikarajan ylityksestä kertyi sakkoa.
sija | tekoäly | kieli | tekijä | nimimerkki | pisteet |
---|---|---|---|---|---|
1 | Rustaus | Rust | Antti Vainio | Anaatti | 5625128 |
2 | lurkki | Ruby | Jyri Simonen | riekkuja | 5044743 |
3 | TaSapaino | Java | Tapani Sjöman | TapaniS | 3742150 |
4 | Jorolainen | C | Jari Saari | jsbasic | 2248292 |
5 | SpinMagnet | Python | Joonas Tapio | SeriousJoke | -1286673 |
6 | Tuntematon1 | Rust | Antti Vainio | Anaatti | -2356862 |
7 | Maalitaulu | JavaScript | Lauri Kenttä | Metabolix | -2392897 |
8 | Reisille | Python | Tegu | -4194025 | |
9 | Suikero | JavaScript | Lauri Kenttä | Metabolix | -4350419 |
10 | viritys | C++ | Otto Seiskari | os | -11312517 |
Onnea voittajalle!
Alla ovat ohjelmien pisteet eri osa-alueilta ja sijoitukset pelkän piiloutumisen ja etsimisen osalta. Nähdään, että kärkijoukossa ovat nimenomaan parhaat piiloutujat. Voittaja on menestynyt parhaiten molemmissa osioissa. Häviäjän kohtaloksi koituivat sakkopisteet ajankäytöstä.
sija | tekoäly | # | piilossa | # | etsijänä | sakko |
---|---|---|---|---|---|---|
1 | Rustaus | 1 | 11379684 | 1 | -5754556 | |
2 | lurkki | 2 | 11199231 | 3 | -6154488 | |
3 | TaSapaino | 3 | 10023378 | 4 | -6281228 | |
4 | Jorolainen | 4 | 8208219 | 2 | -5959927 | |
5 | SpinMagnet | 5 | 6939960 | 10 | -8226633 | |
6 | Tuntematon1 | 8 | 4198809 | 5 | -6555671 | |
7 | Maalitaulu | 6 | 5756571 | 9 | -8149468 | |
8 | Reisille | 10 | 2364834 | 6 | -6558859 | |
9 | Suikero | 9 | 3289647 | 7 | -7640066 | |
10 | viritys | 7 | 5729502 | 8 | -7808939 | -9233080 |
Ohjelmien tulokset vaihtelivat melko paljon. Seuraavassa taulukossa esitetään, paljonko pisteitä tekoälyt saivat piiloutumisesta suhteessa kunkin pelin parhaan ohjelman pisteisiin. Taulukossa on keskiarvo ja kvartaalit.
sija | tekoäly | keskiarvo | MIN | Q1 | Q2 | Q3 | MAX |
---|---|---|---|---|---|---|---|
1 | Rustaus | 71,3 % | 3,2 % | 46,3 % | 78,5 % | 100,0 % | 100,0 % |
2 | lurkki | 69,4 % | 3,2 % | 44,4 % | 72,8 % | 100,0 % | 100,0 % |
3 | TaSapaino | 65,2 % | 2,6 % | 40,5 % | 64,7 % | 100,0 % | 100,0 % |
4 | Jorolainen | 53,3 % | 1,6 % | 26,9 % | 48,9 % | 79,9 % | 100,0 % |
5 | SpinMagnet | 54,0 % | 5,1 % | 30,2 % | 49,3 % | 76,2 % | 100,0 % |
6 | Tuntematon1 | 31,7 % | 0,6 % | 12,7 % | 22,3 % | 44,5 % | 100,0 % |
7 | Maalitaulu | 43,1 % | 3,6 % | 23,4 % | 35,4 % | 56,3 % | 100,0 % |
8 | Reisille | 18,3 % | 0,2 % | 5,5 % | 11,1 % | 24,5 % | 100,0 % |
9 | Suikero | 24,7 % | 0,1 % | 8,5 % | 15,4 % | 32,4 % | 100,0 % |
10 | viritys | 44,5 % | 0,2 % | 22,9 % | 39,0 % | 61,1 % | 100,0 % |
Nähdään, että kolme parasta tekoälyä ovat kukin saavuttaneet huippupisteet ainakin neljäsosassa peleistään – voitto lienee aivan ansaittu. Jokainen tekoäly on silti voittanut ainakin yhden pelin, onneksi olkoon!
Tekoälyjen lähdekoodit voi ladata yhtenä pakettina. Alla ovat tekijöiden omat kuvaukset ohjelmistaan.
Rustaus Anaatti | Pakeneminen tapahtuu pääasiassa kiertäen kentän ulkoreunaa poispäin etsijöistä, mutta tekoäly voi myös hakeutua kentän keskelle. Lisäksi paetessa tekoäly pyrkii aina kiertämään lähellä olevia esteitä ympäri pyrkien esteen taakse, jotta näköyhteys etsijöihin katkeaisi. Etsijänä tekoäly pääasiassa menee suoraan kohti lähintä pakenijaa mutta yrittää olla vaihtamatta kohteita liian useasti. Lisäksi tämä tekoäly yrittää vielä hämätä muita pelaajia tulostamalla vähän satunnaistettuja kohteita. Tekoäly pystyy myös arvioimaan piilossa olevien pelaajien sijaintia niiden viimeksi nähdyn kohteen perusteella. |
lurkki riekkuja | Piiloutuessaan valitsee viidestä pinta-alaltaan suurimmasta esteestä kentän keskipisteeseen nähden etäisimmän. Etsijän nähdessään lähtee kiertämään esteen ympäri karkuun eikä missään vaiheessa etsi uutta piilopaikkaa. Etsiessään lähtee kiertämään kenttää ennalta määrättyä reittiä pitkin. Yhdenkin etsijän havaitessa piiloutujan suuntaa suoraan piiloutujaa kohden. |
TaSapaino TapaniS | Piiloutuja: Alkupiilo satunnaisesti alueelta, jossa eniten piiloja. Jos nähdään, ensin saman piilon toiselle puolelle ja sitten kauemmas. Etsijä: Samalla logiikalla alkusuunta. Jos nähdään piiloutuja, lähdetään perään. Jos piiloutuja katoaa näkyvistä, suunnataan hänen viimeisimpään kohteeseensa. Jos toinen etsijä on lähellä menossa samaan suuntaan, vaihdetaan omaa suuntaa toiseksi. |
Jorolainen jsbasic | Ohjelma perustuu lähes kokonaan vektorilaskentaan, lukion pitkän matematiikan kursilla opittuihin yhteenlaskuun, kertomiseen luvulla ja pituuden laskemiseen. Näiden avulla muodostetaan erilaisia sääntöjä: Etsijä yrittää saartaa piiloutujat reunoille ja samalla kohti muita etsijöitä. Piiloutujana ohjelma aloittaa siltä puolelta estettä, jossa on eniten muita esteitä peittämässä. Jäätyään kiinni piiloutuja yrittää vaihtaa eri puolelle estettä tai paeta alueen keskelle. |
SpinMagnet SeriousJoke | Tämä tekoäly koostuu kahdesta osasta. Tekoälyä inspiroi magneettien toiminta, ja sen on jokseenkin sidonnainen kentän muotoon ja ongelmanasetteluun. Etsintä: Aluetta kierretään ympäriinsä viiden eri pisteen kautta, jotka kattavat koko kentän melko hyvin. Pisteiden välillä liikutaan satunnaisesti, mutta huomioon otetaan myös muiden etsijöiden sijanti niin, että heitä vältetään. Tämä lisäksi, kun tehdään havainto piiloilijasta, hänen tietonsa otetaan muistiin ja häntä lähdetään jahtamaan. Piiloilu: Pelin alkaessa mennään piilon kauimman ympyrän taakse optimaaliseen paikkaan keskustaan nähden, jossa pysytään paikallaan, kunnes joku löytää. Löytämiseen jälkeen aletaan kiertää ympyrää vaihtaen suuntaa tarvittaessa. Suunnanvaihtomekanismia voisi parantaa nykyisestä. |
Tuntematon1 Anaatti | Tämä on Rustauksen aikaisempi versio, jossa ei ole vielä kaikkia lopullisia ominaisuuksia. Lisäksi tekoäly on hyvin buginen, erityisesti pakenemisen osalta, minkä vuoksi tekoäly toimii varsin järjettömästi tuoden kaaosta pelikentälle. |
Maalitaulu Metabolix | Maalitaulu numero 1 etsii kiertämällä keskustan ympäri etäisyydellä 1000 eli reunoja pitkin. Numerolla 2 ja 3 se pysyy etäisyydellä 700 tai 300 keskustasta ja pyrkii samaan suuntakulmaan kuin etsijä numero 1, joten kolmena etsijänä se olisi melko tehokas haravointiketju. Piiloutuessaan se kiertää keskustaa etäisyydellä 900, ja etsijöitä kohdatessaan se valitsee tietyllä logiikalla suunnan, jossa näyttää olevan suurin rako etsijöiden ketjussa. Esteitä se ei huomioi. |
Reisille Tegu | Nimensä mukaiseseti täysin reisille mennyt yritelmä, josta piti viime minuuteilla poistaa toimimatonta piiloutumiskoodia. Vaeltelee lähinnä satunnaisesti ympäriinsä, paitsi jos sattuu näkemään jonkun etsijänä. Yrittää etsijänä jopa seurata jahdattavan kohdetta hieman ennakoiden. |
Suikero Metabolix | Piiloutuessaan Suikero valitsee pelilaudalta pisimmän esteketjun, jossa peräkkäisten esteiden välimatka on tarpeeksi pieni. Suikero kiemurtelee valitsemaansa ketjua pitkin kiertäen esteet vuoroin vasemmalta, vuoroin oikealta. Etsiessään Suikero järjestää esteet muutamaan sektoriin ja kiertää järjestyksessä vuorollaan kunkin sektorin esteet ja luottaa siihen, että joku muu lähtee varsinaisesti ajamaan takaa havaittuja piiloutujia. |
viritys os | Yrittää mallintaa todennäköisyyksiä sille, missä muut pelaajat ovat, ja käyttää niitä navigointiin. |
Kiitos kaikille osallistujille hyvästä kilpailusta, ja tervetuloa mukaan taas ensi kerralla.