Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Tulokset on julkaistu.
Onnea voittajalle!

Keskustelu: Ohjelmointiputka: Kilpailu: Ohjelmoi tekoäly, joka kerää lukuja

Sivut:

Sivu 3 / 3

Sivun loppuun

jsbasic [07.02.2019 11:23:57]

Lainaa #

Kilpailun säännöissä sanottiin:

lainaus:

Jos tekoälyjä on niin vähän, että ne voivat hyvin pelata samanaikaisesti, kaikki tekoälyt pelaavat yhtä aikaa. Muuten pelataan jollain tavalla tasapuolisesti pelejä eri tekoälyjen kesken; tarkempi toteutus riippuu osallistujamäärästä.

Minusta kilpailu ratkesi joka tapauksessa vastustajan liikkeiden ennakointiin. Tekoälyjen kuvauksissa on sellainen mielenkiintoinen yksityiskohta, että parhaiten sijoittunut puolisko mainitsee aina sanan "vastustaja". (Ainoa poikkeus on Calgary88, joka käyttää termiä "kilpailija".) Etenkin Lokki ja Halflife3 (sijat 2.-3.) näyttävät perustavan pelinsä vastustajan ennakointiin, jopa todennäköisyyksiin, ja pisteiden kerääminen jää toisarvoiseksi. Neljänneksi-kahdeksanneksi tulleet laskevat, ehtiikö vastustaja pisteelle ensin. Heikommin suoriutuneet puhuvat korkeintaan "muista pelaajista". En nyt haluaisi olla psykoterapeuttina, mutta eikönhän tämä kerro vähän halveksuvasta asenteesta vastustajia kohtaan, joka kieltämättä itsellänikin oli. :D

Metabolix [07.02.2019 18:41:44]

Lainaa #

jalski: Pystytkö antamaan ihan lukuja useammasta testiajosta muita vastaan?

Strategiasta jäin itse miettimään, olisiko kisassa ollut sijaa aggressiiviselle tekoälylle. Nythän strategia oli pääsääntöisesti se, että valitaan paras reitti sieltä, missä vastustaja ei ole häiritsemässä. Aggressiivinen pelaaja olisi voinut hakea parhaan reitin mahdollisimman läheltä vastustajaa niin, että vastustajaa lähinnä olevat epävarmat luvut poimitaan ensin ja edetään sitten varmoille alueille. Tämä toimisi ehkä vain pienillä pelaajamäärillä, koska suuressa joukossa ei juurikaan jää omaa turvallista pelitilaa.

Kommenttina vielä kisasta yleisesti: Tämä kisa oli kiireessä aloitettu, ja osallistujamäärää ja osallistujien tasoa oli vaikea arvioida, ja siksi suunnitelma jäi hieman epämääräiseksi. Lisäksi tämä oli ensimmäinen kisa, jossa oli kerralla yli neljä pelaajaa. Nyt on kokeiltu, ja seuraavalla kerralla on paremmin tiedossa, miten tällainen monen pelaajan peli käyttäytyy. Pyrin siis selvempään ohjeistukseen ensi kerralla.

FooBat [07.02.2019 20:38:33]

Lainaa #

Oli aika odotettua, että Calgary88 tekoälyni pärjää paremmin isommassa joukossa. Mitä enemmän pelaajia pelissä on mukana, sitä suurempi osa pisteistä jaetaan pelin alun ryntäyksessä. Calgaryn tekemä suunnattu haku (jossa ei käännytä takaisinpäin) on itse asiassa on tähän tilanteeseen lähellä optimaalista, koska voidaan olettaa, että joku muu on kumminkin kerännyt kaikki taakse jäävät pisteet. Tämä suunnattu haku on myös todella kevyt laskea 'loppuun asti' eli alussa löydetään heti varsin hyvä 12-24 askelta pitkä reitti.

Jos pelaajia on vähemmän, alulla on vähemmän painoarvoa ja muutenkin Calgaryn käyttämä haku ei enää ole optimaalinen, koska se ei ota alkuunkaan huomioon muiden pelaajien liikettä (maksimaalisen pessimististä etäisyysgraafia lukuunottamatta). Tähän kilpailuun olisi pitänyt tehdä aivan toisenlainen botti, jos tämä olisi ollut esim. kaksinpeli, mikä on havaittavissa siinä, että Calgary ei alkuunkaan pärjää tällaisissa peleissä.


Vähän itseäni harmittaa, etten saanut varattua enempää aikaa tähän kilpailuun. Puuhastelin pari iltaa testaussysteemien kanssa, mutta lopulta oikean tekoälyn tekeminen jäi viimeiseen yöhön ja piti rajusti optimoida koodaukseen käytetyn ajan suhdetta tulosten odotusarvoon :). Lopulta tuloksena oli mahdollisimman yksinkertainen äly, jolla oli edes jonkinlainen edellytys pärjätä. Tulipahan nimettyäkin se lapsuuden sankarin mukaan deadline päivänä. RIP Matti.

Alunperin suunnitteilla oli jonkin tyyppinen pelin loppuun asti laskeva monte carlo viritelmä, mutta tämä olisi ollut varsin haastava optimointitehtävä ja muutenkin se olisi vaatinut kaikenlaista virittelyä ollakseen hyvä. Ehkäpä teen tämän vielä omaksi iloksi jossain vaiheessa kun kerta tuli noi testisysteemitkin tehtyä jo.

jalski kirjoitti:

Metabolix kirjoitti:

jalski: Ainakin omat versioni painovoimasta, metapalloista ym. johtivat niin huonoihin tuloksiin, että jätin ne suosiolla pois kisasta. Usein tekoäly päätyi esimerkiksi kulkemaan isojen lukujen välistä poimimatta niistä juuri mitään tai jäi jumiin tyhjään tilaan tasaväkisten valintojen väliin. Mutta voit tietenkin itse kokeilla, saatko parempia tuloksia.

Kokeilin potentiaali karttaa ja se toimi hyvin, kun aina luvun ympärille luotu kenttä oli muodostettu sopivilla arvoilla. Omassa versiossani kokonaiskenttä oli luotu siten, että se painotti lukujen yhteissummaa alueella ja tekoäly valitsi aina suurimman vieressä olevan potentiaalin. Oma kokeiluni saattoi joskus jäädä jumiin tasaväkisten valintojen väliin, mutta tästä olisi todennäköisesti päästy eroon luomalla pieni "häntä" potentiaali työntämään tekoälyä eteenpäin.

Itse kokeilin potentiaalikarttaa ensimmäisenä versiona ja sen sai toimimaan kohtuullisen hyvin kun käytti exponentiaalisesti etäisyyden mukaan vähenevää potentiaalia. Varsin rajut 0.55-0.3 kertoimet etäisyysaskelta kohti tuntuivat toimivan parhaiten 6-8 pelaajan peleissä, eli voimakkaasti painotetaan lähellä olevia pisteitä. Itseasiassa Calgary88 käyttää tuota toissijaisena ohjausmallina.

Pelkästään potentiaaliin perustuvat botit jäivät kuitenkin aika paljon jälkeen botista, joka etsi vähän parempaa reittiä muutaman askeleen päähän. Etenkin alussa potentiaalibotit jäävät paljon jälkeen ja myöhemminkin ne eivät minulla ottaneet kilpailijoita huomioon ja menivät usein vääriä pisteitä kohti.

Lisäys:

Metabolix kirjoitti:

jalski: Pystytkö antamaan ihan lukuja useammasta testiajosta muita vastaan?

Ajoin testiksi hiukan pelejä omalla potentiaalikenttäbotilla. Noita kilpailubotteja vastaan 15 botin pelissä se sijoittui aika luotettavasti suunnilleen puoliväliin Calgaryn ollessa lähellä kärkeä. Omia yksinkertaisia testibotteja vastaa testibenchissäni potentiaalibotti sai yleisesti ~95% pisteistä verrattuna Calgaryyn. (Vertailukohdaksi parhaan lähimmän pistearvon hakenut ahne botti puolestaan sain noin 80% Calgaryn pisteistä.) Testipeleissäni oli yleensä mukana 8-10 pelaajaa.

Metabolix kirjoitti:

Strategiasta jäin itse miettimään, olisiko kisassa ollut sijaa aggressiiviselle tekoälylle. Nythän strategia oli pääsääntöisesti se, että valitaan paras reitti sieltä, missä vastustaja ei ole häiritsemässä. Aggressiivinen pelaaja olisi voinut hakea parhaan reitin mahdollisimman läheltä vastustajaa niin, että vastustajaa lähinnä olevat epävarmat luvut poimitaan ensin ja edetään sitten varmoille alueille. Tämä toimisi ehkä vain pienillä pelaajamäärillä, koska suuressa joukossa ei juurikaan jää omaa turvallista pelitilaa.

Lisäsin Calgary bottiin lopuksi hivenen agressiivisuutta antamalla hiukan enemmän painoarvoa pisteille jotka olivat lähellä vastustajia. Tämä paransi botin keskimääräistä tulosta pari prosenttia omassa testisetupissani, mikä on ihan näkyvä parannus.

L2-K2 [07.02.2019 23:46:49]

Lainaa #

Metabolix kirjoitti:

Strategiasta jäin itse miettimään, olisiko kisassa ollut sijaa aggressiiviselle tekoälylle. Nythän strategia oli pääsääntöisesti se, että valitaan paras reitti sieltä, missä vastustaja ei ole häiritsemässä. Aggressiivinen pelaaja olisi voinut hakea parhaan reitin mahdollisimman läheltä vastustajaa niin, että vastustajaa lähinnä olevat epävarmat luvut poimitaan ensin ja edetään sitten varmoille alueille. Tämä toimisi ehkä vain pienillä pelaajamäärillä, koska suuressa joukossa ei juurikaan jää omaa turvallista pelitilaa.

Kokeilin hieman tuontapaista ihmispelattuna ennen kuin päädyin tuohon erittäin säikkyyn älyyni. Ei tuntunut agressiivisuus yhtään toimivalta (ainakaan 2–3 pelaajan peleissä yhtä tai kahta yksinkertaista konetta vastaan), koska yksin on ”aika vaikea” rajata vastustajansa liikettä.

1. Toista häiritessä ei saa koskaan päätyä vain 1 ruudun päähän vastustajastaan, koska silloin joutuu väistämään pistelaattoja, tai päästämään yksinkertaisenkin vastustajan lipsahtamaan sille vaivalla puolustetulle omalle pistealueelleen.

2. Koska tuo edellinen, niin se oma pistekertymä jää nopeasti jälkeen pideltävästä vastustajasta.

3. Ja, koska kenttä on (topologisesti) torus (lue: donitsi), niin sen vastustaja lopulta kerättyä sen vartioidun alueensa tyhjäksi (joilloin se johtaa pisteissä), niin se voi vaan lipsahtaa vastakkaisten reunojen yli sinne missä oli vielä pisteitä. Jos reunat olisi suljettuja, niin yksinkertaisen vastustajan voisi (ainakin yrittää) vangita reunalle jumiin.

Se ei-koskaan-julkaistu harjoitusvastustajani olisi ollut hieman tällainen häirikkö – minimoi kaikkien muiden pelaajien pistemääräodotusarvojen maksimin ja oman odotusarvon erotusta (ts. pelaa sitä pelaajaa vastaan joka kulloinkin näyttäisi voittavan). Koska koin itse tämän täysin kilpailun hengen vastauksesi, niin jätin sen siis kilpailusta pois – se ei varmaankaan olisi koskaan voittanut yhtään lautaa, ja olisi vaan pyrkinyt tasoittamaan monen pelaajan pelejä. ”Harjoitusvastusjana” muita hämäämässä se olisi ehkä ollut sopiva, siis ”mitä ihmettä tämä kaveri oikein tekee ja miksi”.

jalski [08.02.2019 18:46:08]

Lainaa #

FooBat kirjoitti:

Metabolix kirjoitti:

jalski: Pystytkö antamaan ihan lukuja useammasta testiajosta muita vastaan?

Ajoin testiksi hiukan pelejä omalla potentiaalikenttäbotilla. ...

Löysin oman tekoälyni kehitysversion raakileen temp hakemistostani ja kokeilin pistää sen kilpailun älyjä vastaan. Suurimmassa osassa pelejä sen sijoitus tuloksissa pysytteli vähän puolenvälin yläpuolella, mutta joskus se jäi häntäpäähän. Sopivassa kentässä "Greedy" oli myös hyvin mukana kärjen tuntumassa, voittajalle se yleensä kyllä hävisi selvällä marginaalilla.

jsbasic [09.02.2019 11:37:15]

Lainaa #

FooBat kirjoitti:

Tulipahan nimettyäkin se lapsuuden sankarin mukaan deadline päivänä. RIP Matti.

Olipa vaikuttava nimi. Itse vuotta nuorempana en Nykäsen hyppyjä koskaan nähnyt, mutta onneksi hänellä oli välillinen vaikutus lapsuuteeni ja harrastuksiini. Mäkihyppy on niin elegantti ja luonnonläheinen laji, etenkin kun sitä hypättiin silloin päivänvalossa.

Itsellänikin kävi mielessä tehdä suunnattu haku aloitukseen, mutta pyrin vielä kevyempään toteutukseen. Tavoitteenani oli tehdä vektorimuotoinen malli parhaista pisteistä ja poluista. Sellaista mallia oli kuitenkin raskas päivittää, koska tilanne kentällä muuttuu niin nopeasti. Oli pakko toteuttaa vektorimalli rivikohtaisesti. Toteutuksessani etsitään korkein piste jokaiseltä vaakariviltä. Kun joku nappaa tuon pisteen, etsitään rivin seuraavaksi korkein piste, jne. Rivien parhaista pisteistä rakentuu siis jonkinlainen verkko, jossa on 25 solmua, eli yhtä paljon kuin rivejä. Tämän sähläyksen jälkeen olen kuitenkin tyytyväinen Nipsun lopputulokseen.

Libo [09.02.2019 16:52:40]

Lainaa #

How about round two?

Tässä taitaa muutamilla olla jäänyt hieman hampaankoloon jotain tästä kisasta. Muutama on jo viritellyt älyänsä kisan jälkeen.
Ja onko sittenkään tuo osvastusX lyömätön?

Esitän ajatuksen, että otetaan kierros kaksi samasta kisasta!

Pidetään vaikka kärkikolmikon älyt ennallaan (joille toki uudet versiot sallittu uusilla nimillä) ja kukin saa viritellä omia älyjään paremmaksi.
Koska lähdekoodit on jaettu niin sovittakoon, että näistä ei kopsata muihin älyihin mitään. Keskustelusta saatuja ajatuksia saa toki hyödyntää.

Saammeko ’someälyllä’ tehtyä vielä paremmin tekoälyn tähän peliin jolla tuo paikkansa ansainnut kärkikolmikko nuijitaan maan rakoon?

Ja kisan säännöistä/kisamuodoista/pistelaskusta voi tehdä järjestäjälle ehdotuksia.

Grez [10.02.2019 08:10:49]

Lainaa #

Sinänsä jotta kierros kaksi olisi reilu kaikkia kohtaan, niin siihen pitäisi ottaa vain ne älyt, joita tekijä on parannellut tai jotka tekijä haluaa osallistumaan muokkaamattomina.

Lebe80 [11.02.2019 09:11:07]

Lainaa #

Onko joku tehnyt tästä kikkaretta, jolla voisi katsoa "turnausta"?

johku90 [11.02.2019 09:11:20]

Lainaa #

Eipä kait someälyn kokeilemiseen toista kierrosta tarvita? Ei muuta kuin testaussivulle kokeilemaan uusia botteja, ja jos saa jotain lupaavia tuloksia niin pasteaa koodin tänne niin muut saa yrittää parantaa.

Metabolix [11.02.2019 13:12:20]

Lainaa #

Lebe80: Millaisessa muodossa haluaisit katsoa turnausta? Siinä on 27818 peliä, eli melkoista pikakelausta saisi olla. Kahdeksan peliä sekunnissa antaisi lähes tunniksi katsottavaa.

Metabolix [11.02.2019 17:22:34]

Lainaa #

Nyt on myös tekoäly jopeli testaussivulla. Jos testaussivun haluaa tallentaa omalle koneelle niin, että tämäkin tekoäly toimii, poimintapeli-jopeli-data.js täytyy tarvittaessa itse ladata erikseen.

Lebe80 [12.02.2019 09:15:55]

Lainaa #

Metabolix kirjoitti:

Lebe80: Millaisessa muodossa haluaisit katsoa turnausta? Siinä on 27818 peliä, eli melkoista pikakelausta saisi olla. Kahdeksan peliä sekunnissa antaisi lähes tunniksi katsottavaa.

Jossain vaan, olisiko se sitten jokin shakkimainen, jossa valitaan listalta jo ratkenneita pelejä voisi laittaa pelin pyörimään (esim. siirto sekunnissa) ja pausettaa halutessaan.

Lähinnä, että näkisi, miten pelit etenivät.

Metabolix [12.02.2019 12:53:28]

Lainaa #

Lebe80, tosiaan kisan testaussivulla voi ajaa pelejä ja myös itse pelata ohjelmia vastaan. Kisassa pelattuja otteluita ovat esimerkiksi kaikki 6 ja 10 pelaajan pelit siemenluvulla 1802267760 sekä 15 pelaajan pelit siemenluvuilla 4919 – 6255, eli näillä parametreilla voi katsoa. (Ei ole paljon eroa, vaikka katsoisi ihan satunnaisia pelejä.) Lisäksi pelattiin vaihtuvilla siemenluvuilla. Kaikki kisan pelit voi ladata tästä linkistä (6,6 Mt, purettuna noin 100 Mt), ja haluamansa pelin voi syöttää tiedostona testaussivulle Katselu-osioon.

Lebe80 [12.02.2019 13:14:52]

Lainaa #

Metabolix kirjoitti:

(12.02.2019 12:53:28): Lebe80, tosiaan kisan testaus­si­vulla voi ajaa...

Juuri tällaista kaipasin! Linkki mennyt täysin ohi! Kiitos!

Libo [13.02.2019 20:19:03]

Lainaa #

Metabolix kirjoitti:

...kaikki 6 ja 10 pelaajan pelit siemenluvulla 1802267760...

Pitääkö tuo ymmärtää siten, että kaikki kisan 6 tai 10 pelaajan pelit pelattiin samalla kentällä? Tuleehan tuossa tietysti pelaajien keskinäinen paremmuus esiin jos/kun pelattiin kaikilla pelaajakombinaatioilla. Mutta ainakin omissa testeissä tietyt kentät sopivat tietylle älylle ja kenttien vaihdolla oli suuria vaikutuksia tuloksiin. Ymmärsinkö tuon lainauskohdan siis oikein?

Ja olikos sulla Metabolix jokin valmis systeemi/kaavio, jolla pelattiin kaikki pelaajakombinaatiot 6 pelaajan peleissä vai mistä tuo ottelumäärä tuli?

Nimim. Piru lukee raamattua

Metabolix [13.02.2019 20:42:37]

Lainaa #

Libo kirjoitti:

Pitääkö tuo ymmärtää siten, että kaikki kisan 6 tai 10 pelaajan pelit pelattiin samalla kentällä?

Ei, vaan kaikki 6 ja 10 pelaajan kombinaatiot ovat pelanneet kyseisellä siemenluvulla ja lisäksi muilla (joka kombinaatiolle erilaisilla) siemenluvuilla. Vakiosiemenluku nyt oli helpompi kirjoittaa viestiin satunnaista otteluiden katselijaa varten. Paketista voit kaivaa ne muut luvut.

Libo kirjoitti:

Ja olikos sulla Metabolix jokin valmis systeemi/kaavio, jolla pelattiin kaikki pelaajakombinaatiot 6 pelaajan peleissä vai mistä tuo ottelumäärä tuli?

Mikä erityinen ”systeemi” tai ”kaavio” siihen tarvitaan? Kombinaatiot on helppo luoda rekursiolla, ja eri kombinaatioiden (ja siten otteluiden) lukumäärä on aivan normaalia matematiikkaa eikä siis mikään yllätys.


Sivun alkuun

Sivut:

Vastaus

Muista lukea keskustelun ohjeet.
Tietoa sivustosta