Järjestäjä: Metabolix
Kesän 2018 tekoälykilpailussa pelataan Sika-korttipeliä, jossa pitää päästä korteistaan eroon.
Kilpailu alkaa perjantaina 1.6.2018 ja päättyy sunnuntaina 8.7.2018 klo 20.00.
Sikaa voi pelata eri pelaajamäärillä ja erilaisilla korttipakoilla. Kilpailussa pelissä on kolme pelaajaa ja tavallinen 52 pelikortin pakka. Pelin alussa kortit ovat sekoitetussa umpipakassa eli kuvapuoli alaspäin. Päällimmäinen kortti käännetään kuvapuoli ylöspäin avopakan pohjaksi. Pelivuoro kiertää järjestyksessä.
Ensin pelaajan pitää lyödä kortti, joka on samaa maata kuin avopakan päällimmäinen kortti. Jos pelaajalla ei ole kädessään tällaista korttia, hän nostaa umpipakasta kortteja, kunnes saa sopivan kortin. Jos umpipakka loppuu, pelaaja joutuu nostamaan avopakasta päällimmäisen kortin sekä sitä seuraavia kortteja niin kauan, kuin ne ovat eri maata kuin avopakasta päällimmäisenä nostettu kortti. Avopakasta nostamisen jälkeen pelaaja ei lyö kortteja, vaan vuoro siirtyy seuraavalle pelaajalle.
Jos pelaaja saa lyötyä ensimmäisen kortin, hän saa seuraavaksi lyödä minkä tahansa muun kortin kädestään. Jos pelaajalla ei ole enää kortteja, hän nostaa kortin umpipakasta ja lyö sen. Jos umpipakka loppuu ja pelaajalla ei ole enää kortteja, hän voittaa.
Jos avopakka on vuoron alkaessa tyhjä, pelaaja lyö vain yhden vapaavalintaisen kortin kädestään.
Jos pelaajalla ei ole yhtään korttia ja umpipakka on loppunut ennen hänen vuoroaan, hän voittaa. Tyhjään käteen ei siis tarvitse nostaa kortteja avopakasta.
Pelin häviää se, jolla on viimeisenä kortteja kädessään vuoron vaihtuessa. Pelin häviää myös, jos 333 kierroksen jälkeen ei ole päässyt korteistaan eroon. Jos lyö sääntöjen vastaisen kortin tai keskeyttää pelin, häviää myös, ja silloin muut pelaajat yhdessä voittavat korteistaan riippumatta.
Kilpailussa pelataan kaikki kolmen tekoälyn ottelut ainakin kerran, ajan salliessa useampaan kertaan. Jokaiseen otteluun arvotaan uusi korttipakka. Jokaisessa pelissä voittajat saavat kukin yhden pisteen ja häviäjät nolla pistettä. Jos tekoäly tekee virheen tai ylittää aikarajan, se ei saa ottelusta pisteitä. Otteluiden pisteistä lasketaan kokonaispisteet, joiden perusteella kilpailun tulokset suoraan määräytyvät.
Tekoäly on käynnissä aina yhden pelin ajan. Se on komentoriviohjelma, joka lukee kilpailuohjelman syötettä (nostettavia ja muiden lyömiä kortteja) kuten yleensä käyttäjän syötettä (näppäimistöä) ja tulostaa joka kierroksella oman siirtonsa kuten ruudullekin. Jokainen ohjelmalle annettava syöte on omalla rivillään. 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 kolme riviä: pelaajien määrä (kilpailussa 3), oma pelinumero (1–3) ja pelikorttien määrä (52). Tämän jälkeen ohjelmalle syötetään umpipakasta pöydälle ensiksi käännettävä kortti (esimerkiksi pata-10).
Esimerkiksi seuraavassa syötteessä ilmoitetaan, että pelissä on 3 pelaajaa, joista ohjelma on pelaaja 1, ja pakassa on 52 korttia, joista ensimmäiseksi avopakkaan käännetään pata-10.
3 1 52 pata-10
Pelaajan omalla vuorolla ohjelmalle syötetään nostettavien korttien kokonaismäärä ja sen jälkeen umpipakasta nostettavat kortit. Korttien määrässä huomioidaan molemmat lyötävät kortit, eli esimerkiksi ensimmäisellä pelivuorolla joutuu aina nostamaan vähintään 2 korttia: yhden, joka on oikeaa maata, ja yhden minkä tahansa kortin. Ohjelman täytyy itse pitää kirjaa umpipakan korttien määrästä ja avopakan korteista, jotta se tietää, milloin umpipakka on tyhjä ja kortit pitää nostaa avopakasta. Avopakan kortteja ohjelmalle ei syötetä, koska ohjelma tietää ne pelin kulun vuoksi ennestään. Esimerkiksi seuraavassa syötteessä ohjelmalle ilmoitetaan, että sen pitää nostaa 3 korttia, ja kun kortit nostetaan umpipakasta, ohjelmalle ilmoitetaan myös, mitkä kortit ovat.
3 risti-7 hertta-1 pata-13
Tämän jälkeen ohjelman pitää tulostaa lyömänsä kortit omille riveilleen. (Jos pelaaja nosti kortteja avopakasta, pelaaja ei saa lyödä kortteja. Jos avopakka on tyhjä tai jos pelaajalla on kädessään enää yksi kortti, pelaaja lyö vain yhden kortin. Muuten pelaaja lyö kaksi korttia.) Esimerkiksi seuraavalla tulosteella ohjelma lyö kortit pata-13 ja risti-7.
pata-13 risti-7
Vastustajan vuorolla ohjelmalle syötetään nostettavien korttien määrä. Ohjelman pitää jälleen itse tietää, milloin umpipakka loppuu. Jos vastustaja nostaa kortteja avopakasta (eli nostettava määrä on suurempi kuin umpipakassa jäljellä olevien korttien määrä), vastustajan vuoro päättyy tähän. Muuten ohjelmalle syötetään vielä kaksi vastustajan lyömää korttia: ensiksi avopakan kanssa samaa maata oleva kortti ja sitten muu kortti. Jos kortti jää lyömättä, sen tilalla syötetään viiva (-). Kortti voi jäädä lyömättä esimerkiksi siksi, että tekoäly tekee virheen tai sen kortit loppuvat.
Esimerkiksi tässä ohjelmalle ilmoitetaan, että vastustaja nostaa 8 korttia ja lyö kortit risti-8 ja ruutu-11.
8 risti-8 ruutu-11
Kun vuoro osuu pelaajalle, joka on jo pudonnut pelistä (joko virheen tai voittamisen takia), ohjelmalle syötetään nostettavien korttien määrän sijaan luku -2.
-2
Kun tekoäly voittaa tai häviää, sen tulee sammua. Tässä tilanteessa ohjelmalle syötetään nostettavien korttien määrän sijaan luku -1.
-1
Ohjelma saa käyttää yhdessä ottelussa kokonaisuudessaan enintään 512 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.
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.
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. Aikavälillä 23.6.–1.7.2018 ei oteta vastaan ilmoittautumisia!
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.