Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Aikaa 4.2. saakka.

Kilpailut: Poimintapeli

Järjestäjä: Metabolix

Vuodenvaihteen 2018–2019 tekoälykilpailussa pelataan peliä, jossa kerätään lukuja ruudukosta, ja suurimman pistemäärän kerännyt voittaa.

Kilpailuaika

Kilpailu alkaa lauantaina 22.12.2018 ja päättyy maanantaina 4.2.2019 klo 20.00.

Pelin kulku

Pelissä on 25×25 ruudun pelilauta. Ruuduissa on lukuja 0–9. Kaikki pelaajat aloittavat pelilaudan keskimmäisestä ruudusta. Alkuruudussa on luku 0. Pelin jokaisella kierroksella tapahtuu kolme asiaa: Kaikki pelaajat siirtyvät samanaikaisesti uuteen ruutuun nykyisen ruudun viereen. Jokainen pelaaja saa sitten pisteitä sen mukaan, mikä luku uudessa ruudussa on. Lopuksi pelaajien olinpaikkoihin tulee luku 0.

Pelaaja voi liikkua ylös, alas, vasemmalle tai oikealle. Laudan reunalta voi liikkua vastakkaiselle reunalle, eli esimerkiksi vasemmanpuoleisimmasta ruudusta vasemmalle liikkumalla päätyy vastaavaan kohtaan laudan oikeassa reunassa. Samassa ruudussa voi olla monta pelaajaa, ja he kaikki saavat ruudusta samat pisteet.

Peli päättyy, kun kaikki positiiviset luvut on kerätty. (Peli päättyy myös, jos 100 vuoron kuluessa ei kerätä yhtään lukua.) Pelin voittaa se, joka kerää luvuista suurimman summan. Jos tekoäly kaatuu tai tekee muun virheen, sen peli päättyy eikä se liiku enää.

Kilpailun kulku

Kilpailussa pelataan satunnaisilla pelilaudoilla. Pelilaudan arvonnassa joka ruudun kohdalla suunnilleen tasaisesti jakautunut satunnaismuuttuja 0 ≤ x < 1 korotetaan kolmanteen potenssiin, kerrotaan 10:llä ja pyöristetään alaspäin.

Jos tekoälyjä on niin vähän, että ne voidaan käynnistää samanaikaisesti, kaikki tekoälyt pelaavat yhtä aikaa. Muuten pelataan jollain tavalla tasapuolisesti pelejä eri tekoälyjen kesken; tarkempi toteutus riippuu osallistujamäärästä. Pelejä pelataan niin monta, että tekoälyjen erot tulevat selvästi esiin.

Jokaisesta pelistä jaetaan kokonaispisteitä tekoälyn sijoituksen mukaan: parhaalle N tekoälyjen määrän mukaan ja viimeiselle 1 piste. Tasatilanteeseen päätyville jaetaan kaikille isoin soveltuva pistemäärä.

Jos tekoälyn peli keskeytyy virheen tai kaatumisen tai muun syyn vuoksi, sen sijoitus määräytyy siihen mennessä kerättyjen pisteiden mukaan. Jos tekoäly ylittää aikarajan, se jätetään pois ottelun pistelaskusta.

Ohjelman toiminta

Tekoäly on käynnissä aina yhden pelin ajan. Se on komentoriviohjelma, joka lukee kilpailuohjelman syötettä (muiden siirtoja) kuten yleensä käyttäjän syötettä (näppäimistöä) ja tulostaa joka kierroksella oman siirtonsa kuten ruudullekin. Ohjelman toiminnasta on esimerkkejä joillakin yleisillä kielillä. Huomio! Useissa kielissä pitää tulostuksen jälkeen kutsua flush-funktiota, kuten esimerkkiohjelmissa tarvittaessa tehdään.

Tekoälylle syötetään ensimmäisellä rivillä pelaajien määrä. Tekoäly voi olettaa, että pelissä on enintään 64 pelaajaa. Tämän jälkeen syötetään pelilaudan sisältö eli 25 riviä, joilla on 25 numeroa ilman välejä. (Luvut ovat tekstille loogisessa järjestyksessä eli ylhäältä alas ja vasemmalta oikealle.) Tekoälyn pitää tulostaa aluksi oma nimensä. Tämän jälkeen joka kierroksella tekoälyn pitää tulostaa oma siirtonsa (yksi kirjain ja rivinvaihto). Pelaaja voi liikkua ylös (w), alas (s), vasemmalle (a) tai oikealle (d). Oman siirron jälkeen tekoälylle syötetään (ilman välejä) muiden pelaajien samanaikaiset siirrot. Pelaajien järjestys siirtorivillä pysyy tietenkin samana, jotta tekoäly pystyy tunnistamaan ne. Pelistä pudonneen pelaajan siirroksi ilmoitetaan 0. Pelin päättyessä tekoälylle syötetään pelkkä viiva (-).

Esimerkiksi seuraavassa syötteessä ilmoitetaan, että pelissä on 3 pelaajaa, ja tämän jälkeen esitetään pelilaudan sisältö.

3
1200010240000000000040000
0034040001200000001210140
0213000000003410002302314
4006100000000003420000010
0000042000094004000000000
0000002000345120000000000
0120000036000060000000000
0003400000000000001300000
0000012000000004340004000
0000000034000123000000124
0000000000123400200000000
0000000000007000000000000
0000000000000800100000000
0123400000000000000000000
0000000000000000004000000
0000013400000000005000000
0000000001340000060000000
0000000200003644000000540
0000060000000004000064000
0000504006000000456500000
0000000400000000000000000
1000000090000002600000000
0203000000000000000000000
0030000000000010000000000
0000000000000000000000000

Tekoäly tulostaa oman siirtonsa, joka on yksi merkki (w, s, a tai d) omalla rivillään.

w

Tekoälylle syötetään kahden muun pelaajan siirrot.

wa

Näiden siirtojen jälkeen tekoälyn oma sijainti on keskeltä yhden ruudun ylös ja sillä on 7 pistettä. Vastustajista yksi on samassa kohdassa, ja silläkin on 7 pistettä. Toinen vastustaja liikkui keskeltä oikealle, ja sillä on 8 pistettä.

Jos vastustaja on pudonnut pelistä, sen siirtona syötetään 0. Pelin päättyessä siirtorivin sijasta ohjelmalle syötetään viiva (-).

Ohjelman rajoitukset

Ohjelma saa käyttää yhdessä ottelussa kokonaisuudessaan enintään 256 megatavua muistia ja 10 sekuntia laskenta-aikaa. Ohjelma ei saa mitata aikaa, vaan ajankäyttö pitää valmiiksi suunnitella. Testikoneessa on 2,3 GHz:n x86-64-prosessori (Intel i3-2350M). Kilpailussa mitataan aikaa, jonka ohjelma itse käyttää, eli jos ohjelma joutuu odottamaan vastustajan siirtoa, kello ei käy.

Tässä kilpailussa on sallittua käyttää satunnaisuutta, mutta on osallistujan vastuulla huomioida, että satunnaisluvut voivat kilpailussa osua tekoälylle epäedullisesti tai eri tavalla kuin omalla koneella.

Ohjelman peli keskeytyy, jos se kaatuu, käyttää yli 30 sekuntia aikaa tai tekee muun merkittävän virheen. Muistirajan ylitys voi kaataa ohjelman. Ohjelma voidaan hylätä, jos vika toistuu monessa ottelussa. Ohjelma voidaan hylätä myös, jos se katsotaan hyvän tavan tai kilpailun hengen vastaiseksi.

Testausohjelma

Peliä ja oman tekoälyn toimintaa voi testata testausohjelmalla. Testausohjelman antamat tiedot ajankäytöstä ja muistista ovat suuntaa-antavia.

Ohjelman nimi

Jokaisella ohjelmalla on oltava nimi, jonka pituus on 3–9 merkkiä ja joka muodostuu pelkästään kirjaimista a–z ja A–Z ja numeroista 0–9 ja sisältää ainakin yhden kirjaimen.

Ohjelmointikieli

Kilpailukoneella on kääntäjiä ja tulkkeja monille ohjelmointikielille. Mikäli kuitenkin sopiva kieli puuttuu listalta, lähetä sähköpostia tai osallistu keskusteluun, niin selvitetään, voiko asialle tehdä jotain.

Tuetut ohjelmointikielet versioineen:

Tekoälyjen tulee pitäytyä kielten perusominaisuuksissa; kääntäjästä, kirjastoista, käyttöjärjestelmästä tai prosessorin tyypistä riippuvaisia ominaisuuksia ei pidä käyttää. Ohjelman on toimittava yllä mainituilla välineillä 64-bittisessä GNU/Linux-käyttöjärjestelmässä.

Käännöksissä käytetään kohtuullisia optimointiasetuksia, esimerkiksi GCC:llä ja FPC:llä valitsinta -O2.

Osallistuminen

Ilmoittautumiseen tarvitaan seuraavat tiedot:

Tiedot julkaistaan kilpailun tulosten yhteydessä. Tiedot voi antaa netissä tai lähettää sähköpostitse osoitteeseen kilpailu@ohjelmointiputka.net. Samaa reittiä voi myös lähettää tekoälystä uusia versioita tai ilmoittaa muista muutoksista tietoihin. Ilmoittautumisen ja muutosten on oltava perillä kilpailuajan puitteissa. Osallistumisesta lähetetään sähköpostitse vahvistus muutaman päivän kuluessa, ja samalla kerrotaan, onko tekoälyssä jo heti ilmennyt jokin merkittävä vika.

Kilpailuun saa halutessaan osallistua myös usealla eri ohjelmalla, kunhan niiden toimintaperiaatteet ovat selvästi erilaiset eikä herää epäilystä, että ne erityisesti edistäisivät toistensa voittoa. Aivan samanlaisia ohjelmia ei hyväksytä kilpailuun muutenkaan.

Tarkennuksia

Kysymyksiä ja palautetta kilpailusta voi lähettää sähköpostitse tai keskusteluun.

Kilpailun logosta kiitos Johannes Tuomelalle!

Tietoa sivustosta