Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Viivapelikilpailu alkaa!

Sivun loppuun

Metabolix [13.03.2010 07:00:00]

#

Ohjelmointiputkassa alkaa taas tänään uusi tekoälykilpailu. Aiheena on peli, joka tunnetaan ainakin viivapelinä, ansapelinä ja törmäyspelinä. Pelissä on kaksi pelaajaa, joista kumpikin ohjaa viivan piirtoa ruudukossa. Joka kierroksella kumpaakin viivaa jatketaan ruutu johonkin suuntaan, ja pelin häviää se, jonka viiva ensiksi törmää jo käytettyyn ruutuun. Paperilla peliä voi parhaiten pelata vuorotellen ristinollan tapaan, mutta tässä kilpailussa pelataan reaaliaikaista versiota: viivat kasvavat tasaisella nopeudella riippumatta siitä, ohjaavatko tekoälyt niitä vai eivät.

Peliä voi kokeilla testausohjelmalla (vaatii Javan), ja jotta osallistuminen olisi helpompaa, tarjolla on eri kielillä yksinkertaisia esimerkkiälyjä, joita saa vapaasti käyttää oman tekoälyn pohjana.

Kilpailu päättyy lauantaina 17.4. tasan kello 5 aamulla, mutta aiemminkin saa ilmoittautua. Tervetuloa mukaan!

ZcMander [13.03.2010 10:03:04]

#

Testausohjelma ei toimi, jos polussa on väli, ja Python-ohjelmia ei voi ainakaan suoraan testata. (jotain kiertotietä tähä, esim. cx_Freeze voisis toimia)

Chiman [13.03.2010 10:15:10]

#

.bat tai .sh-skripti hoitaa homman.

Jokotai [13.03.2010 11:19:46]

#

Mielenkiintoinen.

User137 [13.03.2010 12:19:11]

#

Oletusarvoilla 2:lla ihmispelaajalla testausohjelma jää mulla jumiin ekan erän loppuun. Toinen erä ei ala automaattisesti. Jos painan "Lopeta peli" nappia niin sen teksti muuttuu "Aloita peli":ksi, mutta kun sitä painaa niin mitään ei tapahdu.

Kummallista oli että ensimmäisellä kokeilukerralla automaattinen erän vaihto toimi yhden kerran. Selaimen sulkeminen auttaa ongelmaan mutta nyt huomaa että tuolla suurella kartalla kuva välkkyy.

Google chrome, Java versio 6 update 18.

Sitten Firefoxilla:
Toimii erän vaihto eikä välky enää. Mutta jos painan lopeta-nappia kesken pelin niin aloita-nappi ei enää tee mitään.

Metabolix [13.03.2010 15:05:47]

#

ZcMander kirjoitti:

Testausohjelma ei toimi, jos polussa on väli

Nyt komentoon voi kirjoittaa välilyöntejä sisältävien sanojen ympärille lainausmerkit. Ohjelman yläreunassa pitäisi näkyä tästä esimerkki; jos ei näy, selaimen ja Javan välimuistit täytyy tyhjentää, jotta appletti päivittyy.

ZcMander kirjoitti:

Python-ohjelmia ei voi ainakaan suoraan testata.

Kaikenlaisia ohjelmia voi kyllä testata suoraan. Jotkin tulkit vaativat ehkä koko polun sekä tulkkiin että ohjelmaan. Pitkien komentojen välttämiseksi voit tehdä bat-tiedoston (tai Linuxissa sh-tiedoston), joka siirtyy oikeaan hakemistoon ja käynnistää ohjelman. Bat-tiedosto voisi näyttää tältä:

@echo off
C:
cd "C:\jokin hakemisto\ohjelman sijainti"
C:\python\python.exe ohjelma.py

User137 kirjoitti:

Oletusarvoilla 2:lla ihmispelaajalla testausohjelma jää mulla jumiin ekan erän loppuun

Minulla tätä tai muitakaan mainitsemiasi ongelmia ei esiinny. Tein kuitenkin joitain muutoksia, jotka saattavat korjata jumitusongelmia, joten kokeile ohjelman uutta versiota. Jos saat senkin jumiin, tuleeko Javan konsoliin jokin virheilmoitus?

User137 [13.03.2010 20:11:04]

#

Nyt korjautu kaikki mainitut ongelmat.

1 häiritsevä bugi kyllä on, tosin ei välttämättä liity pelkästään tähän ohjelmaan. Eli luulen että Javassa itsessään (tai mulla jotain outoa koneella) on piirto-ongelma joka liittyy päällekkäisiin ikkunaobjekteihin, ja tämä esiintyy monilla muillakin Java pohjaisilla sivuilla.
Esim. Kuopion kartta-sivu on mulla aivan täydellinen sekasotku:
http://kartta.kuopionseutu.fi/map/map.php
kuva: http://i43.tinypic.com/dgh548.jpg

Mutta se aiempi tekoälykisa toimi ilman mitään ongelmia ja tässäkin itse peliruutu näkyy oikein jos käytän sitä ruudun ulkopuolella, tavallaan pakottamassa sitä piirtämään uudelleen.

Metabolix [13.03.2010 20:17:00]

#

Aiemman tekoälykisan käyttöliittymä oli toteutettu JS:llä eli normaalina nettisivuna, mutta koska toteutus oli melko hidas, tällä kertaa on käytössä aivan oikea Java-ohjelma.

Java-ongelmat voivat joskus johtua myös selaimen ja Javan yhteispelistä tai muuten vain liittyä nimenomaan appletteihin. Voisit myös kokeilla, miten tämän kilpailun testausohjelma toimii kotikoneellasi: lataa JAR-tiedosto ja käynnistä se komennolla java -jar Viivapeli.jar (tai tuplaklikkaamalla, jos koneesi on säädetty sopivasti). Taas kerran BAT-tiedoston teko auttaa käynnistyksessä.

User137 [13.03.2010 20:25:37]

#

Samalla tavalla oli piirto sekasin .jar kauttakin :( Näkyy tavallaan välkehtivänä madot ruudun 4:ssä eri osassa, ihmeellisesti kloonaa ruudun... tuossa:
http://i39.tinypic.com/112e6tf.jpg

Ei oo kun muutama päivä sitten kun java päivitti itsensä, mutta bugi oli kyllä jo kauan ennenkin sitä.

Edit: Ja riippuu näköjään tuurista/(prosesseista?) bugaako vai ei, näköjään välillä toimii ongelmittakin. No teidän tuskin tarvii tämän takia kovin päätä vaivata :>

aaämdee [14.03.2010 16:00:37]

#

Osallistun tähän kilpailuun melko varmasti. Tosin jos aikaa ei riitä tähän muilta hommilta niin tulee taas aikamoista purkkaa :-)

Eki Lehtimäki [15.03.2010 12:40:01]

#

Oho, tuskin ehti Pomppiksen nostattamat pölyt laskeutua kun jo pukkaa uutta kilpailua, mahtavaa, mahtavaa...
Osallistun ehdottomasti, kun osuu vielä ylipitkän pääsiäisloman kohdalle tuo kilpailuaika. Kiitos Metabolixille ja kaikille ideoitsijoille ripeästä uuden kilpailun pystyttämisestä.

tkok [15.03.2010 13:58:37]

#

Suur kiitos kilpailun järjestäjälle, osallistun varmasti!

Sami345 [15.03.2010 16:19:21]

#

En ole varma olenko väärässä, mutta eikö käyttöjärjestelmä jaa prosessorin tehot tasan kaikkien säikeiden kesken (olettaen, että kaikilla on sama prioriteetti). Jos toisella ohjelmalla on 99 säiettä ja toisella 1, eikö se jolla on yksi saa käyttöönsä vain 1/100 prosessorin tehosta?

Metabolix [15.03.2010 16:30:39]

#

Sami345 kirjoitti:

Jos toisella ohjelmalla on 99 säiettä ja toisella 1, eikö se jolla on yksi saa käyttöönsä vain 1/100 prosessorin tehosta?

Kuten säännöissä lukee, ohjelmalla on käytössään yksi ydin prosessorista. (Linuxissa tällainen rajoitus on helppo asettaa.) Tekoälyt toimivat eri ytimillä, joten ne eivät voi varastaa aikaa toisiltaan.

Toki järjestelmässä on aina jonkin verran satunnaistekijöitä, mutta pidän epätodennäköisenä, että mitkään kaksi tekoälyä olisivat niin tasaväkiset, että lopputulos riippuisi muutamasta millisekunnista.

Sisuaski [15.03.2010 17:06:31]

#

Testiohjelma (ainakin jar-tiedosto) ei näytä aina lähettävän molempia siirtoja kerralla, vaan viestit voivat tulla järjestyksessä SIIRTO 1 -> PONG -> SIIRTO 2.
Tämä tuntuu vähän hassulta kun siirtojen kuitenkin pitäisi tapahtua yhtä aikaa.

Onko tämä toiminnallisuus tarkoituksenmukaista ja pitääkö tällaiseen varautua itse kilpailussa?

Sami345 [15.03.2010 18:42:16]

#

Onko PING-viestin lähettäminen pakollista, jos on erikseen säie vastaanottamassa tietoja?

Metabolix [16.03.2010 10:21:01]

#

Sisuaski kirjoitti:

Testiohjelma (ainakin jar-tiedosto) ei näytä aina lähettävän molempia siirtoja kerralla,

Nyt asia on korjattu – ei tosin suoranaisesti eriaikaisuuden vuoksi vaan siksi, että siitä aiheutui teoreettinen mahdollisuus huijata. Korjatussa versiossa tekoälyn viestien käsittely keskeytetään koko siirtotapahtuman ajaksi, eli siirtoviestit tulevat aina peräkkäin. (Synkronointijärjestyksestä johtuen kakkospelaaja saa pienen ajallisen edun, mutta onneksi kaikki pelit pelataan molemmin päin.)

Sami345 kirjoitti:

Onko PING-viestin lähettäminen pakollista, jos on erikseen säie vastaanottamassa tietoja?

PING-viestejä ei ole pakko lähettää. Ne ovat vain yksinkertaisempi vaihtoehto monisäikeisyydelle.

Jokotai [17.03.2010 19:36:51]

#

Pelaamalla kummallakin ihmisenä on aika jännä kokemus :)

jalski [18.03.2010 09:30:30]

#

Oman tekoälyni logiikka rupeaa jo olemaan valmis. Toteutukseni idea on naurettavan yksinkertainen, höystettynä muutamalla pikku jipolla. On jännä nähdä, kuinka moni muu on päätynyt samankaltaiseen ratkaisuun.

Tuolta voitte vilkaista esimulkaisuna, mitä teillä on vastassanne: http://www.tip9ug.jp/who/jalih/ansa-ai.jpg

msdos464 [18.03.2010 21:28:43]

#

Toimiiko testiohjelma oikein?

(--) P1 > +X
(--) P1 > PING
(--) P1 < PONG
(--) P1 < SIIRTO 1 2 2
(--) P1 < SIIRTO 2 11 0
(--) P1 > -Y
(--) P1 > PING
(--) P1 < PONG
(--) P1 < SIIRTO 1 2 1
(--) P1 < SIIRTO 2 12 0
(--) P1 > -Y
(--) P1 > PING
(--) P1 < PONG
(--) P1 < SIIRTO 2 13 0
(II) Erän 1 voitti pelaaja 2.
(--) P1 < LOPPU
(--) P1 > -X
(--) P1 > PING
(--) P1 < PONG
(--) P1: tulostevirta suljettu
(--) P1: virhevirta suljettu

Ohjelmani meni sekaisin kun ensiksi ei tullutkaan "SIIRTO 1" komentoa. Kilpailusivun mukaan "Ohjelmalle ilmoitetaan kullakin liikekerralla aina ensin pelaajan 1 siirto ja sitten pelaajan 2 siirto".

Metabolix [18.03.2010 21:39:29]

#

Missä kohdassa mielestäsi on virhe? Kilpailusivun mukaan PING-viestiin vastataan heti PONG-viestillä; toisin sanoen vastaus lähtee mahdollisimman pian, vaikka siirtoja ei olisi tapahtunutkaan. Esimerkiksi seuraava keskustelu on aivan mahdollinen:

(--) P1 > -Y
(--) P1 > PING
(--) P1 < PONG
(--) P1 > PING
(--) P1 < PONG
(--) P1 > +X
(--) P1 > PING
(--) P1 < PONG
(--) P1 < SIIRTO 1 2 2
(--) P1 < SIIRTO 2 11 0

Jos haluat odottaa seuraavaa siirtoa, älä lähetä heti PING-viestiä vaan lue ensin siirto tai varmista muuten, että dataa on tulossa. Esimerkkiohjelmissa on toteutettu tämä mahdollisimman selkeästi, joten kannattaa todella katsoa. (VB.NETillä on tosin kummallisia nopeusongelmia, ja toimivaksi todetun tavan "selkeys" voidaan kyseenalaistaa.)

jalski: Miten kuvaa pitäisi tulkita? Itse näen siinä vain yhden vaaleanpunaisen viivan, vaikka pelissä pitäisi olla kaksi viivaa. Lisäksi ruudulla on kolme punaista pistettä, joista yksi lienee viivan pää ja toinen ruudun keskikohta mutta kolmas on ainakin minulle täysi mysteeri.

msdos464 [18.03.2010 21:41:14]

#

Joo, mutta entäs tämä:

(--) P1 > PING
(--) P1 < PONG
(--) P1 < SIIRTO 2 13 0
(II) Erän 1 voitti pelaaja 2.

jalski [18.03.2010 22:31:58]

#

Metabolix kirjoitti:

jalski: Miten kuvaa pitäisi tulkita? Itse näen siinä vain yhden vaaleanpunaisen viivan, vaikka pelissä pitäisi olla kaksi viivaa. Lisäksi ruudulla on kolme punaista pistettä, joista yksi lienee viivan pää ja toinen ruudun keskikohta mutta kolmas on ainakin minulle täysi mysteeri.

Tuo on vain testi, mikä näyttää visuaalisesti tekoälyn toiminnan. Laiskuuttani piirsin viivan pään ja esteet samalla värillä. Kuvassa on itse asiassa viiva ja useampia esteitä. Viivan pää liikkuessaan muuttaa lähiympäristönsä violetiksi. Logiikkana on, että mitä vaalempi ruutu, niin sitä kauempana se on esteistä. Tekoäly siis oletuksena pyrkii suunnistamaan vaaleinta ja turvallisinta reittiä myöten.

Metabolix [18.03.2010 22:47:02]

#

msdos464 kirjoitti:

Joo, mutta entäs tämä: ...

Hyvä havainto. En huomannut tuota pitemmästä otteesta, kun useammin toistuva PING-PONG kiinnitti huomioni. :) Nyt virhe on korjattu: yhden pelaajan törmätessä ei tule toiseltakaan SIIRTO-viestiä vaan lähetetään vain LOPPU-viesti.

jalski [19.03.2010 20:47:59]

#

Päädyin suunnittelemaan tekoälyni toimintamallin uudelleen.

Itse asiassa taisin juuri keksiä, miten suunnistaa aina turvallisinta reittiä. Tämä siis käyttämättä minmax-algoritmia, tai mitään polun etsintä algoritmia. Bonuksena homman pitäisi myös toimia melko nopeasti.

Metabolix: Siltä varalta, että itse en jostain syystä saa kilpailuohjelmaa aikaiseksi niin, jos olet kiinnostunut tutustumaan ideaani ja mahdollisesti toteuttamaan toimivan version vaikka kilpailun ulkopuolelle niin ilmoittele. Voin lähettää kuvauksen ja selostuksen sähköpostilla.

Metabolix [19.03.2010 21:05:53]

#

jalski: Itse en luultavasti ehdi osallistua, eikä ongelmakaan niin paljon kiinnosta, että viitsisin siihen vielä lisää aikaa kuluttaa. Voit kuitenkin huoletta osallistua keskeneräisellä ohjelmalla, kunhan se teknisesti katsoen toimii; tekoälyn kuvauksessa voi sitten kertoa, miten pahasti ohjelma jäi kesken ja miten sitä olisi vielä pitänyt kehittää. Varmaan ohjelmasta olisi joka tapauksessa eniten iloa, kun kaikki pääsisivät sitä vapaasti katsomaan. (Toivottavasti osallistut. Jos ohjelman lopullinen taso hävettää liikaa, voit myös osallistua nimettömänä, niin ei ainakaan työnantaja löydä Googlella.)

Eki Lehtimäki [20.03.2010 01:39:19]

#

En saa kääntämääni esimerkkitekoälyä toimimaan yhdessä testausohjelman kanssa. Näyttää kuin ohjelma ei kirjoittaisi mitään tulostusvirtaan (vai mistä "(EE) P1: null" -virheilmoitus kertoo?), vaikka yksin ajettaessa se kyllä tulostaa näytölle oikein. Testasin piruuttani pomppiksen testausohjelmalla -siinähän kerrotaan pelivuoro ja kysytään tekoälyn nimi samalla tavalla kuin tässä, ja sen kanssa esimerkkitekoäly kyllä jutteli (vaikka ei tietenkään osannut tehdä pomppis-siirtoja).

En keksi mistä voisi olla kyse. Veikkauksia? Ajan ohjelmia WinXP:ssä, testausohjelmaa sekä selaimessa että .jar -tiedostosta samoin tuloksin.

(II) Erä 1 alkaa.
(II) P1: D:\polku\Esim.exe
(--) P1 < 1
(EE) P1: null
(--) P1 < LOPPU
(--) P1: virhevirta suljettu
(EE) P1 myöhästyi käynnistyksestä.

Anaatti [20.03.2010 14:58:04]

#

Huomasin, että tuo testiohjelma ei aina tunnu antavan lopetuskäskyä kakkos pelaajalle pelin loppuessa, jolloin tämä jää jumiin. Välillä kuitenkin antaa ja tämä tuntuu olevan varsin satunnaista. Tämän ohjelman, jolla minä testasin, viestien käsittely on kuitenkin aivan identtinen esimerkkiohjelman kanssa.

Tuossa on testiohjelman tulostus:

(--) P1 < SIIRTO 1 158 24
(--) P2 < SIIRTO 1 158 24
(--) P2 < SIIRTO 2 33 16
(--) P1 < SIIRTO 2 33 16
(--) P2 > PING
(--) P2 < PONG
(--) P2 > +X
(--) P1 > PING
(--) P1 < PONG
(--) P1 > -Y
(II) Erän 1 voitti pelaaja 2.
(--) P1 < LOPPU
(--) P1 > PING
(--) P1 < PONG

Sitten, kun tuon jumisen ohjelman sulkee tehtävienhallinnasta, tulee testiohjelman tulostukseen vähän lisää:

(II) Erän 1 voitti pelaaja 2.
(--) P1 < LOPPU
(--) P1 > PING
(--) P1 < PONG
(WW) P2: virhevirta suljettu
(--) P1: virhevirta suljettu
(WW) P2: tulostevirta suljettu
(--) P2 < LOPPU
(--) P1: tulostevirta suljettu

Metabolix [20.03.2010 16:08:35]

#

Eki Lehtimäki: Luultavasti tulkintasi on aivan oikea: tekoälyn nimi ei jostain syystä tule perille, tai tulostevirta sulkeutuu ennen aikojaan. Pomppiksen testausohjelmassa ei pitäisi noilta osin olla mitään olennaista eroa, joten on aika kummallista, jos tekoäly siinä toimii.

Mikä esimerkeistä on kyseessä, ja millä käänsit sen? Voit lähettää käännetyn version minulle (kilpailuosoitteeseen, jottei spammifiltteri syö sitä), niin testaan sen itse. Tässä on varmuuden vuoksi vielä muutama debuggausehdotus:
- Tarkista, että tekoäly todella käynnistyy. Laita se vaikka luomaan tiedosto.
- Kokeile tätä tekoälyä (laita kakkospelaajaksi, muuten törmää heti).
- Katso, minkä virheen muokattu testausohjelma tulostaa.

Anaatti: Testausohjelma sulkee tekoälyt järjestyksessä, eli kakkospelaaja lopetetaan vasta ykkösen jälkeen. Viestien perusteella minusta näyttäisi, että vika on tekoälyssä: ykköspelaajasi ei sammu, vaikka sille syötetään LOPPU-viesti. (Testausohjelman pitäisi kolmen sekunnin kuluttua tappaa tekoäly väkisin, mutta ilmeisesti äly ei siihenkään kuole. Outoa.)

Anaatti [20.03.2010 17:47:01]

#

Metabolix kirjoitti:

Anaatti: Testausohjelma sulkee tekoälyt järjestyksessä, eli kakkospelaaja lopetetaan vasta ykkösen jälkeen. Viestien perusteella minusta näyttäisi, että vika on tekoälyssä: ykköspelaajasi ei sammu, vaikka sille syötetään LOPPU-viesti. (Testausohjelman pitäisi kolmen sekunnin kuluttua tappaa tekoäly väkisin, mutta ilmeisesti äly ei siihenkään kuole. Outoa.)

Tutkin vielä tuota vikaa...
Tein tuosta ohjelmastani kaksi eri nimistä versiota, että ne pystyy erottamaan tehtävienhallinnasta ja silloin, kun testiohjelma jäi jumiin, ykköspelaaja oli aina sulkeutunut, mutta kakospelaaja oli yhä päällä. Jos painoi testiohjelman 'lopeta peli'-painiketta, testiohjelma jäi lopullisesti jumiin ja se piti sulkea väkisin. Tämä vikaa tulee myös esimerkkiohjelmalla, joten vika ei silloin voi olla ohjelmassa. Vika tuntuu toistuvan myös täysin satunnaisesti, koska en nähnyt mitään yhteyttä esimerkiksi siihen kumpi voittaa tai pelin asetuksiin. Sama toistuu myös, vaikka lataisin sovelluksen kiintolevylleni.
Kuitenkaan ihmispelaajaa vastaa tätä ei ole tapahtunut koskaan.

Metabolix [20.03.2010 17:55:15]

#

Anaatti: Ehkä kyseessä on sama ongelma, josta User137 aiemmin ilmoitti. Käytätkö varmasti uusinta versiota testausohjelmasta? (Tällä hetkellä uusimmassa versiossa on kolme välilehteä, aiemmissa kaksi.)

Anaatti [20.03.2010 18:13:32]

#

Kyllä on kolme välilehteä.

Eki Lehtimäki [20.03.2010 19:09:36]

#

Metabolix: Näyttäisi että tekoälyohjelma ei edes käynnisty. Ehdottamasi tiedoston luominen oli hyvä tapa paljastaa se. Virheilmoitus joka tulee on kuitenkin eri kuin silloin jos yrittää käynnistää .exe-tiedostoa jota ei ole olemassa.

Kyse on C# esimerkistä, ja kokeilin kääntämistä sekä Mono 2.2:lla että Visual Studio 2008:lla DotNet Framework 2.0:ssa ja 3.5:ssä.

Lähettämäsi käännetty tekoäly toimi oikein.

Muokattu testausohjelma antoi virheen:

(EE) P1: java.util.NoSuchElementException: virhe nimen lukemisessa!

Palaan ongelman pariin huomenissa, kokeilen vaikka kääntää pascal-esimerkkiä jos en keksi C#-puolella mitään uutta.

Metabolix [21.03.2010 14:23:23]

#

Anaatti: Toimisikohan tämä versio paremmin? (Edit: Uusi versio on nyt myös kilpailusivulla.)

Eki Lehtimäki: Minulla myös C#-versio toimi Windowsissa. Käytin uusimmalla Monolla käännettyä versiota, ja kyseisessä Windowsissa on jokin MS:n .NET-versio. Voit kokeilla vielä bat-tiedoston tekemistä ohjelmalle, se voi ratkaista joskus yllättäviäkin ongelmia. Mutta onhan noita vaihtoehtoisiakin kieliä viime hädässä melkoinen liuta, toivottavasti jokin toimii. :)

Anaatti [21.03.2010 16:12:37]

#

Testasin tuota uutta versiota aika paljon eikä se nyt jäänyt jumiin kertaakaan. :)

msdos464 [22.03.2010 22:53:35]

#

Saisiko tuohon älyntappamiseen checkboxin jolla sen saisi disabloitua? Ohjelmani ei ehdi kirjoittaa debuggausdataa tiekstitiedostoon, kun se tapetaan liian aikaisin :/

Metabolix [23.03.2010 13:29:18]

#

msdos464 kirjoitti:

Saisiko tuohon älyntappamiseen checkboxin jolla sen saisi disabloitua?

Nyt tappoajan voi valita itse tai poistaa käytöstä. Koko ominaisuus on alunperin suunniteltu bugisten tekoälyjen varalle: varsinaisessa kilpailussa ottelut ajetaan automaattisesti, ja olisi harmillista, jos viallinen tekoäly jumittaisi koko järjestelmän. (Jumittaminen ei kuitenkaan vaikuttaisi tuloksiin, koska voittaja määräytyy ainoastaan törmäyksen perusteella.)

Kiitos testausohjelman testaajille palautteesta! Samaa runkoa käytetään tulevissakin kilpailuissa, joten parannukset eivät varmasti mene hukkaan.

Eki Lehtimäki [24.03.2010 16:08:01]

#

Palautus lähti!

Päädyin koodaamaan huvin vuoksi brainfuckilla. Todellista "huviahan" se olikin. :D Brainfucking machine IDE antaa muuten tasan yhdeltä yöllä ilmoituksen: "It's 1:00 AM! Go to bed! Your brain is completely fucked!".

Ei tullut mieletöntä älykkyyttä tällä kertaa, mutta ylivoimaisesti monimutkaisin bf-ohjelma jonka olen ikinä tehnyt.. Ja esimerkkitekoäly pitäisi pystyä voittamaan useimmissa tapauksissa.

msdos464 [02.04.2010 22:27:25]

#

Mikä olisi laitteistoriippumaton keino tarkistaa käytetyn muistin määrä? Nyt on tällainen Windows koodi:

HANDLE hProcess;
PROCESS_MEMORY_COUNTERS pmc;
DWORD processID = GetCurrentProcessId();
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
GetProcessMemoryInfo( hProcess, &pmc, sizeof(pmc))

Toinen kysymys on, että olisiko mahdollista testata älyni kehitysversiota muiden älyjä vastaan ennen varsinaista kilpailua? Se helpottaisi paljon jatkokehitystä ja strategian hiomista.

Käytän kehitysvaiheessa SDL:ää visualisoimaan pelipuun kulkemista, niin sleepin voi tehdä laitteistoriippumattomasti SDL_Delay:llä.

Metabolix [03.04.2010 02:21:38]

#

msdos464 kirjoitti:

Mikä olisi laitteistoriippumaton keino tarkistaa käytetyn muistin määrä?

(Tarkoitat varmaankin käyttöjärjestelmää etkä laitteistoa.) Sellaista tapaa ei varmasti ole, mutta yleensä algoritmisten ohjelmien muistinkäyttöä pitäisi olla helppo arvioida ohjelman toiminnan perusteella. Yksi mahdollisuus on myös tehdä omat varaus- ja vapautusfunktiot, jotka pitävät kirjaa, mutta tämä arvio menee väistämättä hieman alakanttiin. (Toisaalta myös rajassa on pieni jousto, jottei käyttöjärjestelmien eroista aiheudu yllättäviä ongelmia.)

Säännöissä oli muuten muistirajan kohdalla vanhaa tekstiä. Rajan ylitys ei tällä kertaan suinkaan johda automaattisesti häviöön, vaan seuraukset riippuvat ohjelmointikielestä. Monissa ohjelmointikielissä virhe ilmoitetaan ohjelmalle ja siitä voi toipua: esimerkiksi C++:n new-operaattori heittää poikkeuksen std::bad_alloc ja C:n malloc-funktio palauttaa NULL-osoittimen. On valitettavasti myös kieliä, joilla tehty ohjelma väistämättä kaatuu, jolloin häviö on varsin todennäköinen, kun viivaa ei enää ohjata.

msdos464 kirjoitti:

Toinen kysymys on, että olisiko mahdollista testata älyni kehitysversiota muiden älyjä vastaan ennen varsinaista kilpailua?

Tällä kertaa kilpailuun ei ole suunniteltu virallisia välieriä, eikä ilmoittautumisiakaan ole vielä tullut kuin yksi. Toki osallistujat saavat vaihtaa keskenään tietoja epävirallisemmissa merkeissä, profiileista löytyy osoitteita. :)

Eki Lehtimäki [03.04.2010 14:30:10]

#

msdos464 kirjoitti:

Toinen kysymys on, että olisiko mahdollista testata älyni kehitysversiota muiden älyjä vastaan ennen varsinaista kilpailua?

Metabolix kirjoitti:

Toki osallistujat saavat vaihtaa keskenään tietoja epävirallisemmissa merkeissä, profiileista löytyy osoitteita. :)

Mietinkin edellsessä kilpailussa olisiko tuollainen salakähmäinen tietojen vaihtaminen epäurheilijamaista. Mutta ei siis ainakaan kiellettyä.

msdos464: Saat kyllä minun ohjelmani testikäyttöön jos haluat, siitä ei vain ehkä ole kovin paljon apua "strategian hiomisessa", koska se painaa menemään ennalta päätettyä reittiä vastustajan liikkeistä välittämättä, kutakuinkin yhtä älykkäästi kuin esimerkkitekoäly.

Metabolix [03.04.2010 16:18:46]

#

Eki Lehtimäki kirjoitti:

Mietinkin edellsessä kilpailussa olisiko tuollainen salakähmäinen tietojen vaihtaminen epäurheilijamaista.

Kopioimalla ei voi voittaa, vaan voittoon vaaditaan aina omia ajatuksia. Pidän myös epätodennäköisenä, että kukaan lyömättömän taktiikan keksinyt haluaisi liiemmin levitellä ideaansa. Lisäksi viimekesäisessä tekoälykilpailussa nähtiin, ettei tuloslistalla tapahtunut välierien jälkeen kovin suuria muutoksia; esimerkiksi voittaja ja kärkinelikko pysyivät samoina.

Eki Lehtimäki [03.04.2010 17:38:50]

#

Joo, välieristä ei varmaan ole suurtakaan iloa ylimääräiseen vaivaan nähden.

Tarkoitin edellisellä kisalla Pomppista, jossa meinasin itse pyytää joltakulta tekoälyjä "harjoitusvastustajiksi" oman älyn hienosäätöä varten. Mietin olisiko se reilua, jos kaikilla ei ole mahdollisuutta "harjoitteluun". Lopulta en vaivautunut pyytämään, koska oman tekoälyn eri versioiden peluuttaminen keskenään osoitti yhden vaihtoehdon selvästi muita paremmaksi, ja pidemmälle vietyyn hienosäätöön ei oma viitseliäisyys riittänyt.

Olen kuitenkin samaa mieltä että kehitysversioiden vaihtaminen juuri tuollaiseen testaus-jatkokehitystarkoitukseen on OK, kunhan säännöt ovat samat kaikille.

gamehouse [07.04.2010 22:16:59]

#

Ööh, missä vika:

(II) Erä 1 alkaa.
(EE) P1: java.io.IOException: Cannot run program "c:\VIIVAPEL.EXE" (in directory "c:\"): CreateProcess error=87, Parametri ei kelpaa
(EE) P1 myöhästyi käynnistyksestä.

Miten niin "parametri ei kelpaa"? Ohjelma toimii muuten hyvin, mutta testiohjelma ei suostu sitä ajamaan, vaikka kaikki kansiot ovat oikein...

Metabolix [08.04.2010 12:35:52]

#

gamehouse: Noin vähillä tiedoilla ongelmaan ei voi sanoa juuta eikä jaata. Tarkista vielä kirjoitusvirheet, ja jos olet tehnyt ohjelman QB:llä, käännä se FreeBASIC-kääntäjällä Windows-ohjelmaksi. Varmista myös, että käytät testausohjelman uusinta versiota, jonka alakulmassa on päiväys 2010-03-23 13:15. Lisäksi voit kokeilla kilpailuohjeissa ja tässä keskustelussa neuvottua BAT-kikkaa. Jos ongelma ei näillä eväillä ratkea, voit lähettää ohjelmasi (sekä lähdekoodin että käännetyn) kilpailuosoitteeseen testattavaksi.

Metabolix [16.04.2010 05:00:00]

#

Kilpailuaikaa on jäljellä enää vuorokausi, ilmoittautumisia on tullut vasta kolme. Nyt kaikki mukaan!

aaämdee [16.04.2010 23:03:40]

#

Pahoittelut kun en ehtinyt osallistua järjestämäänne kilpailuun. Yhtä aikaa kouluhommat ja työhommat veivät kaiken ajan, niin jäi tämäkin. Täytyy ensikerralla priorisoida ajankäyttö paremmin.

jalski [17.04.2010 00:28:52]

#

Jäi minultakin lopullinen kilpailuohjelma tekemättä ja palauttamatta. Kohtuullisesti toimivan idean kilpailuun tosin kehitin:

Ideani perusajatuksena oli tehdä influence map pohjainen toteutus. Toisin sanoen normaalin pelikartan lisäksi käytin toista karttaa, mihin jokaisella siirrolla lisäsin "potentiaali-kentän arvot". Tämä tapahtui siten, että kentän keskipiste tuli siirtoruudun kohdalle. Keskipisteessä kentän arvo oli suurimmillaan ja pieneni aina kauemmas mentäessä. Ideanahan oli tietysti, että siirtovaihtoehdoista ruutu, missä kentän arvo on pienin on kauimpana esteistä ja täten myös turvallisin.

Yllä oleva toteutus oli yksinkertainen ja toimi silti kohtuullisen hyvin. Kuitenkin, jos kahdessa eri siirtovaihtoehdossa sattui olemaan sama kentän arvo, niin saattoi viiva valita näistä sen huonomman, mikä johti nopeammin ansa-tilanteeseen.

Lisäsin tekoälyyni vielä yhdeksi siirtokriteeriksi esteettömyyden. Esteettömyys laskettiin neljään eri sektoriin (vasen ylä, oikea ylä, vasen ala ja oikea ala). Tämä tapahtui aina jokaisella eri sektorilla käytännössä isontamalla neliötä kartalla kunnes este tuli vastaan siten, että sen nurkkapiste oli siirtopisteessä. Jokaista suuntaa kohden aina kahden sektorin estettömyysarvot laskettiin yhteen (esim. siirto ylös = vasen ylä + oikea ylä) ja huomioitiin siirtovaihtoehtoa valittaessa yhdessä potentiaaalikentän kanssa.


Kuinkahan moni muu päätyi samankaltaiseen ratkaisuun?

Metabolix [17.04.2010 05:00:00]

#

Kilpailuaika on päättynyt. Jos lähetit tekoälyn muttet ole vielä saanut viestiisi vastausta, ota mitä pikimmin yhteyttä!

Kilpailussa on ainakin seitsemän osallistujaa, ja kahdeksannen tekoälyn teknisiä ongelmia (Windows-riippuvuutta) selvitellään vielä. Testiajot aloitetaan, kun ongelmat on ratkaistu, ja näin kesken kiireisen kevään tuloksia saanee odotella totuttua pidempään.

Päivitys: Kahdeksannenkin osallistujan ongelmat ratkesivat. Kilpailussa ovat täten mukana tekoälyt ___, BFmato, esim, Kvasaari, pallo, Protraktor, Tonttu ja Torppo.

Metabolix [17.04.2010 10:51:57]

#

jalski kirjoitti:

Lisäsin tekoälyyni vielä yhdeksi siirtokriteeriksi esteettömyyden.

Itse tekaisin Haskellilla tekoälyn, jonka ainoa siirtokriteeri on kustakin neljästä suunnasta enintään yhdellä käännöksellä tavoitettavien ruutujen määrä. Ihmiselle näinkin yksinkertainen ohjelma pärjää kilpailussa käytettävillä nopeuksilla varsin hyvin. :) Kunnolliseen pelilogiikkaan perustuvat tekoälyt kuitenkin voittavat sen takuulla.

Sisuaski [18.04.2010 22:59:03]

#

Itse arvioin botissani pelitilannetta seuraavan kriteerin mukaan: Peli on sitä paremmin omassa kontrollissa mitä useampaan ruutuun on itseltä lyhyempi matka kuin vastustajalta. Tämä toimii suhteellisen hyvänä arviona pelitilan hyvyydestä varsinkin loppupelissä.

Toteutin tämän heuristiikan perusteella tavallisen oppikirjamaisen minmax-algoritmin, joka olettaa pessimistisesti että vastustaja arvaa aina mitä on itse tekemässä ja tekee ikävimmän mahdollisen vastasiirron. Parempi tapa olisi ollut tehdä siirrot perustuen Nashin tasapainoon, mutta en sitten jaksanut koodata sen laskemisen vaatimaa lineaarisen optimointiongelman ratkaisua.

tkok [19.04.2010 20:51:31]

#

ajattelin jättää ohjelman tekemisen viime tinkaan. sitten tulikin yllätysleiri intissä. eikä tällä n97 pythonilla kovin kummosia saa aikaan :/

Metabolix [24.04.2010 23:04:52]

#

Tulokset on julkaistu, voittajaksi selvisi Mikko Sysikaski erikoisesti nimetyllä tekoälyllään ___. Onneksi olkoon!

Kiitokset muillekin osallistujille sekä kaikille, jotka antoivat arvokasta palautetta testausohjelman toiminnasta. Lisää kaikenlaisia kilpailuihin liittyviä ideoita ja ehdotuksia voi esittää täällä keskustelussa tai sähköpostitse.

tkok [28.04.2010 08:49:13]

#

Kiitos reiluista kommenteista BFmadon koodissa. Kyllä se BF kieli näyttää juuri niin vaikealta kuin huhutaan sen olevan.

Eki Lehtimäki [30.04.2010 18:30:57]

#

tkok: Hyvä jos kommenteista on iloa! Brainfuck-koodiahan on pakko kommentoida huolellisesti jos haluaa itse tajuta omaa koodiaan.

Grez [30.04.2010 18:34:17]

#

Voi ajatella, että kommentoitu BF on tavallaan normaalia lähtekoodia ja jos siitä poistetaan kaikki kommentut, niin se on "käännetty", kuten esim. C-kielistä ohjelmaa käännettäessä. Tokihan BF täytyy vielä erikseen kääntää tai tulkata konekieleksi, mutta voisihan joku tehdä BF:ää ajavan prosessorin.


Sivun alkuun

Vastaus

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

Tietoa sivustosta