Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Väripelikilpailu

Sivun loppuun

Antti Laaksonen [01.06.2005 06:29:04]

#

Nyt alkaa kesän kilpailu, jossa aiheena on ohjelmoida väripeliä pelaava tekoäly. Pelin säännöt, tekoälyn toteutusohjeet ja muut tärkeät tiedot ovat osoitteessa:

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

Kilpailuaikaa on kesäkuun ajan, eli valmis tekoäly pitää lähettää viimeistään 30.6.

Kilpailun edetessä ilmestyy testiohjelmia, joiden avulla oman tekoälyn toimintaa voi tutkia helposti.

Kysymyksiä voi lähettää tähän keskusteluun tai sähköpostilla osoitteeseen kilpailu@ohjelmointiputka.net.

Tervetuloa mukaan kilpailuun!

Deewiant [01.06.2005 08:54:06]

#

Kysymys. Ohjeissa sanotaan:

Ohjeet kirjoitti:

jos pelitilanne pysyy muuttumattomana kahden pelikierroksen ajan, peli päättyy

Tarkoittaako tämä kahta perättäistä pelikierrosta vai kahta "virhesiirtoa" koko pelin aikana?

Niko [01.06.2005 16:59:58]

#

Varmaan niin että jos tekoäly ei poista mitään peli päättyy.
Täytyy katsoa jos ehtii osallistua

Edit: onhan se sitten niin että tossa .luk tiedostossa on AINA se tämänhetkinen tilanne vai joudunko muutamaan siirtojen perusteella?

Touho [01.06.2005 17:38:29]

#

Ohjeet kirjoitti:

Nyt pelikentällä on kaksi erillistä neliökasaa, jotka yhdistyvät.

Eikös tuossa ole nuo kolme? Sininen, keltanen ja punanen.

esakom [01.06.2005 18:33:19]

#

touho: taisit ymmärtää väärin, laaksonen taisi tarkoittaa että syntyy kaksi joukkoa joiden välissä ei ole mitään, tällöin toinen siirtyy toiseen kiinni. Luepas uudestaan ja tutki kuvaa, jos selkiäisi.

Niko [01.06.2005 19:26:44]

#

ja miten pisteet määräntyy, ja saako niitä enemmän mitä isompi alue...

esim jos poistaa viiden(5) palikan kokoisen alueen niin saako siitä esim 5*10 vai?
voiko poistaa 2 kertaa viiden palikan alueen SAMALLA siirrolla sillen että jos tulee tippuneiden ansiosta toinen? (toivottavasti ei :P)

markdark [01.06.2005 19:30:06]

#

Neljä huolta:

  1. Kovalevylle kirjoittaminen ja siltä lukeminen on hidasta ja verottaa ajatteluaikaa. Kyllä, kaksi sekuntia on paljon, mutta pitääkö sitä tuhlata I/O:hon. Olisiko parempi kommunikoida muistin kautta, tai että AI ei olisikaan itsenäinen .exe vaan esimerkiksi .dll tai vastaava joka käynnistetään tarkkailu-/kommunikaatiosoftan sisällä?
  2. Entäs kun peli on lopussa, eli siirtoja ei enää pysty tekemään, kyl mun AI tajuu että peli on loppu eli printtaaks se sit "game over" vai "EOL" vai mitä viduu? Vai pitääkö antaa vaan joku hämy siirto (-1,-1) niin kauan kunnes tarkkailu-/kommunikaatiosofta päättää että nyt ei enää peli kule.
  3. Käsitin, että tekoälyohjelma sulkeutuu siirtojen välillä, tarkkailu-/kommunikaatiosofta ottaa komennon, ja sen jälkeen batchfilu tai ite softa käynnistää AI:n uudelleen. Tämä tarkoittaa jokseenkin sitä, että kaikki tekoälyn tieto, joita se ehkä haluaisi muistaa, on menetetty, ellei sitten käytä temppifiluja joka taas lisää I/O-operaatioita. Vaihtoehtoisesti AI on taustalla päällä koko ajan ja lukee muuttuneen pelitilanteen ainoastaan jos tiedosto muuttuu, mikä on aika hankala toteuttaa ja virhealtis ratkaisu. (Tarkkaillakko tiedoston last modified aika, entäs jos muuttuu ennen kuin kello ehtii tikittää eteenpäin... you got a problem bub!)
  4. Moninpelissä ymmärrän tarpeen tilanteen antamiselle vuorotellen kummallekin softalle; kuitenkin siinä olisi kaikkein tärkeintä, että AI saa tiedon (tai ainakin pystyy päättelemään) toisen siirrosta ja että pystyy muistamaan (tempin, tai muun kautta) ja sitä kautta oppimaan toisen AI:n taktiikan, sekä mahdollisesti taistelemaan sitä vastaan.

Lisäksi:

Kai tarkkailu-/kommunikaatiosofta tallentaa jokaisen pelin kokonaan, jotta niitä voi katella ja tarkastella myöhemminkin, jopa mahdollisen vilpin varalta?

Kai se softa myös tarkkailee pelien statistiikkaa, esimerkiksi molempien AI:den siirtoaikaa, mitä väriä ne preferoi, voitto per laudan koko, voitto per värien määrä, ranking-listaa eri AI:den voitoista ja häviöistä, jne. Jotka tietenkin saadaan nettiin kun ajot ovat suoritettu.

P.S. Kokeilkaa Winboard-/Xboard-shakkipelisysteemejä, joissa voidaan ladata porukan tekemiä shakkitekoälyjä. Ne ovat periaatteessa moduuleja, jotka ladataan pelin käynnistyksen yhteydessä ja kommunikoivat selkeän protokollan kautta. Tämä on varmaankin paras esimerkki toimivasta moduloidusta AI-systeemistä, kannattaa tutustua tarkemmin.

FooBat [01.06.2005 20:03:51]

#

1. Miten monipelin pisteet lasketaan? Poistettujen palikoiden lukumäärän mukaan vai sen mukaan kuka voi viimeiseksi poistaa omia palikoitaan.

2. Jos useamman pelaajan moninpelissä jonkun peli hylätään eikä se enää osallistu peliin tulisi tästä ilmoittaa myös muille pelaajille (Poistunut pelaaja vaikuttaa AI:n päättelyyn).

3. Liittyen edelliseen. Onko moninpelit kahden pelaajan välisiä vai useamman pelaajan välisiä? Lisäksi onko pelaajien lukumäärä aina sama kuin eriväristen palikoiden? Jos ei, niin ohjelmalle pitäisi kertoa minkäväriset palikat pelaavat.

4. Miten ohjelmien käyttämä aika lasketaan? Esimerkiksi java-ohjelmien käynnistyksessä on toisinaan aika pitkä viive.

Niko [01.06.2005 20:06:13]

#

markdark:
1. Tässä sallitaan php ja python joilla ei saa exejä ilman erillistä softaa (vai saako pyyttonilla?)
2. Se varmaan lopettaaa suoritukset jos ei enää ole
3. Sulkeutaa, ja et saa käyttää temp-filjuja
foobat
3. jokainen yrittää vain annettua väriä

antti voi sitten korjailla

Blaze [01.06.2005 20:23:18]

#

markdark kirjoitti:

Olisiko parempi kommunikoida muistin kautta, tai että AI ei olisikaan itsenäinen .exe vaan esimerkiksi .dll tai vastaava joka käynnistetään tarkkailu-/kommunikaatiosoftan sisällä?

Näistä ois pitäny keskustella ennenku kisa alko. Tässä vaiheessa vähän paha mennä suuria muutoksia tekemään.

Sinänsä kyllä hyviä ideoita, joku aiemmin ehotti myös soketteja kommunikointiin, mutta idea hylättiin käsittääkseni sen takia, että tuollaisen tekeminen on astetta monimutkasempaa, ku tiedostosta lukeminen ja siihen kirjottaminen.

markdark kirjoitti:

Entäs kun peli on lopussa, eli siirtoja ei enää pysty tekemään [...] pitääkö antaa vaan joku hämy siirto (-1,-1) niin kauan kunnes tarkkailu-/kommunikaatiosofta päättää että nyt ei enää peli kule.

Minun käsittääkseni juurikin näin.

markdark kirjoitti:

Käsitin, että tekoälyohjelma sulkeutuu siirtojen välillä, tarkkailu-/kommunikaatiosofta ottaa komennon, ja sen jälkeen batchfilu tai ite softa käynnistää AI:n uudelleen.

Näin on.

markdark kirjoitti:

Tämä tarkoittaa jokseenkin sitä, että kaikki tekoälyn tieto, joita se ehkä haluaisi muistaa, on menetetty, ellei sitten käytä temppifiluja joka taas lisää I/O-operaatioita.

Tästä väännettiin peistä jo vuosi sitten ristinollatekoälykisan yhteydessä. Tekoäly joutuu tosiaan aloittamaan joka siirron puhtaalta pöydältä (temppifilujen kirjoittaminen kun ei ole sallittua). Valitukset aiheesta kisan järjestäjälle :>

markdark kirjoitti:

Kai tarkkailu-/kommunikaatiosofta tallentaa jokaisen pelin kokonaan, jotta niitä voi katella ja tarkastella myöhemminkin, jopa mahdollisen vilpin varalta?

Näin ainakin viime vuonna, ks. https://www.ohjelmointiputka.net/kilpa.php?tunnus=kisa_x0_t

Puhveli [01.06.2005 20:27:05]

#

Blaze kirjoitti:

Tästä väännettiin peistä jo vuosi sitten ristinollatekoälykisan yhteydessä.

Huh? Onkos siitäkin jo vuosi. Aika rientää :o

Deewiant [01.06.2005 20:35:19]

#

Blaze kirjoitti:

markdark kirjoitti:

Olisiko parempi kommunikoida muistin kautta, tai että AI ei olisikaan itsenäinen .exe vaan esimerkiksi .dll tai vastaava joka käynnistetään tarkkailu-/kommunikaatiosoftan sisällä?

Näistä ois pitäny keskustella ennenku kisa alko. Tässä vaiheessa vähän paha mennä suuria muutoksia tekemään.

Oletus oli, että asiat on tehty alunperinkin kunnolla. Etenkin, kun on aikaisemminkin ollut tekoälykisa, jossa aiheiden olisi pitänyt tulla esille.

Soketit olivat tosiaan huonohko idea, mutta miksei tekoäly voi vain lukea suoraan stdinistä ja kirjoittaa stdouttiin, ja hallintaohjelma hoitaa loput? Paljon helpompaa se on (nopeudesta puhumattakaan) kuin tiedostopelleilykään.

Blaze kirjoitti:

markdark kirjoitti:

Tämä tarkoittaa jokseenkin sitä, että kaikki tekoälyn tieto, joita se ehkä haluaisi muistaa, on menetetty, ellei sitten käytä temppifiluja joka taas lisää I/O-operaatioita.

Tästä väännettiin peistä jo vuosi sitten ristinollatekoälykisan yhteydessä. Tekoäly joutuu tosiaan aloittamaan joka siirron puhtaalta pöydältä (temppifilujen kirjoittaminen kun ei ole sallittua). Valitukset aiheesta kisan järjestäjälle :>

No kelles muulle tuo viesti on kohdistettu? :)

Tyhmää, koska ei voi tehdä kehittyvää algoritmia, joka oppisi koko ajan pelatessaan. Liiallisesta kovalevyn ja ajan kulutuksesta (tosin, siksi siirrolle varattu aika lieneekin niin pitkä [tosin, miksei vaan lyhentää aikaa ja tehdä fiksu järjestelmä]) puhumattakaan.

Antti Laaksonen [01.06.2005 22:21:04]

#

Tässä vastaukset mahdollisimman moneen kysymykseen:

Tiedonvälitys: Myös viime tekoälykilpailussa käytettiin tiedostoja, ja ainakaan silloin ei ilmennyt mitään ongelmia. Tiedostot valittiin sen takia, että niiden käsittely on kaikilla ohjelmointikielillä helppoa ja mutkatonta. Tiedoston käsittelyyn kuluva muutama millisekunti ei ole muutenkaan mielestäni kohtuuton aika.

Pisteenlasku: Jokaisesta poistetusta omanvärisestä neliöstä (sekä yksinpelissä että moninpelissä) saa pisteen. Sillä ei ole merkitystä, poistaako neliöt yksi kerrallaan vai suurissa erissä. Vain jos useampi tekoäly päätyy samaan yhteispistemäärään, vähemmän poistoja tehnyt katsotaan paremmaksi.

Pelin päätös: Tekoäly ei koskaan joudu semmoiseen tilanteeseen, että pelikentällä ei olisi mitään poistettavaa. Siis jos kaikki mahdolliset ryhmät on poistettu, peli päättyy. Samoin käy, jos tilanne pysyy samana kahden perättäisen pelikierroksen ajan (eli kukin peliin osallistuva tekoäly saa kaksi poistomahdollisuutta).

Pelien tallennus: Pelien kulku tallennetaan täydellisesti, ja jokaisen tekoälyjen pelaaman pelin pystyy myös katselemaan aikanaan Internetissä. Monenlaisten tilastojen ja analyysien laatiminen tallennetuista tiedoista on tietenkin myös mahdollista.

Tekoälyn asema: Tekoäly joutuu jokaiseen pelitilanteeseen aivan kuin ulkopuolisena. Omia aputiedostoja tai vastaavia tekoäly ei siis voi tehdä. Tämä rajoitus koskee kaikkia osallistujia, minkä takia kaikki tekoälyt ovat samassa asemassa. Oppivan tekoälyn tekeminen on mielenkiintoinen idea, mutta käytännön toteutus olisi todennäköisesti erittäin vaativa. Tätä voidaan kuitenkin miettiä seuraavan samantapaisen kilpailun suunnittelussa.

Moninpelit: Kullakin tekoälyllä on oma värinsä. Pelaajia on siis ainakin kaksi ja korkeintaan kahdeksan. Aluksi jokaisella värillä on oma kerääjänsä. Jos tekoäly joutuu keskeyttämään pelin ajanylityksen vuoksi, sen neliöt jäävät pysyvästi pelikentälle. Tästä ei tule erillistä ilmoitusta muille jatkaville tekoälyille. Tietenkin jos kenttä on täynnä tietynvärisiä neliöitä, muut tekoälyt voivat alkaa haistaa palaneen käryä...

Ajanmittaus: Tämä on pienoinen ongelma, koska tekoälyjen joukko on niin kirjava. En tiedä parempaa tapaa ajanmittaukseen kuin laskeminen, kuinka kauan tekoäly on käynnissä. Tulkattavat kielet ovat tietenkin huonossa asemassa käännettäviin verrattuna, mutta itse tulkin käynnistymiseen kuluva aika pitäisi saada mahdollisimman pieneksi. Onkohan Java-tulkkia mahdollista pitää koko ajan käynnissä niin, että sen kautta voi suoraan ajaa ohjelmia?

dOb [02.06.2005 00:24:26]

#

Saako Pythonin kanssa käyttää third-party kirjastoja?

Antti Laaksonen [02.06.2005 08:41:00]

#

Mitä kirjastoja haluaisit käyttää? Luulisin, että Pythonin keinot riittävät sellaisenaan tekoälyn tekemiseen.

BadSource [02.06.2005 09:47:11]

#

Miten muuten tuon siirron/poiston tekeminen? Pitääkö se kirjata kerralla vai voiko kirjata ylös yhden siirron, jatkaa siirtojen tutkimista ja jos löytyy parempi, korjata aikaisempi siirto? Lähinnä mietin tuon kahden sekunnin ajan hyväksi käyttöä mahdollisimman hyvin...

dOb [02.06.2005 11:14:30]

#

Antti Laaksonen kirjoitti:

Mitä kirjastoja haluaisit käyttää? Luulisin, että Pythonin keinot riittävät sellaisenaan tekoälyn tekemiseen.

Eipä sillä niin väliä... voinhan laittaa ne piiloon exeen py2exellä ;)

msdos464 [02.06.2005 13:10:52]

#

Pitäisikö tuo aikaraja olla isompi isommilla ruudukoilla? Tulee vähän ongelmia kun 5x6 ruudukolla toimii ilosesti mutta jo 11x8 ruudukolla huomattavasti kauemmin...

Antti Laaksonen [02.06.2005 15:02:28]

#

BadSource kirjoitti:

Pitääkö se (siirto) kirjata kerralla vai voiko kirjata ylös yhden siirron, jatkaa siirtojen tutkimista ja jos löytyy parempi, korjata aikaisempi siirto?

Tiedostoon voi tallentaa useammankin kerran, kunhan ohjelman suoritus päättyy aikarajan sisällä. Toisaalta yhtä hyvin voi tehdä niin, että toistaiseksi parasta poistokohtaa pitää muistissa ja tallentaa sen vasta lopuksi tiedostoon.

msdos464 kirjoitti:

Pitäisikö tuo aikaraja olla isompi isommilla ruudukoilla?

Aikaraja ei voi olla varsinkaan isoilla ruudukoilla paljon nykyistä suurempi, koska muuten kaikkien pelien pelaaminen kestäisi ikuisuuden. Nykyinen kahden sekunnin aikaraja pätee siis kaikenkokoisiin ruudukkoihin.

msdos464 [02.06.2005 15:42:15]

#

Antti Laaksonen kirjoitti:

msdos464 kirjoitti:

Pitäisikö tuo aikaraja olla isompi isommilla ruudukoilla?

Aikaraja ei voi olla varsinkaan isoilla ruudukoilla paljon nykyistä suurempi, koska muuten kaikkien pelien pelaaminen kestäisi ikuisuuden. Nykyinen kahden sekunnin aikaraja pätee siis kaikenkokoisiin ruudukkoihin.

Ok.. tosin jos aikaraja olisi vaikka 10 sek niin peli kestäisi maks about 5 min. niin no kyllähän siitä sitten kertyy aikaa kun jokainen äly pelaa monta peliä :)

Olisi jo tarvetta sille analysointi ohjelmalle... ;)

Niko [02.06.2005 16:03:14]

#

voihan aina mitata paljonko kestää käynnistää tulkki ja sitten antaa se hyvityksenä

Antti Laaksonen [02.06.2005 16:47:32]

#

msdos464 kirjoitti:

Ok.. tosin jos aikaraja olisi vaikka 10 sek niin peli kestäisi maks about 5 min.

Satunnaisesti luodussa 30x30-kokoisessa viisivärisessä ruudukossa on alkutilanteessa parisataa poistettavaa ryhmää. Tällöin yhden pelin kesto kymmenen sekunnin aikarajalla olisi ehkä noin puoli tuntia, mikä on liikaa. Moninpeleissä ajankäyttö moninkertaistuu, sillä kaikki tekoälyt saavat kerätä jokaista väriä.

msdos464 kirjoitti:

Olisi jo tarvetta sille analysointi ohjelmalle... ;)

Yritän saada ohjelman valmiiksi viikonloppuna.

dOb [02.06.2005 19:58:37]

#

Antti Laaksonen kirjoitti:

Moninpeleissä ajankäyttö moninkertaistuu, sillä kaikki tekoälyt saavat kerätä jokaista väriä.

Eihän se näin ollut sääntöjen mukaan :o (vai tarkoititko jotain muuta?).

Antti Laaksonen [02.06.2005 20:07:53]

#

Siis saman aloitustilanteen moninpelejä pelataan niin monta, että kaikki osallistuvat tekoälyt keräävät vuorollaan kutakin väriä. :)

TeeVee [02.06.2005 21:08:28]

#

Onko kentän koko vakio vai arvotaanko se jokaisen pelin alussa, että onko vaikkapa 5x5 tai 10x10 jne?

Antti Laaksonen [02.06.2005 21:18:06]

#

Kentän koko on muuttuva. Tekoälyn pitää siis selviytyä kaikenkokoisista kentistä. Tähän vaikuttaa myös kilpailun osallistujien lähettämä aineisto.

dOb [02.06.2005 23:09:55]

#

Kentäthän eivät myöskään ole aina neliön muotoisia vai kuinka?

Touho [02.06.2005 23:44:21]

#

dOb, jos kentälle annetaan vain leveys ja korkeus, mitä muita mahdollisuuksia kentän koolle on kuin neliö?

dOb [03.06.2005 00:13:03]

#

Siis noista säännöistähän voi ymmärtää, että korkeuden ja leveyden arvot voivat olla valiltä 5-30, mutta ei sanota niiden olevan samat. Niissä .luk tiedostoissahan annetaan vielä erikseen korkeus ja leveys.

Blaze [03.06.2005 00:39:25]

#

Touho kirjoitti:

dOb, jos kentälle annetaan vain leveys ja korkeus, mitä muita mahdollisuuksia kentän koolle on kuin neliö?

Suorakaide? :)

Minä oon saanu semmosen käsityksen, että pelialue ei välttämättä ole neliö, esimerkiksi esimerkkialue kilpailusivulla on 6x5 ruutua.

Linkku [03.06.2005 08:33:08]

#

Eikös tätä ole mahdollista kirjoittaa Perlillä? Käsittääkseni activestate jakaa Windows-installeria Perlistä.

arcatan [03.06.2005 08:42:09]

#

Tulipa mieleen suhteellisen helppo tapa toteuttaa tekoäly. Minulla ei ole tosin aavistustakaan, onko se tehokas/älykäs tai ylipäänsä toimiiko se. Suunnitellessani kyseistä lähestymistapaa heräsi kysymys: onko väripelikentän koolla mitään maksimirajaa?

BadSource [03.06.2005 09:00:57]

#

Väreistä pelikentällä...

Laaksonen kirjoitti:

Rivin värinumeroiden määrä on sama kuin pelikentän leveys. Seuraava tiedosto vastaa esimerkkikuvan aloitustilannetta.

6 5 5 0
1 2 1 3 1 2
4 3 5 5 4 3
4 5 4 4 4 5
5 2 2 3 3 5
4 3 5 3 4 2

Leveys vai korkeus?

Edit: Niin että tuolla olisi väliä... Vrt. Ruudukot, jotka ovat suurempia kuin 8*8, esm. 30*30-ruudukko...

dOb [03.06.2005 09:38:32]

#

arcatan kirjoitti:

Tulipa mieleen suhteellisen helppo tapa toteuttaa tekoäly. Minulla ei ole tosin aavistustakaan, onko se tehokas/älykäs tai ylipäänsä toimiiko se. Suunnitellessani kyseistä lähestymistapaa heräsi kysymys: onko väripelikentän koolla mitään maksimirajaa?

Säännöissähän se sanotaan.

lainaus:

Pelikentän leveys ja korkeus ovat 5 – 30 neliötä

Vai tarkoititko jotain muuta?

Blaze [03.06.2005 12:20:43]

#

BadSource kirjoitti:

Leveys vai korkeus?

Leveys, niinku sanotaan.

6 5 5 0
<leveys(6)>
1 2 1 3 1 2^
4 3 5 5 4 3kor-
4 5 4 4 4 5keus
5 2 2 3 3 5(5)
4 3 5 3 4 2v

Eli tiedostossa on taulukon korkeus + 1 (tuo metadatarivi) riviä ja jokaisella rivillä (paitsi tolla ekalla) taulukon leveyden verran numeroita.

BadSource [03.06.2005 13:37:58]

#

[offtopic]

Laaksonen kirjoitti:

Rivin värinumeroiden määrä on sama kuin pelikentän leveys

Blaze kirjoitti:

Leveys, niinku sanotaan.

Jos oikein tarkkaan tutkitaan tuota esimerkin ensimmäistä riviä, niin sillä on arvot...

lainaus:

6 5 5 0

Jotka ovat Leveys(6), Korkeus(5), Värit(5) ja pelimuoto(0). Tiettävästi 6<>5, joten värien määrä viittaa ennemminkin korkeuteen, jos siihenkään, kun kerran värien määrä maksimissaan voi olla 8, kun taas ruudukon leveys/korkeus voi olla maksimissaan 30...[/offtopic]

Värinumeroiden... Hmmm... Kun tarkemmin tuota miettii, niin tuo "sanamuoto" ei taidakkaan tarkoittaa mahdollisten värien määrää ruudukossa vaan tosiaankin arvoja rivillä. Auttaa kun erottaa monikon yksiköstä...*->nurkkaan häpeämään*

Axuu [03.06.2005 14:18:10]

#

Onkohan tähän osallistumassa muita ensikertalaisia ku mä?

kova tavoite mul --> tulis edes toisiks viimiseks :D
no on täs viel paljon aikaa tehdä ja nyt tarkistaa jo isoimman "ryppään" kordinaatit. Mites muilla menee?

arcatan [03.06.2005 14:19:45]

#

dOb kirjoitti:

Säännöissähän se sanotaan.

lainaus:

Pelikentän leveys ja korkeus ovat 5 * 30 neliötä

Vai tarkoititko jotain muuta?

Alan epäilemään, että minulle on tulossa lukihäiriö. :(

dOb [03.06.2005 14:27:49]

#

Axuu kirjoitti:

Mites muilla menee?

Tein eilen loppuun Python version tekoälystä, joka onnistui suht. helposti ja vaivattomasti ja opin jopa jotain uutta :).

Nyt olen alkanut tekemään uutta tekoälyä C++:lla, mutta samalla idealla, jospa sen saisi nopeammaksi (reilusti vaikeampaa tehdä C++:lla :S).

Masfonos [03.06.2005 14:41:43]

#

Voin olla sokea mutta pitääkö tekoälyn myös "pudottaa/siirtää" niitä palikoita itse vai hoitaako se managerisofta kaiken puolestani?

dOb [03.06.2005 14:43:49]

#

Tekoälyn täytyy vain kirjoittaa poistettavan palikan koordinaatit tiedostoon.

T.M. [03.06.2005 14:58:41]

#

Miksi turhia välilyöntejä numeroiden välille?
Mielestäni tämä tapa olisi järkevämpi tallentaa tiedostoon:

06050500
121312
435543
454445
522335
435342

Tai sitten vain yhteen pötköön kaikki:

06050500121312435543454445522335435342

Jota on astetta helpompi käsitellä (ei tarvitse explode funkkaria tms)

Tein tässä kokeilumielessä tuollaisen väripelin PHP:llä, joka käyttää yllä mainittua tietojen käsittelytapaa:
http://koti.mbnet.fi/winuus/varipeli.php

Ei tarvitse keksejä, vaan tallentaa pelit tiedostoihin:
http://koti.mbnet.fi/winuus/vpdata/

Oma tapani tallentaa vain leveyden tiedostoon, ei korkeutta, koska korkeus lasketaan myöhemmin pilkotusta merkkijonosta :)

Antti Laaksonen [03.06.2005 15:16:27]

#

Masfonos kirjoitti:

Voin olla sokea mutta pitääkö tekoälyn myös "pudottaa/siirtää" niitä palikoita itse vai hoitaako se managerisofta kaiken puolestani?

Tekoälyn täytyy vain ilmoittaa poistettavan palikkaryhmän kohta. Siis tekoäly kertoo, mistä kohdasta pelikenttää se "napsauttaa". Järjestäjäohjelma huolehtii lopusta.

T.M. kirjoitti:

Miksi turhia välilyöntejä numeroiden välille?

Useimmilla ohjelmointikielillä on helppoa lukea tiedostosta välilyönnein ja rivinvaihdoin erotettuja lukuja. Lisäksi tämä tallennusmuoto kelpaa, vaikka värejä olisi kymmenen tai enemmän (ei mahdollista tässä kilpailussa). Joka tapauksessa lukutiedoston muotoilu on aika vähäpätöinen yksityiskohta.

Niko [03.06.2005 15:59:36]

#

Axuu kirjoitti:

Onkohan tähän osallistumassa muita ensikertalaisia ku mä?

kova tavoite mul --> tulis edes toisiks viimiseks :D
no on täs viel paljon aikaa tehdä ja nyt tarkistaa jo isoimman "ryppään" kordinaatit. Mites muilla menee?

On... Tällä hetkellä saan vain luettua arrayhyn .luk tiedoston

Blaze [03.06.2005 17:02:13]

#

Niko kirjoitti:

Axuu kirjoitti:

Mites muilla menee?

Tällä hetkellä saan vain luettua arrayhyn .luk tiedoston

Kuten myös. Olikin astetta monimutkaisempaa C:llä, kuin VB:n ReDim Palle(Leveys, Korkeus) As Integer :P

dOb [03.06.2005 17:12:09]

#

Antti Laaksonen kirjoitti:

T.M. kirjoitti:

Miksi turhia välilyöntejä numeroiden välille?

Useimmilla ohjelmointikielillä on helppoa lukea tiedostosta välilyönnein ja rivinvaihdoin erotettuja lukuja. Lisäksi tämä tallennusmuoto kelpaa, vaikka värejä olisi kymmenen tai enemmän (ei mahdollista tässä kilpailussa). Joka tapauksessa lukutiedoston muotoilu on aika vähäpätöinen yksityiskohta.

Ja vielä se, että nykyisellä muotoilulla on ihmisen helpompi tehdä niitä aloitustilanteita, mitkä lähetetään tekoälyjen mukana :)

Niko [03.06.2005 17:14:42]

#

Blaze kirjoitti:

Niko kirjoitti:

Axuu kirjoitti:

Mites muilla menee?

Tällä hetkellä saan vain luettua arrayhyn .luk tiedoston

Kuten myös. Olikin astetta monimutkaisempaa C:llä, kuin VB:n ReDim Palle(Leveys, Korkeus) As Integer :P

phpllä on vielä helpompaa :)

T.M. [03.06.2005 17:19:57]

#

dOb kirjoitti:

Ja vielä se, että nykyisellä muotoilulla on ihmisen helpompi tehdä niitä aloitustilanteita, mitkä lähetetään tekoälyjen mukana :)

Kuinka niin? Sinun täytyy painaa spacea aina joka numeron välillä :P

---

Tuli tässä mieleen sellainen, että hyväksyttäisiinkö tälläinen aloitustilanne:

11111111
11111111
11111111
11111111

Tai jokin muu yhtä helppo? :l
Mietin vain että onko siinä mitään järkeä antaa mahdollisuus päättää aloitustilanteesta...

Kai PHP:tä saa käyttää tekoälyn koodaamisessa? Ajattelin hieman vähentää koodaustaakkaa tällä tavoin...

Niko [03.06.2005 17:50:04]

#

T.M. kirjoitti:

Kai PHP:tä saa käyttää tekoälyn koodaamisessa? Ajattelin hieman vähentää koodaustaakkaa tällä tavoin...

Kilpailu sivu kirjoitti:

Kilpailukoneelle on asennettuna Java-, PHP- ja Python-tulkit, joiden kautta ohjelma voidaan myös ajaa.

Chiman [03.06.2005 17:54:51]

#

T.M. kirjoitti:

Tein tässä kokeilumielessä tuollaisen väripelin PHP:llä, joka käyttää yllä mainittua tietojen käsittelytapaa:
http://koti.mbnet.fi/winuus/varipeli.php

Näppärä versio :) Tuota kun jonkin aikaa pelailin, keksin kohtuullisen algoritmin tekoälylleni, jolla yritän voittaa 75 % kilpailijoista. Kieleksi Python.

T.M. [03.06.2005 17:58:41]

#

Hmm... Vielä sellainen idea, että eikös sitä voisi järjestää niin, että koko pelin voisi pelata läpi yhdellä kerralla, ja sitten lopuksi ohjelma tallentaisi jokaisen "napsautetun" palikan koordinaatit tiedostoon.

Tällä tavoin aikaa voitaisiin säästää ja pelituloksia ehkä parantaa.

---

Chiman kirjoitti:

T.M. kirjoitti:

Tein tässä kokeilumielessä tuollaisen väripelin PHP:llä, joka käyttää yllä mainittua tietojen käsittelytapaa:
http://koti.mbnet.fi/winuus/varipeli.php

Näppärä versio :) Tuota kun jonkin aikaa pelailin, keksin kohtuullisen algoritmin tekoälylleni, jolla yritän voittaa 75 % kilpailijoista. Kieleksi Python.

Hah :D No pitihän se arvata että oma tekeleeni muuttuu ennemmin tai myöhemmin minulle haitaksi >_<

Juice [03.06.2005 19:09:02]

#

Axuu kirjoitti:

Mites muilla menee?

Tällä hetkellä itse AI menossa, palikat on jo sujuvasti arrayssa :)
Oma tavoite on saada aikaan tekoäly, joka ei jää viimeiseksi. Kielenä Java. Eka kerta ku osallistun mihinkään ohjelmointikilpailuun :P

Niko [03.06.2005 19:27:10]

#

Mäkin yritän olla jäämättä viimeseks...
tällä hetkellä ajasta kuluu arviolta 0.29380321502686% :D
tosin tulkin käynnistymiseen vois varata tarpeeks aikaa...

tällä hetkellä löytää tosta esimerkki kentästä 7 siirtoa
ja oikeastihan niitä on 6 jos oikein laskin

dOb [03.06.2005 19:58:11]

#

T.M. kirjoitti:

dOb kirjoitti:

Ja vielä se, että nykyisellä muotoilulla on ihmisen helpompi tehdä niitä aloitustilanteita, mitkä lähetetään tekoälyjen mukana :)

Kuinka niin? Sinun täytyy painaa spacea aina joka numeron välillä :P

Siis näkee nopeammin, että missä on mitäkin palikoita, kun on välit niitä erottamassa :)

T.M. kirjoitti:

Hmm... Vielä sellainen idea, että eikös sitä voisi järjestää niin, että koko pelin voisi pelata läpi yhdellä kerralla, ja sitten lopuksi ohjelma tallentaisi jokaisen "napsautetun" palikan koordinaatit tiedostoon.

Tällä tavoin aikaa voitaisiin säästää ja pelituloksia ehkä parantaa.

Miten sitten pidettäisiin huoli siitä, ettei tekoäly käytä yhden "napsautuksen" miettimiseen yli kahta sekuntia aikaa?

Masfonos [03.06.2005 20:38:18]

#

Tilannepäivitys:

Zeppelin -niminen botti lukee onnistuneesti tarvittavat tiedot ja aloittaa joko yksinpelin tai multiplayerin.

Axuu [03.06.2005 21:05:07]

#

T.M. kirjoitti:

Tuli tässä mieleen sellainen, että hyväksyttäisiinkö tälläinen aloitustilanne:

11111111
11111111
11111111
11111111

Tai jokin muu yhtä helppo? :l
Mietin vain että onko siinä mitään järkeä antaa mahdollisuus päättää aloitustilanteesta...

Mielestäni on järkeä. Vaikka sieltä saattaa tulla muutama tuollainen ei se vaikuta lopputilanteeseen koska kaikki pelaa kaikil väreil saman alotuksen...Niin peliin tulee mukaan mielenkiintoisia kenttiä...

Niko [03.06.2005 21:08:00]

#

Nyt on sitten muutama bugi korjattu jo (ajatusvirheen tuloksia, liittyy eri suuntiin hakuun ja varmistukseen ettei ole käsitelty ruutua mitä käy jos ei katota ja välissä on yksi joka on katsottu sitten katsomaton samaa sarjaan kuuluva eli tuli vääriä ryhmiä :( )

testaus-softaaa odotellaan

Ainiin: moninpeliä ei vielä taida :P

Edit 2: Nyt pitäs moninpelikin sujua
nimestä sen verran että se on erään kielen eräs sana :P (ei suomen)

T.M. [03.06.2005 21:25:53]

#

dOb kirjoitti:

T.M. kirjoitti:

Hmm... Vielä sellainen idea, että eikös sitä voisi järjestää niin, että koko pelin voisi pelata läpi yhdellä kerralla, ja sitten lopuksi ohjelma tallentaisi jokaisen "napsautetun" palikan koordinaatit tiedostoon.

Tällä tavoin aikaa voitaisiin säästää ja pelituloksia ehkä parantaa.

Miten sitten pidettäisiin huoli siitä, ettei tekoäly käytä yhden "napsautuksen" miettimiseen yli kahta sekuntia aikaa?

Ei pidetäkään, annetaan esimerkiksi minuutti aikaa ratkaista yksi kenttä kokonaisuudessaan.
Ja tekoälyn luoja tietenkin pitää huolen siitä ettei yhteen siirtoon kulu mahdottomasti aikaa.

Minusta tuo ehdottamani tyyli olisi järkevämpi tapa ratkaista voittajat. Ellen ole nyt jotain asiaa unohtanut miettiä loppuun asti...?

---

Masfonos ja Niko, elkää tänne päivitelkö tekoälyjenne muutoksista.

dOb [03.06.2005 22:13:40]

#

Tuo malli ei kävisi moninpeliä ajatellen, sillä tekoälythän poistavat palikoita vuorotellen, joten mitä sille sitten tehtäisiin?

Masfonos [03.06.2005 22:23:53]

#

Ideana varmaan olisi kaksi eri moodia moninpeliä ja yksinpeliä varten. Mutta jos botin antaisi käydä yksikseen läpi koko jutun, silloin pitäisi jokaisen ohjelmoida oma palikan siirtäjä/pudottaja systeemi. Parempi, että on tuo 2s raja.

T.M. [03.06.2005 23:52:50]

#

Masfonos kirjoitti:

Mutta jos botin antaisi käydä yksikseen läpi koko jutun, silloin pitäisi jokaisen ohjelmoida oma palikan siirtäjä/pudottaja systeemi.

Noh, tuo siirtäjä/pudottaja systeemi pitää jokatapauksessa ohjelmoida jos aikoo ennustaa yhtään pelin tapahtumaa tekoälyä varten :)
Ja jos tuo koituu ongelmaksi, niin tuskin tekoälystä kauhean hyvää tässä tapauksessa tulisi.

Muita vastaväitteitä? ^__^

arcatan [04.06.2005 07:14:01]

#

Saatoin taas olla lukematta ohjeita kunnolla, mutta saanko osallistua kahdella tekoälyllä? Minulla olisi nimittäin kaksi ideaa, jotka poikkeavat toisistaan selvästi.

msdos464 [04.06.2005 12:25:23]

#

arctan, mielestäni voisit vaikka testata että kumpi on parempi :)

Mielestäni olisi parempi että koko peli pitää mennä läpi esim 10 sekunnissa, alussahan on paljon enemmän tarkasteltavia vaihtoehtoja kuin lopussa. Tai että esim. 3 ekaa siirtoa 5 sek, siitä sitten 4, 3, ja loppuihin 2 sek aikaa. Onglema kun yksinkertaistuu huomattavasti esim. 4 siirron aikana.

Niko [04.06.2005 14:21:29]

#

tässä sitten odotellaan että tulisi testaus softa, että vois alkaa paranteleen valintaa :P

Antti Laaksonen [04.06.2005 16:41:12]

#

T.M. kirjoitti:

Vielä sellainen idea, että eikös sitä voisi järjestää niin, että koko pelin voisi pelata läpi yhdellä kerralla, ja sitten lopuksi ohjelma tallentaisi jokaisen "napsautetun" palikan koordinaatit tiedostoon.

Tämä olisi varmaan myös ihan toimiva ratkaisu, mutta tässä vaiheessa kilpailun sääntöjä ei aleta enää muuttaa näin paljon. Nyt kun poistot tapahtuvat kahden sekunnin välein, tekoäly saa tavallaan lisäaikaa tekemällä poistoja niin, että ryhmiä muodostuu poistojen seurauksena enemmän.

arcatan kirjoitti:

Saatoin taas olla lukematta ohjeita kunnolla, mutta saanko osallistua kahdella tekoälyllä? Minulla olisi nimittäin kaksi ideaa, jotka poikkeavat toisistaan selvästi.

Voit osallistua monella tekoälyllä, jos ne tosiaan eroavat tyystin toisistaan. Mutta voisit myös koettaa yhdistää molempien tekoälyjen parhaat piirteet samaan tekoälyyn.

Antti Laaksonen [05.06.2005 02:04:16]

#

Lukutiedoston ([nimi].luk) sisältöä on nyt laajennettu moninpeleissä. Tiedoston ensimmäiset rivit ovat pysyneet entisellään, eli alkuperäisten sääntöjen mukaan tehdyt tekoälyt toimivat muutoksitta. Mutta pelikentän jälkeen tulee vielä lisätietoa, josta voi olla hyötyä tekoälylle. Jokaista värinumeroa vastaa oma rivi, jolla on kaksi numeroa. Ensimmäinen numero on 1, jos tätä väriä keräävä tekoäly on mukana pelissä, ja muuten 0. Toinen numero ilmoittaa, kuinka monta tämänväristä neliötä oli pelin aloitustilanteessa.

Päivitin nämä muutokset myös kilpailusivulle, jossa on nyt kunnollinen selostus moninpelin kulusta. Sivun alalaidassa näkyvät ensimmäisen version jälkeen tulleet muutokset. Jälkikäteen tehtävien muutosten määrä on tarkoitus pitää vähäisenä, mutta kilpailu ei ole vielä pitkällä ja näistä lisäyksistä on todennäköisesti hyötyä monelle tekoälyn laatijalle.

petrinm [05.06.2005 10:27:57]

#

Yks kymysys vielä olisi:
Jos pelitapa on yksinpeli onko luku tiedoston lopussa noita
söhellyksiä?

Antti Laaksonen [05.06.2005 10:30:41]

#

Ei ole, ne ovat ainoastaan moninpelissä. Kilpailusivulla on esimerkki lukutiedostosta sekä yksin- että moninpelissä.

Masfonos [05.06.2005 10:54:55]

#

Tuo toinen numero, värien määrä, on sinänsä turha numero, ainakin minulle koska bottini laskee jo ne värit automaagisesti.

Antti Laaksonen [05.06.2005 10:57:06]

#

Toinen numero on siis värien määrä aloitustilanteessa, ei senhetkisessä pelitilanteessa. Tätähän tietoa tekoäly ei muuten pysty selvittämään.

nakkikorva [05.06.2005 13:24:18]

#

Minulle on jäänyt vielä vähän epäselväksi, että saako moninpelissä tekoäly antaa sellaisen neliön koordinaatit, jota ei voi poistaa, vai putoaako silloin pelistä?

Antti Laaksonen [05.06.2005 14:08:43]

#

Tekoäly saa "passata" antamalla koordinaatit, joiden kohdalta neliöryhmää ei voi poistaa. Pelistä putoaa, jos aikaraja ylittyy tai tekoäly ei kirjoita mitään koordinaatteja tiedostoon.

SHSHSH [06.06.2005 09:19:53]

#

Eli jos omasta väristä ei löydy ryhmiä, täytyy tehdä juuri näin ellei halua luopua pelistä?

arcatan [06.06.2005 11:16:43]

#

Vaikka se on myöhäistä, niin heitänpä nyt pientä kritiikkiä: tämä ei ole kovin hyvä tekoälyohjelmointikilpailutehtävä. On nimittäin helpostikin mahdollista, että yksinkertainen äly, joka vain tunnistaa kuviot ja satunnaisesti valitsee sopivan, voi voittaa kilpailun. Edellisessä kilpailussa vastaavan tapainen äly olisi toki siinäkin voinut voittaa, mutta se olisi ollut niin epätodennäköistä, ettei sitä oikeastaan edes olisi kannattanut kokeilla. Tässä kilpailussa kyseinen sen sijaan voisi toimia.

Ai niin, ja se mun hieno ideani ei toiminut. Ensinnäkin 59000-rivisen C++-tiedoston (generoitu automaagisesti) kääntäminen vie liikaa aikaa ja sitten se vielä päätti ryhtyä segfaulttaamaan :(

BadSource [06.06.2005 12:07:40]

#

arcatan kirjoitti:

Vaikka se on myöhäistä, niin heitänpä nyt pientä kritiikkiä: tämä ei ole kovin hyvä tekoälyohjelmointikilpailutehtävä. On nimittäin helpostikin mahdollista, että yksinkertainen äly, joka vain tunnistaa kuviot ja satunnaisesti valitsee sopivan, voi voittaa kilpailun.

Onnella voi pärjät yhdessä pelissä, mutta kun sijoitus lasketaan useammalta peliltä, ohjelma saa olla nimeltään HannuH.exe (aka Hannu Hanhi), jos meinaa pelkällä onnella pärjätä.

Pienillä ruudukoilla mahdollisten siirtojen määrä on vähäisempi, joten todennäköisyys valita "paras" siirto on suurempi, kuin suuremmilla ruudukoilla. Ruudukon koon kasvaessa siirtojen määrä kasva ja tuuria vaaditaan paljon enemmän (jos se olisi mitattava suure toim. huom.).

Tekoäly, joka laskee siirtoja eteenpäin, on aina etuasemassa tuurilla seilaavaan tekoälyyn, ellei se sitten arvio siirtojen vaikutusta aivan päin per*että...

Juice [06.06.2005 18:47:28]

#

Taitaa minun tekoälystä tulla tuurihaukka, joka jää viimeiseksi. Ei aika riitä koodaamaan parempaa. Ei tuurilla kyllä pärjää, mutta osallistuminen on tärkeintä :)

Touho [06.06.2005 19:16:28]

#

Odotan sitä testausohjelmaa kovasti. Sitten pääsee vasta näkemään mitä se tekoäly oikeasti tekee. Ei tullu viikonloppuna. :)

Antti Laaksonen [06.06.2005 21:18:55]

#

SHSHSH kirjoitti:

Eli jos omasta väristä ei löydy ryhmiä, täytyy tehdä juuri näin ellei halua luopua pelistä?

Jos omanvärisiä ryhmiä ei ole ensinkään, tekoälyä ei edes vaivata. Siis tekoäly voi olettaa, että kentällä on jotain poistettavaa.

arcatan kirjoitti:

- - tämä ei ole kovin hyvä tekoälyohjelmointikilpailutehtävä. On nimittäin helpostikin mahdollista, että yksinkertainen äly, joka vain tunnistaa kuviot ja satunnaisesti valitsee sopivan, voi voittaa kilpailun.

Minä ainakin uskon, että taiten ohjelmoidut tekoälyt sijoittuvat kärkeen. Pelin tapahtumat eivät suinkaan ole satunnaisia, vaan tekoälyn valinnoilla on niihin suuri vaikutus. Sieltä täältä poistelemalla voi toki myös päästä hyvään tulokseen yksittäisissä peleissä.

FooBat [06.06.2005 21:21:51]

#

Touho kirjoitti:

Odotan sitä testausohjelmaa kovasti. Sitten pääsee vasta näkemään mitä se tekoäly oikeasti tekee. Ei tullu viikonloppuna. :)

Nopeastihan sellaisen tekee itsekin.
http://www.niksula.cs.hut.fi/~jasainio/Miscellaneous/dropper.exe

Kopioi dropper.exe, oma ohjelmasi (nimeltään nimi.exe tai nimi.bat, joka käynnistää ohjelmasi) ja aloitustilanne nimi.luk samaan hakemistoon.

käyttö:
dropper nimi > log.txt

Ohjelma päivittää pelitilannetta nimi.luk tiedostoon, kutsuu omaa ohjelmaasi ja lukee vastauksen nimi.kir tiedostosta. Ohjelma jatkaa tätä kunnes mitään ei voi poistaa tai ohjelmasi palauttaa koordinaatit, jotka eivät ole pelilaudalla.

Edit: Tämä ohjelma on tarkoitettu vain yksinpelin testaukseen.

Niko [06.06.2005 22:32:43]

#

ei toi oikein toiminu tai sitten tein jotain väärte

Aika = 0.109000 s
Luettu koordinaatit (2, 4)
Poistettu 0
--------
  1 2
1 0 0 0 0 0 0 0 0 4 7
2 0 0 0 4 7 0 5 7 6 2
3 0 0 0 7 3 0 1 3 1 3
4 2 3 5 5 7 0 5 4 3 2
5 8 3 2 1 7 6 7 3 1 5

tossahan on kaks kolmosta?

ja eikös ne laitettu sarake, rivi?

FooBat [06.06.2005 22:39:55]

#

(1,2) osuu tuohon 4:n ja 3:n välissäolevaan numeroon 2 jota on vain yksi, joten ohjelma ei poista sitä ja katkaisee ajon virheellisen syötteen takia. Eikös koordinaatit pitänyt alkaa ykkösestä eikä nollasta ?

Niko [06.06.2005 22:56:03]

#

http://www.pahajoki.info/testi.php

tossa näkyy paremmin

tossa on anette 2,4 eli 1,3 jos aloitetaan nollasta
eli se menee tohon kohtaan jossa on kaksi kolmosta päälekkäin

BlueByte [06.06.2005 22:57:15]

#

FooBat kirjoitti:

Touho kirjoitti:

Odotan sitä testausohjelmaa kovasti. Sitten pääsee vasta näkemään mitä se tekoäly oikeasti tekee. Ei tullu viikonloppuna. :)

Nopeastihan sellaisen tekee itsekin.
http://www.niksula.cs.hut.fi/~jasainio/Miscellaneous/dropper.exe

Kopioi dropper.exe, oma ohjelmasi (nimeltään nimi.exe tai nimi.bat, joka käynnistää ohjelmasi) ja aloitustilanne nimi.luk samaan hakemistoon.

käyttö:
dropper nimi > log.txt

Ohjelma päivittää pelitilannetta nimi.luk tiedostoon, kutsuu omaa ohjelmaasi ja lukee vastauksen nimi.kir tiedostosta. Ohjelma jatkaa tätä kunnes mitään ei voi poistaa tai ohjelmasi palauttaa koordinaatit, jotka eivät ole pelilaudalla.

Edit: Tämä ohjelma on tarkoitettu vain yksinpelin testaukseen.

oisko mahdollista, että lainaisit ton lähdekoodia. Tarvittis jonkun testiohjelman linuxiin.

FooBat [06.06.2005 23:04:47]

#

BlueByte kirjoitti:

oisko mahdollista, että lainaisit ton lähdekoodia. Tarvittis jonkun testiohjelman linuxiin.

Lähdekoodin lainaus ei taida tässä tapauksessa tulla kysymykseen, koska koodi on lähes kokonaan copy-pastettu mun tekoäly-koodista.

Mä voisin tietenkin kokeilla kääntää siitä x86-linux version, jos mä löydän jostain sellaisen koneen. Hetki.

Edit. Kunhan korjaan eka tuon Nikon löytämän bugin. Pitäisi näköjään välillä testata ohjelmaa muilla kuin neliön muotoisilla syötteillä :/
Nyt siellä on uusi versio siitä testiohjelmasta.

Linux versio:
http://www.niksula.cs.hut.fi/~jasainio/Miscellaneous/dropper.bin

rainmikko [07.06.2005 09:10:14]

#

FooBat:
.kir tiedostossa on rivi:
5,4
mutta logissa lukee näin:
Aika = 0.078000 s
Luettu koordinaatit (5, 4598896)
Koordinaatit pelialueen ulkopuolella.
--------
1 2 1 3 1 2
4 3 5 5 4 3
4 5 4 4 4 5
5 2 2 3 3 5
4 3 5 3 4 2
--------
Mistäköhän johtuu?

Metabolix [07.06.2005 11:29:46]

#

rainmikko: Kirjoitus pitää olla näin:

5 4

Ei näin:

5,4

FooBat [07.06.2005 11:57:40]

#

rainmikko kirjoitti:

FooBat:
.kir tiedostossa on rivi:
5,4
mutta logissa lukee näin:
Luettu koordinaatit (5, 4598896)

Metabolix jo vastasikin perustavan syyn tähän. Toisijainen syy on, että ohjelma ei taida tarkistaa kuinka monta lukua fscanf tulee lukeneeksi eikä ohjelma tule antaneeksi kovin selvää virheilmoitusta tässä tapauksessa. Nyt 5,4 tulee luetuksi yhdeksi luvuksi (5) ja toinen luku jää lukematta. 4598896 taitaa olla y-muuttujan alustamanton arvo. Tuo testiohjelma on aika nopeasti tehty ja jotain tälläistä saattaa esiintyä.

rainmikko [07.06.2005 13:41:09]

#

ok, kiitos :)
Yksi bugi löytyi:
--------
1 2 0 0 1 2
4 3 1 3 4 3 <-- yhteensä neljä
4 5 4 4 4 5 <-- nelosta kasassa
5 2 2 3 3 5
4 3 5 3 4 2
--------
Aika = 0.047000 s
Luettu koordinaatit (3, 3)
Poistettu 3
--------
1 2 0 0 0 2
4 3 0 0 1 3
4 5 1 3 4 5 <-- yksi nelonen jäi
5 2 2 3 3 5
4 3 5 3 4 2
--------

tuohon jäi yksi nelonen :)

FooBat [07.06.2005 19:28:37]

#

rainmikko kirjoitti:

ok, kiitos :)
Yksi bugi löytyi:
...
tuohon jäi yksi nelonen :)

No olipas tää nyt sitten buginen kasa. Päivitän tuon kohta kunhan eka vähän testailen :)

Edit: Päivitin sekä windows, että linux version ohjelmasta. Lisäsin myös paremman virheilmoituksen virheellisen koordinaatitiedoston kohdalle.
Win: http://www.niksula.cs.hut.fi/~jasainio/Miscellaneous/dropper.exe
Linux: http://www.niksula.cs.hut.fi/~jasainio/Miscellaneous/dropper.bin

T.M. [07.06.2005 19:44:08]

#

FooBat kirjoitti:

Nopeastihan sellaisen tekee itsekin.

Heh, kauankohan bugien korjaamiseen on tällä hetkellä mennyt aikaa ;)
Nopeasti tekemällä ei yleensä tule mitään hyvää :P

BTW, tuosta värialueen poistamisesta kannattaa tehdä rekursiivinen.

FooBat [07.06.2005 19:57:34]

#

T.M. kirjoitti:

FooBat kirjoitti:

Nopeastihan sellaisen tekee itsekin.

Heh, kauankohan bugien korjaamiseen on tällä hetkellä mennyt aikaa ;)

Itseasiassa yllättävän vähän, n. 15min. Molemmat olivat vain yhden merkin bugeja.

T.M. kirjoitti:

Nopeasti tekemällä ei yleensä tule mitään hyvää :P

BTW, tuosta värialueen poistamisesta kannattaa tehdä rekursiivinen.

No, nopeasti tehty on usein ainakin puoliksi valmis :)
Tässä tapauksessa asian piti olla aika suoraviivaista, kun siirsin vain osia omasta tekoälykoodista erilliseen tiedostoon. Yllättäen niihin kohtiin, joita jouduin vähän muokkailemaan eksyi pari bugia.

BTW, se on rekursiivinen.

Antti Laaksonen [08.06.2005 19:04:28]

#

Minunkin testiohjelmani alkaa pikku hiljaa valmistua:
https://www.ohjelmointiputka.net/vps.zip

Ohjelmalla voi pelata yksinpeliä itse tai antaa tekoälyn pelata sitä. Lisäksi ohjelmalla voi suunnitella aloitustilanteita. Uusia ominaisuuksia tulossa, mm. moninpeli!

Niko [08.06.2005 20:50:36]

#

ihan hyvin näyttää toimivan...
pitäs vaan saada oman tekoälyn äly toimimaan

FooBat [08.06.2005 21:04:12]

#

Eräs ehdoton lisäominaisuus tuohon on se, että saman (satunnaisen) pelin pystyy aloittamaan uudestaan ja/tai tallentamaan tiedostoon. Usein peli etenee aika nopeasti ja sitten kun havaitsee jonkun ongelman (esim. ajan ylitys) olisi kiva tarkastella peliä vähän tarkemmin ja tallentaa peli uutta yritystä varten.

ps. Kenen muun tekoäly on ratkaissut 30x30 pelin kolmella värillä :)

Antti Laaksonen [08.06.2005 21:10:47]

#

Tämä on mahdollista jo nyt. Kun pelin aloituksen jälkeen siirtyy kenttäeditoriin, senhetkisen tilanteen pystyy tallentamaan. Uuden pelin voi sitten aloittaa tallennetulla kentällä.

Axuu [08.06.2005 21:22:05]

#

öö..mikäköhän mul on ku en saa toimiin... valittaa "Runtime error 5 invalid procedure call or argument" heti kun käynnistää sun väripeli ohjelman?

se toimi jos en laita samaan kansioon sitä mun pelin exee..

EDIT: eiku joo, vika oli siinä et mulla oli ne projekti tiedostot siel samas kansiossa!

EDIT 2: ny se väittää ettei tiedostoo löydy ky käynnistän pelin vai tarviiks vb:hen laittaa jokin käynnistyskomento?

FooBat [08.06.2005 21:25:03]

#

Tapaus vain sattuu olemaan sellainen, että ongelmia yleensä esiintyy vain pienessä joukossa noista satunnaisista peleistä ja jokaisen testipelin tallentaminen tiedostoon aina pelin alussa on aika hidasta, silloin kun yrittää nopeasti etsiä ongelmatilanteita. Vasta ongelmatilanteen havainnon jälkeen peli muuttuu mielenkiintoiseksi ja siitä pitäisi saada kopio toistoa varten. Ongelmatilanteen havainnon jälkeen pelikentän tallentaminen on jo liian myöhäistä, koska peli suorittaa AI:n myöhässä tekemän siirron ja mielenkiintoinen tilanne on mennyt jo hukkaan.

Antti Laaksonen [08.06.2005 21:27:18]

#

Joo, pitänee siis tehdä "toista äskeinen peli" -ominaisuus. :)

muokkaus: Uusi versio saatavilla samassa osoitteessa.

Axuu kirjoitti:

EDIT 2: ny se väittää ettei tiedostoo löydy ky käynnistän pelin vai tarviiks vb:hen laittaa jokin käynnistyskomento?

Mikä on tarkka virheilmoitus? VB-tekoälyn käynnistyskomento on sama kuin EXEn nimi.

Axuu [08.06.2005 21:55:45]

#

Se oli vaan se normaali ettei tiedostoo löydy...mut se johtu tost käynnistys komennost. Nyt toimii!

Edit:
Olisko mahdollista et peliin otettais mukaan yksi hannu hanhi, jota joku ehdotti (joka arpoo jonkin palikan vaan (misä o vähintään 2 vierekkäin), niin näkisi kuinka hyvin se pärjää? (mun tekoälyni joka valitsee vain suurimman ryppään aina, 30x30 ruudukol jäi 5 palikkaa jäljelle...)

Edit 2: Jos pistää kaikki 8 väriä, niin kyllä tolla mun tyylil sinne aika paljon jää, joten isoimmilla värimääril ei pärjää onnel.

Niko [08.06.2005 23:24:39]

#

testasin 30x30x3

1. 12 jäi
2. 3 jäi
3. 1 jäi

tämä on siis ns. hannu hanhi tällä hetkellä (ottaa tosin ekan vastaan tulevan)

FooBat [09.06.2005 00:01:11]

#

Minkäköhän takia tuossa testiohjelmassa ohjelma pysästyy silloin tällöin noin 4 sekunnin ajaksi (väittää mun AI:n muka kestävän niin kauan), kun ohjelma on 'automaatilla'. Sama peli samalla teköälyllä (ja samoilla valinnoilla) menee kuitenkin helposti (noin 0.02s per valinta) läpi 'seuraava' nappia rämpyttämällä. Tämä esiintyy ainakin yhdessä isommassa pelissä 240 poiston jälkeen.

Oma veikkaukseni on se, että ohjelmia käynnistetään nopeammin kuin windows ehtii kunnolla sulkea niitä. Ainakin alhaalla olevassa tehtäväpalkissa olevat ohjelmat pienevät ja pakkautuvat vasempaan reunaan ohjelman ollessa käynnissä ikään kuin taskeja tulisi kokoajan lisää, mutta ei poistuisi.

Metabolix [09.06.2005 21:08:30]

#

Kai .NET-kielillä saa osallistua? Nehän vaativat .NET Frameworkin siinä missä Java-sovelmat vaativat Java-virtuaalikoneen.

Deewiant [09.06.2005 21:18:23]

#

Saako parityö osallistua vai pitääkö AI tehdä kokonaan yksin?

Hannuhanhet ovat muuten erittäin huonoja tekotyhmiinkin verrattuna. Sellainenkin, joka poistaa aina vain isoimman ryppään, jättää yleensä 200% vähemmän neliöitä kuin satunnaisesti ottava. Tuli ajettua parikymmentä testipeliä (satunnaiset pituus/leveys/värien määrä) tällaisilla perusvehkeillä, ja tuo oli tulos.

FooBat [09.06.2005 22:19:07]

#

Aloin tässä suunnittelemaan moninpelin teköäly ja nousi pieni epäselvyys miten pelit oikeasti järjestetään.

Jos oletetaan, että kilpailuun osallistuu 30 ohjelmaa, joudutaan esimerkiksi yksi 3:n värin kenttä pelaamaan 30*29*28=24360 kertaa, jos halutaan, että kaikki pelaavat toisiaan vastaan kaikilla aloitustilanteilla. Ja tietenkin olisi mukavaa pelata useammalla eri kentällä. Tämä taitaa olla liikaa, joten tasapuolisuudesta joudutaan jotenkin tinkimään.

Itse ehdottaisin jonkinlaista pudotuspelisysteemiä, jossa aluksi ohjelmat arvotaan 5-6 ohjelman ryhmiin, jotka pelaavat keskenään yhden pelin kaikilla aloitustilanteilla. Näiden pelien 2-3 parasta pääsevät mukaan seuraavalle kierrokselle, jossa jatkoon päässeet arvotaan uudestaa sopivan kokoisiin ryhmiin ja sama toistetaan. Tämä tietenkin päättyisi loppufinaaliin, jossa 2-5 parasta pelaa moninpelin mestaruudesta.

Tämä tietenkin hiukan vääristää kokonaispistemäärää, jos se edelleen pysyy poistettujen palikoinen lukumääränä. Ehkäpä yksin ja moninpeli pitäisi erottaa eri sarjoiksi.

Deewiant [09.06.2005 22:28:25]

#

Jep, etenkin jos moni tekoäly käyttää koko annetun 2 sekunnin ajan, pelien pyörittämisessä menee pieni ikuisuus. Tosin, se on Laaksosen ongelma eikä meidän ;-)

FooBat kirjoitti:

Ehkäpä yksin ja moninpeli pitäisi erottaa eri sarjoiksi.

Näin oletin asian koko ajan olevan... enemmän järkeäkin se tekisi, kun tekoäly on tietty hieman erilainen moninpelissä (yrittää "hyökätä" muiden kimppuun, esimerkiksi).

Jos moninpelissä poistaa toiselle tekoälylle kuuluvia neliöitä, saako tämä toinen niistä pisteitä?

VilleP [09.06.2005 23:31:13]

#

Yksinpelin luonne mahdollistaa varsin helpon vertailun eri tekoälyjen välillä näin foruminkin välityksellä:

10 10 6
2 3 4 5 3 2 6 5 4 2
2 2 2 1 4 2 6 1 1 5
3 6 2 6 6 3 1 5 2 5
4 1 2 1 2 3 4 6 5 2
3 2 3 6 3 2 4 4 2 5
6 6 3 2 1 1 3 5 3 5
1 1 1 5 4 5 3 2 5 2
2 4 5 5 3 3 6 2 6 5
2 4 2 6 4 3 6 1 4 5
1 5 6 2 1 3 3 3 5 5

Olisi mielenkiintoista tietää, millaisessa vaiheessa muiden osallistujien tekoälyt tällä hetkellä ovat; Miten ohjelmanne siis suoriutuvat esim. edellä mainitusta syötteestä?


Vielä lisäysvinkki testiohjelmaan, joka helpottaisi vastausten vertailua; ohjelmaan voisi lisätä mahdollisuuden tulostaa pelin päätteeksi kaikki tekoälyn tekemät siirrot (koordinaatit) helposti kopioitavana listana, ja vielä käänteisesti mahdollisuuden suorittaa kaikki annetun mielivaltaisen edellämainitun kaltaisen listan siirrot nykyiseen pelitilanteeseen.

EDIT: Oma ohjelmani näyttäisi tyhjentävän koko edellisen syötteen 36 ryhmän poistolla.

msdos464 [10.06.2005 11:27:13]

#

millaisella sarjalla tuon saa poistettua kokonaan (siis siirrot)?

VilleP [10.06.2005 12:17:09]

#

msdos464 kirjoitti:

millaisella sarjalla tuon saa poistettua kokonaan (siis siirrot)?

Esimerkiksi seuraavanlaisella:
10 5, 8 2, 4 3, 5 8, 3 5, 8 3, 5 6, 5 8, 5 9, 4 10, 1 7, 3 8, 2 6, 1 2, 7 4, 8 7, 4 7, 6 7, 7 7, 7 9, 7 10, 7 9, 8 8, 6 6, 1 7, 2 8, 4 9, 2 10, 1 10, 1 9, 2 9, 3 10, 2 10, 1 9, 1 9, 1 8

Deewiant [10.06.2005 14:52:26]

#

Kiva muuten että ainakaan tuo Laaksosen testiohjelma ei lue aloitustilanteita kunnolla. Ja jos tuo VilleP:n postaama kenttä on sen kenttäeditorilla tehty, eipä se kirjoitakaan niitä oikein. Ekalla rivillä pitäisi olla ohjesivun mukaan 4 numeroa:

Ohjeet kirjoitti:

Tiedoston ensimmäisellä rivillä on neljä lukua: pelikentän leveys ja korkeus, värien määrä sekä pelitapa. Pelikentän leveys ja korkeus ovat 5 – 30 neliötä. Värien määrä on 2 – 8. Yksinpelissä pelitapa on 0.

Tuosta VilleP:n postaamasta tilanteesta puuttuu pelitapa. Jos sen laittaa, testiohjelma lukee sen väärin - se lukee näköjään merkkimäärän perusteella, eikä esimerkiksi hajota tiedostoa riveihin tjms. Kivaa.

Piti sitten koodata oma testiohjelma, kun tuo ei osaa.

Metabolix [10.06.2005 15:03:47]

#

Ohjeet kirjoitti:

Jokainen kilpailija toimittaa tekoälyn lisäksi yhden väripelin aloitustilanteen. [- -] Tiedosto vastaa muuten tekoälyn lukemaa tiedostoa, paitsi että pelitapaa ei ilmoiteta. Tiedoston ensimmäisellä rivillä on siis ainoastaan kolme lukua.

Ehkäpä editori on tuota varten.

VilleP [10.06.2005 15:27:12]

#

Deewiant, esittämäni kenttä (joka on siis Antti Laaksosen testiohjelman tuottama satunnaiskenttä) toimii mainiosti, kun sen kopioi/liittää/tallentaa .alk-päätteiseen tiedostoon, ja sijoittaa tiedoston nimen Antin testausohjelman aloitustilanneosion "tiedostosta"-lokeroon.

Chiman [10.06.2005 16:28:53]

#

VilleP kirjoitti:

Olisi mielenkiintoista tietää, millaisessa vaiheessa muiden osallistujien tekoälyt tällä hetkellä ovat; Miten ohjelmanne siis suoriutuvat esim. edellä mainitusta syötteestä?

Lähdin kehittämään omaa tekoälyäni vasta kun tuo testausohjelma julkaistiin. Tällä hetkellä koodattuna on tekoälyn perusrutiinit, jonka päälle rakennan lopullisen version. Olen kokeillut muutamia perustaktiikoita ja todennut ne riittämättömiksi (esimerkkisyötteelläsi jäi aina vähintään 12 jäljelle). Täytyy kehitellä jotain toimivampaa, jotta yllän parhaan neljänneksen joukkoon.

Olen edelleen sillä kannalla, että käytän Pythonia loppuun asti, enkä hae lisätehoa esim. C:stä. Onhan siinä selkeä tasoitus muille, mutta koodaamisen ilo voittaa kunnianhimon tällä kertaa :)

lainaus:

Oma ohjelmani näyttäisi tyhjentävän koko edellisen syötteen 36 ryhmän poistolla.

Viimevuotisen näytön perusteella ihmettelisin, jos et olisi kärkikahinoissa mukana :)

Deewiant [10.06.2005 18:28:31]

#

VilleP kirjoitti:

Deewiant, esittämäni kenttä (joka on siis Antti Laaksosen testiohjelman tuottama satunnaiskenttä) toimii mainiosti, kun sen kopioi/liittää/tallentaa .alk-päätteiseen tiedostoon, ja sijoittaa tiedoston nimen Antin testausohjelman aloitustilanneosion "tiedostosta"-lokeroon.

Sanoinhan että se toimii mainiosti. Mutta se toimii väärin - eli ei ohjeiden mukaisesti. Eli tuo ei ole .luk-tiedosto, vaan .alk-tiedosto! Tekoäly lukee .luk-tiedostoja, eikä .alk-tiedostoja... mikä järki siinä on, että nuo ylipäätään ovat 2 eri formaattia? Yksikin kelpaisi ihan hyvin - okei, VPS-testiohjelma kirjoittaa itse .lukkiin, onko kyseessä yksinpeli vai moninpeli, mutta miksi, jos .alkissa lukee jo kumpi peli on kyseessä, se ei käytä sitä defaulttina tjms, vaan lukee koko tiedoston pieleen?

Metabolix kirjoitti:

Ehkäpä editori on tuota varten.

Varmaan onkin, mutta tekoälyn pitää olettaa ohjeiden mukaisesti, että ensimmäisellä rivillä on 4 lukua, eikä 3.

.alkia pitäisi pystyä käyttämään .lukin tilalla ja päinvastoin. VPS ei jostain syystä siedä tuota "virhettä".

markdark [10.06.2005 19:14:33]

#

VilleP kirjoitti:

Minulla tämä toimii.

Ei ole tarkoitus haastaa riitaa, ainakaan liikaa, mutta olisi kiva tietää, kuinka nopea tietokone sinulla (VilleP) on, sekä missä ajassa ohjelmasi löytää kyseisen ratkaisun.

On meinaan kiva etsiä jopa muokatulla depth search algoritmillä hyvää vastausta mopo penalla joka kahessa sekunnissa ehtii laskea noin kymmenen siirtoa eteenpäin. Ei tuu tulosta, ei.

Niih, et kerros vähän koneestas ja ajoajoista joilla sait kyseisen tuloksen (36 siirtoa, 0 jäljellä). Ihan vaan benchmarkkauksen vuoksi.

Chiman [10.06.2005 19:48:24]

#

markdark: Käypä katsomassa viimevuotisen ristinollakilpailun tuloksia ja Ville-tekoälyn lähdekoodia. En usko, että kyseessä on tälläkään kertaa depth first searchin perusversio. Koneen (tai edes ohjelmointikielen) nopeus ei ole niin ratkaisevaa kuin hyvän algoritmin valinta.

markdark [10.06.2005 20:10:43]

#

Chiman kirjoitti:

En usko, että kyseessä on tälläkään kertaa depth first searchin perusversio. Koneen (tai edes ohjelmointikielen) nopeus ei ole niin ratkaisevaa kuin hyvän algoritmin valinta.

Totta, kiinnostaa kuitenkin tietää, koska oma systeemi löytää vastauksen myöskin mutta ehkä sekunnin myöhemmin (n. 3-4 sekunttia), joten jos kyseessä on vain koneen moninkertainen laskuteho, niin sitten en ole huolissani.

On muuten aika mielenkiintoinen kilpailu, ja odotan innolla muitten ratkaisuja.

VilleP [10.06.2005 20:32:48]

#

markdark kirjoitti:

Niih, et kerros vähän koneestas ja ajoajoista joilla sait kyseisen tuloksen (36 siirtoa, 0 jäljellä). Ihan vaan benchmarkkauksen vuoksi.

En tullut laittaneeksi ajoaikoja tuon kyseisen tuloksen kohdalta muistiin, mutta nykyisellä versiolla vps.exe-testausohjelma näyttää ajaksi tuolla syötteellä n. 0.01-0.03 sekuntia per siirto, koneena AMD ATHLON XP 2000+ (1.67GHz).

Antti Laaksonen [11.06.2005 15:44:18]

#

FooBat kirjoitti:

Minkäköhän takia tuossa testiohjelmassa ohjelma pysästyy silloin tällöin noin 4 sekunnin ajaksi - - alhaalla olevassa tehtäväpalkissa olevat ohjelmat pienevät ja pakkautuvat vasempaan reunaan

Ohjelmien kasautuminen viittaa selvästi siihen, että ne eivät ehdi sulkeutua kokonaan. Testiohjelman pitäisi kyllä odottaa ohjelmien sulkeutumiseen asti, mutta voin koettaa lisätä väliin viivettä. Tapahtuuko näin aina tietyssä kohdassa peliä vai aivan satunnaisesti?

Metabolix kirjoitti:

Kai .NET-kielillä saa osallistua?

Kyllä saa.

Deewiant kirjoitti:

Saako parityö osallistua vai pitääkö AI tehdä kokonaan yksin?

En kiellä osallistumista yhdessäkään.

FooBat kirjoitti:

Aloin tässä suunnittelemaan moninpelin teköäly ja nousi pieni epäselvyys miten pelit oikeasti järjestetään.

Tämä asia täytyy päättää lopullisesti sitten, kun kaikki tekoälyt ovat saapuneet ja niiden ajankäyttö selviää. Joka tapauksessa kaikkien tekoälyjen ulottuvilla täytyy olla yhtäläinen pistemäärä, eli kaikkien pitää saada pelata jokaista väriä jokaisessa pelissä. Kaikkia mahdollisia vastustajayhdistelmiä ei kuitenkaan voida käydä läpi, eli on hieman tuurista kiinni, millaiseen pelaajaseuraan tekoäly pääsee.

Deewiant kirjoitti:

Jos moninpelissä poistaa toiselle tekoälylle kuuluvia neliöitä, saako tämä toinen niistä pisteitä?

Kyllä saa. Neliöiden poistotavalla ei ole merkitystä. Eli ne voi pyrkiä poistattamaan myös muilla.

Deewiant kirjoitti:

Kiva muuten että ainakaan tuo Laaksosen testiohjelma ei lue aloitustilanteita kunnolla.

Kyllä se lukee. Aloitustilanteessa ei ole sen vuoksi pelitapaa, että samaa kenttää voidaan käyttää sekä yksin- että moninpelissä. Tämä asia on selostettu myös ohjeissa.

Deewiant [11.06.2005 15:58:21]

#

Antti Laaksonen kirjoitti:

Aloitustilanteessa ei ole sen vuoksi pelitapaa, että samaa kenttää voidaan käyttää sekä yksin- että moninpelissä. Tämä asia on selostettu myös ohjeissa.

Minusta testiohjelman pitäisi silti pystyä lukemaan myös .luk-tiedostosta keskeneräinen tilanne samalla tavalla kuin tekoälynkin, ilman että siitä pitää itse editoida pois se ensimmäisen rivin viimeinen luku.

FooBat [11.06.2005 21:47:44]

#

Antti Laaksonen kirjoitti:

FooBat kirjoitti:

Minkäköhän takia tuossa testiohjelmassa ohjelma pysästyy silloin tällöin noin 4 sekunnin ajaksi - - alhaalla olevassa tehtäväpalkissa olevat ohjelmat pienevät ja pakkautuvat vasempaan reunaan

Ohjelmien kasautuminen viittaa selvästi siihen, että ne eivät ehdi sulkeutua kokonaan. Testiohjelman pitäisi kyllä odottaa ohjelmien sulkeutumiseen asti, mutta voin koettaa lisätä väliin viivettä. Tapahtuuko näin aina tietyssä kohdassa peliä vai aivan satunnaisesti?

Se ilmeni eräällä 30x30x8 kentällä toistuvasti suunnilleen samassa kohdassa, jossa ohjelmani palautti vastauksen erittäin nopeasti noin 50-100 kertaa peräkkäin. Olen jo muuttanut ohjelmaani hitaanpaan suuntaa eikä sitä enää esiinny, mutta silti tuohon pitäisi jotain keksiä, että ei tule virheellisesti havaittuja ajanylityksiä. Oma koneeni vastaa aika tarkasti testikokoonpanoa, joten jos se esiintyy minulla, voi se hyvinkin ilmetä oikeissa ajoissa.

Antti Laaksonen kirjoitti:

Deewiant kirjoitti:

Jos moninpelissä poistaa toiselle tekoälylle kuuluvia neliöitä, saako tämä toinen niistä pisteitä?

Kyllä saa. Neliöiden poistotavalla ei ole merkitystä. Eli ne voi pyrkiä poistattamaan myös muilla.
ohjeissa.

Kilpailun säännöt kirjoitti:

Moninpelissä 2 – 8 tekoälyä kamppailee keskenään niin, että jokainen poistaa pelikentältä ainoastaan tietynvärisiä neliöitä.

Minun mielestä tuossa säännössä sanotaan, että jokainen saa poistaa vain omiaa. Itse sanoisin, että tälläinen Deewiantin kysymä virheellinen siirto pitäisi johtaa pelistä poissulkemiseen samoin kuin ajanylitys.


Aikaisemmin oli jotain puhetta, että pelaaja voi jättää vuoron väliin antamalla siirron pelialueen ulkopuolelta. Mielestäni pelin hengen mukaista olisi, että siirron saa jättää väliin vain, jos pelialueella ei ole omia poistettavia ryhmiä. Eihän shakissa ja muissakaan peleissä saa jättää siirtämättä.

Metabolix [11.06.2005 22:19:26]

#

Suljetaanko tekoäly ulos moninpelistä, jos se ei kahteen vuoroon tee mitään? Tätä ei kai varsinaisesti säännöissä kerrottu.

FooBat kirjoitti:

Eihän shakissa ja muissakaan peleissä saa jättää siirtämättä.

Kuinka laajaa pelivalikoimaa nyt tarkoitat? Go:ssa saa ainakin passata, eikä se varmasti ole ainut.

Antti Laaksonen [12.06.2005 13:23:07]

#

Tosiaan pitää jotenkin varmistaa, että yhtään aiheetonta ajanylitystä ei tule. Varmin tapa on tarkistaa erikseen käsin kaikki epäilyttävät tapaukset (tekoäly suoriutuu tavallisesti valinnasta nopeasti, mutta yksi siirto kestää huomattavan kauan), ja näin myös todennäköisesti teen.

Moninpelin säännöissä ei ole erikseen kielletty poistamatta jättämistä tai toisenväristen neliöiden poistamista. Siis tekoälyn ei ole pakko poistaa omanväristä ryhmää (mikä on tosin aina mahdollista). Sääntöjä en mielelläni enää muuttaisi, kun kilpailu on jo näin pitkällä. Toisaalta tekoälyillä on nyt enemmän mahdollisuuksia. Joskus jopa toisen värin poistaminen voi hyödyttää tekoälyä itseään.

Moninpelissä peli päättyy, jos kukaan tekoälyistä ei tee mitään kahteen kierrokseen. Yksi tekoäly voi olla poistamatta kauemminkin.

FooBat [12.06.2005 16:06:46]

#

Antti Laaksonen kirjoitti:

Moninpelin säännöissä ei ole erikseen kielletty poistamatta jättämistä tai toisenväristen neliöiden poistamista. Siis tekoälyn ei ole pakko poistaa omanväristä ryhmää (mikä on tosin aina mahdollista). Sääntöjä en mielelläni enää muuttaisi, kun kilpailu on jo näin pitkällä.

Mielestäni olet tässä tapauksessa juuri muuttamassa sääntöjä , ja vieläpä huonompaan suuntaan.

Säännöissä lukee:

lainaus:

Moninpelissä 2 – 8 tekoälyä kamppailee keskenään niin, että jokainen poistaa pelikentältä ainoastaan tietynvärisiä neliöitä.

Tämän voi mielestäni ymmärtää vain niin, että _jokainen poistaa pelikentältä ainoastaan tietynvärisiä neliöitä_. Tietyllä värillä oletettavasti tarkoitetaan pelaajan omaa väriä, ellei tekoäly jostain syystä halua koko pelin ajan poistaa pelkästään jonkun tietyn vastustajan neliötä.

Poistamatta jättämistä ei ole erikseen kiellettty, mutta se mahdollisuus tekee peleistä pidempiä ja oikeastaa sen käyttö luotettavasti tarvitsisi edellisen kierroksen siirtojen tallentamisen tekoälyn muistiin.

Lisäksi moninpelien järjestelytapa pitäisi päättää ennakkoon, jotta tiedetään onko tuollaisessä siirtojen passaamisessa järkeä vai ei. Eli onko yksittäisen pelin voittaminen tärkeämpää kuin kokonaispistetilanne. Tämä nousee merkitseväksi etenkin, jos kaikki teköälyt eivät pelaa toisiaan vastaan niinkuin näyttää käyvän.

Metabolix [13.06.2005 13:04:41]

#

Moninpelin lisäriveistä:

lainaus:

Numeroista ensimmäinen on 1, jos tätä väriä keräävä tekoäly on mukana pelissä, ja muussa tapauksessa 0.
[– –]
Tässä pelissä jokaisella pelikentän värillä on ainakin aluksi oma kerääjänsä, sillä kaikki lisärivit alkavat luvulla 1

Jos äly putoaa pelistä, muuttuuko rivin ensimmäinen numero? Nähdäkseni ensimmäisessä pätkässä sanotaan, että luku ilmoittaa tilanteen sillä hetkellä, mutta toisen puolestaan voi ymmärtää niin, että tiedostosta selviää vain alkutilanne, mikä tarkoittaisi, että on mahdollista joutua pelaamaan sellaista pelikenttää, jossa joka värillä ei edes ole kerääjää.

Jtm [13.06.2005 13:53:33]

#

FooBat kirjoitti:

Antti Laaksonen kirjoitti:

Moninpelin säännöissä ei ole erikseen kielletty poistamatta jättämistä tai toisenväristen neliöiden poistamista. Siis tekoälyn ei ole pakko poistaa omanväristä ryhmää (mikä on tosin aina mahdollista). Sääntöjä en mielelläni enää muuttaisi, kun kilpailu on jo näin pitkällä.

Mielestäni olet tässä tapauksessa juuri muuttamassa sääntöjä , ja vieläpä huonompaan suuntaan.

Olen samaa mieltä FooBatin kanssa, että muutat itse juuri sääntöjä.

Antti Laaksonen kirjoitti:

Moninpelin säännöissä ei ole erikseen kielletty poistamatta jättämistä tai toisenväristen neliöiden poistamista. Siis tekoälyn ei ole pakko poistaa omanväristä ryhmää (mikä on tosin aina mahdollista). Sääntöjä en mielelläni enää muuttaisi, kun kilpailu on jo näin pitkällä. Toisaalta tekoälyillä on nyt enemmän mahdollisuuksia. Joskus jopa toisen värin poistaminen voi hyödyttää tekoälyä itseään.

Moninpelissä peli päättyy, jos kukaan tekoälyistä ei tee mitään kahteen kierrokseen. Yksi tekoäly voi olla poistamatta kauemminkin.

> Miten poistamatta jääminen merkataan sitten .kir tiedostoon? -1 -1 vai miten? Ongelmaksi myös tulee, että mistä oma tekoäly tietää onko kaikki muut tekoälyt jättäneet poistamatta ja siten peli päättyy kuin seinään. Mielestäni poistamatta jääminen pitäisi kieltää säännöissä. Ei tule liikaa ongelmia.

Muuten hei Antti,
Piti vielä kysyä, että millaista formaattia käytämme .luk ja .alk tiedostoissa. Huomasin vain, että editorin pelin formaatti on hieman erilainen kuin ohjeissa:

Ohjeen peli:
6 5 5 1<-- huomaa 1:sen jälkeen ei väli-merkkiä
1 2 1 3 1 2<-- huomaa 2:sen jälkeen ei väli-merkkiä
4 3 5 5 4 3<-- huomaa 3:sen jälkeen ei väli-merkkiä
4 5 4 4 4 5<-- ei väli-merkkiä
5 2 2 3 3 5<-- ei väli-merkkiä
4 3 5 3 4 2<-- ei väli-merkkiä
<-- ei ylimääräistä riviä

Editorin peli:
6 5 5<-- ei väli-merkkiä
5 2 3 1 2 3 <-- väli-merkki
5 4 2 5 5 4 <-- väli-merkki
4 3 1 2 5 3 <-- väli-merkki
4 4 3 3 1 4 <-- väli-merkki
1 1 5 2 5 3 <-- väli-merkki
<-- ylimääräinen rivi

Kyseinen ero tuo ongelmia ja muutoksia pelin arrayhin lataamiseen. Haluasin jo valmiiksi tietää kumpaa versioa käytätte? Ei olisi kivaa jos koko teköäly ei älyäkkään mitään kilpailussa mokoman eron takia.

Jtm [13.06.2005 14:42:27]

#

Tai no joo. Kyllä moninpelissä välillä on pakko olla poistamatta.

Antti Laaksonen [13.06.2005 21:35:13]

#

Sääntösivu on nykyisellään hieman epätarkka, ja perusteluissanne on järkeä. Ehkä tosiaan sääntöjä pitää vielä kerran muuttaa ja tarkentaa niin, että moninpelissä saa poistaa ainoastaan omanvärisiä neliöitä ja aina pitää poistaa jotain (siis toisin kuin olen tätä ennen sanonut). Oikeastaan jälkimmäinen sääntö voisi koskea myös yksinpeliä, sillä eihän siinä ole mitään hyötyä olla poistamatta. Valituksia saa esittää huomiseen iltaan asti, mutta sen jälkeen nämä muutokset tulevat voimaan.

Jtm kirjoitti:

Piti vielä kysyä, että millaista formaattia käytämme .luk ja .alk tiedostoissa. Huomasin vain, että editorin pelin formaatti on hieman erilainen kuin ohjeissa:

Jos tekoäly toimii testiohjelman kanssa oikein, se toimii myös lopullisessa kilpailussa. Testiohjelman käyttämä tiedostomuoto on siis lopullinen. Tosin jos tiedostosta lukee pelkät luvut, tällaisia ongelmia ei tule. Esim. C:llä tähän tapaan:

fscanf(tiedosto, "%i %i %i %i", &leveys, &korkeus, &varit, &tapa);

Nyt tiedoston välilyönneillä ja rivinvaihdoilla ei ole merkitystä.

Metabolix kirjoitti:

Moninpelin lisäriveistä: - - Jos äly putoaa pelistä, muuttuuko rivin ensimmäinen numero?

Muuttuu. Numero kertoo juuri sen, onko väriä keräävä tekoäly sillä hetkellä mukana.

Jtm [14.06.2005 01:12:29]

#

Antti Laaksonen kirjoitti:

Sääntösivu on nykyisellään hieman epätarkka, ja perusteluissanne on järkeä. Ehkä tosiaan sääntöjä pitää vielä kerran muuttaa ja tarkentaa niin, että moninpelissä saa poistaa ainoastaan omanvärisiä neliöitä ja aina pitää poistaa jotain (siis toisin kuin olen tätä ennen sanonut). Oikeastaan jälkimmäinen sääntö voisi koskea myös yksinpeliä, sillä eihän siinä ole mitään hyötyä olla poistamatta. Valituksia saa esittää huomiseen iltaan asti, mutta sen jälkeen nämä muutokset tulevat voimaan.

Oikeastaan mielestäni moninpelissä olisi hyvä, että tekoälyn olisi aina pakko poistaa kun on mahdollista (eli peli loppuisi vasta kun mahdollisia poistettavia ryhmiä ei ole kenelläkään osapuolella). Huomasin, että seuraavanlaisessa moninpelitilanteessa 1. pelaaja joutuu odottamaan aika kauan eikä ehkä koskaan saa tilaisuutta saada pisteitä. Tuleeko seuraavanlaisia pelejä olemaan, jossa jollain värillä ei olekaan ollenkaan poistettavaa ryhmää alussa? Ja miten silloin menetellään jos tulee?

6 5 5 1
1 2 1 3 1 2
4 3 5 5 4 3
4 5 4 4 4 5
5 2 2 3 3 5
4 3 5 3 4 2
1 3
1 5
1 7
1 8
1 7

Metabolix [14.06.2005 09:00:31]

#

Jtm: Jokainen kuitenkin pelaa kutakin väriä, joten tasapuolisuus säilyy.

Antti Laaksonen [14.06.2005 23:32:32]

#

Nyt sääntöihin tulee siis toivottavasti viimeiseksi jäävä muutos:

Tekoälyn täytyy aina poistaa kentältä neliöryhmä, ja moninpelissä tekoäly saa poistaa ainoastaan omanvärisiä neliöitä.

Kilpailuaikaa on jäljellä puolet, eli tekoälyn ohjelmointiin on vielä hyvin aikaa.

FooBat [15.06.2005 00:05:45]

#

Kuulostaa hyvältä.

Mutta vielä pieni tarkennus. Tarkoittaako tuo nyt sitä, että testiohjelma ei anna koskaan vuoroa tekoälylle, jolla ei ole pelissä mitään poistetavaa? Siis erityisesti kysymys koskee moninpeliä, jossa aina ei ole omanvärisiä poistettavia ryhmiä? (Näinhän sen pitäisi olla)

Antti Laaksonen [15.06.2005 00:20:01]

#

Kyllä. Jos moninpelissä tiettyä väriä ei voi poistaa, sitä väriä keräävä tekoäly jää pois pelistä siksi, kunnes väriä taas voi poistaa.

Jtm [15.06.2005 16:32:58]

#

Minulle jäi vielä hieman epäselväksi miten pisteet lasketaan. Eli yksinpelissä mitä vähemmän neliöitä jää loppuun, sitä enemmän tulee pisteitä ja mitä vähemmillä siirroilla sitä parempi? Moninpelissä sama juttu?

msdos464 [16.06.2005 00:55:10]

#

Otetaanko poistojen määrä huomioon vasta sitten jos tulee tasapisteitä lopullisissa tuloksissa?

Jtm [16.06.2005 01:43:22]

#

Saako vanha.dat tiedostoa availla? Sieltä saa kivaa tietoa ;). Tosin eihän tuota edes voi nähdä.

Jtm [16.06.2005 16:33:39]

#

Antti millon aiot julkaista testausohjelman, jossa toimii moninpeli?

Antti Laaksonen [16.06.2005 23:11:26]

#

Jtm kirjoitti:

Minulle jäi vielä hieman epäselväksi miten pisteet lasketaan.

Jokaisesta poistetusta omanvärisestä neliöstä saa pisteen.

msdos464 kirjoitti:

Otetaanko poistojen määrä huomioon vasta sitten jos tulee tasapisteitä lopullisissa tuloksissa?

Kyllä, ja tämä on melko epätodennäköinen tilanne.

Jtm kirjoitti:

Saako vanha.dat tiedostoa availla?

Tekoäly ei saa yrittää avata muita tiedostoja kuin oman lukutiedoston.

Jtm kirjoitti:

Antti millon aiot julkaista testausohjelman, jossa toimii moninpeli?

Mahdollisimman pian, heti kun ehdin tehdä sen loppuun. :)

T.M. [16.06.2005 23:12:28]

#

Voiko osallistua vain yksinpeliin? En jaksa koodata mitään moninpeliä, jos edes yksinpeliä jaksan.

Tää on muutenkin mennyt jo aika sähläykseksi kun kokoajan muutellaan sääntöjä... Ehdotin tuossa peliajan alussa erästä muutosta tuohon formaattiin, mutta ei, peli oli liian pitkällä kuulemma, ja nyt sitten muutellaan vähän väliä sääntöjä? Geez.

Antti Laaksonen [16.06.2005 23:31:48]

#

Yksinpelin saa helpoimmillaan muutettua moninpeliksi niin, että hyväksyy poistettavien yhdistelmien joukkoon ainoastaan omanväriset neliöryhmät.

Sääntöjä muutetaan ainoastaan poikkeustapauksessa, ja olen pahoillani tästä aiheutuneesta harmista. Mistään kiusanteosta tai muusta semmoisesta ei ole siis kysymys. Kuitenkin sääntöjen muutokset ovat olleet niin pieniä, että ne tuskin ovat kaataneet kenenkään projektia.

Metabolix [17.06.2005 00:30:03]

#

Kyllä, ne itse asiassa kaatoivat minun projektini. No, eipä tuolla niin väliä, olisi vain ollut kiva tietää, kuinka taktiikka olisi purrut moninpelissä. Mitään kovin hyvää yksinpeliälyä en olisi kuitenkaan jaksanut edes yrittää...

Jtm [17.06.2005 01:28:48]

#

Plaah Metabolix ei siihen kauaa mene tehdä uutta. Itse aloitin tekoälyn teon noin puoli viikkoa sitten. Suurin osa jo taitaa olla tehnyt jo koko tekoälynsä valmiiksi tähän mennessä. Eilen aloitin projektini melkein tyhjältä pöydältä kun huomasin, että vanha algoritmini oli järkyttävän huono ^^... uusin koko systeemini ja johan tekoälyni alkoi osaamaan :)

Muuten Antti, huomasin aika mitättömän bugin Väripelissäsi. Jos olet tallettanut keskeneräisen pelin editorissa ja kokeilet avata sen myöhemmin aloitustilanteena, huomaat varmasti laskureitesi arvoissa jotain mätää. Omassa keskeneräisessä 30x30 radassa peli väittää, että neliöitä on jäljellä 900 vaikka niitä on jotain 700 luokkaa ^^
Ei taida olla kovin automatisoitu laskuri :)
Myös ympyrädiagrammiin tulee ns. tyhjä siivu, joka näyttää tyhjien palikoiden määrän.

msdos464 [17.06.2005 12:27:12]

#

Mmmh... pitäisi saada oma javalla tehty äly testattua.. :P

Jtm [20.06.2005 00:02:07]

#

Kuolleelta näyttää keskustelu tai sitten ihmiset koodaavat tekoälyä todella innokkaasti ^^... Tässä moninpeliä odotellessa testausohjelmaan optimoin yksinpeliä mahdollisimman nopeaksi ja monipuoliseksi.

Antti Laaksonen [22.06.2005 17:06:08]

#

Nyt on vihdoin saatavilla alustava testiohjelma, jossa on myös moninpeli:
https://www.ohjelmointiputka.net/vps.zip

VilleP [23.06.2005 16:54:18]

#

Kilpailu alkaa lähestyä loppuaan, joten tässä välissä on hyvä tiivistää jännitystä pienellä epävirallisella kisailulla.

Tarkoituksena on siis keinolla millä hyvänsä etsiä laillinen siirtosarja, joka jättää mahdollisimman vähän ruutuja seuraavan linkin takaiseen (satunnaiseen) 30*30*8 aloitustilanteeseen:

http://mureakuha.com/paste/?e124341cdc34a68c7d556546b23a4aaa

(Toivottavasti linkki säilyy käyttökelpoisena riittävän pitkään)

Antti Laaksonen [23.06.2005 17:17:30]

#

Montako neliötä olet tähän mennessä itse onnistunut poistamaan? :)

Kopioin aloitustilanteen varmuuden vuoksi tänne:
https://www.ohjelmointiputka.net/villenhaaste.txt

VilleP [23.06.2005 17:49:47]

#

Antti Laaksonen kirjoitti:

Montako neliötä olet tähän mennessä itse onnistunut poistamaan? :)

Kopioin aloitustilanteen varmuuden vuoksi tänne:
https://www.ohjelmointiputka.net/villenhaaste.txt

Kiitoksia varmuuskopioinnista, nyt tiedosto ei ainakaan häviä itsestään.

Olen onnistunut poistamaan ko. kentästä 892 neliötä 900:sta, parantamisen varaa on siis vielä aina 8 neliön verran.

aloitteleva [24.06.2005 01:28:29]

#

En ole jaksanut lukea kaikkea mutta millä te teette tuota? Vai voiko sen tehä vain tietyillä ohjelmointi kielillä esim c++?
Jos voi tehdä c++ pitää minunkin alkaa miettimään tuota.

Zach [24.06.2005 13:32:01]

#

Kyllä tällaisen ongelman saa ratkaistua lähes millä tahansa kielellä, kunhan vain taitoa riittää; tärkeämpää kuin kieli on hyvän algoritmin kehittäminen. Itse olen aloittanut tekoälyni c++:lla, mutta en taida ehtiä saada sitä valmiiksi ajoissa.

msdos464 [26.06.2005 17:35:42]

#

Saas nähdä että ehtiikö tehdä älyä loppuun... olin viikon italiassa ja nyt oon lähössä mökille 28. pvä :P

Viime vuonna tehtiin matka samoihin aikoihin, ja jäihän siihen ristinolla tekoälyyn mojova bugi :D

Tuo villenhaaste.txt... ohjelmalla meni siirtoihin noin 5 sek, ja silti se jätti 52 kpl poistamatta. Eli tuskin osallistun :D

Jtm [26.06.2005 21:18:11]

#

VilleP sanoi:
"Parantamisen varaa on siis vielä aina 8 neliön verran."
> Aina ei ole mahdollista poistaa kaikkia neliöitä. Muuten kuinka kauan ohjelmasi käyttää aikaa vuoroon?

Msdos464 sinuna olisin onnellinen, että ohjelmasi osaa tuon verran... Minun ohjelmani jätti 95kpl poistamatta ^^
Noh ainakin porukka saa tasoitusta :P

msdos464 [26.06.2005 21:33:17]

#

Kun säädin että tekee poiston 2 sekunnissa niin jäi 74... liikaa parannettavaa suhteessa käytettävissä olevaan aikaan :/

VilleP [27.06.2005 13:21:29]

#

Jtm kirjoitti:

VilleP sanoi:
"Parantamisen varaa on siis vielä aina 8 neliön verran."
> Aina ei ole mahdollista poistaa kaikkia neliöitä. Muuten kuinka kauan ohjelmasi käyttää aikaa vuoroon?

Ohjelmani voi säätää käyttämään minkä verran aikaa tahansa, tuo 8/900-tulos laskettiin aikarajalla 1.8s/siirto (XP2000+). villenhaaste.txt:n sisältämä kenttä näyttäisi kuitenkin olevan "helpompi" kuin suurin osa satunnaisesti tuotetuista kentistä. Yleensä ohjelmani jättää vastaavankokoisilla kentillä huomattavasti enemmän neliöitä jäljelle, joten tämän perusteella ei kannata vielä luovuttaa, heh.

Tuossa muuten 8/900-tuloksen siirtosarja: http://mureakuha.com/paste/?3bb6369344cbeb690da27fb59b818c70

FooBat [27.06.2005 20:58:40]

#

Muutama edellinen testiajo haasteessa: 16, 29, 19, 56, 19. Keskimääräinen tulos 30x30x8 pelissä on kuitenkin 60-90 luokkaa, joten tämä haaste tuntuu olevan helpoimmasta päästä.

Toi algoritmit toimii hiukan satunnaisesti, koska se kattelee kelloa laskessaan.


Haaste tuli muuten ihan hyvään aikaan. Vielä muutama päivä sitten algoritmini jätti noin parisataa nappulaa 30x30x8 pelissä. Piti vähän miettiä asioita uudestaan.

Jtm [28.06.2005 00:22:20]

#

Antti, ohjelmassasi taitaa olla jonkinlainen bugi. Joskus pelin pyöriessä ohjelma pätkäisee ja usein tälloin aikaraja ylittyy vaikka tekoälyssä onkin aikalaskuri, joka varmistaa että aikarajan ylityksiä ei tule. Joskus jopa pienillä 10x10 radoilla ohjelmasi pätkii. Myös tälloin tulee aikarajan ylityksiä, vaikka tavallisesti 10x10 radassa vuoroon ei mene kuin jotain 0,02-0,03s aikaa.

Antti Laaksonen [29.06.2005 16:26:04]

#

Jos tämä ongelma esiintyy vielä testikoneella ja vika ei ole tekoälyssäsi, korjaan testiohjelmaa. Semmoista tilannetta ei tule, että testiohjelman virheen takia tekoäly saisi väärän arvioinnin.

msdos464 [29.06.2005 18:00:44]

#

"tavallisesti 10x10 radassa vuoroon ei mene kuin jotain 0,02-0,03s aikaa."

Eikö kannattaisi miettiä pidemmälle kun kerran ehtii? :P

Jtm [29.06.2005 18:36:19]

#

Usein jos tekoäly käyttää paljon aikaa miettimiseen, kyseessä saattaa olla purkkaviritys. Jos hommaa on optimoitu paljonkin, niin sillä pötkitään pitkälle ja säästetään aikaa.

Ns. purkkavirittömäksi tekoälyksi voi sanoa sellaista tekoälyä, joka osaa analysoida tilannetta, eikä pelaa jokaisella mahdollisella tavalla peliä läpi ja siten loppu tulosten perusteella valitse parasta vaihtoehtoa (toimii tämäkin, mutta älyksi ei tuota voi enää sanoa).

Miettikää miten ihminen valitsee parhaan ryhmän. Tarvitsee olla aika supermies jos pelaa pelin läpi mielessään miljoonia kertoja. Ei ole olemassa siirtoa, jota ei pystyisi laskennallisesti määrittelemään hyväksi (ilman ennustusta tietenkin). Mites se Kasparov osaa shakkia? Siinäpä vasta kysymys ;)... Siitä se tekoälyn kehitys lähtee :P

Chiman [30.06.2005 16:13:46]

#

Päätinpä jättää osallistumisen väliin tällä kertaa. Juhannuksen ja muiden kiireiden jälkeen ei oikein riittänyt aikaa ja innostusta toteuttaa tekoälyä loppuun asti, joten en viitsi lähettää raakiletta omalla nimelläni. Voittoon asti taitoni eivät kuitenkaan olisi riittäneet, joten sikäli ei jää edes jossiteltavaa :)

Onnea ja menestystä kaikille tasapuolisesti. Jään odottelemaan hyviä oivalluksia ja selkeitä lähdekoodeja.

msdos464 [30.06.2005 17:18:12]

#

"Ns. purkkavirittömäksi tekoälyksi voi sanoa sellaista tekoälyä, joka osaa analysoida tilannetta, eikä pelaa jokaisella mahdollisella tavalla peliä läpi ja siten loppu tulosten perusteella valitse parasta vaihtoehtoa (toimii tämäkin, mutta älyksi ei tuota voi enää sanoa)."

Vaikeaa tehdä tuollainen :D Toivottavasti joku julkistaa lähdekoodin purkkavirittömästä älystä...

Jtm [30.06.2005 17:49:49]

#

"Vaikeaa tehdä tuollainen :D Toivottavasti joku julkistaa lähdekoodin purkkavirittömästä älystä..."

Niimpä :).. Mä luovutan ja lähetän tän mun rupusen tekoälyn tonne ^^.. yksinpelin se hävii aika varmasti, mut moninpelistä en sitte tiiä.. en jaksa enää miettii miten tota vois parantaa.. saa nähä kuinka purkkaviritys oma tekoälyni on ^^

Jtm [30.06.2005 17:51:27]

#

Oikeestaan ihan C++ treenauksen takii osallistuin tähän kilpailuun :).. Aika paljon uutta on tullu opittua ;)

Juice [30.06.2005 19:22:38]

#

Argh, raakileeksi jäi minunkin tekoälyni. En viitsi sitä laittaa tänne. Rippileiri söi viikon arvokasta suunnitteluaikaa :P

Deewiant [30.06.2005 19:36:59]

#

Sama täällä... loppupeleissä ei vain jaksanut alkaa edes kehitellä mitään kunnon algoritmia, saati sitten koodata sellaista. Voisi tietty osallistua hassuilla ottaa-aina-isoimman-ryhmän-, ottaa-aina-pienimmän-ryhmän-, tai Hannu-Hanhi-tekoälyillä, mutta mitä turhia... eivät ne oikeasti pärjää millekään eikä niistä oppisikaan mitään, mitä ei fiksummista tekoälyistä.

Jos jotakuta kiinnostaa, voin kuitenkin pistää sorsat jonnekin. EDIT: lisättäköön, että koodi on aika purkkamaista.

Jtm [30.06.2005 19:57:30]

#

Noniin nyt on lähetetty. Toivottavasti tulee perille Antti :)
Come'n lähettäkää vaan.. voitte voittaa ainakin mut :D

Niko [30.06.2005 23:50:54]

#

Joo mäkin lähtin mun huonon "tekoälyn"

BlueByte [30.06.2005 23:59:53]

#

heh niin minäkin lähetin tommosen raakileen kun piti olla ylitöissä eikä ehtiny koodata loppuu :P

no ainaki oppi koodaamaa puurakenteen ens kertaa varten :)

Antti Laaksonen [01.07.2005 20:25:36]

#

Näillä näkymin kilpailuun osallistuu 13 tekoälyä. Aika monella taisi jäädä projekti kesken, mikä taas kertoo tehtävän haasteellisuudesta. Jos lähetit tekoälyn, mutta et ole saanut varmistusta, ota pikaisesti yhteyttä!

Testipelien tuloksia voi odottaa ensi viikon aikana.

VilleP [01.07.2005 22:39:12]

#

Heh, lähetin itsekin jo tekoälyni, mutta näin jälkeenpäin tarkastellen hieman väärän version. Ihan hyvin tuokin pelaa, kelvatkoon.

13 tekoälyä vaikuttaa ainakin viimevuotiseen osallistumismäärään verrattuna melko vähäiseltä. Hyvänä puolena sentään testiajojen pitäisi nyt viedä jonkin verran vähemmän aikaa.

Antti Laaksonen [01.07.2005 22:58:37]

#

Viime vuoden huikeat lukemat jäivät saavuttamatta, mutta 13 osallistujaa ei ole sekään vähän. Nyt mukaan voidaan ottaa laajempi testipeliaineisto.

BlueByte [08.07.2005 16:05:38]

#

kauan niissä tuloksissa kestää?

Antti Laaksonen [08.07.2005 16:12:26]

#

Suurin osa testipeleistä on pelattu, ja tulokset pyrin saamaan näkyviin viikonlopun aikana.

Niko [09.07.2005 16:54:08]

#

Jee

BlueByte [09.07.2005 22:35:53]

#

kauan vielä

Niko [10.07.2005 01:57:45]

#

21h 59min :P

Antti Laaksonen [10.07.2005 19:11:57]

#

Väripelikilpailun tulokset ovat nyt näkyvissä:
https://www.ohjelmointiputka.net/kilpa.php?tunnus=vaript

Kilpailun pelit pystyy katsomaan jälkeenpäin nettiselaimen kautta. Kaikki tekoälyt voi myös kopioida käännettynä sekä lähdekoodina. Kilpailusivuille tulee ehkä myöhemmin vielä lisää tilastoja.

Kiitokset kilpailun osallistujille!

Deewiant [10.07.2005 20:22:38]

#

ilepiravin ja iron sorsat näyttäisivät puuttuvan. EDIT: nevermind, tajuan jo miksi - binääri on sorsa.

ESKO pärjäsi yllättävän hyvin ottaen huomioon yksinkertaisen toimintaperiaatteensa. Ajattelin itsekin tehdä sen- tai ilepirav-tyyppisen tekoälyn, mutta kuvittelin että sellainen häviäisi kirkkaasti.

Onnea voittajalle ja ylipäätään kaikille tuloksiinsa tyytyväisille!

EDIT: testailin muuten omalla koneellani tekoälyjä, ja huvittavasti kaikki kolme parasta - python, pupilli, ogre - käyttivät yli kaksi sekuntia aikaa (käytin testikenttänä pupilli.alk-tiedostoa). Kertoo jotain optimoinnista :-)

FooBat [10.07.2005 21:45:40]

#

iro ja bingo ovat tuloksissa väärin päin.

Kärki oli yllättävänkin tasainen. Pythonin idea tuntuu varsin mielenkiintoiselta. Pitää varmaan tutkia vähän tarkemmin miten toi oikeasti voi toimia :)

Deewiant [10.07.2005 21:55:19]

#

Esittelysivulla ogren väitetään olevan C++:a lähdekoodiltaan, pitäisi olla ihan C:tä.

BTW, jos joku saa hyvän idean seuraavaa kilpailua varten, tehköön keskusteluketjun tälle alueelle - ajattelin ensin itse tehdä, kuten viimeksikin, mutten keksinyt mitään fiksua niin päätin jättää sikseen.

ajv [10.07.2005 21:59:54]

#

Onnea voittajalle. Mielenkiintoista luettavaa nuo kärkipään koodit. Harmittaa, ettei aika riittänyt osallistumiseen. Seuraavaan kilpailuun osallistun vaikka väkisin.

VilleP [10.07.2005 22:24:15]

#

Antti Laaksonen kirjoitti:

Kiitokset kilpailun osallistujille!

Ja samoin kiitokset järjestäj(i/ä)lle hyvin järjestetystä kilpailusta.

Mutta ainahan voi löytää valittamisen aihetta, eli tarjota rakentavaa kritiikkiä, heh. Satunnaiskenttien värimäärät olisi nimittäin kannattanut valita periaatteella (suurempi kenttä -> enemmän värejä), sillä kuten tulossivulla mainittiinkin, muutoin siirtoja eteenpäin laskevat ohjelmat saavat laskettua hyvinkin helposti optimaalisen tuloksen lähes joka kentällä.

FooBat kirjoitti:

Kärki oli yllättävänkin tasainen. Pythonin idea tuntuu varsin mielenkiintoiselta.

Tasaisuudesta pääsee eroon, kun tekoälyjä tarkastelee "vaativilla" kentillä. Esim. 30x30x8 satunnaiskentillä python-ohjelma jättää omalla koneellani keskimäärin n. 10 neliötä jäljelle, siinä missä sekalainen pupilli-viritykseni tyytyy lopettamaan toiminnan useimmiten jo n. 50 neliön kohdalla. Noh, ensi kerralla taas uudestaan.

BlueByte [10.07.2005 23:09:12]

#

Antti, milloin järjestetään ensi kilpailu? Ajanpuutteen takia meni tämä aivan plörinäks :(

Lisää tekoälykilpailuja.. nää on ollut tosi hauskoja :)

egaga [10.07.2005 23:25:26]

#

Kiitos tosiaan kisan järjestäjälle, seuraavaa odotetaan mielenkiinnolla. Olisi kiva ollut nähdä enemmänkin osanottajia, mutta 13 on oikein hyvä määrä sekin.
Villen huomio on tasaisuudesta aiheellinen, etukäteen pelkäsin, että ei testata kovin monella suurella 8-värisellä kentällä. Silti ehkä uhkarohkeasti testailin ohjelmaani vain 8-värisillä isoilla kentillä sekä tarkkuutta Villen 10x10-kentällä.
Ensi kerralla voisi myös pisteytys olla hiukan erilainen, nyt laaja ja värimäärältään hankala kenttä painottaa tuloksia paljon, koska erot tekoälyjen välillä ovat suuret (mikä nyt sattui tällä kertaa tasoittamaan laajojen kenttien puutetta). Parempi olisi ollut ehkä laskea kenttäkohtaiset sijoitukset yhteen käänteisesti (silloin tosin kenttien vaativuus taso olisi saanut olla korkeampi, että erot olisivat selkeämmät).
Miten olisi seuraavaksi jokin laskennallisesti hiukan "epätarkempi" oleva aihe. Esimerkiksi jokin robottitaistelu ammuksin (kenties myös joukkuekisa). Vai olisiko aihe liian aikaavievä, jolloin osallistumisia ei tulisi juuri.

FooBat [10.07.2005 23:31:05]

#

Fantti-tekoälyllä on yhteispiste sarakkeessa 1000 pistettä liian vähän. Sijaluku nousee paljon merkittyä korkeammalle.

VilleP kirjoitti:

Tasaisuudesta pääsee eroon, kun tekoälyjä tarkastelee "vaativilla" kentillä.

Tulin vasta nyt katsoneeksi tarkemmin testiaineistoa ja tuossahan se syy tasaisuuteen onkin. Testiaineistossa olevat satunnaiset pelit ovat tosiaan aivan liian helppoja vähänkin paremmille tekoälyille ja monissa osallistujien lähettämissä tuotoksissa ei paljon eroja pääse syntymään. Ihmettilinkin vähän miten oma tuotokseni ei jäänyt enempää kärjestä.

Kyllähän tuo python näyttäisi olevan aika ylivoimainen vaikeimmilla peleillä, vaikka vieläkin hiukan ihmettelen miten sen idea voi oikeasti toimia. (Siksipä en kisaa voittanutkaan :)

Niko [11.07.2005 11:13:23]

#

Jes! En ollut ihan viimeinen. Moninpelissä näköjään oli parempi vaikka en moninpeliä edes ehtiny säätämään :P

Antti Laaksonen [11.07.2005 16:41:24]

#

Ilmoitetut virheet tulossivuilla on korjattu.

Olette oikeassa siinä, että paremmin suunniteltu testiaineisto olisi voinut tuoda enemmän eroja esiin. Toisaalta nykyinen pistejärjestys antaa melko hyvän kuvan tekoälyjen taidosta myös suurimmalla ruudukolla kahdeksalla värillä. Lisäksi kärkinelikon ulkopuolisilla tekoälyillä oli riittämiin tekemistä helpommillakin ruudukoilla.

Joka tapauksessa ennen seuraavaa tämäntapaista kilpailua olisi hyvä suunnitella mahdollisimman pitkälle yhdessä sääntöjä ja testiaineistoa, jotta koko juttu ei jää minun vastuulleni. Nyt kun kilpailuja on jo muutama takanapäin, pahimmat sudenkuopat onnistutaan tosin varmaan välttämään tulevissa koitoksissa. Kuitenkaan heti perään uutta kilpailua ei aloiteta: muuten niistä menee maku.

FooBat [11.07.2005 19:42:21]

#

Jäi muuten Villen haasteessa vain 5 palikkaa, kun pelasin peliä omalla tekoälylläni (ogre) melko loppuun (noin 200 jäljellä) ja jauhoin loppua muutaman kerran python tekoälyllä.

Jtm [17.07.2005 22:01:00]

#

Ja taas kotona viikon mökillä olon jälkeen :)... Kappas tuli 5. sija :)

Muuten yksinpeli A osiossa ja colorado.alk radassa ainakin kotona oma tekoälyni (Fantti) sai 20 siirrolla poistettua 63 neliötä. Kokeilkaa muutkin toimiiko teillä? Itselläni on vanha rupunen AMD Athlon Thunderbird 1400MHz


Sivun alkuun

Vastaus

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

Tietoa sivustosta