Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Kivi, sakset, paperi -kilpailu

Sivun loppuun

Metabolix [13.06.2009 00:00:00]

#

Tämän kesän ohjelmointikilpailussa tekoälyt pelaavat perinteistä kivi, sakset, paperi -peliä.

Jokainen ohjelma pelaa vuorollaan kutakin muuta vastaan 1000 pelikierrosta, joiden aikana tekoälyllä on mahdollisuus analysoida vastustajan taktiikkaa ja yrittää haalia mahdollisimman monta voittoa. Joka kierroksella voittaja vie yhden pisteen häviäjältä, ellei kierros ole tasapeli.

Kilpailu on nyt alkanut ja päättyy kuukauden kuluttua, heinäkuun 13. päivänä kello 13.37. Aiemminkin saa ja kannattaa ilmoittautua: tekoälyt pelaavat välikierroksen 28.6. tai pian sen jälkeen.

Kilpailusta voi kysellä ja keskustella tässä aiheessa. Tervetuloa mukaan!

tkok [13.06.2009 00:02:43]

#

Aion osallistua! :D
Loistavasti on ajankohdalla mietitty inttiin lähtijöitä. 13.7 klo 16 pitäis olla säkylässä.

Päärynämies [13.06.2009 00:23:15]

#

Kuulostaa ihan mielenkiintoiselta. Voisi tällä kertaa koittaa osallistua itsekin. Katsoo nyt minkälaisia ideoita sitä keksii. Tuo välikierros kuulostaa myös hyvältä idealta.

Ollaanko jonkinmoista tekoälyjä peluuttavaa ohjelmaa julkaisemassa, jotta voisi sillä sitten itse testailla mahdollisia luomuksiaan?

petrinm [13.06.2009 00:29:34]

#

Ei tässä kesän temmellyksen keskellä paljoa ole aikaa mutta voihan sitä kokeilla, kun taktiikkakin on jo valmiina!
Ei ole ainakaan tehtävä haastavuudellaan pilattu.

Metabolix [13.06.2009 00:36:25]

#

Päärynämies kirjoitti:

Ollaanko jonkinmoista tekoälyjä peluuttavaa ohjelmaa julkaisemassa, jotta voisi sillä sitten itse testailla mahdollisia luomuksiaan?

Minusta erityiselle testausohjelmalle ei ole mitään tarvetta, koska tekoäly kuitenkin lukee syötettä normaalin komentoriviohjelman tavoin ja jokainen voi siis helposti testata sitä itsekin, kunhan tulostaa siirrot tiedoston lisäksi ruudulle. Myös esimerkkiohjelmissa on tehty näin, ja tästä ylimääräisestä tulostuksesta ei sakoteta, vaikka se jäisi lopulliseenkin ohjelmaan.

Grandi [13.06.2009 03:22:14]

#

Olin itseasiassa suunnitellutkin tekeväni kivi, sakset, paperi-tekoälyn, mutta en jaksanut syventyä siihen sen enempää. Nyt kun oikein kilpailu on pykätty pystyyn, niin saattaisin jotain väsätäkkin. Ainakin on koko kesäloma täysin vapaata aikaa.

Ohjeet kirjoitti:

Joka tulostuksen jälkeen ohjelman pitää joko sulkea tiedosto tai varmistaa datan välittyminen flush-funktiolla tai vastaavalla.

Mitäs tämä tarkoittaa? Varmaan riittää, kun käyttää esimerkki-paketin funktioita? :D

Grez [13.06.2009 10:39:39]

#

petrinm kirjoitti:

Ei ole ainakaan tehtävä haastavuudellaan pilattu.

No eikös tämä ole hyvän kilpailun merkki. Osallistuminen ei ole haastavaa, pärjääminen on.

Metabolix [13.06.2009 10:47:36]

#

grandi kirjoitti:

Ohjeet kirjoitti:

Joka tulostuksen jälkeen ohjelman pitää joko sulkea tiedosto tai varmistaa datan välittyminen flush-funktiolla tai vastaavalla.

Mitäs tämä tarkoittaa?

Juuri sitä, mitä siinä sanotaankin. Aloittelijalle ymmärrettävämpi vaihtoehto on tuo ensimmäinen eli tiedoston sulkeminen, se pitäisi varmasti osata, jos tiedostot ovat alkuunkaan tuttuja. Flush-funktiota ei edes ole kaikissa kielissä, tai sen käyttö saattaa vaatia ylimääräisiä kikkailuja.

grandi kirjoitti:

Varmaan riittää, kun käyttää esimerkki-paketin funktioita? :D

Sitä varten ne ovatkin. Kaikki esimerkkiohjelmat on testattu.

perinm kirjoitti:

Ei ole ainakaan tehtävä haastavuudellaan pilattu.

Tarkoitus onkin saada paljon osallistujia. Lopullinen pistejakauma riippuu siitä, montako yksinkertaista tekoälyä (kuten esimerkkiohjelmat) kilpailuun osallistuu, ja siitä, miten hyviä parhaat älyt ovat arvaamaan.

Sami345 [13.06.2009 12:00:05]

#

Pitäisikö lisätä sääntö joka kieltää vastustajan siirtojen lukemisen tiedostosta. Kannattaa ottaa huomioon, että C++-esimerkkisi tiedoston avaus funktio tyhjentää tiedoston, joten jos C++-ohjelma ei aloita peliä, ensimmäinen siirto pyyhkiytyy pois tiedostosta. Ovatko sisään tulevat kirjaimet varmasti isolla? Entä pitääkö ohjelman tulostaa isolla? Sakotetaanko siitä, että ohjelma ei sammukaan, kun vastustaja tekee virheen tai peli loppuu?

Antti Laaksonen [13.06.2009 12:42:55]

#

Sami345 kirjoitti:

Pitäisikö lisätä sääntö joka kieltää vastustajan siirtojen lukemisen tiedostosta.

Vastustajan siirtoja ei ole saatavilla missään tiedostossa, josta tekoäly voisi niitä lukea.

Sami345 kirjoitti:

Kannattaa ottaa huomioon, että C++-esimerkkisi tiedoston avaus funktio tyhjentää tiedoston, joten jos C++-ohjelma ei aloita peliä, ensimmäinen siirto pyyhkiytyy pois tiedostosta.

Tiedostoon ksp.out kirjoitetaan vain yksi siirto. Kun tekoälyt A ja B pelaavat vastakkain, ottelu etenee suunnilleen seuraavasti:

1. Kilpailun järjestävä ohjelma tyhjentää tiedoston ksp.out.
2. Kilpailun järjestävä ohjelma ilmoittaa tekoäly A:lle tekoäly B:n siirron viime kierroksella.
3. Tekoäly A kirjoittaa tämän kierroksen siirtonsa tiedostoon ksp.out.
4. Kilpailun järjestävä ohjelma lukee tekoälyn A tämän kierroksen siirron tiedostosta ksp.out.
5. Kilpailun järjestävä ohjelma tyhjentää tiedoston ksp.out.
6. Kilpailun järjestävä ohjelma ilmoittaa tekoäly B:lle tekoäly A:n siirron viime kierroksella.
7. Tekoäly B kirjoittaa tämän kierroksen siirtonsa tiedostoon ksp.out.
8. Kilpailun järjestävä ohjelma lukee tekoälyn B tämän kierroksen siirron tiedostosta ksp.out.
9. Kilpailun järjestävä ohjelma päivittää pistetilanteen tämän kierroksen siirtojen perusteella.
10. Uusi kierros alkaa kohdasta 1.

Sami345 kirjoitti:

Ovatko sisään tulevat kirjaimet varmasti isolla? Entä pitääkö ohjelman tulostaa isolla?

Kumpaankin kysymykseen vastaus on "kyllä".

Sami345 kirjoitti:

Sakotetaanko siitä, että ohjelma ei sammukaan, kun vastustaja tekee virheen tai peli loppuu?

Järkevintä on toteuttaa tekoäly niin, että se sulkeutuu näissä tilanteissa.

Säännöissä mainitaan:

https://www.ohjelmointiputka.net/kilpa.php?tunnus=ksp:

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.

ZcMander [13.06.2009 13:28:39]

#

Satunnaisuudesta vielä sen verran, että saako pseudo-satunnaisuus perustua aikaan? Luulen että ei, koska standardikirjaston satunnaisuuskin perustuu aikaan. Voiko tekoäly käyttää prosessoria vastustajan ajalla?

Ihan mielenkiintoinen kilpailu kyllä, mutta luulen että turhan moni ohjelma arpoo enemmän tai vähemmän vastauksensa.

Teuro [13.06.2009 13:33:09]

#

ZcMander kirjoitti:

Satunnaisuudesta vielä sen verran, että saako pseudo-satunnaisuus perustua aikaan? Luulen että ei, koska standardikirjaston satunnaisuuskin perustuu aikaan.

Säännöissä ilmasitaan minusta ihan selvästi, että tuloksen tulee olla jokaisella ajokerralla samanlainen. Aikaan perustuva satunnaisuus on ulkona kuvioista.

ZcMander kirjoitti:

Ihan mielenkiintoinen kilpailu kyllä, mutta luulen että turhan moni ohjelma arpoo enemmän tai vähemmän vastauksensa.

Silloin turhan moni hylätään...

Antti Laaksonen [13.06.2009 14:04:13]

#

ZcMander kirjoitti:

Satunnaisuudesta vielä sen verran, että saako pseudo-satunnaisuus perustua aikaan?

Ei saa niin, että aika vaikuttaisi tekoälyn toimintaan:

https://www.ohjelmointiputka.net/kilpa.php?tunnus=ksp:

Kun siis kaksi älyä laitetaan ottelemaan keskenään, ottelun on joka kerta kuljettava täsmälleen samalla tavalla riippumatta kellonajasta, tietokoneesta tai säätilasta!

ZcMander kirjoitti:

Luulen että ei, koska standardikirjaston satunnaisuuskin perustuu aikaan.

Yleensä ohjelmoija voi valita siemenluvun kellonajan mukaan, mutta tämä ei ole mitenkään pakollista.

ZcMander kirjoitti:

Voiko tekoäly käyttää prosessoria vastustajan ajalla?

Tämä ei ole sallittua.

os [13.06.2009 14:16:28]

#

Antti Laaksonen kirjoitti:

ZcMander kirjoitti:

Voiko tekoäly käyttää prosessoria vastustajan ajalla?

Tämä ei ole sallittua.

Siinä tapauksessa kyseinen rajoitus olisi periaatteessa hyvä lisätä sääntöihin, sillä prosessorin käyttö vastustajaa odotellessa (sikäli kun vastustajan ajalla toimiminen viittaa tähän) on mahdollista toteuttaa yhdessä säikeessä asynkronisten IO-operaatioiden avulla.

Toisaalta taas en ymmärrä, mitä väliä on sillä, millä ajalla prosessoria käytetään, jos kaikki käytetty prosessoriaika kuitenkin lasketaan.

Antti Laaksonen [13.06.2009 14:44:13]

#

Odotetaan vielä Metabolixin (kilpailun järjestäjän) vahvistusta asiaan. Tämä ei kuitenkaan liene kynnyskysymys tekoälyn toteutuksessa, koska kaiken saman laskennan voi tehdä jo ennen vastustajan siirron odotusta.

Grez [13.06.2009 15:24:05]

#

Kuulostaisi aika hurjalta vaatimukselta, että tekoäly ei saisi käyttää prosessoria lainkaan vastustajan vuorolla.

Toki varmaan monissa kielissä on mahdollista kutsua sleep(1000000) käyttöjärjestelmältä, jolloin suoritus palaa ohjelmaan vasta kun 1000 sekuntia kuluu tai käyttäjältä tulee syötettä. Mutta joissain tarjolla olevissa kielissä saattaa olla ettei tuo toimi ja syötteen odottaminen tehdään kielen muodostamassa loopissa jossa kutsutaan lyhyempiä sleeppejä. Tällöin ohjelma kuluttaisi syötettä odottaessa väkisinkin hieman prosessoria.

Olen samalla kannalla os:n kanssa, että moinen rajoitus olisi lähtökohtaisestikin järjetön. Ja jos joku keksii edes perusteen ko. säännölle, niin olisi silti mielestäni kohtuutonta vaatia, että käyttäjän tulisi selvittää miten Metabolixin käyttämät kääntäjät tulee asioita toteuttamaan. Olisi kiva tehdä peli Javalla ja hävitä sen takia kun Javan roskienkeruu iskee vastustajan vuoron aikana :D

Antti Laaksonen [13.06.2009 15:40:46]

#

Olette oikeassa, kirjoitin vastauksen ajattelematta asiaa riittävästi.

vehkis91 [13.06.2009 18:08:10]

#

Pitääpi osallistua, toss tulikin jo pari toteutustapaa mieleen...

Edit: Voiko tekoälyn tehdä jonkin kaverin kanssa? Pistää vaan sen nimen sitten mukaan...

Grandi [13.06.2009 18:29:02]

#

Jos ohjelma lukee tiedostosta sattumanvaraisesti generoituja valintoja, ohjelman valinnat eivät muutu eri suorituskerroilla ja olisi ilmeisesti sääntöjen mukainen. Vastustaja ei kuitenkaan pysty mitenkään päättelemään ohjelman seuraavaa siirtoa, koska valinnoilla ei olisi mitään loogista suhdetta toisiinsa. En käsitä miksi tälläistä ei ole kielletty, koska on sama muuttuvatko valinnat suorituskerrasta toiseen, kunhan ne vain ovat satunnaisia.

Voi tosin olla, että ymmärsin täysin väärin.

Chiman [13.06.2009 19:11:57]

#

Hyvä kilpailuidea, kiitokset järjestämisestä.

grandi kirjoitti:

En käsitä miksi tälläistä ei ole kielletty

Koska tuollaisella pelitavalla tuskin sijoittuu kärkeen.

jlaire [13.06.2009 19:13:00]

#

grandi kirjoitti:

En käsitä miksi tälläistä ei ole kielletty,

Miksi satunnaisuus pitäisi kieltää?

Täysin satunnainen tekoäly (aina 1/3 todennäköisyys joka vaihtoehdolle) on kieltämättä vähän tylsä, mutta myös päättelevä tekoäly voi käyttää satunnaisuutta apuna. Se voisi esimerkiksi painottaa eri vaihtoehtoja eri tavalla historian perusteella, mutta kuitenkin lopulta arpoa valintansa.

grandi kirjoitti:

koska on sama muuttuvatko valinnat suorituskerrasta toiseen, kunhan ne vain ovat satunnaisia.

Jos kaksi suunnilleen yhtä hyvää ei-determinististä tekoälyä ottelevat keskenään, voittaja voi vaihdella eri ajokerroilla. Mutta kun molemmat ovat deterministisiä, kuka tahansa voi ajaa ohjelmat itse omalla koneellaan ja saada saman tuloksen, joten siitä on turha kiistellä. ("Jos olisit käynnistänyt ohjelmani 42ms myöhemmin, se olisi voittanut!11!!!")

Ohjelman toteutus niin että se toimii samalla tavalla joka ajokerralla ei ole juurikaan vaikeampaa kuin ilman tätä vaatimusta, joten minusta se on ihan hyvä sääntö.

Toivottavasti tällä kerralla saan jonkinlaisen tekoälyn aikaiseksi, vaikkei kps ihan lempipeleihini kuulukaan.

moptim [13.06.2009 19:18:03]

#

Mjaah.. ainakin vertailukohdaks vois pistää täyssatunnaisen valinnan tekevän botin?

jlaire [13.06.2009 19:21:03]

#

moptim kirjoitti:

Mjaah.. ainakin vertailukohdaks vois pistää täyssatunnaisen valinnan tekevän botin?

Sellaista vastaan ei voi saada keskimäärin parempaa tai huonompaa tulosta kuin 50%, joten mielenkiintoa se ei juurikaan lisäisi. Luultavasti joku kuitenkin sellaisella osallistuu, onhan se tietyssä mielessä täydellinen strategia.

Grandi [13.06.2009 19:47:21]

#

funktio kirjoitti:

Luultavasti joku kuitenkin sellaisella osallistuu, onhan se tietyssä mielessä täydellinen strategia.

Jep. Teki sitten miten hyvän tekoälyn tahansa, mahdollisuudet tuollaista vastaan olisi aina samat. Mielestäni ei oikein kuulu kilpailun henkeen, mutta anti olla :P

Dzarg [13.06.2009 20:16:59]

#

Tuossa Java-esimerkkiä testatessani huomasin siinä erään ongelman. Kun tiedoston tyhjentää silloin kun ohjelma on odottamassa syötettä (eli normaaliaikaan), niin seuraavalla kirjoituskerralla ohjelma kirjoittaa kolme nullia tiedoston alkuun ja vasta tämän jälkeen valitun siirron.

Muuta ratkaisua en itse tähän ainakaan keksinyt, kuin tiedoston uudelleenavaamisen jokaisella kirjoituskerralla.

Tietenkin jos peluuttajaohjelma osaa huomioida tämän, niin ongelmaa ei ole, mutta ajattelin ilmoittaa tästä nyt kuitenkin.

Grez [13.06.2009 21:33:52]

#

Jos et halua avata uudestaan, niin kokeile seekata tiedoston alkuun...

User137 [13.06.2009 21:53:37]

#

Askarruttaa tuo luuppi jolla vastustajan siirrot luetaan. Pascal esimerkki lukee näin:

function lue: Char;
var m: Char;
begin
	ReadLn(m);
	lue := m;
end;

Ja tuo laitettu vaan 1000 kertaa for-silmukkaan... Mitä jos vastustajan vastaamisessa kestää pitempään kuin mitä toisella tekoälyllä? Ei Readln() käsittääkseni jää odottamaan että uusi rivi ilmestyy tiedostoon.

Edit: Ups, eihän tuo lue edes tiedostoa... Ideana on siis että pääohjelma kirjottaa sen tiedostosta konsoliin ja "painaa enteriä"?

pipo [13.06.2009 21:58:16]

#

funktio kirjoitti:

moptim kirjoitti:

Mjaah.. ainakin vertailukohdaks vois pistää täyssatunnaisen valinnan tekevän botin?

Sellaista vastaan ei voi saada keskimäärin parempaa tai huonompaa tulosta kuin 50%, joten mielenkiintoa se ei juurikaan lisäisi. Luultavasti joku kuitenkin sellaisella osallistuu, onhan se tietyssä mielessä täydellinen strategia.

Mulla on semmonen vahva tunne, että jos vastustaja tekee ksp-valintansa satunnaisesti, vaikka ottamalla siemenen tosta kierrosluvusta tms, niin eikös se todennäköisyys noille kolmelle vaihtoehdolle muutu joka kierroksella? Siis siten että pystyisin arvaamaan vastustajan seuraavan valinnan.

Arpominen on mustakin tosi huono taktiikka, mutta eiköhän joku semmosellakin osallistu.

vehkis91 [13.06.2009 22:00:49]

#

Nonni äly palautettu.

jlaire [13.06.2009 22:31:36]

#

pipo kirjoitti:

Mulla on semmonen vahva tunne, että jos vastustaja tekee ksp-valintansa satunnaisesti, vaikka ottamalla siemenen tosta kierrosluvusta tms, niin eikös se todennäköisyys noille kolmelle vaihtoehdolle muutu joka kierroksella? Siis siten että pystyisin arvaamaan vastustajan seuraavan valinnan.

No jos käytetyt (pseudo)satunnaisluvut ja ohjelman toiminta ovat yleisessä tiedossa ennen kisaa, niin joka kierroksella tehty valinta tehdään todennäköisyydellä 1 ja vastustaja voi voittaa joka pelin. Mutta tietenkään sitä ei kerrota etukäteen. Jos käytetty algoritmi on hyvä, ei valintoja voi päätellä etukäteen.

pipo kirjoitti:

Arpominen on mustakin tosi huono taktiikka

Huono ja huono, se on sentään ainoa strategia jota on mahdoton voittaa.

Sami [13.06.2009 22:36:21]

#

funktio kirjoitti:

No jos käytetyt (pseudo)satunnaisluvut ja ohjelman toiminta ovat yleisessä tiedossa ennen kisaa, niin joka kierroksella tehty valinta tehdään todennäköisyydellä 1 ja vastustaja voi voittaa joka pelin. Mutta tietenkään sitä ei kerrota etukäteen. Jos käytetty algoritmi on hyvä, ei valintoja voi päätellä etukäteen.

Mikä estäisi kovakoodaamasta sinne koodiinsa täydellisellä satunnaislukugeneraattorilla (todennäköisyys jokaiselle alkiolle täsmälleen sama ja kaikki arvotut arvot ovat täysin toisistaan riippumattomia) arvottuja arvoja 1000 kappaletta, jolloin edellisistä arvoista ei pystyisi millään päättelemään tulevia arvoja.

jlaire [13.06.2009 22:42:36]

#

Sami kirjoitti:

Mikä estäisi kovakoodaamasta sinne koodiinsa täydellisellä satunnaislukugeneraattorilla (todennäköisyys jokaiselle alkiolle täsmälleen sama ja kaikki arvotut arvot ovat täysin toisistaan riippumattomia) arvottuja arvoja 1000 kappaletta, jolloin edellisistä arvoista ei pystyisi millään päättelemään tulevia arvoja.

Ei mikään, taisin ymmärtää pipon pointin väärin. Sain kohdasta "ottamalla siemenen tosta kierrosluvusta" sen käsityksen, että vastustaja tietää tarkalleen, miten "satunnaiset" valinnat tehdään ja pystyy näin "arvaamaan" ne, ja yritin sanoa, että tietenkään sitä ei tiedetä.

Dzarg [13.06.2009 22:58:01]

#

Grez kirjoitti:

Jos et halua avata uudestaan, niin kokeile seekata tiedoston alkuun...

Näinhän se tosiaan menee, en ollut Javassa seekkaustoimintoa nähnyt tätä aikaisemmin vaan, mutta oppi nyt sitten senkin.

Kuitenkin pointtina oli myös tuoda yleiseen tietoon tuo ongelma siinä mielessä, jos joku suoraan testaamatta tuota koodia käyttää ja näin mahdollisesti tulisi sitten diskatuksi.

Daeron [14.06.2009 02:02:09]

#

Mitä tapahtuu jos kumpikin tekee samalla kierroksella virheen?

Grandi [14.06.2009 02:05:42]

#

Daeron kirjoitti:

Mitä tapahtuu jos kumpikin tekee samalla kierroksella virheen?

Tuolla kilpailusivullahan se kerrotaan:

Kilpailusivu kirjoitti:

Jos kuitenkin molemmat tekoälyt tekevät virheen samalla kierroksella, loput pisteet jätetään jakamatta.

pipo [14.06.2009 10:23:18]

#

funktio kirjoitti:

moptim kirjoitti:

Mjaah.. ainakin vertailukohdaks vois pistää täyssatunnaisen valinnan tekevän botin?

Sellaista vastaan ei voi saada keskimäärin parempaa tai huonompaa tulosta kuin 50%, joten mielenkiintoa se ei juurikaan lisäisi. Luultavasti joku kuitenkin sellaisella osallistuu, onhan se tietyssä mielessä täydellinen strategia.

Köh, siis että jos moptim pelaa satunnaisilla valinnoilla, ja minä pelaan aina kivellä, niin eihän mun voiton todennäköisyys ole lähelläkään 50 prosenttia, eikö niin.
Lisäksi jos moptim pelaa satunnaisesti, ja on viimeisten vaikka 50 kierroksen aikana arponut itselleen eniten papereita, niin eihän mun kannata valita seuraavaksi saksia vaan joku muu. Johtuen siis mun tunneperäisestä arvauksesta että tilastot tasoittuu kiven ja saksien suuntaan. Onhan hyvin todenäköistä että kaikkia vaihtoehtoja arvotaan suunnilleen saman verran ja samassa suhteessa koko ottelun ajan, vai?
Valinnathan voi kyllä arpoa etukäteen, ennen kilpailuun osallistumista. Ja niitä voi sörkkiä mielensä mukaan, mutta pointti siis tossa todennäköisyyslaskennassa.

arcatan [14.06.2009 10:43:17]

#

Olennainen kysymyshän on, että saako yksi henkilö osallistua kilpailuun yli yhdellä tekoälyllä?

Teuro [14.06.2009 10:49:06]

#

Ei kai toi kauhean olennainen kysymys ole? Mutta jokainen osallistuu yhdellä tekoälyllä tähän kuten kaikkiin muihinkin kilpailuihin.

Grez [14.06.2009 10:50:52]

#

pipo kirjoitti:

Köh, siis että jos moptim pelaa satunnaisilla valinnoilla, ja minä pelaan aina kivellä, niin eihän mun voiton todennäköisyys ole lähelläkään 50 prosenttia, eikö niin.

Kyllä jos toinen pelaa täysin satunnaisesti, niin täysin riippumatta vastustajan strategiasta kumpikin saa voitoista 50%. (Sitä suurempi varianssi, mitä vähemmän kierroksia)

tkok [14.06.2009 12:12:43]

#

pipo kirjoitti:

Johtuen siis mun tunneperäisestä arvauksesta että tilastot tasoittuu kiven ja saksien suuntaan.

Todennäköisyydet eivät millään tavalla "tasoitu". Vaikka olisi tullut 100 kiveä putkeen on yhtä todennäköistä että seuraavilla kierroksilla tulee kiviä, saksia tai papereita.

Grez kirjoitti:

Kyllä jos toinen pelaa täysin satunnaisesti, niin täysin riippumatta vastustajan strategiasta kumpikin saa voitoista 50%. (Sitä suurempi varianssi, mitä vähemmän kierroksia)

Onneksi tälläisellä ei pääse kuin keski sijoituksille kilpailussa. Koska päättelevistä tekoälyistä parempi vie pisteet niiden keskisissä kamppailuissa. Toki jos kaikki tekoälyt olisivat "arpovia", ei kukaan erottuisi joukosta.

Vielä lopuksi, mistä löytyy yleiset putkakilpailusäännöt, mm. siitä että saa osallistua vain yhdellä tekoälyllä?

Gwaur [14.06.2009 12:21:25]

#

Pelin päättymisajankohta ei liene satunnaisesti valittu.

vehkis91 [14.06.2009 12:37:40]

#

Peli kestää 1000 kierrosta, eli ei ole satunnaisesti valittu.

Edit, vai tarkoitatko kellon aikaa tai vastaavaa?

Metabolix [14.06.2009 13:52:28]

#

Tässä seuraa tarkennuksia joihinkin esitetyihin kysymyksiin:

lainaus:

Sakotetaanko siitä, että ohjelma ei sammukaan, kun vastustaja tekee virheen tai peli loppuu?

Esimerkki: 3. kierroksella äly A tekee virheen ja äly B tulostaa merkin K. Sääntöjen mukaan tässä vaiheessa äly B on voittanut pelin, koska vastustaja teki virheen. Sitä ei siis varsinaisesti sakoteta, vaikka se tekisi seuraavalla kierroksella virheen, koska seuraavaa kierrosta ei enää pelata. (Tarkkaan ottaen äly tapetaan väkisin muutaman sekunnin kuluttua ottelun päättymisestä, jos se ei sulkeudu itse.) Kuten Antti sanoi, kannattaa kuitenkin sulkea äly itse — vaiva ei ole suuri.

lainaus:

Pelin päättymisajankohta ei liene satunnaisesti valittu.

Ei, peli kestää tasan 1000 kierrosta PAITSI jos ottelu keskeytetään virheen takia.

lainaus:

Voiko tekoäly käyttää prosessoria vastustajan ajalla?

Aikaa ei ole erityisesti jaettu eri älyjen aikoihin, vaan tarkistuksessa käytetään käyttöjärjestelmän kirjanpitoa siitä, kuinka kauan kukin ohjelma on käyttänyt prosessoria. Ohjelma voi siis laskea periaatteessa aivan milloin haluaa, mutta aikaraja on ehdoton. Silloin, kun ohjelma lukee syötettä normaaleilla funktioilla, käyttöjärjestelmä jättää sen automaattisesti odottamaan dataa.

lainaus:

Ideana on siis että pääohjelma kirjottaa sen tiedostosta konsoliin ja "painaa enteriä"?

Kyllä, ohjelma saa syötteen täsmälleen samalla tavalla kuin silloin, kun käyttäjä ajaa sen itse komentoriviltä. Ainakin Linuxissa tämä on erittäin helppo toteuttaa.

lainaus:

Kannattaa ottaa huomioon, että C++-esimerkkisi tiedoston avaus funktio tyhjentää tiedoston.

lainaus:

Tuossa Java-esimerkkiä testatessani huomasin siinä erään ongelman. – –

Ohjelman ei tarvitse kantaa huolta tällaisista asioista, eikä kilpailuohjelma missään vaiheessa varsinaisesti tyhjennä tiedostoa. Tiedoston saa ylikirjoittaa alusta asti, sitä saa jatkaa lopusta (append), tai sen voi pitää auki, kuten esimerkissä. Tässä tapauksessa lopputulos on loihdittu samaksi.

Asian tekninen tausta: Alunperin oli tarkoitus, että syötettä sekä luettaisiin että kirjoitettaisiin kuten komentoriviohjelmassa yleensä ja standardivirrat ohjattaisiin kilpailuohjelmalle putkien kautta. Testeissä kuitenkin ilmeni, että uudelleenohjatuissa virroissa tuloste ei tule kilpailuohjelmalle asti ilman flush-kutsua. Joissakin kielissä flush-funktio on hankalan kikkailun takana, joten oli yksinkertaisinta siirtää tulostus tiedostoon, jolloin tiedoston sulkeminen ajaa saman asian. Tulostetiedosto on kuitenkin oikeasti suunnitelman mukaan putki.

lainaus:

Vielä lopuksi, mistä löytyy yleiset putkakilpailusäännöt, mm. siitä että saa osallistua vain yhdellä tekoälyllä?

Yleisiä sääntöjä ei ole laadittu. En kuitenkaan usko, että moni jaksaa kirjoittaa useampaa (erilaista) älyä samaan kilpailuun. Voin peluuttaa ylimääräisiäkin älyjä, jos siinä on jotain järkeä (omaperäinen idea tms. kiinnostavaa), mutta varsinaiseen kilpailuun voi osallistua vain yhdellä tekoälyllä.

Jos jokin kysymys jäi vielä huomaamatta tai epäselväksi, saa kysyä lisää. Viestejä olikin tullut melkoisesti.

Chiman [14.06.2009 14:07:16]

#

Lainaus kilpailuohjeista:

lainaus:

Kilpailun puolivälissä, 28.6. tai pian sen jälkeen, pelataan muutama ottelu niiden älyjen kesken, jotka on jo silloin lähetetty. Tulokset julkaistaan, ja osallistujat voivat vielä parannella tekoälyjään ennen lopullista kilpailua.

Eli tässä puolivälin mittelössä ilmeisesti julkistetaan ottelujen siirtosarjat ja pisteytys. Ei varmaankaan tekoälyjen koodeja? Näin oletan, varmistan vain.

Gwaur [14.06.2009 14:33:30]

#

Niin, tarkoitin siis kilpailun loppumiskellonaikaa. :P

Metabolix [14.06.2009 15:02:05]

#

Chiman kirjoitti:

Eli tässä puolivälin mittelössä ilmeisesti julkistetaan ottelujen siirtosarjat ja pisteytys. Ei varmaankaan tekoälyjen koodeja?

Juuri näin. Koodien julkaiseminen taitaisi viedä kilpailusta pohjan.

vehkis91 [14.06.2009 15:08:34]

#

Onko monta älyä jo ilmottautunut? Tosin nyt on vasta 2. päivä niin ei luulis hirveän montaa olevan.

Grandi [14.06.2009 15:13:14]

#

Johonkin voitaisiin listata jo-osallistuneiden tekoälyjen nimet, että tietää sitten mitä nimeä ei itse valitse.

PS. Voisko joku ylläpitäjä vaihtaa nimimerkkini ensimmäisen kirjaimen isoksi? Siis grandi -> Grandi.

EDIT: Kiitos :)

vehkis91 [14.06.2009 15:19:41]

#

tuo grandin ehdotus on kyll ihan hyvä, ne nimet vois listata vaikka sinne kilpailu sivun alalaitaan.

Antti Laaksonen [14.06.2009 15:30:45]

#

Grandi kirjoitti:

Voisko joku ylläpitäjä vaihtaa nimimerkkini ensimmäisen kirjaimen isoksi?

Toiveesi on toteutunut.

FooBat [14.06.2009 18:10:46]

#

Metabolix kirjoitti:

Chiman kirjoitti:

Eli tässä puolivälin mittelössä ilmeisesti julkistetaan ottelujen siirtosarjat ja pisteytys. Ei varmaankaan tekoälyjen koodeja?

Juuri näin. Koodien julkaiseminen taitaisi viedä kilpailusta pohjan.

Protip kaikille random älyn tekijöille: Kannattaa vaihtaa ohjelman seed-luku sen jälkeen kun puolivälin tulokset ja siirtosarjat on julkaistu.

vehkis91 [14.06.2009 18:50:23]

#

Niin, julkaistaanko niiden älyjen nimiä, jotka on jo lähettetty kisaan?

Metabolix [14.06.2009 21:33:42]

#

Nyt kilpailusivulla on lista älyistä osallistumisohjeen lopussa.

Juhko [15.06.2009 01:03:27]

#

Juup, pitääpä yrittää osallistua.

Opassivu kirjoitti:

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

:)

jlaire [15.06.2009 09:08:49]

#

Metabolix kirjoitti:

Chiman kirjoitti:

Eli tässä puolivälin mittelössä ilmeisesti julkistetaan ottelujen siirtosarjat ja pisteytys. Ei varmaankaan tekoälyjen koodeja?

Juuri näin. Koodien julkaiseminen taitaisi viedä kilpailusta pohjan.

Kannattaakohan siirtosarjojakaan julkaista? Niitä tutkimalla saattaisi saada turhan paljon selville.

Metabolix [15.06.2009 09:18:02]

#

funktio kirjoitti:

Kannattaakohan siirtosarjojakaan julkaista? Niitä tutkimalla saattaisi saada turhan paljon selville.

Kukaan ei pakota lähettämään tekoälyä vielä välivaiheeseen, kyseessä on kilpailijan oma päätös. Toisaalta jos ei lähetä tekoälyään, ei myöskään saa selville, miten juuri se pärjää muita vastaan. Sikäli olet kyllä oikeassa, että jos tekoälystä tulee lopultakin hyvin yksinkertainen, ei ehkä kannata lähettää sitä ennen kilpailun puoliväliä, etteivät toiset saa kehitettyä juuri sitä vastaan täydellistä algoritmia.

Tarkennan vielä varmuuden vuoksi, että välierän tuloksia ei lasketa lopullisiin pisteisiin. Välivaiheeseen voi siis huoletta lähettää tekoälyn, jonka tarkoituksena on vain testata muiden toimintatapoja tai johtaa kehitystä harhaan.

jalski [15.06.2009 11:41:33]

#

Miksi rajoitus, että ohjelman pitää toimia yhdessä säikeessä?

Metabolix [15.06.2009 11:44:01]

#

Oikea taikatemppu löytyikin aivan yllättäen, joten seuraa muutos sääntöihin: Ohjelma tulostaa vastauksensa tavallisilla tulostusfunktioilla. Ohjelma voi siis tulostaa komentorivillä ruudulle. Tiedostoja tai muita ylimääräisiä kikkoja ei tarvita. (Säännöissä aiemmin mainittu toimintatapa on yhä sallittu, jos joku välttämättä haluaa käyttää sitä.)

jalski kirjoitti:

Miksi rajoitus, että ohjelman pitää toimia yhdessä säikeessä?

Millaista hyötyä useasta säikeestä tässä tapauksessa olisi?

Yhdessä säikeessä ohjelma toimii paremmin deterministisesti, monisäikeisen ohjelman lopputulokseen voisivat vaikuttaa säikeiden suoritusten vaihtelevat ajoitukset. Yksisäikeisen ohjelman toimintaa on myös helpompi valvoa kilpailutilanteessa.

vehkis91 [15.06.2009 11:59:03]

#

Eli ei tarvitse enään tiedostonkäsittelyä missään vaiheessa?
Koodi vähenee mukavasti, ku voi poistaa tiedostonkäsittelyn... :P

User137 [15.06.2009 13:10:16]

#

No juu on jo nyt vähän paranneltu älyä, pitää sitten lähettää toiselle kierrokselle uuden datan kanssa.

ps. Tuota on tosi hankala voittaa ainakaan itse :) Miks? No ei ainakaan ole 100% random.

jalski [15.06.2009 13:51:17]

#

Ajatuksissa olisi idea-asteella toteutus, mikä olisi ehkä luontevampi toteuttaa monisäikeisenä.

Tarkoitus olisi saada ohjelma pelaamaan eri tekoälyjä vastaan eri tavalla. Ohjelman seuraava siirto riippuisi edellisten siirtojen historiasta muutaman neuroverkon avulla. ensimmäinen neuroverkko palauttaisi tiedon, onko muistissa vastaavaa siirtokuviota, antaisi bittivirheen ja palauttaisi lähimmän vastaavuuden muistista. Oma säie opettaisi neuroverkkoa tarvittaessa (jos siirtokuviota ei löydy muistista). Toinen neuroverkko tallentaisi ja palauttaisi siirtokuviota mahdollisesti seuraavan siirron. Kolmas neuroverkko palauttaisi edellisen verkon avulla ennakoidun siirron peittoavan tuloksen.

Metabolix [15.06.2009 14:13:47]

#

jalski kirjoitti:

Ajatuksissa olisi idea-asteella toteutus, mikä olisi ehkä luontevampi toteuttaa monisäikeisenä.

Millä tavalla luontevampi? Minusta suunnitelmassasi on kolme peräkkäistä vaihetta, jotka ovat täysin riippuvaisia toisistaan. Näiden suorittaminen epäsynkronisesti rikkoisi deterministisyyttä koskevaa sääntöä. Ohjelmasta tulee myös varmasti lyhyempi ja tehokkaampi, kun siihen ei tarvitse sotkea lukituksia ja synkronointeja.

jalski [15.06.2009 17:55:28]

#

Kun tarkkaan mietit, niin kaikkien vaiheiden ei tarvitse olla peräkkäisiä:

Ensimmäisen neuroverkon tarkoitus olisi vain toimia muistina kilpailevan tekoälyn aiemmista peräkkäisistä siirroista. Verkkoon tallennetaan esim. vastapuolen tekemät kolmen peräkkäisen siirron sarjat bitti-vektoreina (olikohan Hoppfield-verkko?). Verkolle, kun syöttää vastapuolen kolme edellistä siirtoa palauttaa se joko alkuperäisen vektorin tai verkon muistissa sitä lähimpänä olevan sekä bittivirheen.

Säie, joka on vastuussa ensimmäisen verkon opettamisesta voi toimia taustalla, koska käyttäisin jokatapauksessa ensimmäisen verkon palauttamaa vektoria (verkon muistissa lähimpänä oleva vektori) toisen neuroverkon syötteenä.

Toisen neuroverkon (Hebbian-verkko?)tehtävänä olisi siis tallentaa ja palauttaa muistissa olevaa peräkkäistä siirtosarjaa "todennäköisesti" seuraava siirto.

Toista neuroverkkoa opettava säie pitäsi synkronoida muiden kanssa, jotta opetus tapahtuisi oikea aikaisesti ilman kilpailutilanteita.

Kolmas neuroverkko (Hebbian-verkko) olisi vastuussa oikean valinnan tekemisestä toisen verkon palauttaman syötteen mukaan. Tämä verkko olisi opetettu valmiiksi palauttamaan oikean vaihtoehdon (esim. kivi -> paperi).

Teen ohjelmointityöt yleensä Infernon Limbolla ja säikeiden synkronisoinnit saa hoidettua mukavasti käyttämällä kanavia apuna. C:llä ohjelmoitaessa tykkään eniten Plan 9 -käyttöjärjestelmän mallista: http://lsub.org/who/nemo/9.intro.pdf

Metabolix [15.06.2009 18:59:17]

#

jalski kirjoitti:

Säie, joka on vastuussa ensimmäisen verkon opettamisesta...

... täytyy synkronoida niin, että opettaminen on hoidettu siinä vaiheessa, kun verkkoa seuraavan kerran tarvitaan. Siispä opettamisen voi aivan hyvin tehdä kokonaan joko siinä vaiheessa, kun opetettava asia on selvillä, tai silloin, kun verkkoa taas tarvitaan.

jalski kirjoitti:

Kolmas neuroverkko...

... on silkkaa ajanhukkaa, kun saman asian voi tehdä lyhyellä ehtolauseella. On siis aivan turha väittää, että sille tarvitsisi säikeen.

Et ole vieläkään tainnut ajatella asiaa loppuun asti. Verkkojen opettamisen voit joka tapauksessa aloittaa aina vasta, kun saat tietää vastustajan siirron (sitähän niille opetetaan), ja opettamista seuraa heti seuraavan oman siirron valinta. Käytännössä siis verkon 2 opetus voi pyöriä taustalla tasan sen aikaa, kun verkosta 1 haetaan tulosta, ja verkon 1 opetus taas ei lainkaan. Korjaa toki ja piirrä kaavio, jos olen väärässä.

Säikeillä...

tulosta
lue
aloita opetussäie 1
aloita opetussäie 2
odota opetusta 1
laske verkon 1 tulos
odota opetusta 2
laske verkon 2 tulos

... vai ilman?

tulosta
lue
opeta verkkoa 1
laske verkon 1 tulos
opeta verkkoa 2
laske verkon 2 tulos

Yrität minusta nyt tehdä yksinkertaisesta asiasta hirveän mutkikkaan.

Grandi [16.06.2009 10:58:48]

#

Metabolix kirjoitti:

Oikea taikatemppu löytyikin aivan yllättäen, joten seuraa muutos sääntöihin: Ohjelma tulostaa vastauksensa tavallisilla tulostusfunktioilla. Ohjelma voi siis tulostaa komentorivillä ruudulle. Tiedostoja tai muita ylimääräisiä kikkoja ei tarvita. (Säännöissä aiemmin mainittu toimintatapa on yhä sallittu, jos joku välttämättä haluaa käyttää sitä.)

No miten kommunikointi vastustajabotin kanssa tapahtuu? Ei kai se osaa komentoriviltä niitä siirtoja lukea / ei kai se osaa syöttää niitä valintoja inputin kautta?

Teuro [16.06.2009 11:01:05]

#

Grandi kirjoitti:

No miten kommunikointi vastustajabotin kanssa tapahtuu? Ei kai se osaa komentoriviltä niitä siirtoja lukea?

Osaahan ohjelma nyt syötepuskurin lukea? Esimerkkiohjelmissa oli ainakin oikein hyvät esimerkit lukemiseen ja tulostamiseen.

Grandi [16.06.2009 11:04:41]

#

Joo, siltä vaikuttaa. Katsoin nuo esimerkit hieman hutaisten.

jalski [16.06.2009 16:00:17]

#

Mielestäni, jos halutaan tekoäly-ohjelmalla matkia ihmisaivojen toimintaa on ongelmanratkaisu luontevampaa jakaa prosesseihin, jotka toimivat itsenäisesti ja keskustelevat toistensa kanssa.

Samasta syystä käytän mielummin kolmatta neuroverkkoa lopullisen vastauksen saamiseen yksinkertaisen vertailun sijaan.


Alla hahmotelma toteutettuna Infernolle Limbolla käyttäen säikeitä ja kanavia. '+'-merkillä on merkattu liikenteen suunta kanavassa.

--+input--+monitor--+net1--+net2--+net3--+
             +        |
             |        |
             |        +
             |    train_net1--+train_net2
             |                      +
             |                      |
             *----------------------*

Grandi [17.06.2009 22:59:32]

#

Sääntöjen kirjoittaja kirjoitti:

Valmista dataa saa olla enintään yksi megatavu.

Tarkoittaako tämä erillisiä datatiedostoja, vai myös lähdekoodia?

Grez [17.06.2009 23:38:53]

#

Tuskinpa lähdekoodin koko on niin suuri, että sillä on suurtakaan merkitystä tuohon maksimimäärään, vaikka megatavuraja koskisikin datan ja lähdekoodin yhteismäärää. Muutenhan lähdekoodiin voisi helposti sisällyttää rajattomasti dataa.

Metabolix [18.06.2009 11:15:49]

#

Grandi kirjoitti:

Sääntöjen kirjoittaja kirjoitti:

Valmista dataa saa olla enintään yksi megatavu.

Tarkoittaako tämä erillisiä datatiedostoja, vai myös lähdekoodia?

Rajoitus koskee dataa. Jos kuitenkin kooditiedosto sisältää merkittäviä datamääriä, sekin lasketaan kokonaan mukaan, jottei sääntöä pääse kiertämään.

jalski [18.06.2009 12:04:16]

#

Toteutin ja testasin eilen kolme kappaletta oman ideoimani toteutuksen tarvitsemaa neuroverkkoa. Yhden valmiiksi opetetun ja kaksi pelin aikana oppivaa verkkoa.

Jos kilpailukoneelle olisi mahdollista saada Inferno asennettua, niin saattaisin innostua tekemään ohjelman, mikä täyttää kilpailussa asetetut vaatimukset.

Metabolix [18.06.2009 17:35:49]

#

jalski kirjoitti:

Jos kilpailukoneelle olisi mahdollista saada Inferno asennettua...

Se ei näköjään ollut mahdollista (asennusohjelma jumittui täysin), ja muutenkin epäilen, että mielekäs ajanotto ja ohjelman toiminnan valvonta olisi tuollaisessa ympäristössä mahdotonta (ts. vaatisi huomattavan määrän erityisesti siihen tarkoitukseen kirjoitettuja apuvälineitä, ehkä paljon enemmän kuin tähän mennessä yhteensä).

Antti Laaksonen [18.06.2009 20:46:39]

#

Voisitko jalski harkita jonkin muun työkalun käyttöä, koska olisi kuitenkin hauskaa saada sinunkin älysi mukaan kilpailuun?

Metabolixin sallimaa kielivalikoimaa ei voi arvostella suppeaksi:

https://www.ohjelmointiputka.net/kilpa.php?tunnus=ksp:

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 ajaa .Net-ohjelmia.

jalski [18.06.2009 20:52:04]

#

Infernon linux-version asennusohjelma ei vissiin tällä hetkellä toimi.

Osoitteessa: http://code.google.com/p/inferno-npe/downloads/list

Löytyy paketit Infernon svn 408 buildille linuxille ja windowssille. Lisäksi tarvitset fontit virallisesta asennuspaketista.

Infernolle kirjoitetun ohjelman voi ajaa shellistä suoraan käynnistämällä: emu ohjelma

FooBat [20.06.2009 18:52:27]

#

Miten kilpailun voittajat valitaan? Arvostellaanko jokainen kaksinpelisarja voitto-tappio-tasapeli tyyliin vai lasketaanko kaikkien pelien voitettujen käsien yhteismäärä kokonaistulokseksi?

Moiman [21.06.2009 11:46:41]

#

Julkaistaako lähdekoodit kaikkien saataville välivaiheessa?

trilog [21.06.2009 12:20:15]

#

Mielenkiintoinen kilpailu kieltämättä. Katsotaan saanko minkäänlaista älyä aikaiseksi. Kovin haastehan tässä on kehittää tekoäly, joka pystyy ennakoimaan ja "tietämään" vastustajan seuraavan siirron.

Moiman kirjoitti:

Julkaistaako lähdekoodit kaikkien saataville välivaiheessa?

Metabolix kirjoitti:

Chiman kirjoitti:

Eli tässä puolivälin mittelössä ilmeisesti julkistetaan ottelujen siirtosarjat ja pisteytys. Ei varmaankaan tekoälyjen koodeja?

Juuri näin. Koodien julkaiseminen taitaisi viedä kilpailusta pohjan.

Metabolix [21.06.2009 19:02:11]

#

FooBat kirjoitti:

Miten kilpailun voittajat valitaan?

Voitettujen käsien määrä ratkaisee. Tämä lienee reiluin arvostelu, koska onhan 900 kättä voittanut parempi kuin 501 kättä voittanut, vaikka kumpikin näistä voittaakin yksittäisen ottelun. (Varsinaisten käsien lisäksi tietenkin lasketaan vastustajan virheen takia implisiittisesti voitetut kierrokset.)

Metabolix [26.06.2009 11:28:51]

#

Muistutus: Kilpailun välikierrokselle ehtii mukaan sunnuntai-iltaan asti. Pelidata julkaistaan maanantaina. Vain pelien kulku ja lopputulokset julkaistaan, ei minkäänlaisia virallisia välituloksia tai muita tilastoja.

Jos johonkin ilmoittautumis- tai päivitysviestiin ei ole tullut vastausta, nyt on sopiva hetki lähettää viesti uudestaan.

Metabolix [29.06.2009 00:28:53]

#

Välierät on nyt pelattu ja siirtosarjat julkaistu. Kiitos jo tässä vaiheessa kaikille osallistujille: näyttää, että tästä tulee oikein hyvä kilpailu.

Dzarg [29.06.2009 08:46:13]

#

Ohhoh, mukava nähdä tulokset. Vähän liian ylimielisesti tuli ennen kilpailua ajateltua, että tuskin oma äly yli 50:llä pisteellä häviäisi kenellekkään.
Shotgun ja Spock sitten osoittivat toisin.

Jos laskukaava on kuten ajattelin, eli ainoastaan voitetut erät lasketaan, niin näyttäisi oma Saikyou sijoittuvan jopa kolmanneksi näiden kahden jälkeen, mutta suurella erolla.

Oliko laskukaava näin, vai lasketaanko kenties nuo otteluiden erotukset yhteen?

Metabolix [29.06.2009 09:37:50]

#

Dzarg kirjoitti:

Oliko laskukaava näin, vai lasketaanko kenties nuo otteluiden erotukset yhteen?

Voitoista saa pisteitä ja häviöistä sakotetaan. Tekoälyn esim pisteet saadaan siis ottamalla hakemistosta esim jokaisesta tiedostosta se rivi, jolla kerrotaan kyseisen tekoälyn tulos muodossa esim: -25. Kilpailussa jaetaan siis yhteensä nolla pistettä. :)

Dzarg [29.06.2009 10:24:33]

#

Metabolix kirjoitti:

Voitoista saa pisteitä ja häviöistä sakotetaan. Tekoälyn esim pisteet saadaan siis ottamalla hakemistosta esim jokaisesta tiedostosta se rivi, jolla kerrotaan kyseisen tekoälyn tulos muodossa esim: -25. Kilpailussa jaetaan siis yhteensä nolla pistettä. :)

Selvä, laskin pisteet nyt uudestaan tuolla tavalla. Tässä yhteispisteet välierästä. Jos syystä tai toisesta tarkoituksella yhteispisteitä ei haluttu julkaista, niin voin poistaa nuo. Toisaalta ainakin suurin osa täällä varmaankin pystyy koodinpätkällä ne laskemaan itsekkin.

Grandi [29.06.2009 15:35:21]

#

Shotgun tosiaan vei. Itse en pärjännyt kovin hyvin, vaikka olisin kyllä ollut kärjen tuntumassa mikäli pisteet olisi laskettu voittoprosentista. Nytpä pitääkin ahkeroida tämä loppuaika, kun tietää vähän minkä tyyppisiä tekoälyjä on vastassa.

FooBat [29.06.2009 20:35:47]

#

Kyllä tästä vielä ihan hyvä kilpailu saadaan vaikka toi mun Shotgun vielä tässä vaiheessa veikin pidemmän korren. Spokissa on selvästi aineista ja noi kolmostilaakin kärkkyvätkin saattavat parantaa tulostaan merkittävästi.

Voisi siihen lopulliseen kilpailuun pistää mukaan pari kilpailun ulkopuolista tyhmää pelaajaa, jottei toi jokseenkin satunnainen 'typerys' pärjäisi noinkin hyvin :) Ne auttaisivat heikompia pelaajia saamaan enemmän pisteitä verrattuna satunnaiseen bottiin. Oli tuolla kyllä nytkin muutama pelaaja, jotka ajoivat tuota virkaa, mutta oletan, että tämä muuttuu ennen lopullisia pelejä.

Metabolix [29.06.2009 21:28:31]

#

Dzarg kirjoitti:

Jos syystä tai toisesta tarkoituksella yhteispisteitä ei haluttu julkaista – –

Laiskuus... Kuten sanoit, eiköhän täällä jokainen osaa laskea ne viime kädessä vaikka kynällä ja paperilla.

FooBat kirjoitti:

Voisi siihen lopulliseen kilpailuun pistää mukaan pari kilpailun ulkopuolista tyhmää pelaajaa – –

Tämä on hyvä ehdotus, yritän keksiä jotain. Yksi tällainen tapaus onkin jo mukana.

Tärkeintä kilpailussa on tietenkin pitää kaikki koodauskykyiset kesälomalla visusti sisällä, ettei tule raitisilmamyrkytystä tai auringonpistosta.

vehkis91 [29.06.2009 22:21:19]

#

Pitää näyttävästi parannella paljon älyä, ku jää solmuun tollasiin "älyttömiin" älyihin. -.-

tesmu [01.07.2009 13:12:29]

#

Onkos jossakin jaossa testiohjelmaa jolla voi kilpailuttaa omaa älyä itsensä kanssa?

Metabolix [01.07.2009 13:26:27]

#

tesmu kirjoitti:

Onkos jossakin jaossa testiohjelmaa jolla voi kilpailuttaa omaa älyä itsensä kanssa?

Ei ole, ja tällaisesta ohjelmasta tuskin olisi hyötyäkään, koska sääntöjen äly pelaa itsensä kanssa aina tasan. Vastaavaan lopputulokseen pääsee siis niin, että syötteen lukemisen sijaan käyttää aina äskeistä tulostettaan:

tulosta(valinta)
vastustaja = valinta

Jos koneella on ohjelma socat, sillä voi käynnistää pelin tällaisella komennolla:

socat EXEC:'ajokomento' EXEC:'toinen_komento'

Tai näin, jos äskeinen ei toimi:

socat EXEC:'ajokomento',pty,echo=0,raw EXEC:'toinen_komento',pty,echo=0,raw

Tekoäly voi vaikka kirjoittaa siirtonsa tiedostoon, jotta niitä voi tarkastella jälkikäteen. Jos tiedostoon kirjoittaminen ei miellytä ja käytössä on lisäksi ohjelma nimeltä tee, komentoa voi muuttaa näin:

socat SYSTEM:'komento | tee a.txt' SYSTEM:'toinen_komento | tee b.txt'

Windows-version socatista sekä tarvittavat Cygwin-kirjastot voi ehkä ladata täältä (en kokeillut). Useimmissa Linuxeissa se löytyy luultavasti paketinhallinnasta.

tesmu [01.07.2009 16:56:48]

#

Lähinnä, voisin kokeilla vanhaa älyä vastaan paranneltua älyä jollon, että paransinko vai huononsinki.

FooBat [02.07.2009 01:47:27]

#

Kymmenen ekaa saa mun testiohjelman täältä.
http://rapidshare.com/files/250848231/runner.zip.html

Tulee ihan conffimahdollisuuden kanssa. Testibottien kirjoitus jää harjoitustehtäväksi, mutta mainittakoon, että tuo testausohjelma toimii vain ohjelmien kanssa jotka kirjoittavat vastauksensa output streamiin ja vaatii, että ohjelma flush:aa vastauksensa (tarpeellista esim. C:n kanssa).

Vaatii java 1.6 runtimen toimiakseen. Käyttöehdot kieltävät käyttöliittymästä valittamisen :)

Dzarg [02.07.2009 21:44:39]

#

Tuli itsekkin heti alkuun testiohjelma kirjoitettua, ei ilman sitä itselläni ainakaan ollut luottoa tekoälyn kykyihin. Vaatii myös flushin eikä tule conffimahdollisuuksien kanssa. Syntaksi esimerkiksi

java Tester ./a.out "java Malli"

Tuolta löytyy myös yksinkertaisesti tilastollisuutta käyttävä heikko tekoälyvastustaja ja socketeilla toimiva testiohjelma, joka mahdollistaa kavereiden tekoälyjä vastaan pelaamisen luovuttamatta koodeja. Tosin melko hyödytön ilman palvelinosaa jonka teki toinen henkilö, mutta se on vielä hieman keskeneräinen. Matsia voi kuitenkin tulla vaikka ircistä huutelemaan jos haluaa (tällä nickillä ircnetissä esimerkiksi tavoittaa).

Suunnitteilla olisi kyllä edistyneemmät palvelimet ja asiakasohjelmat, jotka mahdollistaisivat monen samanaikaisen pelaajan automaattisen kaikki kaikkia vastaan peluuttaminen ja lopputilastojen näyttämisen, mutta saa nyt nähdä riittääkö tässä aika ennen finaalia.

Metabolix [10.07.2009 16:35:47]

#

Kilpailu alkaa lähestyä loppuaan: tekoälyt täytyy lähettää viimeistään ensi maanantaina, 13.7. klo 13.37. Tänä viikonloppuna on siis sopiva hetki kirjoittaa oma tekoäly tai parannella sitä. Vielä ehtii mukaan!

tesmu [13.07.2009 12:25:30]

#

72 minuuttia aikaa päättymiseen :)

Grez [13.07.2009 12:47:07]

#

Hmm, pitäiskö aloittaa osallistumisen pohtiminen :D

Metabolix [13.07.2009 13:21:31]

#

Viimeiset minuutit ovat käsillä. Mukaan ehtii vielä, ja jos ilmoittautumisissa on jotain epäselvää, viimeistään tässä vaiheessa kannattaa ottaa yhteyttä asian johdosta.

Milo [13.07.2009 13:38:59]

#

Noniin, nyt kun ilmoittautuminen on päättynyt, olisikos ylläpito valmis ilmoittamaan tuon 'oikean taikatempun'? :) Mikä tämä taikatemppu on joka ei vaadi edes flushausta ja ottaa tulostukset stdoutista?

Metabolix [13.07.2009 14:39:02]

#

Tekoälyjä tuli kilpailuun kaikkiaan 37, päästiin siis jopa ristinollakilpailua komeampiin lukuihin. Tekoälyt ovat 0xF4, Brainluck, byrokrat, Code_395, Daeron_NG, Encephalon, esim, FAGGOT, Fail, foo, himmeli, JankenB, Jokuihme, jousipallo, kaiku, Kaksari, KiviKova, Kolykko, Leikkuri09, luuseri, MonkeyBot, nameless, NIGGERx2, onnekas, palikka, paperiaivo, Puudeli, r5nd0m, Risaksi, Saikyou, set, Shotgun, Spock, tekoaly, tumpelo, typerys ja u137.

Useimmat älyt selviytyivät peleistä loppuun asti, JankenB ja byrokrat lopettivat toisinaan toiseksi viimeiselle kierrokselle ja Puudeli kärsi säännöllisesti muistivirheistä (segfault) pelin puolivälin paikkeilla.

Tulokset julkaistaan mahdollisimman pian.


Milo: Taikatemppu itse asiassa lukee jo tuolla ylempänä:

Metabolix kirjoitti:

socat EXEC:'ajokomento',pty,echo=0,raw ...

Ohjelma socat luo siis tässä pseudoterminaalin (pty), jonka pitäisi ohjelman puolesta vastata normaalia konsoli-ikkunaa, ja ohjaa siihen tulevan tulosteen eteenpäin (...) tällä kertaa putkien avulla. Esimerkiksi FreeBASIC ei kuitenkaan kelpuuta samaa taikariviä, mutta sille taas kelpasi yllättäen normaali uudelleenohjaus tiedostoon. (Ilmeisesti flushaus tapahtuu FB:ssä automaattisesti, ja ilmeisesti sen "hienompi" konsolinkäsittely taas sotkee tilannetta pseudoterminaalin kannalta.) Menetelmä toimi hyvin, joten sitä käytetään tulevissakin kilpailuissa.

Milo [13.07.2009 15:19:51]

#

Hmm käänsittehän te ohjelmani uusiksi?

Kaikki toimi meikun päässä kyllä ihan niin kuin pitikin. Noh eipä siinä hittojakaan sitten :)

Heh en huomannut tuota taikatemppua sivun puolivälissä.

Metabolix [13.07.2009 15:57:19]

#

Milo kirjoitti:

Hmm käänsittehän te ohjelmani uusiksi?

Kyllä. Lähetin sähköpostiisi arvauksen kaatumisen syystä. Harmi, että näin kävi, mutta onneksi kilpailuja tulee vielä lisää. ;)

Milo [13.07.2009 16:29:04]

#

Metabolix kirjoitti:

Milo kirjoitti:

Hmm käänsittehän te ohjelmani uusiksi?

Kyllä. Lähetin sähköpostiisi arvauksen kaatumisen syystä. Harmi, että näin kävi, mutta onneksi kilpailuja tulee vielä lisää. ;)

Joo aika selvä syy :) unohdin vaihtaa merkkiä kun muunsin satunnaisluvun arvontalaskua..

Metabolix [14.07.2009 17:02:45]

#

Tulokset on nyt julkaistu. Voittaja on Jorma Sainion tekoäly Shotgun, joka menestyi hyvin jo välikierroksilla. Toiseksi tuli Toni Huttusen Leikkuri09 vain 350 pisteen erolla, ja lähellä kärkeä on koko joukko muitakin tekoälyjä. Onnea voittajalle ja kiitokset jälleen kaikille osallistujille!

Antti Laaksonen [14.07.2009 17:25:01]

#

Kiitokset myös Laurille erinomaisen kilpailun järjestämisestä!

Grandi [14.07.2009 17:40:29]

#

Hieno kilpailu oli. Yllätyin miten hyvin pärjäsin, vaikka tekoälyni ei edes pyrkinyt vastustajan voittamiseen :D

Frozenball [14.07.2009 18:31:33]

#

Hieno kilpailu tosiaan. Vähän toi oma botti hävettää (Encephalon), kun ihan yksinkertaisetkin botit sen voittivat. Pääsinpä kuitenkin vähän keskimääräistä paremmalle sijoitukselle, joten täysin satunnaisbotiksi bottia ei voi sanoa.

Onnittelut voittajalle, ei olisi tullut minulle mieleen tehdä moista.

Pekka Karjalainen [14.07.2009 18:31:37]

#

Jossakin vaiheessa muutin mieleni anonyyminä osallistumisesta, mutta en jaksanut lähettää mailia, jossa ilmoittaisin asiasta. Ohjelmani on nameless.py, ja sen tiedon saa ylläpito tuloslistaan päivittää, jos jaksaa & katsoo aiheelliseksi.

Tarkka lukija havaitsee ohjelmani olevan hyvin lyhyt, mutta kohtuullisestihan tuo pärjäsi kahden illan hommaksi. Tein ensin aiemman version, joka toimi hieman eri tavalla, mutta sitten korjasin sitä seuraavana päivänä nokkelalla "kasvata indeksiä yhdellä" tekniikalla, jota juuri olen patentoimassa :) :)

Täytyy nyt vertailla eri ratkaisujen pituuksia ja suhteuttaa ne menestykseen, että voi kuvitella olevansa jollain mittarilla aivan ehdoton ykkönen :) :)

Hauska kisa kyllä. Kiitän.

Frozenball [14.07.2009 18:53:14]

#

Teinpä hieman paremmat kuvaajat tarkempaa pelien analysointia varten: http://kahvi.tuuna.us/ksp/

Chiman [14.07.2009 18:56:29]

#

Kiitokset hienon kilpailun järjestämisestä ja onnittelut kärkikolmikolle.

Oma sijoitukseni oli hyvin samaa tasoa kuin viiden vuoden takaisessa Ristinolla-kilpailussa, eli voitin 5/6 vastustajista. Tulosten silmäilyn perusteella ei jäänyt mitään jossiteltavaakaan. Hyvä näin.

Pekka Karjalainen [14.07.2009 19:06:17]

#

Frozenball, näkyvätkö tilastossasi Puudelin tulokset oikein? Minusta ainakin Putkan tilasto sanoo mm.

Puudeli - 0xF4
157 - 670

ja

Puudeli - Brainluck
170 - 659

Sinun kuvaajissasi Puudelin kohdalla taas on eri luvut näissä peleissä, ja kuvaajat näyttävät katkeavan kesken. Luenko niitä väärin vai mitä on tapahtunut?

Masfonos [14.07.2009 19:09:49]

#

Ihme, en tullu vikaks. Voittaja olo =)

JP_94 [14.07.2009 19:41:57]

#

Mukava kilpailu. Minun tekoäly, foo, menestyi mielestäni ihan kivasti siihen nähden, että älyn koodaamiseen/suunnitteluun käytetty aika oli vain parisen tuntia ja äly oli varsin yksinkertainen ainakin noihin parhaiten menestyneisiin älyihin verrattuna.

User137 [14.07.2009 19:42:38]

#

Parilla oli käytössä tuo "kun alan häviämään enemmän niin pistän satunnaiseks"... Ei tullut itsellä mieleen mutta olishan tuolla muutaman pojoa enemmän saanu :p

Metabolix [14.07.2009 20:04:20]

#

Pekka Karjalainen kirjoitti:

Luenko niitä [Puudelin kuvaajia] väärin vai mitä on tapahtunut?

Kuten hieman aiemmin keskustelussa mainitsin, Puudeli kärsi segfault-ongelmista. Frozenballin kuvaajat katkeavat siis pelin loppuun, mikä on tavallaan perusteltua, kun tarkoitus on tutkia tekoälyn toimintaa eikä toimimattomuutta. Oikeissa pisteissä on sitten laskettu vastustajalle voitot lopuilta kierroksilta (usein noin 500 lisäpistettä).

FooBat [14.07.2009 20:46:56]

#

Kävipäs jännäksi, kun ei ehtinyt enää välikilpailun jälkeen virittämään tuota Shotgunia. Vähän laskeskelin silloin, että jos pari vastustajaa tajuaa minimoida tappionsa niin kisasta tulee vielä aika tiukka ja näinhän siinä kävikin.

Kiitokset kilpailun järjestäjille ja hyville vastustajille. Pitää varmaan vaivautua paikalle putkamiittiin pelaamaan erä kivi-sakset-paperi -peliä.

Dzarg [14.07.2009 21:42:56]

#

Hyvin suunniteltu ja toteutettu mielenkiintoinen kilpailu oli tosiaan. Vielä kun esimerkkeinä oli jo toimivat tekoälyt, niin niitä muokkaamalla osallistumiskynnys oli todella matala.

FooBat kirjoitti:

Vähän laskeskelin silloin, että jos pari vastustajaa tajuaa minimoida tappionsa niin kisasta tulee vielä aika tiukka ja näinhän siinä kävikin.

Joo kyllähän tämä hyvin sattuneen satunnaisuuden antama 25:n pisteen voitto Shotgunista jokseenkin paremmalta näyttää kokonaispisteiden kannalta kuin tuo puolivälin 409:n pisteen häviö, mutta moraalisestihan se on silti hävitty :)

Chiman [15.07.2009 08:11:55]

#

Tein tulossivulle linkitetyn tekstitiedoston (ksp-pelit.txt) pohjalta taulukoita siitä, miten paljon kukin sai pisteitä/voittoja/tappioita/tasapelejä ketäkin vastaan. Tuosta näkee esim. voittaneen Shotgunin pärjänneen selvästi muita paremmin Brainluckia vastaan ja heikommin Encephalonia vastaan. Tosin Encephalonin ottelutulosten jakauma oli kapea, ko. botti toimi varsin satunnaisesti?

http://abc.shelli.fi/misc/ksp_stats.txt

FooBat [15.07.2009 09:29:32]

#

Joo, kattelin Encephalonin koodia hiukan. Se tosiaan ottaa tappioiden minimoinnin tosissaan ja menee heti ensimmäisellä kierroksella random protect moodiin, kun ei ole yli 50 pistettä voitolla :).

Nooh, löysin tuosta omasta shotgunistakin heti bugin kun aloin katselemaan sitä uudestaan, tosin vain käyttäjälle dumpattavasta statistiikan keräämisestä eikä suoranaisesti toimintaan vaikuttavasta ominaisuudesta.

Frozenball [15.07.2009 15:40:04]

#

FooBat kirjoitti:

Joo, kattelin Encephalonin koodia hiukan. Se tosiaan ottaa tappioiden minimoinnin tosissaan ja menee heti ensimmäisellä kierroksella random protect moodiin, kun ei ole yli 50 pistettä voitolla :).

Sepäs selittääkin aika paljon asioita. Miinusmerkin laiton jälkeen ajoin pelit uudestaan, tosin en valitettavasti saanut socat-komennolla niitä ajettua. Siispä lisäsin jokaiseen pelaamani bottiin flush-komennon erikseen (lähinnä Python- ja PHP-botteihin, muut ohjelmointikielet eivät ole niin tuttuja):

Encephalon - Monkeybot (26.): 341-312-347 VOITTO
Encephalon - byrokrat (31.): 329-325-345 VOITTO
Encephalon - esim (30.): 331-332-337
Encephalon - Fail (25.): 333-339-328
Encephalon - foo (21.): 342-319-339 VOITTO
Encephalon - himmeli (9.): 316-329-355
Encephalon - JankenB (29.): 318-338-343
Encephalon - jousipallo (5.): 329-352-319
Encephalon - onnekas (6.): 340-329-331 VOITTO
Encephalon - typerys (11.): 345-318-337 VOITTO
Encephalon - Risaksi (36.): 327-331-342 (huvittavaa eikö :D)

Näyttää tosin siltä, että pärjäsin satunnaisuudella paremmin.

FooBat [16.07.2009 00:04:12]

#

Muutaman pisteen voittoa ei kannata hehkuttaa vielä kovin suurena voittona. Kahden täysin satunnaisenkin botin välillä tulee usein yli -+50 pisteen eroja tuloksissa ja kaikkia tuloksia alle 30-40 pisteen erolla voi oikeastaan pitää tasapeleinä (joku tilastomatemaatikko saa kertoa tarkan luvun :)). Pelejä pitäisi toistaa useilla eri random seedeillä ohjelmien väleillä ja laskea tuloksista keskiarvo, jos haluttaisiin tarkempaa tietoa tasaisten ohjelmien keskinäisestä paremmuudesta.

tesmu [17.07.2009 22:31:20]

#

Gah... Odotin että olisin hävinnyt koko kilpailun, mutta hyvinhän tuo kolykko pärjäs :P


Sivun alkuun

Vastaus

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

Tietoa sivustosta