Järjestäjä: Metabolix
Vuodenvaihteen 2017–2018 tekoälykilpailussa pelataan lautapeliä, jossa pitää saada mahtumaan laudalle mahdollisimman monta omaa pelilaattaa.
Kilpailu alkaa lauantaina 23.12.2017 ja päättyy sunnuntaina 28.1.2018 klo 20.00.
Pelissä on neljä pelaajaa ja 25×25 ruudun pelilauta. Pelivuoro kiertää järjestyksessä. Vuorollaan pelaaja asettaa pelilaudalle 1–4 ruudusta muodostuvan pelilaatan. Laatta voi olla minkä muotoinen tahansa, kunhan se on yhtenäinen eli sen ruudut ovat sivuista kiinni toisissaan. Ensimmäinen oma laatta täytyy asettaa johonkin pelilaudan nurkkaan. Seuraavat laatat tulee asettaa siten, että laatan kulma koskettaa aiempaa omaa laattaa mutta laatan mikään sivu ei kosketa kenenkään aiempien laattojen sivuja. Myöskään aiemman laatan päälle ei saa laittaa uutta laattaa. Tavoitteena on saada laudalle enemmän laattoja kuin muut; jokaisesta laatasta saa yhden pisteen riippumatta laatan koosta. Jos pelaaja ei voi asettaa pelilaattaa sääntöjen mukaan, hän putoaa pelistä. Peli päättyy, kun kukaan ei voi asettaa laattoja.
Kilpailussa pelataan neljän pelaajan otteluita. Pelin voittaja saa ottelusta 6 pistettä, toinen 4 pistettä, kolmas 2 pistettä ja neljäs 0 pistettä. Tasatilanteessa pelaajien pisteet jaetaan heille tasan: esimerkiksi jaetulla 1–2 sijalla jaetaan molemmille 5 pistettä. Jos tekoäly ylittää aikarajan, se ei saa ottelusta pisteitä.
Otteluiden pisteistä lasketaan kokonaispisteet. Tarkempi turnausjärjestely päätetään osallistujamäärän mukaan. Luultavasti ensiksi lajitellaan tekoälyt sopivien otteluiden perusteella tasonsa mukaisiin lohkoihin ja sitten ratkaistaan lohkojen sisäiset järjestykset pelaamalla lohkon kaikki otteluvaihtoehdot.
Tekoäly on käynnissä aina yhden ottelun ajan. Se on komentoriviohjelma, joka lukee kilpailuohjelman syötettä (vastustajien 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.
Kun ohjelma käynnistetään, sen pitää tulostaa rivi, jolla on sen oma nimi. Ohjelmalle syötetään aluksi rivi, jolla on kolme lukua: pelilaudan leveys (kilpailussa 25), pelaajien määrä (kilpailussa 4) ja oma pelinumero (1–4).
Esimerkiksi seuraavalla rivillä pelilaudan leveys on 25, pelaajien määrä on 4 ja pelaajan oma numero on 2:
25 4 2
Tämän jälkeen pelivuorot kulkevat numerojärjestyksessä (1, 2, 3, 4, 1 jne.). Omalla vuorollaan ohjelma tulostaa rivin, jolla on sen siirto, ja vastustajan vuorolla ohjelma lukee samanlaisen rivin. Siirtorivi muodostuu välilyönnein erotelluista luvuista. Alussa on luku, joka kertoo laatan ruutujen määrän. Tämän jälkeen tulevat ruutujen koordinaatit. Koordinaatisto alkaa ykkösestä. Ruudut voivat olla missä tahansa järjestyksessä.
Esimerkiksi seuraavalla rivillä ruutujen määrä on 4 ja ruutujen koordinaatit ovat (7,5) ja (8,5) ja (8,6) ja (8,4):
4 7 5 8 5 8 6 8 4
Ruutujen määrä voi olla myös 0, jos pelaaja ei voi enää asettaa laattaa vuorollaan tai jos pelaajan tekoäly on pudonnut pelistä.
Kun tekoälyllä ei ole enää sopivaa siirtoa, sen tulee sammua.
Kilpailussa peli päättyy vasta, kun kaikki pelaajat ovat lopettaneet, mutta testausohjelmassa pelin voi keskeyttää aiemmin. Pelin päättyessä ohjelmalle syötetään luku -1.
Ohjelma saa käyttää yhdessä ottelussa kokonaisuudessaan enintään 512 megatavua muistia ja 30 sekuntia laskenta-aikaa. Ohjelma ei saa mitata aikaa, vaan ajankäyttö pitää valmiiksi suunnitella. Testikoneessa on 1,7 GHz:n x86-64-prosessori (AMD E2-1800). Kilpailussa mitataan aikaa, jonka ohjelma itse käyttää, eli jos ohjelma joutuu odottamaan vastustajan siirtoa, kello ei käy.
Ohjelman pitää toimia joka ajokerralla samalla tavalla. Satunnaislukuja ei saa käyttää. Kellonaika ja tietokoneen nopeus eivät saa vaikuttaa tekoälyn valintoihin. Toimintaan vaikuttaa siis pelkästään ohjelmalle annettava syöte.
Ohjelman peli keskeytyy, jos se kaatuu, käyttää yli 90 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.
Peliä ja oman tekoälyn toimintaa voi testata testausohjelmalla. Testausohjelman antamat tiedot ajankäytöstä ja muistista ovat suuntaa-antavia.
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.
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.
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.
Kysymyksiä ja palautetta kilpailusta voi lähettää sähköpostitse tai keskusteluun.