Kirjautuminen

Haku

Tehtävät

Kilpailut: Kivi, sakset, paperi

Järjestäjä: Metabolix

Vanhaa peliä kivi, sakset, paperi pidetään usein yhtä satunnaisena kuin nopanheittoa. Todellisuudessa peli on kuitenkin psykologinen mittelö — tai logiikan ja epälogiikan taisto.

Kilpailuaika

Kilpailu alkaa lauantaina 13.6.2009 ja päättyy maanantaina 13.7.2009 klo 13.37, ohjelmia saa lähettää viimeisen minuutin loppuun saakka. Kilpailun puolivälissä ne älyt, jotka on lähetetty viimeistään 28.6.2009, pelaavat vastakkain ja pelien kulku julkaistaan. Tämän jälkeen osallistujat voivat vielä parannella tekoälyjään ennen lopullista kilpailua. Lopulliseen kilpailuun saa silti osallistua, vaikkei olisikaan osallistunut välikierrokselle.

(Nyt kilpailu on jo päättynyt ja tulokset on julkaistu.)

Säännöt

Tekoälyt pelaavat aina yksi yhtä vastaan. Ottelun pituus on 1000 kierrosta. Joka kierroksella kumpikin tekoäly valitsee kiven, sakset tai paperin (K, S tai P). Kivi voittaa sakset, sakset voittavat paperin ja paperi voittaa kiven. Jos valinta on sama, kierros on tasapeli eikä pisteitä jaeta; muussa tapauksessa voittaja saa pisteen ja häviäjä menettää pisteen.

Ohjelman toiminta

Tekoäly on käynnissä koko 1000 kierroksen ottelun ajan. Se on komentoriviohjelma, joka lukee kilpailuohjelman syötettä (vastustajan siirtoja) samalla tavalla kuin käyttäjän syötettä ja tulostaa joka kierroksella vastauksensa samalla tavalla kuin ruudullekin. Esimerkkiohjelmissa on esimerkit kirjoittamisesta ja lukemisesta joillakin yleisillä kielillä.

Kun ohjelma käynnistetään, sen ensimmäinen tehtävä on tulostaa ensimmäinen valintansa. Valinta on kirjain K (kivi), S (sakset) tai P (paperi) omalla rivillään, ja valintaa seuraa aina rivinvaihto. Tämän jälkeen ohjelma lukee vastapuolen valinnan ja tekee sen perusteella päätöksensä seuraavaa kierrosta varten. Vastapuolen valinta ilmoitetaan samassa muodossa, rivillä, joka sisältää merkin K, S tai P. Kun peli päättyy, ohjelmalle kuitenkin syötetään valinnan sijaan kirjain L.

Ohjelma saa käyttää laskuihin yhteensä 200 sekuntia eli keskimäärin 0,2 sekuntia siirtoa kohti. Kilpailussa mitataan ohjelman oikeasti käyttämää aikaa, eli jos ohjelma joutuu odottamaan vastustajan siirtoa, kello ei käy. Aikarajan ylittämisestä tai muusta virheestä seuraa automaattisesti häviö lopuilla pelikierroksilla. Jos kuitenkin molemmat tekoälyt tekevät virheen samalla kierroksella, loput pisteet jätetään jakamatta. Myös virhetilanteessa kummallekin ohjelmalle syötetään kirjain L ja peli päättyy.

Ohjelman mukana saa olla ennalta laadittuja datatiedostoja, jos ohjelma tarvitsee niitä esimerkiksi esiopetettua neuroverkkoa varten. Valmista dataa saa olla enintään yksi megatavu. Tiedostot palautetaan alkutilaansa otteluiden välillä.

Satunnaisuus

Ohjelman on toimittava joka ajokerralla samalla tavalla. Siirtoja ei saa arpoa millään sellaisella perusteella, että lopputulos voisi vaihdella eri ajokerroilla. Kun siis kaksi älyä laitetaan ottelemaan keskenään, ottelun on joka kerta kuljettava täsmälleen samalla tavalla riippumatta kellonajasta, tietokoneesta tai säätilasta!

Itse kehitettyjä pseudosatunnaislukuja saa käyttää, kunhan ne täyttävät tässä mainitut ehdot. Standardikirjastojen satunnaislukugeneraattorien käyttö ei ole sallittua, koska nekin saattavat eri tietokoneilla olla erilaisia.

Ohjelman pelatessa itseään vastaan jokainen kierros päättyy tasan ja ottelu kulkee aina täsmälleen samalla tavalla. Jos näin ei ole, ohjelma toimii satunnaisesti ja suoritus täytyy hylätä.

Esimerkki

Seuraavassa on esimerkki tekoälyn toiminnasta. Rivin alussa < tarkoitaa, että rivi on syötetty ohjelmalle, ja >, että rivi on tekoälyn tulostama. Oikeasti joka rivillä on ainoastaan yksi kirjain, K, S, P tai L.

> K
< S
> K
< P
> S
< L
  1. Ohjelma tulostaa ensimmäisen valintansa, K, kivi.
  2. Ohjelma lukee vastapuolen valinnan, S, sakset. Ohjelma voitti ensimmäisen kierroksen.
  3. Ohjelma tulostaa seuraavan valintansa, K, kivi.
  4. Ohjelma lukee vastapuolen valinnan, P, paperi. Ohjelma hävisi toisen kierroksen.
  5. Ohjelma tulostaa kolmannen valintansa, S, sakset.
  6. Ohjelma lukee vastapuolen valinnan. L tarkoittaa tässä kohti, että vastapuoli teki virheen, joten peli päättyy ja ohjelma sulkeutuu. Ohjelma sai kaikki loput 998 pistettä, eli peli päättyi 999–1.

Tarjolla on myös eri kielillä tehtyjä esimerkkiohjelmia, jotka valitsevat aluksi K:n ja seuraavilla kierroksilla sen merkin, jolla äsken olisivat voittaneet.

Ohjelman nimi

Jokaisella ohjelmalla on oltava nimi. Sopiva pituus on suunnilleen kahdeksan merkkiä tai vähemmän; kohtuuttoman pitkät nimet pyydetään muuttamaan. Sallitut merkit ovat isot ja pienet aakkoset ilman skandinaavisia merkkejä, numerot, viiva ja alaviiva, tiiviimmin -, _, A–Z, a–z ja 0–9.

Ohjelmointikieli

Testikoneessa on Java-kehitysympäristö, GCC:n C-, C++-, Objective-C- ja Fortran-kääntäjät, Haskell-kääntäjä (GHC), Brainfuck-kääntäjä, Free Pascal ja FreeBASIC sekä Python-, Ruby-, Perl- ja PHP-tulkit ja Mono-ympäristö, jossa voi kääntää ainakin VB.Net- ja C#-ohjelmia. Näitä ympäristöjä käyttäviltä riittää siis pelkkä tekoälyn lähdekoodi.

Basicin käyttäjien kannattaa käyttää FreeBASICia, koska se toimii testiympäristössä varmimmin. .Net-kielten käyttäjien on syytä varmistaa, että ohjelma toimii Mono-ympäristössä, tai pitäytyä varmuuden vuoksi .Net Framework 2.0:n tavallisissa ominaisuuksissa. Jos kieli on muu kuin C# tai VB.Net, myös käännetty tiedosto on tarpeen.

Muista kielitoiveista on syytä ilmoittaa ajoissa, jotta mahdolliset ongelmat selviävät jo ennen lopullista turnausta. Tällöin on hyvä lähettää myös pieni esimerkkiohjelma, jotta toiminta voidaan varmistaa.

GCC:llä ja FPC:llä käännöksissä käytetään -O2-optimointia ja GHC:llä -O-optimointia. Muuten käytetään kääntäjien ja tulkkien oletusasetuksia. Lisäpyyntöjä ohjelmien kääntämisen ja ajamisen suhteen voi esittää ilmoittautumisen yhteydessä, jos jokin yksinkertainen asetus vaikuttaa olennaisesti ohjelman toimintaan.

Tekniset rajoitukset

Ohjelma saa käyttää kokonaisuudessaan enintään 512 megatavua muistia, ja sen on toimittava yhdessä säikeessä. Ohjelman ajankäyttö pitää mitoittaa sen mukaan, että testikoneen x86-prosessorin kellotaajuus on 1,73 GHz.

Kilpailukoneen tiedot

Osallistuminen

Ohjelmien lähdekoodit ja muut tiedostot sekä tarvittaessa myös käännetyt ohjelmat tulee lähettää ennen kilpailuajan päättymistä osoitteeseen kilpailu@ksp.dy.fi. Viestiin kuuluvat seuraavat asiat:

Mainitut tiedot julkaistaan kilpailun tulossivulla. Mikäli jostain syystä ei halua nimensä tulevan julki, asiasta voi mainita ilmoittautumisviestissä. Ohjelmasta voi lähettää myös useamman eri version, jolloin näistä viimeinen toimiva osallistuu kilpailuun.

Jos käytetty ohjelmointikieli ei ole listalla, myös käännetty ohjelmatiedosto täytyy toimittaa. Se täytyy kuitenkin salata jotenkin, jotta postipalvelin päästää sen läpi. Salasanallinen zip-tiedosto käy hyvin.

Sanallisten selitysten tarkoitus on kertoa muille kilpailijoille, millaisia ratkaisuideoita ongelmaan on löytynyt. Tarkoitus ei siis ole selostaa koodin funktioita vaan yleisesti tekoälyn strategiaa. Myös selostukset julkaistaan tulosten yhteydessä, ja tarvittaessa niiden ulkoasua muokataan sen mukaan.

Kukin kilpailija voi osallistua kilpailuun vain yhdellä tekoälyllä. Viestin saapumisesta lähetetään vahvistus muutaman päivän kuluessa.

Palkinnot

Voittaja voi lunastaa seuraavassa Putkamiitissä kiven, sakset tai paperin. Palkinto arvotaan reilulla kivi, sakset, paperi -arvonnalla.

Muuta

Tietoa sivustosta