Open simone-torino opened 3 years ago
Fonti che possono tornare utili per pensare all'algoritmo, me le segno qua per riguardarmele meglio più avanti.
https://stackoverflow.com/questions/2177836/algorithm-for-creating-a-school-timetable Dice di calcolare tutte le combinazioni possibili e scartare quelle che non soddisfano le condizioni. Ci sono diversi link che si possono guardare.
Alcuni software esistenti presi dal link sopra che mi ispiravano, non ho trovato il codice però. https://www.unitime.org/ https://www.optaplanner.org/ https://lalescu.ro/liviu/fet/
Un approccio con le matrici: https://stackoverflow.com/questions/3938491/scheduling-algorithm-for-maintining-two-dimensional-constraint All'ultima risposta soprattutto parla di liste di periodi da associare progressivamente ad ogni spazio che rispetti le condizioni.
Un intero articolo scientifico, dovesse servire da riferimento per qualcosa in particolare https://www.sciencedirect.com/science/article/pii/S1474667017377388 Altre cose complicate che spero non serviranno ma non si sa mai https://www.math.unipd.it/~frossi/cp-school/lepape.pdf
Questo programma sembra fare qualcosa di utile ma devo testarlo ancora, per ora so che prende dei numeri e genera una matrice https://github.com/codophobia/process-scheduling-algorithms/blob/master/roundrobin_scheduling.cpp
In generale basta usare le parole chiave giuste e qualcosa di utile salta fuori.
Per la lettura dal database servono:
Per ogni esecuzione del programma in generazione date esami devo passare anche l'anno accademico dalla stringa di comando per capire esattamente quali dati recuperare dal database, i dati che devono essere scelti in base all'anno accademico sono:
Ingredienti:
classe di oggetti contenenti le informazioni necessarie all'identificazione di un esame all'interno del calendario delle date (es. id corso di studio, id corso, durata esame ecc...)
il calendario è una matrice di dimensione a piacere contenente questi oggetti come elementi, le dimensioni dovrebbero esistere in relazione alle condizioni da rispettare (?)
decidere una gerarchia per le condizioni, in modo da stabilire in che ordine applicarle ed eventuali precedenze
Operativamente: programmare e testare una condizione per volta, in modo da accertarsi che funzioni bene prima di implementare il sistema con più condizioni. E' importante che ogni vincolo sia coerente con tutti gli altri.
Vincoli da rilassare da fare per ultimi.