Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointiputka: Ohjelmoi piirtävä ohjelma!

Sivun loppuun

Metabolix [10.12.2011 12:00:00]

#

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!

Pekka Karjalainen [10.12.2011 13:43:15]

#

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?

Metabolix [10.12.2011 14:23:57]

#

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ää.

jalski [10.12.2011 19:57:11]

#

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.

os [10.12.2011 20:05:41]

#

Onko ohjelman tulostaman kuvan pakko olla kooltaan 192x128? Näin pieni kuva vähän rajoittaa ilmaisua.

Pekka Karjalainen [10.12.2011 20:52:10]

#

Tein Lua-version esimerkkiohjelmasta. Cmp-ohjelman mukaan tuotettu bmp on täsmälleen samanlainen kuin C++- ja Python2-ohjelmilla.

http://pastebin.com/P6GSdZ4k

Metabolix [10.12.2011 21:24:53]

#

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.

jalski [11.12.2011 16:08:38]

#

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...

os [11.12.2011 17:20:40]

#

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.

aaämdee [11.12.2011 18:15:13]

#

Vaikuttaa hauskalta. Osallistun jos ehdin.

Metabolix [11.12.2011 18:36:00]

#

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. :)

Torgo [13.12.2011 14:09:48]

#

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? :)

Metabolix [13.12.2011 14:16:15]

#

Torgo: Ei saa, ja olisi varmaan liikaa etuakin. Eihän muillekaan kielille ole tarjolla erityisiä kirjastoja.

User137 [13.12.2011 15:53:19]

#

OpenGL-grafiikkakiihdytys lienee sallittu? :) Harmillinen kuvakoko vaan, se pitää ensin skaalata kokoon 256x128, piirtää tekstuuriin 192x128 alueelle ja lopuks tallentaa tekstuurista tuo 192x128 alue.

Metabolix [13.12.2011 16:34:12]

#

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.

ErroR++ [16.12.2011 12:40:55]

#

Onkos tossa käytössä mikä .NET Frameworkin versio? Ajattelin että jos saan jotain aikaan, vois ehkä osallistuakin VB.NET:illä.

Metabolix [16.12.2011 15:07:24]

#

ErroR++: Kuten kilpailuohjeissa varsin selvästi lukee, käytössä on Mono 2.10.6.

Pekka Karjalainen [17.12.2011 12:01:20]

#

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:

http://www.lua.org
http://www.luajit.org

User137 [19.12.2011 22:58:08]

#

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.

Metabolix [20.12.2011 00:01:23]

#

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/

Meitzi [26.12.2011 14:05:17]

#

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.

Metabolix [26.12.2011 18:19:17]

#

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.

Metabolix [07.01.2012 12:19:32]

#

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.

aaämdee [07.01.2012 19:03:51]

#

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ä...

Metabolix [08.01.2012 04:43:21]

#

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.

Metabolix [09.01.2012 06:01:40]

#

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.

reino [09.01.2012 16:08:17]

#

Voiko datatiedosto olla bittikartta, josta poimitaan osia? Omassa ohjelmassani on fonttibittikartta datatiedostona josta poimitaan kuvaan kirjaimia. Onko se sallittua?

Anaatti [09.01.2012 16:22:07]

#

Kyllähän datatiedosto voi sisältää ihan mitä tahansa dataa.
Itse tungin omaan datatiedostooni 7 bittikarttaa.

Metabolix [13.01.2012 15:00:13]

#

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ä.

Metabolix [15.01.2012 18:03:48]

#

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.

tesmu [15.01.2012 20:04:43]

#

Kuinka monta osallistujaa tällähetkellä on?

Metabolix [15.01.2012 20:16:20]

#

Nyt on 11 + esimerkki.

Metabolix [16.01.2012 00:25:56]

#

Ilmoittautuminen on päättynyt. Nyt äänestämään! Ohjelmia on kaikkiaan pahaenteiset 13.

Grez [17.01.2012 17:00:36]

#

Kauanko äänestysaikaa on? Tai siis: Milloin saadaan tulokset?

Metabolix [17.01.2012 17:22:05]

#

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.

Metabolix [30.01.2012 00:11:44]

#

Tulokset on julkaistu! Ylivoimainen voittaja on Anaatti tekoälyllään Trail. Onneksi olkoon! Kiitokset myös muille kilpailuun osallistuneille.

Anaatti [30.01.2012 21:34:15]

#

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.

Eki Lehtimäki [01.02.2012 19:51:20]

#

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!


Sivun alkuun

Vastaus

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

Tietoa sivustosta