romana98 / NTP

0 stars 0 forks source link

Optimizacija organizacije rasporeda nastave (Schedule)

Predmetni projekat iz naprednih tehnika programiranja - Romana Erdelji, sw58/2017

Opis problema

Rešavanje Nurse Scheduling Problem-a (NSP) adaptiran na problem organizacije rasporeda nastave u odnosu na zahteve fakulteta i želje (koji dani bi im više odgovarali u odnosu na druge) profesora i asistenata (hard and soft constraints).

Opis rešenja

Za rešavanje problema bi se koristio genetski algoritam.
Algoritam bi bio implementiran u programskom jeziku Go i u programskom jeziku Rust, kako bi se poredile performanse i težina implementacije.

Opis rada aplikacije

U schedule aplikaciji postoje dve vrste role - admin i staff.
Admin ima sledeće mogućnosti:

Staff ima sledeće mogućnosti:

Arhitektura sistema

Arhitektura sistema prestavlja dva backend-a sa deljenim client side.
Go backend koristi MongoDB za skladištenje podataka dok Rust koristi Postgres.
Za svaki deo je namešten docker image.
Note: rust je rađen kao mikroservisna arhitektura radi diplomskog rada

Go

Monolitna aplikacija koja predstavlja backend side, implementira CRUD operacije za sledeće entitete: fakultet, smene, predavanja/vežbe, profesore/asistente, hard i soft constraints, i genetski algoritam za generisanje rasporeda nastave. Go drawio

Rust

Mikroservisna aplikacija koja predstavlja backend side. Sastoji se iz sledećih mikroservisa:

Mikroservis schedule-service takođe komunicira sa faculty-service, lecture-service i staff-service radi dobavljanja potrebnih podataka za rad algoritma.

Rust-MS drawio

Angular

Predstavlja client side aplikacije, služi za manipulisanje CRUD operacijama nad entitetima i prikaz rasporeda nastave u tabelarnom prikazu.

NSP algoritam

Deljan opis algoritma, kao i poređenje performansi i težina implementacije se nalazi u fajlu "Izveštaj".

Docker

U folderu "docker-compose files" se nalaze compose fajlovi koji će napraviti potrebne container-e. Rust compose fajl pokreće Rust + Angular, dok go pokreće Go + Angular.

Pre puštanja compose fajlova potrebno je pokrenuti skriptu "LogMaker"/"linuxLogMaker" za kreiranje neophodnih log fajlova.
Bitno je da se folderi "go" i "rust" nalaze na istoj putanji kao i skripta, i da se docker-compose fajlovi nalaze u tim folderima kao što je u "docker-compose files" folderu.

Napomena: go i rust containter-i ne mogu biti u isto vreme pokrenuti jer api-gateway i go slušaju na istom portu.