On kesä 2014, ja on aika kilpailla.
Tällä kertaa aiheena on säännöiltään erittäin yksinkertainen peli, Lukupeli. Pelissä on kaksi pelaajaa, jotka valitsevat yhtä aikaa kokonaisluvun väliltä 0–9. Pienemmän luvun valinnut pelaaja saa kolme pistettä (tasapelissä molemmat yhden pisteen), ja lisäksi molemmat saavat pisteitä pienemmän luvun verran. Ottelussa pelaajat pelaavat 1000 kierrosta, joiden aikana tekoälyn on tietenkin tarkoitus maksimoida omat pisteensä tarkkailemalla vastustajan taktiikkaa ja valitsemalla luku, joka on mahdollisimman suuri mutta silti vastustajan lukua pienempi. Kilpailussa merkitsevät sekä voitettujen otteluiden määrä että tekoälyn keräämät pisteet.
Tarkemmat säännöt ovat kilpailusivulla, ja tuttuun tapaan osallistumista helpottamaan on tehty laaja kokoelma esimerkkejä ja testausohjelma. Kilpailun aikana julkaistaan myös välituloksia otteluineen.
Näin teknisesti yksinkertaista mutta teoriassa monimutkaista kilpailuaihetta ei ole ollut vuosiin. Nyt koodataan!
Etusivulla on pieni bugi: kun klikkaa "kilpailusivulta" (linkki kuvan yllä), ohjaudun edelliseen morabara-kilpailuun.
Etusivu oli tosiaan unohtunut päivittää. Väärä linkki ei suinkaan ollut ainoa vika, et tainnut edes lukea tekstiä...
Saako satunnaislukuja käyttää, jos siemenluku on vakio? Tällöinhän ohjelma toimii joka kerta samalla tavoin, kun sille syötetään sama input.
Timmmo kirjoitti:
Saako satunnaislukuja käyttää, jos siemenluku on vakio?
Myös pseudosatunnaislukuja tuottavan algoritmin pitää olla vakio. Siksi valmiita satunnaisfunktioita ei pidä käyttää, ellei ole varmasti tiedossa, että ne toimivat samalla tavalla myös eri käyttöjärjestelmissä. Omatekoisia pseudosatunnaislukuja saa käyttää. Yksi ratkaisu on arpoa valmiiksi parikymmentä lukua taulukkoon ja toistaa ohjelmassa niitä. Toinen ratkaisu on perinteinen kerto- ja yhteenlaskuun perustuva algoritmi kuten tämä:
/* Tuottaa luvun väliltä 0–99. */ int rnd_100() { static unsigned int i = 0; /* Siemenluku (pysyvä muuttuja). */ i = (21 * i + 53) % 100; /* % = mod = jakojäännös. */ return i; }
Metabolix kirjoitti:
Timmmo kirjoitti:
Saako satunnaislukuja käyttää, jos siemenluku on vakio?
Myös pseudosatunnaislukuja tuottavan algoritmin pitää olla vakio. Siksi valmiita satunnaisfunktioita ei pidä käyttää, ellei ole varmasti tiedossa, että ne toimivat samalla tavalla myös eri käyttöjärjestelmissä.
Käytän Javaa, ja ymmärtääkseni Java-engine toimii satunnaislukujen osalta samalla tavalla eri käyttöjärjestelmissä, sillä Java on alustariippumaton kieli. Eli lienee OK käyttää Javan Random-luokkaa?
Periaatteessa Javan Random-luokka käyttää täysin deterministisiä algoritmejä, jotka palauttavat samoilla metodikutsuilla ja samalla siemenluvulla samat pseudosatunnaiset luvut. Pitäisi siis riittää, että Random-luokan konstruktorille annettu siemenluku on vakio. Kokemuksesta en kuitenkaan pysty sanomaan, että tulisiko aikuisten oikeasti samat luvut eri versioilla jne.
Timmmo kirjoitti:
Käytän Javaa, ja ymmärtääkseni Java-engine toimii satunnaislukujen osalta samalla tavalla eri käyttöjärjestelmissä, sillä Java on alustariippumaton kieli. Eli lienee OK käyttää Javan Random-luokkaa?
Javan Random-luokkaa voi käyttää, koska lähes kaikki käyttävät (kotikoneilla) Oraclen Java-toteutusta ja luokan käyttämä kaava on myös selvästi dokumentoitu eli sen voisi tarvittaessa helposti kopioida. Javan alustariippumattomuus ei liity tähän varsinaisesti mitenkään, koska luokasta voi silti olla erilaisia versioita eri alustoilla tai vähintäänkin eri Java-virtuaalikoneissa. Onhan myös C kielenä alustariippumaton, ja silti Linuxissa rand-funktio tuottaa lukuja 0–2147483647 ja Windowsissa vain 0–32767.
En ajatellut kyseisellä kielellä mitään tehdä, mutta Brainfuck puuttuu tuosta listasta.
Kaikkea ei tarvitse laittaa listalle. Joku kysyy sitten, jos tarvitsee.
Lisää PL/I kilpailussa sallittujen ohjelmointikielten joukkoon, niin yritän ehtiä osallistumaan yksinkertaista neuroverkkoa käyttävällä toteutuksella.
Ei tuota pelien määrää voisi kasvattaa? Mielestäni 1000 on liian vähäinen määrä, 10000 olisi sopivampi, niin tilastollisilla menetelmillä pystyisi paremmin analysoimaan vastustajan pelityyliä. Ajankäyttö tuskin lienee ongelma, kun skripti jauhaa kaikki otteluparit yön yli kuitenkin...
Pitää kysyä vähän selvennystä tuohon kokonaispisteiden kaavaan, lähinnä mitä max(pisteet) ja max(voitot) oikeastaan tarkoittavat.
Luettuani tuon, ensimmäisenä tuli mieleen, että max(pisteet) olisi kyseisen tekoälyn suurin pistemäärä kaikista sen omista otteiluista. Tällöin en kuitenkaan keksi eroa voitoille ja max(voitoille). Toinen ajatus oli, että max(pisteet) ja max(voitot) on paras tulos kaikista osallistuneista tekoälyistä.
Välitulokset on julkaistu!
Eräs ovela jo huomautti sähköpostitse, että nollia pelaava ohjelma ei voi hävitä yhtään ottelua. Totta, mutta välitulokset näyttävät, että pelkkiä nollia pelaamalla ei voi myöskään kerätä kovin paljon pisteitä.
Kisassa on jo muutama huumoriohjelma tms. tunnetusti alkeellinen tekoäly, ja näitä tietenkin tarvitaan lisää, jotta huipuilla olisi enemmän analysoitavaa.
jalski, en lisää edelleenkään PL/I:tä. Sen sijaan GFortranin voit saada.
Timmmo, kierrosmäärä on nyt tämä. Uskon, että määrä on jo moneen käyttöön varsin riittävä.
Anaatti, lisäsin täsmennyksen ”koko kilpailussa”. Kaavan idea on, että niin voitoilla kuin pisteilläkin voi saada max(pisteet) kertaa max(voitot) pistettä. Kaava ei ehkä ole paras mahdollinen mutta ohjaa toivottavasti silti oikeaan suuntaan eli pois nollalinjalta.
qwerty12302, koodasin uuden Brainfuck-kääntäjän, joten nyt silläkin voi osallistua.
Uusia osallistujia on niin monta, että julkaisen jo uudet välitulokset. Listalla on tapahtunut mielenkiintoisia muutoksia järjestyksessä niidenkin tekoälyjen kohdalla, jotka jo olivat mukana ja joista useimpia ei edes ole päivitetty edellisten tulosten jälkeen.
Metabolix kirjoitti:
jalski, en lisää edelleenkään PL/I:tä. Sen sijaan GFortranin voit saada.
Katsotaan, jos sitä vaikka jaksaisi Fortran toteutuksen kasata. PL/I teksi suurimman osan ohjelmani tarvitsemista lukujen ja bitti-vektorien muunnoksista automaattisesti ja matriisien käsittelykin sujuisi mukavan jouhevasti.
Tein muuten PL/I:llä kokeeksi yksinkertaisen neuroverkkopohjaisen "auto associative memory" toteutuksen. Ohjelma toimii yllättävän hyvin pelkästään opettamalla verkkoa vastapelaajan kahdella edellisellä siirrolla ja käymällä läpi vaihtoehdot syöttämällä verkolle bittivektoreita, jotka koostuvat pelaajan edellisestä siirrosta ja vastaus vaihtoehdoista 0-9. Verkolta saaduista vastaus vaihtoehdoista valitaan se, missä on pienin bittivirhe. Kyseinen tuloshan on vastustajan todennäköisin seuraava siirto, joten vähennetään tästä luvusta yksi. Bittivirheen ollessa kovin suuri, vastataan aina turvallisesti nolla.
Metabolix, kuinka Java-pohjainen testausohjelma lukee kilpailijan syötettä?
Jostain syystä en saa sitä hyväksymään PL/I:llä kirjoitetun kilpailuohjelmani prototyypin syötettä. Konsolissa ohjelmaa itsekseni ajaessa se toimii hienosti.
jalski, ihan normaalisti, kuten nyt putkitetusta prosessista yleensäkin voi lukea. Puuttuuko koodistasi ehkä flush? Voi myös aiheuttaa ongelmia, jos PL/I ei tulosta normaalisti tekstiä vaan hallitsee koko konsolia jotenkin merkkitaulukon tyyppisesti.
Metabolix kirjoitti:
Puuttuuko koodistasi ehkä flush? Voi myös aiheuttaa ongelmia, jos PL/I ei tulosta normaalisti tekstiä vaan hallitsee koko konsolia jotenkin merkkitaulukon tyyppisesti.
Kirjoitan valmiiksi määriteltyyn tiedostoon SYSPRINT, minkä pitäisi PL/I:n toimesta olla linkittynä STDOUT:tiin. Flushiakin olen kokeillut.
Testiohjelma täällä, jos viitsit kokeilla.
Linuxissa Winellä tuo kyllä näyttää toimivan, paitsi tulostaa riveille ylimääräisiä merkkejä (välin ja vaununpalautuksen eli \x20\x0d) ja siksi saa testausohjelmalta hylkäyksen. Vaikea sanoa, mitä sitten Windowsissa tapahtuu. Voithan kokeilla vielä jotain purkkavirityksiä kuten ajokomentoa ”cmd /c foo.exe”.
Palkinnot kirjoitti:
Voittaja voi halutessaan lunastaa runossa luvatun rinkelin seuraavassa Putkamiitissä.
Palkinnot kirjoitti:
Voittaja voi lunastaa seuraavassa Putkamiitissä kiven, sakset tai paperin. Palkinto arvotaan reilulla kivi, sakset, paperi -arvonnalla.
Mikä mahtaa olla kilpailun palkinto? Hippapelissä se oli rinkeli, KPS-kilpailussa kivi, paperi tahi sakset.
Metabolix kirjoitti:
Uusia osallistujia on niin monta, että julkaisen jo uudet välitulokset. Listalla on tapahtunut mielenkiintoisia muutoksia järjestyksessä niidenkin tekoälyjen kohdalla, jotka jo olivat mukana ja joista useimpia ei edes ole päivitetty edellisten tulosten jälkeen.
Erityisen mielenkiintoista on tämä esim:n pärjääminen noinkin hyvin, pelkkää nollaa pelaamalla sijoitus on toinen! Ovatkohan älykkäämmät algoritmit sitten liiankin älykkäitä, vai mikä lienee syynä tähän ilmiöön?
qwerty12302 kirjoitti:
Mikä mahtaa olla kilpailun palkinto?
Eikö riitä, että saa mainetta ja kunniaa? Voin myös lahjoittaa satunnaisen luvun sähköpostitse.
Timmmo kirjoitti:
Erityisen mielenkiintoista on tämä esim:n pärjääminen noinkin hyvin, pelkkää nollaa pelaamalla sijoitus on toinen! Ovatkohan älykkäämmät algoritmit sitten liiankin älykkäitä, vai mikä lienee syynä tähän ilmiöön?
Melko hyvä sijoitus on täysin odotettu, koska esim(erkki) ei koskaan häviä ottelua. Kuitenkin kilpailun henki on mielestäni se, että rohkeat osallistujat yrittävät jotain muuta ja taitavammat tarttuvat sitten tilaisuuteen, jolloin parhaat analysoijat nousevat esimerkin ohi. Lisäksi minusta on mukava varata tuo nollalinjan helppo tulos esimerkille eikä oikealle osallistujalle.
Timmmo kirjoitti:
Erityisen mielenkiintoista on tämä esim:n pärjääminen noinkin hyvin, pelkkää nollaa pelaamalla sijoitus on toinen! Ovatkohan älykkäämmät algoritmit sitten liiankin älykkäitä, vai mikä lienee syynä tähän ilmiöön?
Ehkä syynä on myös se, että nollan pelaaminen taitaa olla Nashin tasapainon mukainen strategiavalinta tilanteeseen ja siten siis tietyssä mielessä peliteoreettisesti vahvasti perusteltu. (Disclaimer: luin säännöt vain pikaisesti, joten saatoi missata jotain, jonka huomioiden tämä päättely ei ole validi.)
Jos siis botti maksimoi rationaalisesti omaa etuaan (yrittää saada vastustajaa enemmän pisteitä) ja olettaa muidenkin tekevän samoin, niin tällöin oikeastaan nollasta poikkeavia lukuja ei kannata pelata. Siinä mielessä peli tietysti on mielenkiintoinen, että jos botit tekevät sopivasti yhteistyötä, niin molemmat saavat enemmän pisteitä. Yhteistyötä ei vaan kannata yrittää sellaisen pelaajan kanssa, joka maksimoi rationaalisesti omaa etuaan (koska nollaa vastaan häviää aina, jos pelaa kerrankin jotain muuta kuin nollaa). Eli jos kaikki botit pelaavat pelkkää nollaa, niin muulla strategialla kuin pelkkiä nollia pelaamalla ei voi kuin hävitä. Jos taas löytyy vähintään kaksi bottia, jotka pelaavat nollaa noita "nollabotteja" vastaan ja tekevät keskenään yhteistyötä, niin ne pääsevät listalla nollabottien ohi koska yhteistyöllä voi kerätä enemmän pisteitä.
Metabolix, hyväksytkö REXX-toteutuksen kilpailuun mukaan?
Epsilon, aivan totta, nollan pelaaminen on Nashin tasapaino.
jalski: Etkö voisi keskittyä kerrankin olennaiseen eli tekoälyn ohjelmointiin? Osaat monia tavallisiakin kieliä, käytä jotain niistä.
Näköjään Javan tietoturva on taas tiukentunut ja itse allekirjoitetun appletin saa hädin tuskin ajettua. Kuitenkin toistaiseksi testausohjelma vielä toimii ainakin Linuxissa ja Windows Server 2003:ssa. Jos appletin kanssa on ongelmia, kannattaa kokeilla JARin lataamista ja ajamista komentorivillä. Tulevaisuudessa täytynee tehdä testausohjelmista tavallisia työpöytäohjelmia.
Metabolix kirjoitti:
jalski: Etkö voisi keskittyä kerrankin olennaiseen eli tekoälyn ohjelmointiin? Osaat monia tavallisiakin kieliä, käytä jotain niistä.
Tekoäly on jo tehty, tosin PL/I:llä ja testausohjelma ei syötettä huoli johtuen ylimääräisistä tulostuksen ohjausmerkeistä. PL/I -> REXX-muunnos olisi kohtuullisen pienellä vaivalla tehtävissä, siksi ehdotin tuota.
Jätetään nyt sitten osallistuminen väliin, 12-14 tunnin työpäivien jälkeen ei oikein aika ja energia riitä.
Alla kuitenkin toimiva PL/I-toteutus, mikä – – Mod. huom., ei nyt julkaista toimivia ohjelmia ja ideoita kesken kisan...
Montako osallistujaa on tällä hetkellä?
Tässä tulevat päivän välitulokset. Kilpailu etenee, ja esimerkki on pudonnut jo muutaman sijan. Osallistujia on kaikkiaan 16.
Lisäsin tulossivulle hienon kuvan nykytilanteesta. Kuva on tuotettu omatekoisella jousimallilla. Täytyisi varmaan etsiä jokin kunnollinen MDS-toteutus... (Edit: Kuvaaja päivitetty!)
Julkaisin lisää välituloksia. Seuraavat tulevat ehkä viikon kuluttua, jos uusia osallistujia riittää.
Metabolix kirjoitti:
– – esim, joka taas voittaa kaikki ottelut.
Tuolla on virhe, esim ei voita kaikkia otteluitaan, se pelaa myös tasapelejä. Sen sijaan esim ei häviä koskaan.
Totta, oli tarkoitus kirjoittaa, että ei häviä koskaan. Korjaan.
Metabolix tekisitkö taas tommosen hienon graafin? Vois taas ihmetellä lisää..
Oskuz kirjoitti:
Metabolix tekisitkö taas tommosen hienon graafin? Vois taas ihmetellä lisää..
Tein Metabolixin kuvaajan kaltaisen kuvaajan tuosta uusimmasta kierroksesta. Se löytyy linkin takaa.
Jännä huomata, miten tämänkertainen kärkijoukko on jakautunut kahtia. ThaiCurry on lähellä esimerkkitekoälyä ja muu kärkijoukko taas puolestaan yllättävän lähellä ilmeisen satunnaisesti pelaavaa RanTomia.
L2-K2, olet unohtanut kuvaajasta akselit; y-akselilla skaala on erilainen kuin x-akselilla. Nähtävästi olet myös huomioinut ainoastaan tuloksen etkä lainkaan pisteitä.
Metabolix kirjoitti:
L2-K2, olet unohtanut kuvaajasta akselit; y-akselilla skaala on erilainen kuin x-akselilla. Nähtävästi olet myös huomioinut ainoastaan tuloksen etkä lainkaan pisteitä.
Hyvin huomattu, x- ja y-suunnilla tuli näköjään hieman eri skaala kun kuvasta tuli tehtyä nelikulmio. Näin siitä saa, kun käyttää valmiita kirjastoja eikä toteuta kaikkea itse (tarkoituksena oli toki että x- ja y- suunnilla olisi sama skaala). Korjasin kuvaan molempien akselien skaalaksi saman.
Joo, kuvaaja huomioin pelkän lopputuloksen kustakin ottelusta, ei pistemäärien erotuksia.
Päivitin edellisen kuvaajan oikean MDS-mallin mukaiseksi (GNU R, cmdscale) ja tein myös toisista tuloksista vastaavan kuvaajan. Kuvaajassani tekoälyjen A ja B ottelusta lasketaan luku kaavalla t+p/3000, missä t on -1, 0 tai 1 ottelun tuloksen mukaan ja p on pistemäärien erotus eli p/3000 on välillä -1:stä 1:een. Kuvaajan piirrossa on toki vähän PHP:tä ja käsityötä mukana, jottei tulos ole liian tekninen. Osuvasti Sini on saanut puolueettomassa MD5-arvonnassa punaisen värin. :)
Innostuimpa tuossa laskeskelemaan tekoälyjen tuloksista vertailu kelpoisempia, alla olevassa taulukossa älyn saamat kokonaispisteet on jaettu mukana olleiden älyjen määrällä.
Tekoäly | välitulos2 | välitulos3 | välitulos4 | välitulos5 |
---|---|---|---|---|
esim | 19149 | 56293 | 75444 | 83500 |
hidari | 25138 | 49253 | 44723 | 58125 |
Simple1 | 23502 | 44668 | 71102 | 84213 |
JHNA | 18427 | 30961 | 34369 | 36923 |
ysim | 13649 | 42563 | 60458 | 85185 |
High5 | 14252 | 29122 | 38057 | 52908 |
R33L | - | 59789 | 79519 | 131970 |
ElReino | - | 55753 | 73738 | 73421 |
jytky | - | 54434 | 60157 | 72536 |
kompa | - | 50986 | 75480 | 90085 |
RanTomi | - | 27782 | 53444 | 66550 |
ElStupido | - | 38642 | 34584 | 40171 |
Haistaja | - | - | 77051 | 109364 |
ThaiCurry | - | - | 80066 | 96119 |
Sini | - | - | 66034 | 94435 |
sqrt | - | - | 50475 | 55905 |
hop1 | - | - | - | 90906 |
Kukka | - | - | - | 90891 |
Luuuser | - | - | - | 75244 |
nnx9 | - | - | - | 71562 |
Matilda | - | - | - | 63739 |
Eli esimerkiksi ElStupidon tulos oikeasti laski 3:nelta kierokselta, 4:nelle siiryttäessä, mutta nousevat taas viimisimmässä kierroksessa. Mutta sitä ei huomaa jos tarkastellaan käsittelettömiä pisteitä.
Edit. Mikähän tuossa taulukossa on, se näytti esikatselussa ihan erinlaiselta.
Mod. korjasi taulukkosi. Teksti ei ole mikään taulukko.
Edit Laitoin taulukon järjestykseen, ja lisäsin lauseen taulukon jälkeiseen tekstiin.
Tuloksesi eivät ole millään tavalla enempää vertailukelpoiset, näkeehän sen jo siitä, että ensimmäisten välitulosten voittajalla on edelleen vähemmän pisteitä kuin viimeisten välitulosten häviäjällä. Jotain etäisesti vertailukelpoista voisi saada, jos jakaisi vaikka ohjelmien lukumäärän verran pisteitä ohjelmille siinä suhteessa, kuin ne oikeasti ovat saaneet pisteitä. Jokin looginen järjestys taulukossa voisi myös auttaa lukemista.
Oskuz kirjoitti:
Edit Laitoin taulukon järjestykseen,
En edelleenkään näe taulukossasi mitään mielekästä järjestystä: pisteet ovat aivan sekaisin.
Vuorossa ovat viikon välitulokset. Osallistujia alkaa tulla hitaammin, eikä päivityksiäkään ole tullut kuin muutama. Kuitenkin kärkijoukossa on taas uusi tulokas.
Muistattehan, että välitulosten yhteydessä ovat tekoälyjen ottelut, joita voi yrittää hyödyntää oman taktiikan suunnittelussa tai esimerkiksi oppivan tekoälyn lähtömateriaalina.
Metabolix kirjoitti:
Muistattehan, että välitulosten yhteydessä ovat tekoälyjen ottelut, joita voi yrittää hyödyntää oman taktiikan suunnittelussa tai esimerkiksi oppivan tekoälyn lähtömateriaalina.
Sääli, ettei tekoälyohjelma saa syötteenä vastustajan nimeä. Olisi ollut mielenkiintoista antaa ohjelman oppia sen pelatessa välipelejä. Itse olisin tallentanut datatiedostoon jokaisen vastustajan nimen, todennäköisimmät kolme aloitus siirtoa ja neuroverkon painotusmatriisin. Näin ohjelma olisi oppinut jokaisesta välipelistä ja mukautunut vastustajan pelityyliin finaalia varten.
Nyt taidan vain tyytyä muokkaamaan tekoälyni aloitussiirtoja. Tällä hetkellä turvallisen aloituksen takia se pelaa paljon nolla painotteisia pelejä, jolloin se jää auttamatta kärjen pisteistä. Silti se pärjää yllättävän hyvin kärjen tuntumassa, vaikka onkin todennäköisesti yksi kilpailun yksinkertaisimmista pelin aikana oikeasti oppivista tekoälyistä.
Tuota, tuota. Minulla on ongelmia tuon testausohjelman kanssa. Kun testaan sitä kahdella ihmistekoälyllä, ei ongelmia ilmene, mutta kun yritän ladata tekoälyn tulee seuraavanlainen virhe:
(Tiedostopolku) Createprocess error=193 %1 is not a valid win32 application
Googlailin ja yritin mm. tiedoston paikan vaihtamista. Ohjelmassahan ei ole vikaa, mutta osaisikohan joku antaa edes jotain sinnepäin neuvoa, että minkä takia vika voisi tulla, koska ohjelman käyttäminen kummasti helpottaisi oman tekoälyn parantelemista.
Szanne, oletko huomioinut, että skriptikielellä poluksi ei tule pelkästään koodin polkua vaan luonnollisesti myös tulkin polku? Testausohjelman käyttöliittymässä on nimenomaan esimerkkinä Pythonille mahdollisesti sopiva polku:
"C:\Program Files\Python 3.4\python.exe" D:\koodit\ohjelma.py
Vastaavasti toimivat muutkin skriptikielet (mm. PHP, Perl, Ruby). Voit myös laittaa tällaisen pidemmän ajokomennon komentojonotiedostoon (komento.bat) ja valita ohjelmaksi tuon komentojonotiedoston; tiedoston alussa täytyy silloin ehkä olla rivi ”@ECHO OFF”.
Tässä tulevat viimeiset välitulokset. Kärkijoukossa on jälleen muutoksia, mutta kisaa johtaa yhä R33L. Kilpailuaikaa on jäljellä enää viikko – vieläkö joku kirii ohi?
Kappas, täällähän oli taas mielenkiintoinen kilpailu. Nyt taidan jättää osallistumatta, kun huomasin tämän näin myöhään ja kilpailun pisteytys on niin erikoinen, että välitulokset olisivat olleet tarpeelliset. Onnea kuitenkin kaikille osallistujille.
Itse oikeastaa haluaisin nähdä tästä kilpailusta myöhemmin version, jossa pisteytys olisi muutettu siten, että molemmat kilpailijat saavat pisteitä oman arvaamansa lukunsa perusteella ja pienemmän luvun arvaaja saisi 5 lisäpistettä. Tällöin peli olisi aika lailla kivi-paperi-sakset tyyppinen peli ja kilpailun pisteytyskin voisi olla selkeämpi (summa jokaisen ottelun piste eroista kuten kps kilpailussa oli). Tällöin myöskään esimerkkiohjelma ei olisi voittamaton :)
FooBat: Vielä ehtisit osallistua! ;) En usko, että ehdottamasi pistelasku muuttaisi peliä juurikaan, koska edelleen tavoitteena olisi arvata yhtä pienempi luku kuin vastustajalla ja isoilla luvuilla pisteiden keräily toimisi melko samalla tavalla kuin nytkin, koska järkevä ohjelma nostaa omaa lukuaan huomatessaan vastustajan pelaavan isoja lukuja. Kilpailun uusiminen ei muutenkaan Nykyinen pistelasku syntyi yksinkertaisesta ideasta, jolla sai nollat ja yhdeksiköt suunnilleen tasa-arvoiseen asemaan ja pois kisan kärjestä.
Kisa on ohi, ja tulokset ovat julki. Viime hetkillä kärkeen kiilasi tekoäly PahaApina, jonka tekijä ei ole antanut tietojaan julkaistaviksi. Pitkään johdossa ollut Anaatin tekoäly R33L jäi kunniakkaasti toiselle sijalle, ja kolmanneksi nousi Chimanin ohjelmoima Haistaja. Onneksi olkoon kärkijoukolle, ja kiitos kaikille muillekin kiinnostavasta kilpailusta!
Edit: Ja laitetaanpa nettiin oikeat ottelutulokset. ;) Välituloksista löytyvät nyt myös tekoälyjen lähdekoodien välivaiheet.
Kiitokset kisan järjestämisestä ja onnittelut kärkikaksikolle. Hienoa että mukana oli paljon osallistujia. Kilpailu oli onnistunut sääntöjen yksinkertaisuuden ja erilaisten taktiikoiden kirjon takia.
Käytin tekoälyni pohjana viiden vuoden takaisen Kivi, sakset ja paperi -kilpailun tekoälykoodiani. Välituloksista poimin kahden kilpailijan koukeroiset vakiosarjat, minkä avulla sain heitä vastaan lähes optimipisteet.
Kiitokset Metabolixille jälleen hyvin järjestetystä kilpailusta. Kynnys osallistua oli todella matala ja taisikin tulla ennätys osallistujamäärässä?
Itse tulin mukaan loppumetreillä ja 18. sija oli mukava yllätys, kun koodi tuli väännettyä aika hätäisesti kasaan. Luulen, että idealla (pelata erilaisilla taktiikoilla ja historiasta tutkia mikä olisi pärjännyt parhaiten) olisi päässyt korkemmallekkin, jos olisi sitä ehtinyt vähän jalostaa.
Firman sisäisessä kisassa sija 2/3, kollega oli vähän nokkelampi sijalla 17 :)
Edit. Niin ja onnittelut voittajille!
ajv kirjoitti:
Kynnys osallistua oli todella matala ja taisikin tulla ennätys osallistujamäärässä?
Ei aivan: ristinollaa pelasi 33 ja ksp:tä 37, ja lisäksi tällä kertaa listalla on muutamalta henkilöltä useampikin ohjelma, joten henkilömääräisesti jäätiin vielä alemmas. Kuitenkin osallistujamäärä on suurin viiteen vuoteen, eli ei ihan pieleen mennyt.
Chiman kirjoitti:
Käytin tekoälyni pohjana viiden vuoden takaisen Kivi, sakset ja paperi -kilpailun tekoälykoodiani.
Pelissä oli tosiaan hieman sama idea. Mietin jopa, saisiko jonkin vanhan tekoälyn valjastettua suoraan tähän ottamalla aina jotkin kolme lukua suoraan KSP-symboleiksi, esimerkiksi min(a,b)-1, min(a,b), max(a,b).
ajv kirjoitti:
Firman sisäisessä kisassa sija 2/3, kollega oli vähän nokkelampi sijalla 17 :)
Edit. Niin ja onnittelut voittajille!
Kiitokset omasta puolestanikin! Lohduttaudun viimeisellä sijallani sillä, että pääsin edes sijoille! :D
Jotain muutakin ohjelmointiharjoitusta, kuin pelkkää Viopea... Ja ensi kerralla ei tule 30min pohdinnalla tehtyä omaa ratkaisua (ja ajv häviää 100-0)!!
Aihe on jo aika vanha, joten et voi enää vastata siihen.