Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Olisiko aika kilpailulle?

Sivun loppuun

ajv [28.10.2017 21:02:14]

#

Hellou,

Olisiko ylläpidolla aikaa ja mielenkiintoa järjestää jonkunlainen kilpailu? Saataisiin vähän eloa tänne :)

Metabolix [29.10.2017 12:18:40]

#

Kilpailu olisi hyvä järjestää. Onko ehdotuksia aiheesta (ja säännöistä)?

Lautapelin tekoäly on perinteinen kisa-aihe, ja edellisestä kilpailusta on jo niin kauan, että valintaa ei voi enää sanoa tylsäksi. Toisessa keskustelussa ehdotettiin upseerishakkia, mutta sen ongelmana on, että shakkitekoälyjä löytyy jo netistä pilvin pimein ja perinteiset lautapelialgoritmit ovat kisassa ylivoimaisia.

Olisi hauska kilpailla myös jostain ihan muusta. Olen miettinyt demokilpailua, jossa on toki sovittavana suoritusympäristö (käyttöjärjestelmä, laitevaatimukset), tai demon voisi laittaa näytille YouTubeen. Toinen mahdollisuus olisi uusia vaikka Säveltävä ohjelma -kilpailu hieman erilaisilla säännöillä.

Myös itse sivustoa voisi joskus uudistaa tai uuden haasteen kehittää, jolloin tulisi kyseeseen nettisivuihin liittyvä kilpailu. Nämä ideat vaativat kuitenkin vielä runsaasti esi- ja jälkityötä, joten idea jää myöhemmäksi.

E1ss [29.10.2017 17:07:06]

#

Tehdäänkö tekoäly hello world kilpailu jossa palkintona on miljoona euroa? Voittaja ratkaistaan sen perusteella kenen koodi ensimmäisenä tulostaa tekstin Hello World.

Grez [29.10.2017 18:24:52]

#

Luulen että ylläpito järjestää sen mielellään jos sponssaat sen miljoona euroa palkintopottiin ja toisen järjestelyihin :D

Vanaja [29.10.2017 21:42:12]

#

Tuo The Ultimate Puzzle voisi olla aika haastava, jos varsinkin ratkaisee kaikki vaihtoehdot.

johku90 [30.10.2017 10:55:04]

#

Voisko olla joku taistelubotti-kisa?

esim. wings tyylinen kaksintaistelu, tai voisihan olla useampikin botti yhtä aikaa.

Tai sitten vois olla jotain koneoppimiseen liittyen. Jonkinlainen luokittelukisa kenties? Aineiston kanssa voi tietty tulla ongelmia :/ joku perinteinen mnist datasetin opettelu tietysti olis helppo järjestää, mutta on liian tylsä. Miten ois tämmönen sienten tunnistaminen, johon löytys datasetit valmiina? https://archive.ics.uci.edu/ml/datasets/Mushroom

Onko riskinä, että kaikki saa kaikki oikein? Jos laittaa tiukat aikarajat, niin ei voi tehdä liian isoja neuroverkkoja?

Edit: Ei kun eihän se tietenkään ole ongelma, jos rajoitetaan neuroverkon harjoittamiskierrosten määrää. Enempikin ongelma on, että miten estetään harjoittamasta neuroverkkoja etukäteen. Pitäisikö datasetti vaihtaa itse kilpailutilanteeseen, että kilpailijat lähtevät varmasti puhtaalta pöydältä?

Metabolix [05.11.2017 18:40:06]

#

E1ss saa mielellään sponsoroida miljoonan. The Ultimate Puzzle on 16 palan palapeli ja ratkeaa jopa brute forcella eli ei kelpaa aiheeksi sellaisenaan. Taistelubotti olisi jännä, mutta siitä tulee helposti liian vaikea, joten pitää tarkkaan miettiä. Neuroverkko ei sovi, koska se on liian kapea aihe ja osallistujia tulisi noin kolme.

Lisäehdotukset ovat tervetulleita.

Uudistan ylipäänsä kisaskriptejä, joten ehkä pian järjestäminen helpottuu ja tarvitaan vain JS-toteutus kisan tuomarista. :)

johku90 [06.11.2017 09:33:30]

#

Metabolix kirjoitti:

joten pitää tarkkaan miettiä.

No mietitäänpä tarkkaan tuota taistelubottia. Pystyiskö näillä spekseillä järjestään vai meneeköhän hankalaksi?

-helpoin voisi olla kopioida vaikkapa wingsin pelimekaniikka suoriltaan.
-tekoäly toimisi komentorivipohjaisesti.
-tekoäly saisi tiedon itsestään ja muista boteista, sekä ilmassa olevista ammuksista. (Voisiko tiedot olla vaikka JSON tai XML muodossa?)
-joka stepin lopuksi tekoäly tulostaa komentoriville, miten kaasuttaa, kääntyä ja ampua.
-jos joku luodeista osuu johokin bottiin, niin botti kuolee. Vai pitäskö botin kestää tyyliin kolme luotia?

Yksi pelin steppi voisi näyttää komentorivillä vaikkapa tällaiselta:

{ "yourPos":{"x": 234, "y": 345, "rot": 180, "speed": 3}, "enemys": [{"x": 467, "y": 125, "rot": 56, "speed": 2}, {"x": 632, "y": 426, "rot": 98, "speed": 4}], "bullets": [{"x": 284, "y": 35, "rot": 111, "speed": 6}]}
1, -1, 0

Puuttuuko tuosta vielä jotain oleellista dataa? Toi viimenen tulostettu numero olis 0 tai 1, riippuen siitä ammutaanko vai ei. Pitäs varmaan olla joku aikaväli lataamiselle, ettei kokoajan vois ampua...

No joo, kunhan mietiskelin. Joku uuden tyyppinen lautapelikin ois tieten kiva.

Muuten: Bottien testaamisen kannalta ois huippu, jos pystys antaan x-määrä omia botteja, jotka ajettas sitten itse pelimottorissa, ja näkis mitä tapahtuu. Lieköhän iso homma toteuttaa?

t0ll0 [06.11.2017 11:19:11]

#

Tuo taistelubotti saa minulta äänen. En tosin ole koskaan näihin osallistunut joten mikä tahansa aihe on minulle uusi. Mielenkiintoa kuitenkin on osallistua.

Miten näitä on yleensä ajettu? Ajoympäristö on tarkkaan speksattu ja niitä mukailevat ohjelmat toimitetaan järjestäjälle joka sitten ajelee niitä? Vähentäisikö vaikka dockeri järjestäjien työtä ja speksausta ja rajapinnat vaikka restinä containerin sisään?

Metabolix [06.11.2017 14:08:30]

#

johku90: Tuo ei vastannut olennaisimpiin kysymyksiin: Mikä se pelimekaniikka tarkalleen on? Miten liikkumiset ja törmäykset lasketaan, missä järjestyksessä, kokonaisluvuilla vai liukuluvuilla, ja miten pyöristetään? Onko seiniä tai muita esteitä? Onko eri aseita, ja miten ne toimivat? Saadaanko ylipäänsä säännöistä sellaiset, että peruskoodari osaa ja jaksaa lähteä yrittämään? Onko peli reaaliaikainen, ja miten varmistetaan tekoälyjen tasapuolisuus häiriötekijöiden suhteen? Vai onko peli vuoropohjainen, ja miten silloin tekoälyn ajankäyttöä rajoitetaan? Millainen kilpailun rakenne ja pisteytys on? 1v1 on perinteisesti helppo ja tasapuolinen, kun voi pelata kaikki otteluparit, mutta useamman pelaajan peleissä on väistämättä enemmän sattumaa mukana.

t0ll0: Voit katsoa aiempia kilpailuja (linkki navigaatiossa). Perinteisesti kilpailuun toimitetaan komentoriviohjelman lähdekoodi, joka myös julkaistaan kisan jälkeen. Mielestäni tärkeä perustaito on ohjelmoida sellainen ohjelma, että se toimii tavallisella kääntäjällä (tai tulkilla) tavallisessa Linuxissa, eli tältä osin mielestäni Docker ja liiallinen virittelyvapaus olisi huono ratkaisu. Lisäksi kisakelpoisen komentoriviohjelman saa tehtyä jo Hello World -taidoilla, mikä helpottaa erityisesti aloittelijoiden osallistumista.

Jos jotain monimutkaista peliä kaivataan, voisi olla helpompaa, että joku tekisi ensin (JS:llä selaimeen) pelin, jossa olisi selvä tekstipohjainen rajapinta tekoälyille ja rajapinta ottelun kulun tallentamiselle ja tallenteen katselulle. Voitaisiin sitten katsoa, miten peli sopii kilpailuun.

Pitkän tauon jälkeen ensimmäinen kisa voisi olla yksinkertaisempi.

t0ll0 [06.11.2017 14:22:30]

#

Alkaa dockerin tapaiset ratkaisut olemaan aika perustaitoja alati kiihtyvässä kehityksessä ;) mutta point taken. Toki onnistuu ja näyttää javakin olleen aina mukana kisoissa niin osallistutaan sen voimin.

johku90 [06.11.2017 14:43:00]

#

Metabolix kirjoitti:

Tuo ei vastannut olennaisimpiin kysymyksiin: jne...

Totta, pitäs vielä speksata lisää. Törmäystarkistuksissa ja liikkumisissa tuskin on paljon epäselvää. Luultavasti liukuluvut ois kätevimmät. Useampia aseita tai seiniä ei kannatane ottaa mukaan yksinkertaisuuden vuoksi. Jos seiniä haluttaisiin, niin varmaan jotain yksinkertaisia ympyröitä tms.

Tuo reaaliaikaisuus onkin vaikeampi juttu. Kaksinpeliin tuo vuoropohjaisuus voisi toimia ihan hyvin. Siihen vain sitten hihavakiolla joku aikarajoitus.

Pisteytyskin järjestyy helposti, varsinkin kaksinpelissä.

Mutta mutta. Tämä ei näytä saavan pelinjärjestäjän suosiota, niin unohdetaan toistaiseksi. Saattasinpa joutessani joskus väsätäkin tuollaisen js kikkareen, mutta ei kannata tähän kilpailuun odotella...

Metabolix [06.11.2017 21:01:25]

#

t0ll0 kirjoitti:

Alkaa dockerin tapaiset ratkaisut olemaan aika perustaitoja alati kiihtyvässä kehityksessä ;)

Niin ehkä, jos koodaa työkseen nettisovelluksia. Monessa hommassa ei tarvitse Dockeriin koskea, ei varsinkaan harrastelijan.

johku90 kirjoitti:

Tämä [taistelupeli] ei näytä saavan pelinjärjestäjän suosiota, niin unohdetaan toistaiseksi.

Kyllä se olisi hauska, mutta sen suunnittelussa ja järjestämisessä on paljon työtä, ja osallistumiskynnys voi myös olla korkea.

t0ll0 [06.11.2017 21:47:51]

#

Metabolix kirjoitti:

Niin ehkä, jos koodaa työkseen nettisovelluksia.

Nyt on jäänyt näkemys containereiden mahdollisuuksista ja sovelluskohteista varsin suppeaksi. Vaikka ymmärrän toki tuon sillä nettisovelluksiin sitä eniten tunnutaan mainostettavan, mutta ei se niihin hommiin rajoitu. /offtopic

Taistelupeliin,
Eikö peliin sopisi "reaaliaikainen" tick-rate järjestelmä. Kysytään kaikilta boteilta mitä haluaa tässä tilanteessa tehdä, jatketaan pelimoottoria uusilla arvoilla n millisekuntia ja jälleen kysytään boteilta miten haluavat nyt reagoida.

Turha tehdä liian monimutkaista. Yksi ase, alus on pelkkä neliö, alukset ei törmää toisiinsa, reunaseinät joista ponnahtaa takaisin.

Toki tämä vaatii varmasti paljon enemmän suunnittelua kuin vuoropohjaiset kilpailut.

Metabolix [06.11.2017 22:51:44]

#

t0ll0 kirjoitti:

Nyt on jäänyt näkemys containereiden mahdollisuuksista ja sovelluskohteista varsin suppeaksi.

On varmasti monia käyttöjä, ja itsekin olen askarrellut mm. systemd-nspawnilla hiekkalaatikkoa varten. Silti uskon, että sunnuntaikoodari ei käytä containeria henkilökohtaisten leluskriptien väsäämiseen mutta voisi kuitenkin osallistua jännään kilpailuun täällä.

t0ll0 kirjoitti:

Eikö peliin sopisi "reaaliaikainen" tick-rate järjestelmä.

Se on käytännössä sama asia kuin vuoropohjainen kilpailu. Reaaliaikaisella tarkoitan sellaista oikeasti reaaliaikaista, että myös ihminen voi kivasti pelata tekoälyä vastaan. Viivapelikilpailu (vuonna 2010) oli jo pelinä reaaliaikainen ja onnistui teknisesti ihan hyvin. Järjestämisen kannalta näissä ei ole juuri muuta eroa kuin se, että reaaliaikainen peli on alttiimpi häiriöille. Toisaalta häiriöt vähenevät, kun tick pitenee.

t0ll0 kirjoitti:

Yksi ase, alus on pelkkä neliö, alukset ei törmää toisiinsa, reunaseinät joista ponnahtaa takaisin.

Nyt alkaa olla realistista. Mutta täytyy katsoa asiaa.

ari kood [07.11.2017 09:04:35]

#

Saisko tästä jotain ideaa?
http://ants.aichallenge.org/

johku90 [08.11.2017 12:07:35]

#

No niin, menin sitten kuitenkin kokeilemaan sitä taistelubottihässäkkää :)

https://gitlab.com/Tuomela/Taistelubotit

Huom. metabolix, ei ole tarkoitus mitenkään painostaa tähän vaihtoehtoon, mutta kun nyt satuin tämän tekemään niin laitan tännekin.

Ja joo, siellä on varmaan bugeja yms. kun nopeasti tein, mutta tuosta vois lähtä kehittelemään.

Edit: jahas, näköjään gitlab hukkaa ääkköset readmestä. Koittakaa kestää...

Metabolix [08.11.2017 20:09:05]

#

johku90 kirjoitti:

No niin, menin sitten kuitenkin kokeilemaan sitä taistelubottihässäkkää :)

Ihan hyvä lähtökohta. Varmasti harkitaan tätä ainakin jossain vaiheessa.

johku90 kirjoitti:

Edit: jahas, näköjään gitlab hukkaa ääkköset readmestä. Koittakaa kestää...

Ehkä jos käyttäisit UTF-8-enkoodausta? ISO-8859-1 ja Windows-1252 ovat 90-lukua.

jone2712 [09.11.2017 19:46:33]

#

"botti" on jotain slangia, eikä kerro yhtään mitään ainakaan minulle.

Olisiko se jätkänshakki sittenkin. Vanhat pelaajat voivat kehittää pläjäystään edelleen ja uudet tulokkaat tietävät, mikä on pelin henki.

Jos jotain "botteja" pitää ruveta koodaamaan - ja jos tehtävän annossa käytetään bottislangia - osallistumisen ja pelin koodaamisen voi unohtaa samantein.

Grez [09.11.2017 20:37:38]

#

jone2712 kirjoitti:

"botti" on jotain slangia, eikä kerro yhtään mitään ainakaan minulle.

Olisin kyllä eri mieltä että se olisi slangia, tai sitten varmasti PHP, tavu, netti yms. on myös slangia ja minulta ainakin hukkuu, mitä haittaa tuollaisen slangin käyttämisestä on. Aika vaikea täällä varmaan muuten mistään on keskustella.

https://fi.wikipedia.org/wiki/Botti:

Botti tarkoittaa tietokoneohjelmaa, joka osaa toimia itsenäisesti sille määriteltyjen toimintaohjeiden puitteissa.

Timmmo [13.11.2017 01:51:51]

#

Korttipeli olisi myöskin kiva ja melko simppeli kilpailun aihe. Satunnaisuuden vaikutus voidaan poistaa siten että kaikissa peleissä molemmilla pelaajilla peluutetaan samat kädet.

Korttipeleihin olennaisesti liittyvä piilotetun informaation ongelma tuo algoritmeihin omat haasteensa, joita minimaxilla ei voi ratkaista. Eli siinä mielessä olisi ihan mielenkiintoinen kilpailun aihe.

InnostunutSonni [13.11.2017 17:29:24]

#

Olisiko hyvä aihe tehdä riimikone, joka osaisi keksiä sanoille riimejä? Toki saattaa tarvita vaikeutussääntöjä, jottei sanoja voi esimerkiksi suoraan syöttää koodiin.

E1ss [14.11.2017 17:46:15]

#

Miten olisi ihan perus texas holdem. Kaikki tekisisvät botin jotka lähetettäisi metabolixille ja hän pyörittäisi pokeri turnauksen. Tällöin emme voisi käyttää valmiita ratkaisuja tai itse pelata. Koneet tekisivät kaiken siten että näkisimme live streamina kaikkia pöytiä. Voin auttaa siinä jos kiinnostaa koska kokemusta pokerista on kertynyt paljon.

Timmmo [14.11.2017 23:20:47]

#

^ Open source pokeriengineitä on kyllä maailmalla jonkinverran, joten kiusaus vilkaista mallia valmiista ratkaisusta on suuri. Jokin sellainen korttipeli, jolle ei löydy valmiita tekoälyjä maailmalta, olisi haastavampi.

Tegu [14.11.2017 23:23:44]

#

Livestriimi voisi tosiaan olla hauska. Olen verkossa olevissa game jameissa huomannut, että oman pelinsä näkeminen jonkun pelivideolla tai striimissä on hauskaa. Striimissä oman mausteensa tuo myös chatti, jossa tapahtumia voi kommentoida. Ehkäpä sama toimisi myös tekoälykilpailussa?

Hauskuus voi tosin riippua pelistä ja vaikkapa pelien määrästä. Jos kaikki botit kilpailevat toisiaan vastaan, niin pelejä kertyy äkkiä paljon. Ehkä liian paljon järkevästi katsottavaksi? Kuten yllä mainittiin, niin ainahan voisi näyttää useampaa peliä samaan aikaan, mutta menisikö se liian sekavaksi? Toisaalta silloin olisi ehkä todennäköisemmin katsottavaa, vaikka joku ottelu olisikin tylsä, eikä siinä tapahtuisi paljoa. Eräs vaihtoehto olisi myös jonkinlainen turnausjärjestelmä, joka voisi tuoda lisäjännitystä. Mutta miten se toteutettaisiin kaikille reilusti?

Muitakin vaihtoehtoja on varmaan olemassa.

c00d4r1 [15.11.2017 19:31:03]

#

InnostunutSonni kirjoitti:

Olisiko hyvä aihe tehdä riimikone, joka osaisi keksiä sanoille riimejä? Toki saattaa tarvita vaikeutussääntöjä, jottei sanoja voi esimerkiksi suoraan syöttää koodiin.

Runoileva ohjelma voisi kyllä olla hauska aihe kilpailulle, eikä välttämättä niin vaikea kuin esim. säveltävä.

Metabolix [17.12.2017 22:25:30]

#

Koska kilpailu on kai parempi kuin ei kilpailua, laitoin nyt mainoksen. Toivottavasti säännöt ja esimerkit ym. ehtivät ennen kisan alkua. ;) Tiedossa on nyt melko perinteinen lautapelikilpailu, mutta muut ehdotukset on kyllä huomioitu, ja ehkä kisoja saadaan jatkossa vähän tiheämmin.

E1ss kirjoitti:

Koneet tekisivät kaiken siten että näkisimme live streamina kaikkia pöytiä.

Ei ole mielekästä järjestää kilpailua niin, että siitä saisi jotain samanaikaisia live streameja. Koska pelit ajetaan yhdellä koneella, ne kannattaa ajaa yksitellen, koska se on nopeinta ja tehokkainta ja takaa tekoälyille riittävät resurssit. Pelejä voi sitten katsella jälkikäteen, jos haluaa. Voidaan kyllä järjestää niistä viivästetty ”live stream”, jos se kaikkia hirmuisen paljon kiinnostaa ja jännittää, mutta itse en pidä sitä kovin olennaisena.

fergusq [18.12.2017 01:35:50]

#

c00d4r1 kirjoitti:

Runoileva ohjelma voisi kyllä olla hauska aihe kilpailulle, eikä välttämättä niin vaikea kuin esim. säveltävä.

Runoileva ohjelma on erittäin paljon vaikeampi kuin säveltävä ohjelma. Tietokoneesta saa suhteellisen helposti ulos hyvältä kuulostavia kappaleita, mutta on äärimmäisen vaikeaa ellei mahdotonta saada tietokoneohjelmaa ymmärtämään suomea (tai mitään muuta kieltä) hyvin ja sen lisäksi ymmärtämään ihmisten maailmaa siten, että runojen sisällössä olisi mitään järkeä. Parhaat tulokset saa tällä hetkellä tietääkseni ottamalla valmiin runopohjan ja korvaamalla sen aukkoihin satunnaisia sanoja (esimerkki), mutta näin luodut runot eivät ole kovin omaperäisiä eivätkä kovin järkeviäkään.

Metabolix [20.12.2017 18:15:58]

#

Jos joku HTML- ja JS-taitoinen kokee kutsumusta auttaa järjestelyissä, nyt olisi siihen mahdollinen paikka. Tarvittaisiin nimittäin graafinen käyttöliittymä kisan testausohjelmalle (ja pelille). Mennään tyypillisellä koodausprojektin aikataululla eli ”valmista viimeistään perjantai-iltana”.

Speksit:

Saa improvisoida, jos on parempia näkemyksiä, mutta mielellään yksinkertainen ja selvä tuotos. Myös koodin tulee olla yksinkertaista ja selvää, jotta pystyn tekemään siihen tarvittavat muutokset.

Nyt on ainakin speksattu aika paljon, sehän on jo puolet työstä. Jos ei kukaan ehdi auttaa, koodaan tietysti jonkin putkamaisen ruman kikkareen itse. :D

Metabolix [23.12.2017 01:44:59]

#

Yllättäen jouduin spekseistä huolimatta koodaamaan itse. Hieman kiire tuli, jälki on sen mukaista, mutta nyt on kilpailu. :)


Sivun alkuun

Vastaus

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

Tietoa sivustosta