Closed mytja closed 2 years ago
Just a little update. Proton now seems to generate timetables successfully. It's still in very early development phase, as it doesn't currently obey all the instructions and rules. It will be finished (most likely) by the end of July. Just a screenshot on what's currently doing.
If there aren't any pushes to main branch, this means I'm working on Proton locally, as I won't push any code until it works and is stable.
Here is the status of the rules it currently obeys:
Here is the status of what needs to be done besides rules:
Be sure to comment here if you think I missed something or you think I should add something.
NEW UPDATE!!!
Proton zdaj upošteva tudi skupine predmetov. Sicer zaradi tega, ker še nisem naredil optimizacij, ne ustvarja "lepega" urnika, ampak tukaj lahko vidite trenutno demonstracijo. Proton je dejansko tudi hiter, glede na to, da uporabljamo "brute force" metode za generacijo. Vsi requesti so pod 100ms, čeprav nimam še ustvarjenih vseh predmetov za vseh 9 razredov OŠ (česar tudi verjetno ne bom naredil)...
PS Oprostite mi, če bom kdaj govoril slovensko, kdaj pa angleško. Govorim v tistemu jeziku, v kateremu mi v trenutku bolj zapaše.
NEW AMAZING UPDATE!!!
Proton now even normalizes the timetable. Hole patching is WIP currently. I've also implemented many security features, that will make sure my algorithm isn't consuming too many system resources and is stuck in an infinite loop.
NEW UPDATE
Proton zdaj tudi polni luknje.
Imamo pa tudi lepo animacijo za čakanje med tem dolgotrajnim postopkom.
Vse, kar še moram narediti so blok ure in predure/poure, nato pa še veliko testiranja z dvema oz. večimi razredi. Bom kar še enkrat napisal tukaj:
No, pa smo vendarle tukaj. Proton upošteva čisto vsa pravila in ustvari ta lep urnik:
Ker temeljimo na naključnemu algoritmu, ki zagotovi popolno naključnost vsakič, ko pritisnete na "Ponovno generiraj urnik", je časovni razpon sestavljanja urnika vse od pol sekunde pa do desetih sekund (sicer bolj redko, a se vendarle dogaja) za en razred.
Sedaj bom začel testirati z dvema razredoma in pa dodal večtedenski pogled in posledično tudi polure.
No, to je bilo lažje kot sem mislil...
NEW INSANE UPDATE!!!
Stari algoritmi za post-procesiranje so bili zelo slabo narejeni in so tipično potrebovali več kot eno minuto, da rešijo vse luknje (za samo en razred), pa še teh včasih niso. Prav tako (kot lahko vidite iz prejšnjega komentarja), ni nevtralizacija urnika delovala dosti dobro (na petek so imeli samo dve šolski uri (ignorirajmo NI3 - izbirni predmet nemščina), medtem ko so imeli na torek SEDEM šolskih ur). Zdaj so te algoritmi veliko bolj učinkoviti, hitrejši (navadno potrebujejo manj kot 5 sekund (sicer na relativno novemu Ryzen 5 5500U) za tri razrede), kot tudi bolje zapolnijo urnik, kot lahko vidite iz spodnjih screenshotov.
Urnik za 9.b
Urnik za 9.a
Urnik za 9.c
Kot verjetno že veste, je moj algoritem za sestavljanje urnika popolnoma naključen. Tako lahko garantiramo, da vsakič, ko kliknem "Ponovno generiraj urnik", se bo sestavil nov, drugačen in popolnoma naključen urnik. To omogoča, da imajo na šoli več izbire, a hkrati pride z negativnimi lastnostmi... urnik se zelo dolgo sestavlja. Izmeril sem že vse od 15 sekund, pa vse do 4 minut (kar naj bi bil maksimum) za tri razrede. Povprečje je okoli dveh minut. Vse je odvisno od seeda, ki ga dobi generator pseudo-naključnih števil (kriptografsko nenaključen generator, ki je veliko hitrejši od kriptografsko naključnega/varnega generatorja), kar pomeni, da je lahko trajanje sestavljanje urnika zelo naključno - lahko dobi pravi seed že v prvo, lahko ga pa dobi šele v desetem poskusu ipd.
Sestavil sem to tabelo s časi sestavljanja urnika | Najmanjši/največji/povprečni izmerjen čas sestavljanja urnika pred optimizacijami | Najmanjši/največji/povprečni izmerjen čas sestavljanja urnika po optimizacijah | |
---|---|---|---|
En razred | 5s/20s/15s | 3s/17s/10s | |
Dva razreda | 20s/120s/60s | 10s/95s/40s | |
Trije razredi | 60s/600s/400s | 15s/300s/120s |
Kot lahko vidite na prejšnjih screenshotih, sem dodal UI za izbiro specifičnega razreda.
Izgleda, da bo Proton prej prišel na sceno, kot pričakovano. Proton bo ostal kar nekaj časa kot beta funkcija in bom z veseljem sprejemal kakršnekoli predloge in pripombe, za zdaj pa nam ostane samo še tole:
PS. Skril sem vse prejšnje komentarje, zaradi boljše vidljivosti. Še vedno so vidni, a jih je treba ročno razširiti.
Bolj ali manj končano, samo še mali popravki in bom vse lahko pushal (ne še danes)
Vem, da sem to rekel že pred desetimi dnevi, ampak zdaj je Proton končan zares. Imel sem malo težav s post-procesirnim algoritmom, a sem to odpravil. To pomeni, da bo Proton objavljen do konca tega tedna (če se ne bo SPET kaj zalomilo) z vsemi drugimi novimi funkcijami.
V tem trenutku izvajam benchmarke in zadnje teste.
UPDATE: Takoj, ko izgleda vse dobro, gre vse po zlu... Upam, da bom to lahko čim prej odpravil in se čim prej premaknil iz Protona na sistem...
Po vsem trdem delu, se je vse vendarle izšlo. Proton bo izšel DANES.
Medtem ko čakate, pa si lahko ogledati naslednji benchmark za Proton layer
Časi zahtevkov so pobrani iz razvijalskih orodij Firefox brskalnika.
Ranking je ocenjen ročno - urnikov ni ocenjeval program/stroj, temveč človek (razvijalec MeetPlan sistema) po svoji (subjektivni) lestvici. Ta lestvica ni pod nobenim pogojem standardizirana.
Vsi ranki pod (vključno z) 5 avtomatično pomenijo neuporabne urnike
Povprečna ocena (štejejo se boljše ocene): 8.1 Povprečna ocena (štejejo se slabše ocene): 7.9 Povprečna ocena: 8.0
Povprečen čas, potreben za sestavo urnika (ni upoštevan čas za ročno post procesiranje): 46.54+133.2+25.86+28.73+403.2+132.6+15.4+135.6+75.6+90 = 1086.73 1086.73/10 = 108.673 108.673/60 = 1.8 minute
Proton is going to be our new library that tightly integrates with MeetPlan. It's going to manage absences, optimize work time and create optimized timetables for students.