Järjestäjä: Metabolix
Kesällä 2018 Ohjelmointiputkassa pidettiin kilpailu Sika-korttipelin tekoälystä. Pelissä pitää pystyä lyödä ensin samaa maata kuin edellinen, jotta saa lyödä toisenkin kortin, tai muuten joutuu nostamaan lisää kortteja. Pelin voittaa, kun pääsee kaikista korteistaan eroon.
Kilpailuun osallistui 10 ohjelmaa. Tällä kertaa selvän voiton vei ohjelma, joka ajoi joukon satunnaisia simulaatioita ja valitsi pelattavaksi näiden perusteella parhaan kortin. Kirkkaasti hopealle pääsi maalaisjärjen mukainen arvio, että suuresta määrästä samaa maata pitää vain pyrkiä eroon ja pienellä korttimäärällä voi yrittää kiusata seuraavaa pelaajaa. Aihe oli selvästi vaikea, sillä myös esimerkkiohjelma menestyi melko hyvin.
Jäljempänä tällä sivulla on ohjelmien kuvauksia, ja tekoälyt voi ladata yhtenä pakettina.
Alla ovat kaikki kilpailun osallistujat voittajasta alkaen. Kilpailussa pelattiin 17280 ottelua, eli kaikki kolmen eri tekoälyn ottelut pelattiin 24 eri korttipakalla. Jokaisesta ottelusta pisteen saivat ne tekoälyt, jotka pääsivät korteistaan eroon.
sija | tekoäly | kieli | tekijä | nimimerkki | keskiaika | pisteet | voittoja |
---|---|---|---|---|---|---|---|
1. | most | C++ | Lari Koponen | L2-K2 | 0,50 s | 4560 | 88 % |
2. | TaScard2 | Java | Tapani Sjöman | TapaniS | 0,72 s | 3715 | 72 % |
3. | munkki | C++ | Mikko Sysikaski | Sisuaski | 0,01 s | 3389 | 65 % |
4. | potsi | C++ | Kaisa Krannila | öppis | 0,01 s | 3234 | 62 % |
5. | esim | (useita) | 0,01 s | 2696 | 52 % | ||
6. | Ransu | Python | pr0l3 | 0,16 s | 2635 | 51 % | |
7. | Maschinen | Python | Antti Vainio | Anaatti | 1,21 s | 2163 | 42 % |
8. | Pohja | Python | pr0l3 | 0,11 s | 2023 | 39 % | |
9. | thorp | C++ | Risto Paavola | roisto666 | 0,74 s | 1964 | 38 % |
10. | Hassu | C++ | Lauri Kenttä | Metabolix | 0,06 s | 1696 | 33 % |
Onnea voittajalle!
Huomattava osa peleistä, 6487 peliä (38 %), päättyi vasta 333 kierroksen rajaan. Muista peleistä useimmat olivat melko lyhyitä: 5420 peliä (31 % kaikista) päättyi viimeistään 25. kierroksella, ja 870 peliä (5 %) päättyi, ennen kuin mitään avopakasta nostettua korttia oli pelattu uudestaan.
Seuraavassa kuvaajassa näkyvät eri kierrosmäärillä ratkenneiden pelien määrät 100 kierrokseen saakka. Lyhin peli oli viiden kierroksen mittainen. Parhaimmillaan paras pelaaja on saattanut lopettaa jo toisen vuoronsa jälkeen.
Kaikki kilpailussa pelatut ottelut voi ladata testausohjelman antamassa muodossa tästä linkistä (8,4 Mt, purettuna 150 Mt).
Tekoälyjen lähdekoodit voi ladata yhtenä pakettina. Alla ovat tekijöiden omat kuvaukset ohjelmistaan.
most Lari Koponen L2-K2 | Tekoäly "most" ei edes yritä esittää älykästä. Sen sijaan, että "most" pohtisi kulloinkin järkevimmän siirron (esimerkiksi nyrkkisääntöjen avulla), "most" on puhdas Monte Carlo -simulaatio pelistä. Tekoäly koostaa kaiken saamansa tiedon vastustajiensa korteista, ja sitten arpoo näiden perusteella yhden mahdollisen otoksen käsistä ja pakasta. Sitten tekoäly pelaa otoksen loppuun satunnaisesti ja pisteyttää mahdolliset voittajat. Noin 2000 toiston jälkeen tekoäly poimii odotusarvoltaan parhaan seuraavan siirron. Lisätietoa on lähdekoodin mukana. |
TaScard2 Tapani Sjöman TapaniS | Kun umpipakassa on kortteja, ohjelma pelaa maata, jota on eniten. Myöhemmin ohjelma pelaa viimeiseksi nostetun kortin parhaasta maasta. Paras on se, josta on eniten kortteja, jos muilla reilusti kortteja, tai maa, jota seuraavalla pelaajalla vähiten, jos hänellä on vähän kortteja. |
munkki Mikko Sysikaski Sisuaski | Arvioi, mitä kortteja vastustajilla on kädessään, perustuen viime kierroksilla pelattuihin ja tähän mennessä nähtyihin kortteihin. Näiden perusteella pyrkii tekemään siirron, joka on epäedullinen muiden pelaajien kannalta, käyttäen yksinkertaista heuristiikkaa. |
potsi Kaisa Krannila öppis | Tekoäly koettaa pitää kädessä niin monen eri maan kortteja kuin voi. Jos on useita maita, joista kädessä useita kortteja, tekoäly koettaa valita (a) sen, jota lyömällä seuraavalta pelaajalta loppuvat jonkin maan kortit; (b) sen, jota lyömällä seuraava pelaaja joutuu nostamaan avopakasta eniten. Jos edellisestä kohdasta ei ole varmuutta saatavissa, tekoäly lyö sitä maata jota kädessä on eniten. Jos on pelattu yli 150 kierrosta, tekoäly rupeaa vain arpomaan. |
esim | Esimerkki pitää kortit siinä järjestyksessä, jossa saa ne käteensä, ja valitsee aina kädestään ensimmäisen sopivan kortin lyötäväksi. |
Ransu pr0l3 | Tämä tekoäly lyö satunnaisen kortin. |
Maschinen Antti Vainio Anaatti | Tämä on jonkinlainen koneoppimisäly, jota on opetettu pelaamalla kymmeniä tuhansia pelejä. Ohjelma yrittää keksiä, miltä pelitilanne näyttää ja käyttää edellisistä peleistä saatua dataa, joissa vastaavia tilanteita oli jo kohdattu. Tavoitteena on tehdä valintoja, jotka todennäköisimmin johtavat voittoon aivan pelin lopussa. |
Pohja pr0l3 | Tämä tekoäly lyö sitä, mitä on avopakassa syvimmällä. |
thorp Risto Paavola roisto666 | Ohjelma laskee kaikki vaihtoehdot neljä siirtoa eteenpäin. Ohjelma pisteyttää pelin eri vaihtoehtojen lopputuloksissa. Pisteitä saa vastustajan suuresta määrästä kortteja, omasta pienestä määrästä kortteja ja omasta voitosta. Vastustajan voitosta vähennetään pisteitä. Ohjelma olettaa, että vastustajat pelaavat siten, että ne tietävät, mitä kortteja muilla pelaajilla on ja pyrkivät lyömään aina sellaisen kortin, mitä seuraavalla pelaajalla ei ole tai sellaista, mitä löytyy eniten avopakasta. |
Hassu Lauri Kenttä Metabolix | Tämä hassu tekoäly pelaa hieman eri korttipeliä. Tässä pelissä on kaksi pelaajaa. Kummallakin voi olla kutakin maata enintään kolme korttia ja lisäksi vastustajalla enintään kolme jokeria. Jos itse ei voi lyödä oikeaa maata, hän saa yhden lisää jokaista maata. Jos vastustaja ei voi lyödä oikeaa maata, hän saa yhden kortin kyseistä maata ja yhden jokerin. Näin siis kortteja ei käytännössä nosteta mistään pakasta ja käsi on melko yksinkertainen. Oikeassa pelissä tekoäly testaa jokaisella kortillaan kumpaakin vastustajaa vastaan erikseen, miten peli sujuisi näillä yksinkertaisemmilla säännöillä. Mielivaltaisilla painotuksilla näistä tuloksista valitaan lupaavin kortti. |
Kiitos kaikille osallistujille hyvästä kilpailusta, ja tervetuloa mukaan taas ensi kerralla.