Kada smo vidjeli koliko vremena i ljudi treba osnovnim i srednjim školama da naprave raspored časova došli smo na ideju da napravimo program.
Program uzimajući podatke o učionicama, odjeljenjima, grupama, profesorima i predmetima sastavlja raspored časova za vrlo kratko vrijeme. Time smo posao neke osobe sa nedjelju dana skratili na par minuta.
Raspored časova se pravi za sva odjeljenja, i može se filtrirati za jedno odjeljenje ili jednog profesora, a sve što je potrebno jeste jednostavno popunjavanje forme sa pitanjima.
Raspored se može lako prilagoditi na razne zahtjeve poput:
• Oslobađanja profesora ili učionica u određenim terminima
• Ostavljanja jednog dana u nedjelji bez stručnih predmeta za škole kojima je to potrebno (ti dani se mogu koristiti za praktičnu nastavu u kompanijama, što je potreba koju smo uvidjeli u našoj školi)
• Vezivanja profesora za određene učionice
• Raspoređivanja nekih predmeta na određene termine u toku dana
• itd.
Generisanje rasporeda je u kompjuterskim naukama poznato po tome što pripada klasi najkomplikovanijih problema za efikasno rješavanje, tako da ne postoji veliki broj programa na tržištu koji to rade, i oni koji postoje su veoma spori, ne prate moderne standarde za dizajn i ne podržavaju mnogo opcija za prilagođavanje rasporeda.
Da bismo mi napravili program koji to radi, bilo je potrebno dosta istraživanja o pristupima tom problemu. Kroz sve to istraživanje i isprobavanje različitih algoritama, došli smo do nečega što se zove Stagnation-Free Late Acceptance Hill-Climbing. To je algoritam objavljen 2015. godine koji rješava problem brže od svih ostalih koji su do tada bili poznati (Simulated Annealing, genetički algoritmi, itd.). Takođe omogućava dodavanje ograničenja tokom procesa generisanja rasporeda, poput svih onih dodatnih zahtjeva koje smo gore naveli.
Trenutno ne postoji nijedan program na tržištu koji koristi taj algoritam, time je naš program brži i prilagodljiviji od ostalih.
Što se tiče arhitekture projekta, za implementaciju samog algoritma smo koristili programski jezik Rust. To je jezik koji zadnjih par godina dobija mnogo na popularnosti zbog efikasnosti programa napisanih u njemu, kao i zbog toga što je mnogo lakše pisati programe koji ne crashuju (zbog određenih stvari vezanih za dizajn jezika kao što su null safety i resource management). Te dvije prednosti su vrlo bitne za naš program, zbog čega smo odabrali taj programski jezik (kao i zbog prethodnog iskustva sa njime). Frontend koji omogućava korisnicima da sve podatke ispune na lak i razumljiv način je trenutno u izradi, koristeći React.
Prezentacija projekta se nalazi na ovom linku.