Kilpailun aika on taas koittanut. Vuosi sitten kilpailtiin säveltävästä ohjelmasta erinomaisin tuloksin. Nyt kokeillaan, onko mahdollista ohjelmoida piirtävä ohjelma.
Ohjelmalle annetaan mustavalkoinen, 192×128 pikselin kokoinen mallikuva. Ohjelman tulee luoda tämän pohjalta oma taideteos. Jokainen kilpailija saa lähettää tekoälynsä mukana yhden mallikuvan, ja kilpailuajan päätyttyä ohjelmien tekemät kuvat laitetaan näytille ja kävijät äänestävät voittajasta. Tarkemmat ohjeet ovat kilpailusivulla.
Osallistumisen helpottamiseksi on jälleen kirjoitettu esimerkkejä yleisimmillä kielillä. Tervetuloa mukaan!
Vähän pyytäisin tarkennuksia, jos niillä vaikka olisi merkitystä.
Näitä C#-kääntäjiä on Monolle niin monta:
http://www.mono-project.com/CSharp_Compiler
En oikein osaa arvata, mitä näistä kilpailussa käytetään. Saisiko kääntäjän nimen luetteloon, tai muun tiedon mitä C#-kielen ominaisuuksia on turvallista käyttää? (Jos vaikka päädyn tällä kielellä osallistumaan.)
C- ja C++-ohjelmoijat varmaankin voivat käyttää kielten uusimpia versioita, siinä määrin miten GCC tukee niitä. Lienee OK pyytää kääntämäään koodi sopivalla std-lipulla, jos näin tekee?
Ensisijainen C#-kääntäjä on dmcs (C# 4.0). C ja C++ käännetään uusimmilla GCC:n tukemilla standardivalinnoilla (tällä hetkellä -std=c1x ja -std=c++0x). Lisäsin nämä tiedot ohjeisiin.
Mono ei ole läheskään täydellinen, joten en erityisemmin rohkaise .NET-kielten käyttöön, jos jokin muu vaihtoehto suinkin sopii.
Pekka Karjalainen kirjoitti:
Lienee OK pyytää
Toki saa toivoa lisää ominaisuuksia, jos on jokin järkevä syy. Tuskinpa kuitenkaan tulee tilannetta, jossa jokin tietty standardi olisi aivan välttämättä tarpeen, ja kuten ohjeissa sanotaan, kääntäjäkohtaisia erikoisuuksia ei pidä käyttää.
Olisikohan mitään mahdollisuuksia saada PL/I kilpailussa sallittujen ohjelmointikielten listalle? ;-)
Itse käytän Iron Spring PL/I - kääntäjää OS/2 alustalla. Tuosta on myös Linux versio ladattavissa.
Onko ohjelman tulostaman kuvan pakko olla kooltaan 192x128? Näin pieni kuva vähän rajoittaa ilmaisua.
Tein Lua-version esimerkkiohjelmasta. Cmp-ohjelman mukaan tuotettu bmp on täsmälleen samanlainen kuin C++- ja Python2-ohjelmilla.
jalski: Ei ole mahdollisuuksia. Olet käyttänyt jo erikoistoiveesi Limboon. ;)
Pekka Karjalainen: Hienoa työtä! Epäilen kuitenkin, ettei Lualla kukaan valmista esimerkkiä tarvitseva osallistu.
os: Kuvan koko on nyt tämä. Pieneenkin kuvaan mahtuu aika paljon, jos vain mallit ovat tarpeeksi suurpiirteisiä, kuten toivon. Toki elämää voi helpottaa, jos luo ensin isomman kuvan ja pienentää sitten ennen tallennusta.
Metabolix kirjoitti:
jalski: Ei ole mahdollisuuksia. Olet käyttänyt jo erikoistoiveesi Limboon. ;)
Tylsimys! :-) PL/I olisi kyllä ollut omiaan tämän tyyppiseen tiedon käsittelyyn.
Jos keksin jonkun mielenkiintoisen lähestymistavan Infernolla ja Limbolla niin saatan kilpailuun kyllä osallistuakin...
Tämän tyyppisen tiedon käsittelyyn luontevasti soveltuvista työkaluista puheen ollen, tässä esimerkkikoodi Matlabille/Octavelle:
%% Ladataan kuva 0-1-matriisiksi malli_rgb_255 = imread('malli.bmp'); malli = malli_rgb_255(:,:,1) ~= 0; [h,w] = size(malli); % Kuvan mitat %% Luodaan uusi kuva, värit välillä 0-1 liuku_x = repmat( linspace(0,1,w), h, 1 ); % Väriliuku 0-1, x-suunta liuku_y = repmat( linspace(0,1,h).', 1, w ); % -"- y-suunta teos = malli .* liuku_x; % Punainen kanava teos(:,:,2) = malli .* liuku_y; % Vihreä teos(:,:,3) = malli .* liuku_x .* liuku_y; % Sininen %% Tallennetaan imwrite(teos, 'teos.bmp');
Ymmärrän, jos Octaven lisääminen listaan ei syystä tai toisesta onnistu, mutta tämän avulla (yksinkertainen) kuvankäsittely ainakin olisi helppoa, luontevaa ja oikein tehtynä myös mahdollisesti erittäin tehokasta.
Vaikuttaa hauskalta. Osallistun jos ehdin.
os: Asensin Octaven (3.4.3), saa käyttää. Varoittaa 8-bittisestä kuvankäsittelystä, mutta ei haitanne tässä. Esimerkin perusteella veikkaan, että tuolla saa kohtalaisen edun moniin muihin nähden. :)
aaämdee kirjoitti:
Vaikuttaa hauskalta. Osallistun jos ehdin.
Samat sanat. Matlabilla tälläisiä on joskus tullut tehtyä enemmänkin. Harmi vaan ettei yhtään koodia ole enää tallessa.
Metabolix kirjoitti:
os: Asensin Octaven (3.4.3), saa käyttää. Varoittaa 8-bittisestä kuvankäsittelystä, mutta ei haitanne tässä. Esimerkin perusteella veikkaan, että tuolla saa kohtalaisen edun moniin muihin nähden. :)
Saisko siihen vielä octave-imagen, vai onko siitä jo liikaa etua? :)
Torgo: Ei saa, ja olisi varmaan liikaa etuakin. Eihän muillekaan kielille ole tarjolla erityisiä kirjastoja.
OpenGL-grafiikkakiihdytys lienee sallittu? :) Harmillinen kuvakoko vaan, se pitää ensin skaalata kokoon 256x128, piirtää tekstuuriin 192x128 alueelle ja lopuks tallentaa tekstuurista tuo 192x128 alue.
User137, OpenGL ei valitettavasti ole käytettävissä. Kuten säännöissä sanotaan, ohjelma toimii komentorivillä ilman ylimääräisiä kirjastoja. Näin taataan ohjelmille parempi porttautuvuus ja toivottavasti myös kannustetaan luovempiin ratkaisuihin – molemmat tärkeitä piilotavoitteita kilpailuissa.
Tuskinpa kiihdytys olisi mitenkään olennainen kilpailussa. Minuutissa ehtii piirtää jopa raytracerilla jo yhtä ja toista, ja perinteinen rasterointi ilman hienoja heijastuksia on yleensä paljon nopeampaa. Uskon, että menestys on kiinni enemmän siitä, miten onnistuu mallikuvaa analysoimaan eli osaako tehdä kuvalle muutakin kuin jonkin hassun efektin.
Onkos tossa käytössä mikä .NET Frameworkin versio? Ajattelin että jos saan jotain aikaan, vois ehkä osallistuakin VB.NET:illä.
ErroR++: Kuten kilpailuohjeissa varsin selvästi lukee, käytössä on Mono 2.10.6.
Lua 5.2 julkaistiin juuri. Pikainen testaus kertoi, että esimerkkiohjelmani toimii senkin kanssa. Joitakin yhteensopimattomia muutoksia uudessa Luassa kuitenkin on Lua 5.1.X-versioiden suhteen, joten käytössä olevaa versiota ei varmaankaan kannata vaihtaa kesken kilpailun automaattisesti. (En aio itse tehdä Lua-ohjelmaa, joten minulla ei ole varsinaista kantaa asiaan.)
Tulevissa kilpailuissa voisi myös tarjota mahdollisuuden käyttää LuaJIT2:ta. Se on nyt vielä beta-tasolla, joten on ihan hyväksyttävää odottaa vakaan version julkaisua. Se varmasti ilahduttaisi aikarajaa käyttävässä kilpailussa nopeudellaan. Tosin kilpailun järjestäjä saa sitten lukea sen manuaalin ja ottaa kantaa, saako kaikkia sen ominaisuuksia (jotka eivät ole perus-Luassa) käyttää kilpailussa :)
Tämän kilpailun osalta en siis toivo mitään muutoksia tai päivityksiä, mutta joku Luan käyttöä vakavasti harkitseva voi halutakin. Siksi mainitsin. Lopuksi URLit:
Arvioidaanko lopullinen työ sitten pelkästään itse piirretyn mustavalko-mallin perusteella, vai annetaanko näkyville useampia esimerkkejä mitä ohjelma tekee eri kuville? Olis varmaankin mielenkiintosempaa.
Kaikki ohjelmat piirtävät kaikista lähetetyistä malleista, eli näytille tulee N^2 kuvaa, missä N on tekoälyjen määrä. Riippuu osallistujien määrästä, arvostelevatko kävijät yksittäisiä kuvia vai tekoälyä kokonaisuutena ja paljonko ääniä saa antaa.
Kilpailun ensimmäinen tekoäly on nyt mukana! \o/
Mietin tuossa, että entä jos joku pistää vaikka täysin valkoisen kuvan. Tai jokatoien pixeli erivärinen. Hyvin mahdollista, että joku sovellus kaatuu jos ei ole huomannut testata.
Meitzi: Testaan kaikki ohjelmat muun muassa juuri noilla malleilla ja ilmoitan bugeista. Jos ohjelmassa ilmenee bugi vasta kilpailun päätyttyä (tai tekijä ei korjaa ilmoitettua bugia), täytynee laittaa äänestyksen yhteyteen maininta, että ohjelma kaatui eikä siksi tuottanut kyseistä kuvaa; yleisö sitten päättää, kannattaako älyä silti äänestää. Toivottavasti kuitenkin älyt toimivat eikä kukaan lähetä noin tyhjänpäiväistä mallia.
Ohjelmia on nyt koossa esimerkin lisäksi kuusi. Aikaa on vielä reilu viikko, nyt hihat heilumaan! Ei kannata jättää lähetystä viimeiseen iltaan, jos ei ole aivan täydellisen varma asiastaan; tähän mennessä lähes kaikissa ohjelmissa on ollut ensi yrittämällä jokin vika.
Saako gcc:lle kääntäjäparametrin -lm ?
Ajattelin kokeilla c99:n kompleksilukuja, mutta ainakin minulla gcc haluaa tuon -lm lipun, että standardiin kuuluvat complex.h:ssa määritellyt funktiot toimivat.
Ja saan kyllä ohjelman toimimaan ilman kopleksilukujakin, mutta aina kannattanee kysyä...
aaämdee kirjoitti:
Saako gcc:lle kääntäjäparametrin -lm ?
Saa, funktiot kuuluvat standardikirjastoon. Tosin optimointilipun -O2 kanssa koodi voi kääntyä ilmankin -lm:ää, koska GCC käyttää inline-toteutuksiaan funktioista.
Kilpailun äänestystapa on päätetty: Jokainen käyttäjä saa antaa kullekin ohjelmalle 1–10 pistettä. Äänestyssivulla näytetään kilpailijan oma mallikuva ja siitä luotu teos, ja vieressä on linkki sivulle, jossa ovat valitun tekoälyn kaikki kuvat. Oma mallikuva kannattaa siis valita niin, että se antaa edustavan kuvan ohjelmasta, vaikka äänestäjät toivottavasti arvioivatkin ohjelman koko tuotannon.
Voiko datatiedosto olla bittikartta, josta poimitaan osia? Omassa ohjelmassani on fonttibittikartta datatiedostona josta poimitaan kuvaan kirjaimia. Onko se sallittua?
Kyllähän datatiedosto voi sisältää ihan mitä tahansa dataa.
Itse tungin omaan datatiedostooni 7 bittikarttaa.
Datatiedostojen muoto on tosiaan vapaa, ja esimerkiksi Anaatin tapauksessa saisi mielellään olla jokaiselle apukuvalle oma tiedosto, jotta ohjelman toiminnasta kiinnostuneet voisivat helpommin muokata niitä. ;)
Tällä viikolla on tullut taas pari ilmoittautumista, toivottavasti viikonloppuna tulee vielä muutama lisää. Kuvien tyyli vaihtelee jo nyt paljon, joten kenenkään ei tarvitse taitojaan hävetä.
Jos joku on lähettänyt tekoälyn tai päivityksen muttei ole vielä saanut vastausta, nyt alkaa olla korkea aika kysellä perään. Äänestys alkaa pian keskiyön jälkeen, eli myöhästyneitä ei odotella.
Kuinka monta osallistujaa tällähetkellä on?
Nyt on 11 + esimerkki.
Ilmoittautuminen on päättynyt. Nyt äänestämään! Ohjelmia on kaikkiaan pahaenteiset 13.
Kauanko äänestysaikaa on? Tai siis: Milloin saadaan tulokset?
Aikaa on kaksi viikkoa, eli viimeinen äänestyspäivä on 29.1. ja tulokset julkaistaan seuraavana päivänä (tai jo yöllä, jos jaksetaan). Tärkein syy pitkään äänestysaikaan on tietenkin järjestäjän kiireisyys, mutta yleensä ääniäkin tipahtelee loppuun asti.
Tulokset on julkaistu! Ylivoimainen voittaja on Anaatti tekoälyllään Trail. Onneksi olkoon! Kiitokset myös muille kilpailuun osallistuneille.
Kiitokset äänestäneille ja voittohan se sieltä näköjään tupsahti. Itse pidin erityisesti aaämdeen Pointterista ja Metabolixin metapiruxista, joka menestyikin varsin hyvin. Onnittelut teille sekä kaikille muille kilpailussa hyvin menestyneille ja kiitokset taas kerran hyvästä kilpailusta.
Jos joku on erityisen kiinnostunut omasta tekoälystäni Trailista, niin olen julkaissut siitä uuden version. Nyt se oletuksena piirtää isomman kuvan sekä tulostaa käyttäjälle tietoa omasta toiminnastaan. Tärkeimpänä muutoksena olen kuitenkin laittanut datatiedostoon tallennetut bittikartat erillisiksi tiedostoiksi, jotta ohjelman muuntelu olisi vähän helpompaa. Erilliset bittikartat vievät nyt 1.31Mt tilaa, joten tuollaisesaan niitä ei olisi voinut laittaa kilpailuun mukaan.
Ohjelma on ladattavissa tuosta.
Annan kuvausten lukemisen jälkeen voltille henkisen lisäpisteen ehkä hauskimmasta ideasta.
Harmi etten itse ehtinyt/jaksanut osallistua. Mielessä liikkui jotain blue_periodin tyyppistä, mutta ei tullut tällä kertaa ulos koodin muodossa.
Onnea kaikille menestyneille, ja muille kanssa!
Aihe on jo aika vanha, joten et voi enää vastata siihen.