Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Hippakilpailu

Sivun loppuun

Metabolix [12.12.2008 12:12:12]

#

Muutama sekunti sitten alkoi Ohjelmointiputkan historian kahdeksas kilpailu:
https://www.ohjelmointiputka.net/kilpa.php?tunnus=hippa

Tällä kertaa aiheessa on hieman urheilumieltä, nimittäin tehtävänä on ohjelmoida tekoäly hippaleikkiin. Tekoälyn pitää osata ohjata niin hippoja kuin pakenijoitakin: pakeneva tekoäly ryöstää hipalta yhden pisteen jokaisella siirrolla.

Kilpailu päättyy kuukauden kuluttua, tammikuun 12. päivän iltana kello 21.21., vaikka aiemminkin saa toki ilmoittautua. Kilpailusta voi kysellä ja keskustella tässä aiheessa. Tervetuloa mukaan!

User137 [12.12.2008 15:26:45]

#

Pitääpä yrittää osallistua tuohon.

Ensimmäisenä pistää silmään hippa.in rakenne jossa rivinvaihto on erotettu vain #13 merkillä. Notepad ei muotoa tue ja luulen että Delphi 7/pascal kieli ylipäätään tekee siihen #13#10 kun käytetään perinteistä writeln() tahi tekstiluokkaa. Onko molemmat muodot sallittuja tuomariohjelmalle vai pitääkö kikkailla oma tekstipötkö? :p

Ja toiseks, onko H alkuiset lueteltu aina ennen P alkusia per kierroksen tieto vai voiko ne olla sekaisin?
(edit2: tarkemmin ajateltuna, kyllä ne voivat olla sekaisin)

Grez [12.12.2008 15:32:39]

#

Luulen että Pascal tekee oletuksena niin vain Windows-ympäristössä.

Metabolix [12.12.2008 15:43:14]

#

User137 kirjoitti:

Ensimmäisenä pistää silmään hippa.in rakenne jossa rivinvaihto on erotettu vain #13 merkillä. Notepad ei muotoa tue ja luulen että Delphi 7/pascal kieli ylipäätään tekee siihen #13#10 kun käytetään perinteistä writeln() tahi tekstiluokkaa. Onko molemmat muodot sallittuja tuomariohjelmalle vai pitääkö kikkailla oma tekstipötkö? :p

Molemmat muodot sallitaan, ja Grez arvelee yllä aivan oikein. Esimerkkitiedostoon on tietenkin Linuxissa päätynyt UNIX-rivinvaihto (#10 itse asiassa).

Testaan kaikki lähetetyt ohjelmat myös nopeasti käsin, ja jos jokin tällainen pikkuseikka aiheuttaa ongelmia, voin tarvittaessa laittaa testiohjelman käyttämään Windowsin rivinvaihtoja.

User137 kirjoitti:

Ja toiseks, onko H alkuiset lueteltu aina ennen P alkusia per kierroksen tieto vai voiko ne olla sekaisin?

Voivat olla sekaisin. Pelaajien numerot määräytyvät tiedoston rivien mukaan, ja niitä ei pelin aikana muuteta. Näin voidaan tarvittaessa seurata jokaisen pelaajan liikettä erikseen, jolloin myös oman muistitiedoston käyttö tulee järkevämmäksi. Jos siis pelaaja 10 saadaan kiinni, muuttuu rivin 10 alun kirjaimeksi H, vaikka tätä ennen olisi monta P:tä.

vehkis91 [12.12.2008 16:19:59]

#

Juu voishan tota yrittää... :D

Gwaur [12.12.2008 16:33:08]

#

Säännöt kirjoitti:

Joka kierroksella saa pysyä paikallaan tai liikkua johonkin viereisistä ruuduista.

Onko viereinen ruutu vain sivu- tai pystysuunnassa viereinen vai myös kulmittain viereinen?

petrinm [12.12.2008 16:52:08]

#

Mahdolliset liikeet ovat +x, -x, +y, -y tai 0!

Metabolix [12.12.2008 16:55:53]

#

Gwaur kirjoitti:

Onko viereinen ruutu vain sivu- tai pystysuunnassa viereinen vai myös kulmittain viereinen?

Viereisiä ruutuja ovat vain ensin mainitsemasi. Tämähän tosiaan selviää myös liikekomennoista, joita ei ole kuin neljään suuntaan.

vehkis91 [12.12.2008 17:08:27]

#

Pitääkö se kilpailusofta kirjaa noista pelaajista, ettei ne mene sekaisin.

Siis niiden pelaajien id-numeroista?

Edit: typoja...

Metabolix [12.12.2008 17:12:45]

#

vehkis91 kirjoitti:

Pitääkö se kilpailusofta kirjaa noista pelaajista, ettei ne mene sekaisin.

Johan tässä äsken aiheesta kysyttiin, ja nyt säännöissäkin mainitaan, että ne pysyvät järjestyksessä. Ei siihen kovin kummoista kirjanpitoa tarvita. Kerro toki, jos ne voisivat mielestäsi mennä vielä jollakin muulla tavalla "sekaisin".

vehkis91 [12.12.2008 17:19:11]

#

Juu, sekosin vaan.. :D

Sisuaski [12.12.2008 17:34:43]

#

Miten käy tilanteessa, jossa hippa ja pakenija ovat aluksi vierekkäisissä ruuduissa ja sitten liikkuvat kumpikin toistensa suuntaan, eli kulkevat toistensa läpi?
En löytänyt säännöistä muuta kriteeriä kiinni jäämiselle kuin hipan kanssa samaan ruutuun joutuminen, joten jääkö tässä kohtaa pakenija siis vapaaksi?

Metabolix [12.12.2008 18:26:35]

#

Sisuaski kirjoitti:

Miten käy tilanteessa, jossa hippa ja pakenija — — kulkevat toistensa läpi? — — Jääkö tässä kohtaa pakenija siis vapaaksi?

Kyllä, säännöt on tältä osin laadittu kirjaimellisesti. Ratkaisu toisaalta yksinkertaistaa logiikkaa huomattavasti ja toisaalta myös simuloi hieman todellisen leikin täpäriä tilanteita. Ruudukkohan on kuitenkin aika kömpelö pelikenttä. Jokainen miettiköön sitten tykönään, millaisia tilanteita tämä sääntö voi aiheuttaa. ;)

Päärynämies [13.12.2008 12:58:42]

#

Kai tuohon voisi jonkinlaisen ohjelman koittaa väkertää. Katsoo nyt mitä saa aikaiseksi. Miksei muuten tuossa ladattavassa testiohjelmassa ole käytetyn ajan mittausta mukana? Nopeastihan siihen kyllä itsekin jonkinlaisen muokkaa.

teksturi [13.12.2008 16:20:01]

#

Pisti silmään
"Pakenevan tekoälyn pistemäärä on sen tekemien siirtojen summa, eli mitä pitempään ja mitä useammalla pelaajalla sen onnistuu paeta, sitä enemmän pisteitä kertyy."
Eli jos tekoäly pakenee, mutta se pysyy vain paikallaan kierroksella kertyykö tästä pisteitä vai luetaanko tätäkin sano tarkasti jolloin kannattaa pysyä koko ajan liikkeessä.

Metabolix [13.12.2008 16:26:22]

#

teksturi kirjoitti:

Eli jos tekoäly pakenee, mutta se pysyy vain paikallaan kierroksella kertyykö tästä pisteitä vai luetaanko tätäkin sano tarkasti jolloin kannattaa pysyä koko ajan liikkeessä.

Myös paikallaan pysyminen lasketaan siirroksi. Tästä onkin jo maininta sääntöjen tarkennuksissa:

lainaus:

Pakeneva tekoäly saa pisteitä myös niistä siirroista, joilla sen pelaajat pysyvät paikallaan tai jäävät kiinni. Ottelun kokonaispistemäärä saadaan siis laskemalla hippa.txt:n P-alkuiset rivit lopputilannetta edeltäviltä kierroksilta.

teksturi [13.12.2008 19:42:58]

#

Toinen kysymys liittyy aikaan. Jos ohjelma on ehtinyt kirjata liikkeensä liike.txt tiedostoon, mutta ohjelma ei ole lopettanut toimintaansa sekunttiin kuluessa niin häviääkö tällöin omatekoäly vai saako sekuntin käyttää aina loppuun ja ohjelma tapetaan sen jälkeen. Tämä olisi mielestäni mukavampaa jolloin ei tarvitsisi tutkia aikaa erikseen omalla ohjelmalla.

Metabolix [13.12.2008 20:50:17]

#

teksturi kirjoitti:

Toinen kysymys liittyy aikaan. Jos ohjelma on ehtinyt kirjata liikkeensä liike.txt tiedostoon, mutta ohjelma ei ole lopettanut toimintaansa sekunttiin kuluessa niin — —

Ajan loputtua ohjelma sammutetaan väkisin, ja liiketiedostosta luetaan ne rivit, jotka sinne on ajoissa kirjoitettu. Tässä kannattaa huomioida ohjelman tekemä puskurointi (kaikkea ei välttämättä kirjoiteta heti kirjoituskomennon jälkeen), eli jonkinlaista flush-funktiota kannattaa varmuuden vuoksi aina välillä kutsua.

tkok [14.12.2008 14:29:45]

#

Hei,

Kilpailun testiympäristössä oli python 2.6, kilpailuun osallistuessani haluaisin kuitenkin käyttää python 3.0 joka ei ole yhteensopiva 2.x kanssa. Onko mahdollista saada 3.0 lisätyksi?

Metabolix [14.12.2008 15:06:54]

#

tkok kirjoitti:

Onko mahdollista saada Python 3.0 lisätyksi?

Nyt sekin on asennettu. Onkin kiinnostavaa nähdä, kuinka nopeasti tuosta tulee "python" ja 2.6:sta "python2".

petrinm [14.12.2008 18:58:58]

#

lainaus:

8 ≤ K ≤ L ≤ 100

Onko korkeuden pakko olla leveyttä pienempi tai sama, vai pitäisikö ohjeessa lukea että 8 ≤ K, L ≤ 100? Tuntuu vähän tyhmältä säännöltä!

Metabolix [14.12.2008 19:08:15]

#

petrinm kirjoitti:

Onko korkeuden pakko olla leveyttä pienempi tai sama, vai pitäisikö ohjeessa lukea että 8 ≤ K, L ≤ 100?

Kyllä tässä sääntöjen mukaan toimitaan. Voit toki vapaasti tehdä ohjelmasi tukemaan myös isompia kokoja, ei se ketään haittaa.

petrinm kirjoitti:

Tuntuu vähän tyhmältä säännöltä!

Mitä koet tämän säännön vuoksi menettäväsi? Tällähän ei ole mitään merkitystä sen paremmin ohjelmoinnin kuin kilpailunkaan kannalta, koska vaikka korkeus olisi suurempi, siitä saisi pienemmän kääntämällä tilannetta 90 astetta.

Kuvaruudunkin leveys on yleensä korkeutta suurempi, joten näin muotoiltuja pelejä on parempi katsella. Ehdottamasi kirjoitusasu oli myös Antin mielestä tulkittavissa kierosti niin, että kyseessä olisi kaksi erillistä ehtoa.

pipo [14.12.2008 21:00:32]

#

Metabolix kirjoitti:

Jotta kilpailu olisi tasapuolisempi erilaisissa olosuhteissa menestyville tekoälyille, pyritään turnauksia pelaamaan ainakin kaksi. Lopullisiin tuloksiin eri turnausten pistemääriä painotetaan niin, että myös pienistä pelitilanteista saa kohtuullisesti pisteitä suhteessa isompiin.

Säännöt olivat hyvin yksiselitteiset, mutta koska kilpailussa menestytään pisteytyksen mukaan, mielestäni olisi kohtuullista vastata seuraaviin kysymyksiin.

Tarkoittaako "erilaiset olosuhteet" vain ja ainoastaan erikokoisia kenttiä (8x8 ... 100x100) sekä erilaisia hippojen ja pakenijoitten määriä?

Miten pieni pelitilanne eroaa isommasta pelitilanteesta? Hipan ja pakenijan välisen etäisyyden mukaanko?

FooBat [14.12.2008 21:21:55]

#

Kai jokaisessa pelissä vastakkaiset tekoäly pelaavat vuorollaa sekä hippaa, että pakenijaa samasta alkutilanteesta? Tällöin ainakin voidaan tarkasti ja tasapuolisesti saada selville kyseisten tekoälyjen paremmuus kyseisessä pelitilanteessa laskemalla omat hippa ja pakenijapisteet yhteen. Kyseisten pelien välillä kannattaa tietenkin muistit nollata, jotta toiseen peliin ei jompi kumpi teköäly saa etua.

Metabolix [14.12.2008 21:26:04]

#

pipo kirjoitti:

Tarkoittaako "erilaiset olosuhteet" vain ja ainoastaan erikokoisia kenttiä (8x8 ... 100x100) sekä erilaisia hippojen ja pakenijoitten määriä?

Kyllä, ja tietenkin alkuasetelmaa.

pipo kirjoitti:

Miten pieni pelitilanne eroaa isommasta pelitilanteesta? Hipan ja pakenijan välisen etäisyyden mukaanko?

Lähinnä teoreettisten maksimipisteiden ja keskimääräisten pisteiden mukaan. Nämä tietenkin riippuvat olennaisesti juuri mainitsemistasi asioista. Katsotaanpa muutamaa ääriesimerkkiä:

Tällaisia ongelmatilanteita siis pyritään tasaamaan. Esimerkit ovat toki liioiteltuja, ja tavoitteena olisi saada testitapauksista mielekkäitä eli sellaisia, että mahdollisimman suuri osa peleistä päättyisi hippojen "voittoon". Toisen päättymistavan onkin vain tarkoitus estää pelien venyminen liian pitkiksi tapauksissa, joissa pakenija on ylivoimainen. Aivan suurimmat pelaajamäärät ja kenttäkoot ovat mukana lähinnä siltä varalta, että tehtävä osoittautuu odotettua helpommaksi ja pienemmät arvot eivät tuota selkeitä tuloksia. On vaikea arvioida etukäteen, miten hyviä tekoälyjä kilpailuun osallistuu.

Varsinaisen turnauksen lisäksi saatan testata älyjen toimintaa muutamassa erikoisessa alkutilanteessa mielenkiintoisia tilastoja varten. :)

FooBat kirjoitti:

Kai jokaisessa pelissä vastakkaiset tekoäly pelaavat vuorollaa sekä hippaa, että pakenijaa samasta alkutilanteesta?

Kyllä, turnaus käydään perinteisellä kaavalla. Myös muisti nollataan aina.

jokaiselle valitulle alkutilanteelle T:
  jokaiselle hippaälylle H:
    jokaiselle pakenijaälylle P:
      nollaa muistit ja pelaa tilanne T hipalla H ja pakenijalla P

Jos loppupisteisiin jää paljon tasatilanteita, pelataan vielä lisää kierroksia jollakin pienehköllä alkutilanteella.

User137 [15.12.2008 16:43:08]

#

Tuo testiohjelma ei taida millään lailla käsitellä muisti.dat tiedostoa. (Esim nimetä tilapäisesti toiseksi) Siinähän menee meinaan sekaisin hipan ja pakenijan muistit.

Ratkaisumalleja ongelmaan on monia varmasti, en edes mainitse, ja samalla pitäis pitää huoli ettei vastustajan äly pääse sabotoimaan toista. Jollain pitäs kuitenkin testata. Graafinen olis kaikkein paras siihen että näkee asetelman itse. Toki sen voi jättää koodaajan ittensä vastuullekin :p

teksturi [15.12.2008 16:50:22]

#

Jokaisella älyllä tulee luultavasti olemaan omat kansiot jolloin muistit eivät voi mennä sekaisin. Jos menet muiden älyjen kansioihin sinut luultavasti tullaan diskaamaan.

Metabolix [15.12.2008 17:26:18]

#

User137 kirjoitti:

Tuo testiohjelma ei taida millään lailla käsitellä muisti.dat tiedostoa.

Ei niin. Siinähän ihan erikseen mainitaan, että se ei ole lopullinen testiohjelma eikä huolehdi tuosta.

Lopullisessa testijärjestelyssä älyt ovat omissa hakemistoissaan ja ne aina ottelun ajaksi kopioidaan RAM-levylle, jottei kovalevyä tarvitsisi turhaan rasittaa jatkuvalla kirjoittamisella ja lukemisella. Linuxissa on myös välineet estää älyä koskemasta muuhun kuin sallittuihin tiedostoihin ja sallitulla tavalla.

User137 kirjoitti:

Jollain pitäs kuitenkin testata. Graafinen olis kaikkein paras siihen että näkee asetelman itse. Toki sen voi jättää koodaajan ittensä vastuullekin :p

Tuolla testiohjelmalla onnistuu kyllä testaaminen. Voit vaikka antaa ajokomennoksi "hippa.bat" ja kirjoittaa sinne nuo vaihtoon tarvittavat komennot:

move muisti-H.dat muisti.dat
tekoaly
move muisti.dat muisti-H.dat

Toinen vaihtoehto on laittaa oma tekoäly testausvaiheessa käyttämään eri tiedostonimeä sen mukaan, onko se hippana vai pakenijana.

Ottelun kulkua voi katsella jälkikäteen paketissa olevalla JavaScript-sivulla. Toki tuohon valmiiseen testiohjelmaan voisi pienellä vaivalla lisätä vaikka ASCII-tulostuksen, katsotaan, jos tämä jossain vaiheessa ilmestyisi.

FooBat [15.12.2008 20:19:58]

#

Saattaisi muuten olla tulosten kannalta mielenkiintoisempaa, jos kaksi tekoälyä pelaisi useamman pelin keskenään ilman muistin nollausta. Tämä toisi tekoälyyn paremmin vastustajan pelitavan oppimisen mukaan. Yhdessä pelissä ei oppimisella ole paljon vaikutusta.
Tyyliin

  jokaiselle hippaälylle H:
    jokaiselle pakenijaälylle P:
      nollaa muistit
      jokaiselle valitulle alkutilanteelle T:
           pelaa tilanne T hipalla H ja pakenijalla P

vehkis91 [16.12.2008 16:16:37]

#

Jostain syystä tuo testaus softa ei toimi... :S Tulee vaan "Ohjelma on suorittanut..." Johtuiskohan vistasta?

Metabolix [16.12.2008 16:47:10]

#

FooBat kirjoitti:

Yhdessä pelissä ei oppimisella ole paljon vaikutusta.

Pelien määrällä ei pitäisi olla merkitystä vaan siirtojen, ja tällöinkin kyse on vain aiempien tilanteiden tuntemisesta, joten samaan tulokseen päästäisiin ilmankin muistitiedostoa antamalla käyttöön vanhat hippa.txt:t. Tietenkin jos pelattaisiin sama peli kymmenen kertaa peräkkäin, päästäisiin ehkä useammin samantapaisiin tilanteisiin. Voi toki olla, että minulta on jäänyt jotain huomaamatta asiassa, joten kuulisin mielelläni lisää perusteluja väitteelle.

Onneksi maailma ei kaadu tähän kilpailuun, vaan jos osallistujia riittää, vastaavanlaisia ideoita voidaan keksiä jatkossa lisää ja kehittää palautteen mukaan. :)

vehkis91 kirjoitti:

Jostain syystä tuo testaus softa ei toimi... :S Tulee vaan "Ohjelma on suorittanut..." Johtuiskohan vistasta?

On suorittanut mitä? Muistaakseni käytät C++:aa, joten voit vaikka yrittää kääntää ohjelman itse. Paketti on myös päivittynyt jo kertaalleen, joten varmista, että käytät uusinta versiota.

vehkis91 [16.12.2008 16:57:09]

#

Juu, latasin uusimman version niin toimii. :D

FooBat [16.12.2008 20:15:02]

#

Metabolix kirjoitti:

FooBat kirjoitti:

Yhdessä pelissä ei oppimisella ole paljon vaikutusta.

Pelien määrällä ei pitäisi olla merkitystä vaan siirtojen, ja tällöinkin kyse on vain aiempien tilanteiden tuntemisesta, joten samaan tulokseen päästäisiin ilmankin muistitiedostoa antamalla käyttöön vanhat hippa.txt:t. Tietenkin jos pelattaisiin sama peli kymmenen kertaa peräkkäin, päästäisiin ehkä useammin samantapaisiin tilanteisiin. Voi toki olla, että minulta on jäänyt jotain huomaamatta asiassa, joten kuulisin mielelläni lisää perusteluja väitteelle.

Oma ajatukseni vaan oli, että perus liikkuminen pelissä on melko yksinkertainen ongelma ja oppimisella on käytännössä merkitystä vain tilanteissa, joissa joudutaan tekemään 'kivi-paperi-sakset'-tyyppinen arvaus, eli pysytäänkö pakenijalla paikoillaan olettaen, että hippa myös pysyy paikoillaan (ja odottaa vahvistuksia) vai paetaanko hipan suuntaan olettaen hippa siirtyy pakenijan ruutuun. Tälläisiä tilanteita tulee yhdessä pelissä maksimissaan suunnilleen pakenijoiden määrä ja ensimmäinen tällainen arvaus voi ratkaista pelin. Tällaisessä tilanteessa edellisistä peleistä saatu tieto vastustajan pelityylistä (hyökkäävä, varmisteleva) voi merkittävästi muuttaa pistetulosta.

os [16.12.2008 22:34:05]

#

Päädyin vähän samanlaiseen järkeilyyn kuin FooBat. Vastustajan arvioimisella opitun perusteella voi olla pelissä aika keskeinen rooli. Toisaalta en itse pidä (etenkään takaa-ajajan) liikkumista mitenkään simppelinä ongelmana... :)

Co [16.12.2008 23:40:25]

#

Voinko ohjelmoida Fortranilla?

Saako gfortran nimisen kääntäjän asennettua testikoneelle?
http://gcc.gnu.org/wiki/GFortran

Metabolix [17.12.2008 13:03:39]

#

Co kirjoitti:

Voinko ohjelmoida Fortranilla?

Aina on kiva saada harvinaisempiakin kieliä mukaan. Lisäsin kielilistaan Fortranin ja Objective-C:n, molempia kääntää GCC 4.3.2. Asensin samalla vauhdilla myös Haskell-kääntäjän (GHC 6.8.2).

tesmu [20.12.2008 00:33:03]

#

Onko mahdollista, että asennat roadsendin ja käännät sille tarkoitetut php-tiedostot binääreiksi? ks. http://www.roadsend.com/home/index.php

Metabolix [20.12.2008 01:03:39]

#

tesmu kirjoitti:

Onko mahdollista, että asennat roadsendin ja käännät sille tarkoitetut php-tiedostot binääreiksi?

Kyllä se näköjään kääntyi ja käynnistyi. Ehkä se siis toimii.

tesmu [20.12.2008 11:33:54]

#

Olisiko mahdollista, että esim mini.txt:iin koordinaattien lisäksi kirjoitettaisiin samalle riville pelaajan ID (esim H1 H2 H3 tai H 1 H 2 jne jne) ?Helpottaisi parsimista huomattavasti kuin se, että jokainen on omalla rivillään ja ID tulee sen perusteella missä järjestyksessä ne on.

Metabolix [20.12.2008 12:53:30]

#

Ei formaattia tässä vaiheessa lähdetä muuttamaan, eikä tuollaista muutenkaan olisi järkeä lisätä. Mikä rivinumerossa on niin vaikeaa? Nehän vastaavat PHP:ssä suoraan esimerkiksi file-funktion palauttaman taulukon indeksejä tai rivi kerrallaan luettaessa silmukassa laskurin arvoa.

User137 [20.12.2008 13:06:25]

#

Olen tuossa itse yritellyt tehdä omaa testaajaa Delphillä, ainoana ongelmana vaan Runtime errorit kun tiedostoja availlaan samanaikaisesti. En huomannut eroja siihen vanhan ristinollakisan testaajaan mutta siinä tiedostoihin ei kirjoitettu kuin 1 rivi mikä oli paljon nopeampaa. Kuitenkin TImage:en 100x100 pikselin tulostaminen on hyvin helppoa.

Välillä looppaan tätä jotta lukuoikeutta yritän tarkistaa:

function FileExists2(FileName: string): Boolean;
var F: file;
begin
  {$I-}
  AssignFile(F, FileName);
  FileMode:=0;  // Set file access to read only
  Reset(F); CloseFile(F);
  {$I+}
  result:=(IOResult=0) and (fileexists(filename));
end;

Muoks: Toimii näköjään kun laitan pakotetun 100ms viiveen siitä kun liike.txt löytyy... kauheeta purkkaa.

Metabolix [20.12.2008 14:36:37]

#

User137 kirjoitti:

Muoks: Toimii näköjään kun laitan pakotetun 100ms viiveen siitä kun liike.txt löytyy... kauheeta purkkaa.

Purkkaa ohjelmassasi taitaa itse asiassa olla se, että ylipäänsä joudut tuollaiseen tilanteeseen. :) Äly pitää ajaa komennolla, joka ilmoittaa, kun on ohjelma lopettanut. Mitään ongelmia ei tällä tavalla pitäisi olla.

Ape [20.12.2008 21:06:40]

#

Lähetin juuri oman PHP:llä tehdyn bottini kisaan. Se on hyvin yksinkertainen, mutta kyllä se nyt jonkun voittaa (tai sitten ei :D).

Ohjelman suorituksessa menee omalla koneellani noin 0.01 sekuntia (mittasin timellä), joten ei tekoälyni ainakaan liikaa jää miettimään.

jo123 [22.12.2008 12:31:45]

#

Onko tässä tarkoituksena siis tehdä kaksi erillistä ohjelmaa hipalle ja pakenijalle?
Edit: Mitenköhän php-tiedoston testaus onnistuu?

petrinm [22.12.2008 12:42:16]

#

Yksi ohjelma joka sisältää kaksi tekoälyä. Ohjelman on pääteltä tiedostojen perusteella, onko sen toimittava hippana vai pakenijana.

Metabolix [22.12.2008 16:31:36]

#

jo123 kirjoitti:

Edit: Mitenköhän php-tiedoston testaus onnistuu?

Esimerkiksi antamalla testauskomennoksi php aly.php tai C:\ohjelmat\php5\php.exe aly.php tms. eli saman komennon, jolla muutenkin saisit php-skriptin ajettua komentorivillä.

Metabolix [24.12.2008 23:57:24]

#

Joulun iloksi tuli myös hippakilpailun testausohjelmasta uusi versio, joka hallinnoi muisti.dat-tiedostoja ja tulostaa pelitilanteen yksinkertaisena ASCII-grafiikkana. Lisäksi ohjelmalla voi pelata itse tekoälyään vastaan antamalla jommankumman älyn ajokomennoksi viivan (-).

vehkis91 [25.12.2008 14:52:19]

#

Tämä oli todella hyödyllinen lisäys, siis tuo että voi itse pelata tekoälyä vastaan!! :D:D KIITOS! :D:D:D

Edit: Ainakin huomasin, että toi mun äly on "niljakas".. :D:D

User137 [26.12.2008 14:49:31]

#

Niin ja ekaa vastausta lähetettäessä kauan sitten mailisysteemi palautti postin koska sisälsi exe:n. Onneksi sentään Delphikoodi käänty freepascalilla.

Olen tavannut sähköpostipalvelimia jotka hylkää exe:n takia vaikka se olisi zippitiedostossa jonka tiedostopääte on uudelleennimetty ja pakattu vielä toisen uudelleennimetyn zipin sisään...

Metabolix [26.12.2008 16:02:08]

#

User137 kirjoitti:

Niin ja ekaa vastausta lähetettäessä kauan sitten mailisysteemi palautti postin koska sisälsi exe:n.

Kiitos, että kerroit asiasta, en nimittäin ollut tästä tietoinen. Ongelma on nyt korjattu.

User137 kirjoitti:

Onneksi sentään Delphikoodi käänty freepascalilla.

Natiivi Linux-käännös saattaa myös toimia nopeammin kuin winellä ajettava Windows-ohjelma. Ei sillä, että tekoälylläsi olisi tämän suhteen mitään hätää. :)

Juhko [31.12.2008 21:57:55]

#

Se ei vissiin sitten haittaa, jos teen ohjelmani QuickBasicilla, kuten mainitsit kilpailusivulla, vai mitä? (Mun piti alunperin tehdä se Visual Basicilla mutta tuli eräs pikku ongelma vastaan.)

Päätin vain varmistaa..

Metabolix [01.01.2009 00:30:15]

#

Eihän se minua haittaa, mutta sinua saattaa haitatakin, kun DOSBox vastaa vain noin sadasosaa todellisista tehoista. :) Kannattaa ehkä kokeilla FreeBASICia, joka on pääpiirteittäin yhteensopiva QB:n kanssa ja jota voi sitten Linuxissakin kääntää.

Juhko [01.01.2009 00:34:39]

#

Kokeilin FreeBASICia, mutta se heitti erroria mm. DEFINT A-Z -käskystä ja aika monesta muustakin, niin että päätin sitten luopua siitä.

Metabolix [01.01.2009 01:07:46]

#

Juhko kirjoitti:

Kokeilin FreeBASICia, mutta se heitti erroria mm. DEFINT A-Z -käskystä

Et tainnut kokeilla erityistä QB-tilaa?
fbc koe.bas -lang qb

Juhko [01.01.2009 19:44:44]

#

Joo, nyt sain toimimaan. Kiitti.

Juhko [04.01.2009 17:12:39]

#

En kuitenkaan ole varma, toimiiko ohjelma lopullisessa testiohjelmassa. Se nimittäin tarkistaa hippa.txt -tiedoston 2. ensimmäiseltä riviltä, ohjaako se hippoja, pakenijoita, vai sekä että. Jommallakummalla rivillä täytyy siis lukea ohjelman nimi ("Jeppe") täsmälleen oikein. Eli käviskös jos lähetän käännetyn ohjelman sulle sähköpostiin ja katsotaan, että toimiiko?

Metabolix [05.01.2009 09:02:37]

#

Nimi lukee siinä muodossa, kuin sen ilmoittautumisviestissä ilmoitat. Jos ohjelma toimii omalla koneellasi oikeanlaisella tiedostolla, on hyvin erikoista, jos se ei toimi testitilanteessa. Ilmoittautumisen yhteydessä kyllä tarkistan myös ohjelman toimivuuden ja kerron siitä.

Kuinka ajattelit toimia, jos ohjaat molempia? O_o Et sinä niitä samalla kertaa voi ohjata kuitenkaan. Tällaisessa ottelussa luultavasti täytyy toisen tekoälyn nimi vaihtaa tiedostosta aina toisen siirron ajaksi.

Tässä vaiheessa voin jo melko varmasti sanoa, että tuo julkinen testausohjelma on myös kilpailussa käytössä suunnilleen nykymuodossaan.

Juhko [05.01.2009 13:51:00]

#

Siis: hippa.in -tiedostossa lukee "hipakkeen" ja "pinkon" tilalla kummassakin "Jeppe". Tämä lukee siis hippa.txt -tiedostossa kummallakin rivillä "Jeppe". Kun ajan testiohjelman, niin kirjoitan sekä hipaksi että pakenijaksi "Jeppe". Itse ohjelma tarkistaa kummallakin vuorolla hippa.txt -tiedostosta, lukeeko sen nimi 1. rivillä, 2. rivillä, vai molemmilla. Jos ohjelma siis ajetaan pakenijana, mutta hippa.txt-tiedoston 2. rivillä lukee "pinko", siirto jätetään tekemättä ja ohjelma lopetetaan, eli pakenijat pysyvät paikoillaan.

Minua arvellutti ainoastaan se, kun kerroit, että tekoälyt tulevat eri hakemistoihin. Halusin vain varmistuksen, että hippa.txt-tiedostot ovat sekä hipan, että pakenijan hakemistoissa samassa muodossa.

vehkis91 [05.01.2009 13:54:42]

#

Eiköhän ne samassa muodossa ole.

EDit: mini.txt taas on eri hipalla ja pakenijalla.

Metabolix [05.01.2009 15:04:06]

#

En kyllä ymmärtänyt selityksestäsi taaskaan mitään. Jospa vain tekisit ohjeiden mukaan, siellähän selvästi sanotaan, että 1. rivillä on hipan nimi ja 2. rivillä pakenijan. En ymmärrä, miten mitkään hakemistot tai muut vaikuttaisivat tähän. Et myöskään nyt oikein kertonut, tuosta mainitsemastasi tapauksesta, jossa älysi ohjaa "sekä että".

Juhko [05.01.2009 16:23:06]

#

En osaa selittää paremmin, enkä myöskään ymmärrä, miten muuten tuo pitäisi tehdä. Eikö nyt kävisi, että lähetän ohjelman ja lähdekoodin sähköpostiisi?

vehkis91 [05.01.2009 16:52:10]

#

Jos ohjelmasi nimi on Jeppe niin silloin siellä hippa.txt:ssä lukee Jeppe, eikä mitään muuta. Eikä se voi tossa kilpailussa pelata itseään vastaan, joten mitä oikeen sekoot?

Teuro [05.01.2009 17:18:30]

#

Kaveri halunnee testata omaa ohjelmaansa ilman, että joutuu itse pelaamaan ohjelmaansa vastaan. Helpoiten se onnistunee nimeämällä toisen hipaksi ja toisen pakenijaksi, jolloin testausohjelmalle ei tule nimien kanssa sekaannusta. Toivottavasti ymmäsrsin aloittajan ongelman oikein.

Juhko [05.01.2009 17:49:03]

#

Pitikö saman EXEn ohjata sekä hippoja, että pakenijoita, vai pitikö olla yksi ohjelma, joka ohjaa hippoja ja toinen, joka ohjaa pakenijoita?

vehkis91 [05.01.2009 17:57:01]

#

Sama exe ohjaa kumpaakin! Eli tarvitsee vain yhden ohjelman.

Juhko [05.01.2009 18:00:21]

#

Okei, sitten en ymmärrä mitä olen tehnyt väärin / olenko tehnyt väärin mitään. Ja Metabolix kertoo sitten, pistänkö mailia vai en..

vehkis91 [05.01.2009 18:07:58]

#

Jos sen älyn "tilan" tarkistaminen siitä hippa.txt:stä on noin vaikeeta, niin mikset vain tarkista mini.txt:n ensimmäisen rivin 1. Merkistä, että onko se softa hyökkäävä vai puollustava?

Juhko [05.01.2009 18:17:07]

#

Se toimii yhä edelleen ihan hyvin silleen kuin mä oon tehny sen. Halusin vain varmistaa, että se toimii lopullisessa testiohjelmassa.

Metabolix [05.01.2009 21:31:24]

#

Juhko kirjoitti:

Pitikö saman EXEn ohjata sekä hippoja

Kyllä, vain yksi ohjelma. Ja jos kerran käytät kieltä, jota voi kääntää Linuxillakin, niin yhtään EXEä ei onneksi tarvita, vaan lähettämäsi lähdekoodi käännetään suoraan Linux-ohjelmaksi.

Jos nyt kysymyksesi on se, mitä tapahtuu, jos molemmilla riveillä lukee "Jeppe", niin katsotaanpa nyt tarkemmin: Ensinnäkin säännöissä todetaan selvästi, että hippaäly menettää sen pistemäärän, jonka pakenijaäly saa. Tämän takia itseään vastaan pelaava äly saa ottelusta joka tapauksessa nolla pistettä riippumatta siitä, montako siirtoa se ehtii tehdä. Jos ohjelma kuitenkin haluaa pelaajiaan siirrellä, se voi aivan huoletta laskea joka kerta sekä hippojen että pakenijoiden liikkeet; testiohjelma jättää huomiotta rivit, joilla tekoäly yrittää ohjata vääriä pelaajia. Muuta hävittävää ei siis ole kuin ne ylimääräiset millisekunnit, jotka kuluvat "turhaan" laskentaan.

Mikäli älyjä pelautetaan itseään vastaan, niille voidaan tarvittaessa tehdä omat hippa.txt-tiedostot, joissa vastustajalla on valenimi.

Jos tekoälysi toimii annetulla testiohjelmalla, se toimii lopullisellakin, ja jos se ei toimi annetulla testiohjelmalla, se luultavasti ei toimi lopullisella. Toki voit lähettää postia kilpailuosoitteeseen, jos asiassa on yhä jotain epäselvää.

User137 [06.01.2009 12:13:40]

#

Minkäslaisia osallistujamäärämassoja tähän mennessä on lähettänyt ohjelmansa? :p Viikko aikaa.

Metabolix [06.01.2009 12:42:29]

#

User137 kirjoitti:

Minkäslaisia osallistujamäärämassoja tähän mennessä on lähettänyt ohjelmansa? :p Viikko aikaa.

Tähän mennessä kolme osallistujaa on lähettänyt tekoälynsä, ja lisäksi tein itse yksinkertaisen yritelmän. Toivon, että älyjä on vielä joitakin tulossa, mutta moni taitaa jättää ilmoittautumisensa viimeiseen päivään. Toisaalta aihekin on melko vaikea, jos aikoo hyvän tekoälyn saada. Tietenkin mukavinta olisi, että kaikki osallistuisivat, vaikka tuotos jäisikin kesken; osallistujia ei varmasti ole liikaa.

FooBat [06.01.2009 15:11:56]

#

Itsellänikin on ollut sen verran kiirettä, että on jäänyt tuon hipan tekeminen ajatuksen tasolle. Katsotaan olisiko tuossa viikonloppuna aikaa tehdä joku kevyt versio suunnitelmista ihan vaan osallistumisen nimissä.

Metabolix [06.01.2009 18:41:46]

#

Metabolix kirjoitti:

Mikäli älyjä pelautetaan itseään vastaan, niille voidaan tarvittaessa tehdä omat hippa.txt-tiedostot, joissa vastustajalla on valenimi.

Lisäsin nyt testausohjelmaan ominaisuuden tätä varten. Jos "Jeppe" nyt pelaa itseään vastaan, tiedostossa näkyy hipalle nimet "Jeppe" ja "Veppe" ja vastaavasti pakenijalle "Veppe" ja "Jeppe". Älyn oikea nimi lukee siis vain yhdellä rivillä kerrallaan, jottei tilanne ole tekoälylle epäselvä.

tkok [07.01.2009 01:05:40]

#

Metabolix kirjoitti:

User137 kirjoitti:

Minkäslaisia osallistujamäärämassoja tähän mennessä on lähettänyt ohjelmansa? :p Viikko aikaa.

Tähän mennessä kolme osallistujaa on lähettänyt tekoälynsä, ja lisäksi tein itse yksinkertaisen yritelmän. Toivon, että älyjä on vielä joitakin tulossa, mutta moni taitaa jättää ilmoittautumisensa viimeiseen päivään. Toisaalta aihekin on melko vaikea, jos aikoo hyvän tekoälyn saada. Tietenkin mukavinta olisi, että kaikki osallistuisivat, vaikka tuotos jäisikin kesken; osallistujia ei varmasti ole liikaa.

3 verrattuna niihin massoihin jotka kinusivat kilpailua aikanaan, mutta toki viime hetkenilmoittautujia toivonmukaan riittää.

vehkis91 [07.01.2009 12:07:18]

#

Itse lähetän älyni sitten, kun saan vielä viimeiset säädöt tehtyä siihen. Uskon, että osa osallistuvista lähettää vasta viimeisenä päivänä...

Juhko [07.01.2009 19:25:33]

#

Lähetin nyt ne tiedostot, mutta .exe-tiedostot piti muuttaa .muu -tiedostoksi, koska exen lähettäminen on "turvallisuusriski". Pistin myös varuilta mukaan JeppeIV-tiedostot, jotka käyttävät väärää tapaa ohjelman tyypin (hippa/pakenija) tarkistamiseen. Ok?

Metabolix [07.01.2009 21:24:50]

#

Juhko kirjoitti:

JeppeIV-tiedostot, jotka käyttävät väärää tapaa ohjelman tyypin (hippa/pakenija) tarkistamiseen.

Niin käyttävät, siis aivan harvinaisen väärää. Miksei se oikea tapa riittänyt? Ja binaareja ei tosiaan tarvitse turhaan lähetellä, jos sopiva kääntäjä on listalla.

vehkis91 kirjoitti:

Itse lähetän älyni sitten, kun saan vielä viimeiset säädöt tehtyä siihen.

Kannattaa kuitenkin lähettää ajoissa, ettei myöhästy tai tule muita ikäviä yllätyksiä. Ehtiihän sitä sitten viilailla.

vehkis91 [08.01.2009 17:23:35]

#

Nonni, nyt on äly lähetetty. :P

Juhko [10.01.2009 19:32:12]

#

Metabolix > Tulihan ne oikeet (Jeppe.muu ja -bas) tiedostot kuiteski perille?

Metabolix [10.01.2009 19:34:42]

#

Juhko kirjoitti:

Metabolix > Tulihan ne oikeet (Jeppe.muu ja -bas) tiedostot kuiteski perille?

Tulivat. Osaat ilmeisesti lähettää sähköpostia, joten mikset saman tien myös lue sitä? ;)

Sääntösivu kirjoitti:

Viestin saapumisesta lähetetään vahvistus muutaman päivän kuluessa.

Päärynämies [10.01.2009 19:42:12]

#

Pitäisiköhän tässä vielä jotain koittaa kisaan mukaan kehitellä. Mitään en oikeastaan vielä ole saanut aikaiseksi sitä varten. Innostus koko ohjelmointitouhua kohtaan on taas ollut hyvin kateissa. Jospa silti jonkunmoisen räpellyksen vielä yrittäisi saada kasaan.

Metabolix [12.01.2009 03:35:18]

#

Tänään on viimeinen kilpailupäivä, joten nyt on oiva hetki kirjoitella oma tekoäly valmiiksi ja lähettää se kilpailuosoitteeseen ennen kilpailuajan päättymistä eli viimeistään kello 21.21. Jokainen osallistuja on tervetullut kilpailuun!

vehkis91 [12.01.2009 18:06:17]

#

Onkohan tullut lisää älyjä kilpailuun? :O

JrPr [12.01.2009 18:24:35]

#

vehkis91 kirjoitti:

Onkohan tullut lisää älyjä kilpailuun? :O

Minä ainakin myönnän lähettäneeni omani tänään.

vehkis91 [12.01.2009 18:26:48]

#

Juu, Metabolix sano äsken, et ois about 13 älyä tällähetkellä.

Edit:Määrä muuttui.
Edit2:Määrä muuttui.

Seriffi [12.01.2009 19:34:02]

#

Tekoäly lähetetty. Saa nähdä miten pärjää :)

Metabolix [12.01.2009 21:29:38]

#

Hippakilpailu on nyt päättynyt, ja seuraavaksi on virallisen turnauksen vuoro. Kilpailuun osallistui kaikkiaan 15 tekoälyä. Jos lähetit tekoälyn mutta se puuttuu seuraavasta listasta, ota yhteyttä mitä pikimmin! Perille tulleet tekoälyt ovat hihPah, hipake, Hipi1, Hippa2000, HIPPAI, HippaZizzo, Jeppe, jpa, Luster, meek, MonkeyBot, plussa, tunkki, u137 ja VehkAly.

vehkis91 [12.01.2009 21:31:58]

#

:D

Nyt vaan venaan tuloksia... :P

Tommittaja [12.01.2009 21:48:52]

#

testataanko noi siis miten noi tekoälyt? kun en oikein tajua, miten niitä kaikkia voi suorittaa keskenään samaan aikaan??

Edit: tarkoitan siis, että kun yhden älyn suorittaa, sehän vain liikkuu yksinään, niin miten ne kaikki menevät samassa suorituksessa?

Metabolix [12.01.2009 21:58:43]

#

Tommittaja kirjoitti:

testataanko noi siis miten noi tekoälyt?

Ohjelma testaa ne, ja aamulla tarkistan, onko sattunut virheitä.

Tilanne ei ole sen ihmeellisempi kuin lautapeli, jossa jokainen pelaaja saa vuorollaan heittää noppaa ja siirtää nappulaansa.

Tekoälyt toimivat selkeiden sääntöjen mukaan: ne käynnistyvät, lukevat tiedostonsa, laskevat, kirjoittavat päätöksensä ja sammuvat. Ei liene tarpeen mennä turnausohjelman yksityiskohtiin, mutta pääpiirteittäin se kuitenkin toimii kuin ihminen, joka käynnistelee vuorotellen tekoälyjä, katsoo, mitä siirtoja ne ovat tehneet, ja ottelun päätyttyä vaihtaa aina uuden alkutilanteen ja uudet tekoälyt. Vaikka ajatus onkin yksinkertainen, toimivan turnausohjelman tekeminen vei huomattavasti enemmän aikaa kuin oman hippatekoälyn ohjelmointi.

Tommittaja [12.01.2009 22:00:41]

#

aijaa ne lukee vai ohjelmaa suorittaessa samasta tiedostosta sitä tietoa?

vehkis91 [13.01.2009 15:01:57]

#

Öö, tarkoitatko niitä älyjä vai? Vai sitä softaa mikä ajaa niitä älyjä?

User137 [13.01.2009 16:03:37]

#

Vähän liian myöhästä kysellä kilpailun jälkeen kuinka ohjelma toimii. Säännöt oli pitkät mutta varsin selkeät:
https://www.ohjelmointiputka.net/kilpa.php?tunnus=hippa

"Ohjelma käynnistetään uudestaan jokaista siirtoa varten, ja sillä on joka kerta käytössään yksi sekunti prosessoriaikaa (ks. testiympäristö) ja enintään gigatavu muistia. Se saa lukea tiedostoja hippa.txt ja mini.txt ja kirjoittaa tiedostoon liike.txt."......

Tommittaja [13.01.2009 19:59:23]

#

millonkas noi hippakilpailun tulokset saadaan tietoon?

Metabolix [13.01.2009 22:55:32]

#

Hippakilpailun tulokset on julkistettu.

Voittajaksi selviytyi Otto Seiskari tekoälyllään tunkki. Onnea voittajalle ja kiitokset kaikille osallistujille!

Antti Laaksonen [13.01.2009 23:02:31]

#

Ja erityiskiitos kuuluu Laurille, joka vastasi kaikista kilpailun järjestelyistä!

Juhko [14.01.2009 10:01:23]

#

Ohhoh, enpä olisi arvannut Jeppeni pärjäävän noinkin hyvin! :P

vehkis91 [14.01.2009 12:29:07]

#

Onnea voittajalle!! :D

petrinm [14.01.2009 16:39:19]

#

Itse en osallistunut kilpailuun, koska kiinnostus älyn loppuun saattamisesta lopahti (ja tämä tympii). Haluaisin kuitenkin tuoda esille tavan, jolla toteutin älyäni, koska se eroaa kaikista muiden käyttämistä tavoista hyvinkin paljon.
Tavoitteeni oli tehdä tekoäly, joka käyttää neuroniverkkoa eli oppivaa matemaattista verkkoa, joka toimii lähes samalla logiikalla kuin ihmisaivot; satoja neuroneja(hermosoluja) kiinnittynyt tosiinsa synapseilla jne. Neuronit ovat jaettuna normaaleihin neuroneihin sekä syöte- ja tuloneuroneihin ja näiden välillä suoritetaan normaalia kertolaskua kunnes saadaan jokin tulos tuloneuroneihin. Sitten verkkoa opetetaan kertomalla sille kuinka sen tulisi käyttäytyä tietyissä tilanteissa ja toistojen jälkeen se oppii käyttäytymään oikein. En jaksa selittää nyt tästä enempää, joten lukekaa lisää googlesta, jos alkoi kiinnostaa.
Syötteenä toimi 4 lähimmän kaverin ja vastustajan sijainnin suhde sillä hetkellä käsiteltävään pelaajaan, sekä pelaajan etäisyys alueen seiniin. Tulosteena saatiin x ja y koordinaatein liikkuminen, joka sitten tulkittiin ja palautettiin. Älyn oli tarkoitus sisältää valmiiksi esiopetetut aivot sekä hipalle että pakenijalle, jotka ladattaisiin ensimmäisellä kerralla ja tallennettaisiin muisti.dat -tiedostoon. Seuraaville kerroilla äly lukisi aina muisti.dat-tiedostosta käytettävät aivot. Tämä siksi, että äly sisälsi myös joitain itseopetus algoritmeja, jotka mahdollistivat itseoppimisen pelin aikana. Algoritmeja oli mm. algoritmi, joka tarkkaili olisiko ollut mahdollista estää edellisellä kierroksella jokin menetys tai saada joku pakenija kiinni tekemällä toisin.
Älyä varten tein myös harjoitusohjelman, jonka avulla peliä pystyi seuraamaan graafisesti ja älyä pystyi myös opettamaan manuaalisesti.
Onnistuin tekemään toimivan koko pohjan tälle systeemille, mutta, kun sitä piti alkaa opettamaan, kiinnostus loppui.

Kirjoitin tämän viestin myös sen takia, että haluaisin että muisti.dat tiedosto mahdollisuus säilytettäisiin tulevaisuudessa juuri tämän tapaisten älyjen mahdollistamiseksi.

Metabolix [14.01.2009 17:39:38]

#

petrinm kirjoitti:

Tavoitteeni oli tehdä tekoäly, joka käyttää neuroniverkkoa — —

Suunnittelin tällaista tätä itsekin, mutta kilpailun järjestäminen ja muut asiat (työt ja loma) veivät niin paljon aikaa, etten jaksanut ruveta kehittämään aivoja.

petrinm kirjoitti:

Kirjoitin tämän viestin myös sen takia, että haluaisin että muisti.dat tiedosto mahdollisuus säilytettäisiin tulevaisuudessa juuri tämän tapaisten älyjen mahdollistamiseksi.

Kokeilun perusteella muistitiedostot kyllä pysyvät jatkossakin. Seuraavalla kerralla voisi sallia myös valmiiksi luodut muistitiedostot, jotka kopioidaan aina pelin alussa paikalleen. Kuvaamasi neuroverkkoälykin saisi siis ottaa omat aivot mukaan kilpailuun. ;) Voi olla, että jossain kilpailussa tekoäly saakin olla käynnissä ottelun alusta loppuun, jolloin erillistä muistitiedostoakaan ei tarvita.

Kaikki palaute kilpailun järjestelyistä on erittäin tervetullutta, jotta tulevista kilpailuista saadaan entistä parempia.

os [14.01.2009 18:23:12]

#

Oli kyllä hauska, että tällainen kilpailu jaksettiin taas järjestää, pointsit Metabolixille.

Mielestäni kilpailu poikkesi edellisistä merkittävimmin siten, että onglema jätti todella paljon liikkumavaraa ja mahdollisuuksia erilaisille toteutuksille. Tämä on sinänsä kyllä hauskaa, mutta ratkaisujen analysointi muuttuu todella vaikeaksi ja kisassa vaaditaan käytännössä aika paljon hyvää tuuria. Oma pakenijaälyni perustui aivan samaan metapallo/potentiaalikenttäideaan kuin usealla muullakin, mutta ilmeisesti maagiset vakiot osuivat paremmin kohdalleen.

Esimerkiksi väripelissä oli mielestäni aika selvää, millaisesta joukosta ratkaisua lähdetään etsimään ja simppelin, mutta kuitenkin jollain tapaa toimivan ratkaisun löytäminen oli todella helppoa. Tässä kisassa taas edes yhtään pätevän hipan koodaaminen ei ollut ihan niin simppeli ongelma. Myös hippapelin epäsymmetrinen luonne oli vähän kaksipiippuinen juttu. Turnauksen kannalta on tietty loogista, että molemmat tekoälyt piti tehdä, mutta hommaa on enemmän ja ainakin itselläni hippa ja pakenija toimivat täysin eri tavalla, joten hippana ja pakenija pelaaminen voisivat periaatteessa olla kaksi erillistä kilpailua.

Grez [14.01.2009 18:33:13]

#

Metabolix kirjoitti:

Seuraavalla kerralla voisi sallia myös valmiiksi luodut muistitiedostot, jotka kopioidaan aina pelin alussa paikalleen. Kuvaamasi neuroverkkoälykin saisi siis ottaa omat aivot mukaan kilpailuun. ;)

No eikö se nykyiselläänkin olisi onnistunut jos olisi vaan änkenyt valmiiksi opetetut aivot lähdekoodin oheen kääntymään osaksi ohjelmaa.

User137 [14.01.2009 22:49:39]

#

Erityisen mielenkiintosia pelejä tuli omalla testiohjelmalla kun laittoi 100x100 kartalla 1 hippa ja 99 pakenijaa. Sitä varten piti jo laittaa valinta hippa.txt kirjoittamisen lopettamiseen kun halusi ihan vain huvikseen pelata ne tuhannet kierrokset joita kiinniottoon meni, meni liian isoksi muuten se tiedosto. Mutta silti graafinen simulaattori saa massojen liikkeestä aika hupaisaa.

Metabolix [14.01.2009 23:13:53]

#

os kirjoitti:

Mielestäni kilpailu poikkesi edellisistä merkittävimmin siten, että onglema jätti todella paljon liikkumavaraa ja mahdollisuuksia erilaisille toteutuksille.

Jätän tarkkaa analysointia kaipaavat tehtävät ilomielin Datatähden tapaisiin kilpailuihin ja pyrin myös jatkossa näihin vapaamuotoisempiin tehtävänantoihin. Yhtä laaja kirjo toteutuksia oli varmasti ristinollakilpailussakin muinoin. Mielestäni näiden kilpailujen ensisijainen tarkoitus on motivoida monta ihmistä ohjelmoimaan ja ehkä opettaa jollekulle vielä jälkikäteen, millaisia konsteja tekoälyissä voi käyttää.

os kirjoitti:

Tässä kisassa taas edes yhtään pätevän hipan koodaaminen ei ollut ihan niin simppeli ongelma.

Eipä tosiaan. Yhtään erityisen "taitavaa" hippaa ei näkynyt. Jälkeen päin rupesin miettimään, olisiko ollut hyvä ratkaisu koota kaikki hipat yhdeksi rintamaksi ja ajaa pakenijoita järjestelmällisesti kulmaan. Tämäkään ei toki olisi ollut taitava tekniikka vaan vain toisenlainen "brute force".

os kirjoitti:

Turnauksen kannalta on tietty loogista, että molemmat tekoälyt piti tehdä, mutta hommaa on enemmän ja ainakin itselläni hippa ja pakenija toimivat täysin eri tavalla, joten hippana ja pakenija pelaaminen voisivat periaatteessa olla kaksi erillistä kilpailua.

Aivan totta, vaikkakin omassa älyssäni valtaosa koodista tuli käytettyä kahteen kertaan. Kunnollista kilpailua ei silti tahdo saada aikaan ilman vastustajaa, ja yksittäinen testivastustaja taas lisäisi sattuman osuutta kilpailussa (ja estäisi samalla järjestäjän oman osallistumisen).

Grez kirjoitti:

— — jos olisi vaan änkenyt valmiiksi opetetut aivot lähdekoodin oheen kääntymään osaksi ohjelmaa.

Kaikkea voi tehdä, mutta silti on aika rumaa tunkea satoja kilotavuja binaaridataa tekstimuodossa koodin sekaan.

User137 kirjoitti:

Erityisen mielenkiintosia pelejä tuli omalla testiohjelmalla kun laittoi 100x100 kartalla 1 hippa ja 99 pakenijaa.

Sellaisessa ottelussa ei vain ole mitään järkeä, koska yksi hippa ei voi koskaan saada järkevää pakenijaa kiinni: 2x2-ruudukossa H ja P voivat olla kulmittain, jolloin pakenija voi pysyä paikallaan, tai vierekkäin, jolloin pakenijan pitää liikkua siihen ruutuun, joka on hipasta katsoen kulmittain. Useamman hipan tapauksia en jaksanut tarkemmin pohtia, mutta intuitio sanoi, että kolmella saisi parhaankin pakenijan tilastollisesti lopulta kiinni, joten tein testitapaukset sen mukaan. :)

os [15.01.2009 00:57:51]

#

Metabolix kirjoitti:

User137 kirjoitti:

Erityisen mielenkiintosia pelejä tuli omalla testiohjelmalla kun laittoi 100x100 kartalla 1 hippa ja 99 pakenijaa.

Sellaisessa ottelussa ei vain ole mitään järkeä, koska yksi hippa ei voi koskaan saada järkevää pakenijaa kiinni: 2x2-ruudukossa H ja P voivat olla kulmittain, jolloin pakenija voi pysyä paikallaan, tai vierekkäin, jolloin pakenijan pitää liikkua siihen ruutuun, joka on hipasta katsoen kulmittain. Useamman hipan tapauksia en jaksanut tarkemmin pohtia, mutta intuitio sanoi, että kolmella saisi parhaankin pakenijan tilastollisesti lopulta kiinni, joten tein testitapaukset sen mukaan. :)

Itse päättelin, että kaksi hippaa riittää tilastollisesti. Kolmelle hipalle voisi laskea jo absoluuttisen ylärajan siirtomäärästä, joka kuluu ahdistettaessa yksi pakenija nurkkaan. Neljällä hipalla voi taas saada pakenijan kiinni varmasti pelkän seinän avulla ja viidellä hipalla keskellä kenttää. Tällaisia laskelmia voisi taas tehdä lisää useaa pakenijaa yhtäaikaa jahtaaville ryhmille. Aluksi tarkoitukseni oli toteuttaa hippa juuri kovakoodaamalla valmiiksi itse mietityt toimintaohjeet muutamalle erikokoiselle "kaappariryhmälle". Ongelmaksi olisi tällöin jäänyt vain hippojen ja pakenijoiden jakaminen tällaisiin ryhmiin optimaalisella tavalla. Jokaiselle ryhmälle voidaan laskea arvioita siitä, kuinka kauan kohteen kiinniottaminen kestää ja tämän jälkeen voidaan arvioida loppupelin kestoa vaikka vain hippojen ja pakenijoiden määrien avulla. Näin hippojen strategiasta olisi saatu algoritmiselta kannalta huomattavasti helpommin määritelty ongelma.

Lopullinen älyni perustui tällaisten ryhmien muodostuksen "automatisointiin" sillä idealla, että jokainen hippa pystyy varmasti pitämään mielivaltaisen pakenijan yhden pysty- tai vaakasuoran linjan samalla puolella. Jos samaa pakenijaa uhkaa useampi hippa eri linjoilta, pystyy joku hipoista tietyssä vaiheessa siirtämään linjaansa lähemmäksi pakenijaa, jolloin pakenija joutuu lopulta seinän tai hippojen välittömään läheisyyteen. Dedikoidusti tiettyä pakenijaa jahtaavan hipan mahdollisia järkeviä siirtoja voi muutenkin helposti rajoittaa pelkästään kohteen ja jahtaajan koordinaattierojen mukaan, jolloin jäljelle jäävien koko ryhmän siirtoyhdistelmien (ainakin yhden siirron päähän) läpikäynti alkaa olla mahdollista.

Tässä kisassa korostui myös aika lailla tuo monen pakenijan kontrolloiminen isolla massalla hippoja, mikä taas on vähän erilainen ongelma ja jäi omassakin toteutuksessani muutaman muun asian tavoin näin jälkeenpäin mietittynä vähän turhan vähälle huomiolle.

tkok [15.01.2009 09:41:56]

#

petrinm kirjoitti:

- - käyttäytymään oikein. En jaksa selittää nyt tästä enempää, joten lukekaa lisää googlesta, jos alkoi kiinnostaa.

Löytyykö aiheesta esimerkkejä suomenkielellä?

Päärynämies [15.01.2009 22:30:06]

#

Kiitokset Metabolixille kisan järjestämisestä minunkin puolestani, vaikka en kisaan lopulta osallistunutkaan. Hienoa, että joku jaksaa järjestää.

Tuli mieleen ajatus liittyen näihin kilpailuihin, joten heitämpä sen tässä ilmaan, kun sivuaa aihetta. Mietin, että olisiko ideaa jossain kilpailussa järjestää jopa useampi kierros, jos vaan kilpailun luonteeseen sopisi. Tällöin tämänkin kaltaisessa kilpailussa saisi tietoa siitä, miten oma tuotos toimii ja sitä voisi vielä koittaa parantaa välikierrosten tuloksien perusteella. Ensimmäisen kierroksen jälkeen (jos olisi kaksi kierrosta) olisi sitten vain esim. viikko aikaa ennen lopullista kierrosta. En tiedä onko tuollaista ollut, toimisiko tuo tai olisiko siinä edes järkeä. Kunhan vain tuli mieleen.

vehkis91 [16.01.2009 11:37:03]

#

Tuohan on ihan hyvä idea. :D

Chiman [16.01.2009 12:19:06]

#

Mukava tosiaan nähdä, että mielenkiintoisia kilpailuja järjestetään. Kiitos Metabolixille ja onnittelut voittajalle. Aikeissa oli osallistua, mutta muut kiireet veivät liikaa aikaa ja energiaa.

Sen verran olin miettinyt, että olisin käyttänyt kahta hippaa per pakenija. Kumpikin olisi pyrkinyt pakenijan viereen x- ja y-suunnissa mutteivät olisi heti pyrkineet samaan ruutuun, jottei pakenija pääse pitkälle karkumatkalle juoksemalla läpi. Todennäköisemmin pakenija etenee poispäin, joten seuraavalla vuorolla taas pyrittäisiin noihin viereisiin ruutuihin. Hippa yrittäisi siirtyä samaan ruutuun paikoillaan pysyvän pakenijan kanssa hetken odottelun jälkeen. Odotteluaika pienenisi muistitiedoston avulla, jos huomattaisiin etteivät pakenijat yrittäisi juosta hipasta läpi (esim. ollessaan nurkassa).

Pakenijatekoälyssä olisin käyttänyt hajaantumista ja myöhemmin läpijuoksun yrittämistä ollessani umpikujassa. Siinäkin muistitiedosto olisi ollut apuna läpijuoksun ajoittamisessa ja suunnan valinnassa.


Sivun alkuun

Vastaus

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

Tietoa sivustosta