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