Kirjautuminen

Haku

Tehtävät

Kilpailut: Sika: tulokset

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.

Osallistujat ja tulokset

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.

sijatekoälykielitekijänimimerkkikeskiaikapisteetvoittoja
1.mostC++Lari KoponenL2-K20,50 s456088 %
2.TaScard2JavaTapani SjömanTapaniS0,72 s371572 %
3.munkkiC++Mikko SysikaskiSisuaski0,01 s338965 %
4.potsiC++Kaisa Krannilaöppis0,01 s323462 %
5.esim(useita)0,01 s269652 %
6.RansuPythonpr0l30,16 s263551 %
7.MaschinenPythonAntti VainioAnaatti1,21 s216342 %
8.PohjaPythonpr0l30,11 s202339 %
9.thorpC++Risto Paavolaroisto6660,74 s196438 %
10.HassuC++Lauri KenttäMetabolix0,06 s169633 %

Onnea voittajalle!

Pelit

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).

Ohjelmat

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.
esimEsimerkki 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.

Lopuksi

Kiitos kaikille osallistujille hyvästä kilpailusta, ja tervetuloa mukaan taas ensi kerralla.

Tietoa sivustosta