Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Ohjelmoi tekoäly Lukupeliin

Sivun loppuun

Metabolix [28.06.2014 08:00:00]

#

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!

qwerty12302 [28.06.2014 10:06:08]

#

Etusivulla on pieni bugi: kun klikkaa "kilpailusivulta" (linkki kuvan yllä), ohjaudun edelliseen morabara-kilpailuun.

Metabolix [28.06.2014 11:26:08]

#

Etusivu oli tosiaan unohtunut päivittää. Väärä linkki ei suinkaan ollut ainoa vika, et tainnut edes lukea tekstiä...

Timmmo [29.06.2014 20:43:56]

#

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.

Metabolix [29.06.2014 21:31:42]

#

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;
}

Timmmo [29.06.2014 23:14:30]

#

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?

Tzaeru [30.06.2014 12:34:46]

#

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.

Metabolix [30.06.2014 16:18:16]

#

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.

qwerty12302 [30.06.2014 16:19:46]

#

En ajatellut kyseisellä kielellä mitään tehdä, mutta Brainfuck puuttuu tuosta listasta.

Metabolix [30.06.2014 16:33:38]

#

Kaikkea ei tarvitse laittaa listalle. Joku kysyy sitten, jos tarvitsee.

jalski [30.06.2014 20:12:12]

#

Lisää PL/I kilpailussa sallittujen ohjelmointikielten joukkoon, niin yritän ehtiä osallistumaan yksinkertaista neuroverkkoa käyttävällä toteutuksella.

Timmmo [30.06.2014 21:54:58]

#

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

Anaatti [30.06.2014 21:56:50]

#

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

Metabolix [30.06.2014 22:17:33]

#

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.

Metabolix [02.07.2014 20:11:24]

#

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.

jalski [03.07.2014 12:30:17]

#

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.

jalski [03.07.2014 17:14:14]

#

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.

Metabolix [03.07.2014 17:25:05]

#

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.

jalski [03.07.2014 18:08:44]

#

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.

Metabolix [03.07.2014 18:23:03]

#

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

qwerty12302 [04.07.2014 00:13:18]

#

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.

Timmmo [05.07.2014 20:35:34]

#

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?

Metabolix [05.07.2014 22:43:16]

#

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.

Epsilon [06.07.2014 09:46:54]

#

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

jalski [06.07.2014 13:52:19]

#

Metabolix, hyväksytkö REXX-toteutuksen kilpailuun mukaan?

Metabolix [06.07.2014 14:50:25]

#

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.

jalski [06.07.2014 17:09:18]

#

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

Oskuz [07.07.2014 13:09:33]

#

Montako osallistujaa on tällä hetkellä?

Metabolix [07.07.2014 19:56:27]

#

Tässä tulevat päivän välitulokset. Kilpailu etenee, ja esimerkki on pudonnut jo muutaman sijan. Osallistujia on kaikkiaan 16.

Metabolix [08.07.2014 18:32:31]

#

Lisäsin tulossivulle hienon kuvan nykytilanteesta. Kuva on tuotettu omatekoisella jousimallilla. Täytyisi varmaan etsiä jokin kunnollinen MDS-toteutus... (Edit: Kuvaaja päivitetty!)

Metabolix [13.07.2014 22:07:21]

#

Julkaisin lisää välituloksia. Seuraavat tulevat ehkä viikon kuluttua, jos uusia osallistujia riittää.

Timmmo [14.07.2014 11:06:59]

#

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.

Metabolix [14.07.2014 15:30:40]

#

Totta, oli tarkoitus kirjoittaa, että ei häviä koskaan. Korjaan.

Oskuz [15.07.2014 19:51:20]

#

Metabolix tekisitkö taas tommosen hienon graafin? Vois taas ihmetellä lisää..

L2-K2 [16.07.2014 15:41:14]

#

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.

Metabolix [16.07.2014 16:47:24]

#

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

L2-K2 [16.07.2014 17:25:10]

#

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.

Metabolix [16.07.2014 18:04:52]

#

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

Oskuz [17.07.2014 20:54:11]

#

Innostuimpa tuossa laskeskelemaan tekoälyjen tuloksista vertailu kelpoisempia, alla olevassa taulukossa älyn saamat kokonaispisteet on jaettu mukana olleiden älyjen määrällä.

Tekoälyvälitulos2välitulos3välitulos4välitulos5
esim19149562937544483500
hidari25138492534472358125
Simple123502446687110284213
JHNA18427309613436936923
ysim13649425636045885185
High514252291223805752908
R33L-5978979519131970
ElReino-557537373873421
jytky-544346015772536
kompa-509867548090085
RanTomi-277825344466550
ElStupido-386423458440171
Haistaja--77051109364
ThaiCurry--8006696119
Sini--6603494435
sqrt--5047555905
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.

Metabolix [17.07.2014 21:13:36]

#

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.

Metabolix [20.07.2014 19:59:02]

#

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.

jalski [21.07.2014 12:48:01]

#

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

Szanne [28.07.2014 00:20:21]

#

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.

Metabolix [29.07.2014 18:38:58]

#

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

Metabolix [03.08.2014 20:44:02]

#

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?

FooBat [07.08.2014 10:35:18]

#

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

Metabolix [07.08.2014 14:03:26]

#

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

Metabolix [10.08.2014 20:31:27]

#

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.

Chiman [10.08.2014 22:38:03]

#

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.

ajv [10.08.2014 22:48:33]

#

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!

Metabolix [11.08.2014 17:05:27]

#

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

dewabe [11.08.2014 17:19:54]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta