Nyt kilpailun säännöt ovat siis näkyvissä osoitteessa https://www.ohjelmointiputka.net/kilpa.php?
jv_windy kirjoitti:
Tuli vielä mieleen, että kun omaa tekoälyä tehdessä testaa sitä välillä, varmaan tulee tehtyä ohjelma, joka antaa ihmisen pelata tätä omaa tekoälyään vastaan.
Hyvä idea. Tämmöistä ohjelmaa ei ole vielä olemassa, mutta teen moisen huomenissa.
Nuo ohjeet menivät hieman ohi jotka olit kirjoittanut kisaa varten...
Tälläisiin kaipaisin ainakin vastausta:
kuinka suuri tuo ruudukko on jossa pelataan?
Ja kun teen tuota tekoälyä niin kuuluisikon sen tehdä niin että tekoälyni lukee tuolta tiedosta vastujan siirron ja tekee sen perusteella omansa?
Kätevää olisi jos joku tekisi valmiin esimerkin miten tekstitiedostoa luetaan rivi kerrallaan niin että voidaan jatkaa edellisestä rivistä ja miten nuo merkinnät luetaan muuttujiin.
tuomas kirjoitti:
kuinka suuri tuo ruudukko on jossa pelataan?
5-50. Tekstitiedoston ensimmäinen rivi sisältää ruudukon sivun pituuden. Eli jos sivu on 5, niin ruudukko on 5*5=25 ruutua jne...
tuomas kirjoitti:
Ja kun teen tuota tekoälyä niin kuuluisikon sen tehdä niin että tekoälyni lukee tuolta tiedosta vastujan siirron ja tekee sen perusteella omansa?
Kyllä. Tekoälysi lukee kaikki siirrot, "muodostaa" niistä kuvan tilanteesta ja päättää oman siirtonsa päätöksensä mukaan. Eli jos tiedostossa ei ole vielä siirtoja peli vasta alkaa.
tuomas kirjoitti:
Kätevää olisi jos joku tekisi valmiin esimerkin miten tekstitiedostoa luetaan rivi kerrallaan niin että voidaan jatkaa edellisestä rivistä ja miten nuo merkinnät luetaan muuttujiin.
Ohjelmointiputka on varmaan väärällään tekstitiedoston lukuneuvoja eri kielille. Tuossä oikeassa reunassa on tuommoinen hassu Haku ruutu. Käytä sitä.
edit: Typo & Text editing
Tarvitseeko tekoälyn ilmoittaa, jos jompi kumpi voittaa?
Eiköhän se ole tuon keskusohjelman homma päätellä onko toinen voittanut. Ei tarvitse enää ajaa tekoälyä vaan ilmoittaa voittaja.
Ja siihen [nimi].kir tiedostoon kirjoitetaan vain ja ainoastaan ohjelman uusin siirto?
Täytynee koittaa tehdä jotain, mutta luultavasti osaltani jää taas kesken..
teen varmaankin tekoälyn joka pelaa 10 x 10 ruudukolla..
Anna tekoälysi lukea se ruudukon koko siitä siirtotiedostosta, älä määritä sitä itse. Eli kun ohjelmasi lukee siirtotiedoston, niin se lukee ensimmäiseltä riviltä sivun pituuden, muodostaa ruudukon ja lukee sitten riveiltä 2-n mihin rastit ja ympyrät on asetettu. Jossei riviä 2 löydy, niin peli vasta alkaa.
Tästäki tulee tällainen jättikeskustelu että tälle voisi vaikka tehdä irccikannun ettei putkan muut viestit jää näitten tiuhaan tulevien alle :D
Voihan se niinkin tehdä..
Tosin jos teen tekoälyn joka osaa pelata vain esimerkiksi 10 x 10 ruudukolla ja ruudukko jota käytettäisiin olisi suurempi minun tekoälyni häviäisi.
Eli sen siis melkein välttämätöntä tehdä tekoäly joka pelaa 50 x 50 ruudukkoa..
prk... Tekoälysi lukee sen ruudukon koon siitä siirtotiedostosta. Jos siellä lukee 2147483647, niin sitten tekoälyt pelaavat ruudukolla 2147483647*2147483647 (jos niiden rahkeet siihen riittävät) ja mahdollisesti toinen voittaa, tai sitten ruudukko täyttyy x-hetken kuluttua.
Eli ajan takaa sitä, että et rajaa ruudukon kokoa koodissasi vaan se on keskusohjelman tehtävä rajata pelialue pelin alussa ja käyttää sitä sitten koko pelin ajan. Tuo pelialueen sivun rajaaminen välille 5-50 helpottaa koodaamista muuttujien määrittelyn osalta, eli käyttääkö Byteä, Integeriä vai Longia arvojen ylöskirjaamisessa. Muuttujien määrittely taas on koodin optimointia joka nopeuttaa ohjelmasi toimintaa.
Edit: Typo
Säännöissä olevia tiedostoesimerkkejä ja kuvia vertaamalla pitäisi kaiken tarvittavan selvitä ohjelmien vaatimuksista.
remontti-reiska kirjoitti:
Tarvitseeko tekoälyn ilmoittaa, jos jompi kumpi voittaa?
Ei tarvitse, tekoälyn täytyy ainoastaan tallentaa oma siirto oikeannimiseen tiedostoon, ja sulkea itsensä sen jälkeen.
TH kirjoitti:
Ja siihen [nimi].kir tiedostoon kirjoitetaan vain ja ainoastaan ohjelman uusin siirto?
Juuri niin.
tuomas kirjoitti:
Tosin jos teen tekoälyn joka osaa pelata vain esimerkiksi 10 x 10 ruudukolla ja ruudukko jota käytettäisiin olisi suurempi minun tekoälyni häviäisi.
Sinun täytyy siis tehdä tekoäly, joka osaa pelata kaikenkokoisilla ruudukoilla väliltä 5 - 50. Ruudukon koko on ilmoitettu tiedoston alussa, ja sitä ei etukäteen tiedä. Mutta jos ohjelma osaa pelata hyvin yhdenkokoisella ruudukolla, se pärjää todennäköisesti muunkinkokoisilla ruudukoilla.
Muuta ei voi sanoa kuin että tuollaisen tekeminen ei tule
olemaan helppoa..
Pienikin esimerkki olisi jo paljon.
tuomas kirjoitti:
Muuta ei voi sanoa kuin että tuollaisen tekeminen ei tule
olemaan helppoa..
Pienikin esimerkki olisi jo paljon.
? Eiköhän kilpailun tarkoituksena ole juuri katsoa että kenellä sitä taitoa löytyy...
Nyt on valmis ohjelma, jonka avulla oman tekoälyn toimintaa voi testata: https://www.ohjelmointiputka.net/kilpailut/2004-ristinolla/rntesti.zip
kuuluisiko tuon kaken olla toimiva tekoäly?
Tajusin kilpalun tavoitteen, mutta olisi voinut tehdä vähän helpomman systeemin.
olen samaa mieltä.
Jonkun 5 siirtoa tuo testaus-ohjelma toimi mun pelin kanssa mutta sitten tulee runtime erroria.
Entäs voiko tuhon osallistua coolbasic:illa ?
Eli tämän ei tarttekaan olla graafinen ohjelma.
Saakos ohjelma tehdä omia muistitiedostoja, vain onko tuo
[nimi].luk ainoa sallittu tiedosto?
tuomas kirjoitti:
kuuluisiko tuon kaken olla toimiva tekoäly?
Joo, tai siis kake laittaa oman merkkinsä aina seuraavaan vapaaseen ruutuun. Ei se kovin älykäs sen vuoksi ole.
petrinm kirjoitti:
Tajusin kilpalun tavoitteen, mutta olisi voinut tehdä vähän helpomman systeemin.
Yritin tehdä systeemistä niin helpon kuin mahdollista. Tarkasti määrättyjä tiedostomuotoja tarvitaan, jotta tekoälyt pystyvät pelaamaan toisiaan vastaan.
User137 kirjoitti:
Jonkun 5 siirtoa tuo testaus-ohjelma toimi mun pelin kanssa mutta sitten tulee runtime erroria.
Hmm, testiohjelmassa saattaa olla jotain vialla. Minkälainen .kir-tiedosto oli silloin, kun virhe tuli? Mikä oli tarkka virheilmoitus?
qwauk kirjoitti:
Entäs voiko tuhon osallistua coolbasic:illa ?
Voi, jos vain pystyt tekemään sillä toimivan tekoälyn.
Hieman outoa että numerot alkavat ykkösestä eikä nollasta :P (tekoälykilpailussa)
Tuottaa vain lisää vaivaa...
Miksi ne siis alkavat ykkösestä? En käsitä.
Minullakin herjaa vaan virhettä kun yritin testata tuota
kakea.
Tällainen oli virhe-ilmoitus:
Run-time error '9':
Subscript out of range
Kuulostais ohjelmointivirheeltä ehkä taulukon tai stringin yhteydessä.
Edit: ja .kir tiedostossa oli tällasta (peli oli 5x5 ruudukolla mun AI vastaan ihminen):
0 4
Edit2: Äh! Tosiaan nehän alkaa ykkösestä eikä nollasta x(
ezuli kirjoitti:
Eli tämän ei tarttekaan olla graafinen ohjelma.
Nimenomaan ei, ohjelma pelkästään käsittelee tiedostoja.
ezuli kirjoitti:
Saakos ohjelma tehdä omia muistitiedostoja, vain onko tuo [nimi].luk ainoa sallittu tiedosto?
Ohjelma ei saa tehdä ylimääräisiä tiedostoja, vaan sen täytyy aloittaa siirron miettiminen "puhtaalta pöydältä".
T.M. kirjoitti:
Hieman outoa että numerot alkavat ykkösestä eikä nollasta :P (tekoälykilpailussa)
Tuottaa vain lisää vaivaa...
Tavallaan kuitenkin on luonnollista, että ensimmäisen ruudun tunnus on 1, toisen 2 jne. Lisävaivaa tästä ei kuitenkaan pitäisi juuri tulla. Voithan lisäksi pitää ohjelmasi sisällä nollasta alkavan numeroinnin ja tehdä muutoksen tiedoston lukemisen ja kirjoittamisen yhteydessä.
User173 kirjoitti:
Edit2: Äh! Tosiaan nehän alkaa ykkösestä eikä nollasta x(
Joo, siinä se vika varmasti oli. Ohjelmasta on nyt uusi versio, joka ilmoittaa kunnolla tällaisestakin virheestä: https://www.ohjelmointiputka.net/kilpailut/2004-ristinolla/rntesti.zip
Ei toimi vieläkään..
"Invalid prosedure call or argument"
tuomas kirjoitti:
Ei toimi vieläkään..
"Invalid prosedure call or argument"
Hyvin toimii
ei toimi nähtävästi kaikilla.
Mullakin toimii. Voisit vielä tasapeli-tilanteen laittaa... Nykyään sanoo että tekoäly laittaa väärin.
Tuon testiohjelman voisi työntää myöskin kilpailusivulle koska monet eivät tätä aihetta lue.
Oman tekoälyni ajaminen vaatii .net framewok 1.1:n. Onko tuo mahdollista testikoneeseen hakea?
T.M. kirjoitti:
Hieman outoa että numerot alkavat ykkösestä eikä nollasta :P
Minustakin se oli vähän outoa, kun on tottunut nollalla alkaviin taulukoihin, mutta loppujen lopuksihan ihan sama tuo on kirjoittaa For i = 1 To maksimi tai For i = 0 To maksimi.
Työt alkoivat tänään, mutta kai sitä jotain saa aikaiseksi vapaa-ajalla..
Kiva, kun Laaksonen jaksoi tuon testiohjelman tehdä! Varmaan moni VB:tä kuitenkin käyttää..
Eikös Kake:n lähdekoodin voisi myös antaa? Siinä olisi valmis pohja tekoälylle..
Eikö siirron aikaa tosiaankaan ole rajoitettu, kuten kilpailusivulla sanotaan? Kai siihen joku raja pitää käytännössä olla, vai ihminenkö sen lopettaa jollain näppäimellä?
Säännöt vaikuttivat ainakin tähän hätään selviltä.
jv_windy kirjoitti:
Eikös Kake:n lähdekoodin voisi myös antaa? Siinä olisi valmis pohja tekoälylle..
Kannatetaan!
Hei... tämähän on kilpailu.
Jos ei tuollaista osaa tehdä, niin tuskin menestyy kovin hyvin itse kilpailussa.
Kuten säännöissä sanottiin:
"...Kaikkein tärkeintä on se, että tekoälyn ohjelmoi itse eikä lainaa jonkun muun tekemää koodia tai algoritmia..."
Se siitä Kake:n koodin "lainaamisesta" varmaan...
Ideana oli se, että useammat innostuisivat osallistumaan kilpailuun, mutta en sitten tiedä onko se jo liikaa..
Laaksoselle kysymys:
Täytyykö oman ohjelman tukea kaikkia ruudukko-kokoja väliltä 5-50 ? Muutoinhan ohjelmat eivät voi pelata toisiaan vastaan, jos näin ei ole?
Kyllä voivat vaikka tekoälysi ei tukisi tuota 50 x 50 ruudukkoa.
Tee vaikka niin että haet ruudukon keskimmäisen ruudun ja aloitat siitä...
User137 kirjoitti:
Voisit vielä tasapeli-tilanteen laittaa... Nykyään sanoo että tekoäly laittaa väärin.
Tämä ominaisuus on ohjelman uusimmassa versiossa.
fawkz kirjoitti:
Tuon testiohjelman voisi työntää myöskin kilpailusivulle koska monet eivät tätä aihetta lue.
Jep, kilpailusivu on nyt päivitetty.
peki kirjoitti:
Oman tekoälyni ajaminen vaatii .net framewok 1.1:n. Onko tuo mahdollista testikoneeseen hakea?
Kyllä, .NET-ohjelmat toimivat testikoneella.
jv_windy kirjoitti:
Eikös Kake:n lähdekoodin voisi myös antaa? Siinä olisi valmis pohja tekoälylle..
En usko, että kenelläkään on vaikeuksia tiedostojen käsittelyn toteuttamisessa. Toisaalta kaken lähdekoodi on vain yhdelle ohjelmointikielelle, jolloin vain osa kilpailijoista hyötyisi siitä.
jv_windy kirjoitti:
Eikö siirron aikaa tosiaankaan ole rajoitettu, kuten kilpailusivulla sanotaan?
On tosiaan järkevintä määrittää tarkka aikaraja, vaikka ensin ajattelin toisin. Yhden siirron aikaraja olkoon siis kymmenen sekuntia. Tämä tulee näkyviin myös sääntöihin.
JoreSoft kirjoitti:
Täytyykö oman ohjelman tukea kaikkia ruudukko-kokoja väliltä 5-50 ?
Kyllä täytyy. Todennäköisesti suurempiin ruudukkokokoihin siirrytään silloin, jos tekoälyt ovat kovin tasaväkisiä.
http://kilpailu.ohjelmointiputka.net/ Kuvat ei toimi tuolla.
Tämä on kyllä vähän huono aihe, koska kuitenkin melkein kaikki varmaan katsoo mallia jostain valmiista algoritmistä, esim. tästä http://www2.lut.fi/~hietanen/thomoku/
Toisaalta tuo taitaa olla ainut järkevä tapa, jos haluaa ottaa kaikki siirrot huomioon. Ehkä sitten tekoälyt erottuvat joukosta aloituksen avulla (poislukien ne, jotka eivät käy pelitilanteita läpi rekursiivisesti, vaan jollain ihme algoritmilla, joka ei edes toimi).
zafner kirjoitti:
http://kilpailu.ohjelmointiputka.net/ Kuvat ei toimi tuolla.
Onko jossain linkki tuohon osoitteeseen? Oikea osoite on nimittäin https://www.ohjelmointiputka.net/kilpa.php?
zafner kirjoitti:
Tämä on kyllä vähän huono aihe, koska kuitenkin melkein kaikki varmaan katsoo mallia jostain valmiista algoritmistä
Tätä en usko, kilpailussa kun on nimenomaan tarkoitus suunnitella oma tekoäly. En usko, että tekoälyn menestyminen kilpailussa tuntuu miltään, jos se ei ole omatekoinen.
zafner kirjoitti:
Tämä on kyllä vähän huono aihe, koska kuitenkin melkein kaikki varmaan katsoo mallia jostain valmiista algoritmistä
Ilonpilaaja! Jos joku haluaa ottaa mallia valmiista koodista, niin hän sen myös varmaan itse osaa etsiä. Ei tarvitse täällä alkaa mainostamaan jotain valmiita algoritmejä. Itse mahdollisesti osallistun kisaan ja en todellakaan halua ottaa mallia mistään valmiista koodista ja epäilen että suurin osa osallistujista ei myöskään tätä tee.
zafner kirjoitti:
Tämä on kyllä vähän huono aihe, koska kuitenkin melkein kaikki varmaan katsoo mallia jostain valmiista algoritmistä, esim. tästä http://www2.lut.fi/~hietanen/thomoku/
thomokualgoritmit.html
Eipäs katso.
Kaikki ei oo n0b0ja, tai niin tylsää porukkaa ettei riitä mielikuvitus tuollaisen keksimiseen ilman apuja.
Perus ristinollalogiikkaahan tuo sivu vain sisälsi, ja tuollaiset pitäisi hyvän ristinollapelaajan tietää jo ennestään.
Tuskin pelkästään tuolla sivulla esitellyllä logiikalla voi voittaa kovimpia matseja :)
Paljon mukavampaa on vaikka pelata ristinollaa itseään vastaan ja yrittää miettiä muutama tapa jolla saa helpon voiton heti alkuun..
Antti Laaksonen kirjoitti:
Onko jossain linkki tuohon osoitteeseen? Oikea osoite on nimittäin https://www.ohjelmointiputka.net/kilpa.php?
tunnus=kisa_x0.
Eihän missään ole linkkiä tuonne, mutta kun kilpailusta puhuttiin ja viimekertaisen kilpailun nettisivut oli tuolla, niin tuli heti mieleen, että ne uudenkin kilpailun nettisivut on tuolla. Tuo oikea osoite on vähän hankalasti muistettava.
Tuo linkki heittää erroria:
Warning: main(../keskustelu/funktiot.php): failed to open stream: No such file or directory in /home/int2000/8694/html/yla.php on line 14
Fatal error: main(): Failed opening required '../keskustelu/funktiot.php' (include_path='.:/usr/lib/php') in /home/int2000/8694/html/yla.php on line 14
Nyt pitäisi taas toimia kilpailusivu. Ja iltaan mennessä koetan laittaa myös tuon vanhan osoitteen toimimaan kunnolla.
Kuules nyt Antti. Mikähän tuossa testiohjelmassa nyt on, kun sen ruudukon pitäisi alkaa ykkösestä, mutta kun tekoälyni lukee siitä .luk tiedostosta kaikki x- ja y-arvot ja vähentää niistä yhden (oma taulukkoni alkaa nollasta), tekoälyni suorittaa laittoman toiminnon (luultavasti siis viittaa taulukon ulkopuolelle)?
Oletko varma, että vika ei ole tekoälyssäsi? Minkälainen .luk-tiedosto on silloin, kun virheilmoitus tulee?
Oho, niinhän se olikin, anteeksi häiriö ja kiitos avusta. Onko muuten kilpailun tuomari samanlainen kuin tuo testausohjelma, eli numerot alkavat ykkösestä?
Antti Laaksonen kirjoitti:
T.M. kirjoitti:
Hieman outoa että numerot alkavat ykkösestä eikä nollasta :P (tekoälykilpailussa)
Tuottaa vain lisää vaivaa...Tavallaan kuitenkin on luonnollista, että ensimmäisen ruudun tunnus on 1, toisen 2 jne. Lisävaivaa tästä ei kuitenkaan pitäisi juuri tulla. Voithan lisäksi pitää ohjelmasi sisällä nollasta alkavan numeroinnin ja tehdä muutoksen tiedoston lukemisen ja kirjoittamisen yhteydessä.
Eli numerot alkavat ykkösestä.
Tein tuossa aikani kuluksi oman testaus-ohjelman.
Tämä pystyy mm. pelaamaan kahdella eri ohjelmalla tai itseään vastaan ja katsoa sen 10 sek aikarajan. Eikö testausohjelman kuuluiskin osata nuo? Laitan tietty linkin pois jos tästä jotain haittaa kilpailulle on.. epäilen kyllä.
nakkikorva kirjoitti:
Onko muuten kilpailun tuomari samanlainen kuin tuo testausohjelma, eli numerot alkavat ykkösestä?
Totta kai, testiohjelma käyttäytyy samoin kuin lopullinen kilpailun järjestävä ohjelma.
User137 kirjoitti:
Tein tuossa aikani kuluksi oman testaus-ohjelman.
Hieno ohjelma, selvästi parempi kuin minun tekemäni!
User137 kirjoitti:
Laitan tietty linkin pois jos tästä jotain haittaa kilpailulle on.. epäilen kyllä.
Linkistä on kaikkea muuta kuin haittaa, ja jos sinulle sopii, laitan sen myös kilpailusivulle.
Sain tuon user137 tekemän testiohjelman jopa toimimaan..
EDIT:
Kirjoitetaanko tuohon .kir tiedostoon aina vain uusin siirto?
Niin että sieltä löytyy aina vain viimeisin siirto (ohjelma lukee merkinnän siirtää sen muistiin ja tyhjentää tiedoston ja kirjoittaa oman siirtonsa sinne)?
lainaus:
Niin että sieltä löytyy aina vain viimeisin siirto (ohjelma lukee merkinnän siirtää sen muistiin ja tyhjentää tiedoston ja kirjoittaa oman siirtonsa sinne)?
Siis <nimi>.kir tiedostoon kirjoitetaan aina vain se uusin siirto. <nimi>.luk tiedostosta luetaan ensimmäiseltä riviltä ruudukon sivun pituus, ja sen perässä ovat kaikki siirrot. Jos siirtoja ei ole, tekoäly saa aloittaa. Nämä kaikki kyllä löytyy tuolta kilpailusivulta.
Tarviiko tohon <nimi>.luk tiedostoon lisätä mitään????
Edit:
Toi User137:rin ohjelma toimii tosi hyvin!
Jos oikein ymmärsin sinun ohjelmasi kuuluisi tallentaa siihen jokainen ohjelmasi tekemä siirto?
EDIT:
Mistä muuten tiedän minkänimisestä .kir tiedosto luen aina vastustajan viimeisimmän siirron?
Ohjelmasi lukee tietonsa itsensä nimisestä tiedostosta. Keskusohjelman tehtävä on luoda tuo tiedosto ohjelmasi luettavaksi ennen kuin se käynnistetään.
edit: Eli jos ohjelmasi nimi on AIGuru.exe niin ohjelmasi lukee tiedostoista AIGuru.luk ja AIGuru.kir tietonsa.
tuomas kirjoitti:
EDIT:
Mistä muuten tiedän minkänimisestä .kir tiedosto luen aina vastustajan viimeisimmän siirron?
Minun käsittääkseni .kir tiedostoista ei lueta mitään, niihin vain kirjoitetaan uusin siirto. .luk tiedostossa kaikki siirrot ovat järjestyksessä, joten siitä voidaan lukea tämänhetkinen pelitilanne(tai täytyy lukea). Testiohjelma hoitaa sitten tietojen siirtämisen .luk tiedostoihin.
Minä ainakin ymmärsin niin että niistä luettaisiin / kirjoitettaisiin viimeisin siirto ja .luk tiedostossa
olisi kaikki siirrot.
Ja kuten tiedostonpäätteistä voi päätellä .luk on tarkoitettu lukemiseen ja .kir kirjoittamiseen.
Antti Laaksonen kirjoitti:
Linkistä on kaikkea muuta kuin haittaa, ja jos sinulle sopii, laitan sen myös kilpailusivulle.
Sopii.
Päivitin kilpailusivua. Ja tosiaankin: Ohjelman omannimisessä .luk-tiedostossa on aina kaikki merkinnät oikeassa järjestyksessä. Ohjelma kirjoittaa oman merkintänsä .kir-tiedostoon, ja kilpailun järjestävä ohjelma huolehtii siitä, että .kir-tiedostoon tehty merkintä tulee osaksi uutta .luk.tiedostoa.
Voiko tekoälyni luovuttaa?
Tavallaan kyllä, jos se kirjoittaa tahallaan tiedostoon virheellisen merkinnän tai jahkailee yli kymmenen sekuntia.
Aiotko Laaksonen osallistua itse kilpailuun?
Jos et niin voisitko kääntää minulle tekemäni tekoälyn
niin voisin testata olenko tekoälyn tekemisessä oikeilla jäljillä?
Muillekun ei viitsi lähdekoodia pahemmin antaa, jos he osallistuvat kisaan myös.
Itse aion osallistua kilpailuun, mutta toki voin myös kääntää sen lähdekoodisi.
Jatkan koodin tekemistä vielä muutaman päivän ja lähetän ensimmäisen version sitten vaikka käännettäväksi niin tiedän onko ohjelmassani bugeja..
Tein tekoälyn Javalla. Varmaan hihkutte innosta päästä tekemään sellaisia testausohjelmia, jotka osaavat käynnistää myös Java-ohjelmia. Vai mitä? :) (Rautalangasta: Jos joku haluaa sellaisen tehdä, niin otetaan kiitollisena vastaan. Arviointivaiheessa se pitää tehdä kuitenkin.)
Eihän Javaa varten tarvitse muuta kuin laittaa Java ennen ohjelman nimeä komentoriville ja laittaa .exe tilalle .java
Ehkä koko java.exe sijainti mukaan... no tuon voin laittaa ainakin omaani jossain vaiheessa.
Vai mistäs se java lukee ja kirjottaa tiedostoja? Muistelen ettei ainakaan sieltä mistä sitä kutsutaan?
Java-ohjelmat lukevat varmaankin oletuksena tiedostoja sieltä, missä ohjelman .class sijaitsee. (Ei siis sieltä, missä java.exe on.)
Jos javan bin-hakemisto on määritelty PATHiin(omalla koneellani C:\J2sdk1.4.2\bin), voi java-ohjelmia ajaa mistä tahansa. Java <tiedosto> ajaa ohjelman, eikä tiedostonimeen tarvitse laittaa .class-päätettä.
Typotin tuonne tietysti .java kun .class piti kirjoittaa... niin ja ei sillä väliä kun kumpaakaan ei kirjoiteta komentoriville.
Mutta jos jollain on javalla tehty AI niin vois testata nyt toimiiko:
http://cs.uku.fi/~valo/Host.zip
Teoriassa sen pitäis toimia sulassa sovussa .exe ohjelmien kanssa, olettaen että path:ssa on määritelty java.exe sijainti. Ilmeisesti Java SDK asennus tekee sen automaattisesti.
User137: Todella hyvä testiohjelma! Tein pikaisen testin ja javallakin tehdyt tekoälyt näyttäisivät toimivan moitteetta.
Ei aiheuttane ongelmia jos kaksi tekoälyä sattuu olemaan saman nimisiä...?
Aika pieni todennäköisyys, että kaksi samannimistä tekoälyä tulee, eikö niin?
Ja jos sattuu tulemaan, niin Laaksonen voi pyytää/vaatia tekoälyn eri nimisenä.
No kyllä siellä saattaa olla useampi "erkki" ja "veikko" ym. aika suurellakin todennäköisyydellä jos tulee paljon osallistujia
Tällä hetkellä kyselyn mukaan kilpaluun osallistuu takuuvarmasti 24 henkilöä.
Kaksi samannimistä tekoälyä aiheuttaa vähän lisäjärjestelyjä, mutta ei ratkaisemattomia ongelmia.
Kyllä sellasessa tapauksessa pitänee jommalta kummalta tekijältä pyytää ohjelma uudestaan eri nimellä, nimittäin ainakaan mun ohjelma ei katso nimeään omasta exe:stä vaan vakio-muuttujasta joka esitellään ohjelman alussa.
Semmoinen ratkaisu lienee mahdollinen, että samannimiset tekoälyt ovat eri hakemistoissa. Tai toisen tekoälyn EXE-tiedoston nimi muutetaan, mutta .luk- ja .kir-tiedostojen alkuosa on molemmilla sama. Silloin ainoat muutokset täytyy tehdä testiohjelmaan.
Entäs jos tekoälyni olisi .py python tiedosto osaako lopullinen ohjelma ajaa .py tiedostoja, ja onko koneella python tuki?
Testikoneella on asennettuna Python-tulkki, joten Python-ohjelman pystyy hyvin käynnistämään komentorivillä.
Omasta testiohjelmastani on nyt uusi versio.
Uusia ominaisuuksia ovat kahden tekoälyn välinen peli, ajan mittaus ja näyttö sekä tekoälyn käynnistyskomennon määrittely. Jälkimmäisen ansiosta PHP-, Java-, Python- jne. kielillä toteutettujen tekoälyjen testaaminen pitäisi nyt olla mahdollista ohjelmalla, kunhan koneella on tarvittavat ohjelmat.
Vielä sellainen pikku kysymys.. Kilpailusivuilla sanotaan: "Kaikkein tärkeintä on se, että tekoälyn ohjelmoi itse eikä lainaa jonkun muun tekemää koodia tai algoritmia."
Olitteko tosissanne kirjoittaessanne tuon kohdan "algoritmia"? Itse tein ohjelman soveltaen erästä hyvin tunnettua tekoälyalgoritmia (jota en yllättäen mainitse tässä nimeltä), joka löytyy esim. kaikista algoritmien perusoppaista. Olisiko minun todellakin pitänyt keksiä pyörä uudestaan ja kehitellä joku oma algoritmi?
Siis soveltamani algoritmiinkin piti vielä keksiä omia tilanteidenarviontimenetelmiä ja lisäksi koodasin sen tietenkin aivan itse enkä kopioinut mistään. Kyseessä ei siis ole mikään ristinolla-algoritmi vaan yleinen tekoälyalgoritmi, joka ei ole heuristinen vaan laskennallinen.
Algoritmin täytyy siis olla itse suunniteltu, kirjoista ja Internetistä kun löytyy varmasti valmiitakin algoritmeja nimenomaan ristinollapeliin. Tämä ei tietenkään tarkoita sitä, ettei sen oman algoritmin toteutuksessa voisi hyödyntää aiempia tietoja ja yleisesti tunnettuja algoritmeja. Kilpailuun osallistuvan tekoälyn täytyy kuitenkin selvästi olla itse tehty.
Jos oikein saivarrellaan, niin aika harva tekee ohjelmia täysin omista algoritmeista. Esim. taulukon binäärihakukin on "jonkun muun keksimä algoritmi". Samoin taulukon läpi iterointi pienimmän/suurimman luvun hakemiseksi.
Missä kulkee raja itse suunnitellun ja toisen algoritmin välillä? Jos käyttää jotain valmista ristinolla-algoritmia, ei varmaan ole hyvä. Entä jos tekee yleisestä tekoälyalgoritmista yleistyksen ristinollaan? Onko se silloin "oma algoritmi"?
Kuinka tarkka testiohjelma tulee olemaan ohjelman suoritusajan kanssa? Tekoälyn(i) kannalta olisi edullista käyttää koko 10s hyödyksi, mutta jatkuva ajan tarkkailu voi hidastaa toimintaa.
Olisiko esim. mahdollista, että 10s tultua täyteen testiohjelma pysäyttäisi ohjelman suorituksen ja lukisi vain uusimman tulosteen ***.kir:sta (jota tekoäly suorituksensa aikana parantelee), eikä vain välittömästi hylkäisi ko. tekoälyä? Tällä tavoin saatettaisiin välttyä esim. 10.01 s suoritusaikojen aiheuttamista ärsyttävistä häviöistä.
VilleP: kyllä tiedostoon kirjoittamisesta tulee varmasti suurempi painotaakka kuin ajan tarkistamisesta. Ihan näin sivuhuomautuksena: henk. koht. mielestäni 10 sekuntia on turhan pitkä aika mutta toisaalta taas ajan on hyvä olla suhteellisen pitkä koska ohjelmia ajellaan tulkkien yms. läpi ja ohjelmien suoritusajat voivat heitellä jo käyttöjärjestelmästäkin johtuen...
Mitä tulee algoritmeihin niin eihän valmiiden algoritmien käyttöä sinänsä voida kieltää mutta kyllä kisasta varmasti tulee paljon mielenkiintoisempi jos jokainen yrittää kehitellä jotain omaperäistä :)
Mulla ei toiminut tuo user137:n testiohjelma. Pitäisikö sen toimia niin, että valitaan vain java-ohjelman .class-tiedosto? Ei toiminut ainakaan minulla, sillä ohjelmaani ei ikinä käynnistetty (tulee vain ilmoitus, että tekoäly mietti liian pitkään). Java.exe:n pitäisi löytyä polusta.
Antti L:n testausohjelma taas tekee muutaman siirron jälkeen runtime error 62:n ("input past end of file"). Johtuuko bugisesta tekoälystäni vai testausohjelmasta?
(Jos ajan ko. tilanteen jälkeen tekoälyni samoilla syötteillä, se näyttää tuottavan kelvollisen vastauksen.)
Mitä tulee algoritmeihin, niin ristinolla on niin törkeän helppo ongelma (matemaattiselta kannalta), että laskennalliset algoritmit peittoavat heuristiset ihan kymmenen nolla. Omaperäisiä ratkaisuja tulisi sellaiseen onglmaan, jota ei voisi matemaattisesti laskea puhki.
fawkz: Tiedostoon ei ohjelmani tarvitsisi kirjoittaa kuin korkeintaan parikymmentä kertaa, mutta aikaa pitää tarkkailla huomattavasti useammin, jotta voisi olla jokseenkin varma, ettei aikaraja ylity. Tällöin ajan tarkkailu on tiedostoon kirjoittamista suurempi rasite.
Mikäli testiohjelma katkaisee ohjelmien suorituksen 10 s kuluttua (jos ei, voi esim. viallisen ohjelman suoritus viedä paljonkin aikaa), ei tiedoston lukemisen tämän jälkeen pitäisi olla kovin hankala toteuttaa, ja se säästäisi siis runsaasti ajantarkkailuvaivaa tekoälyohjelmilta/ohjelmoijilta.
Marja kirjoitti:
Mulla ei toiminut tuo user137:n testiohjelma. Pitäisikö sen toimia niin, että valitaan vain java-ohjelman .class-tiedosto? Ei toiminut ainakaan minulla, sillä ohjelmaani ei ikinä käynnistetty (tulee vain ilmoitus, että tekoäly mietti liian pitkään). Java.exe:n pitäisi löytyä polusta.
kokeilitko dos-kehotteesta komennolla
java tekoaly
(jos luokan nimi oli tekoaly.class)
En ole kyllä testannut tuota itse vielä, mutta jos jollain on javalla käännetty/kääntämätön testi-luokka (ihan joku satunnaisiin paikkoihin rakseja laittava vaikka..) niin voisi lähettää sähköpostiin:
v_teemu@hotmail.com
Antti L, eikö tuo tekoälyn nimi saa missään tilanteessa olla 2 kirjainta? ;-)
~jc
User137 kirjoitti:
kokeilitko dos-kehotteesta komennolla
java tekoaly
(jos luokan nimi oli tekoaly.class)
Ohjelmani toimii siis ihan OK kun käynnistän sen itse.
No huhhuh! Viikko Kreikassa ja heti olen ihan pihalla putkan tapahtumista. Tuntuma näppäimistöllä kirjoitukseenkin on päässyt herpaantumaan. Ihan harmittaa, kun olin niin innolla mukana ajamassa tätä tekoälykilpailua, ja sitten ratkaisevalla hetkellä joudun lähtemään pois. Niin paljosta on päätetty, ja voi todella kestää, ennen kuin kunnolla saan tästä kaikesta tolkun. Mutta nyt kun taas olen täällä, rupean heti kunnolla kehittämään tekoälyäni. Täytyy kyllä sanoa, että ikävä ehti tulla ohjelmointia ja tätä loistavaa sivustoa.
Marja kirjoitti:
Missä kulkee raja itse suunnitellun ja toisen algoritmin välillä?
Tähän kysymykseen on vaikea antaa kunnollista vastausta. Mutta jos tekoälyohjelman kirjoittaa alusta loppuun itse ja sen toimintaa joutuu suunnittelemaan ja pohtimaan, silloin se myös on itse tehty.
VilleP kirjoitti:
Kuinka tarkka testiohjelma tulee olemaan ohjelman suoritusajan kanssa?
Tekoälyn käyttämä aika mitataan tällä tietoa sekunnin kymmenesosan tarkkuudella, ei siis kauhean tarkasti.
VilleP kirjoitti:
Olisiko esim. mahdollista, että 10s tultua täyteen testiohjelma pysäyttäisi ohjelman suorituksen ja lukisi vain uusimman tulosteen ***.kir:sta
Tämä ei valitettavasti ole mahdollista, koska testiohjelma tulkitsee ensimmäisen tiedostoon kirjoitetun vastauksen lopulliseksi. Joka tapauksessa kannattaa pyrkiä siihen, että tekoäly luo .kir-tiedoston hyvissä ajoin. Hidastaisiko kellonajan tarkistaminen järkevissä kohdissa ohjelmaasi merkittävästi?
Marja kirjoitti:
Antti L:n testausohjelma taas tekee muutaman siirron jälkeen runtime error 62:n ("input past end of file"). Johtuuko bugisesta tekoälystäni vai testausohjelmasta?
Virheilmoitus viittaa siihen, että .kir-tiedostossa ei olisi tarpeeksi (eli kahta) luettavia lukuja. Jos tiedosto on olemassa samassa hakemistossa testiohjelman kanssa ja sen sisältö on oikea, en kyllä osaa heti sanoa, missä vika voisi olla.
jcd3nton kirjoitti:
Antti L, eikö tuo tekoälyn nimi saa missään tilanteessa olla 2 kirjainta? ;-)
No varsinaisesti lyhyempikään nimi ei haittaisi, mutta kilpailun sääntöjä olisi silti hyvä noudattaa...
hunajavohveli kirjoitti:
Ihan harmittaa, kun olin niin innolla mukana ajamassa tätä tekoälykilpailua, ja sitten ratkaisevalla hetkellä joudun lähtemään pois. Niin paljosta on päätetty, ja voi todella kestää, ennen kuin kunnolla saan tästä kaikesta tolkun.
Ei hätää, ehdit vielä mainiosti mukaan. :) Kaikki tarvittavat tiedot ovat kilpailusivulla, ja kilpailuaikaa on jäljellä vielä yli kolme viikkoa.
Ei mainittu tuolla kilpailusivulla, mutta ristit vissiin aina aloittaa?
Ristit alottaa, mutta eihän sillä ole tekoäly-ohjelmassa merkitystä, kun ne on vaan vuorot 1 ja 2.
Ja mun ohjelma odottaa että .kir tiedostossa on merkkijono, joka on vähintään 3 merkkiä pitkä, ja sen jälkeen vasta lukee ne 2 lukua.
Marja kirjoitti:
Ohjelmani toimii siis ihan OK kun käynnistän sen itse.
Ja ymmärsin että osaat kyllä käynnistää java-ohjelman (ja siihen on monia tapoja) :P ..mutta tarkoitin käynnistää tarkalleen tuolla käskyllä, koska sitä mun ohjelma käyttää.
User137: Olenko jäänyt jostain paitsi, kun en tiedä mitään muita tapoja käynnistää java-ohjelmaa kuin tuo mainitsemasi? (Jos ei kehitysympäristöjä oteta huomioon. Olisin tietenkin maininnut, jos käyttäisin jotain.) :)
Eli joo, käynnistän ohjelmani juuri niinkuin sanoit.
Testailin ohjelmaa aikani, ja lopulta löysin vian. Välillä testiohjelma rupesi lukemaan tiedostoa liian aikaisin, ja siksi siinä ei vielä ollut kaikkia tietoja. Tässä on kuitenkin uusi versio, joka ei odota tiedoston syntymistä vaan tekoälyohjelman todellista sulkeutumista:
https://www.ohjelmointiputka.net/kilpailut/2004-ristinolla/rntesti.zip
Käynnistääkö testausohjelmat tekoälyn aina ennen jokaista siirtoa vai onko tekoäly käynnissä koko pelin ajan? Saako käyttää useaa prosessia, vai pitääkö suunnitella yhteen??
Antti Laaksonen kirjoitti:
...joka ei odota tiedoston syntymistä vaan tekoälyohjelman todellista sulkeutumista...
Eli ohjelma sammuu aina tehtyään siirron.
Jaahas, huomasin vasta nyt että kilpailu on käynnissä.
Minua kyllä TODELLAKIN ihmettyttää se, että ohjelmin lähdekoodeja ei automaattisesti julkaista. Minusta se on välttämätöntä rehdin kilpailun kannalta. Lähdekoodit kuuluvat tietenkin tekijäoikeuden piirin eikä niitä näinollen kukaan voi hyödyntää omissa tarpeissaan. (ja kun joku vielä keksisi missä tuollaista koodia oikeasti voi hyödyntää, yleensä parempi tehdä itse jos vaikka pelin joutuu tekemään)
Ihmeellistä kyllä, mutta minäkin kannatan varsinkin voittajan lähdekoodin julkaistamista!!! Miksi koodia ei voisi julkaista?
Pakko heittää vielä kyssäri kaikille, jotka koodaavat tekoälyä: Pärjäätkö itse omalle tekoälyllesi??
Antti Laaksonen kirjoitti:
Tässä on kuitenkin uusi versio, joka ei odota tiedoston syntymistä vaan tekoälyohjelman todellista sulkeutumista:
No niin, nyt toimii.
Jos testiohjelmien kehittäminen tuntuu liian yksinkertaiselta, niin vielä yksi ehdotus. :) Koodailen täällä wanhalla, hitaalla koneella (Celeron 366), ja nyt tekoälyni laskee joskus 12 s kellosta katsottuna. Se varmasti mahtuisi 10 s sisään teidän testikoneellanne! Joten testausohjelmassa voisi olla "testikoneen teho"-valitsin, johon voisi syöttää oman koneensa tehon, jolloin hitaammalla koneella testiohjelma antaisi enemmän aikaa.
ez kirjoitti:
Pakko heittää vielä kyssäri kaikille, jotka koodaavat tekoälyä: Pärjäätkö itse omalle tekoälyllesi??
Joskus pärjään, joskus en. Tekoäly meni voittamaan minut 50x50-ruudukolla tosin. Toisaalta se menee joskus ihan helppoon ansaan.. täytyy korjata..
User137: Kai ohjelmassasi kuitenkin on "java Tekoäly" eikä "java tekoäly", jos siis tiedosto on Tekoäly.class? Koolla voi olla väliä. Tuli vaan mieleen tuosta kirjoittamastasi.
Kirjainkokoon ohjelma ei tee muutoksia, mutta huomasin tuossa kauhukseni että se pitäisi käynnistää eri tavalla!
Javan kanssa se suoritettava ohjelma onkin java, ja *parametri* on luokan nimi...
Saas nähä toimiiko nyt, laitoin nettiin uudemman.
Vois tehdä testi-AI:n javalle tässä samalla :)
Edit: Nyt se on ainakin varmistettu: java-ohjelma käynnistyy ja luo tiedoston oikeaan paikkaan.
ez kirjoitti:
Pakko heittää vielä kyssäri kaikille, jotka koodaavat tekoälyä: Pärjäätkö itse omalle tekoälyllesi??
En välttämättä, satunnaistekijät vaikuttavat asiaan jonkin verran. Mutta kun koodaan sitä vielä vähän se on ihan ässä;) (ja hehkutuksen jälkeen kilpailun lopputuloksissa ollaan sitten viimeisinä;)
Meitzi kirjoitti:
Minua kyllä TODELLAKIN ihmettyttää se, että ohjelmin lähdekoodeja ei automaattisesti julkaista. Minusta se on välttämätöntä rehdin kilpailun kannalta.
Tässä kilpailussa julkaisusta saa päättää osallistuja, ja voi olla ihan hyviä syitä siihen, miksi koodiaan ei halua julkisuuteen. Rehtiä kilpailua se ei minusta estä. Jos lähes kaikki kuitenkin sallivat koodinsa julkaisun, sen voisi ehkä laittaa pakolliseksi seuraavaan samantyyliseen kilpailuun.
ez kirjoitti:
Pakko heittää vielä kyssäri kaikille, jotka koodaavat tekoälyä: Pärjäätkö itse omalle tekoälyllesi??
Tekoäly voittaa minut melkein aina, varsinkin jos se pääsee aloittamaan. Mutta en kyllä ole kovin etevä pelaajakaan.
Marja kirjoitti:
Joten testausohjelmassa voisi olla "testikoneen teho"-valitsin, johon voisi syöttää oman koneensa tehon, jolloin hitaammalla koneella testiohjelma antaisi enemmän aikaa.
Muuten hyvä idea, mutta mikä olisi hyvä tapa koneen tehon määrittämiseen? Suoraan megahertsien perusteella ei ainakaan taida onnistua.
Antti Laaksonen kirjoitti:
Marja kirjoitti:
Joten testausohjelmassa voisi olla "testikoneen teho"-valitsin, johon voisi syöttää oman koneensa tehon, jolloin hitaammalla koneella testiohjelma antaisi enemmän aikaa.
Muuten hyvä idea, mutta mikä olisi hyvä tapa koneen tehon määrittämiseen? Suoraan megahertsien perusteella ei ainakaan taida onnistua.
Ei tietenkään ihan tarkkaan, mutta antaisi edes summittaisen arvion. En millään jaksaisi itse alkaa graafista käyttöliittymää koodaamaan. :)
Muutenkin on ongelmana se, että varmaankaan ette mittaa tietyn prosessin (eli tekoälyohjelman) itse käyttämää aikaa, vaan kaiken mahdollisen suoritusaikaa, jolloin mm. käyttöjärjestelmän prosessit vaikuttavat suoritusaikaan. Esim. datatähdessä ne suljetaan pois laskuista, tosin ohjelmointikielivalikoimakin on suppeampi. Javan kanssa suoritusaika on muutenkin niin ennustamatonta, riippuen virtuaalikoneen mielialanvaihteluista.
Olen taas toisinajattelija, mutta minun mielestäni tässä kilpailussa ei pitäisi julkaista yhden ainutta lähdekoodia. Aika monella tällainen ohjelma kävisi suoraan koulussa (siis koulu=yliopisto/amk/..) harjoitustyöksi (esim. tietojenkäpistelytieteessä vastaa aivan suoraan Tietorakenteiden harjoitustyötä, 2 ov, dokumentointivaatimukset erittäin vähäiset), joten jollekin saattaisi tulla kiusaus kopioida valmis työ netistä. On niin koulumainen aihe.
Tämä saattaa olla tyhmä kysymys, mutta...
Kilpailun säännöt kirjoitti:
Tekoäly lukee pelitilanteen samassa hakemistossa olevasta tiedostosta [nimi].luk, jossa [nimi] on tekoälyn nimi.
En oikein tajua: [nimi] on tekoälyn nimi, mutta kumman tekoälyn nimi? Vastustajan vai oman? Vai onko molemmilla tekoälyillä oma tiedosto? Tätä en oikein käsitä. Selittäisikö joku?
Ja minkä vuoksi pitää olla kaksi tiedostoa lukemiseen ja kirjoittamiseen? Eikö olisi kätevintä, että on vain yksi tiedosto, josta siirrot luetaan ja sitten lopuksi tallennetaan oma siirto tiedoston viimeiselle riville? Vai hoitaako kilpailun järjestävä ohjelma sen, että kirjoitettu siirto siirretään luettavaan tiedostoon?
Hunajavohveli: kumpikin tekoäly lukee siirrot omasta .luk-tiedostostaan, ja kirjoittaa uusimman siirron omaan .kir-tiedostoon. Molemmilla tekoälyillä on siis omat tiedostonsa. Testiohjelma hoitaa uusimpien siirtojen kirjoittamisen .luk-tiedostoihin.
Asia selvä. Tällä hetkellä yksi juttu vielä vähän askarruttaa. Onko olemassa jokin syy siihen, että siirtojen x- ja y-koordinaatit ovat samalla rivillä, ja siihen että ne on eroteltu välilyönnillä? Sen vielä ymmärtäisin, että olisi käytetty pilkkua, jolloin kai useimpien kielien tiedostonlukukomennot osaisivat erotella luvut toisistaan. Välilyönnillä erottelun takia joutuu käyttämään merkkijonofunktioita tarkistaakseen, missä kohdassa kulkee raja. Ei tämä sinänsä ongelmia tuota, mutta tulipa vain mieleen.
Edit: Niin ja sitten vielä: Mistä tekoäly tietää, mitkä merkinnät ovat omia ja mitkä vastustajan? Tietysti voisi ajatella niin, että viimeinen siirto on aina vastustajan, mutta sitten pitäisi lähteä lukemaan tiedostoa ikään kuin takaperin katsoen, että joka toinen on oma ja niiden välissä vastustajan siirrot. Vai onko tähän jokin kätevämpi keino?
Marja kirjoitti:
Olen taas toisinajattelija, mutta minun mielestäni tässä kilpailussa ei pitäisi julkaista yhden ainutta lähdekoodia. Aika monella tällainen ohjelma kävisi suoraan koulussa (siis koulu=yliopisto/amk/..) harjoitustyöksi (esim. tietojenkäpistelytieteessä vastaa aivan suoraan Tietorakenteiden harjoitustyötä, 2 ov, dokumentointivaatimukset erittäin vähäiset), joten jollekin saattaisi tulla kiusaus kopioida valmis työ netistä. On niin koulumainen aihe.
Hei, jarrua jarrua. Ei sitä vain mitenkään voi lähteä ajattelemaan siltä kannalta, että jos tätä koodia käyttää joku väärin. Ei noita ohjelmointivinkkejäkään voi kohta pistää jos niistäkin aina mietitään että "entäs jos tämä onkin suoraan jonkun kotiläksy?" Jos joku on niin tyhmä että etsii vain valmista koodia niin hän löytää sen kyllä jostain muualtakin jos ei täältä.
Minusta on mielenkiintoista kilpailun jälkeen vertailla erillaisia toteutustapoja, optimointeja jne.
Tekoälyni miettii muuten parhaimmillaan (pahimillaan) 10 minuuttia...
Meitzi kirjoitti:
Jos joku on niin tyhmä että etsii vain valmista koodia niin hän löytää sen kyllä jostain muualtakin jos ei täältä.
Niin, mikäs siinä, jos joku tosiaan on niin tyhmä, että haluaa etsiä aivan valmista koodia. Siinähän hän ei opi itse juuri mitään. Ja aivan varmasti tällaisia tekoälyjä on netissä jo, mutta ainakaan kukaan putkalaisista tuskin on niin tyhmä, että etsisi valmista koodia, ja esittäisi sen omanaan. Sehän nyt tulisi sitä paitsi aikanaan ilmi.
lainaus:
Minusta on mielenkiintoista kilpailun jälkeen vertailla erillaisia toteutustapoja, optimointeja jne. Tekoälyni miettii muuten parhaimmillaan (pahimillaan) 10 minuuttia...
Paha pulma. Oma tekoälyni miettii kai jotain 2-3 sekuntia, enkä ole vielä ehtinyt edes optimoimaan sitä. Lisäksi oma koneeni on vain 600 MHz. 3-Gigaisella siirto tapahtuu varmaan yhdessä hujauksessa, joten minulla on kyllä reilusti varaa parantaa älyäni, eikä ole pelkoa liiasta hidastumisesta.
Säännöissä luki, ettei tekoäly saa kirjoittaa muihin tiedoistoihin kuin nimi.luk. Eli tila tietoja ei varmaan saa tallentaa mihinkään muuallekkaan (rekisteri yms..)?
Kuvitteleppa itse pelaavasi ko. peliä siten, että joka siirtoon joudut tekemään uuden suunnitelman jne.. Kehittelet ansan mutta, et enää muistakkaan sitä seuraavalla vuorolla...
Kai mä oon vaan niin tyhmä (äo varmaan alle 100), etten osaa tehdä...
ez kirjoitti:
Säännöissä luki, ettei tekoäly saa kirjoittaa muihin tiedoistoihin kuin nimi.luk.
Ei, vaan .luk tiedostosta luetaan siirrot, ja vain .kir tiedostoon kirjoitetaan. Tämäkin lukee selvästi kilpailusivulla.
Edit: Tilatietoja ei ymmärtääkseni saa tallentaa minnekään(esim. rekisteriin).
En tajunnu vastausta. :-/ Siis tilatietoja ei saa tallentaa?
rekisteri != tiedosto...
Käsittääkseni tekoälyn tulee vain osata päätellä paras siirto sille annetussa tilanteessa. Sen pitäisi osata miettiä sopivin siirto, vaikka sille antaisi joka kerta satunnaisen pelin, joten muita tietoja ei saa tallennella.
acorn kirjoitti:
Käsittääkseni tekoälyn tulee vain osata päätellä paras siirto sille annetussa tilanteessa. Sen pitäisi osata miettiä sopivin siirto, vaikka sille antaisi joka kerta satunnaisen pelin, joten muita tietoja ei saa tallennella.
Aivan. Jos tekoäly on täydellinen, sen pitää osata päätellä sopiva siirto vain senhetkisestä tilanteesta, mutta tässä tapauksessa tekoälylle annetaan tietoon myös se, missä järjestyksessä siirrot on tehty. Muita tietoja ei tarvita.
hunajavohveli kirjoitti:
Onko olemassa jokin syy siihen, että siirtojen x- ja y-koordinaatit ovat samalla rivillä, ja siihen että ne on eroteltu välilyönnillä? Sen vielä ymmärtäisin, että olisi käytetty pilkkua, jolloin kai useimpien kielien tiedostonlukukomennot osaisivat erotella luvut toisistaan. Välilyönnillä erottelun takia joutuu käyttämään merkkijonofunktioita tarkistaakseen, missä kohdassa kulkee raja. Ei tämä sinänsä ongelmia tuota, mutta tulipa vain mieleen.
Pascal-pohjaisella kielellä, tai delphillä jota itse käytän, voi lukea suoraan kokonaisluku-muuttujiin peruskäskyllä
ReadLn(File, X, Y);
hunajavohveli kirjoitti:
Edit: Niin ja sitten vielä: Mistä tekoäly tietää, mitkä merkinnät ovat omia ja mitkä vastustajan? Tietysti voisi ajatella niin, että viimeinen siirto on aina vastustajan, mutta sitten pitäisi lähteä lukemaan tiedostoa ikään kuin takaperin katsoen, että joka toinen on oma ja niiden välissä vastustajan siirrot. Vai onko tähän jokin kätevämpi keino?
Ensimmäinen siirto on pelaaja numero 1:n jne. käytän itse vuoro-muuttujaa jonka avulla pelaan samalla tavalla oli sitten kumman vuoro tahansa.
Edit: Ei silti pitäisi liikaa paljastaa ohjelmastaan tai teorioistaan tässä vaiheessa kilpailua :)
OK!
Kehistys idea Antille tohon testi ohjelmaan: isolla ruudukolla pelatasse pitkää peliä, ristit ja nollat erottus paremmin jos ne olisi keskenään erivärisiä ja vielä erivärisiä ruudukon kanssa..
Oisin toki itse muokannut koodin tarpeisiin sopivaksi, mutta on .net ja menis säätämiseksi..!
User137 kirjoitti:
Ensimmäinen siirto on pelaaja numero 1:n jne.
Mutta eihän tekoäly tiedä, onko se pelaaja 1 vai 2.
Kyllä se sen saa tietää kun se laskee montako siirtoa on tehty. Jos siirtoja on tehty parillinen määrä ni se on 1. pelaaja, muuten 2. pelaaja.
hunajavohveli kirjoitti:
Mistä tekoäly tietää, mitkä merkinnät ovat omia ja mitkä vastustajan?
Voihan esimerkiksi ensin laskea siirtojen lukumäärän ja vaikka lukea ne puskuriin, jolloin mikäli siirtoja on parillinen määrä, ovat parittomien indeksien siirrot 'omia' siirtoja ja parillisten vastustajan, ja päinvastoin (eli jos tiedostossa 5 siirtoa, niin siirrot 2 ja 4 omia, jos 6, niin siirrot 1,3,5 jne..).
Meitzi kirjoitti:
Ei noita ohjelmointivinkkejäkään voi kohta pistää jos niistäkin aina mietitään että "entäs jos tämä onkin suoraan jonkun kotiläksy?"
Vähän eri asia. Tässä on kuitenkin kyse kokonaisista, toimivista ohjelmista. Ei mistään "näin teet tämän yhden jutun"-opastuksista.
lainaus:
Jos joku on niin tyhmä että etsii vain valmista koodia niin hän löytää sen kyllä jostain muualtakin jos ei täältä.
Varmaan, mutta ei ole mikään hyvä syy siltikään. Vrt. "jokuhan niille alaikäisille kuitenkin ostaa viinaa".
Kaikki eivät välttämättä ymmärrä, että omaan nilkkaan se kolahtaa. Jos on viimeinen ilta ja deadline lähenee (ainakin lipastossa harjoitystyön reputtaminen on erittäin negatiivinen asia, koska sen jälkeen joutuu jonottamaan saadakseen uuden yrityksen), tulee ehkä kiusaus huijata.
lainaus:
Minusta on mielenkiintoista kilpailun jälkeen vertailla erillaisia toteutustapoja, optimointeja jne.
Ehkä kilpailijoilta voisi pyytää sanallisen selityksen omasta tekoälystään? Niitä voisi muutenkin olla vähän mukavampaa lukea kuin raakaa koodia.
Marja kirjoitti:
Ehkä kilpailijoilta voisi pyytää sanallisen selityksen omasta tekoälystään? Niitä voisi muutenkin olla vähän mukavampaa lukea kuin raakaa koodia.
Hyvä idea, sanallinen selitys olisi todella paljon mukavampi lukea kuin pelkkää koodia. Ongelma tietysti on, kuinka moni jaksaa/tahtoo tällaisen kirjoittaa.
Uskaltaako kukaan kertoa montako riviä koodia löytyy?
Jotenkin nuo yli sekuntin ajat pelottavat, omani kun toistaiseksi harvoin pääsee edes 1/100 sekuntiin...
hunajavohveli kirjoitti:
Onko olemassa jokin syy siihen, että siirtojen x- ja y-koordinaatit ovat samalla rivillä, ja siihen että ne on eroteltu välilyönnillä?
Useimmissa ohjelmointikielissä tällä tavalla tallennetut luvut pystyy lukemaan suoraan muuttujiin. Lukeminen tapahtuu esim. Basicissa ihan samalla tavalla kuin pilkuilla erotettujen lukujen lukeminen.
Marja kirjoitti:
Ehkä kilpailijoilta voisi pyytää sanallisen selityksen omasta tekoälystään? Niitä voisi muutenkin olla vähän mukavampaa lukea kuin raakaa koodia.
Tämä on hyvä idea, laitan kilpailusivuille asiasta lisäyksen. Sanallinen selitys saa kuitenkin olla vapaaehtoinen.
Metabolix kirjoitti:
Uskaltaako kukaan kertoa montako riviä koodia löytyy?
Tällä hetkellä näyttäisi olevan reilut 250 riviä, lopullinen määrä voi yhtä hyvin olla pienempi tai suurempi.
Testiohjelmasta on tulossa iltaan mennessä jälleen uusi versio, jossa merkintään käytettävän aikarajan saa päättää ja ristit ja nollat voi valita eri värisiksi.
VilleP kirjoitti:
Voihan esimerkiksi ensin laskea siirtojen lukumäärän ja vaikka lukea ne puskuriin, jolloin mikäli siirtoja on parillinen määrä, ovat parittomien indeksien siirrot 'omia' siirtoja ja parillisten vastustajan, ja päinvastoin (eli jos tiedostossa 5 siirtoa, niin siirrot 2 ja 4 omia, jos 6, niin siirrot 1,3,5 jne..).
No tuo juuri oli se keino, joka minulla oli mielessä, eli laskea onko siirtoja pariton, vai parillinen määrä. Eli ilmeisesti mitään helpompaa ei ole.
Tuo sanallinen selitys voisi olla hyvä idea, ja miksei pakollinenkin? Sillä voisi varmistaa, että tekoälyn tekijä ainakin tajuaa, miten oma äly toimii, ja valmiinen algoritmien kopioimisen mahdollisuus pienenee, vaikka sitä tuskin tulee muutenkaan.
lainaus:
Uskaltaako kukaan kertoa montako riviä koodia löytyy?
Jotenkin nuo yli sekuntin ajat pelottavat, omani kun toistaiseksi harvoin pääsee edes 1/100 sekuntiin...
Itse teen QB:llä, joten se on siksi niin hidas suhteessa sinun älyysi. (teet varmaan jollain C:llä?) Koodia on älyssäni tällä hetkellä jotain 140 riviä, jos lasketaan vain tekoäly, eikä mitään tiedostoonkirjoitusjuttu yms. Saattaa kyllä olla, että porttaan älyni vielä C++:lle.
Edit: Miten tuo lukeminen Basiceilla sitten onnistuu?
Ihanko vain:
INPUT #1, x INPUT #1, y
Osaako QB lukea välilyönnin erokemerkiksi? Ei ainakaan tuolla keinolla tietääkseni.
Testiohjelma ei syystä tai toisesta noteeraa tekoälyni poistumista sen siirron jälkeen jos siirto on x3, y1
Lisäsin loppuun "Sleep(1000);", mutta silti ohjelma ei noteeraa tekoälyn poistumista...?
Edit:
Tarvitseeko tekoälyn palauttaa nolla poistuessaan?
C++:
int main() { return 0; }
hunajavohveli kirjoitti:
Osaako QB lukea välilyönnin erokemerkiksi? Ei ainakaan tuolla keinolla tietääkseni.
Kyllä se osaa, kokeile vaikka! Tuon saman voi tietysti mahduttaa yhteen riviin lisäämällä pilkun muuttujien väliin.
Metabolix kirjoitti:
Testiohjelma ei syystä tai toisesta noteeraa tekoälyni poistumista sen siirron jälkeen jos siirto on x3, y1
Onko tekoälyn luoma tiedosto oikeanmuotoinen, oikeanniminen ja samassa hakemistossa testiohjelman kanssa? Antaako testiohjelma mitään virheilmoitusta?
Metabolix kirjoitti:
Tarvitseeko tekoälyn palauttaa nolla poistuessaan?
Ei tarvitse. Riittää, että ohjelma sulkeutuu.
Antti Laaksonen kirjoitti:
hunajavohveli kirjoitti:
Osaako QB lukea välilyönnin erokemerkiksi? Ei ainakaan tuolla keinolla tietääkseni.
Kyllä se osaa, kokeile vaikka! Tuon saman voi tietysti mahduttaa yhteen riviin lisäämällä pilkun muuttujien väliin.
Eikun siis tietystihän se sitten osaa, kun lukee tietoa numeerisiin muuttujiin! Muistin vain lukeneeni joskus tietoa niin, että välilyönnit tulivat mukana, mutta silloin luin tiedon varmasti merkkijonomuuttujiin.
Antti Laaksonen kirjoitti:
Metabolix kirjoitti:
Testiohjelma ei syystä tai toisesta noteeraa tekoälyni poistumista sen siirron jälkeen jos siirto on x3, y1
Onko tekoälyn luoma tiedosto oikeanmuotoinen, oikeanniminen ja samassa hakemistossa testiohjelman kanssa? Antaako testiohjelma mitään virheilmoitusta?
Kyllä se toimii ihan hyvin kun ei vain laita juuri tuohon kohti.
Testiohjelma vain kelaa aikaa 10s asti ja ilmoittaa aikarajasta.
Marja kirjoitti:
lainaus:
Jos joku on niin tyhmä että etsii vain valmista koodia niin hän löytää sen kyllä jostain muualtakin jos ei täältä.
Varmaan, mutta ei ole mikään hyvä syy siltikään. Vrt. "jokuhan niille alaikäisille kuitenkin ostaa viinaa".
Mutta jos teet vaikka valmiit html sivut nettiin, voihan joku varastaa senkin lähdekoodin johonkin, eikö? Itse en ai ottaa vastuuta kaikkien ihmisten synneistä.
lainaus:
Ehkä kilpailijoilta voisi pyytää sanallisen selityksen omasta tekoälystään? Niitä voisi muutenkin olla vähän mukavampaa lukea kuin raakaa koodia.
Taidan olla samaa mieltä. (kaikesta huolimatta... eh)
Onko tuon tekoälyn testausohjelman mukana tulevan esimerkkitekoäly-kaken tarkoitus olla hyväkin pelaamaan, vai onko se vain esimerkki, joka tekee kuitenkin laillisia siirtoja? Sillä sitä se nimittäin vain tekee, siirtää ensimmäiseen vapaaseen ruutuun aloittaen vasemmasta yläkulmasta.
hunajavohveli kirjoitti:
.. sitä se nimittäin vain tekee..
hunajavohveli, taisit itse vastata kysymykseesi. Tuossapa muuten hyvähkö gomokua pelaava apletti: http://www.5stone.net/en/index.html , mitenkähän ohjelmanne pärjäävät sitä vastaan (huomiokaa 'level'-valikko)?
VilleP kirjoitti:
hunajavohveli, taisit itse vastata kysymykseesi.
En kysynyt, toimiiko se, vaan olisiko sen tarkoitus toimia, eli bugittaako se, mutta ilmeisesti sen nyt siis ei olekaan tarkoitus pelata hyvin.
Testiohjelman uusi versio (aikarajan valinta ja väritykset) on nyt saatavilla: https://www.ohjelmointiputka.net/kilpailut/2004-ristinolla/rntesti.zip
Metabolix kirjoitti:
Kyllä se toimii ihan hyvin kun ei vain laita juuri tuohon kohti.
Merkillinen juttu, en voi kuitenkaan uskoa, että vika liittyisi tuohon nimenomaiseen ruutuun. Oletko varma, että tekoälysi sulkeutuu tavallisesti ongelmallisen merkinnän jälkeen? Testiohjelma näet odottaa, kunnes tekoäly on sammunut.
hunajavohveli kirjoitti:
Onko tuon tekoälyn testausohjelman mukana tulevan esimerkkitekoäly-kaken tarkoitus olla hyväkin pelaamaan, vai onko se vain esimerkki, joka tekee kuitenkin laillisia siirtoja?
Joo, kake on esimerkki oikein toimivasta tekoälystä, mutta pelitaidoiltaan se on todellakin huono. :)
Mietin vähän tätä lähdekoodiasiaa kun kävin suihkussa, enkä edellenkään voi sulattaa sitä, että lähdekoodeja ei julkaista. (ei senpuoleen, että se vaikuttaisi minun osallistumiseen) Kilpailun tarkoitus on luoda tekoälyn lähdekoodi, ei ohjelma. (koska muulloin kilpailuun osallistumiseen ei tarvittaisi muuta kuin suoritettava binääri) Kilpailuun osallistuu siis lähdekoodi, joka tuottaa tietyn tuloksen kilpailussa.
Jos vertaamme tätä vaikka pituushyppykilpailuun (tai sovita joku toinen kilpailu tähän): Huomaat hypänneesi vaikka 5 mittayksikköä pitkän hypyn, tämän jälkeen saat tiedon ,että voittaja on hypännyt 6 mittayksikköä. Eikö ole kohtuullista, että saat katsoa minkälaisella suorituksella (lähdekoodilla) vihollinen hyppäsi pitemmän hypyn. Ohjelman binäärihän on vain lähdekoodin tulos, mutta ei itse suoritus. Binääristä ei voi päätellä millä tavalla tiettyyn tulokseen päästiin.
Useampikin on kertonut pelkäävänsä että lähdekoodia käytetään väärin ("hyväksi?"). Olisiko joku niin ystävällinen ja kertoisi muutamia esimerkkejä, jossa lähdekoodia käytetään väärin niin, että siitä koituu sinulle itselle haittaa, harmia tai menetystä? Tai sanotaanko, että edes realistinen esimerkki, jossa tekijänoikeutta loukataan?
Lähdekoodien julkaisemisesta on seuraavat hyödyt:
+ Riski siihen että kilpailuun osallistuu ns. kopioitua koodia vähenee merkittävästi (Antti yksin tuskin kerkee lähdekoodeja kovin tarkasti lukemaan)
+ Kilpailun jälkeen jokainen pystyy henkilökohtaisesta tarkastamaan haluamiensa kilpailijoiden lähdekoodit (suoritukset)
+ Ainut tapa varmistaa että kilpailuun osallistuva binääri on sama versio kuin lähdekoodi (ellei Antilla ole tarkotus kääntä kaikkia uudelleen)
+ Muiden lähdekoodeja tutkimalla (mahd. vertaamalla niitä omaan) on mahdollista tapahtua oppimista (vai onko Ohjelmointiputka olemassa vain kilpailuja varten?)
+ Henkilö joka osaa tietyn ohjelmointikielen voi olla kiinnostunu siitä, miten lähes samaan lopputulokseen on päästy toista ohjelmointikieltä käyttämällä
+ Se on c00lia, "osallistuja Jukka Älytalo, sija 3, lataa lähdekoodi tästä"
Joku joka on lähdekoodin julkaisemista vastaan, kirjoittaa miinukset.
Koska tämä on ensimmäinen ohjelmointikilpailu johon osallistun, joku muu varmaan osaa kertoa miten yleensä ohjelmointikilpailuissa, julkaistaanko lähdekoodit vai ei? Miksi?
Antti Laaksonen kirjoitti:
Metabolix kirjoitti:
Kyllä se toimii ihan hyvin kun ei vain laita juuri tuohon kohti.
Merkillinen juttu, en voi kuitenkaan uskoa, että vika liittyisi tuohon nimenomaiseen ruutuun. Oletko varma, että tekoälysi sulkeutuu tavallisesti ongelmallisen merkinnän jälkeen? Testiohjelma näet odottaa, kunnes tekoäly on sammunut.
Sain toimimaan kun vaihdoin ohjelman palautusarvoksi nollan.
(Käytin aiemmin tulosta, kun suunnittelin tekeväni moniälyisen ristinollan.
Eli palautusarvolla 0x0103 tai 0x0301 ei toiminut, enpä muista enää kumpi... Joku VB:n ongelma tässä?)
Meitzi kirjoitti:
Olisiko joku niin ystävällinen ja kertoisi muutamia esimerkkejä, jossa lähdekoodia käytetään väärin niin, että siitä koituu sinulle itselle haittaa, harmia tai menetystä?
No ei tämmöisessä pienessä mittakaavassa tietenkään voi mitään vahinkoa koitua, mutta eikös HalfLife 2 joutunut jonkin tällaisen uhriksi...?
Meitzi kirjoitti:
Koska tämä on ensimmäinen ohjelmointikilpailu johon osallistun, joku muu varmaan osaa kertoa miten yleensä ohjelmointikilpailuissa, julkaistaanko lähdekoodit vai ei? Miksi?
No tällaisessa jossa kaikkien tavoite on sama on varmasti hyvä ja kaikkien kannalta haitaton ratkaisu julkaista lähdekoodit.
Sen sijaan esim Pelisivujen pelintekokilpailussa ei tarvinnut muistaakseni edes lähettää koodia, pelkkä "tuote" riitti. Toisaalta siinähän on varmasti enemmän suoraan kopioitavissa olevaa koodia (esim. grafiikkaengine) kuin tässä.
Nyt vasta kohtasinkin vihoviimeisen ongelman!
Huomasin juuri, että kun käännän tekoälyni exeksi, se toimii väärin ja pelaa aivan eri tavalla, kuin QB:llä ajamani lähdekoodi, vaikka tekoälyni ei käytä satunnaisuutta, vaan pelaa samassa tilanteessa aina samalla tavalla. Olen muutenkin huomannut, että QB:n exe-kääntäjä on ruvennut takkuilemaan ja välillä valittaa milloin mistäkin virheestä, vaikka lähdekoodi toimii aivan oikein. Mutta mikäli en saa tekoälyä kunnolla käännettyä, en voi osallistua, sillä exe pelaa aivan väärin, ja tekee tyhmiä siirtoja. Onko kukaan muu havainnut QB:n (siis QBasic 7.1 QBX) exe-kääntäjässä vikoja, ja mitähän voin tehdä, jos en saa sitä toimimaan? Yksi vaihtoehto on tietysti portata C++:lle, mutta en ole varma onnistunko siinä.
Metabolix kirjoitti:
Uskaltaako kukaan kertoa montako riviä koodia löytyy?
Jotenkin nuo yli sekuntin ajat pelottavat, omani kun toistaiseksi harvoin pääsee edes 1/100 sekuntiin...
Mulla on koodia n.1500 riviä ja miettimisaika < 1.sekuntti... Joku kirjoitti, että oma älynsä miettii parhaimmillaan 10minuuttia :-) Miten on mahdollista?? Minua alkaa ihan huolestuttamaan tämä älyni äkkipikaisesti tehtyjen ratkaisujen hyvyys...
Kunpa pääsis testaamaan ennen kilpailua, jonkun tekoälyä vastaan niin tietäisi missä mennään...
Niin ja Antti, kait kilpailuun osallistuu leikkimielisesti myös yksi ihmispelaaja?
ez kirjoitti:
Kunpa pääsis testaamaan ennen kilpailua, jonkun tekoälyä vastaan niin tietäisi missä mennään...
Kokeilkaas muuten niin, että teette kaksi tekoälyä, tai siis sama tekoälyä, mutta vain molemmille eri nimet ja pistäkää ne pelaamaan toisiaan (eli siis itseään) vastaan.
Tuo minun ongelmani taisi nyt jäädä tuonne edelliselle sivulle piiloon. Tämän takia juuri halusin, että joka sivulla näkyisi 50 viimeisintä viestiä, koska heti kun raja ylittyy edelliset viestit katoavat näkyvistä. Mutta vilkaiskaapa ongelmaani ja sanokaa, mitä voin tehdä.
Itseäni huolestuttaisi tuo 10:n sekunnin aikaraja sen takia että osallistuisin tod. näk. java-ohjelmalla, ja siinä kestää virtuaalimoottorin käynnistäs sen 10s. Näin kärjistettynä. Java-toteutuksille pitäisi olla erilainen moottori joka lataa luokan itseensä ja kutsuu metodia sen sijaan että käynnistää ohjelman joka kerta uusiksi.
ez kirjoitti:
Kunpa pääsis testaamaan ennen kilpailua, jonkun tekoälyä vastaan niin tietäisi missä mennään...
Kokeile tuota (jo aikaisemmin) antamaani linkkiä, http://www.5stone.net/en/index.html , sieltä gomoku-apletti, joka on siis ristinolla 15x15 ruudukolla. Se ei ole tietenkään kilpailuyhteensopiva, mutta siirrot voi siirtää sille ja siltä 'manuaalisesti'. Huomaa 'level'-valikko.
Ps. Oma ohjelmani pärjää sille varsin hyvin
NiKC kirjoitti:
Itseäni huolestuttaisi tuo 10:n sekunnin aikaraja sen takia että osallistuisin tod. näk. java-ohjelmalla, ja siinä kestää virtuaalimoottorin käynnistäs sen 10s. Näin kärjistettynä. Java-toteutuksille pitäisi olla erilainen moottori joka lataa luokan itseensä ja kutsuu metodia sen sijaan että käynnistää ohjelman joka kerta uusiksi.
Niin... kilpailun järjestävän ohjelman pitäisi jotenkin ottaa huomioon ainoastaan itse tekoälyn käyttämä aika.
Säännöissä kannattaa muuten mainita, että tiedostossa numerot alkavat ykkösestä, eli ensimmäinen ruutu on 1 1.
Kerkesin äsken itsekkin vähän pohtia, että mikäs tässä mättää ennekuin tajusin että numerot heittää vähän.
Pistin tekoälyni pelaamaan itseään vastaan 50x50 ruudukolla ja oli tasasta vääntöä. Keskeytin, kun oli 3/4 ruudukkoa täynnä...
10 Sekkaa on hyvä aikaraja. Tosin jos pelataan 50x50 ruudukolla ja ruudukossa on paljon merkkejä, niin se on aika vähän.
Minuakin huolestuttaa tuo aikaraja, PHP:llä sekunti menee jo tiedoston luvun/kirjoituksen parissa, saa sitten nähdä, kuinka kauan aikaa kuluu, kunhan tekoäly on valmis.
Tämä tulee ehkä hieman myöhään, mutta jos kilpailussa olisi erilaisia aikaluokkia?
-Grey-
NiKC kirjoitti:
Itseäni huolestuttaisi tuo 10:n sekunnin aikaraja sen takia että osallistuisin tod. näk. java-ohjelmalla, ja siinä kestää virtuaalimoottorin käynnistäs sen 10s. Näin kärjistettynä. Java-toteutuksille pitäisi olla erilainen moottori joka lataa luokan itseensä ja kutsuu metodia sen sijaan että käynnistää ohjelman joka kerta uusiksi.
Tempfile kirjoitti:
Minuakin huolestuttaa tuo aikaraja, PHP:llä sekunti menee jo tiedoston luvun/kirjoituksen parissa, saa sitten nähdä, kuinka kauan aikaa kuluu, kunhan tekoäly on valmis.
Tässä sen huomaan, että monen kielen osaamisesta on hyötyä.
Edit: tagien korjailua
Edit: Meitzi: vika korjattu :)
Gaxx: mistä sait minun nickin tuohon ;)
Pelautin tekoälyäni http://www.5stone.net/en/index.html:stä löytyvää tekoälyä vastaan kaksi peliä (värien vaihto toiseen peliin). Aloittaja voitti molemmissa peleissä.
Kai kilpailussakin otetaan aloittajan etulyöntiasema huomioon, eli jos pelautetaan tekoälyä X tekoälyä Y vastaan siten että X aloittaa, niin pelautetaan myös toinen peli toisinpäin? Muuten tuloksiin voi tulla aika paljon satunnaisuutta.
(Itse asiassa aloittajan osa näyttää niin paljon vahvemmalta, että harkitsen, muuttaisinko tekoälyn aggressiivisuutta siten, että se olisi aloittajana hyökkäävämpi. Nyt se on erittäin puolustava.)
Btw, tekoälyn laskenta-ajat pienenivät n. 28 sekunnista alle viiten, kun vaihdoin omalta koneeltani (366 MHz) poikaystäväni koneelle (1,6 GHz) huoneen toiselle puolen ;)
Marja kirjoitti:
Pelautin tekoälyäni http://www.5stone.net/en/index.html:stä löytyvää tekoälyä vastaan kaksi peliä (värien vaihto toiseen peliin). Aloittaja voitti molemmissa peleissä.
Marja, appletin oikealla puolella näkyy 'level'-valikko, millä tasolla pelasit pelit? (mikäli et muuttanut sitä, taisi se olla 'ordinary')
Omani voittaa sen joka asetuksella (low, ordinary, high, highest) jos pääsee aloittamaan, ja ainakin 'ordinary':llä vaikkei pääsisikään aloittamaan.
Marja kirjoitti:
Kai kilpailussakin otetaan aloittajan etulyöntiasema huomioon, eli jos pelautetaan tekoälyä X tekoälyä Y vastaan siten että X aloittaa, niin pelautetaan myös toinen peli toisinpäin? Muuten tuloksiin voi tulla aika paljon satunnaisuutta.
säännöissä:
Kilpailun toteutus Kaikki tekoälyt pelaavat toisiaan vastaan kaksi peliä, kumpikin saa aloittaa kerran. Voitosta saa kaksi pistettä, tasapelistä yhden pisteen ja häviöstä ei yhtään.
Toki sitten on vähän hankala tilanne jos molemmat voittavat pelin jonka aloittivat. Useimmat (arvaus) tekoälyt kun eivät tule sisältämään satunnaisuutta, eli uudellenpeluuttaminen ei auta yhtään.
Olisi kiva tosiaan päästä testaamaan toista tekoälyä vastaan. (Jostain syystä ei tuo nettitekoäly tehnyt siirtoaan.)
Itseään vastaan pelatessaan tekoälyni täytti 50x50 ruudukon jatkuvalla samalla kuviolla ja päätyi tasapeliin...
Meitzi kirjoitti:
Toki sitten on vähän hankala tilanne jos molemmat voittavat pelin jonka aloittivat. Useimmat (arvaus) tekoälyt kun eivät tule sisältämään satunnaisuutta, eli uudellenpeluuttaminen ei auta yhtään.
Enpä tullut edes ajatelleeksi, että tekisin tekoälyni ilman mitään randomia... Vaikka kyllähän tuo näin jälkeenpäin kuullostaa ihan järkevältä. :D.
hunajavohveli kirjoitti:
Nyt vasta kohtasinkin vihoviimeisen ongelman!
Huomasin juuri, että kun käännän tekoälyni exeksi, se toimii väärin ja pelaa aivan eri tavalla, kuin QB:llä ajamani lähdekoodi, vaikka tekoälyni ei käytä satunnaisuutta, vaan pelaa samassa tilanteessa aina samalla tavalla. Olen muutenkin huomannut, että QB:n exe-kääntäjä on ruvennut takkuilemaan ja välillä valittaa milloin mistäkin virheestä, vaikka lähdekoodi toimii aivan oikein. Mutta mikäli en saa tekoälyä kunnolla käännettyä, en voi osallistua, sillä exe pelaa aivan väärin, ja tekee tyhmiä siirtoja. Onko kukaan muu havainnut QB:n (siis QBasic 7.1 QBX) exe-kääntäjässä vikoja, ja mitähän voin tehdä, jos en saa sitä toimimaan? Yksi vaihtoehto on tietysti portata C++:lle, mutta en ole varma onnistunko siinä.
Lisäksi huomasin, että exe miettiikin paljon kauemmin kuin QB:llä ajettu koodi. Harkitsen kyllä vakavasti tuota porttausta.
Voitaisiinko tuo ruudukon koko sopia etukäteen jolla pelataan? Tekoälyn teko helpottuisi huomattavasti.
tuomas kirjoitti:
Voitaisiinko tuo ruudukon koko sopia etukäteen jolla pelataan? Tekoälyn teko helpottuisi huomattavasti.
Mieluummin ei, nyt kun olen tekoälyni miltei tehnyt...
Edit: Voin kai lähettää koodista sekä Pascal- että C++-version? Se on hetkessä portattu, ja siitä voi julkaistaessa olla hyötyä niille, jotka tuntevat vain toisen...
tuomas kirjoitti:
Voitaisiinko tuo ruudukon koko sopia etukäteen jolla pelataan? Tekoälyn teko helpottuisi huomattavasti.
Miten se muka helpottuu??
Ei mulla ainakaan mitään ongelmia tule vaikka pelattaisiin 1000x1000 ruudukolla, samat asiat se siitä katsoo.
tuomas kirjoitti:
Voitaisiinko tuo ruudukon koko sopia etukäteen jolla pelataan? Tekoälyn teko helpottuisi huomattavasti.
Voithan aina tehdä tekoälysi kuntoon kiinteällä ruudukkokoolla ja vasta tämän jälkeen korvata jokaisen ruudukon kokoon viittaavan numeron esim. muuttujalla 'KOKO', tai siihen liittyvillä lausekkeilla. Muistia voinee varata tuon täyden 50x50 ruudukon mukaan, tuskin 1Gt muistiraja tulee kuitenkaan täyteen. Tällä tavoin ohjelmasi toimii todennäköisesti riittävän hyvin myös ainakin suunnilleen alkuperäisen kokoisilla laudoilla.
Marja kirjoitti:
Pelautin tekoälyäni http://www.5stone.net/en/index.html :stä löytyvää tekoälyä vastaan kaksi peliä (värien vaihto toiseen peliin). Aloittaja voitti molemmissa peleissä.
Huhhuh, meni taas hieman pitkään koodatessa, mutta nyt ohjelmani voittaa tuon appletin 1) joka tasolla (level), jos pääsee aloittamaan, ja 2) tasoilla 'low', 'ordinary' tai 'high', vaikkei pääsisikään aloittamaan.
Metabolix kirjoitti:
Eli palautusarvolla 0x0103 tai 0x0301 ei toiminut, enpä muista enää kumpi... Joku VB:n ongelma tässä?
Ongelman syy selvisi vihdoin. Asia on niin, että palautusarvo voi olla mikä tahansa, kunhan se ei ole juuri 0x0103. Syynä tähän on se, että tiedon ohjelman käynnissäolosta palauttava WinAPI-funktio käyttää tuota arvoa ilmaisemaan, että ohjelman suoritus on edelleen käynnissä. Muuten funktio palauttaa ohjelman palautusarvon.
Meitzi kirjoitti:
Niin ja Antti, kait kilpailuun osallistuu leikkimielisesti myös yksi ihmispelaaja?
Itse kilpailussa on vastakkain pelkkiä tekoälyjä, mutta kilpailun jälkeen kaikki pääsevät toki mittelemään tekoälyjä vastaan.
NiKC kirjoitti:
Itseäni huolestuttaisi tuo 10:n sekunnin aikaraja sen takia että osallistuisin tod. näk. java-ohjelmalla, ja siinä kestää virtuaalimoottorin käynnistäs sen 10s.
Tempfile kirjoitti:
Minuakin huolestuttaa tuo aikaraja, PHP:llä sekunti menee jo tiedoston luvun/kirjoituksen parissa
Nämä ajat kuulostavat kyllä liian suurilta. Mitä itse olen Java-ohjelmia testaillut, käynnistyksessä oleva viive oli tuskin huomattava (olisiko mahdollista, että virtuaalikone on valmiiksi latautuneena?). Ja PHP:llä tiedoston käsittelyyn ei millään voi kulua noin kauan, hitauden syyn täytyy olla jossain muualla.
hunajavohveli kirjoitti:
Lisäksi huomasin, että exe miettiikin paljon kauemmin kuin QB:llä ajettu koodi. Harkitsen kyllä vakavasti tuota porttausta.
Varmaan ihan hyvä idea, myös nopeuden kannalta. Tietenkin voit koettaa vielä, suoriutuisiko QB4.5 paremmin käännöksestä.
Antti Laaksonen kirjoitti:
Varmaan ihan hyvä idea, myös nopeuden kannalta. Tietenkin voit koettaa vielä, suoriutuisiko QB4.5 paremmin käännöksestä.
4.5 aiheuttaa yhtä lailla ongelmia. Tajusin nyt vasta kuitenkin, että 7.1 käskee pistää mukaan yhden kirjastotiedoston. Se auttoi (tekoälyni teki peräti yhden siirron oikein) ja siihen se sitten jäikin. Lopun peliä se pelasi yhtä surkeasti. C++:lle porttaus tuottaa kyllä minulla suuria vaikeuksia. Perusteet hallitsen kyllä, mutta joudun esittämään näiden kahdenkymmenen päivän aikana putkaan luultavasti monia kysymyksiä, että saan kaiken toimimaan. Tekoälyn algoritmi ja sille syötettävät ohjeet ovat kuitenkin jo viimeistelyä vaille valmiita, joten niillä ei ole kiirettä (onneksi).
Tuo alkaa kuulostaa kyllä ohjelmointivirheeltä. Miten kääntäjä voisi tehdä viallisen exe-tiedoston? Tuntuu niin kaukaahaetulta etten uskois kyllä kovin helpolla.
User137 kirjoitti:
Tuo alkaa kuulostaa kyllä ohjelmointivirheeltä. Miten kääntäjä voisi tehdä viallisen exe-tiedoston? Tuntuu niin kaukaahaetulta etten uskois kyllä kovin helpolla.
Sitähän minäkin, että tosi kumma juttu kyllä. Mutta eihän se voi ohjelmointivirhe olla, kun lähdekoodi toimii QB:stä ajattuna aivan oikein. Kääntäjä vain tekee viallisen exe:n, tai sitten jotkin asetukset ovat pahasti pielessä. Kun riittävän kauan pelaa, niin äly valittaa "Overflow", ihan niinkuin joku muuttuja kasvaisi koko ajan, eikä tekoäly nollaisi sitä, vaikka lähdekoodi nollaa. Ja olen muuten melkein varma, että tiedän, mikä muuttuja kyseessä. Ja se on ratkaiseva koko älyn toimivuuden kannalta. Loogisesti tästä seuraisi se, että äly pelaa miten sattuu.
Mutta minulle se on tämän tekoälyn osalta se ja sama, sillä onnistuin jo porttaamaan tekoälyni Visual Basic 3:lle, ja sillä tekemäni exe näyttäisi toimivan ihan oikein. :) Vielä kun saisin ennen kilpailua jostain VB6:n, jolla voisin tehdä lopullisen ja nopeamman version, niin sitten olisi kaikki täysin kunnossa, joskin VB3-versiokin on luullakseni tarpeeksi nopea 3-gigaisella koneelle. Siihen vielä päälle optimoinnit (joita ei toistaiseksi vielä edes ole), niin se on siinä. :)
Mikä tuo esim. tällähetkellä tuon "ohjelmoi tekoäly -bannerin" nurkassa oleva luku 19 tarkoittaa? Tarkoittaako se, että monta päivää kisaa on jäljellä?
Kyllä vain
Juu mutta miksi se vähenee noin uhkaavan nopeesti, vai tuntuuko se vain siltä.
Aika vaan menee nopeammin, kun on mielenkiintoista tekemistä.
Nauran kaikille niille tekoälyille, jotka häviävät omalleni (jos kenellekkään niin käy...)
Koodia on 130 riviä itse älyssä, plus tiedostonkäsittely ja kommentit, ja lisää tuskin juurikaan tulee... En silti itse yleensä pärjää tälle. (En kyllä ole juurikaan ristinollaa itse harrastanut...)
238 riviä löytyy mun tämänhetkisestä ja se voittaa tavallisesti ihmisen laskenta-ajan ollessa jopa reilusti alle sekunti vielä 50x50 ruudukollakin... Ei tämä kilpailussa taida pärjätä mutta johonkin peliin varmaan nopea matalan tason vastus :) (näin siis jos en parempaa ehdi saada valmiiks)
Nuo rivit eivät muuten kyllä itse asiassa kerro juuri mitään. Johan se nyt riippuu kielestäkin, kuinka paljon niitä tulee. Mutta jos nyt riveistä puhutaan, niin pääalgoritmini on Basicilla jotain 60 riviä, ja sille syötettävät ohjeet 20. Lisäksi on kaksi spesiaalialgoritmia, jotka vievä molemmat 5 riviä.
Mutta kun tähän vertaa...
ez kirjoitti:
Mulla on koodia n.1500 riviä ja miettimisaika < 1.sekuntti...
... ja Pascalia käytän. Jokainen 'begin' ja 'end' omalla rivillään.
Jaa-ah, mitähän luokkaa tuo Pascalin nopeus mahtaa olla, kun ei oikein ole tullut kokeiltua? Ilmeisesti ainakin reilusti Basicia nopeampaa.
Pascal on lähes mutta ei aivan C:n luokkaa.
On mulla tämä C:llekin portattuna...
Alkaa muuten näyttää aika uhkaavalta. Taitaa meikäläisen teköälytön jäädä alkusarjojen heittopussiksi;) 988 riviä C++:aa, mut on kyllä sellasta skeidaa että alta pois. Häpeän koodiani mutta voihan sen silti julkasta muitten huviksi... PS. Kauheeta valitusta;)
Ei ole helppoa ei, minulla on 500 riviä tekoälyn koodia ja 600 riviä graafista käyttöliittymää. (VB.NET)
Tekoäly on kohtalainen, mutta muutama aika tärkeä juttu puuttuu vielä. Saas nähdä keksinkö miten ne saisi helposti tehtyä.
Muutama parannusehdotus testiohjelmaan:
(1) 'Siirto taaksepäin' nappula. Tämä ei varmaankaan olisi kovin hankala tehdä, mutta varsin hyödyllinen kuitenkin.
(2) Uusin siirto erottuvammin näkyviin esim. tummemmalla värillä.
(3) Jonkinlainen 'turnajais'-mahdollisuus, jossa testiohjelma automaattisesti peluuttaa kaikkia annettuja tekoälyjä keskenään 2 ottelun verran, ja ilmoittaa tulokset. Tällainen tehdään varmaankin joka tapauksessa, ellei aikomus ole peluuttaa kaikki N*(N-1) peliä käsin.
Hyviä ideoita kaikki, uusi versio ohjelmasta on tulossa...
Minulla rupesi oudosti bugittamaan tuo testausohjelma, ja valitteli välillä Run Time Erroreista, ja sitten sulkeutui. Saattoi toisaalta johtua tekoälystänikin, mutta mielestäni siinä oli kaikki ihan kunnossa.
Tällä hetkellä koodia noin 390 riviä ja suoritus kestaa alle sekunnin. Tekoäly estää vaakasuorassa, pystysuorassa ja vinottain olevat suoran alut. Olen voittanut joitakin kertoja vain tekoälyn.
Nojuu tuohon testiohjelmaan kannattaa varmaan tehdä myös tallennusmahdollisuus, itse käytän ainakin sellaista aika paljon. Tallennan mielenkiintoisen pelitilanteen, josta voin helposti nähdä muuttuuko tekoälyn käyttäytyminen.
mun teko äly voitttaa kaken aina
sami kauppinen kirjoitti:
mun teko äly voitttaa kaken aina
Joo, mullakin pienellä ruudukolla aina välillä :P Ei ole oikeen kerinnyt koodailemaan sitä. Rivejä oli muistaakseni joku 30-40, eli se ei vielä muuta osaa kuin laittaa merkin tyhjään ruutuun ja senkin se tekee randomina. Viikonloppuna voisi yrittää vähän kehitellä sitä jos kerkee.
Toi Antin testaus ohjelma valitti:
Run-time error '62':
Input past end of file
Mulla on suurin piirtein sama tilanne kuin ajv:llä.
On tullut koodattua kaikkea muuta.
Voisko tohon Antin testaus ohjelmaa lisätä viivan, joka näyttää voitto suoran?
petrinm kirjoitti:
Toi Antin testaus ohjelma valitti:
Run-time error '62':
Input past end of file
Samaa ongelmaa pukkaa mulla myös. Tuon kanssa esiintyy usein sellainen, että tekoälyni ei edes näy avautuvan omassa ikkunassaan, eikä testausohjelmassa näy sitä "tekoäly miettii"-tekstiä, ja sitä aikalaskuria. Sitten hetken päästä tulee tuo virhe. Tämä tapahtuu aina, kun pelaan 50x50 ruudukolla. Muuten pelaa ihan hyvin.
sami kauppinen kirjoitti:
mun teko äly voitttaa kaken aina
Hehe. Haaahaa. Ei mun tilanne taidakaan olla niin huono kun täällä tälläisillä asioilla kehuskellaan;)
Dual kirjoitti:
sami kauppinen kirjoitti:
mun teko äly voitttaa kaken aina
Hehe. Haaahaa. Ei mun tilanne taidakaan olla niin huono kun täällä tälläisillä asioilla kehuskellaan;)
Veit sanat suustani :P
Tuolta löytyy melko hyvä ohjelma (15x15): http://www.wrenju.com/download/fiver_68.zip
Miten tekoälynne pärjäävät sitä vastaan? Omani voittaa sen pystyyn sekä aloittaessa että toisena ainakin 3:lla ensimmäisellä vaikeusasteella ('Monkpig', 'Monk', 'Monkey').
Tällä kertaa toi Antin testi ohjelma sanoi:
Run-time error '5':
Invalid procedure call or argument
Pahus, kun en pääse edes katsomaan itse testiohjelman lähdekoodia VB5:lla.
Kyllä se toimii, kun
Edit: testasin listaa.
Edit2: Antti Laaksonen: Virheenkäsittely olisi hyvä jaksaa pistää mukaan tuohon ohjelmaan. Kirjoitit itse VB-oppaan osa 9:ssä: "Missään tilanteessa ei pitäisi olla mahdollisuutta ohjelman täydelliselle kaatumiselle." Joskus vaan tulee oltua laiska, tuttua varmaan jokaiselle :) (Tänään töissä etsittiin syyllistä, joka unohti tehdä virheenkäsittelijän erääseen rutiiniin. Sen tekijä oli alunperin ajatellut siitä tulevan vain yhden rivin pituisen, mutta siitä tulikin lopulta paljon monimutkaisempi. Virheenkäsittelijää ei kukaan ollut jaksanut lisätä..)
Testiohjelman uudet ominaisuudet ovat miltei valmiit, mutta nyt täytyy kyllä ensin selvittää, mistä nuo ongelmat vanhassa versiossa johtuvat. Voitteko kertoa vähän tarkemmin, milloin virheilmoitukset tulevat, ja mikä on [nimi].kir-tiedoston sisältö sillä hetkellä? Ja tosiaan: jos koneellanne on Visual Basic, kokeilkaa tutkia sen avulla, millä rivillä virhe tulee.
jv_windy kirjoitti:
Virheenkäsittely olisi hyvä jaksaa pistää mukaan tuohon ohjelmaan. Kirjoitit itse VB-oppaan osa 9:ssä: "Missään tilanteessa ei pitäisi olla mahdollisuutta ohjelman täydelliselle kaatumiselle."
Joo, olet ihan oikeassa tässä. Ja jos ongelmat eivät muuten ratkea, niin täytyy tosiaan tehdä kunnollinen virheenkäsittely ohjelmaan. Joka tapauksessa virheitä on ikävän vaikea jäljittää, jos niitä ei saa toistettua omalla koneella.
Aikaisempi virheeni näkyy tämän aiheen edellisellä sivulla. Lähetin, Laaksonen, sinulle postissa kuvan, josta käy ilmi luullakseni kaikki tarpeellinen tieto vasta äskettäin tulleesta virheestä.
Mutta minun testausohjelmahan on toiminu koko ajan :P
Minullakin tuo vanha ohjelma tuuppaa kaatumaan tuohon input past end of fileen php-tekoälyä testatessa, vaikkei mitään laittomia siirtoja yms. löydykään. Visual Basicia ei ole, joten en voi virheitä tarkemmin etsiä.
Voiko kilpailuun osallistua useammalla kuin yhdellä tekoälyllä? Kilpailusivulta ei käy ilmi...
iluwatar kirjoitti:
Voiko kilpailuun osallistua useammalla kuin yhdellä tekoälyllä? Kilpailusivulta ei käy ilmi...
Peluuta tekoälyjäsi vastakkain ja lähetä voittaja kilpailuun.
Linkku kirjoitti:
Peluuta tekoälyjäsi vastakkain ja lähetä voittaja kilpailuun.
Se ei välttämättä kerro, kumpi on parempi; sehän riippuu täysin vastustajasta, tekoälylle kun ei voi aivan absoluuttista ihannemallia rakentaa.
Metabolix kirjoitti:
Se ei välttämättä kerro, kumpi on parempi; sehän riippuu täysin vastustajasta, tekoälylle kun ei voi aivan absoluuttista ihannemallia rakentaa.
No ei välttämättä, mutta voi kertoa.. jos tekoälyt ovat yhtähyviä pitäisi loogisella ajattelulla ymmärtää että ne voittaisivat vuorotellen, riippuen siitä kumpi aloittaa.. ja voihan peli venyä todella pitkäksi..
Mutta toisessa voi olla vaikkapa merkittävä bugi, mutta toinen taas ei vain koskaan saa aikaan tilannetta jossa bugi näkyisi...
Laitoin huvikseni tekoälyni pelaamaan itseään vastaan ja tässä tulos:
Ottelu loppui tekoälyn virheeseen!
Pitäisi varmaan tässä pikkuhiljaa aloittaa kunnolla koodaamaan tuota tekoälyä..
Omani kun on osaa vasta lukea tiedostoja.
Ja viskata siirtoja sattuman varassa.
petrinm kirjoitti:
Laitoin huvikseni tekoälyni pelaamaan itseään vastaan ja tässä tulos:
Ottelu loppui tekoälyn virheeseen!
Kuka voitti tuon pelin? Vai voittiko kukaan?
En löytänyt voittajaa
Etkö lukenut viimeistä lausetta?
petrinm kirjoitti:
Ottelu loppui tekoälyn virheeseen!
eli tekoäly mokas!
zigilii kirjoitti:
petrinm kirjoitti:
Laitoin huvikseni tekoälyni pelaamaan itseään vastaan ja tässä tulos:
Ottelu loppui tekoälyn virheeseen!
Kuka voitti tuon pelin? Vai voittiko kukaan?
En löytänyt voittajaa
Huomaa "ö" kirjain :)
Edit: Jaa ei sitä tässä haettukaan. Taitaa bugata tuo ohjelma?
Nyt on taas uusi versio testiohjelmasta: https://www.ohjelmointiputka.net/kilpailut/2004-ristinolla/rntesti_u.zip
Uusia ominaisuuksia viimeisen siirron piirtäminen eri värillä ja ihmispelaajan peruutusmahdollisuus. Kehitteillä olevaa turnaustoimintoa voi myös jo koettaa. Lisäksi tein ohjelmaan erään muutoksen, jonka pitäisi estää tiedoston lukemisen liian varhain ("Input past end of file").
Tosta vielä sen verran että kun tulee "Runtime error 53 File not found" niin olisi hyvä jos se ei sammuttaisi koko ohjelmaa vaan pyytäisi korjaamaan tiedot.
T.M. kirjoitti:
Taitaa bugata tuo ohjelma?
Ei enään!!!
HUOM:Ensimmäinen tasapelikin syntyi!
petrinm kirjoitti:
Etkö lukenut viimeistä lausetta?
petrinm kirjoitti:
Ottelu loppui tekoälyn virheeseen!
eli tekoäly mokas!
Luin viimeisen lauseen, mutta ymmärsin sen silleen että toinen tekoälyistä teki virheen ja toinen sai viisi palloa/rastia peräkkäin :)
Hyvä, nyt tuo testausohjelma näyttäisi toimivan ihan oikein. Vähän kummalliselta tuntuu vain se, että kun olen tehnyt oman siirtoni, kestää melkein 10 sekuntia ennen kuin tulee teksti "tekoäly miettii" ja tuo teksti kestää aina noin 2 sekuntia, ennen kuin tekoäly tekee siirron, vaikka koodina tekoälyni mietti suunnilleen 12 sekuntia. Mitä tästä voidaan pienen laskutoimituksen jälkeen päätellä?
Edit: Vastaus: Tekoäly luultavasti miettiikin 12 sekuntia, mutta jostain kumman syystä laskuri käynnistyy vasta 10 sekunnin jälkeen.
hunajavohveli kirjoitti:
Vähän kummalliselta tuntuu vain se että kestää melkein 10 sekuntia ennen kuin tulee teksti "tekoäly miettii"
Tuomariohjelmassa on ilmeisesti vain virhe ettei se päivitä ruutuun tekstiä heti.
Meitzi kirjoitti:
Tuomariohjelmassa on ilmeisesti vain virhe ettei se päivitä ruutuun tekstiä heti.
Kyse ei ole siitä, sillä laskuri alkaa nollasta, vaikka tekoäly on miettinyt jo 10 sekuntia.
Metabolix kirjoitti:
Oma tekoälyni pelaa tasapelin itseään vastaan 20x20 -ruudukolla lähes joka toinen kerta.
Miten niin lähes joka toinen kerta? Eikö se pelaa aina samalla lailla? Vai oletko laittanut sattumatekijän mukaan (mikä ei ole kauhean kannattavaa)?
Tossa Antin testaus ohjelman turnaus osiossa, voi ainoastaan pelata 10x10 ruudukolla, jos laittaa ruudukon kooksi vaikka 20x20 niin peli alkaa 10x10 ruudukolla eli virhe
Aikaa on enää kaksi päivää, joten haluaisin todella saada selvyyden siitä toimiiko tuo ohjelma kunnolla. En nimittäin kykene kunnolla luottamaan siihen, onko vika testauksessa vai tekoälyssäni. Miten käy, jos ongelmia ilmenee edelleen? Joudutaanko kilpailun päättymisaikaa siirtämään? Itse olen ainakin aikalailla tekoälyn suhteen valmis, mutta testaus ja optimointi on hankalaa, kun ei tiedä, miten paljon aikaa tekoäly todella käyttää.
Pelialueen kokoa kilpailussa ei vielä liene päätetty, joten suosittelisin kokoa 15x15.
Muutamia perusteluja:
1. 15x15 on 'virallinen' gomokulaudan koko (gomoku on käytännössä sama kuin ristinolla).
2. Ruudukon koon tulisi olla pariton luku, jolloin laudalla on yksikäsitteinen keskiruutu, johon aloittava pelaaja voi asettaa merkkinsä.
3. Liian pienillä ruudukoilla (<11) ottelut päättyvät melko varmasti aina tasapeliin. Jos ruudukko taas on liian suuri (>19), saattavat ottelut kestää varsin kauan ja aloittavan pelaajan etukin on suurempi. Mikäli kaksi tekoälyä siis pelaavat tasapelin 15x15 ruudukolla, ei suuremmilla ruudukoilla peluuttaminen todennäköisesti anna merkittävää lisätietoa niiden paremmuudesta, vaikka toinen voittaisikin.
Tässä omia mielipiteitäni:
1. 15*15 voisi olla sopiva pelialueeksi, 1. yhteenotossa.
2. Voihan pelilaudan koko olla symmetrisyyden takia pariton. Koodissa keskikohdan paikkeilla olevan kohdan saa kuitenkin helposti 2:n kokonaislukujakolaskulla.
3. Ajatuksenasi varmaan on, että aloittajan pitäisi edunsa takia voittaa jo suhteellisen pienellä ruudukolla.
Omasta mielestäni kannattaisi kuitenkin pelata loppupelit isommilla ruudukoilla, tilaa kuitenkin tarvitaan.
Jos 2 tekoälyä voittavat molemmat omat aloitusvuoronsa, ehkäpä voisi katsoa siirtojen määrästä, että kumpi voitti nopeammin? Tähän vaikuttaa tietysti pelityyli, mutta mitä parempi tekoäly on, sitä nopeammmin sen pitäisi voittaa.
Ruudukon rajauksella voitaisiin jossain määrin pistää tekoälyjä järjestykseen, koska paremman teoälyn pitäisi voittaa nopeammin, ja ehkä tämän ruudukon puitteissa. Mutta parempi voisi olla, että pelataan tasapelin tullen isommalla pelialueella, ja voiton tullen vertaillaan kumpi voitti nopeammin sirtojen määristä. Tällöin on sama ajatus, että parempi tekoäly voittaa pienemmellä ruudukolla, eli voidaan sanoa, myös että vähemmällä siirtomäärällä, josta pienempi ruudukko muodostuu.
Aloittavan pelaajan edulla, isoillakaan ruudukoilla, ei olisi haittaa, jos vertailtaisiin kumpi voitti nopeammin. Mutta antaisiko tämä vertailu aina oikean paremmuuden? Tai riittävän hyvän tiedon paremmuudesta?
Että kun saisi aikaa jostain lisää, jäi oman tekoälyn tekeminen viime tippaan. Täytyy katsoa mitä tänään ja huomenna töiden jälkeen saisi ehkä tehtyä.
VilleP kirjoitti:
1. 15x15 on 'virallinen' gomokulaudan koko (gomoku on käytännössä sama kuin ristinolla).
2. Ruudukon koon tulisi olla pariton luku, jolloin laudalla on yksikäsitteinen keskiruutu, johon aloittava pelaaja voi asettaa merkkinsä.
3. Liian pienillä ruudukoilla (<11) ottelut päättyvät melko varmasti aina tasapeliin. Jos ruudukko taas on liian suuri (>19), saattavat ottelut kestää varsin kauan ja aloittavan pelaajan etukin on suurempi. Mikäli kaksi tekoälyä siis pelaavat tasapelin 15x15 ruudukolla, ei suuremmilla ruudukoilla peluuttaminen todennäköisesti anna merkittävää lisätietoa niiden paremmuudesta, vaikka toinen voittaisikin.
1. Ristinollaa taas usein tapana pelata vihkon sivulle niin, että lopussa tulee tappelu siitä, lasketaanko reunan puolikkaat ruudut mukaan.
2. Entäpä jos jonkun taktiikka ei asetakaan ensimmäistä juuri keskelle tai on vaikkapa parempi parillisilla kuin parittomilla laudoilla? Joku on voinut tehdä tekoälynsä pelaamaan mahdollisimman hyvin laudasta riippumatta, toinen taas suunnitella sen pelaamaan hyvin 15x15-ruudukolla ja toivoa että, se pärjää muillakin.
3. En näe, kuinka suuri ruudukko suurentaisi aloittavan pelaajan etua, ja se, että isolla ruudukolla tarvitaan toisenlaisia kykyjä kuin 15x15-ruudukolla ei tee siitä sen epäluotettavampaa paremmuuden kannalta, mutta tuo tasapelitodennäköisyys pitää kyllä paikkansa.
Metabolix kirjoitti:
1. Ristinollaa taas usein tapana pelata vihkon sivulle niin, että lopussa tulee tappelu siitä, lasketaanko reunan puolikkaat ruudut mukaan.
Haha, niin totta, niin totta :)
hunajavohveli kirjoitti:
Aikaa on enää kaksi päivää, joten haluaisin todella saada selvyyden siitä toimiiko tuo ohjelma kunnolla. En nimittäin kykene kunnolla luottamaan siihen, onko vika testauksessa vai tekoälyssäni.
Testaan kaikkien tekoälyjen toiminnan ohjelman kanssa ennen itse turnausta, ja jos ajanmittauksessa on jostain syystä virhe tekoälysi kanssa, korjaan sen. Todellinen tekoälyn käyttämä aika on se, jolla on merkitystä. Jos testiohjelma ei tunnu toimivan sinulla oikein, voit varmaan testata tekoälyä eri luk-tiedostoilla suoraan komentoriviltä, ja vaikka lisätä testausta varten tekoälyyn oman ajanmittauksen.
Peliruudukon koosta: Näillä näkymin turnaus koostuu kolmesta osasta, joista jokainen pelataan erikokoisella peliruudukolla. Tarkkoja kokoja ei tule etukäteen tietoon, mutta tekoälyjä siis testataan pienillä ja suurilla ruudukoilla, ja mukana on sekä sivunpituudeltaan parillisia että parittomia ruudukkoja. En kuitenkaan usko, että ruudukon koolla on mainittavaa merkitystä pelien lopputuloksiin.
jv_windy kirjoitti:
Jos 2 tekoälyä voittavat molemmat omat aloitusvuoronsa, ehkäpä voisi katsoa siirtojen määrästä, että kumpi voitti nopeammin? Tähän vaikuttaa tietysti pelityyli, mutta mitä parempi tekoäly on, sitä nopeammmin sen pitäisi voittaa.
Tämä on hyvä ehdotus. Jos kahdella tekoälyllä on lopuksi sama pistemäärä, voidaan tehdä niin, että siirtojen määrä ratkaisee paremmuuden. Jos tekoäly voittaa pelin, vähäinen siirtojen määrä on eduksi. Mutta jos tekoäly häviää pelin, suuri siirtojen määrä eli pelin pitkittäminen katsottaneen kuitenkin ansioksi.
Voi samperli. En ole ehtinyt kuin vasta viime viikolla aloittaa. Mulla on mielenkiintoinen algoritmi. Täytyypä tehdä se valmiiksi, toivottavasti voi vielä heinäkuussa testata kilpailuun osallistuneita ohjelmia. Että olisiko itse voittanut.
En ole pahemmin jaksanut perehtyä tekoälyyni.. tuskin se viimeinen
on (ainakin toivon niin) =)
Milloinkas taistot pyörähtää käyntiin? Keskiyölläkö?
Mitenkäs tuo päivälaskuri näyttää yhä kahta?
Olin juuri aikeissa kysyä samaa. Kyllä se minusta kahta eilenkin näytti. Onko tänään siis viimeinen päivä, vai ei?
Nyt laskuri näyttää taas oikein. Tänään on viimeinen päivä, ja kilpailuaikaa on jäljellä vielä viisi ja puoli tuntia. Tulosten julkaisuun ei pitäisi mennä paria päivää enemmän.
Blaah... taisi jäädä taas osallistuminen sikseen.
Tekoäly pelaa heh.. empäs kerrokkaan miten hyvin.
Lähetä silti, ei sitä koskaan tiedä, jos vaikka kaikissa tekoälyissä on bugi. :)
Itse aion vielä tehdä viimeiset testaukset, ja lähettää sitten.
Sinne lähti viimenen versio. Minusta vähän tuntuu, että tolla ei hirmu pitkälle pärjätä. Pidin vähän taukoa tuossa ohjelmoinnissa kun alkoi välillä tuntua jo työltä ja nyt pukkas sitten kiirettä. Tekoälyllä on mahdollisuuksia jos peli ei etene kovin pitkälle, mutta isommalla kentällä 10 sekunin raja alkaa jo vaikuttaa siihen malliin että virheitä tulee. Olen aika varma että kellään tekoäly ei ainakaan toimi samalla periaattella kuin minun viritys.
Nonih, sinne meni minunkin tekoälyni viimeisin versio 6.1.13c. Nyt sitten vain pidetään peukkuja (joskin siitä ei aina samalla tavalla pelaavalle tekoälylle juuri hyötyä koidu) :)
Kiinnostaa todella nähdä, miten tässä kilpailussa käy.
Täältä lähti tekoäly kisaan mukaan myös. Harmi ettei ollut tarpeeksi aikaa koodata jo valmiiksi ideoitu siirtojen eteenpäin laskeminen. No, eiköhän tuo edes jonkin ottelun voita. Kielenä käytin muuten Pythonia, johon vasta hiljattain tutustuin.
Saanko lähettää toisen jos saan valmiiksi? Aloitan nyt :D
vastaa, Antti, pian!
Vain yhdellä tekoälyllä saa osallistua, mutta jos kerkeät tehdä paremman, voit toki vielä osallistua sillä aiemmin lähettämäsi sijasta.
Pahus, en ehdi tehdä enkä ainakaan testata ja todeta paremmaksi.
Rupesin tekemään sellaista, joka kokeilee kaikki tavat, joilla peli voi päättyä, ja valitsee sen ruudun, jonka jatkotilanteista suurin osa jatkuu voittoon (tai josta jäviää heti). Mahtaako olla hyvä keino? (Koodista olisi tullut lähes samanlainen kuin viime vuoden Datatähden ykköstehtävässä; harmi etten säilyttänyt sitä.)
Voi käsi. Mbnetin servu tais mennä nurin. Nyt mun tekoäly tulee kyllä myöhässä....
EDIT: Jo lähti.
Metabolix kirjoitti:
Rupesin tekemään sellaista, joka kokeilee kaikki tavat, joilla peli voi päättyä, ja valitsee sen ruudun, jonka jatkotilanteista suurin osa jatkuu voittoon (tai josta jäviää heti). Mahtaako olla hyvä keino? (Koodista olisi tullut lähes samanlainen kuin viime vuoden Datatähden ykköstehtävässä; harmi etten säilyttänyt sitä.)
15x15 ruudukko. Jokaisessa ruudussa voi olla 3 erilaista merkkiä (X, 0 tai tyhjä).
->Vaihtoehtojen määrä:
3^(15*15) = 3^(15^2) = 3^225 = n. 4,63 * 10^121
Noin monta tavua elikkä n. 4,21 * 10^109 teratavua (1 teratavu = 1024 gigatavua)
Elikkä etsi noin paljon muistia omaava kone, niin onnistuu.
acorn:
Et selvästikään osaa tehdä tällaista...
Muistia tarvitaan vain yhdelle laudalle ja listalle, jossa näkyy siirrot sillai "1: 8, 8; 2: 9, 8" jne. Heti kun jompi kumpi voittaa, ei tarvitse katsoa eteenpäin. Joka vaihtoehto vain käydään läpi, katsotaan onko se parempi kuin paras tähän asti ja siirrytään seuraavaan.
Raakaa voimaa käyttäen päädytään koodina 2500 sisäkkäiseen for-looppiin, helpommin ja hienommin tehtynä päädytään ylimääräiseen 5kt muistinkäyttöön.
Niin, voihan sen tarkistaa noinkin :D. En ole paljon miettinyt ongelmien ratkaisemista tai tekoälyjä, joten en tällaista ajatellut.
Toisaalta tuo mittari näyttää jo T:tä (tuomaristo?), joten eipä tässä taida olla mitään mahdollisuuksia tehdä sellaista. Tai toisaalta saattaahan Antti ottaa vielä kilpailuun mukaan ne, jotka tulevat tässä keskellä yötä.
Paljonko on osallistuneita?
Minullakaan sähköposti ei tällä hetkellä toimi, joten muutamia tekoälyjä saattaa vielä olla tulossa. Tähän mennessä osallistuneita on 29, ja lopullinen määrä selvinnee aamulla.
Osallistujiahan on yllättävän paljon.
Metabolix kirjoitti:
Rupesin tekemään sellaista, joka kokeilee kaikki tavat, joilla peli voi päättyä, ja valitsee sen ruudun, jonka jatkotilanteista suurin osa jatkuu voittoon (tai josta jäviää heti). Mahtaako olla hyvä keino?
Vaihtoehtoja vaan on niin perkuleesti että ei sitä peliä hirveen pitkälle ehdi 10 sekunnissa kokeilla. Oma viritykseni kerkeää vain 4 siirron päähän joka tarkoittaa noin 10 miljoonan siirron testaamista. Näin kirjoitettuna tekoälyni vaikuttaa paljon paremmalta kuin mitä se on ;)
Katsotaan... pakko kuitenkin kokeilla itse, muuten en usko ;)
Mahdollisia laudan lopputilanteita ei ole paljoa, mutta tapoja, joilla niihin päästään (eli erilaisia pelejä) on niin paljon, että niitä on mahdotonta laskea läpi esim. 50 x 50 -laudalla. Luulisin.
Oikestaan, niille eräs yläraja on 2500! kpl. Tosin yläraja-arviossa ei oteta huomioon, että jotkut pelit päättyvät ennen kuin lauta täyttyy. Tuskin kertaluokka kuitenkaan muuttuu.. laskekaa joku tarkempi arvio.
Tilanteita karsimalla pääsee yllättävän pitkälle laskennassa, oma ohjelmani on laskenut parhaimmillaan pelin loppuun asti 19 siirron päähän, havaiten varman voiton (edit: tuohon meni siis 10-20s 1.6Ghz koneella).
Ristinolla, tai gomoku (15x15) on muuten ratkaistu kokonaan, ( http://www.cs.vu.nl/~victor/thesis.html ) , eikä aivan 225! pelitilannetta sentään tarvinnut laskea.
Vieläkö tekoälyjä otetaan vastaan? Yöllä näin unta siitä, että toinen tekoäly voitti minun tekoälyni laittamalla kerralla neljä pelimerkkiä. Aamulla kehittelin monta tapaa, millä tavoin tässä pelissä voi huijata testausohjelmaa ja toista tekoälyä. En kerro niitä, ennen kuin osallistujien ottaminen on lopetettu, mutta sen jälkeen olisi hauska spekuloida (etenkin jos oma tekoäly häviää paljon ;)
Marja kirjoitti:
Vieläkö tekoälyjä otetaan vastaan? Yöllä näin unta siitä, että toinen tekoäly voitti minun tekoälyni laittamalla kerralla neljä pelimerkkiä. Aamulla kehittelin monta tapaa, millä tavoin tässä pelissä voi huijata testausohjelmaa ja toista tekoälyä. En kerro niitä, ennen kuin osallistujien ottaminen on lopetettu, mutta sen jälkeen olisi hauska spekuloida (etenkin jos oma tekoäly häviää paljon ;)
Hah. Tuskin tänään lähetettyjä teoksia enää hyväksytään, Anttin oli vähä pakko odottaa postin lukua aamuun kun (joku iso paikka tähän) posti ei toiminut. Mullakin kävi mielessä kun tuon aikarajan kanssa tappelin että pitäisköhän hidastaa koneen kelloa, eli niin että se käy vaikka puolta hitaammin jolloin kerkeää jo paljon enemmän ;)
Tietysti jos oikein törkeäksi rupeaa niin kirjoittelee ja lukee niitä muitakin tiedostoja ja korvaa vaikka vihollisen exe tiedoston vähä tyhmemmällä.
Ilmeisesti aika monenlaista tekniikkaa on käytetty. Mukava, kun noinkin paljon osallistujia tuli, eikä sitä tiedä, vaikka tulisi vielä paljon lisääkin. Otteluthan saattavat olla parhaillaankin käynnissä, ellei sitten tule sitä reaaliajassa esittämistä.
Yön aikana sähköpostiin oli tullut vielä neljä tekoälyä, jolloin lopullinen määrä nousee 33:een. Näin yhteen turnaukseen kuuluu 1056 peliä - saapa nähdä, kuinka kauan pelien pelaamiseen menee. Kaikkien tekoälyjen nimet ovat nyt kilpailusivulla.
Eihän tuo reaaliajassa esitys varmaan kovin vaikea olisi toteuttaa. Laaksoselle servu ja muille clientti ohjelma ja data kiertoon.
No joo, nuo Meitzinkin huijausehdotelmat ovat varmaan mahdollisia, itse mietin myös seuraavia:
- Kaikki huijaukset mahdollistaa se, ettei mitenkään voida tarkistaa, vastaako lähetetty lähdekoodi lähetettyä ajettavaa tiedostoa.
- Jos ohjelmat ovat samassa hakemistossa, toisen ohjelman nimen saa tietää katsomalla, minkä nimisiä tiedostoja hakemistossa on. Sitten voi pakottaa toisen tekemään jonkun siirron esim. kirjoittamalla toisen ohjelman .luk-tiedostoon sellainen peli, jossa on neljän oman merkin sarja jossain päin. Näin voi esim. saada vastustajan tekemään laittoman siirron (kun oikeassa tilanteessa siinä ruudussa, johon vastustaja tekee siirron estääkseen toista voittamasta, on jo pelimerkki) tai saada vastustajan tekemään muita typeriä siirtoja, jolloin voi itse hoidella itselleen suoran jonnekin päin pelilautaa.
- Esikääntäjän kanssa voivat C-kielien käyttäjät temppuilla siten, että antaa osan laskennasta esikääntäjän tehtäväksi. Tällöin käännösaika pitenee, mutta suoritusaika lyhenee. Itse en tiedä, miten tämä tarkalleen tapahtuu, mutta joskus pari vuotta sitten Datatähteä järjestävät tyypit kertoivat, miten jotkut olivat yrittäneet IOI-kisoissa "huijata" (tai no, sitähän ei oltu vielä silloin erikseen kielletty) käyttämällä esikääntäjää. Siellä tosin palautetaan vain lähdekoodi, jonka tuomarit sitten kääntävät, joten huijaus yllättäen paljastui. Sen jälkeen säännöissä on kielletty esikääntäjällä kikkailu.
No, tarkistakaahan ainakin tuo, etteivät ohjelmat kirjoittele toistensa .luk-tiedostoihin.
Yhdessä turnauksessa 1056 peliä? :D
Ja kuinkahan monta turnauksia tulee?
(en ole ihan täysin perillä turnaustavasta)
lainaus:
No, tarkistakaahan ainakin tuo, etteivät ohjelmat kirjoittele toistensa .luk-tiedostoihin.
Eihän tuo kai ole edes mahdollista, sillä eikös ottelun järjestävä ohjelma joka kerta luo uuden .luk-tiedoston, ja tässä välissä edellisen tekoälyn suoritus on jo loppunut?
Niin, olin juuri lisäämässä, että huijaus on mahdollista vain silloin, jos uutta .luk-tiedostoa ei joka kerta luoda, vaan toisen tekemä siirto vain lisätään sen perään.
(Ainakin minä olisin lyhyesti ajateltuna tehnyt testiohjelman niin, että se lukee toisen tekoälyn .kir-tiedoston ja lisää siirron toisen tekoälyn .luk-tiedostoon. Se on yksinkertaisin ratkaisu, mutta mahdollistaa huijauksen.)
Yritänpä arvailla koko turnauksen kestoaikaa. Se saadaan kaavalla:
kokonaisaika = pelien määrä * siirtoaika keskimäärin * siirtoja pelissä keskimäärin
Heitän hatusta nuo kaksi vikaa lukuarvoa, joten saadaan:
aika = 1056 peliä * 3 s/siirto * 30 siirtoa/peli = 95040 s = 1584 min = 26 h 24 min
Auts. Onko parempia arvauksia?
Onko Antilla automaattia, joka pelauttaa kaikki tekoälyt keskenään automaattiseti, vai pitääkö raukan itse joka kerta valita ja asettaa tekoälyt, jotka pelaa seuraavaksi ja käynnistää sitten vielä pelin? Ilman automaatiota homma rupeaa v...ttamaan jossain vaiheessa...@_<
Laskukaavaan saa lisätä muutenkin vielä ajan, joka menee tekoälyjen vaihtamiseen otteluiden välillä.
BadSource kirjoitti:
Laskukaavaan saa lisätä muutenkin vielä ajan, joka menee tekoälyjen vaihtamiseen otteluiden välillä.
Totta. Ajattelin kuitenkin, että käytössä on jonkinlainen automaattisesti peluuttava ohjelma, jolloin otteluiden välillä ei pala käytännössä yhtään aikaa.
Vaikka käytössä olisikin jokin automaattisesti peluuttava ohjelma niin kauan tuo tulee kestämään (ja jos ei ole niin tee ihmeessä sellainen).
Mikäli ensimmäinen turnaus kestäisi noin 26 ja puoli tuntia niin seuraava turnaus (oletan että aina puolet tekoälyistä putoavat pois joten pelien määrä tippuu myös puolella) kestäisi noin 13 tuntia, sitten 6,5 tuntia, 3 tuntia, puolitoista tuntia ja jne.
Eli kokonais ajaksi tulisi noin: 50-60 tuntia.
jos otteluita pelataan muutama tunti päivässä niin kisa loppuu joskus samoihin aikoihin kun koulut alkavat :(
Lisäksi olen melko varma siitä että yhteen siirtoon kuluu keskimääräisesti yli 5 sekuntia.
Jos tekoälyjä on toisella kierroksella 17 niin aikaa kuluu 6,5h, eikä 13 tuntia. Ja kolmas kierros 9 älyllä kestäisi 54 min.
saatte silti odottaa tuloksia koulujen alkamiseen asti.
Ristinollakilpailu kirjoitti:
Kaikki tekoälyt pelaavat toisiaan vastaan kaksi peliä, kumpikin saa aloittaa kerran. Voitosta saa kaksi pistettä, tasapelistä yhden pisteen ja häviöstä ei yhtään.
Eli aikaa kuluu 26 ja puoli tuntia jos tekoälyt miettivät 3 s/siirto ja peli kestää 30 siirtoa
EDIT:Katsokaa tämä
zigilii kirjoitti:
Eli aikaa kuluu 26 ja puoli tuntia jos tekoälyt miettivät 3 s/siirto ja peli kestää 30 siirtoa
Minuutit tarkennettuna on 24 :)
Pahimmassa mahdollisessa tapauksessa, jokainen siirto kestää 10 s ja siirtojen määrä on 225 (oletan, että pelilaudan koko on 15 ruutua). Tällöin 33 tekoälyn pelaaminen keskenään kahteen kertaan 1056 pelillä veisi aikaa 27 päivää ja 12 tuntia. Tämä siis teoriassa, käytännössä menee (toivottavasti) reilusti vähemmän aikaa.
Edit: Tunnit 30 -> 12. zigilii: laskin oikein (27,5), mutta muutin tunnit väärin minuuttien tapaan..
Siinä kestäisi VAIN max. 27 päivää ja 12 tuntia
taisit laskea että tekoäly pelaa itseäänkin vastaan?
Laaksosella taitaapi olla kovat paikat tuon pelauttamisongelman kanssa... Hauskoja nimiä tekoälyillä, muuten. (Omani tunnetaan sekopaana;)
Eipähän kukaan antanut älylleen nimeksi AI-vastus!
ezuli kirjoitti:
Eipähän kukaan antanut älylleen nimeksi AI-vastus!
Syy lienee siinä, että nimen piti olla 3-8 kirjainta pitkä - "AI-vastus" sisältää 9 kirjainta.
Hiukan harmittaa, kun en saanut tekoälyä tehtyä. Sain valmiiksi vain tiedoston luvun/kirjoituksen ja pari ekaa siirtoa rustaavat rivit, mutta sitten kun olisi varsinainen teköäly pitänyt koodata niin into kaikenlaiseen koodaamiseen lopahti tykkänään jostain täysin käsittämättömästä syystä.
Gaxx kirjoitti:
Syy lienee siinä, että nimen piti olla 3-8 kirjainta pitkä - "AI-vastus" sisältää 9 kirjainta.
No "aivastus" sitten.
Mutta luulisin että testikoneen tehoilla peluuttaminen hoituu
enintään vuorokaudessa. Ei kaikki kuitenkaan laske niin hirveän
tarkasti.
En tiedä miten te laskette noita vaihtoehtoja, mutta jos aloitetaan yksinkertaisesta 3x3 ruudukosta niin alussahan on tasan 9 paikkaa mihin merkin voi pistää. Toisella pelaajalla on tämän jälkeen 8 paikkaa. Sitte enää 7 eli saadaan 9*8*7*6*... = KERTOMA(9) = 362 880 vaihtoehtoa.
Jos pelikenttä on 15*15 niin teoriassa pelivaihtoehtoja on 1 307 674 368 000.
Tässä on siis laskettu montako peliä pelataan ja kerrottu sitä
sitten oletetulla siirtomäärällä/peli(30) ja siirtoajalla(3).
Dual kirjoitti:
Laaksosella taitaapi olla kovat paikat tuon pelauttamisongelman kanssa... Hauskoja nimiä tekoälyillä, muuten. (Omani tunnetaan sekopaana;)
Totta, hauskoja nimiä. Oman tekoälyni nimi on Lurpak. (suoraan Arlan voipaketista) ;) Tuohon listaan voisi pistää jo myös tekoälyn tekijän.
En malttaisi odottaa tuloksiin asti... Voisiko nuo lähdekoodit ja ohjelmat laittaa jo nyt esille niin voisi pelata turnauksen omalla älyllään? Kai kaikki antoivat julkaisuluvan lähdekoodiinsa? Millainen oli kielijakauma?
Puhdas arvaus tuohon kielijakaumaan:
yli puolet tekoälyistä on tehty visual basicillä, noin yksi neljäs osa c/c++:lla ja muutama muu jollakin muulla kielellä (java, python, php)
Noh, en kai ollut ainoa Pascalin käyttäjä (tekoälyni PascAivo). Olettaisin, että DelphiXO olisi myös Pascal-tuotos...? Älkää vaan sanoko että se on tehty Delphillä eikä Pascalilla :D
Nuo tekijöiden nimet vois tosiaan kyllä laittaa tuohon kans. Näkis, ketkä kaikki siihen loppujen lopuks osallistu. Ja kielijakauma kiinnostais kans. Minun on tuo bakaXO :)
Tänään olen saanut ajettua suuren osan peleistä 10x10-ruudukolla. Päätin nyt, että tekoälyjen suuren määrän vuoksi suuremmilla ruudukoilla pelaavat vain ne tekoälyt, joiden ensimmäinen peli päättyi tasan. Virheet ovat pääosin keskittyneet muutamaan tekoälyyn - tarkistan vielä erikseen, että vika on tekoälyissä eikä testiohjelmassa. Päivän saldo on joka tapauksessa:
Eli kyllä tämä tästä alkaa selkiytyä. Sitten kun varsinaisen turnauksen pelit ovat ohi, koetan vielä viritellä jonkunlaisen Putka-TV:n (kuitenkin Internet-sivulla toimivan ja tekstimuotoisen), josta tulee "suorana" ylimääräisiä valittujen tekoälyjen näytösotteluita.
Kattavat tilastot tulevat myöhemmin, mutta:
C/C++: 55 %, Basic: 18 %, Python: 12 %, Pascal: 9 %, Java: 6 %
Ei ollutkaan Basic niin suosittu :P
lainaus:
käytetyt kielet olivat C/C++ (18), Basic (6), Python (4), Pascal (3) ja Java (2).
Kuka muu teki javalla kuin minä? (nimi on "plyyr")
Käsittääkseni Javaa käytti Marja.
Joo, käytin Javaa, mun tekoäly on Miranda. Milloinkas ensimmäisen testikierroksen tulokset julkaistaan? (Jotenkin tuntuu, ettei tekoälyni nyt ihan pärjännyt..)
Kiva kuulla missä mennään. Arvelinkin C/C++:n jyräävän osallistumismäärässä, mutta hauska nähdä muutaman muunkin käyttäneen Pythonia :) Näppärä kieli, vaikka antaakin tällaisissa nopeuskisoissa tasoitusta muille, jos miettimisaika käytetään kokonaan hyväksi.
Kukaan ei sitten näköjään käyttänytkään PHP:ta. Toivottavasti mahdollisimman moni suostui koodinsa julkaisuun, jotta meikäläinenkin pääsee näkemään hyvin tehtyä koodia.
Kehittelin PHP:llä oman teko"älyn", jolla olisi pystynyt jopa osallistumaan kisaan, mutta aika ei millään riittänyt sen loppuun saattamiseen. Vastustajan suorat se osaa suht hyvin torjua, mutta "voitontahto" puuttuu kokonaan. Mutta se on edelleen projektina...
Antti Laaksonen kirjoitti:
Päätin nyt, että tekoälyjen suuren määrän vuoksi suuremmilla ruudukoilla pelaavat vain ne tekoälyt, joiden ensimmäinen peli päättyi tasan.
Tarkoittaako tämä siis sitä, että pisteytys muuttuu? Tasapelistähän piti alunperin saada molempien yksi piste. Ja lasketaanko toisen tekoälyn virhe, tai liika ajankäyttö myös sitä vastaan pelaavan tekoälyn voitoksi, vai onko nuo voitot, virheet, ja ajankäytöt muuten vain lueteltu listassa erikseen?
Edit: Ja toi kuva muuten bugittaa. Aikaa jäljellä näkyy olevan tällä hetkellä -1 päivää.
Chiman kirjoitti:
...hauska nähdä muutaman muunkin käyttäneen Pythonia :) Näppärä kieli, vaikka antaakin tällaisissa nopeuskisoissa tasoitusta muille, jos miettimisaika käytetään kokonaan hyväksi.
Tein x0botin Pythonilla :). Miettimisaika oli enintään jotain 0.1 sekunnin luokkaa itseään vastaan pelatessa. Koodia tekoälyssä on lähes 200 riviä. Ensimmäinen tekemäni tekoäly, joten aika yksinkertainen taitaa olla :). Tein tekoälyn miettimällä, miten itse pelaisin ja miten sen saisi tehtyä Pythonilla. Ristinollan pelitaitoni ei ole myöskään kovin hyvä, joten saas nähdä miten x0botille käy :D.
Ei prkl... Koodissani on kaksi riviä väärin päin ja nyt tekoälyni on niin idioottivarma häviäjä että voi ¤#%£¤&.
Jos molemmilla pelaajilla on neljän rivi, tekoälyni blokkaa vihollisen sen sijaan että voittaisi itse. Voi !#!¤%¤%#¤.
Metabolix kirjoitti:
Ei prkl... Koodissani on kaksi riviä väärin päin ja nyt tekoälyni on niin idioottivarma häviäjä että voi ¤#%£¤&.
Jos molemmilla pelaajilla on neljän rivi, tekoälyni blokkaa vihollisen sen sijaan että voittaisi itse. Voi !#!¤%¤%#¤.
Hmm. Minullakin taitaa olla tuo ongelma, koska tekoäly tarkistaa ensin vihollisen jonot. Voivoi. No ei voi mitään ;D
Aijai... aika pahoja bugeja. Itselläni tuskin samanlaista pääsi tulemaan, mutta joitain virheitä varmasti löytyy. Ajattelinkin, että kehitän tekoälyäni paremmaksi vielä tämän kilpailun jälkeenkin.
Ei tämä muuten harmittaisi näin paljoa, mutta kun jo kirjoittaessani koodia ajattelin, että laitanpa tuon oman rivin tärkeämmäksi kuin vihollinen... Silti siihen jäi (pseudokoodina):
if ((VihollisellaOnRivi) and (EiVielaRiveja)) then begin PaikanArvo := MaxArvo - 1; EiVielaRiveja := False; end; if ((OmaRivi) and (EiVielaRiveja)) then begin PaikanArvo := MaxArvo; EiVielaRiveja := False; end;
PS. Kokeilen tässä uusia Pascal-kooditageja...
Edit: Hyvin toimivat, kunhan vain kirjoittaa kääntäjällekkin kelpaavaa koodia.
Tuleeko tulokset tänne vai kilpailusivulle vai jollekin ihan uudelle sivulle?
Vois olettaa että ne tulis ainakin kilpailusivulle (tai no vähintäänkin sinne tulee linkki tulossivulle), mutta todennäköisesti asiaa puidaan täällä, tai toisessa samanhenkisessä postissa.
Antti Laaksonen kirjoitti:
Sitten kun varsinaisen turnauksen pelit ovat ohi, koetan vielä viritellä jonkunlaisen Putka-TV:n (kuitenkin Internet-sivulla toimivan ja tekstimuotoisen), josta tulee "suorana" ylimääräisiä valittujen tekoälyjen näytösotteluita.
Minusta olisi hyvä, jos (parhaiden) pelien viimeiset .luk tiedostot laitettaisiin johonkin ladattavaksi. Sittenhän olisi helppo kirjoittaa ohjelma, joka näyttää pelin "nauhoituksena".
tuoppi kirjoitti:
Minusta olisi hyvä, jos (parhaiden) pelien viimeiset .luk tiedostot laitettaisiin johonkin ladattavaksi. Sittenhän olisi helppo kirjoittaa ohjelma, joka näyttää pelin "nauhoituksena".
Toivoisin että kaikkien turnauspelien tallenteet olisivat saatavilla, koska oleellista on juuri nähdä miten oma tekoäly pelaa niitä otteluita. Ei futiksen EM-kisoistakaan pahemmin nauttisi, jos näkisi vain tuloslukemat.
Tuo Laaksosen tekemä tekoälyn testaussofta näyttäisi tuottavan turnausmoodissa tallenteet kaikista peleistä, hyvä niin. Kunnon jossittelu ja jälkiviisastelu on aina paikallaan :)
Nuo ottelut voisi laittaa ladattavaksi sitä mukaa kun niitä saadaan pelattua.
Tein tässä aikani kuluksi ohjelman, jolla ainakin testiohjelman turnaustoiminnon .txt-tiedostoja voi katsella. Se löytyy tästä, kunhan vain saa jotakin katseltavaa :D
Metabolix kirjoitti:
Nuo ottelut voisi laittaa ladattavaksi sitä mukaa kun niitä saadaan pelattua.
Tein tässä aikani kuluksi ohjelman, jolla ainakin testiohjelman turnaustoiminnon .txt-tiedostoja voi katsella. Se löytyy tästä, kunhan vain saa jotakin katseltavaa :D
Loistava! Testasin sitä saman tien testiohjelman tekemällä tulostuksella (oma tekoälyni pelasi itseään vastaan). Tuon toiminnallisuus on juuri sellainen kuin pitääkin.
Kiva että pidät :D
Sai sitä hetkisen tehdäkin.
Edit: Eikö ole hienot grafiikat ?-D
Metabolix kirjoitti:
Kiva että pidät :D
Sai hetkisen tehdäkin.
Uskon sen :) Itsekin mietin moisen tekemistä, mutta en lähtenyt toteuttamaan. Vielä kun saisi ne pelitiedostot... Noh, eiköhän viikonlopun aikana jotain kuulu.
Juu, merkinnät on hyvät. Violetti ruudukko tosin tuntui hieman voimakkaalta/paksureunaiselta.
Muutan niiden väriä... Eikös niiden tulosten pitäisi jo tulla? Ainakin 1. kierrokselta?
Juu, pitihän sitä jotain visualisointiakin olla omassa tekoälyssään, ennen kuin muutti sen muotoon, joka vain tekee siirron. Senhän saa äkkiä sovellettua muotoon, joka näyttää pelattuja pelejä uudelleen. Taidanpa itsekin tehdä sellaisen, kun tulokset tulevat.
Itse tein kyllä pelkän tekoälyn ja vasta vähän aikaa sitten visuaalisen... En kylläkään käyttänyt sitä ollenkaan tämän pohjana, koska itse koodi on täysin erilainen lukuun ottamatta kuutta riviä visuaalista osaa. Itse tekoälyni ollessa vain "PelaaVuoro"-funktio, en tarvinnut edes tiedostonlukua visuaaliseen ohjelmaan.
Ensimmäinen testikierros on nyt ohi, ja 825 pelin tulos on selvinnyt. Loput 231 peliä pelataan uudestaan suuremmalla ruudukolla. Pisteytys pysyy alkuperäisessä suunnitelmassa: tasapeli tulee siis silloin, jos suuremmista ruudukoista huolimatta pelit päättyvät tasan. Ajattelin julkaista kaikki tulokset kerralla, pari päivää pitää valitettavasti vielä odottaa.
Metabolix: Ohjelmasi on hyvä! Pelin aikana tosin voisi vielä selkeästi näkyä, kumpi on kumpi. Tosiaan kaikkien pelien kulut tulevat sekä ladattavaksi alkuperäisinä tekstitiedostoina että nähtäville suoraan Internetissä.
Antti Laaksonen kirjoitti:
Pelin aikana tosin voisi vielä selkeästi näkyä, kumpi on kumpi.
Ominaisuus lisätty.
Jääkö jokaisen pelin lopputilanne talteen että voi tarkkailla miten oma tekoäly on pärjäillyt? Tietysti jos säilyttää viimeisen .luk-tiedoston, näkee koko pelin kulun.
Koko pelin kulku jää näkyviin, ja siten myös lopputilanne.
*ei tahdo pysyä nahoissaan odotellessaan tuloksia* ;)
Alkaa kohta sormet krampata kun pitää naputtaa koko ajan refresh-nappulaa :D
Metabolix kirjoitti:
Alkaa kohta sormet krampata kun pitää naputtaa koko ajan refresh-nappulaa :D
Et ole ainoa. ;)
Olen nyt varmaankin hieman ajasta edellä, mutta millonkas pidetään seuraava kilpailu?
Metabolix kirjoitti:
Olen nyt varmaankin hieman ajasta edellä, mutta millonkas pidetään seuraava kilpailu?
Muistaakseni puhe oli, että se joku demokompo pidetään tähän melkein perään.
Joo, eiköhän se näin ole. Tekoälyjen ottelut ovat nyt muuten kuulemma loppuneet, joten eivätköhän tuloksetkin tule piakkoin. Itse tiedän jo oman sijani.
Mielellään kuitenkin aina sellaisia joihin voi osallistua millä tahansa kielellä. Vaikka QB ja VB ovat paikan suositimmat kielet (varmasti siksi, ettei porukan kärsivällisyys kestä vaikeampia), ei ole kovin mukavaa jos pidetään kisoja vain QB:llä ja VB:llä ja PHP:llä.
Jos joku QB:n käyttäjä sanoo ettei ole reilua laittaa C/C++:n käyttäjiä ja QB:n käyttäjiä samaan sarjaan koska C/C++ on niin paljon parempi kieli, kysyn vain että miksi sitten käytätte QB:tä. Ei ole taikoitus ko. kieltä haukkua, mutta pointti on se, että itse valitsitte kielenne, ja olisitte halutessanne voineet valita sen toisin.
Tekoälyt ovat tosiaan pelanneet kaikki ottelut. Tulosten muuttaminen sopivaan muotoon kestää vielä, mutta yritän suoriutua siitä huomisaamuun mennessä (hunajavohveli sai tietää oman sijansa etukäteen, koska se vaikutti hänen lähdekoodinsa julkaisuun).
Puhutaan tulevista kilpailuista sitten tarkemmin, kun tämä nykyinen on käyty läpi...
Huomisaamuun as in 0800++, vai 0000? .. *kärsimätön*
Ja mielellään tosiaan osallistuisin tuleviinkin kilpoihin, mikäli niitä vain järjestetään.
"Don't be hasty little hobbits." :P
Eiköhän huomisaamu tarkota huomisaamua eli +0800
Ristinollakilpailun tulokset ovat tässä:
https://www.ohjelmointiputka.net/kilpa.php?
Voittajaksi selviytyi Ville Pettersson lähes täysillä pisteillä, toisen sijan saavutti Hannu Trey ja kolmanneksi ylsi Ville Mäkynen. Kaikki tulokset ja mahdollisuus katsoa jokaisen pelin kulku siis tuolla sivulla.
Kiitokset kilpailun osallistujille!
Woo, en jääny viimiseks! :)
Onnea kärkikolmikolle!
Nuo parhaat taitavat olla pitkälti ammattilaisia?
Siihen nähden olen ihan tyytyväinen sijoitukseeni :D
Edit: Yrititkö ihan tosissasi, Antti? Mitenkäs oikein päädyit tuonne noin loppupuolelle? ;)
Vau, pääsin peräti viidenneksi :) Aika hyvin, sillä en ole koskaan ennen tekoälyä tehnyt.
Kiitokset upeasta tulossivusta ja järjestelyistä muutenkin. Katsonpa vielä pari matsia ennen kuin käyn nukkumaan...
Edit: Ah, hienoja matseja. Hmmm... yksi tappio ajanylityksen takia ennen yhtään omaa siirtoani (Konna14-chiman). En kyllä usko sen johtuneen tekoälystäni, enkä saa sitä itse toistumaan. Noh, pikku juttu.
Antti Laaksonen kirjoitti:
Allo kudu ural lamm iruu säep epat haka attu ulep eli ekok.
Ihan hieno :D
Ovatko nuo vastakkaisiin kulmiin laitetut yksittäiset merkit se, mistä se tunnistaa itsensä?
Sen verran uskoisin pikaisella silmäyksellä Pythonia ymmärtäväni...
Edit: Kokeilkaa ihmeessä muutkin.
Edit2: Kun tietää minne laittaa ensimmäisen merkkinsä, pepen voittaa aika helposti tuolla suurimmalla :D
Chiman kirjoitti:
Edit: Ah, hienoja matseja. Hmmm... yksi tappio ajanylityksen takia ennen yhtään omaa siirtoani (Konna14-chiman). En kyllä usko sen johtuneen tekoälystäni, enkä saa sitä itse toistumaan. Noh, pikku juttu.
Hmm.. myös minulla on päättynyt yksi peli konna14:aa vastaan joko tekoälyni virheeseen tai ajanylitykseen (Konna14-vekkuli) enkä saa samaa toistumaan kun pelaan omaa tekoälyäni samalla tavalla kuin Konna14 pelasi.
Edit: Tuo Konna14 pelaa eri tavalla eri peleissä niin en voinut suoraan testata sitä vastaan pelaamista
Miten voin pistää python-tekoälyn pelaamaan jotain vastaan? Asensin python-tulkin mutta ei oikein onnistu. :o
laita "Tekoälyn käynnistyskomennoksi"
"C:\Program Files\Python23\python.exe" pepe.py
tai minne nyt Pythonisi asensitkaan.
Inhottavaa katsoa noita otteluita... Jopa monissa jotka olen voittanut on vastustajalla pitkään sellainen kolmen rivi jolla voittaa varmasti kun vain laittaa siihen neljännen. Kuitenkaan omani ei blokkaa sitä eikä vastustaja jatka sitä...
ville_m kirjoitti:
Hmm.. myös minulla on päättynyt yksi peli konna14:aa vastaan joko tekoälyni virheeseen tai ajanylitykseen (Konna14-vekkuli) enkä saa samaa toistumaan kun pelaan omaa tekoälyäni samalla tavalla kuin Konna14 pelasi.
Juuri noin minäkin testasin: tein itse manuaalisesti saman siirron kuin Konna14, eikä mitään ajanylitystä tapahtunut. Täytyy päivällä vilkaista, jos Konna14 tallettaa tiedostoon siirtonsa jotenkin eri tavalla ja se välittyy luk-tiedostoon niin, ettei oma tekoälyni osaa sitä lukea. Eipä tuo mitenkään tärkeää ole, kunhan olen utelias. Mutta nyt nukkumaan hyvillä mielin onnistuneen turnauksen jälkeen... :)
Mua vähän ihmetyttää se taulukko et miten kukin pelasi muita vastaan =P
sen mukaan voitin 6 ja magne voitti 4. Silti siin loppulistassa
lukee et voitin 12 ja magne 12. et mistä johtuu? se taulukko
jättää jotain matseja näyttämättä?
Niistä peleistä jotka aloitit voitit 6, mutta sen lisäksi voitit 6 niistä peleistä joissa olit vuorossa toisena (pystysarake)
Edit: Tarkemmin laskettuna voitit 7 niistä peleistä jotka aloitit ja 5 niistä joissa olit toisena, mutta samapa tuo..
ok... kiitos selvennyksestä.
huomasin että AI:ni ei huomannut ollenkaan vinorivejä =(
aika paha bugi, olisi pitänyt testata paremmin.
Oli kiva nähdä, että joitain voittojakin sentään oli tullut. Harmi, että älyyni oli jäänyt paha bugi, jonka takia se ei osannut pistää viimeiseen tyhjään ruutuun. Näin siis kaikki tasapelit tulivatkin häviöiksi, kun aika loppui kesken. Tiedä sitten, kuinka olisi käynyt ilman tuota bugia. Tavoitteeni on kaikesta huolimatta kehittää tekoälyäni kilpailun jälkeenkin, niin että se voittaa kaikki muut osallistuneet, nyt kun ne ovat tuolla ladattavissa. (siis pelkkä tavoite) :)
Pääsiköhän noita tekoälyjä vastaan pelaamaan itse? Se voisi olla hauskaa, kokeilla onko noita ohjelmia älykkäämpi ^__^
-Grey-
Pääsehän niitä. Lataat vain Antin ohjelman. Sillä voi pelata tekoälyä vastaan itse, tai peluutta kahta tekoälyä vastakkain.
Metabolix kirjoitti:
Nuo parhaat taitavat olla pitkälti ammattilaisia?
Ainakin Ville Mäkynen on varmasti monelle tuttu nimi Datatähti-kilpailuista. Eräänlainen "ammattilainen" siis, mutta ei ehkä samalla tavalla kuin tarkoitit :)
Noiden ilmeisesti väärien ajanylitysten syytä on vaikea tutkia jälkeenpäin. Ajoin kaikki ajan loppumisen vuoksi keskeytyneet pelit varmuuden vuoksi kerran uudestaan, mutta yksittäisiä pelejä en kerennyt erikseen tarkistamaan. Pahoittelen tapahtunutta, onneksi näin kävi vain muutaman kerran.
Onnittelut voittajalle ja muille mitalisijoille tulleille. Erot olivat riittävän selvät, joten jossittelulle ei jäänyt varaa. Oli hauska kokeilla pelata itse voittajaa vastaan. Tietäähän sen, miten siinä käy :)
Mikäli ymmärsin oikein, olin viiden kärjestä ainoa, joka ei käyttänyt siirtojen laskemista eteenpäin (en ehtinyt/osannut tuossa ajassa moista koodata toimivaksi), joten olen erittäin tyytyväinen tulokseen.
Samalla tuli kokemusta Pythonista, joka soveltui tähän tehtävään mainiosti, lukuunottamatta tulkattavan kielen hitautta. Tosin 50x50-laudalla 700 MHz -koneella tekoälyni tekee siirron 3 sekunnissa, joten eipä tuosta hitaudesta ollut sinänsä haittaakaan.
Hieno kisa kaikin puolin. Osanottajia oli tarpeeksi, jotta erot tulivat esiin. Toivottavasti näitä tekoälymittelöitä tulee vuoden sisällä lisää, jotta pääsee taas kokeilemaan taitojaan.
Antti: Ei tuo yksittäinen tekoälyni ajanylitys mitään haittaa, vaikka vika luultavasti olikin jossain muualla kuin tekoälyssäni. Kisa oli muuten loistavasti toteutettu, joten tuollainen pikkuseikka ei merkitse mitään.
Ajanylityksistä vielä: Huolehtiko turnausohjelma kilpailuohjelmien sammutuksesta ajan päätyttyä? Jos ei, joku ohjelma olisi kenties saattanut jäädä taustalle päälle prosessoritehoja viemään ja hidastamaan täten muita tekoälyjä.
Antti Laaksonen kirjoitti:
Noiden ilmeisesti väärien ajanylitysten syytä on vaikea tutkia jälkeenpäin. Ajoin kaikki ajan loppumisen vuoksi keskeytyneet pelit varmuuden vuoksi kerran uudestaan, mutta yksittäisiä pelejä en kerennyt erikseen tarkistamaan. Pahoittelen tapahtunutta, onneksi näin kävi vain muutaman kerran.
Joo, eipä tuolla yhdellä pelillä hirveästi väliä ole. Vähän vain ihmetyttää kun tuota samaa ei saa millään toistumaan omalla koneella, eikä oman tekoälyni pitäisi milloinkaan ylittää aikarajaa (varsinkaaan noin aikaisessa vaiheessa peliä.)
Kiitokset kuitenkin kilpailun hyvästä järjestelystä ja varsinkin hienosta tulossivusta. :)
VilleP kirjoitti:
Ajanylityksistä vielä: Huolehtiko turnausohjelma kilpailuohjelmien sammutuksesta ajan päätyttyä? Jos ei, joku ohjelma olisi kenties saattanut jäädä taustalle päälle prosessoritehoja viemään ja hidastamaan täten muita tekoälyjä.
Eikö ainakin tuo saatavilla ollut testiohjelma odottanut kunnes tekoälyohjelma on sammunut ja vasta sitten lukenut tuloksen tiedostosta? Tällöinhän ei periaatteessa olisi mahdollista että tekoäly jäisi taustalle pyörimään, ellei se sitten luo jotain uusia threadeja, jotka jäävät kummittelemaan.
Edit: Tai no onhan se periaatteessa mahdollista jos joku tekoäly on jäänyt päälle edellisen pelin päätyttyä ajanylitykseen..
ville_m kirjoitti:
Eikö ainakin tuo saatavilla ollut testiohjelma odottanut kunnes tekoälyohjelma on sammunut ja vasta sitten lukenut tuloksen tiedostosta? Tällöinhän ei periaatteessa olisi mahdollista että tekoäly jäisi taustalle pyörimään, ellei se sitten luo jotain uusia threadeja, jotka jäävät kummittelemaan.
Käsittääkseni turnausohjelma lopettaa pelin heti, kun toiselta ohjelmalta on kulunut 10s, muttei kuitenkaan pysäytä ko. ohjelmaa väkivalloin. Saatan olla väärässäkin.
Niin, ja kiitoksia järjestäj(ä/i)lle onnistuneesta kilpailusta.
VilleP kirjoitti:
Ajanylityksistä vielä: Huolehtiko turnausohjelma kilpailuohjelmien sammutuksesta ajan päätyttyä? Jos ei, joku ohjelma olisi kenties saattanut jäädä taustalle päälle prosessoritehoja viemään ja hidastamaan täten muita tekoälyjä.
Vilkaisin pikaisesti Konna14:n (jota vastaan tekoälyltäni loppui aika) koodia, ja sen suoritus näyttäisi päättyvän hyvin pian siirron kirjoittamisen jälkeen. Syy ei siis ole tuossakaan, joten ehkä turnauskoneen tehoja vei jokin muu prosessi. Vaikea arvailla.
Testiohjelma ei sulkenut väkisin tekoälyjä, joten tekoälyn jääminen päälle aikarajan ylityksen jälkeen oli periaatteessa mahdollista. Kuitenkin chiman tekee ensimmäisen merkinnän hetkessä ja vekkuli mittaa tarkasti yhdeksän sekuntia - koneen hidastuminenkaan tuskin aiheuttaisi ajanylitystä. Itse epäilen, että näissä tapauksissa tekoäly ei jostain syystä joko käynnistynyt ollenkaan tai liian myöhään aikalaskuriin verrattuna. Syytä tähän voi tosiaan vain arvailla. Ensi kilpailussa täytyy joka tapauksessa suunnitella ohjelmien käynnistäminen, sulkeminen ja ajanotto paremmin.
Kun pelailin voittajia vastaan, wzh2 ei käynnistynyt suoraan vaan vaati käynnistyskomennoksi wzh2.exe. Muissakin voisi varmaan olla jotakin samantapaista.
Miten Laaksosen tekemällä testiohjelmalla voi peluttaa java-älyjä?
java tekoäly
Kun vain laitat ohjelman "java" kansion pathiin. (Ensin tietysti etsit sen netistä.)
Kirjoita käynnistyskomennoksi "java [tekoälyn nimi]". Mitään tiedoston päätettä ei siis tule.
Paremminki olisi voinut mennä, mutta olen silti ihan tyytyväinen sijoitukseen. Heti tuli noita pelejä katsoessa pari juttua, että prkl tonhan ois muuten voinu koodata toisin. Ainakin tekoäly tuli suunniteltua kokonaan itse kynän ja paperin kanssa käyttämättä mitään valmiita algoritmeja.
Meitzi kirjoitti:
Ainakin tekoäly tuli suunniteltua kokonaan itse kynän ja paperin kanssa käyttämättä mitään valmiita algoritmeja.
Kuten myös, ja pääasiahan ei ole voitto vaan hyvä kilpailu ja uuden oppiminen.
Metabolix kirjoitti:
(Ensin tietysti etsit sen netistä.)
et sitten tarkemmin jaksanut ilmoittaa :D Teemu Valon ohjelmalla onnistuu java-älyköiden ajaminen, mutta ei taasen python-tekoälyjen, joten ei voi kilpailla python vs. java. Muuten se on loistava ohjelma.
En satu itsekään omistamaan.
Sunin sivuilta varmaan...?
Ilmeisesti tämän viikon kyssäri tuosta demojen ohjelmoinnista liittyy varmaan siihen, kun pian oli tarkoitus järjestää se demokompo vai olinko väärässä?
Joo, näin ilmeisesti suunniteltiin. Laaksonen antanee tarkempaa tietoa asiasta sitten, kun uusi kilpailu on aika järjestää.
Aihe on jo aika vanha, joten et voi enää vastata siihen.