stefanosarta / examination-timetabling

Εργασία στο μάθημα "Αλγόριθμοι και Πολυπλοκότητα". Χρονοποργραμματισμός εξετάσεων Πανεπιστημίου

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Σύντομη περιγραφή

Το συγκεκριμένο πρόβλημα έχει να κάνει με τον χρονοπρογραμματισμό μιας εξεταστικής διαδικασίας για παράδειγμα, ενός Πανεπιστημίου. Αφορά την ορθή τοποθέτηση των περιόδων έτσι ώστε λόγω της εξέτασης που πραγματοποιείται σε κάθε μία από αυτές να μην προκύψει σύγκρουση λόγω εγγραφής κάποιου σπουδαστή. Δηλαδή, να μην υπάρχει κάποιος δπουδαστής που θα απαιτηθεί να συμμετάσχει σε περισσότερα του ενός μαθήματος στην ίδια περίοδο.

Η εφαρμογή που φτιάχτηκε είναι σε θέση να λύσει το πρόβλημα αυτό και να επιστρέψει ως αποτέλεσμα εκτός από ένα αρχείο με κατάληξη .sol που περιέχει μέσα την κάθε εξέταση και την περίοδο που τοποθετείται αλλά και το κόστος της επίλυσης. Το κόστος της επίλυσης προκύπτει από τις περιόδους που θα τοποθετηθεί ο κάθε φοιτητής ώστε να δώσει το μάθημα. Εκτός προφανώς της απαγόρευσης να συμμετάσχει στην ίδια περίοδο έχοντας σε αυτή την περίπτωση αποτυχία επίλυσης, έχουν οριστεί ποινές των 16,8,4,2,1 για εξετάσεις που απέχουν 1,2,3,4 ή 5 περιόδους αντίστοιχα. Το τελικό αποτέλεσμα αφορά την συνολική ποινή που προστίθεται για κάθε φοιτητή με την διαίρεση του συνολικού αριθμού των φοιτητών.

Οδηγίες εγκατάστασης

Η επίλυση του προβλήματος πραγματοποιήθηκε με την γλώσσα προγραμματισμού Python και συγκεκριμένα την έκδοση

$ python3 --version
Python 3.8.5

Το σύστημα που χρησιμοποιήθηκε είναι Ubuntu στην εξής έκδοση

$ lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.1 LTS
Release:	20.04
Codename:	focal

Απαιτείται επίσης η εγκατάσταση του πακέτου networkx κάτι το οποίο μπορεί να γίνει με

$ pip3 install networkx

Οδηγίες εκτέλεσης μη optimized προγράμματος

1. Κατέβασμα των αρχείων στο link

https://github.com/stefanosarta/examination-timetabling/archive/main.zip

2. Εκτέλεση του αρχείου main.py που βρίσκεται στον φάκελο code της εργασίας με την εντολή

$ python3 main.py

3. Φόρτωση ενός συγκεκριμένου προβλήματος στη μνήμη μέσω της 1ης επιλογής

4. Επίλυση ενός συγκεκριμένου προβλήματος μέσω της 2ης επιλογής

5. Φόρτωση της λύσης ενός συγκεκριμένου προβλήματος μέσω της 3ης επιλογής

6. Μαζική επίλυση των προβλημάτων μέσω της 4ης επιλογής

Σε κάθε βήμα των 3,4,5 εμφανίζεται μία αριθμημένη διαθέσιμη λίστα και ο χρήστης καλείται να επιλέξει ανάμεσα στα πιθανά αρχεία επιλέγοντας τον αντίστοιχο αριθμό και εισάγοντας το στο terminal.

Οδηγίες εκτέλεσης optimized προγράμματος

1. Κατέβασμα των αρχείων στο link

https://github.com/stefanosarta/examination-timetabling/archive/main.zip

2. Εκτέλεση του αρχείου main.py που βρίσκεται στον φάκελο optimized της εργασίας με την εντολή

$ python3 main.py

3. Φόρτωση ενός συγκεκριμένου προβλήματος στη μνήμη μέσω της 1ης επιλογής

4. Επίλυση ενός συγκεκριμένου προβλήματος μέσω της 2ης επιλογής

5. Εκτέλεση του optimization του προβλήματος αυτού μέσω της 5ης επιλογής στο menu

Σημείωση Για την εκτέλεση του optimization σε κάθε εκτέλεση του προγράμματος θα πρέπει να αλλαχτούν χειροκίνητα ο αριθμός των εξετάσεων και των περιόδων. Επιπλέον, θα πρέπει να αλλαχτεί το strategy στο solve_problem ώστε τα αποτελέσματα να είναι της ίδιας κατηγορίας με τα παραγώμενα.

About

Εργασία στο μάθημα "Αλγόριθμοι και Πολυπλοκότητα". Χρονοποργραμματισμός εξετάσεων Πανεπιστημίου


Languages

Language:Python 100.0%