Predrag Božić
← Projekti

Education · Scheduling · Optimization

Kako napraviti raspored kada skoro svaki potez utiče na deset drugih stvari?

Aplikacija za Muzičku školu „Isidor Bajić“ nije problem prikaza tabele, već problem povezivanja velikog broja pravila u jedno validno i kvalitetno rešenje.

Next.js · PostgreSQL · Prisma · Optimization · CP-SAT

Javni raspored časova Muzičke škole Isidor Bajić

Problem

Validan raspored nije isto što i dobar raspored.

Ako se svi časovi samo „nekako“ smeste u dozvoljene termine, problem još nije rešen.

Profesor može dobiti veliki broj rupa. Učenici mogu imati loše raspoređen dan. Isti predmet može biti nezgodno ponovljen. Učionica može napraviti konflikt. Pomeranje jednog časa može pokvariti raspored nekoliko drugih ljudi.

Zato sistem mora istovremeno da razlikuje pravila koja se nikada ne smeju prekršiti od kriterijuma koje treba optimizovati koliko god je moguće.

Ograničenja

Jedan raspored, mnogo različitih pravila.

01

Profesori

Svaki profesor ima svoje predmete, raspoložive periode, radne dane i ograničenja koja raspored mora da poštuje.

02

Učenici i odeljenja

Časovi moraju da se uklope bez preklapanja, uz što kvalitetniji dnevni raspored i minimalan broj nepotrebnih rupa.

03

Učionice

Aktivnost mora da dobije odgovarajuću učionicu, uključujući predmete koji imaju svoju podrazumevanu matičnu prostoriju.

04

Dozvoljeni periodi

Nisu svi termini jednako mogući. Različiti razredi, profesori i aktivnosti imaju različite dozvoljene vremenske okvire.

05

Konflikti

Jedna promena može da izazove lanac problema na drugim mestima, pa lokalno dobro rešenje ne mora biti dobro za ceo raspored.

06

Kvalitet rasporeda

Nije dovoljno da raspored bude samo validan. Potrebno je smanjiti rupe, loše ponavljanje časova i nepotrebne radne dane.

Pristup

Kada lokalno pomeranje više nije dovoljno, problem postaje globalna optimizacija.

U jednom trenutku nije više racionalno popravljati raspored potez po potez i nadati se da se problem neće pojaviti na drugom mestu.

Zato je sistem dobio solver pristup koji posmatra veliki broj aktivnosti i ograničenja kao jednu celinu, uz jasnu razliku između hard pravila i kriterijuma kvaliteta.

01

Hard constraints

Konflikti profesora, učenika, učionica i nedozvoljeni periodi ne smeju postojati.

02

Optimization

Među validnim rešenjima traži se ono koje daje kvalitetniji raspored.

03

Human control

Automatsko rešenje ne ukida urednika. Sistem i dalje omogućava pregled i kontrolisane ručne izmene.

04

Validation

Svaka važna verzija prolazi proveru pre nego što može postati kandidat za objavljivanje.

Sistem

Solver je samo jedan deo cele aplikacije.

Školi ne treba matematički model koji radi u terminalu. Potreban je kompletan proizvod kroz koji podaci ulaze, raspored nastaje, proverava se, uređuje i na kraju objavljuje.

01

Uvoz i obrada školskih podataka

02

Draft verzija rasporeda za dalji rad

03

Automatsko otkrivanje konflikata

04

Optimizacija velikog broja međusobnih ograničenja

05

Ručno uređivanje i kontrolisani drag & drop

06

Verzionisanje i objavljivanje rasporeda

07

Javni pregled rasporeda

08

Dnevni pregled profesora

Rezultat

0

rupa profesorima u validiranom kandidatu

Kvalitet se meri tek kada sistem prestane samo da bude „validan“.

U prihvaćenom optimizacionom rezultatu raspored je došao do nula rupa profesorima, uz samo jednu preostalu učeničku rupu — dovoljno dobar kvalitet da se prestane sa agresivnim daljim peglanjem i pređe na stvarnu upotrebu.

To je dobar primer zašto optimizacija nije beskonačna potraga za matematičkim savršenstvom. Cilj je sistem koji rešava stvaran problem dovoljno dobro da može da se koristi.

Šta ovaj projekat pokazuje

Nije svaki problem CRUD aplikacija.

Ovaj projekat mi je posebno važan zato što kombinuje klasičan full-stack razvoj sa modelovanjem ograničenja, optimizacijom, validacijom i realnim pravilima jedne škole.

Interfejs je samo poslednji sloj. Najveći deo vrednosti nastaje u pravilnom razumevanju problema i načinu na koji se velika količina međusobno zavisnih pravila pretvara u sistem.

Sledeći case study

Od optimizacije prelazimo na marketplace.

RentalWorkers rešava potpuno drugačiju vrstu problema: korisničke uloge, tržište rada, više jezika i poslovne tokove unutar jedne velike platforme.

RentalWorkers →