Kirjautuminen

Haku

Tehtävät

Kilpailu

Ohjelmoi tekoäly!
Aikaa 4.2. saakka.

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

Sivut:

Sivu 1 / 2

Sivun loppuun

Metabolix [22.12.2018 01:10:00]

Lainaa #

Vuodenvaihteessa 2018–2019 pidetään jälleen ohjelmointikilpailu.

Tässä tekoälykilpailussa pelataan peliä, jossa kerätään lukuja ruudukosta, ja suurimman pistemäärän kerännyt voittaa.

Tarkemmat säännöt ovat kilpailusivulla, ja peliä (ja omaa tekoälyään) voi kokeilla testaussivulla. Mukana on perinteiseen tapaan esimerkkiohjelma muutamalla yleisimmällä ohjelmointikielellä.

Tervetuloa kilpailuun!

Kilpailun logosta kiitos Johannes Tuomelalle.

TapaniS [22.12.2018 12:23:30]

Lainaa #

Onpas jälleen tehty hieno toteutus ja upea peli, joka niin yksinkertainen, että sen tajuaa melkein kertalukemalla ja kuitenkin niin vaativa tehdä voittava ohjelma, että jyvät erottuvat joukosta!

TaSman on jo kehitteillä ja pisteitä ei laudalle jätetä!

Esimerkkiohjelma (java) toimii hyvin, kun kopioin molemmat .class -tiedostot samaan kansioon, missä KilpailuProxy.exe sijaitsee.

jo123 [22.12.2018 16:33:02]

Lainaa #

Ymmärsinkö nyt ohjeet oikein, että Pythonissa ei esimerkiksi numpy -kirjastoa voi käyttää?

Edit: Ja jatkokysymys: Millä jakaumalla pelilauta arvotaan?

Metabolix [22.12.2018 18:07:41]

Lainaa #

jo123: Kun ohjelmat tehdään ilman kirjastoja, niitä voi olla realistista kääntää myös JavaScriptille ja tuoda kisan jälkeen selaimella kaikkien testattaviksi.

Pelilaudan arvonnassa joka ruudun kohdalla (lähes) tasaisesti jakautunut satunnaismuuttuja 0 ≤ x < 1 korotetaan kolmanteen potenssiin, kerrotaan 10:llä ja pyöristetään alaspäin. (Korjaan tämän juuri testaussivulle.)

jo123 [22.12.2018 18:32:11]

Lainaa #

Metabolix kirjoitti:

(22.12.2018 18:07:41): jo123: Kun ohjelmat tehdään ilman kirjas­to­ja...

Eli jos teen koodin JavaScriptillä, voin käyttää kirjastoja?

Tai jos teen koodia, joka ei kuitenkaan käänny JavaScriptille... :P

Grez [22.12.2018 19:20:57]

Lainaa #

jo123 kirjoitti:

Tai jos teen koodia, joka ei kuitenkaan käänny JavaScriptille... :P

Mitenköhän se käytännössä onnistuu?

Metabolix [22.12.2018 19:45:13]

Lainaa #

jo123: Jospa keskittyisit hyvän idean kehittämiseen. Harvoin se käytännön toteutus jää mistään kirjaston käytöstä kiinni.

jo123 [22.12.2018 20:17:54]

Lainaa #

Metabolix kirjoitti:

jo123: Jospa keskittyisit hyvän idean kehittämiseen. Harvoin se käytännön toteutus jää mistään kirjaston käytöstä kiinni.

Mietin siis lähinnä, jos ehtisi tehdä tässä jouloloman aikana jonkinlaisen Deep Q Learning toteutuksen peliin. Neuroverkot vaativat toki koulutukseen suhteellisen paljon laskentatehoa ja aikaa, mutta suorittamiseen melko vähän (muistiraja tosin rajoittaa verkon kokoa rajusti). Periaatteessa neuroverkot ovat pelkkää lineaarialgebraa, joten suorittaminen onnistuu tietysti kielellä kuin kielellä verrattain helposti. Tätä kuitenkin helpottaisi kovasti, jos saisi kasan lineaarialgebran funktioita käyttöön.

Suunnitelmana oli käyttää neuroverkon kouluttamiseen Python+Tensorflow+Keras. Tällöin sen suorittaminen olisi toki helpointa, jos saisi Pythonin varustettuna TensorFlow:lla. Tuo JavaScript -ehdotus liittyi siihen, että voisin tarvittaessa toteuttaa kilpailuversion tällä kirjastolla: https://js.tensorflow.org/ (verkko toki koulutettu ensin Pythonilla).

Ja Grezlle: En tiedä. Kaikki mahdolliset algoritmit on tietysti toteutettavissa JavaScriptillä. Voi olla, että joissakin tapauksissa kääntäminen JavaScriptille ei olisi silti suoraviivaista tai että syntynyt koodi olisi liian tehotonta. Tai sitten näin ei ole, en ole mikään asiantuntija.

Metabolix [22.12.2018 21:39:51]

Lainaa #

jo123 kirjoitti:

Suunnitelmana oli käyttää neuroverkon kouluttamiseen Python+Tensorflow+Keras.

TensorFlow ei varmastikaan ole kisassa käytettävissä, ja myöskään sen JS-version vaatimukset eivät kisaympäristössä täyty. Jos nyt neuroverkon toteutus on tästä kiinni, niin Python 3:ssa numpy voi olla hyväksyttävä.

jalski [22.12.2018 22:50:27]

Lainaa #

Olisikohan tällä kertaa näin joulun alla mahdollisuus saada 8th kilpailussa sallittujen ohjelmointikielten listalle?

Metabolix [22.12.2018 23:46:43]

Lainaa #

jalski, 8th ei ole mahdollinen vaihtoehto. Kyseessä on suljetun lähdekoodin ohjelma, jonka ilmaisversionkin lataamiseksi pitää hyväksyä lisenssi ja antaa tietojaan yritykselle. Tällaista en ota kisaympäristöön. (Eikä nyt tukita tätä keskustelua ylimääräisillä 8th-koodeilla, kiitos.)

decoy [23.12.2018 14:52:59]

Lainaa #

Upean oloinen peli, antaa mukavasti ajateltavaa jo pelkällä olemassa olollaan.

koska minulla menee noin kymmenen vuotta ennen kuin pystyn ottamaan osaa niin kovasti toivoisin että tuon peli jäisi pelattavaksi.

luulisi että muutama kisaajan koodikin voisi lahjottautua tähän tarkoitukseen itsenäisesti. ;) heh.

täällä yrittänyt kiinnostua jälleen elämästä, ja ohjelmointi putka tehtävineen ollut kiva paikka siihen.

mukavaa kaikkea hyvää jokaiselle.

jalski [23.12.2018 21:11:21]

Lainaa #

Metabolix kirjoitti:

jalski, 8th ei ole mahdollinen vaihtoehto.

Harmi, en taida viitsiä osallistua kilpailun nykyisellä ohjelmointikieli valikoimalla. Olisi ollut kiva kokeilla graph datatyyppiä apuna tässä tehtävässä.

Testiohjelman syötteessä on muuten BOM mukana. Tämä voisi olla hyvä mainita, ettei aiheuta turhaa hämminkiä osalle osallistujista.

Metabolix [24.12.2018 00:53:37]

Lainaa #

jalski kirjoitti:

Testiohjelman syötteessä on muuten BOM mukana.

No ei varmasti ole.

jalski [24.12.2018 01:14:20]

Lainaa #

Metabolix kirjoitti:

jalski kirjoitti:

Testiohjelman syötteessä on muuten BOM mukana.

No ei varmasti ole.

Luin syötteen pelaajien lukumäärästä, yritin suoraan muuttaa sitä numeroksi ja sain vastaukseksi null. Tulostin kokeeksi syötteen tiedostoon ja otin siitä heksa dumpin:

C:\temp>type debug.txt
 2
C:\temp>"c:\users\Jali\desktop\hexdump\hexdump.exe" /debug.txt
00000000: EF BB BF 32                                        | ...2

Ohjelma toimii testiohjelman kautta oikein poistamalla syötteiden alusta 0xEFBBBF tavut suorittamalla: "\xEF\xBB\xBF" "" s:replace. Kokeilemalla ohjelmaa komentoriviltä suoraan ilman testiohjelmaa tämä ei ole tarpeen.

Metabolix [24.12.2018 09:17:34]

Lainaa #

Epäilen, että kuvaamasi vika johtuu jollain tavalla käyttämästäsi kielestä. Testausjärjestelmä on ihan sama kuin aiemmissakin kilpailuissa, ja kenelläkään muulla ei ole esiintynyt vastaavaa ongelmaa. Lisäksi esimerkiksi seuraavanlainen C:llä tehty ohjelma näyttää ihan oikeaa dataa:

for (int c; (c = getchar()) != EOF;)
	fprintf(stderr, "%02x%c", c, c == '\n' ? '\n' : ' ');

jsbasic [25.12.2018 23:38:54]

Lainaa #

Miten tuo aikaraja? Hylätäänkö ajan ylittäneet tekoälyt kokonaan (DNF), vai jääkö siihen asti kerätyt luvut lopulliseksi tulokseksi? Entä näkyykö jossain kulutettua aikaa? Tuo

"timeUser": 0.07

ei varmasti tarkoita kulutettua kokonaisaikaa?

Metabolix [26.12.2018 00:48:29]

Lainaa #

Aikarajan ylittävä ohjelma ei saa kyseisestä pelistä pisteitä, ja jos raja ylittyy runsaasti, ohjelman peli keskeytetään, jottei se hidasta muiden kilpailua.

Ohjelman kokonaisaika näkyy tulosteen kohdassa time (= timeUser + timeSystem). Myös KilpailuProxy tulostaa ajankäytön omaan komentorivi-ikkunaansa.

(Näköjään aiempi KilpailuProxy.exe käytti Windowsissa kielen mukaista desimaalierotinta, jolloin tulos ei välttämättä näkynyt testaussivulla. Korjasin tämän, uusi versio KilpailuProxysta on nyt ladattavissa testaussivun linkistä.)

On syytä muistaa, että ajankäyttö omalla koneella ei vastaa välttämättä ajankäyttöä minun koneellani, ja siis ohjelma kannattaa tehdä riittävän nopeaksi. Ajankäytön ennakointiin voi käyttää erilaisia CPU Benchmark -sivustoja.

jsbasic [26.12.2018 10:37:58]

Lainaa #

Entä Kilpailuproxyn python-versio? Minulla on koodissa sekunnin viive

sleep(1)

, mutta ajaksi ilmoitetaan 0.20 s.

"time": 0.2

Grez [26.12.2018 11:00:01]

Lainaa #

jsbasic kirjoitti:

Minulla on koodissa sekunnin viive

sleep(1)

"The actual suspension time may be less than that requested because any caught signal will terminate the sleep() following execution of that signal's catching routine."

En sinänsä tiedä onko tuosta kyse.

jsbasic [26.12.2018 13:16:48]

Lainaa #

Niin, ilmeisesti kyse on näistä moniajon kommervenkeistä, tai sitten sleepissä kulunutta aikaa ei lasketa ohjelman omaksi ajaksi. Tein tekoälylle itsenäisen aikalaskurin, jossa kyllä näkyy sleepissä kulunut aika.

jalski [26.12.2018 14:01:27]

Lainaa #

Vaikka en saakaan osallistua, niin tein kokeeksi viereisistä ruuduista isoja pisteitä ahnehtivan "tekoälyn". Päädyin toteuttamaan oman graafi toteutuksen, mistä saan suoraan mahdolliset siirrot kartalla ja kyseisen siirron suunnan ja pistemäärän. Nykyiseen toteutukseen tämä on hiukan liian hieno, mutta helppo pohja tulevalle jatkokehitykselle. Nykyisellään alkupeli sujuu hyvin, mutta kun ympärillä on paljon tyhjää niin menee heikommin.

Käännetyt Windows ja linux binäärit täältä harjoitusvastustajaksi.

Metabolix [26.12.2018 15:41:16]

Lainaa #

Kuten säännöissä kai lukee, suoritusajaksi lasketaan ohjelman aktiivinen suoritinaika ja siis ei esimerkiksi nukkumista tai syötteen odottamista. Tämä on tavallinen tieto, jonka saa luotettavasti käyttöjärjestelmältä ilman mitään omia mittausviritelmiä. Linuxissa ohjelman suoritusaikaa voi tutkia esimerkiksi komentorivillä time-komennolla.

Nukkuminen on tietysti häiritsevää kilpailun kulun kannalta, joten sellaista ei pidä omaan tekoälyyn laittaa.

jalski [27.12.2018 22:42:44]

Lainaa #

Mod. siirsi toisesta keskustelusta:

jsbasic kirjoitti:

Poimintakilpailu on oikein onnistunut idea, vaikka sen näkemistä ei ole suoranaisesti rajoitettu. Joutuuhan tekoäly miettimään pelimaailmaa nykyiselläänkin, jotta se osaisi muodostaa optimaaliset reitit.

Poimintakilpailun hienous on, että siinä voi pärjätä yksinkertaisella toteutuksella, mikä suunnistaa automaattisesti ilman siirtojen laskemista ja poimii matkalla numeroita "optimoimalla" isojen numeroiden ja numeroryhmien määrien mukaan.

Oma "tekoälyni" toimii jo kohtuullisesti. Vaatii tosin vielä hiukan hienosäätöä, jotta jättää joitain tyhmyyksiä tekemättä ja tällä hetkellä voi vielä jäädä "jumiin" joissain tilanteissa. Tähän olen miettinyt jo korjauksen valmiiksi.

Tältä meno näyttää nyt ilman siirtojen laskemista.

jsbasic [28.12.2018 18:27:26]

Lainaa #

Tuo dropboxista löytynyt tekoälysi oli vielä helppo vastus. Kannattaa muuten laittaa versionumero, jotta tietää mihin viittaa.

os [28.12.2018 20:43:20]

Lainaa #

Mielenkiintoinen kilpailu, kiitoksia Metabolixille järjestämisestä! Tällä kertaa ehdin varmaankin jopa osallistua.

Kontribuoin pari obfuskoitua harjoitusvastustajaa kirittämään kisaa:

1. osvastus1.js Voittaa jalskin harjoitusvastustajan mutta helpohko (?) voittaa ihmispelaajana
2. osvastus2.js Voittaa edellisen vastustajan ja minut joka kerta

Näitä pitäisi voida ajaa Nodella (testasin v. 8.11.4:lla Debianilla) näin

python KilpailuProxy.py node /path/to/osvastus2.js

Hyvä kysymys, mikä olisi sopivin tapa jakaa harjoitusvastustajia jakamatta varsinaisesti lähdekoodia. Tämä vaikutti vähemmän hasardilta kuin jalskin binäärit (jotka kuitenkin ajoin, toivottavasti eivät olleet malwarea :D)

jalski [28.12.2018 21:11:59]

Lainaa #

jsbasic kirjoitti:

Tuo dropboxista löytynyt tekoälysi oli vielä helppo vastus. Kannattaa muuten laittaa versionumero, jotta tietää mihin viittaa.

Tuossa ei vielä ollut varsinaisesti älyä mukana, vaan oli lähinnä testi graafi toteutukselle. Graafilta kysyttiin sijainnin naapuri solmut ja vastauksena saatiin lista solmuista suuntineen ja pistearvoineen. Lista sortattiin ja valittiin se missä oli suurin pistearvo. Jos ympärillä oli pelkkää tyhjää, niin arvottiin suunta.

Nykyinen versio ei käytä satunnaisuutta ollenkaan ja suunnistaa automaattisesti potentiaalien avulla.

Metabolix [28.12.2018 21:59:22]

Lainaa #

os kirjoitti:

Hyvä kysymys, mikä olisi sopivin tapa jakaa harjoitusvastustajia jakamatta varsinaisesti lähdekoodia.

Jos resurssit eivät ole tiukalla ja luottamusta KilpailuProxyyn riittää, nykyisellä systeemillä voisi kai laittaa ohjelman KilpailuProxylla omalle palvelimelle julkisesti tavoitettavaksi.

L2-K2 [29.12.2018 10:09:57]

Lainaa #

os kirjoitti:

(28.12.2018 20:43:20): Mielen­kiin­toinen kilpailu, kiitoksia...

Molemmat linkit johtavat samaan tiedostoon? Ainoastaan tiedoston nimi vaihtuu, pelitapa ja ainakin md5-tiiviste ovat samat molemmille.

Molemmat tekoälyt esiintyivät siis nimellä "osvastus1" pelissä, ja lisäksi kun ainakin välillä ihmiselle häviävä oma yksinkertainen "tekoälyni" voitti tuon jälkimmäisen suoraan erin 4–0, niin alkoi epäilyttää, että ei tainnut tulla oikea äly peliin.

PS. Pitäisi varmaan opetella kirjoittamaan nopeampaa pythonia, tai sitten vaan muuntaa koodi C++ tai edes JS. 8–20 sekuntia saan tyypillisen pelin CPU-ajaksi. Haluaako joku suosittella hyvää python–javascript kääntäjää?

PPS. Kolmen aidosti erilaisen pelaajan samanaikainen peli toimi – kuten olettaa saattoi – tasaisemmin. Ihminen, osvastus1 ja omani älyni pelasivat tasan 1–1–1. Käteviä nuo spontaanit liittoumat pistejohtajaa vastaan.

os [29.12.2018 11:05:05]

Lainaa #

L2-K2 kirjoitti:

Molemmat linkit johtavat samaan tiedostoon? Ainoastaan tiedoston nimi vaihtuu, pelitapa ja ainakin md5-tiiviste ovat samat molemmille.

Olet oikeassa. Olin vahingossa laittanut saman tiedoston molempiin. osvastus2.js-Gist on nyt korjattu.

EDIT: vs.ps.: Minulla ei ole kokemusta Python-JS-kääntäjistä. Nuo omat teköälyni on kirjoitettu C++:lla ja käännetty Emscriptenillä Javascriptiksi... jota Node näyttäisi suureksi hämmästyksekseni ajavan melkein yhtä nopeasti kuin natiivikoodiksi käännettyä C++:aa. Voi myös olla, että jos tekoäly olisi alunperin kirjoitettu JS:llä niin nopeus ei välttämättä olisi yhtä hyvä

Jaska [29.12.2018 12:21:09]

Lainaa #

os kirjoitti:

EDIT: vs.ps.: Minulla ei ole kokemusta Python-JS-kääntäjistä.

Ei kai tällaista voikaan tehdä ainakaan täydellisesti. Esimerkiksi Pythonissa voi kirjoittaa

const = 1

mutta Javascriptissä const on varattu sana. Mutta ehkä kääntäjän tekemiseen riittää, että jotkut toiminnallisuudet toimivat Pythonilla ja siitä käännetyllä JS:llä.

jsbasic [30.12.2018 14:13:30]

Lainaa #

os kirjoitti:

Nuo omat teköälyni on kirjoitettu C++:lla ja käännetty Emscriptenillä Javascriptiksi... jota Node näyttäisi suureksi hämmästyksekseni ajavan melkein yhtä nopeasti kuin natiivikoodiksi käännettyä C++:aa. Voi myös olla, että jos tekoäly olisi alunperin kirjoitettu JS:llä niin nopeus ei välttämättä olisi yhtä hyvä

Mielenkiintoista. Emscripten kääntää C++-koodin asm.js-koodiksi, joka on javascriptin "alajoukko". Tai lieneekö se javascriptiä laisinkaan, koska siitä on poistettu dynaamisuus ja roskienkeruu... Olisiko se nyt edes järkevää kääntää natiivikoodia ylemmälle tasolle?

Wikipedia: Asm.js#Performance

Oma tekoälyni on tällä hetkellä python-koodia, mutta yritän vielä luoda erillisen C++-version, jonka voisin kääntää asm.js-koodiksi, ja julkistaa täällä harjoitusvastustajana...

TapaniS [30.12.2018 20:48:26]

Lainaa #

os kirjoitti:

(28.12.2018 20:43:20):
1. osvastus1.js Voittaa jalskin harjoitusvastustajan mutta helpohko (?) voittaa ihmispelaajana
2. osvastus2.js Voittaa edellisen vastustajan ja minut joka kerta

Näitä pitäisi voida ajaa Nodella (testasin v. 8.11.4:lla Debianilla)

Saako näitä toimimaan win -ympäristössä? Harjoitusvastustajaa tarvittaisiin! Miten js-tiedostot saa pelittämään KilpailuProxyllä?

os [30.12.2018 21:24:33]

Lainaa #

TapaniS kirjoitti:

Saako näitä toimimaan win -ympäristössä? Harjoitusvastustajaa tarvittaisiin! Miten js-tiedostot saa pelittämään KilpailuProxyllä?

En ole testannut, mutta kyllä pitäisi saada. Eli asenna ensin Node.js ja sitten aja

KilpailuProxy.exe node osvastus2.js

olettaen että osvastus2.js on samassa kansiossa.

Jaska: Pythonia voi kyllä kääntää C-kieleksi (https://cython.org/, http://nuitka.net/) ja JavaScriptiksi (https://www.transcrypt.org/). Kielten erilaiset varatut sanat tuskin ovat kääntäjille merkittävä ongelma. Eihän muuttujan nimiä esimerkiksi tarvitse säilyttää ollenkaan, jos tavoitteena ei ole ihmisluettava koodi, vaan esim. asm.js.

L2-K2 [30.12.2018 22:06:09]

Lainaa #

os kirjoitti:

(29.12.2018 11:05:05): ”– –” Olet oikeassa. Olin vahingossa laittanut saman...

Paljon johdonmukaisempi tulos oikean version kaksi kanssa: "osvastus2" >> oma ykkösversioni älystä >> "osvastus1".

Pitänee siis vetää mietintämyssy selvästi syvemmälle ja pohtia joku oikeasti älykäs tapa valita siirtonsa.

os kirjoitti:

TapaniS kirjoitti:

Saako näitä toimimaan win -ympäristössä? Harjoitusvastustajaa tarvittaisiin! Miten js-tiedostot saa pelittämään KilpailuProxyllä?

En ole testannut, mutta kyllä pitäisi saada. Eli asenna ensin Node.js ja sitten aja

KilpailuProxy.exe node osvastus2.js

olettaen että osvastus2.js on samassa kansiossa.

Tämä toimii. Testasin siis juuri kyseisellä yhdistelmällä, ja toki "..\" -jne. jos ja kun ei halua kopioida noita älyjä kilpailuproxyn kanssa samaan kansioon tai säätää komentokehotteen polun kanssa.

TapaniS [30.12.2018 22:13:06]

Lainaa #

Joo, kiitos paljon! Lähti toimimaan. TaSman jää vielä jälkeen, mutta pitää säätää lisää ...

jalski [30.12.2018 22:30:21]

Lainaa #

TapaniS kirjoitti:

Joo, kiitos paljon! Lähti toimimaan. TaSman jää vielä jälkeen, mutta pitää säätää lisää ...

Oma yksinkertainen kehitysversioni jää osvastus2:sesta yleensä noin 100-200 pisteen päähän erässä. Täytyy säätää hiukan arvoja ja kokeilla lisätä pari juttua...

Tegu [31.12.2018 16:16:29]

Lainaa #

Hauska kilpailu, etenkin jos pelaajia oikeasti tulee laudalle suunnilleen toista kymmentä samanaikaisesti. Kokeilin 64 pelaajaa samaan aikaan, ja yhtäkkiä tilaa onkin reilusti vähemmän, ja kaikkialla tapahtuu. Mielenkiintoinen twisti, kun kovin pitkiä suunnitelmia ei varmaan ihan helposti saa tehtyä? Luultavasti käyttäytyminen tiiviissä usean pelaajan ympäristössä ratkaisee enemmän kuin kaksintaistelukokeilut.

Tässä yksi tulos, mutta satunnaisuus tuntui vaikuttavan aika paljon. Pitäisi varmaan olla joku automatisoidumpi testipenkki, jos vaan jaksaisi kyhäillä. https://i.imgur.com/EhiDljO.png

Tällä kertaa halusin opetella Rustia, ja tuo onkin toinen Hello Worldia pidempi ohjelmani sillä (toinen oli yksi Advent of Coden päivä). Räpellys on sen mukaista.

En kehdannut kysyä tätä ennen kuin oli jotain valmista, mutta olisiko mahdollista saada Rust sallittujen kielien joukkoon (käyttämäni versio on 1.31.1)? :) Ei toki välttämätöntä, jos se aiheuttaa kohtuutonta vaivaa (esim. jos tarkoitus on käännellä selaimessa pyöriväksi).

jsbasic [31.12.2018 19:12:40]

Lainaa #

Tegu kirjoitti:

Pitäisi varmaan olla joku automatisoidumpi testipenkki, jos vaan jaksaisi kyhäillä.

Harmi että socket-ohjelmointi ei ole minun alaani. Miten tuollaiseen osoitteeseen (ws://localhost:50001/kilpailu) pitäisi käydä käsiksi? Lisäksi tuo Kilpailuproxyn ja Poimintapelin välinen rajapinta ei luonnollisesti ole avoin, kuten Kilpailuproxyn ja tekoälyjen rajapinta.

Penkin voisi toteuttaa unix-putkena, mutta 64 kilpailijaa putkessa olisi jo ajatuksena erikoinen.

TapaniS [01.01.2019 10:02:49]

Lainaa #

Ohessa TaSman8 harjoitusvastustajaksi. Tämä on toteutettu Javalla ja aika tasaväkinen osvastus2:n kanssa. Ohjelma tutkii siirtoja 8 vuoroa eteenpäin ja valitsee parhaimman jatkon. Lopulliseen versioon on kuitenkin tulossa huomattavia parannuksia, joita en vielä voi paljastaa ...

Metabolix [01.01.2019 18:04:53]

Lainaa #

jsbasic kirjoitti:

Miten tuollaiseen osoitteeseen (ws://...) pitäisi käydä käsiksi?

WebSocketilla.

jsbasic kirjoitti:

Lisäksi tuo Kilpailuproxyn ja Poimintapelin välinen rajapinta ei luonnollisesti ole avoin, kuten Kilpailuproxyn ja tekoälyjen rajapinta.

Ai mikä rajapinta ei ole avoin? Mielestäni WebSocket-rajapinta on aivan täysin avoin, ja mitään muuta dataa ei lähetetä kuin kilpailuohjeiden mukaisia viestejä ja lopussa ajankäyttötiedot.

Tegu kirjoitti:

Pitäisi varmaan olla joku automatisoidumpi testipenkki, jos vaan jaksaisi kyhäillä.

Onko sinulla jokin idea, jonka voisi turvallisesti, hyödyllisesti ja kohtuullisella vaivalla lisätä testaussivulle myös tulevia kilpailuja ajatellen?

Tällä hetkellä usean tekoälyn pelin vakiosiemenellä saa helposti aloitettua, kun laittaa testaussivun Katselu-osaan dataa, jossa on replayn sijasta osoitteita:

{
  "identifier": "2018-poimintapeli",
  "boardSeed": 1234,
  "addresses": [
    "ws://localhost:50001/kilpailu",
    "ws://localhost:50002/kilpailu",
    "ws://localhost:50003/kilpailu"
  ]
}

Tegu kirjoitti:

Olisiko mahdollista saada Rust sallittujen kielien joukkoon?

Rust onnistuu.

jalski [01.01.2019 20:11:29]

Lainaa #

Metabolix kirjoitti:

Tegu kirjoitti:

Olisiko mahdollista saada Rust sallittujen kielien joukkoon?

Rust onnistuu.

Tegu, onneksi Rust ei ole yksi käyttämistäni ohjelmointikielistä. Muuten olisi tuokin ollut mahdotonta...

Metabolix [01.01.2019 20:23:43]

Lainaa #

jalski kirjoitti:

Tegu, onneksi Rust ei ole yksi käyttämistäni ohjelmointikielistä. Muuten olisi tuokin ollut mahdotonta...

jalski, tuo on jo röykeää. Olet pyytänyt ja saanut aiemmin mahdollisuuden Infernon Limboon (jonka virittelyyn meni tunteja, ja jätit silti osallistumatta) ja Fortraniin ja jopa PL/I:hin. Sinulle on siis jo toteutettu enemmän ja hankalampia toiveita kuin muistaakseni muille pyytäjille yhteensä. Eli mietipä kaksi kertaa asennettasi ja keskity vaihtelun vuoksi asiaan äläkä hifistelyyn oudoilla kielillä.

Rust on kohtuullisen tunnettu ja isoissakin projekteissa käytetty. Sen asennus onnistui komentorivillä yhdellä komennolla, samoin ohjelman kääntäminen optimointeineen.

Sen sijaan pyytämäsi 8th on paitsi äärimmäisen tuntematon, myös suljettua lähdekoodia ja kaupallinen. Jopa ilmaisversion lataamiseksi pitäisi erikseen hyväksyä lisenssi ja antaa sähköpostiosoite firmalle. Tässä on mielestäni riittävästi syitä olla ottamatta kyseistä kieltä koneelleni.

johku90 [02.01.2019 17:12:22]

Lainaa #

Kiitoksia Metabolixille hienosta kilpailusta. Eiköhän tällä aikataululla nähdä minunkin viritys :P

Tegu [03.01.2019 01:48:59]

Lainaa #

Kieltämättä meni hieman hifistelyksi ja kokeilunhaluksi itsellänikin. Olisihan sitä ihan hyvin voinut käyttää jotain valmiiksi tuettua kieltä, kun lista on jo nyt mukavan vaihteleva (etenkin kun nyt vilkaisin listaa uudelleen).. Kiitos siis vaivannäöstä!

Lähetin ensimmäisen version mukaan. Hieman toivon, etten joudu jättämään sitä lopulliseksi. Mietintämyssyä joutuu täälläkin käyttämään, että keksisi joko parannusta tai eri lähestymistapaa.

Metabolix kirjoitti:

Onko sinulla jokin idea, jonka voisi turvallisesti, hyödyllisesti ja kohtuullisella vaivalla lisätä testaussivulle myös tulevia kilpailuja ajatellen?

Ei valitettavasti ole mitään sen konkreettisempaa ideaa. Lähinnä huomasin, että älyjen järjestys vaihtelee paljonkin riippuen laudasta tai satunnaisten älyjen tapauksessa ajosta. Sen vuoksi kävi mielessä ajaa pelejä automaattisesti eri laudoille ja koostaa jotenkin tulokset. Näin voisi vertailla omia kehitysversioitaan (ja muiden ohjelmia) laajemmalla otoksella. En sitten ole varma, olisiko tuo edes järkevä tapa kehittää älyä.

Tulevia kilpailuja ajatellen tuosta ei varmaan olisi niin hyötyä, koska se taitaa joka tapauksessa muistuttaa kisan lopullisia ajoja.

Metabolix kirjoitti:

Tällä hetkellä usean tekoälyn pelin vakiosiemenellä saa helposti aloitettua, kun laittaa testaussivun Katselu-osaan dataa, jossa on replayn sijasta osoitteita

Tämä onkin kätevä ominaisuus! Ei ainakaan tarvitse klikkailla niin paljoa, kun eri järjestelyitä voi tallentaa ja ladata uudelleen.

reino [05.01.2019 16:29:25]

Lainaa #

Kun kerran pythonissa on sallittu numpy niin linkitetäänhän c-ohjelmat myös libmath:in kanssa?

Haluaisin myös tarkennusta siihen että missä kohtaa tekoälyn pitäisi tulostaa oma nimensä. Oma tekoälyni tulostaa nimensä kentän lukemisen jälkeen, mutta osvastus1 ja osvastus2 tulostaa nimen pelaajien määrän lukemisen jälkeen. Ohjesivu on järjestyksen osalta epäselvä. Testausohjelma toimii kummankin järjestyksen kanssa mutta huomasin ongelman kirjoittaessa omaa testausohjelmaa.

Ja jalskin ohjelmasta vielä, miten on mahdollista että 8th generoiman binäärin koko on 12M vs. 15K gcc:n kääntämä tekoäly? Liekö sitten 8th:n generoima koodi jotenkin obfuskoitua vai onko siellä kenties tulkki taustalla (disassemblointi näytti ainakin mielenkiintoiselta)?

Metabolix [05.01.2019 16:35:55]

Lainaa #

reino, math.h on toki sallittua standardi-C:tä. Vai tarkoitatko jotain muuta? C++:ssa on myös hyödyllinen valarray.

Nimen tarkalla tulostushetkellä ei ole merkitystä, kunhan se on ensimmäinen tuloste.

jalski [05.01.2019 17:41:26]

Lainaa #

reino kirjoitti:

Ja jalskin ohjelmasta vielä, miten on mahdollista että 8th generoiman binäärin koko on 12M vs. 15K gcc:n kääntämä tekoäly? Liekö sitten 8th:n generoima koodi jotenkin obfuskoitua vai onko siellä kenties tulkki taustalla (disassemblointi näytti ainakin mielenkiintoiselta)?

8th on Forth johdannainen, joten tulkki löytyy kyllä taustalla ja sanat käännetään todennäköisesti tavukoodiksi. Suorituskyky on riittävä useimpiin sovelluksiin. Käännetyt binäärit ovat itselläni ainakin n. 7500 kt, josta JUCE vie todennäköisesti suurimman osan.

ahr [07.01.2019 01:59:47]

Lainaa #

Kiitos hauskasta kisasta, erityisesti sääntöjen yksinkertaisuus miellyttää.

Oma tekoälyni käyttää jonkin verran raakaa voimaa (n. 1s/peli, C++), toivottavasti ei ole liian hidas javascriptille käännettynä.

Kiitos myös os:lle kirityksestä. Saatan vielä itsekin jakaa kevennetyn js-version, jos vain saan emscriptenin toimimaan.

Metabolix [07.01.2019 17:37:40]

Lainaa #

ahr kirjoitti:

toivottavasti ei ole liian hidas javascriptille käännettynä.

JS-käännös, jos se edes toteutuu, on toki vain bonus kisan päättymisen jälkeen; aikarajalla ei ole siinä enää merkitystä.


Sivun alkuun

Sivut:

Vastaus

Muista lukea keskustelun ohjeet.
Tietoa sivustosta