Zahvaljujući entuzijastičnim i mladim studentima, na Računarskom fakultetu je početkom ove školske godine osnovana sekcija pod nazivom “Competitive programming”, a sa ciljem da studentima dodatno približi baš ona takmičenja u kojima su RAFovci najbolji — algoritamska takmičenja. Slučajno ili ne, sa nastankom ove sekcije se poklopila i povećana zainteresovanost mojih kolega i mene za razna takmičenja, pa smo tako učestvovali na dva hackathona (Start Conference i Nordeus Hackathon), gde smo i pokupili većinu nagrada.
Ova dva zbivanja kao da se nisu mogla dogoditi u boljem trenutku, jer je baš tokom decembra objavljeno da će se ove godine, nakon jedne preskočene, ponovo održati takmičenje AI Olympics, o kojem sam nakon učešća 2011. godine i pisao. Podstaknuti pređašnjim uspesima, sa velikim brojem zainteresovanih ljudi, doneli smo odluku…
RAF ide u Rumuniju da pobedi.
O takmičenju
Ipak, usporimo malo za početak, i objasnimo šta je ovde zapravo u pitanju.
AI Olympics je takmičenje u organizaciji rumunskog Politehničkog Univerziteta u Bukureštu, gde je cilj takmičara da razviju veštačku inteligenciju za igranje neke zadate igre u kojoj se takmičari međusobno sukobljavaju. U prošloj iteraciji takmičenja, koja je održana 2011. godine, postojale su tri kategorije, odnosno tri igre, i u jednoj od njih je prvo mesto osvojio (sada bivši) student Računarskog fakulteta. Organizatori su se ove godine opredelili za samo jednu kategoriju, pošto ranije interesovanje nije bilo dovoljno veliko, ali su zato samim tim i nagrade postale veće — 1500€ za prvo mesto, 900€ za drugo, i 600€ za treće. Kako sume nisu nimalo naivne, a kolega i ja smo već imali iskustva sa ovim takmičenjem, pomenuli smo ga drugim zainteresovanima u sekciji, i nekoliko dana kasnije su već bili formirani timovi.
Sâma igra je zapravo proširenje jedne od ranijih igara, pod nazivom Crafting Quest. Najlakše bi bilo poistovetiti je sa nekom turn-based strategijom, pošto igrači naizmenično kontrolišu jedinice koje mogu da kopaju, skupljaju resurse, prave mačeve i oklop, grade tornjeve i zamke, kao i da napadaju jedne druge. Cilj je, naravno, skupiti što više poena, a oni se pretežno dobijaju ubijanjem protivničkih jedinica, što je na kraju i bila taktika većine timova. Seek and destroy.
Test runde i kvalifikacije
Iako je dosta ljudi na početku pokazalo zainteresovanost, vremenom je taj broj opadao. Takmičenje je počelo već u decembru, a kvalifikacije su bile sredinom februara, pa su ljudi stalno odlagali kôdiranje, što je na kraju dovelo do toga da neki ljudi odustanu — nisu učestvovali na test rundama, nisu “upoznali” protivnike i nisu znali kako se cela igra ponaša, pa i nije bilo previša smisla. Nas sedmoro smo, međutim, ostali uporni, pošto smo baš na tim test rundama videli da imamo realne šanse. Studenti druge, treće i četvrte godine studija, podeljeni u četiri tima.
Nimalo iznenađujuće, svi smo prošli kvalifikacije (zauzevši prvo, drugo, peto i šesto mesto) i našli se među 8 najboljih timova. Kao i prošli put, dobili smo poziv da prisustvujemo događaju u Bukureštu, uz organizovan smeštaj, a putovanja ne treba odbijati. Tako smo se nas trojica 21. februara vozom uputili u Bukurešt, na AI Olympics.
AI Village
Jedan od bitnijih aspekata čitavog događaja, kao i razlog za naš put u Bukurešt, jeste AI Village. Ovo “selo” zapravo obuhvata prostor fakulteta koji je bio posvećen štandovima raznih firmi i istraživača, ali i predavanja koja su se odigravala tokom tog dana. Kao i prošle godine, glavni predavači su došli iz Google-a i Facebook-a, dok su ostali bili iz (nama nepoznatih) rumunskih kompanija.
Predavanje Google-a pod nazivom “Web Search Queries as a Repository of Human Knowledge” sa programerske strane nije bilo zanimljivo koliko pretprošlogodišnje predavanje, ali je tema bila nešto o čemu se verovatno i ne razmišlja toliko često — razumevanje upita. Naime, upiti uz pomoć kojih korisnici pretražuju su uglavnom veoma jednostavni, nisu pravilne rečenice, a ponekad se mogu i protumačiti na više načina. Marius Pasca je pričao o tome kako se vrši analiza i klasifikacija upita (pretežno demografski) radi preciznijeg odgovaranja na buduće upite, ali i stvaranja svojevrsne baze znanja. Na primer, ukoliko korisnici traže koliko kalorija se troši pri skijanju, “skijanje” će biti shvaćeno kao neka aktivnost, i slično, pa će to saznanje kasnije moći da se upotrebi radi pojašnjavanja drugih upita.
Iz Facebooka je i ove godine došao Andrei Alexandrescu, a držao je predavanje pod nazivom “Graph-Based Learning at Facebook”. Kada sam slušao njegovo predavanje 2011. godine, nisam imao nikakvu predstavu ko je on, ali sam kasnije imao priliku da se malo bolje upoznam sa njegovim radom dok sam bio na praksi u Facebooku, pa sam sa drugačijim očekivanjima došao na ovo predavanje. Nisam bio razočaran. Alexandrescu je odličan predavač, i uspeo je da nas zadrži zainteresovanima tokom svih sat vremena dok je pričao o problemima sa kojima se susreću u Facebooku kada obrađuju ogromne količine podataka. Kako se radi o milijardu ljudi, i preko 150 milijardi ivica u njihovom grafu, standardni algoritmi nad grafovima se ne mogu koristiti, jer nije moguće celu strukturu smestiti u memoriju, pa je potrebno naći drugačije, skalabilne, pristupe.
A na štandovima smo imali šta da vidimo. Facebook, Google i Adobe su, standardno, prvenstveno vrbovali studente, što mene nije previše zanimalo, ali sam zato bio prijatno iznenađen neverovatnom slučajnošću da na štandu Facebooka naletim na čak dve osobe koje znam, od čega sam sa jednom bio i u timu. Mali svet. Na ostalim štandovima, pak, su se nalazile nešto praktičnije stvari. Tako smo, recimo, mogli da vidi sada već standardne robote koji igraju fudbal, ali i ne toliko standardnog robota Nao kog smo gledali kako oponaša pokrete čoveka i održava ravnotežu. Dalje obilazivši selo naišli smo na lasersku harfu (instrument koji umesto žica ima laserske zrake), malu staklenu baštu u kojoj se uslovi (svetlo, temperatura, vlažnost) kontrolišu automatski preko mikrokontrolera, prepoznavanje lica, virtuelnu prodavnicu (gde kamera snima osobu, procenjuje visinu i veličinu odeće, a na ekranu prikazuje trenutno odabranu odevnu kombinaciju zalepljenu na feed sa kamere) i još mnoge druge praktične i nepraktične izume.
Od svega ovoga, svakako najinteresantniji je bio štand na kojem je prezentovana tehnologija koju hirurzi koriste za treniranje. Da se ne bi “igrali” pravim organima, ova sprega hardvera i softvera im omogućava da upotrebom 3D tehnologije “osete” čovekove organe. Da bi to izveli, generiše se 3D model nekog organa (na demonstraciji je bila jetra) koji se onda posmatra na ekranu upotrebom 3D naočara. Hardver se sastoji iz jedne olovke koja je prikacena na rotirajuću bazu sa elektromotorom, i njegova uloga je da pruža otpor kada olovka (odnosno njena virtuelna reprezentacija na ekranu) dodirne jetru. Što se jače pritiska zid jetre, to je otpor veći, i zaista se dobije realističan osećaj. Šteta samo što su 3D naočare i dalje neupotrebljive (u principu veoma subjektivno mišljenje, nimalo ne volim 3D tehnologiju).
Finale
Najzad, krajem dana, došlo je na red finale. Zbog prirode i dinamike igre, nije bilo moguće igrati sve partije uživo, pošto bi to oduzelo previše vremena, pa su se organizatori odlučili za to da puste dve partije, da bi ljudi shvatili kako su se stvari odvijale, pa da nakon toga proglase pobednike.
Jedna od te dve partije je meni bila posebno interesantna, pošto su naglasili da je u pitanju borba za treće mesto, a ja sam već na sâmom početku na osnovu taktike shvatio da je u pitanju moje rešenje. Stvari su loše krenule po moje jedinice, koje su masakrirane, ali sam posle prvih nekoliko rundi uspeo da sateram protivnika u ćošak, gde su se uloge obrnule. U kasnijim rundama, protivnik je ponovo preokrenuo sreću na svoju stranu, a organizatori su baš tada našli za shodno da prekinu replay. Ništa, da vidimo onda rezultate, pa kako bude…
Prvo su nam prikazali rezultate polufinalnih mečeva, i tu je stanje bilo prilično očekivano. U prvoj grupi su prolaz sebi obezbedile obe ekipe sa RAFa, dok rumunske ekipe nisu prošle. U mojoj grupi, pak, sam ja zauzeo prvo mesto, ali je drugi tim sa RAFa zauzeo treće, pa nisu prošli u finale. Međutim, oni nisu ni slali novo rešenje za finale, jer su odlučili da se posvete takmičenju Challenge24 umesto ovog, pa nisu ni bili razočarani. Dakle, tri srpska i jedan rumunski tim u finalu. So far, so good.
Tenzija, tenzija… I onda PAF (ne RAF, PAF), rezultati.
- Prva nagrada: Vanja Petrović Tanković, Faculty of Computing – Serbia
- Druga nagrada: Vlado Pajić i Aleksandar Milovanović, Faculty of Computing – Serbia
- Treća nagrada: Nenad Božidarević, Faculty of Computing – Serbia
Misija je bila ispunjena. Došli smo u Bukurešt, odslušali predavanja, posetili štandove, i odneli sve tri nagrade. A i prethodna pretpostavka se ispostavila kao tačna — moje rešenje se jeste borilo za treće mesto sa rešenjem rumunskog takmičara, ali se ipak bolje ponašalo u ovim 1-na-1 partijama, pa sam ih sve osvojio.
Ostalo je samo da se ovaj uspeh proslavi, ali kako?
Epilog
Dubstep. Imali smo tu sreću da se baš 23. februara u Bukureštu održava velika UKF žurka u DnB Areni, pa smo se nakon takmičenja uputili tamo, među publiku kojoj je prosek godina sigurno bio ispod 18. Ali nema veze, dobro smo se proveli, i sledećeg dana zaputili nazad ka Beogradu.
Avaj, avantura se nije tu završila, jer smo zbog nedostatka informacija završili u pogrešnom vagonu, što nas je na kraju, sledećeg jutra, dovelo do neke rumunske varoši u kojoj nikako ne bih voleo da se nađem kada padne mrak. Nekom neverovatnom slučajnošću kondukter je dobro razumeo i pričao engleski, pa smo dobili sva neophodna objašnjenja, uz gratis čekanje u Temišvaru od 7 sati. Međutim, sve ovo je zapravo dobro ispalo, jer je vreme bilo predivno, a Temišvar još lepši, pa je dan (viška) jako lepo proveden.
Nakon svega toga, jedina stvar oko koje žalim jeste to što sledeće godine najverovatnije neću biti student, pa neću ni moći da učestvujem na ovom događaju. S druge strane, mlade generacije su podjednako entuzijastične povodom takmičenja, pa i dalje ima ko da pokupi sve nagrade, a da to pokušate svakako preporučujem i vama.
Опет честитам :D Ок, ако следеће године не будемо опет (сви) студирали заједно, надам се да ћу вас успешно одменити. Ипак мора и дух наше генерације да се осети тамо (иако морам још много да радим да бих вас достигао, зато се само “надам”) :D
Ih, Tomča, zvučiš kao neki wannabe programer, a ne kao skoro svršeni RAFovac :P