Professional Documents
Culture Documents
ΤΕΧΝΟΛΟΓΙΑΣ
Διπλωματική Εργασία
Καραμανωλάκης Νικόλαος
Καραμανωλάκης Νικόλαος
Ευχαριστίες
Αφιέρωση
Αφιερωμένη τέλος η εργασία αυτή στους γονείς μου, που μου έδωσαν τα εφόδια για πίστη
στην εκπαίδευση και μάθηση και ειδικά στον πατέρα μου που δεν είναι πλέον μαζί μας.
Μας λείπεις…
iv
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Περίληψη
Θέμα αυτής της διπλωματικής εργασίας αποτελεί η σχεδίαση και κατασκευή αλγόριθμου
για την επίλυση του προβλήματος της «Κατασκευής Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού». Οι περιορισμοί και τα δεδομένα εισόδου για το πρόβλημα
προήλθαν από τον Δεύτερο Διεθνή Διαγωνισμό Κατασκευής Προγράμματος
Νοσηλευτικών Βαρδιών (INRC-II) ο οποίος διεξήχθη το 2014-2015. Σε αυτόν, σε
αντίθεση με τον πρώτο Διεθνή Διαγωνισμό (INRC-I 2010) εισάγεται η έννοια των
σταδίων (εβδομάδων) και απαιτείται να δοθεί λύση σε διαδοχικές εβδομάδες του ορίζοντα
σχεδιασμού (multi-stage formulation). Γίνεται δηλαδή επίλυση του προβλήματος κάθε
εβδομάδας και τα δεδομένα εξόδου κάθε εβδομάδας μεταφέρονται στην επόμενη
εβδομάδα. Το πρόβλημα συνίσταται στην κατανομή νοσηλευτών/τριών σε βάρδιες -
Shifts (π.χ. Πρωί – Απόγευμα – Νύχτα) και δεξιότητες – Skills (π.χ. Προϊσταμένη,
Νοσηλεύτρια, Εκπαιδευόμενη) με συγκεκριμένες απαιτήσεις ανά εβδομάδα. Υπάρχουν οι
αυστηροί περιορισμοί (hard constraints) που πρέπει οπωσδήποτε να ικανοποιούνται για να
είναι έγκυρη η λύση καθώς και οι χαλαροί περιορισμοί (soft constraints) για τους οποίου
υπάρχει ποινή για κάθε παραβίαση, και έτσι βγαίνει το αποτέλεσμα της αντικειμενικής
συνάρτησης. Είναι ένα δύσκολο πρόβλημα συνδυαστικής βελτιστοποίησης υπο
περιορισμούς που είναι πολύ δύσκολο υπολογιστικά να βρεθεί σε αποδεκτό χρόνο η
βέλτιστη λύση με έναν ντετερμινιστικό αλγόριθμο. Για την επίλυση του προβλήματος
υλοποιήθηκε αλγόριθμος σε γλώσσα προγραμματισμού Java σε δύο (2) στάδια, ώστε από
μία αρχική καλή λύση που βρίσκεται να πηγαίνουμε βήμα βήμα με διάφορες μεθόδους σε
μια βελτιωμένη σχεδόν βέλτιστη λύση. Έγινε σύγκριση των δεδομένων εξόδου με τα
δεδομένα που είχαν κατατεθεί στον διαγωνισμό και υπάρχει ένα ικανοποιητικό
αποτέλεσμα.
Λέξεις – Κλειδιά
v
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Nikolaos Karamanolakis
Abstract
The subject of this thesis is the design and construction of an algorithm to solve the
problem of "Construction of Nurse Rostering Schedules". The restrictions and input data
for the problem came from "The Second International Nurse Rostering Competition"
(INRC-II) which was held in 2014-2015. In that, in contrast to the first International
Competition (INRC-I 2010) the concept of stages (weeks) is introduced and it is required
to give a solution to successive weeks of the design horizon (multi-stage formulation).
That is, the problem is solved for every week and the output data of each week is
transferred to the next week. The problem consists of distributing nurses in Shifts (eg
Morning - Afternoon - Night) and Skills (eg HeadNurse, Nurse, Trainee) with specific
requirements per week. There are Hard constraints that must be satisfied in order for the
solution to be acceptable as well as Soft constraints for which of them there is a penalty
for each violation, and thus the result of the objective function comes out. It is a difficult
problem of combinatorial optimization under constraints which is very difficult
computationally to find the optimal solution with a deterministic algorithm in acceptable
time. To solve the problem, an algorithm was implemented in Java programming language
in two (2) stages, so that from an initial good solution found, we go step by step with
various methods to an improved almost optimal solution. The output data was compared
with the data submitted in the competition and there is a satisfactory result.
Keywords
vi
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Περιεχόμενα
Ευχαριστίες ..........................................................................................................................iv
Περίληψη............................................................................................................................... v
Abstract ................................................................................................................................vi
Κατάλογος Εικόνων / Σχημάτων .........................................................................................ix
Κατάλογος Πινάκων ............................................................................................................. x
Συντομογραφίες & Ακρωνύμια ............................................................................................xi
1. Εισαγωγή ........................................................................................................................ 12
1.1 Το πρόβλημα της κατανομής νοσηλευτικών βαρδιών ................................................. 12
1.2 Σκοπός διπλωματικής εργασίας ................................................................................... 13
1.3 Διάρθρωση διπλωματικής εργασίας ............................................................................. 13
1.4 Ορολογία διπλωματικής εργασίας ............................................................................... 14
2. Θεωρητικό υπόβαθρο του προβλήματος ........................................................................ 17
2.1 Η έννοια του χρονοπρογραμματισμού ......................................................................... 17
2.2 Ο χρονοπρογραμματισμός για νοσηλευτικές βάρδιες .................................................. 18
2.3 Ιστορικό επίλυσης του προβλήματος της κατανομής νοσηλευτικών βαρδιών ............ 20
2.4 Προσεγγίσεις βελτιστοποίησης: Μαθηματικός προγραμματισμός .............................. 21
2.5 Η προσέγγιση του ακέραιου γραμμικού προγραμματισμού (Integer Linear
Programming) ..................................................................................................................... 23
2.6 Γενετικοί Αλγόριθμοι (Geneting Algorithms) ............................................................. 24
2.7 Αλγόριθμος αναζήτησης «Αναρρίχηση σε λόφο» (Hill Climbing) ............................. 25
2.8 Αλγόριθμος αναζήτησης «Προσομοιωμένης Ανόπτησης» (Simulated Annealing) .... 26
2.9 Αλγόριθμος αναζήτησης Ταμπού (Tabu Search) ......................................................... 27
2.10 Αλγόριθμος βελτιστοποίησης αποικιών μυρμηγκιών (Ant Colony Optimization –
ACO) ................................................................................................................................... 28
2.11 Αλγόριθμος αναζήτησης μεταβλητής γειτονιάς (Variable Neighborhood Search) ... 30
3. Περιγραφή του προβλήματος ......................................................................................... 32
3.1 Ιστορικό – γενικά στοιχεία ........................................................................................... 32
3.2 Ορισμός προβλήματος ................................................................................................. 34
3.2.1 Σενάριο (Scenario) .................................................................................................... 34
3.2.2 Δεδομένα εβδομάδας (Week Data) ........................................................................... 35
3.2.3 Ιστορικό (History) ..................................................................................................... 36
3.3 Διαδικασία επίλυσης .................................................................................................... 37
3.4 Περιορισμοί Διαγωνισμού (Constraints)...................................................................... 40
3.4.1 Περιορισμοί για μια μεμονωμένη εβδομάδα............................................................. 40
3.4.2 Περιορισμοί που εκτείνονται σε όλο τον ορίζοντα προγραμματισμού ..................... 41
3.5 Περιπτώσεις (Instances) ............................................................................................... 43
3.6 Εργαλεία λογισμικού του διαγωνισμού ....................................................................... 44
3.6.1 Προσομοιωτής (Simulator) ....................................................................................... 44
3.6.2 Επικυρωτής (Validator)............................................................................................. 48
3.6.3 Εργαλείο σύγκρισης (Benchmark) ........................................................................... 49
3.6.4 Εργαλείο ελέγχου εφικτότητας (Feasibility Checker) .............................................. 50
4. Τρόπος επίλυσης του προβλήματος – Αλγόριθμος ........................................................ 51
4.1 Είσοδος, Έξοδος δεδομένων ........................................................................................ 51
4.2 Προεπεξεργασία δεδομένων ........................................................................................ 53
vii
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
viii
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
ix
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Κατάλογος Πινάκων
x
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
xi
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
1. Εισαγωγή
Διπλωματική Εργασία 12
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
παραβίαση. Το σύνολο των ποινών για όλους τους χαλαρούς περιορισμούς αποτελούν την
αντικειμενική συνάρτηση για την λύση.
Διπλωματική Εργασία 13
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
κεφάλαιο υπάρχει η παρουσίαση του αλγόριθμου που σχεδιάστηκε για την επίλυση του
προβλήματος. Στο πέμπτο κεφάλαιο υπάρχει μια παρουσίαση από κάποιες λύσεις που
βρέθηκε βιβλιογραφία για τους τελικούς συμμετέχοντες του διαγωνισμού (finalists) καθώς
και παρουσίαση των αποτελεσμάτων τους σε σύγκριση με τον δικό μου αλγόριθμο.
Τέλος, στα παραρτήματα, στο Α) υπάρχει αναλυτική παρουσίαση των αρχείων των
δεδομένων εισόδου (file formats), στο Β) υπάρχει μια ανάλυση – επεξήγηση για κάποιους
περίπλοκους χαλαρούς περιορισμούς, στο Γ) ένα πλήρες παράδειγμα για κάποια
δεδομένα εισόδου και μια λύση του πως ελέγχονται οι αυστηροί περιορισμοί και πως
υπολογίζονται οι χαλαροί περιορισμοί, τέλος στο Παράρτημα Δ) μια περιγραφή των
αρχείων του κώδικα καθώς και επεξήγηση του τρόπου εκτέλεσης του επιλυτή (Solver) σε
γραμμή εντολών (command prompt) και σε γραφικό περιβάλλον με μία φόρμα που έχει
δημιουργηθεί στα πλαίσια της διπλωματικής εργασίας.
Διπλωματική Εργασία 14
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
τελευταία ανάθεση εργασίας που είχε. Βρίσκονται στο αρχείο ιστορικού (History
file).
Τύπος Βάρδιας (Shift Type) : Η βάρδια για την οποία θα γίνει ανάθεση στην
νοσηλεύτρια. Για παράδειγμα : Πρωί (Early), Απόγευμα (Late), Νύχτα (Night)
Δεξιότητα (Skill) : Η δεξιότητα για την οποία γίνεται ανάθεση στο συγκεκριμένο
τύπο βάρδιας. Για παράδειγμα : Προϊσταμένη (HeadNurse), Νοσηλεύτρια (Nurse),
Εκπαιδευόμενη (Trainee). Να σημειωθεί ότι μια νοσηλεύτρια μπορεί να έχει
παραπάνω από μία δεξιότητες, χωρίς να είναι απαραίτητο αυτό.
Σύμβαση (Contract) : Η σύμβαση εργασίας μιας νοσηλεύτριας η οποία ορίζεται
στο αρχείο σεναρίου και περιέχει πληροφορίες όσον αφορά δεδομένα και
περιορισμούς εργασίας. Για παράδειγμα ο ελάχιστος και ο μέγιστος αριθμός των
συνολικών αναθέσεων στο συνολικό διάστημα των εβδομάδων ή ο ελάχιστος και
μέγιστος αριθμός των συνεχόμενων ημερών εργασίας. Κάθε νοσηλεύτρια έχει μία
μοναδική σύμβαση.
Απαγορευμένες διαδοχές τύπων βάρδιας (Forbidden Shift Type Succesions) : Είναι
πληροφορία που δηλώνεται στο αρχείο σεναρίου και αφορά τύπους βάρδιας που
δεν μπορούν να ανατεθούν μετά από άλλο τύπο βάρδιας. Για παράδειγμα : δεν
μπορούμε να έχουμε τύπο βάρδιας Πρωί μετά από Νύχτα.
Ανάθεση (Assignment) : Η ανάθεση μιας νοσηλεύτριας σε συγκεκριμένη ημέρα,
τύπο βάρδιας και δεξιότητα. Για παράδειγμα : [«Ονομα νοσηλεύτριας», Δευτέρα,
Πρωί, Προϊσταμένη]
Λύση (Solution) : Ένα σύνολο αναθέσεων σε μία εβδομάδα το οποίο είναι η
κατανομή των νοσηλευτριών σε ημέρες, τύπους βάρδιας και δεξιότητες.
Έγκυρη Λύση : Μια λύση η οποία ικανοποιεί όλους τους αυστηρούς
περιορισμούς.
Αυστηροί Περιορισμοί (Hard Constraints) : Οι περιορισμοί που πρέπει να
πληρούνται για να είναι έγκυρη η λύση για την συγκεκριμένη εβδομάδα που
εξετάζεται.
Χαλαροί Περιορισμοί (Soft Constraints) : Περιορισμοί που δεν κάνουν την λύση
να μην είναι έγκυρη όταν παραβιάζονται αλλά προσθέτουν ποινή (penalty) για
κάθε παραβίαση τους στην αξιολόγηση της λύσης.
Eπιλυτής (Solver) : Το εκτελέσιμο που δημιουργείται από τους διαγωνιζόμενους
στον διαγωνισμό και από την παρούσα διπλωματική εργασία και το οποίο για μια
Διπλωματική Εργασία 15
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Διπλωματική Εργασία 16
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Στα προβλήματα του πραγματικού κόσμου, η έκφραση των συνθηκών που κάνουν ένα
πρόγραμμα προτιμότερο από κάποιο άλλο και ενσωματώνοντας αυτές τις πληροφορίες σε
ένα αυτοματοποιημένο σύστημα, δεν είναι εύκολη υπόθεση. Επιπλέον, η συνδυαστική
Διπλωματική Εργασία 17
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Διπλωματική Εργασία 18
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
αναφερόμαστε στους όρους εργασίας που έχουν υπογραφεί μεταξύ των εργαζομένων και
το νοσοκομείο ή την μονάδα περίθαλψης και η οποία περιλαμβάνει αιτήματα για μέρες
εργασίας ή βάρδιες ρεπό, εργασία τα Σαββατοκύριακα, μέγιστες αποδεκτές συνεχόμενες
εργάσιμες ημέρες κλπ.
Παλιότερα η κατανομή γινόταν χειροκίνητα, ένα γεγονός που είναι πολύ χρονοβόρο και
απαιτητικό σε πόρους. Αργότερα υπήρξαν νοσοκομεία με μηχανογραφικά συστήματα
χρονοπρογραμματισμού που δεν εκμεταλλεύονταν όμως όλο το φάσμα των δυνατοτήτων
που υπήρχε. Υπήρχαν δυνατότητες επεξεργασίας προγραμματισμού που
χρησιμοποιούνταν συχνά, αλλά δεν υπήρχε η αυτόματη δημιουργία μια κατανομής
χρονοδιαγράμματος. Η σημασία μιας συστηματικής προσέγγισης για τη δημιουργία
Διπλωματική Εργασία 19
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
καλών χρονοδιαγραμμάτων είναι μεγάλη, ειδικά στην υγειονομική περίθαλψη, όπου δεν
είναι αποδεκτό να μην υποστηρίζεται πλήρως η φροντίδα των ασθενών, οι ανάγκες και οι
απαιτήσεις του προσωπικού.
Σε νοσοκομεία συνήθως υπάρχουν δύο τρόποι όσον αφορά το διοικητικό κομμάτι της
δημιουργίας της κατανομής των νοσηλευτικών βαρδιών. Ο ένας είναι ο συγκεντρωτικός
τρόπος (Centralized Scheduling) όπου η κατανομή δημιουργείται κεντρικά για όλο το
νοσοκομείο ενώ ο δεύτερος είναι ανά κλινική (Departmental - Unit Scheduling), όπου εκεί
συνήθως οι προϊσταμένες (HeadNurses) δημιουργούν το πρόγραμμα. Ο πρώτος προσφέρει
το πλεονέκτημα της εξοικονόμησης πόρων αλλά μπορεί να οδηγήσει σε αρκετές «αδικίες»
ενώ ο δεύτερος είναι ο πιο συνηθισμένος μιας και υπάρχει καλύτερη γνώση για τα θέματα
και τις απαιτήσεις κάθε κλινικής αλλά δίνει παραπάνω φόρτο εργασίας στις προϊσταμένες.
Διπλωματική Εργασία 20
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
περιορισμών – Constraing Programming (Cheng et al., 1997). Στη δεκαετία του 1980 και
αργότερα, τεχνικές τεχνητής νοημοσύνης για το πρόβλημα της κατανομής νοσηλευτριών
(δηλωτικές προσεγγίσεις, προγραμματισμός περιορισμών, έμπειρα συστήματα)
ερευνήθηκαν με κάποια επιτυχία. Επίσης ένας αριθμός μεταευρετικών αλγορίθμων, όπως
η προσομοιωμένη ανόπτηση – «Simulated Annealing», «Tabu Search» και Εξελικτικοί
Αλγόριθμοι - Evolutionary Algorithms ήταν οι μεθόδοι επιλογής αρκετών ερευνητών στην
προσπάθειά τους να αντιμετωπίσουν το πρόβλημα (Dowsland, 1998; Burke et al., 2001a).
Συχνά, αυτές οι μέθοδοι συνδυάζονται με άλλες είτε παρόμοιες είτε όχι.
Διπλωματική Εργασία 21
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Στο πρακτικό κομμάτι κάποια βήματα ενός τέτοιου αλγόριθμου είναι (Miller et al, 1976) :
Όπως βλέπουμε βασικό μειονέκτημα είναι ότι πρέπει να βρεθούν για κάθε νοσηλεύτρια
όλα τα δυνατά προγράμματα. Επίσης ο αλγόριθμος δεν εγγυάται ότι θα βρεθεί πάντα μια
έγκυρη λύση.
Διπλωματική Εργασία 22
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Τέτοια προβλήματα είναι NP-hard και πολλοί αλγόριθμοι έχουν προταθεί για την ακριβή
επίλυση τους. Για την κατά προσέγγιση και γρήγορη επίλυση μεγάλων περιπτώσεων
τέτοιων προβλημάτων έχουν προταθεί η τεχνική αναζήτησης «Branch and Bound», η
οποία συνήθως έχει απαγορευτικό χρόνο υπολογισμού για περιπτώσεις μεγάλων
προβλημάτων. Εφόσον το αρχικό πρόβλημα έχει λυθεί, είναι απαραίτητο η λύση να
βελτιωθεί περαιτέρω σε σχέση με τα ακάλυπτα στοιχεία του προβλήματος
χρησιμοποιώντας διάφορες προσεγγίσεις τοπικής αναζήτησης.
Διπλωματική Εργασία 23
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Ο τρόπος λειτουργίας τους είναι εμπνευσμένος από την βιολογία, την γενετική και την
φυσική επιλογή (την ιδέα της επιβίωσης του πιο ικανού), για αυτό και το όνομα τους.
Είναι ένας αλγόριθμος αναζήτησης όπου οι διάδοχες καταστάσεις παράγονται με το
συνδυασμό δύο γονικών καταστάσεων, παρά με την τροποποίηση μιας μεμονωμένης
κατάστασης. Η μέθοδος κάνει διασταύρωση μιας πιθανής λύσης με μια άλλη λύση για τη
δημιουργία νέων λύσεων.
Διπλωματική Εργασία 24
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Το μειονέκτημα του αλγόριθμου Hill Climbing είναι ότι μπορεί να κολλήσει σε ένα
τοπικό μέγιστο. Τοπικό μέγιστο είναι μια κορυφή που είναι υψηλότερη από καθεμία από
τις γειτονικές της καταστάσεις, αλλά χαμηλότερη από το ολικό μέγιστο. Ο αλγόριθμος
αναρρίχησης λόφων που φτάνει κοντά σε ένα τοπικό μέγιστο θα τραβήξει προς τα πάνω
προς την κορυφή, αλλά στη συνέχεια θα έχει κολλήσει χωρίς πουθενά αλλού να πάει.
Επίσης μπορεί να υπάρξει περίπτωση να φτάσει σε μία κατάσταση όπου να μην μπορεί να
κάνει πρόοδο αφού θα έχει φτάσει σε ένα «οροπέδιο» (plateau) όπου δεν υπάρχουν
ξεκάθαρες κορυφές για να μεταβεί. Για παράδειγμα όταν οι επόμενες κορυφές έχουν όλες
ίδια τιμή με την τρέχουσα κατάσταση.
Τέλος έχουν προταθεί κάποιες παραλλαγές του αλγόριθμου Hill Climbing όπως ο
«Stochastic Hill Climbing” όπου επιλέγεται μια κίνηση τυχαία μεταξύ των ανηφορικών
Διπλωματική Εργασία 25
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Οι αλγόριθμοι αναρρίχησης λόφων που έχουν περιγραφεί μέχρι τώρα είναι ελλιπείς,
συχνά αποτυγχάνουν να βρουν τον στόχο όταν υπάρχει γιατί μπορεί να κολλήσουν στα
τοπικά μέγιστα. Ο αλγόριθμος «Αναρρίχηση με τυχαία επανεκκίνηση» (Random-restart
Hill Climbing) διεξάγει μια σειρά αναζητήσεων αναρρίχησης λόφων από τυχαία
δημιουργημένες αρχικές καταστάσεις και τερματίζει όταν βρεθεί ένας στόχος. Είναι
πλήρης με πιθανότητα να πλησιάζει το 1, για τον ασήμαντο λόγο ότι τελικά θα
δημιουργήσει μια κατάσταση στόχου ως αρχική κατάσταση. Αν κάθε αναρρίχηση –
αναζήτηση έχει πιθανότητα p επιτυχίας, τότε ο αναμενόμενος αριθμός επανεκκινήσεων
του αλγόριθμου που απαιτούνται είναι 1/p.
Διπλωματική Εργασία 26
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Καταρχάς ορίζεται μια αρχική θερμοκρασία T, το ελάχιστο Tmin και ένα όριο
επαναλήψεων. Επίσης επιλέγεται ένα αρχικό σημείο εκκίνησης (λύση). Ο εσωτερικός
βρόχος του αλγορίθμου είναι αρκετά παρόμοιος με τον αλγόριθμο ανάβασης λόφου.
Ωστόσο, αντί να επιλέξει την καλύτερη κίνηση, επιλέγει μια τυχαία κίνηση. Αν η κίνηση
βελτιώνει την κατάσταση, είναι πάντα αποδεκτή. Διαφορετικά, ο αλγόριθμος δέχεται την
κίνηση με κάποια πιθανότητα p μικρότερη από 1. Η πιθανότητα μειώνεται εκθετικά
ανάλογα με το πόσο «κακή» είναι η κίνηση. Η πιθανότητα επίσης μειώνεται όσο πέφτει η
«θερμοκρασία» T, δηλαδή είναι πιο πιθανό να επιτρέπονται «κακές» κινήσεις στην
έναρξη όταν η «θερμοκρασία» είναι υψηλή και γίνονται πιο απίθανες καθώς το T
μειώνεται. Κάποιος μπορεί να αποδείξει ότι εάν το χρονοδιάγραμμα χαμηλώσει το T
αρκετά αργά, ο αλγόριθμος θα βρει ένα συνολικό βέλτιστο με πιθανότητα να πλησιάζει το
1.
Ο αλγόριθμος χρησιμοποιεί δομές μνήμης που σχηματίζουν αυτό που είναι γνωστό ως
λίστα ταμπού, – εξ ου και το όνομα του αλγορίθμου - ένα σύνολο κανόνων και
απαγορευμένων λύσεων που χρησιμοποιούνται για να φιλτράρουν ποιες λύσεις θα γίνουν
Διπλωματική Εργασία 27
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
δεκτές στη γειτονιά. Η λίστα ταμπού περιέχει απογορευμένες κινήσεις ώστε η αναζήτηση
να μην επιστρέφει πολύ γρήγορα σε προηγούμενες επισκέψιμες λύσεις και έτσι ο
αλγόριθμος να μην κολλάει σε τοπικά μέγιστα ή οροπέδια.
Επίσης προκειμένου να υπάρχει κέρδος στην ποιότητα της λύσης και την αποδοτικότητα
του αλγορίθμου χρησιμοποιούνται έξυπνες τεχνικές όπως το να απομακρύνεται η
αναζήτηση προς άλλες μακρινές γειτονιές που είναι πιο «υποσχόμενες». Αυτό γίνεται
χρησιμοποιώντας ειδικά επιλεγμένα υποσύνολα της γειτονιάς τα οποία λέγονται
υποψήφιες λίστες στρατηγικής και επίσης, την αναγνώριση χαρακτηριστικών που παίζουν
σημαντικό κομμάτι στην αναζήτηση προς καλές λύσεις τα οποία λέγονται χαρακτηριστικά
επιρροής (influential attributes). Υπάρχει επίσης η περίπτωση εφόσον κολλήσει ο
αλγόριθμος κάπου να αναζητηθεί μια γειτονιά ακόμα και χρησιμοποιώντας μη έγκυρες
λύσεις ώστε να μπορεί να προχωρήσει.
Έχει το πλεονέκτημα ότι μπορεί να αποφύγει τοπικά μέγιστα και οροπέδια επιλέγοντας
για παράδειγμα λύσεις που δεν βελτιώνουν την ποινή, ενώ χρησιμοποιώντας την λίστα
ταμπού αποφεύγει τους κύκλους και την επανάληψη των λύσεων αλλά έχει το
μειονέκτημα ότι μπορεί να χρειάζεται πολλές επαναλήψεις ενώ και η παραμετροποίηση
του δεν είναι εύκολη.
Διπλωματική Εργασία 28
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
διαδρομή, αλλά μία αρκετά «καλή», από άποψη σύντομης διάρκειας. Έτσι, η
συμπεριφορά τους, τους επιτρέπει να λύσουν ένα πρόβλημα βελτιστοποίησης.
Αυτό το είδος της επιτυχίας των βιολογικών μυρμηγκιών εξηγείται εξ ολοκλήρου από το
είδος της επικοινωνίας τους και με τον τρόπο που αποφασίζουν πού θα πάνε: Καθώς
περπατούν, τα μυρμήγκια αφήνουν μια χημική ουσία που ονομάζεται φερομόνη στο
έδαφος και τείνουν να επιλέγουν διαδρομές που χαρακτηρίζονται από ισχυρή
συγκέντρωση φερομόνης. Έχοντας δύο αρχικά ανεξερεύνητες διαδρομές, μια σύντομη και
μια μακρύτερη, μεταξύ της φωλιάς και της πηγής τροφής, τα μυρμήγκια επιλέγουν στην
αρχή τυχαία ποια θα περπατήσουν. Μυρμήγκια που έχουν επιλέξει, στην αρχή τυχαία, την
πιο σύντομη διαδρομή είναι τα πρώτα που θα φτάσουν στο φαγητό και θα ξεκινήσουν την
επιστροφή τους στη φωλιά. Επομένως, η φερομόνη αρχίζει να συσσωρεύεται πιο γρήγορα
στη συντομότερη διαδρομή παρά στην μακρύτερη. Τα επόμενα μυρμήγκια τείνουν να
ακολουθούν τη συντομότερη διαδρομή επειδή έχει μεγαλύτερη συγκέντρωση φερομόνης,
ενισχύοντάς την έτσι όλο και περισσότερο, και προσελκύοντας περαιτέρω άλλα
μυρμήγκια στην καλή διαδρομή.
Στο δεύτερο βήμα, την «εξάτμιση» φερομόνης, συγκρίνονται τα μονοπάτια που βρήκαν τα
διάφορα μυρμήγκια και γίνεται ενημέρωση των φερομόνων. Η φερομόνη μειώνεται στις
ακμές από κάθε μυρμήγκι μόλις προστεθεί σε ένα μερικό περπάτημα στο γράφημα
κατασκευής, αυτή η λειτουργία ονομάζεται τοπική ενημέρωση. Η μείωση της φερομόνης
σε επιλεγμένες ακμές είναι σημαντική, προκειμένου να αποφευχθεί η υπερβολικά
γρήγορη σύγκλιση του αλγορίθμου σε μη βέλτιστες λύσεις και να ευνοηθεί η εξερεύνηση
νέων περιοχών του χώρου αναζήτησης. Είναι ενδιαφέρον επίσης ότι η φερομόνη
μειώνεται στο βιολογικό περιβάλλον των μυρμηγκιών, λόγω εξάτμισης.
Διπλωματική Εργασία 29
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Διπλωματική Εργασία 30
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Ένα τοπικό ελάχιστο σε σχέση με μια γειτονιά δεν είναι απαραίτητα τοπικό
ελάχιστο για μια άλλη γειτονιά.
Ένα συνολικό ελάχιστο είναι ένα τοπικό ελάχιστο σε σχέση με όλες τις πιθανές
γειτονιές.
Για πολλά προβλήματα, τα τοπικά ελάχιστα σε σχέση με μία ή περισσότερες
γειτονιές είναι σχετικά κοντά μεταξύ τους.
Αυτή η τελευταία παρατήρηση, η οποία είναι εμπειρική, υπονοεί ότι ένα τοπικό ελάχιστο
παρέχει συχνά κάποιες πληροφορίες για το συνολικό. Αυτό μπορεί για παράδειγμα να
είναι πολλές μεταβλητές με την ίδια τιμή. Ωστόσο, συνήθως δεν είναι γνωστό ποιες από
όλες. Μια οργανωμένη μελέτη της γειτονιάς αυτού του τοπικού ελάχιστου είναι επομένως
ενδεδειγμένη, μέχρι να βρεθεί ένα καλύτερο.
Διπλωματική Εργασία 31
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Διπλωματική Εργασία 32
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Παρέχεται από τον διαγωνισμό ένα απλό λογισμικό γραμμής εντολών (command line
software) προσομοίωσης/επικύρωσης που θα χρησιμοποιηθεί για την προσομοίωση της
διαδικασίας επίλυσης και για την αξιολόγηση της ποιότητας του επιλυτή (Solver). Ο
προσομοιωτής (Simulator) καλεί τον επιλυτή (Solver) του συμμετέχοντα στον διαγωνισμό
για κάθε στάδιο επαναληπτικά και στη συνέχεια ενημερώνει το ιστορικό (δηλαδή το
αρχείο ιστορικού) μετά από κάθε μεμονωμένη εκτέλεση. Στο τέλος της εκτέλεσης του
Simulator ο παρεχόμενος επικυρωτής (Validator) συνενώνει τις λύσεις για όλες τις
εβδομάδες και τις αξιολογεί όλες μαζί, μαζί με τα αθροιστικά δεδομένα που προέρχονται
από το τελικό ιστορικό. Εξάγει ως αποτέλεσμα αν η λύση του επιλυτή είναι έγκυρη καθώς
και την συνολική τιμή της ποινής (penalty) για την λύση.
Ο επιλυτής (Solver) πρέπει να λάβει υπόψη τις ακόλουθες ξεχωριστές πηγές εισόδου:
Σενάριο (Scenario) : Πληροφορίες που είναι ίδιες για όλες τις εβδομάδες του ορίζοντα
προγραμματισμού, όπως η λίστα των νοσηλευτών/τριών, συμβάσεις νοσηλευτών/τριων,
τύποι βάρδιας κ.α.
Ιστορικό (History) : Πληροφορίες που πρέπει να διαβιβάζονται από την μια εβδομάδα
στην άλλη, προκειμένου να υπολογιστούν σωστά οι παραβιάσεις περιορισμών.
Περιλαμβάνει πληροφορίες για τα δεδομένα συνόρων (border data) και ολικούς μετρητές
(global counters).
Ο επιλυτής (Solver) πρέπει να παράγει ένα αρχείο εξόδου με την λύση, βάσει του οποίου,
ο προσομοιωτής (Simulator) υπολογίζει το νέο αρχείο ιστορικού, για να περάσει πίσω
στον επιλυτή για την λύση της επόμενης εβδομάδας. Όπως θα εξηγηθεί περαιτέρω, εκτός
από τα υποχρεωτικά αρχεία εισόδου και εξόδου, ένα προσαρμοσμένο αρχείο δεδομένων
μπορεί να χρησιμοποιηθεί για την ανταλλαγή πληροφοριών μεταξύ δύο σταδίων.
Διπλωματική Εργασία 33
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
για να αξιολογήσουν την επίλυσή τους. Να σημειωθεί επίσης ότι στο Παράρτημα Α του
κειμένου υπάρχει περιγραφή για τις μορφές αρχείων (file formats) ενώ το Παράρτημα Β
παρέχει μια βαθύτερη ματιά στην αξιολόγηση ορισμένων περίπλοκων περιορισμών (hard
& soft constraints). Τέλος στο Παράρτημα Γ υπάρχει ένα αναλυτικό παράδειγμα του πως
βγαίνουν οι ποινές για μια συγκεκριμένη εβδομάδα με συγκεκριμένα δεδομένα εισόδου.
Διπλωματική Εργασία 34
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
3. Τύποι βάρδιας (Shift types) : Για κάθε τύπο βάρδιας (για παράδειγμα: Πρωί -
Early, Απόγευμα - Late, Νύχτα - Night), δίνεται ο ελάχιστος και ο μέγιστος
αριθμός συνεχόμενων αναθέσεων του συγκεκριμένου τύπου
4. Απαγορευμένες διαδοχές τύπων βάρδιας (Forbidden Shift Type Succesions) :
Είναι ένας πίνακας απαγορευμένων διαδοχών τύπου βάρδιας. Για παράδειγμα,
μπορεί να μην επιτρέπεται να ανατίθεται σε ένα νοσηλευτή/τρια μια βάρδια πρωί
την επόμενη ημέρα από βάρδια νύχτας.
5. Συμβάσεις (Contracts): Κάθε νοσηλευτής/τρια έχει μία μοναδική συγκεκριμένη
σύμβαση (για παράδειγμα : πλήρους απασχόλησης – Full Time, μερικής
απασχόλησης – Part Time, ημιαπασχόληση – Half Time κλπ). Η σύμβαση θέτει
όρια στη διανομή και τον αριθμό των αναθέσεων εντός του ορίζοντα
προγραμματισμού. Αναλυτικά, πέρα από το όνομα της σύμβασης περιέχει τα εξής
όρια εργασίας:
ελάχιστος και μέγιστος συνολικός αριθμός αναθέσεων εργασιών στον
συνολικό ορίζοντα προγραμματισμού.
Διπλωματική Εργασία 35
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Απαιτήσεις (Requirements) : Δίνεται, για κάθε βάρδια, για κάθε δεξιότητα, για κάθε
ημέρα της εβδομάδας, ο ελάχιστος και ο βέλτιστος αριθμός νοσηλευτών/τριων που είναι
απαραίτητος για την εκπλήρωση των εργασιακών καθηκόντων.
Διπλωματική Εργασία 36
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Ο συνολικός αριθμός σαββατοκύριακων που έχουν εργασία. Αν έστω μια από τις
δύο ήμερες του σαββατοκύριακου έχει ανατεθεί σε βάρδια αυτό σημαίνει ότι το
σαββατοκύριακο ήταν εργαζόμενο και αυξάνεται ο συγκεκριμένος μετρητής.
Το ιστορικό υπολογίζεται μετά από κάθε εβδομάδα με βάση τη λύση που έδωσε ο
επιλυτής (Solver) και το προηγούμενο ιστορικό. Το ιστορικό που διαβιβάστηκε στον
επιλυτή για την πρώτη εβδομάδα έχει όλες τις τιμές μετρητή ίσες με 0, ενώ τα δεδομένα
συνόρων μπορεί να έχουν οποιαδήποτε τιμή.
Μετά από κάθε εβδομάδα, οι πληροφορίες ιστορικού υπολογίζονται με βάση τη λύση και
το προηγούμενο ιστορικό και παραδίδονται σε ένα νέο αρχείο. Αυτό γίνεται από τον
προσομοιωτή (Simulator) που παρέχεται, ενώ ο επιλυτής πρέπει να παραδώσει μόνο την
ίδια τη λύση.
Εκτός από τη δημιουργία ενός αρχείου λύσης μετά την επίλυση κάθε σταδίου, ο επιλυτής
μπορεί να θέλει να αποθηκεύσει κάποιες άλλες πληροφορίες πρόβλεψης σε ένα
προσαρμοσμένο αρχείο (με κίτρινο χρώμα στο Σχήμα 3.1) και να τις περάσει στην
επόμενη κλήση επίλυσης, προκειμένου να καθοδηγήσει την επίλυση του το επόμενο
στάδιο καλύτερα. Το περιεχόμενο και η μορφή αυτού του αρχείου είναι ελεύθερη, αλλά το
όνομά του καθορίζεται από τον προσομοιωτή, όπως περιγράφεται παρακάτω.
Διπλωματική Εργασία 37
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Διπλωματική Εργασία 38
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Το αποτέλεσμα που παράγει ο επιλυτής είναι μια λίστα αναθέσεων των νοσηλευτών/τριων
σε βάρδιες και δεξιότητες. Κάθε καταχώρηση περιέχει το όνομα του νοσηλευτή/τριας, την
ημέρα της εβδομάδας, τη βάρδια και την δεξιότητα. Για παράδειγμα μια τέτοια
καταχώρηση μπορεί να είναι : [<Μαρία>, Τρίτη, Νύχτα, Προϊσταμένη], που αναφέρει ότι
η νοσηλεύτρια Μαρία θα έχει ανάθεση εργασίας την Τρίτη την νυχτερινή βάρδια με το
ρόλο της Προϊσταμένης Νοσηλεύτριας.
Η ποιότητα της συνολικής λύσης αξιολογείται από τον επικυρωτή (Validator) όπως
φαίνεται στο Σχήμα 3.2 για ολόκληρο τον ορίζοντα σχεδιασμού με βάση:
Την λύση για κάθε εβδομάδα που περιέχει τις αναθέσεις των νοσηλευτών/τριων σε
βάρδιες και δεξιότητες, χρησιμοποιώντας τις απαιτήσεις στο αρχείο δεδομένων της
εβδομάδας και τα δεδομένα συνόρων στο αρχείο ιστορικού
Τους μετρητές του τελικού αρχείου ιστορικού, έναντι των ορίων που
προβλέπονται στο σενάριο.
Διπλωματική Εργασία 39
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Η1. Μία εργασία ανά ημέρα (Single assignment per day : Ένας νοσηλευτής/τρια
μπορεί να ανατεθεί το πολύ σε μία βάρδια κάθε ημέρα. Δεν μπορεί να δουλέψει δεύτερη
βάρδια δηλαδή το ίδιο 24ωρο.
Η3. Διαδοχές τύπου βάρδιας (Shift type successions) : Οι αναθέσεις τύπου βάρδιας ενός
νοσηλευτή/τριας σε δύο συνεχόμενες ημέρες πρέπει να ανήκουν στις νόμιμες επιτρεπτές
διαδοχές που προβλέπονται στο σενάριο. Δεν μπορεί δηλαδή να παραβιασθεί η
απαγορευμένη διαδοχή βάρδιας από Νύχτα σε Πρωί.
Η4. Έλλειψη απαιτούμενης δεξιότητας (Missing required skill) : Μια βάρδια μιας
συγκεκριμένης δεξιότητας (Skill) πρέπει απαραίτητα να συμπληρωθεί από έναν
νοσηλευτή/τρια που έχει αυτή την δεξιότητα.
Διπλωματική Εργασία 40
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
S1. Ανεπαρκές προσωπικό για βέλτιστη κάλυψη - Insufficient staffing for optimal
coverage (Βάρος-Ποινή 30): Ο αριθμός των νοσηλευτών/τριων για κάθε βάρδια και για
κάθε δεξιότητα πρέπει να είναι ίσος με τη βέλτιστη απαίτηση. Κάθε νοσηλευτής/τρια που
λείπει τιμωρείται ανάλογα με το βάρος που παρέχεται. Οι επιπλέον νοσηλευτές πάνω από
τη βέλτιστη τιμή δεν λαμβάνονται υπόψη στο κόστος ποινής.
S3. Διαδοχικές ημέρες μη εργασίας - Consecutive days off (Βάρος 30): Πρέπει να
τηρείται ο ελάχιστος και ο μέγιστος αριθμός συνεχόμενων ημερών μη εργασίας – ρεπό -
άδειας. Η αξιολόγησή τους περιλαμβάνει επίσης τα δεδομένα συνόρων από το ιστορικό.
Κάθε επιπλέον ημέρα ή ημέρα που λείπει πολλαπλασιάζεται με το αντίστοιχο βάρος.
S4. Προτιμήσεις - Preferences (Βάρος 10): Κάθε ανάθεση σε ανεπιθύμητη βάρδια από
τις προτιμήσεις των νοσηλευτριών στην τρέχουσα εβδομάδα τιμωρείται με το αντίστοιχο
βάρος.
S6. Συνολικές αναθέσεις - Total assignments (Βάρος 20): Για κάθε νοσηλευτή/τρια ο
συνολικός αριθμός των αναθέσεων (εργάσιμες ημέρες) πρέπει να περιλαμβάνεται στα
όρια (ελάχιστο και μέγιστο) που επιβάλλει η σύμβασή του/της. Η διαφορά (προς κάθε
Διπλωματική Εργασία 41
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Παρακάτω στον πίνακα 3.1 φαίνονται συνολικά τα βάρη – ποινές για κάθε έναν από τους
χαλαρούς περιορισμούς:
ΠΕΡΙΟΡΙΣΜΟΣ ΒΑΡΟΣ -
ΠΟΙΝΗ
S1. Ανεπαρκές προσωπικό για βέλτιστη κάλυψη - Insufficient 30
staffing for optimal coverage
Πίνακας 3.1 : Συνολικός πίνακας βάρους – ποινής για κάθε χαλαρό περιορισμό (soft constraint)
Διπλωματική Εργασία 42
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Τα αρχεία που ανήκουν στην ίδια υπόθεση ομαδοποιούνται σε ένα σύνολο δεδομένων
(dataset), το οποίο αποτελείται από το ακόλουθο σύνολο αρχείων:
1 αρχείο σεναρίου.
Επομένως, μια περίπτωση (instance) είναι ένα συγκεκριμένο σενάριο, ένα αρχικό ιστορικό
και μια ακολουθία 4 (ή 8) αρχείων δεδομένων εβδομάδας, που όλα ανήκουν στο ίδιο
σύνολο δεδομένων (dataset). Ένα συγκεκριμένο αρχείο δεδομένων εβδομάδας μπορεί
επίσης να χρησιμοποιηθεί πολλές φορές στην ίδια περίπτωση (instance).
Από τον διαγωνισμό παρέχονταν σαν παραδείγματα 14 σύνολα δεδομένων (datasets), ένα
για κάθε αριθμό νοσηλευτών/τριων σε συνδυασμό με τον αριθμό εβδομάδων, που
λαμβάνεται από τα σετ {30,40,50,60,80,100,120} (νοσηλευτές/τριες) και {4,8} εβδομάδες
αντίστοιχα. Τα σύνολα δεδομένων ονομάζονται χρησιμοποιώντας αυτούς τους δύο
αριθμούς με τα προθέματα n (για νοσηλευτές/τριες) και w για εβδομάδες. Για παράδειγμα,
το σύνολο δεδομένων n050w8 είναι το (μοναδικό) με 50 νοσηλευτές/τριες και 8
εβδομάδες.
Επιπλέον, παρέχονταν από τον διαγωνισμό και τρία σύνολα δεδομένων δοκιμής, n005w4,
n012w8 και n021w4, για σκοπούς δοκιμών και εντοπισμού σφαλμάτων.
Για τα σύνολα δεδομένων δοκιμής, παρέχεται επίσης η λύση για τρεις συγκεκριμένες
περιπτώσεις (instances).
Διπλωματική Εργασία 43
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Διπλωματική Εργασία 44
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Αναλυτικά:
Τα ονόματα αρχείων του αρχείου σεναρίου, του αρχείου του αρχικού ιστορικού
και των αρχείων των δεδομένων εβδομάδας, μπορούν να είναι είτε με απόλυτο
είτε με σχετικό μονοπάτι. Αν είναι με σχετικό μονοπάτι, θα γίνουν είσοδος από
τον τρέχον κατάλογο εργασίας (όχι τον κατάλογο τρεξίματος).
Ο αριθμός των τυχαίων «σπόρων» (random seeds) μετά την επιλογή –rand μπορεί
να είναι είτε ένα είτε Ν. Αν δοθεί μόνο ένα θα χρησιμοποιηθεί για όλες τις
κλήσεις του επιλυτή.
Ο επιλυτής μπορεί να θέλει να ξέρει πόση ώρα έχει για να λύσει κάθε αρχείο
δεδομένων εβδομάδας. Αυτή η τιμή θα μπορούσε να περάσει σε κάθε κλήση
επίλυσης χρησιμοποιώντας την επιλογή --timeout. Εάν έχει οριστεί το <Timeout
In Seconds> και το τρέχον λειτουργικό σύστημα είναι Linux ή Mac OS X, ο
προσομοιωτής θα μετρήσει επίσης τον χρόνο εκτέλεσης κάθε κλήσης επίλυσης
χρησιμοποιώντας την εντολή time -p και θα δώσει μια προειδοποίηση εάν ο
χρόνος λειτουργίας της κάθε επίλυσης υπερβεί τον επιτρεπόμενο χρόνο. Το
χρονικό όριο μετριέται ως χρόνος CPU.
Διπλωματική Εργασία 45
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Ο προσομοιωτής (simulator) λειτουργεί υπό την παραδοχή ότι ο επιλυτής (Solver) έχει
την ακόλουθη σύνταξη :
Ο προσομοιωτής ζητά από τον επιλυτή να δημιουργήσει ένα αρχείο λύσης για κάθε
στάδιο. Αυτά τα αρχεία λύσεων βρίσκονται επίσης στον κατάλογο <Output_Directory>,
με τα ονόματα :
Διπλωματική Εργασία 46
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Για παράδειγμα, μια γραμμή εντολών για τον προσομοιωτή (Simulator) θα μπορούσε να
είναι η:
Η οποία παράγει τις ακόλουθες γραμμές εντολών (εφόσον ο τρέχων κατάλογος εργασίας
είναι ο : Data:
cd Devel
Διπλωματική Εργασία 47
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Παράγει την ακόλουθη έξοδο (όπου M|T|W|T|F|S|S : οι μέρες της εβδομάδας Monday εώς
Sunday) και N|E|L αντίστοιχα οι βάρδιες Night, Early, Late δηλαδή στα ελληνικά Νύχτα,
Πρωί,Απόγευμα:
Διπλωματική Εργασία 48
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Πίνακας 3.8 Έξοδος κλήσης του επικυρωτή (Validator) για το παράδειγμα του Πίνακα 3.7
Διπλωματική Εργασία 49
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Για παράδειγμα η έξοδος που δίνει το εργαλείο σύγκρισης (Benchmark) στον δικό μου
υπολογιστή (για χρήση με 1 επεξεργαστη – single core) είναι:
For each stage, you can run your solver for the following time:
30 nurses ---> 42.33 seconds
35 nurses ---> 58.20 seconds
40 nurses ---> 74.07 seconds
50 nurses ---> 105.82 seconds
60 nurses ---> 137.57 seconds
70 nurses ---> 169.31 seconds
80 nurses ---> 201.06 seconds
100 nurses ---> 264.55 seconds
110 nurses ---> 296.30 seconds
120 nurses ---> 328.05 seconds
Διπλωματική Εργασία 50
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Από αυτές τις μορφές επελέγη η μορφή XML για είσοδο και έξοδο δεδομένων στην
παρούσα εργασία.
Η γλώσσα προγραμματισμού υλοποίησης του αλγόριθμου είναι η Java version 8. Για την
είσοδο των αρχείων εισόδου υπήρξε διερεύνηση του Document Object Model (DOM) που
επιτρέπει διάβασμα αρχείων XML με έναν DOM Parser αλλά τελικά λόγω ευκολίας
χρησιμοποιήθηκε η βιβλιοθήκη JAXB (Java Architecture for XML Binding).
Το JAXB παρέχει έναν γρήγορο και βολικό τρόπο για τη εγγραφή (Μarshalling όπως
λέγεται) αντικειμένων Java σε αρχεία XML και την ανάγνωση (Unmarshalling) αρχείων
XML σε αντικείμενα. Υποστηρίζει ένα δεσμευτικό πλαίσιο που αντιστοιχίζει στοιχεία
XML και ιδιότητες σε πεδία και ιδιότητες Java χρησιμοποιώντας σχολιασμούς
(annotations).
Διπλωματική Εργασία 51
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
@XmlType: ορίζει τη σειρά με την οποία εγγράφονται τα πεδία στο αρχείο XML
Πληροφορίες για τα αρχεία XML από αυτά που δίνονται από τον διαγωνισμό INRC-II και
πως αυτά διαβάζονται από το πρόγραμμα δίνονται στα Παραρτήματα Α (η μορφή τους) &
Παράρτημα Δ (τρόπος διαβάσματος).
Με αντίστοιχο τρόπο γίνεται και η έξοδος δεδομένων γράφοντας σε αρχεία XML την
λύση από τα αντικείμενα Java χρησιμοποιώντας το Μarshalling. Η έξοδος είναι τα αρχεία
XML με την παραγόμενη λύση κάθε εβδομάδας τα οποία αρχεία χρησιμοποιεί ο
προσομοιωτής (Simulator) για την εκτέλεση της λύσης στον συνολικό ορίζοντα
προγραμματισμού και ο επικυρωτής (Validator) για την αξιολόγηση των λύσεων.
Διπλωματική Εργασία 52
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Επίσης δημιουργείται η λίστα okshifts που είναι μια ArrayList που περιέχει όλους τους
τύπους βάρδιας που δεν έχουν απαγορευμένο τύπο βάρδιας μετά από αυτούς. Αφορά
δηλαδή το πεδίο <ForbiddenShiftTypeSuccessions> από το αρχείο σεναρίου. Μια τέτοια
βάρδια για το παράδειγμα των περιπτώσεων (instances) που δίνονται στον διαγωνισμό
είναι ο τύπος Early αφού μετά από μια βάρδια Early (Πρωί) μπορούμε να έχουμε την
επομένη ακριβώς εργάσιμη ημέρα οποιοδήποτε τύπο βάρδιας εργασίας.
Δημιουργήθηκαν κάποιες βασικές συναρτήσεις οι οποίες κάνουν ελέγχους για μια λύση
που έχει παραχθεί. Συγκεκριμένα, οι πρώτες από αυτές ελέγχουν αν μια λύση είναι
έγκυρη, για κάθε περιορισμό από τις προδιαγραφές του διαγωνισμού, δηλαδή τους
αυστηρούς περιορισμούς (hard constraints). Στις συναρτήσεις αυτές η λύση περνιέται σαν
παράμετρος (μαζί με τα αντικείμενα από τα δεδομένα εισόδου) και επιστρέφεται μια
Boolean τιμή όπου το true σημαίνει ότι δεν υπάρχει παραβίαση (π.χ. η ρουτίνα
CheckHard1). Επίσης υπάρχει η συγκεντρωτική συνάρτηση Check_Hard_Constraints η
οποία καλεί όλους τους επιμέρους ελέγχους για τους περιορισμούς H1-H2-H3-H4 και
επιστρέφει μια Boolean τιμή που μας δίνει αν η λύση που εξετάζουμε είναι έγκυρη
(Boolean τιμή true).
Διπλωματική Εργασία 53
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Όσον αφορά τους ελέγχους για τους χαλαρούς περιορισμούς (soft constraints) αντίστοιχα
έχουν δημιουργηθεί συναρτήσεις που ελέγχουν για κάθε χαλαρό περιορισμό την ποινή –
βάρος που έχει η συγκεκριμένη λύση που εξετάζουμε. Οι συναρτήσεις αυτές επιστρέφουν
μια ακέραια τιμή που μας δίνει το βάρος – ποινή για τον συγκεκριμένο χαλαρό περιορισμό
(π.χ. η CheckSoft1). Επίσης υπάρχει η συγκεντρωτική συνάρτηση
Check_Soft_Constraints η οποία καλεί όλες τις επιμέρους συναρτήσεις για τους
περιορισμούς S1-S2-S3-S4-S5-S6-S7 και μας δίνει την συνολική ποινή για την λύση που
εξετάζουμε. Να σημειωθεί ότι οι περιορισμοί S6 & S7 αξιολογούνται μόνο στην
τελευταία εβδομάδα του ορίζοντα προγραμματισμού (π.χ. την 4η για πρόβλημα 4
εβδομάδων) μιας και εξετάζουν τους χαλαρούς περιορισμούς που αφορούν τον συνολικό
ορίζοντα προγραμματισμού (συνολικές αναθέσεις & συνολικά εργαζόμενα
σαββατοκύριακα).
Για να κατασκευαστεί αυτό το πρώτο έγκυρο πρόγραμμα για την εβδομάδα πηγαίνουμε
σειριακά ανά ημέρα ξεκινώντας από την Δευτέρα και φτάνοντας μέχρι την Κυριακή.
Γίνονται αναθέσεις εξετάζοντας ταυτόχρονα και τους τύπους βάρδιας και τις δεξιότητες.
Καλείται η συνάρτηση find_week_coverage χρησιμοποιώντας την παράμετρο counter=0
(που σημαίνει ημέρα Δευτέρα) για να φτιάξει το πρόγραμμα της εβδομάδας.
Διπλωματική Εργασία 54
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
περιορισμός H2 – ελάχιστη κάλυψη βάρδιας & δεξιότητας). Στη συνέχεια για κάθε τέτοιο
συνδυασμό όπου η κάλυψη είναι μεγαλύτερη του μηδέν καλεί την συνάρτηση
findNurseByLastDay τόσες φορές, όσες είναι οι απαιτούμενες βάρδιες. Εφόσον
τελείωσει με μία μέρα (π.χ. την Δευτέρα) πάει στην επόμενη Τρίτη, Τετάρτη κλπ.
Η συνάρτηση findNurseByLastDay είναι αυτή που επιστρέφει μια νοσηλεύτρια για την
ανάθεση που ζητείται για τον συγκεκριμένο τύπο βάρδιας και δεξιότητας. Ο τρόπος που
δουλεύει είναι ο εξής: πάει και βρίσκει την προηγούμενη μέρα αν υπάρχει κάποια
νοσηλεύτρια που έχει ανάθεση με τον συγκεκριμένο τύπο βάρδιας για τον οποίο
αναζητούμε ανάθεση. Ο λόγος που γίνεται αυτή η αναζήτηση είναι μιας και από μελέτη
των δεδομένων προέκυψε ότι μια τέτοια σειρά από ίδιες βάρδιες δίνει καλά αποτελέσματα
τελικά.
Στην συνέχεια καλεί την συνάρτηση check_max_days η οποία επιστρέφει μια τιμή
Boolean που όταν είναι true σημαίνει ότι η νοσηλεύτρια έχει ξεπεράσει τον περιορισμό
των συνεχόμενων εργάσιμων ημερών. Οπότε στην περίπτωση που βρεθεί μία που έχει
στην χθεσινή ημέρα κάνει τέτοια βάρδια αλλά έχει περάσει το όριο των max_days πρέπει
να επιλεγεί μια άλλη νοσηλεύτρια. Αφού γίνει έλεγχος για το αν υπάρχει τέτοια για την
προηγούμενη μέρα τότε επιλέγεται η κατάλληλη διαφορετικά επιλέγεται μια στην τύχη.
Για να μην μπει ο αλγόριθμος σε ατέρμονο βρόχο (loop) χρησιμοποιείται η λίστα
ArrayList checkednurses που κρατάει ποιες νοσηλεύτριες έχουμε ελέγξει.
Η τιμή που η συνάρτηση find_week_coverage επιστρέφει είναι μια ArrayList και αυτή
είναι μια λίστα με όσες αναθέσεις έχουν πρόβλημα, αν τυχόν για μια συγκεκριμένη ημέρα
δεν μπορέσει να βρεθεί μια κατάλληλη νοσηλεύτρια που να ικανοποιεί τους αυστηρούς
περιορισμούς. Σε αυτή την περίπτωση υπάρχει αδιέξοδο οπότε για να λυθεί το αδιέξοδο
πρώτα καλώντας την συνάρτηση remove_from_assigns αφαιρούμε τις αναθέσεις από την
προηγούμενη μέρα και πέρα από αυτήν από την οποία υπάρχει πρόβλημα και μετά
τρέχουμε ξανά την συνάρτηση find_week_coverage για αυτή την προηγούμενη μέρα (με
Διπλωματική Εργασία 55
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
παράμετρο π.χ. για την Τετάρτη counter=2). Αν τυχόν πάλι έχουμε αδιέξοδο τότε
πηγαίνουμε μία μέρα πίσω κάθε φορά μέχρι να λυθεί το αδιέξοδο.
Στο τέλος αφού έχουμε μια πρώτη έγκυρη λύση υπολογίζουμε την συνολική ποινή της με
την συνάρτηση Check_Soft_Constraints και αποθηκεύουμε αυτή την τιμή στον πίνακα
finalsoftpenalty ενώ ο πίνακας finalsolutions περιέχει τις λύσεις κάθε φορά μέχρι το τέλος
των επαναλήψεων (έστω 100). Όταν τελειώσουν οι επαναλήψεις βρίσκουμε ποια είναι η
λύση με την καλύτερη συνολική ποινή και την κρατάμε αφού αυτή περνάει σαν
παράμετρος στην δεύτερη φάση του αλγορίθμου.
Διπλωματική Εργασία 56
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Η πρώτη βελτίωση αφορά τον χαλαρό περιορισμό S1 για την κάλυψη των βέλτιστων
αναθέσεων σε βάρδια. Χρησιμοποιείται η ακόλουθη συνάρτηση :
Ακολούθως εκτελούνται συναρτήσεις για την περαιτέρω βελτίωση της λύσης που έχει
βρεθεί και συγκεκριμένα οι παρακάτω συναρτήσεις :
Διπλωματική Εργασία 57
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
σαββατοκύριακου της σε μια άλλη που δεν έχει ξεπεράσει το όριο για τα
σαββατοκύριακα.
fix_complete_weekends : Βελτιώνει την λύση ελέγχοντας τον χαλαρό περιορισμό
S5 για όσες νοσηλεύτριες έχουν τον κανόνα complete_weekend=1 και δουλεύουν
μία από τις δύο ημέρες του σαββατοκύριακου. Σύμφωνα με τον περιορισμό όταν
complete_weekend=1, τότε θα πρέπει να δουλεύουν ή και τις δύο μέρες του
σαββατοκύριακου ή καμία. Σε αυτές τις περιπτώσεις μετακινεί μέρες που είναι
μόνες τους (π.χ. το Σάββατο) σε άλλη νοσηλεύτρια που δουλεύει μόνο Κυριακή ή
και το ανάποδο.
Ακολούθως υπάρχει μια ομάδα επόμενων συναρτήσεων οι οποίες εκτελούνται για μικρό
αριθμό επαναλήψεων (έστω 3 φορές).
Διπλωματική Εργασία 58
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Έτσι μετά από όλες αυτές τις συναρτήσεις έχουμε μια όσον το δυνατόν βέλτιστη λύση και
μας μένει να την κρατήσουμε άρα στο τέλος η λύση γράφεται σε ένα XML αρχείο
χρησιμοποιώντας την βιβλιοθήκη JAXB (Marshalling).
Διπλωματική Εργασία 59
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Διπλωματική Εργασία 60
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Διπλωματική Εργασία 61
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Περίπτωση Α Β Γ Δ Ε ΣΤ
Επιλυτής 1 34 35 42 32 10 12
Επιλυτής 2 32 24 44 33 13 15
Επιλυτής 3 33 36 30 12 10 17
Επιλυτής 4 36 32 46 32 12 13
Επιλυτής 5 37 30 43 29 9 4
Επιλυτής 6 68 29 41 55 10 5
Επιλυτής 7 36 30 43 58 10 4
Πίνακας 5.1: Παράδειγμα βαθμολογιών των λύσεων που υποβλήθηκαν
Περίπτωση Α Β Γ Δ Ε ΣΤ
Επιλυτής 1 3 6 3 3.5 3.5 4
Επιλυτής 2 1 1 6 5 7 6
Επιλυτής 3 2 7 1 1 3.5 7
Επιλυτής 4 4.5 5 7 3.5 6 5
Επιλυτής 5 6 3.5 4.5 2 1 1.5
Επιλυτής 6 7 2 2 6 3.5 3
Επιλυτής 7 4.5 3.5 4.5 7 3.5 1.5
Πίνακας 5.2: Αντιστοίχηση σειράς κατάταξης λύσεων για το παράδειγμα πίνακα 5.1
Ακολούθως για κάθε συμμετέχοντα βγαίνει ο μέσος όρος των κατατάξεων. Οι finalists του
διαγωνισμού θα είναι οι 5 πρώτοι με το μικρότερο μέσο όρο κατάταξης. Σε περίπτωση
ισοπαλίας για την τελευταία θέση της πεντάδας, όλοι οι τελευταίοι ισοβαθμούντες
συμπεριλαμβάνονται στους φιναλιστ. Για τα παραπάνω παραδείγματα φαίνεται στον
Πίνακα 5.3 ο πίνακας των μέσων όρων των κατατάξεων. Σε αυτήν την περίπτωση οι 5
φιναλιστ θα ήταν οι επιλυτές 1,3,5,6 και 7.
Διπλωματική Εργασία 62
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Επιλυτής 1 3.83
Επιλυτής 2 4.33
Επιλυτής 3 3.58
Επιλυτής 4 5.17
Επιλυτής 5 3.08
Επιλυτής 6 3.92
Επιλυτής 7 4.08
Ο νικητής είναι αυτός με το μικρότερο μέσο όρο. Σε περίπτωση ισοβαθμίας, μία δοκιμή
προστίθεται για όλες τις περιπτώσεις μέχρι να βρεθεί ένας μοναδικός νικητής.
Η διαδικασία επιλογής για την εκλογή των φιναλίστ ήταν η εξής: πρώτα κατατάξαμε τους
διαγωνιζόμενους αποκλειστικά με βάση τα υποβληθέντα αποτελέσματα μόνο, μετά
αρχίσαμε να τρέχουμε τους αλγόριθμους για τους πέντε πρώτους και μετά έναν προς έναν,
έως ότου η διαφορά με τον επόμενο διαγωνιζόμενο να είναι θετική, τόσο για τα
υποβληθέντα αποτελέσματα όσο και για τα επικυρωμένα αποτελέσματά μας. Καταλήξαμε
με 7 φιναλίστ για την κρυφή φάση. (Σ.Σ. Δηλαδή οι επιλυτές (Solvers) τους δοκιμάστηκαν
σε κάποιες κρυφές περιπτώσεις - instances).
Στον πίνακα 5.4 φαίνονται οι περιπτώσεις στις οποίες έγινε εξέταση των τελικών
συμμετοχόντων τόσο για τις τελευταίες περιπτώσεις (Late Instances) όσο και τις κρυφές
(Hidden Instances). Φαίνονται ο αριθμός νοσηλευτριών (Nurses) όπου έγινε εξέταση σε
αυτές τις περιπτώσεις, ο αριθμός των εβδομάδων (Weeks), δεξιοτήτων (Skills), Τύπων
βαρδιών (Shifts) καθώς και ο αριθμός των συμβάσεων εργασίας (Contracts).
Διπλωματική Εργασία 63
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Ενδεικτικά οι τελικοί φιναλιστ του διαγωνισμού INRC-II (σύμφωνα με τον μέσο όρο
κατάταξης στις κρυφές περιπτώσεις – instances) ήταν :
4. Μέσος όρος κατάταξης (3.75): Hust.Smart, Zhouxing Su, Zhuo Wang, Zhipeng
Lü, Laboratory of Smart Computing and Optimization, School of Computer
Science and Technology, Huazhong University of Science and Technology,
Wuhan 430074, P.R. China.
5. Μέσος όρος κατάταξης (5.35): ORTEC, Hujin Jin, Gerhard Post, Egbert van der
Veen, ORTEC
Διπλωματική Εργασία 64
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Η διατύπωσή τους μπορεί να χαρακτηριστεί ως μια σύνθεση MILP ροής πολλών ειδών
που βασίζεται σε δίκτυα διευρυμένα από την κατάσταση τους (ο όρος στα αγγλικά είναι
multi-commodity flow MILP based on stated-expanded networks) και παρόμοιες
διατυπώσεις έχουν χρησιμοποιηθεί στο πλαίσιο του χρονοπρογραμματισμού του
πληρώματος αεροπορικών εταιρειών.
Κάθε νοσηλευτής σχετίζεται με ένα κατευθυνόμενο ακυκλικό επίπεδο δικτύου στο οποίο
οι κατευθυνόμενες ακμές αντιστοιχούν σε αναθέσεις βάρδιας εργασίας και μη εργασίας
(day off). Μια ροή από την πηγή μέχρι τον τελικό προορισμό σε αυτό το στρώμα δικτύου
μπορεί να ερμηνευθεί ως κατανομή νοσηλευτικών βαρδιών (roster). Το δίκτυο
επεκτείνεται σε καταστάσεις με τρόπο ώστε κάθε κόμβος να συσχετίζεται όχι μόνο με
έναν δείκτη ώρας και βάρδιας αλλά και με πληροφορίες κατάστασης που απαιτούνται για
την αξιολόγηση ενός υποσυνόλου κανόνων (κυρίως κανόνες που αφορούν τμήματα από
ημέρες εργασίας και ημέρες μη εργασίας (days off).
Κατά συνέπεια, κάθε εκχώρηση βάρδιας σχετίζεται με πολλαπλές ακμές στο δίκτυο που
προέρχονται από διαφορετικούς κόμβους καταστάσεων. Oι εξαρτώμενες από κατάσταση
ποινές των χαλαρών κανόνων σχετίζονται με τις μεταβλητές ροής. Οι κανόνες που δεν
είναι ενσωματωμένοι στο δίκτυο (δηλαδή οι κανόνες που αφορούν τον συνολικό αριθμό
εργασιών και τα συνολικά εργαζόμενα Σαββατοκύριακα) ελέγχονται από
συμπληρωματικούς περιορισμούς. Το μοντέλο θεωρεί την ανάθεση βαρδιών εργασίας και
μη εργασίας (days off) να γίνεται ξεχωριστά για κάθε νοσηλευτή. Προκειμένου να μειωθεί
η συμμετρία του μοντέλου, η ανάθεση της δεξιότητας (Skill) στην οποία εργάζεται μια
νοσηλεύτρια αντιμετωπίζεται από ένα συγκεντρωτικό στοιχείο μοντέλου. Η λεπτομερής
ανάθεση δεξιοτήτων εκτελείται στη συνέχεια σε ένα στάδιο μεταεπεξεργασίας.
Διπλωματική Εργασία 65
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Για να μειωθεί η επίδραση της περιόδου προσμονής, στο μέγεθος και την υπολογιστική
πολυπλοκότητα των περιπτώσεων του μοντέλου, χρησιμοποιούνται τρεις κύριες ιδέες:
Πρώτον, στην περίοδο προσμονής, δεν εξετάζεται κάθε νοσηλευτής ξεχωριστά, αλλά
συγκεντρώνονται οι νοσηλευτές σύμφωνα με τις συμβάσεις εργασίας και τις δεξιότητες.
Δεύτερον, εφαρμόζονται πιο επιθετικά οι μειώσεις του ευρετικού μοντέλου που
Διπλωματική Εργασία 66
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
περιγράφονται παραπάνω στην περίοδο προσμονής. Τρίτον, για όλες τις μεταβλητές της
περιόδου προσμονής, αφαιρούνται οι απαιτήσεις ακεραιότητας - δεδομένου του μικρού
δυαδικού κενού της διατύπωσής, ο αντίκτυπος αυτής της χαλάρωσης στην ποιότητα της
περιόδου προσμονής μπορεί να παραμεληθεί.
Ένας αλγόριθμος διακλάδωσης και τιμής (Branch & Price) ενσωματώνει μια παραγωγή
στήλης σε ένα κλασικό σχήμα διακλάδωσης και δέσμευσης (Branch & Bound) για την
επίλυση γραμμικών προγραμμάτων με περιορισμούς ακεραιότητας. Σε αυτό το πλαίσιο,
κάθε γραμμική χαλάρωση (Linear Relaxation) που συμβαίνει στο δέντρο διακλάδωσης
λύνεται με τη δημιουργία στήλης και σχεδιάζονται συγκεκριμένοι κανόνες διακλάδωσης.
Διπλωματική Εργασία 67
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Οι συγγραφείς της προτεινόμενης λύσης επίσης αναφέρουν ότι με στόχο την επίλυση
μεγάλων περιπτώσεων, ενσωματώθηκε στον αλγόριθμο Branch & Price και μια
Διπλωματική Εργασία 68
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Έχουν αναπτυχθεί επίσης πολλοί αρχέγονοι ευρετικοί αλγόριθμοι που βασίζονται στη
διαδικασία διακλάδωσης και τιμής (Branch & Price) για να βρεθεί αρχική λύση για την
διαδικασία αναζήτησης μεγάλης γειτονιάς (ALNS). Ένας από αυτούς είναι μια μέθοδος
κυλιόμενου ορίζοντα (rolling-horizon) που υπολογίζει διαδοχικά εβδομαδιαία
χρονοδιαγράμματα ενώ λαμβάνει υπόψη μια εκτίμηση του αντίκτυπου των τρεχουσών
αποφάσεων στο μέλλον
Διπλωματική Εργασία 69
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Το κίνητρο πίσω από την ανάπτυξη ενός υπερευρετικού αλγόριθμου επιλογής που
βασίζεται σε ακολουθία (Sequence-based Selection Hyper-Heuristic - SSHH) για το
πρόβλημα της κατανομής νοσηλευτικών βαρδιών είναι να οικοδομηθεί μια πιο ισχυρή
προσέγγιση αναζήτησης του χώρου λύσεων. Το SSHH είναι ένα από τα πρώτα υπερ-
ευρετικά που χρησιμοποιεί ακολουθίες ευρετικών, ενώ σύμφωνα με τους συγγραφείς της
περίπτωσης λύσης, τα πολλά υποσχόμενα κέρδη απόδοσης του έχουν επαληθευτεί για ένα
ευρύ φάσμα προβλημάτων, σε τομείς όπως το σχολικό χρονοδιάγραμμα, η δρομολόγηση
οχημάτων, δρομολόγηση αποθέματος μεταξύ άλλων.
Διπλωματική Εργασία 70
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Στην περίπτωση που η ακολουθία δεν τερματίζεται, ο αλγόριθμος μετακινείται κάθε φορά
από την τρέχουσα στην επόμενη ευρετική μέθοδο χαμηλού επιπέδου. Όταν τελικά η
ακολουθία τερματιστεί, αυτή θα εφαρμοστεί στην τρέχουσα λύση ώστε να δημιουργηθεί
μια νέα λύση. Σε αυτό το σημείο, εάν η ποιότητα της νέας λύσης είναι καλύτερη από την
ποιότητα της καλύτερης λύσης μέχρι εκείνη τη στιγμή, τότε η ακολουθία ευρετικών
μεθόδων χαμηλού επιπέδου που οδήγησε σε αυτήν παίρνει ανάλογη βαθμολογία στον
πίνακα καταστάσεων και στον πίνακα κατασκευής ακολουθίας (sequence construction
matrix). Αυτό αυξάνει την πιθανότητα επιλογής των ακολουθιών που δημιουργούν
βελτιωμένες λύσεις.
Διπλωματική Εργασία 71
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
υποψήφια λύση γίνει αποδεκτή, θα αντικαταστήσει την αρχική λύση. Η κατασκευή της
ευρετικής ακολουθίας τότε ολοκληρώνεται και θα ξεκινήσει μια νέα στην επόμενη
επανάληψη.
Ο αλγόριθμος SSHH κατέλαβε την τρίτη θέση μεταξύ των συμμετοχόντων στον
διαγωνισμό INRC-II. Σύμφωνα με τους συγγραφείς της προτεινόμενης λύσης, ο
προτεινόμενος αλγόριθμος ήταν ο μόνος συμμετέχων μεταξύ των τριών πρώτων του
διαγωνισμού που μπόρεσε να εντοπίσει μία έγκυρη λύση για όλες τις περιπτώσεις και
απέδωσε συγκρίσιμα καλά, σε στατιστικούς όρους, απέναντι στον νικητή στις πιο
δύσκολες περιπτώσεις. Επιπλέον, ο αλγόριθμος επέδειξε ισχυρή υπολογιστική απόδοση
ως προς την ποιότητα της παραγώμενης λύση σε όλες τις περιπτώσεις δοκιμών δεδομένου
του διαθέσιμου υπολογιστικού ορίου χρόνου.
Διπλωματική Εργασία 72
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
και χαλαρών περιορισμών, και γι' αυτό το λόγο έχει κατασκευαστεί η μηχανή του
εργαλείου ως μηχανή «μαύρου κουτιού»: μόνο το συνολικό κόστος καθοδηγεί τον
αλγόριθμο, όχι η φύση των παραβιάσεων.
Δεν υπάρχει σαφής αναφορά πάνω στον αλγόριθμο που χρησιμοποιήθηκε για την
επίλυση. Αναφέρεται πάντως ότι έγινε ανάλυση των περιπτώσεων του διαγωνισμού και
δόθηκε έμφαση στο να υπάρχει ευρωστία για την αβεβαιότητα για την επόμενη εβδομάδα
από την τρέχουσα. Ο προγραμματισμός της Κυριακής με λίγες γνώσεις για την Δευτέρα
μπορεί να μην είναι πολύ ρεαλιστικό γεγονός, αλλά ο προγραμματισμός ενός μήνα με
αβεβαιότητα για τον επόμενο μήνα σίγουρα είναι.
Η εταιρεία έκανε ανάλυση των περιπτώσεων και βρήκε ότι για παράδειγμα με 30 ή
περισσότερους νοσηλευτές δεν υπάρχει περίπτωση να μην βρεθεί έγκυρη λύση. Μια άλλη
παρατήρηση ήταν ότι η διακύμανση της ζήτησης ανά τύπο βάρδιας και δεξιότητας είναι
τεράστια, η διακύμανση δε στον συνολικό αριθμό των βάρδιων ανά εβδομάδα είναι
σχεδόν απούσα. Επιπλέον τα δεδομένα είναι τέτοια ώστε να καλύπτονται οι ελάχιστες
απαιτήσεις σε προσωπικό πολύ εύκολα αλλά η επίτευξη των βέλτιστων απαιτήσεων
προσωπικού πάντα παραβιάζει τον μέγιστο απαιτούμενο αριθμός εργασιών. Επίσης η
υψηλή διακύμανση της ζήτησης ανά τύπο βάρδιας και δεξιότητα πιθανότατα προκαλούν
αναπόφευκτο κόστος, καθώς θα είναι αδύνατο να ικανοποιηθούν όλοι οι περιορισμοί για
διαδοχικές εργασίες ανά τύπο βάρδιας.
Τα παραπάνω οδήγησαν στο συμπέρασμα ότι κατά τη διάρκεια της δημιουργίας ενός
εβδομαδιαίου προγράμματος, θα ήταν χρήσιμο να υπάρχει οδήγηση σε μια καλή σύνδεση
με την επόμενη εβδομάδα εισάγοντας ορισμένους τεχνητούς χαλαρούς περιορισμούς.
Αυτοί οι 2 «τεχνητοί» περιορισμοί που χρησιμοποιήθηκαν σύμφωνα με την εταιρεία είναι:
Διπλωματική Εργασία 73
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Για τους καθολικούς μετρητές για τον μέγιστο αριθμό συνολικών βάρδιων και τον αριθμό
των εργαζόμενων Σαββατοκύριακων, έγινε προσαρμογή των παραμέτρων με αναλογικό
τρόπο. Για παράδειγμα, εάν το πρόγραμμα είναι για τέσσερις εβδομάδες και ο μέγιστος
αριθμός βάρδιων για έναν υπάλληλο είναι 16, τότε την πρώτη εβδομάδα μπαίνει το
μέγιστο σε 4, την δεύτερη εβδομάδα το μέγιστο αυτής της εβδομάδας είναι 8
(συμπεριλαμβανομένης της μέτρησης για την πρώτη εβδομάδα), κλπ.
Διπλωματική Εργασία 74
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Nurse Polytec
INF_ Nurse_ in- Thre Bullet Opti hnique Schedu
Instance_HistoryFile0_W ΔΕ UFR Juggle Hust.S ORTE eatts_i GOA LabG optima eJoh Team Soluti mizer Montr leNurs
eekFiles 138216 GS rs mart C nrc2-2 L SSHH OL -inrc-ii ns Puma ons s eal e
n030w4_1_6-2-9-1 4630 2355 9850 2010 2000 3280 2690 1930 2065 5680 2070 3300 2490 1745 1780 2385
n030w8_1_2-7-0-9-3-6-0-6 7915 3965 21185 2945 2610 4475 4125 2940 3125 9355 3080 4945 4035 2295 2325 3585
n040w4_0_2-0-6-1 6440 2555 14680 1870 2075 3230 2965 1895 2275 8470 2120 4065 2750 1725 1765 2160
n040w8_0_0-6-8-9-2-6-6-4 11960 4940 35010 3765 4050 6030 6790 3755 4505 16185 4650 7525 5965 3105 3315 4535
n050w4_0_0-4-8-7 6295 2650 17745 1730 1890 3360 3225 1845 2135 9720 2040 3975 2970 1525 1630 2455
n050w8_1_1-7-8-5-7-4-1-8 15410 7985 43040 6790 6630 10015 9180 6105 7225 25690 7000 9855 8490 5560 5730 8035
n060w4_1_6-1-1-5 12405 4120 20400 3240 3540 5195 4755 3160 3715 11560 3670 6070 4870 3015 2950 3775
n080w4_2_6-0-4-8 13555 5290 27210 3995 4130 5875 5880 3955 4530 19865 4440 6060 5370 3535 3650 5320
n100w4_0_1-1-0-8 11405 3390 33740 1970 2350 3605 4195 1690 2550 15140 2400 5445 3840 1535 1445 2800
n120w4_1_4-6-2-6 14000 4940 36235 3095 3385 5295 5255 2555 3650 20400 3320 5945 5480 2470 2515 4700
Πίνακας 5.5: Σύγκριση αποτελεσμάτων αλγόριθμου σε σχέση με υποβληθείσες συμμετοχές (Submitted Results) στον Διεθνή Διαγωνισμό INRC-II
Διπλωματική Εργασία 75
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Ακολουθούν επίσης παρακάτω κάποια γραφήματα για μερικές περιπτώσεις που φαίνεται
γραφικά η σύγκριση των αποτελεσμάτων για 4 διαφορετικές περιπτώσεις (η πρώτη στήλη
ΔΕ… αφορά την διπλωματική εργασία) :
Διπλωματική Εργασία 76
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Εικόνα 5.4 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την περίπτωση 100
νοσηλευτριών και 4 εβδομάδων
Διπλωματική Εργασία 77
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Στην πρώτη φάση του αλγορίθμου βρίσκεται μια αρχικά ικανοποιητική έγκυρη λύση η
οποία βελτιστοποιείται με διάφορες μεθόδους στην 2η φάση. Χρησιμοποιείται ουσιαστικά
ένας «άπληστος» αλγόριθμος που βελτιώνει την λύση βήμα βήμα. Βλέποντας και τον
πίνακα 5.5 ο αλγόριθμος της διπλωματικής εργασίας κατατάσσεται στην 13η θέση σε
σχέση με τις 15 εμπρόθεσμες υποβολές στον διαγωνισμό INRC-II, ενώ τα αποτελέσματα
του είναι σχετικά κοντά με τον μέσο όρο όλων των άλλων κατατεθειμένων λύσεων. Ο
αλγόριθμος βρίσκει πάντα μια έγκυρη λύση ακόμα και σε μεγάλο αριθμό νοσηλευτριών
ενώ τηρούνται τα χρονικά όρια που ορίζονται από το εργαλείο benchmark με εξαίρεση τα
μεγαλύτερα instances των 100-120 νοσηλευτριών που τα ξεπερνάει.
Όσον αφορά την βελτίωση της εργασίας θα μπορούσε να γίνει μια έρευνα στο περιβάλλον
των ελληνικών νοσοκομείων ώστε να βρεθούν περιπτώσεις που θα μπορούσε να
εφαρμοστεί με κάποιες αλλαγές οπωσδήποτε. Η αλήθεια είναι ότι στην αρχή της
διπλωματικής εργασίας έγινε μια τέτοια προσπάθεια με στελέχη νοσοκομείου εδώ στο
Ηράκλειο Κρήτης αλλά βρέθηκαν πολλές ιδιομορφίες και υποπεριπτώσεις που
δυσκόλευαν την όλη προσπάθεια. Επίσης ανακάλυψα ότι από νοσοκομείο σε νοσοκομείο
υπάρχουν διαφοροποιήσεις και δεν υπάρχει ένας κοινός τόπος. Στα νοσοκομεία της
Κρήτης πάντως το σύνηθες είναι να γίνεται δημιουργία του προγράμματος ανά κλινική
από τις προϊσταμένες και όχι κεντρικά για όλο το νοσοκομείο ενώ δεν χρησιμοποιούνται
εφαρμογές αυτόματης δημιουργίας του χρονοπρογραμματισμού αλλά απλά λύσεις
εφαρμογών γραφείου (π.χ. Office) και ουσιαστικά το πρόγραμμα της κατανομής των
νοσηλευτικών βαρδιών δημιουργείται σχεδόν χειροκίνητα ή αντιγράφοντας έναν μήνα σε
έναν άλλο.
Διπλωματική Εργασία 78
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Βιβλιογραφικές Αναφορές
Aickelin U. & Dowslandb K., (2004), An indirect Genetic Algorithm for a nurse-
scheduling problem, Computers & Operations Research 31 (2004) 761–778
Bianchi L., Dorigo M., Gambardella L. & Gutjahr W. (2008), A survey on metaheuristics
for stochastic combinatorial optimization, Nat Comput (2009) 8:239–287
Burke, E.K., De Causmaecker, P., Berghe, G.V. & Van Landeghem, H., (2004) : The
state of the art of nurse rostering. Journal of Scheduling 7(6), 441–499 (2004). DOI
10.1023/B:JOSH.0000046076.75950.0b
Ceschia S., Thi Thanh Dang Ν., De Causmaecker P., Haspeslagh S. & Schaerf A., (2015),
Second International Nurse Rostering Competition (INRC-II), Problem Description and
Rules (http://mobiz.vives.be/inrc2/wp-content/uploads/2014/10/INRC2.pdf)
Cheang B., Li H., Lim A. & Rodrigues B. (2003) Nurse rostering problems––a
bibliographic survey, European Journal of Operational Research 151 (2003) 447–460
Dowsland K., (1997), Nurse Scheduling with Tabu Search and strategic oscillation,
European Journal of Operational Research 106 (1998) 393-407
Ernst A., Jiang H., Krishnamoorthy M. & Sier D., (2004), “Staff scheduling and rostering:
A review of applications, methods and models”, European Journal of Operational
Research 153 (2004) 3–27
Hansen P. & Mladenovi N., (2003), A Tutorial on Variable Neighborhood Search, Les
Cahiers du GERAD G–2003–46
Jin H., Post G. & Van der Veen E., ORTEC’s contribution to the Second International
Nurse Rostering Competition
Διπλωματική Εργασία 79
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Kheiri Α., Gretsista Α., Keedwell Ε., Lulli G., Epitropakis M. & Burke E., A hyper-
heuristic approach based upon a hidden Markov model for the multi-stage nurse rostering
problem
Landa Silva J., Burke E. & Petrovic S., “An Introduction to Multiobjective Metaheuristics
for Scheduling and Timetabling” , Automated Scheduling, Optimisation and Planning
Research Group, School of Computer Science and IT, University of Nottingham, UK
Legrain A., Omer J. & Rosat S., (2020), A rotation-based branch-and-price approach for
the nurse scheduling problem. Mathematical Programming Computation, Springer, 2020,
12 (3), pp.417-450
Miller, Holmes & Pierskalla, William & Rath, Gustave. (1976). Nurse Scheduling Using
Mathematical Programming. Operations Research. 24. 857-870. 10.1287/opre.24.5.857.
Ngoo C., Goh S., Sze S., Sabar N., Abdullah S. & Kendall G., (2022), A Survey of the
Nurse Rostering Solution Methodologies: The State-of-the-Art and Emerging Trends,
IEEE Access, Digital Object Identifier 10.1109/ACCESS.2022.3177280
Römer M. & Taieb Mellouli, (2016), “A direct MILP approach based on state expanded
Network flows and anticipation for multi-stage nurse rostering under uncertainty”, in
Proceedings of the 11th International. Conference on Practice and Theory Automated
Timetabling (PATAT), 2016, pp. 549_551
Russell, S. & Norvig P., (2010) Artificial Intelligence, A Modern Approach. Third
Edition.
Solos Ι., Τassopoulos Ι., and Beligiannis G., (2013), A Generic Two-Phase Stochastic
Variable Neighborhood Approach for Effectively Solving the Nurse Rostering Problem,
Algorithms 2013, 6, 278-308
Τassopoulos Ι., Solos Ι. & Beligiannis G., (2015), Α two-phase adaptive variable
neighborhood approach for nurserostering, Computers & Operations Research 60 (2015)
150–169
Trilling L., Guinet A. & Le Magny D., "Nurse Scheduling Using Integer Linear
Programming and Constraint Programming"
Διπλωματική Εργασία 80
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Valouxis C., Gogos C.. Goulas G., Alefragis P. & Housos, (2012), A systematic two
phase approach for the nurse rostering problem, European Journal of Operational Research
219 (2012) 425–433
Valouxis C., Housos E. & (2000), “Hybrid optimization techniques for the workshift and
rest assignment of nursing personnel”, Artificial Intelligence in Medicine 20 (2000)
155±175
Παυλίδης Α., (2019), Ανάπτυξη πλήρους εφαρμογής για την αποδοτική επίλυση του
προβλήματος Nurse rostering (εύρεση βέλτιστου ωρολογίου προγράμματος εργασίας σε
νοσοκομειακά ιδρύματα), Ελληνικό Ανοικτό Πανεπιστήμιο (Διπλωματική Εργασία –
επιβλέπων κ. Μπεληγιάννης)
Διπλωματική Εργασία 81
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
<NumberOfWeeks>4</NumberOfWeeks>
Ακολούθως τα ονόματα της λίστας των δεξιοτήτων (skills) που έχουν οι
νοσηλευτές/τριες.
<Skills>
<Skill>HeadNurse</Skill>
<Skill>Nurse</Skill>
</Skills>
Διπλωματική Εργασία 82
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Η ενότητα τύπων βάρδιας δείχνει τους διαθέσιμους τύπους βάρδιας, και για κάθε έναν από
αυτούς, το αναγνωριστικό - όνομά του (Id) και τον ελάχιστο και μέγιστο αριθμό
διαδοχικών αναθέσεων της ίδιας βάρδιας που επιτρέπονται
<NumberOfConsecutiveAssignments>.
<ShiftTypes>
<ShiftType Id="Early">
<NumberOfConsecutiveAssignments>
<Minimum>2</Minimum>
<Maximum>5</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
<ShiftType Id="Late">
<NumberOfConsecutiveAssignments>
<Minimum>2</Minimum>
<Maximum>3</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
<ShiftType Id="Night">
<NumberOfConsecutiveAssignments>
<Minimum>4</Minimum>
<Maximum>5</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
</ShiftTypes>
<ForbiddenShiftTypeSuccessions>
<ShiftTypeSuccession>
<PrecedingShiftType>Night</PrecedingShiftType>
<SucceedingShiftTypes>
<ShiftType>Early</ShiftType>
<ShiftType>Late</ShiftType>
</SucceedingShiftTypes>
</ShiftTypeSuccession>
</ForbiddenShiftTypeSuccessions>
Στο τμήμα των συμβάσεων αναγράφεται το όνομα της σύμβασης (Contract Id) , τα
κατώτερα και ανώτερα όρια στις εργάσιμες ημέρες και τις ημέρες ανάπαυσης. Αναλυτικά,
Διπλωματική Εργασία 83
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
καθορίζει τον ελάχιστο και τον μέγιστο αριθμό συνολικών αναθέσεων στον συνολικό
ορίζοντα προγραμματισμού (NumberOfAssignments), τον ελάχιστο και τον μέγιστο
αριθμό συνεχόμενων εργάσιμων ημερών (ConsecutiveWorkingDays), τον ελάχιστο και
τον μέγιστο αριθμό συνεχόμενων ημερών μη εργασίας - days off (ConsecutiveDaysOff),
τον μέγιστο αριθμό σαββατοκύριακων εργασίας
(MaximumNumberOfWorkingWeekends) και την παρουσία (1) ή απουσία (0) του
περιορισμού του πλήρους Σαββατοκύριακου (CompleteWeekends).
<Contracts>
<Contract Id="FullTime">
<NumberOfAssignments>
<Minimum>15</Minimum>
<Maximum>22</Maximum>
</NumberOfAssignments>
<ConsecutiveWorkingDays>
<Minimum>3</Minimum>
<Maximum>5</Maximum>
</ConsecutiveWorkingDays>
<ConsecutiveDaysOff>
<Minimum>2</Minimum>
<Maximum>3</Maximum>
</ConsecutiveDaysOff>
<MaximumNumberOfWorkingWeekends>3</MaximumNumberOfWorkingWeekends>
<CompleteWeekends>1</CompleteWeekends>
</Contract>
</Contracts>
<Nurses>
<Nurse Id="Patrick">
<Contract>FullTime</Contract>
<Skills>
<Skill>HeadNurse</Skill>
<Skill>Nurse</Skill>
</Skills>
</Nurse>
<Nurse Id="Andrea">
<Contract>FullTime</Contract>
<Skills>
<Skill>HeadNurse</Skill>
<Skill>Nurse</Skill>
</Skills>
</Nurse>
</Nurses>
Διπλωματική Εργασία 84
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
<Scenario>n005w4</Scenario>
Ακολούθως παρατίθενται όλα τα δεδομένα σχετικά με τις απαιτήσεις κάλυψης
(Requirements) και τις προτιμήσεις μη εργασίας των νοσηλευτών/τριών
(ShiftOffRequests).
Μια απαίτηση κάλυψης (Requirement) καθορίζεται από τον τύπο της βάρδιας (ShiftType),
την δεξιότητα (Skill ) και για κάθε ημέρα της εβδομάδας (από Δευτέρα έως Κυριακή), την
ελάχιστη (Minimum) και τη βέλτιστη (Optimal) κάλυψη (RequirementOnMonday,
RequirementOnTuesday… εώς RequirementOnSunday).
<Requirements>
<Requirement>
<ShiftType>Early</ShiftType>
<Skill>HeadNurse</Skill>
<RequirementOnMonday>
<Minimum>0</Minimum>
<Optimal>0</Optimal>
</RequirementOnMonday>
<RequirementOnTuesday>
<Minimum>0</Minimum>
<Optimal>0</Optimal>
</RequirementOnTuesday>
<RequirementOnWednesday>
<Minimum>1</Minimum>
<Optimal>1</Optimal>
</RequirementOnWednesday>
<RequirementOnThursday>
<Minimum>0</Minimum>
<Optimal>0</Optimal>
</RequirementOnThursday>
<RequirementOnFriday>
<Minimum>1</Minimum>
<Optimal>1</Optimal>
</RequirementOnFriday>
<RequirementOnSaturday>
<Minimum>0</Minimum>
<Optimal>0</Optimal>
</RequirementOnSaturday>
<RequirementOnSunday>
<Minimum>0</Minimum>
<Optimal>0</Optimal>
</RequirementOnSunday>
</Requirement>
</Requirements>
Διπλωματική Εργασία 85
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
<ShiftOffRequests>
<ShiftOffRequest>
<Nurse>Nguyen</Nurse>
<ShiftType>Any</ShiftType>
<Day>Friday</Day>
</ShiftOffRequest>
<ShiftOffRequest>
<Nurse>Nguyen</Nurse>
<ShiftType>Any</ShiftType>
<Day>Saturday</Day>
</ShiftOffRequest>
<ShiftOffRequest>
<Nurse>Sara</Nurse>
<ShiftType>Late</ShiftType>
<Day>Saturday</Day>
</ShiftOffRequest>
</ShiftOffRequests>
<Week>0</Week>
<Scenario>n005w4</Scenario>
Διπλωματική Εργασία 86
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
<NursesHistory>
<NurseHistory>
<Nurse>Patrick</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>Night</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>1</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>4</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>0</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Stefaan</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>None</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>0</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>0</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>3</NumberOfConsecutiveDaysOff>
</NurseHistory>
</NursesHistory>
<Week>0</Week>
<Scenario>n005w4</Scenario>
Διπλωματική Εργασία 87
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
<Assignments>
<Assignment>
<Nurse>Patrick</Nurse>
<Day>Mon</Day>
<ShiftType>Night</ShiftType>
<Skill>Nurse</Skill>
</Assignment>
<Assignment>
<Nurse>Patrick</Nurse>
<Day>Wed</Day>
<ShiftType>Early</ShiftType>
<Skill>HeadNurse</Skill>
</Assignment>
<Assignment>
<Nurse>Patrick</Nurse>
<Day>Thu</Day>
<ShiftType>Early</ShiftType>
<Skill>Nurse</Skill>
</Assignment>
</Assignments>
Διπλωματική Εργασία 88
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Για τους υπόλοιπους περιορισμούς H3, S2, S3, περιγράφεται αναλυτικά η αξιολόγησή
τους και στα δύο όρια ενός σταδίου.
Για λόγους απλότητας, υποθέτουμε ότι τα δεδομένα εισόδου όσον αφορά τις βάρδιες είναι
αυτά που περιλαμβάνονται στο ακόλουθο τμήμα ενός αρχείου σεναρίου, θέτοντας όλα τα
όρια στην ίδια τιμή 3.
<ShiftTypes>
<ShiftType Id="Early">
<NumberOfConsecutiveAssignments>
<Minimum>3</Minimum>
<Maximum>3</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
<ShiftType Id="Late">
<NumberOfConsecutiveAssignments>
<Minimum>3</Minimum>
<Maximum>3</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
</ShiftTypes>
Δηλαδή ο ελάχιστος και μέγιστος αριθμός συνεχόμενων τέτοιων βαρδιών και στους δύο
τύπους βάρδιας Early (Πρωί) και Late (Απόγευμα) είναι 3.
Διπλωματική Εργασία 89
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
FORBIDDEN_SHIFT_TYPES_SUCCESSIONS
<ForbiddenShiftTypeSuccessions>
<ShiftTypeSuccession>
<PrecedingShiftType>Early</PrecedingShiftType>
<SucceedingShiftTypes/>
</ShiftTypeSuccession>
<ShiftTypeSuccession>
<PrecedingShiftType>Late</PrecedingShiftType>
<SucceedingShiftTypes>
<ShiftType>Early</ShiftType>
</SucceedingShiftTypes>
</ShiftTypeSuccession>
</ForbiddenShiftTypeSuccessions>
Εξήγηση: Δεν υπάρχει κάποια απαγορευμένη διαδοχή βάρδιας μετά από βάρδια Πρωί
(Early), ενώ μετά από βάρδια Απόγευμα (Late) δεν μπορεί να έχουμε επόμενη βάρδια
Πρωί.
Σύμβασεις (Contracts) :
<Contracts>
<Contract Id="FullTime">
<ConsecutiveWorkingDays>
<Minimum>3</Minimum>
<Maximum>3</Maximum>
</ConsecutiveWorkingDays>
<ConsecutiveDaysOff>
<Minimum>3</Minimum>
<Maximum>3</Maximum>
</ConsecutiveDaysOff>
</Contract>
</Contracts>
Εξήγηση: Υπάρχει ένας τύπος συμβολαίου FullTime που ο ελάχιστος και μέγιστος
αριθμός συνεχόμενων ημερών εργασίας είναι 3 όπως 3 είναι και ο ελάχιστος και μέγιστος
αριθμός συνεχόμενων ημερών μη εργασίας - άδειας.
Η ενότητα B.1 εξηγεί τους περιορισμούς του αριθμού των διαδοχικών αναθέσεων
(περιορισμός S2 – Consecutive assignments). Στην ενότητα B.2 επεξηγείται η αξιολόγηση
του περιορισμού του αριθμού των διαδοχικών ημερών άδειας (περιορισμός S3 –
Consecutive days off). Η ενότητα B.3 εξηγεί τον περιορισμό διαδοχής τύπου βάρδιας
(περιορισμός H3 - Shift type successions).
Διπλωματική Εργασία 90
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Όπως φαίνεται, ο αξιολογητής μετράει μόνο την «επιπλέον» τιμή της παραβίασης, καθώς
μέρος της παραβίασης έχει ήδη ληφθεί υπόψη κατά την αξιολόγηση του προηγούμενου
σταδίου (βλ. πίνακα Β.3).
Διπλωματική Εργασία 91
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Ο Πίνακας B.2 δείχνει την αξιολόγηση του περιορισμού για διαφορετικές τιμές του c. Το
όριο είναι το 3 από το οποίο από εκεί και πέρα έχουμε παραβίαση με το κόστος βάρους να
είναι το 30 για κάθε παραβίαση.
Ιστορικό Δ Τ Τ Π Π Σ Κ Παραβιάσεις
Ε Ρ Ε Ε Α Α Υ
– 0
c≥3 • – 1
• • – 2
• • • – 3
• • • • – 4
– 0
c=2 • – 0
• • – 1
• • • – 2
• • • • – 3
– 0
c=1 • – 0
• • – 0
• • • – 1
• • • • – 2
– 0
c=0 • – 0
• • – 0
• • • – 0
• • • • – 1
Πίνακας B.2: Αξιολόγηση του περιορισμού μέγιστου αριθμού διαδοχικών εργάσιμων ημερών στην
αρχή ενός σταδίου για διαφορετικές τιμές του c.
Ο Πίνακας B.3 δείχνει την αξιολόγηση του περιορισμού για τις μέγιστες διαδοχικές
εργάσιμες ημέρες στο τέλος ενός σταδίου - εβδομάδας.
Δ Τ Τ Π Π Σ Κ Παραβιάσεις
Ε Ρ Ε Ε Α Α Υ
– • • • • • • 3
– • • • • • 2
– • • • • 1
– • • • 0
Πίνακας Β.3: Αξιολόγηση του περιορισμού μέγιστου αριθμού διαδοχικών εργάσιμων ημερών στο
τέλος ενός σταδίου - εβδομάδας.
Διπλωματική Εργασία 92
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Ο Πίνακας B.4 αξιολογεί τον περιορισμό για τις ελάχιστες διαδοχικές εργάσιμες ημέρες.
Εάν c>=3, τότε καμία παραβίαση αυτού του περιορισμού δεν μπορεί να συμβεί στην αρχή
ενός σταδίου. Καθώς δεν είναι βέβαιο ποιες είναι οι εργασίες στην αρχή του επόμενου
σταδίου, ο περιορισμός ελάχιστου αριθμού διαδοχικών εργάσιμων ημερών δεν
λαμβάνεται υπόψη στο τέλος ενός σταδίου - εβδομάδας.
Ιστορικό Δ Τ Τ Π Π Σ Κ Παραβιάσεις
Ε Ρ Ε Ε Α Α Υ
c=2 – 1
• – 0
– 2
c=1 • – 1
• • – 0
– 0
c=0 • – 2
• • – 1
• • • – 0
Πίνακας Β.4: Αξιολόγηση του περιορισμού ελάχιστου αριθμού διαδοχικών εργάσιμων ημερών στην
αρχή ενός σταδίου με όριο 3
Σημειώστε ότι τόσο οι μέγιστοι όσο και οι ελάχιστοι περιορισμοί αξιολογούνται ανά
σειρά. Στον Πίνακα Β.5, υπάρχουν δύο σειρές αναθέσεων εργασίας μήκους 1 ημέρας και
2 ημερών, που παράγουν δύο και μία παραβιάσεις, αντίστοιχα. Κάθε παραβίαση επίσης
αντιστοιχεί σε βάρος 30.
ΔΕ ΤΡ ΤΕ ΠΕ ΠΑ ΣΑ ΚΥ Παραβιάσεις
– • – – • • – 3
Πίνακας Β.5: Αξιολόγηση του περιορισμού ελάχιστου αριθμού διαδοχικών εργάσιμων ημερών για δύο
σειρές εργασιών (με όριο το ελάχιστο 3).
Διπλωματική Εργασία 93
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Β.1.3 Ελάχιστος και μέγιστος αριθμός διαδοχικών εργασιών στην ίδια βάρδια (όριο
από το ShiftTypes)
Τα παραδείγματα που παρουσιάστηκαν στις προηγούμενες παραγράφους λειτουργούν
παρόμοια για τις διαδοχικές εργασίες στην ίδια βάρδια, αντικαθιστώντας το σύμβολο • με
τη συγκεκριμένη βάρδια (Π για Πρωί ή Α για απόγευμα, σε αυτό το παράδειγμα) και το
σύμβολο - με μια ημέρα άδειας. Το αντίστοιχο βάρος ποινής για τους περιορισμούς
αυτούς είναι το 15.
Ιστορικό ΔΕ ΤΡ ΤΕ ΠΕ ΠΑ ΣΑ ΚΥ Παραβιάσεις
• 0
c≥3 – • 1
– – • 2
– – – • 3
– – – – • 4
• 0
c=2 – • 0
– – • 1
– – – • 2
– – – – • 3
• 0
c=1 – • 0
– – • 0
– – – • 1
– – – – • 2
• 0
c=0 – • 0
– – • 0
– – – • 0
– – – – • 1
Διπλωματική Εργασία 94
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Πίνακας Β.6 : Αξιολόγηση του μέγιστου αριθμού διαδοχικών ημερών άδειας στην αρχή ενός σταδίου –
εβδομάδας για διαφορετικές τιμές του c (που δείχνει το άθροισμα των διαδοχικών ημερών άδειας από
το προηγούμενο στάδιο).
Στον Πίνακα Β.7, παρουσιάζονται οι παραβιάσεις του περιορισμού του μέγιστου αριθμού
διαδοχικών ημερών άδειας στο τέλος ενός σταδίου. το ιστορικό δεν εμπλέκεται σε αυτή
την περίπτωση.
ΔΕ ΤΡ ΤΕ ΠΕ ΠΑ ΣΑ ΚΥ Παραβιάσεις
• – – – 0
• – – – – 1
• – – – – – 2
• – – – – – – 3
Πίνακας Β.7 : Αξιολόγηση του περιορισμού του μέγιστου αριθμού διαδοχικών ημερών άδειας στο
τέλος ενός σταδίου.
Το βάρος για την παραβίαση του περιορισμού είναι 30.
Ο Πίνακας Β.8 δείχνει την αξιολόγηση του περιορισμού ελάχιστου αριθμού διαδοχικών
ημερών άδειας στην αρχή του σταδίου - εβδομάδας.
Ιστορικό ΔΕ ΤΡ ΤΕ ΠΕ ΠΑ ΣΑ ΚΥ Παραβιάσεις
• 0
≥3 – • 0
– – • 0
– – – • 0
– – – – • 0
• 1
2 – • 0
– – • 0
– – – • 0
– – – – • 0
• 2
1 – • 1
– – • 0
– – – • 0
– – – – • 0
• 0
0 – • 2
– – • 1
– – – • 0
– – – – • 0
Πίνακας Β.8: Αξιολόγηση του περιορισμού ελάχιστου αριθμού διαδοχικών ημερών άδειας στην αρχή
ενός σταδίου για διαφορετικές τιμές του c.
Διπλωματική Εργασία 95
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Στον Πίνακα Β.9, φαίνεται η αξιολόγηση του περιορισμού για την απαγορευμένη διαδοχή
βάρδιας στην αρχή του σταδίου - εβδομάδας. Σύμφωνα με το παράδειγμα μας, μετά από
βάρδια Απόγευμα δεν επιτρέπεται να έχουμε επόμενη βάρδια Πρωί. Όπως φαίνεται, ο
περιορισμός παραβιάζεται μόνο όταν ο τελευταίος εκχωρημένος τύπος βάρδιας από το
ιστορικό είναι ίσος με Απόγευμα και η βάρδια Δευτέρας είναι Πρωί. Ο περιορισμός δεν
έχει βάρος μιας και ανήκει στους αυστηρούς περιορισμούς.
Ιστορικό ΔΕ ΤΡ ΤΕ ΠΕ ΠΑ ΣΑ ΚΥ Παραβίαση
Π NAI
Απόγευμα Α OXI
– OXI
Π OXI
Α OXI
Πρωί – OXI
Πίνακας Β.9: Αξιολόγηση της απαγορευμένης διαδοχής τύπου βάρδιας
Διπλωματική Εργασία 96
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Θα πάρουμε σαν παράδειγμα από τις δοκιμαστικές λύσεις που δίνονταν μαζί με τον
διαγωνισμό την περίπτωση που φαίνεται στην Ενότητα 3.6.2 για την περιγραφή του
Επικυρωτή (Validator). H περίπτωση αφορά την περίπτωση (instance) n005w4, δηλαδή
περίπτωση για 5 νοσηλεύτριες και περίοδο προγραμματισμού 4 εβδομάδων.
<NumberOfWeeks>4</NumberOfWeeks>
<Skills>
<Skill>HeadNurse</Skill>
<Skill>Nurse</Skill>
</Skills>
Διπλωματική Εργασία 97
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
<ShiftTypes>
<ShiftType Id="Early">
<NumberOfConsecutiveAssignments>
<Minimum>2</Minimum>
<Maximum>5</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
<ShiftType Id="Late">
<NumberOfConsecutiveAssignments>
<Minimum>2</Minimum>
<Maximum>3</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
<ShiftType Id="Night">
<NumberOfConsecutiveAssignments>
<Minimum>4</Minimum>
<Maximum>5</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
</ShiftTypes>
(3 τύποι βάρδιας. Early – Πρωί, Late – Απόγευμα και Night – Νύχτα. Για παράδειγμα για
Early - Πρωί ο ελάχιστος αριθμός συνεχόμενων τέτοιων αναθέσεων τύπου βάρδιας είναι 2
και ο μέγιστος αριθμός διαδοχικών αναθέσεων 5)
<ForbiddenShiftTypeSuccessions>
<ShiftTypeSuccession>
<PrecedingShiftType>Early</PrecedingShiftType>
<SucceedingShiftTypes/>
</ShiftTypeSuccession>
<ShiftTypeSuccession>
<PrecedingShiftType>Late</PrecedingShiftType>
<SucceedingShiftTypes>
<ShiftType>Early</ShiftType>
</SucceedingShiftTypes>
</ShiftTypeSuccession>
<ShiftTypeSuccession>
<PrecedingShiftType>Night</PrecedingShiftType>
<SucceedingShiftTypes>
<ShiftType>Early</ShiftType>
<ShiftType>Late</ShiftType>
</SucceedingShiftTypes>
</ShiftTypeSuccession>
</ForbiddenShiftTypeSuccessions>
Διπλωματική Εργασία 98
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Δηλαδή δεν υπάρχει περιορισμός για την επόμενη βάρδια από Πρωί (Early) ενώ για
Απόγευμα (Late) δεν επιτρέπεται η επόμενη βάρδια Πρωί (Early) και για την Νύχτα
(Night) οι επόμενες βάρδιες Πρωί (Early) και Απόγευμα (Late).
<Contracts>
<Contract Id="FullTime">
<NumberOfAssignments>
<Minimum>15</Minimum>
<Maximum>22</Maximum>
</NumberOfAssignments>
<ConsecutiveWorkingDays>
<Minimum>3</Minimum>
<Maximum>5</Maximum>
</ConsecutiveWorkingDays>
<ConsecutiveDaysOff>
<Minimum>2</Minimum>
<Maximum>3</Maximum>
</ConsecutiveDaysOff>
<MaximumNumberOfWorkingWeekends>3</MaximumNumberOfWorkingWeekends>
<CompleteWeekends>1</CompleteWeekends>
</Contract>
<Contract Id="PartTime">
<NumberOfAssignments>
<Minimum>7</Minimum>
<Maximum>11</Maximum>
</NumberOfAssignments>
<ConsecutiveWorkingDays>
<Minimum>3</Minimum>
<Maximum>5</Maximum>
</ConsecutiveWorkingDays>
<ConsecutiveDaysOff>
<Minimum>3</Minimum>
<Maximum>5</Maximum>
</ConsecutiveDaysOff>
<MaximumNumberOfWorkingWeekends>3</MaximumNumberOfWorkingWeekends>
<CompleteWeekends>1</CompleteWeekends>
</Contract>
</Contracts>
Διπλωματική Εργασία 99
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»
Complete-Weekend. Σε αυτή την περίπτωση δηλαδή υπάρχει όταν είναι 1 (True) πρέπει
να εργάζεται και τις δύο μέρες του σαββατοκύριακού ή καμία αλλιώς υπάρχει ποινή.
<Nurses>
<Nurse Id="Patrick">
<Contract>FullTime</Contract>
<Skills>
<Skill>HeadNurse</Skill>
<Skill>Nurse</Skill>
</Skills>
</Nurse>
<Nurse Id="Andrea">
<Contract>FullTime</Contract>
<Skills>
<Skill>HeadNurse</Skill>
<Skill>Nurse</Skill>
</Skills>
</Nurse>
<Nurse Id="Stefaan">
<Contract>PartTime</Contract>
<Skills>
<Skill>HeadNurse</Skill>
<Skill>Nurse</Skill>
</Skills>
</Nurse>
<Nurse Id="Sara">
<Contract>PartTime</Contract>
<Skills>
<Skill>Nurse</Skill>
</Skills>
</Nurse>
<Nurse Id="Nguyen">
<Contract>FullTime</Contract>
<Skills>
<Skill>Nurse</Skill>
</Skills>
</Nurse>
</Nurses>
<Week>0</Week>
<Scenario>n005w4</Scenario>
(Αναφορά σε ποια περίπτωση και εβδομάδα αφορά)
<NursesHistory>
<NurseHistory>
<Nurse>Patrick</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>Night</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>1</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>4</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>0</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Andrea</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>Early</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>3</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>3</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>0</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Stefaan</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>None</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>0</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>0</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>3</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Sara</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>Late</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>1</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>4</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>0</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Nguyen</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>None</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>0</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>0</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>1</NumberOfConsecutiveDaysOff>
</NurseHistory>
</NursesHistory>
<Scenario>n005w4</Scenario>
SHIFT_OFF_REQUESTS = 5
Andrea Any Tue
Stefaan Any Wed
Nguyen Any Fri
Nguyen Any Sat
Sara Late Sat
REQUIREMENTS
Early HeadNurse (1,1) (0,0) (0,0) (0,0) (0,0) (0,0) (1,1)
Early Nurse (0,1) (1,1) (1,1) (1,1) (1,1) (1,1) (1,1)
Late HeadNurse (0,0) (0,0) (0,0) (1,1) (0,0) (0,0) (1,1)
Late Nurse (1,1) (1,1) (1,1) (1,1) (1,1) (0,1) (1,1)
Night HeadNurse (1,1) (0,0) (1,1) (0,0) (1,1) (0,0) (0,0)
Night Nurse (1,1) (0,1) (0,1) (1,1) (1,1) (1,1) (1,1)
SHIFT_OFF_REQUESTS = 4
Nguyen Late Tue
Andrea Any Wed
Sara Early Thu
Sara Night Thu
Για την 3η και 4η εβδομάδα (είναι και για τις δύο εβδομάδες το ίδιο αρχείο
WD-n005w4-3) :
REQUIREMENTS
Early HeadNurse (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0)
Early Nurse (1,1) (1,1) (1,1) (1,1) (1,1) (1,1) (1,1)
Late HeadNurse (0,0) (1,1) (1,1) (0,0) (0,0) (0,0) (0,0)
Late Nurse (0,1) (1,1) (1,1) (1,1) (1,1) (0,1) (1,1)
Night HeadNurse (1,1) (1,1) (0,0) (0,0) (0,0) (1,1) (1,1)
Night Nurse (0,1) (1,1) (1,1) (1,1) (0,1) (1,1) (1,1)
SHIFT_OFF_REQUESTS = 2
Andrea Late Fri
Andrea Any Sat
Από την έξοδο του επικυρωτή (Validator) βλέπουμε ότι δίνεται ο παρακάτω πίνακας
αναθέσεων. Όπου στην πρώτη γραμμή οι μέρες της εβδομάδας (με το πρώτο γράμμα της
ημέρα στα αγγλικά) και για τους τύπους βάρδιας αντιστοιχούν E Early (Πρωί),
L Late (Απόγευμα), N Night (Νύχτα).
------------------------
Total cost: 1575
Βλέπουμε ξεκάθαρα ότι δεν υπάρχει νοσηλευτής να εργάζεται 2 φορές κάποια ημέρα
οπότε δεν υπάρχει όντως κάποια παραβίαση.
Ο αριθμός των νοσηλευτών/τριων για κάθε βάρδια και για κάθε δεξιότητα πρέπει να είναι
τουλάχιστον ίσος με την ελάχιστη απαίτηση της βάρδιας – δεξιότητας.
Εδώ θα χρειαστούμε τα αρχεία week_data και των αναθέσεων ώστε να δούμε τις
απαιτήσεις κάθε εβδομάδας καθώς και τις αναθέσεις. Στα αρχεία δεδομένων εβδομάδας
δηλώνεται για κάθε μέρα (κάθε μέρα είναι μια παρένθεση), η ελάχιστη και η βέλτιστη
απαίτηση αναθέσεων για κάθε τύπο βάρδιας και δεξιότητας. Στα αρχεία λύσεων οι
αναθέσεις ανά νοσηλευτή/τρια, η μέρα, ο τύπος βάρδιας και η δεξιότητα.
2. Τύπος Βάρδιας Early, δεξιότητα Nurse για όλες τις μέρες εκτός Τετάρτης και
Παρασκευής (ακόμα και σαββατοκύριακο) 1 βάρδια.
4. Τύπος Βάρδιας Late, δεξιότητα Nurse Τρίτη εώς και Κυριακή 1 βάρδια
6. Τύπος Βάρδιας Night, δεξιότητα Nurse όλες τις μέρες εκτός Τετάρτη &
Παρασκευή 1 βάρδια
ASSIGNMENTS = 25
Patrick Mon Night Nurse
Patrick Wed Early HeadNurse
Patrick Thu Early Nurse
Patrick Fri Early HeadNurse
Patrick Sat Late Nurse
Patrick Sun Late Nurse
Andrea Mon Late HeadNurse
Andrea Tue Late Nurse
Andrea Fri Late Nurse
Andrea Sat Late HeadNurse
Andrea Sun Late HeadNurse
Stefaan Mon Night HeadNurse
Stefaan Tue Night Nurse
Stefaan Wed Night HeadNurse
Stefaan Thu Night HeadNurse
Sara Thu Night Nurse
Sara Fri Night Nurse
Sara Sat Night Nurse
Sara Sun Night Nurse
Nguyen Mon Early Nurse
Nguyen Tue Early Nurse
Nguyen Wed Late Nurse
Nguyen Thu Late Nurse
Nguyen Sat Early Nurse
Nguyen Sun Early Nurse
1. Patrick Wed Early HeadNurse & Patrick Fri Early HeadNurse (άρα ικανοποιείται)
2. Nguyen Mon Early Nurse, Nguyen Tue Early Nurse, Patrick Thu Early Nurse, Nguyen
Sat Early Nurse, Nguyen Sun Early Nurse (άρα ικανοποιείται)
3. Andrea Mon Late HeadNurse, Andrea Sat Late HeadNurse , Andrea Sun Late
HeadNurse (άρα ικανοποιείται)
4. Andrea Tue Late Nurse, Nguyen Wed Late Nurse, Nguyen Thu Late Nurse, Andrea Fri
Late Nurse, Patrick Sat Late Nurse, Patrick Sun Late Nurse (άρα ικανοποιείται)
5. Stefaan Mon Night HeadNurse, Stefaan Wed Night HeadNurse, Stefaan Thu Night
HeadNurse (άρα ικανοποιείται)
6. Patrick Mon Night Nurse, Stefaan Tue Night Nurse, Sara Thu Night Nurse, Sara Fri
Night Nurse, Sara Sat Night Nurse, Sara Sun Night Nurse (άρα ικανοποιείται)
REQUIREMENTS
Early HeadNurse (1,1) (0,0) (0,0) (0,0) (0,0) (0,0) (1,1)
Early Nurse (0,1) (1,1) (1,1) (1,1) (1,1) (1,1) (1,1)
Late HeadNurse (0,0) (0,0) (0,0) (1,1) (0,0) (0,0) (1,1)
Late Nurse (1,1) (1,1) (1,1) (1,1) (1,1) (0,1) (1,1)
Night HeadNurse (1,1) (0,0) (1,1) (0,0) (1,1) (0,0) (0,0)
Night Nurse (1,1) (0,1) (0,1) (1,1) (1,1) (1,1) (1,1)
2. Τύπος Βάρδιας Early, δεξιότητα Nurse, για όλες τις μέρες εκτός Δευτέρας (ακόμα
και σαββατοκύριακο) 1 βάρδια.
4. Τύπος Βάρδιας Late, δεξιότητα Nurse, κάθε μέρα εκτός Σάββατο 1 βάρδια
6. Τύπος Βάρδιας Night, δεξιότητα Nurse, όλες τις μέρες εκτός Τρίτη & Τετάρτη 1
βάρδια
ASSIGNMENTS = 26
Patrick Wed Early Nurse
Patrick Thu Early Nurse
Patrick Fri Late Nurse
Patrick Sat Late Nurse
Patrick Sun Late HeadNurse
Andrea Mon Night HeadNurse
Andrea Tue Night Nurse
Andrea Wed Night HeadNurse
Andrea Thu Night Nurse
Andrea Fri Night HeadNurse
Andrea Sun Late Nurse
Stefaan Mon Early HeadNurse
Stefaan Tue Early Nurse
Stefaan Wed Late Nurse
Stefaan Thu Late HeadNurse
Stefaan Sun Early HeadNurse
Sara Mon Night Nurse
Sara Fri Early Nurse
Sara Sat Early Nurse
Sara Sun Early Nurse
Nguyen Mon Late Nurse
Nguyen Tue Late Nurse
Nguyen Thu Late Nurse
Nguyen Fri Night Nurse
Nguyen Sat Night Nurse
Nguyen Sun Night Nurse
1. Stefaan Mon Early HeadNurse, Stefaan Sun Early HeadNurse (άρα ικανοποιείται)
2. Stefaan Tue Early Nurse, Patrick Wed Early Nurse, Patrick Thu Early Nurse, Sara
Fri Early Nurse, Sara Sat Early Nurse, Sara Sun Early Nurse (άρα ικανοποιείται)
3. Stefaan Thu Late HeadNurse, Patrick Sun Late HeadNurse (άρα ικανοποιείται)
4. Nguyen Mon Late Nurse, Nguyen Tue Late Nurse, Stefaan Wed Late Nurse,
Nguyen Thu Late Nurse, Patrick Fri Late Nurse, Andrea Sun Late Nurse (άρα
ικανοποιείται)
5. Andrea Mon Night HeadNurse, Andrea Wed Night HeadNurse, Andrea Fri Night
HeadNurse (άρα ικανοποιείται)
6. Sara Mon Night Nurse,, Andrea Thu Night Nurse, Nguyen Fri Night Nurse,
Nguyen Sat Night Nurse, Nguyen Sun Night Nurse (άρα ικανοποιείται)
REQUIREMENTS
Early HeadNurse (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0)
Early Nurse (1,1) (1,1) (1,1) (1,1) (1,1) (1,1) (1,1)
Late HeadNurse (0,0) (1,1) (1,1) (0,0) (0,0) (0,0) (0,0)
Late Nurse (0,1) (1,1) (1,1) (1,1) (1,1) (0,1) (1,1)
Night HeadNurse (1,1) (1,1) (0,0) (0,0) (0,0) (1,1) (1,1)
Night Nurse (0,1) (1,1) (1,1) (1,1) (0,1) (1,1) (1,1)
1. Τύπος Βάρδιας Early, δεξιότητα Nurse, για όλες τις μέρες 1 βάρδια.
3. Τύπος Βάρδιας Late, δεξιότητα Nurse, κάθε μέρα εκτός Δευτέρα & Σάββατο 1
βάρδια
5. Τύπος Βάρδιας Night, δεξιότητα Nurse, όλες τις μέρες εκτός Δευτέρα &
Παρασκευή 1 βάρδια
ASSIGNMENTS = 26
Patrick Tue Night Nurse
Patrick Wed Night Nurse
Patrick Thu Night Nurse
Patrick Fri Night Nurse
Patrick Sat Night Nurse
Patrick Sun Night HeadNurse
Andrea Mon Late Nurse
Andrea Tue Late HeadNurse
Andrea Wed Late HeadNurse
Andrea Sat Night HeadNurse
Andrea Sun Night Nurse
Stefaan Mon Night HeadNurse
Stefaan Tue Night HeadNurse
Stefaan Fri Early Nurse
Stefaan Sat Early Nurse
Stefaan Sun Early Nurse
Sara Mon Early Nurse
Sara Tue Late Nurse
Sara Wed Late Nurse
Sara Thu Late Nurse
Nguyen Tue Early Nurse
Nguyen Wed Early Nurse
Nguyen Thu Early Nurse
Nguyen Fri Late Nurse
Nguyen Sat Late Nurse
Nguyen Sun Late Nurse
1. Sara Mon Early Nurse, Nguyen Tue Early Nurse, Nguyen Wed Early Nurse,
Nguyen Thu Early Nurse, Stefaan Fri Early Nurse, Stefaan Sat Early Nurse,
Stefaan Sun Early Nurse (ικανοποιείται)
3. Sara Tue Late Nurse, Sara Wed Late Nurse, Sara Thu Late Nurse, Nguyen Fri Late
Nurse, Nguyen Sun Late Nurse (ικανοποιείται)
4. Stefaan Mon Night HeadNurse, Stefaan Tue Night HeadNurse, Andrea Sat Night
HeadNurse Patrick Sun Night HeadNurse (ικανοποιείται)
5. Patrick Tue Night Nurse, Patrick Wed Night Nurse, Patrick Thu Night Nurse,
Patrick Sat Night Nurse, Andrea Sun Night Nurse (ικανοποιείται)
REQUIREMENTS
Early HeadNurse (0,0) (0,0) (0,0) (0,0) (0,0) (0,0) (0,0)
Early Nurse (1,1) (1,1) (1,1) (1,1) (1,1) (1,1) (1,1)
Late HeadNurse (0,0) (1,1) (1,1) (0,0) (0,0) (0,0) (0,0)
Late Nurse (0,1) (1,1) (1,1) (1,1) (1,1) (0,1) (1,1)
Night HeadNurse (1,1) (1,1) (0,0) (0,0) (0,0) (1,1) (1,1)
Night Nurse (0,1) (1,1) (1,1) (1,1) (0,1) (1,1) (1,1)
1. Τύπος Βάρδιας Early, δεξιότητα Nurse, για όλες τις μέρες 1 βάρδια.
3. Τύπος Βάρδιας Late, δεξιότητα Nurse, κάθε μέρα εκτός Δευτέρα & Σάββατο 1
βάρδια
5. Τύπος Βάρδιας Night, δεξιότητα Nurse, όλες τις μέρες εκτός Δευτέρα &
Παρασκευή 1 βάρδια
ASSIGNMENTS = 26
Patrick Tue Late HeadNurse
Patrick Wed Late HeadNurse
Patrick Thu Late Nurse
Patrick Fri Late Nurse
Patrick Sat Night HeadNurse
Patrick Sun Night HeadNurse
Andrea Mon Night HeadNurse
Andrea Tue Night Nurse
Andrea Wed Night Nurse
Andrea Sat Early Nurse
Andrea Sun Early Nurse
Stefaan Mon Night Nurse
Stefaan Tue Night HeadNurse
Stefaan Sat Late Nurse
Stefaan Sun Late Nurse
Sara Mon Early Nurse
Sara Tue Early Nurse
Sara Wed Early Nurse
Sara Thu Early Nurse
Sara Fri Early Nurse
Nguyen Tue Late Nurse
Nguyen Wed Late Nurse
Nguyen Thu Night Nurse
Nguyen Fri Night Nurse
Nguyen Sat Night Nurse
Nguyen Sun Night Nurse
1. Sara Mon Early Nurse, Sara Tue Early Nurse, Sara Wed Early Nurse, Sara Thu
Early Nurse, Sara Fri Early Nurse, Andrea Sat Early Nurse, Andrea Sun Early
Nurse (ικανοποιείται)
3. Nguyen Tue Late Nurse, Nguyen Wed Late Nurse, Patrick Thu Late Nurse, Patrick
Fri Late Nurse, Stefaan Sun Late Nurse (ικανοποιείται)
4. Andrea Mon Night HeadNurse, Stefaan Tue Night HeadNurse, Patrick Sat Night
HeadNurse, Patrick Sun Night HeadNurse (ικανοποιείται)
5. Andrea Tue Night Nurse, Andrea Wed Night Nurse, Nguyen Thu Night Nurse,
Στο παράδειγμα μας δεν επιτρέπεται να έχουμε μετά από Late Early και μετά από
Night Early ή Late
Κοιτώνας το πλάνο των 4 εβδομάδων που παράχθηκε από την λύση βλέπουμε:
<NursesHistory>
<NurseHistory>
<Nurse>Patrick</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>Night</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>1</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>4</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>0</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Andrea</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>Early</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>3</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>3</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>0</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Stefaan</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>None</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>0</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>0</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>3</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Sara</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>Late</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>1</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>4</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>0</NumberOfConsecutiveDaysOff>
</NurseHistory>
<NurseHistory>
<Nurse>Nguyen</Nurse>
<NumberOfAssignments>0</NumberOfAssignments>
<NumberOfWorkingWeekends>0</NumberOfWorkingWeekends>
<LastAssignedShiftType>None</LastAssignedShiftType>
<NumberOfConsecutiveAssignments>0</NumberOfConsecutiveAssignments>
<NumberOfConsecutiveWorkingDays>0</NumberOfConsecutiveWorkingDays>
<NumberOfConsecutiveDaysOff>1</NumberOfConsecutiveDaysOff>
</NurseHistory>
</NursesHistory>
Επίσης παρατηρούμε ότι δεν υπάρχει καμία παραβίαση στον προγραμματισμό της πρώτης
εβδομάδας.
Άρα συνολικά δεν υπάρχει κάποια παραβίαση για τον περιορισμό H3.
Μια βάρδια μιας συγκεκριμένης δεξιότητας πρέπει απαραίτητα να συμπληρωθεί από έναν
νοσηλευτή/τρια που έχει αυτή την ικανότητα.
Βλέπουμε ότι όλοι οι νοσηλευτές έχουν την δεξιότητα HeadNurse & Nurse εκτός από
τους Sara & Nguyen που έχουν δεξιότητα μόνο Nurse αλλά από τις αναθέσεις όντως
βλέπουμε ότι δεν έχουν λάβει ανάθεση σε HeadNurse οπότε ικανοποιείται και αυτός ο
αυστηρός περιορισμός H4 όπως αναφέρει και ο Validator : Required skill
constraints: 0 .
S1. Ανεπαρκές προσωπικό για βέλτιστη κάλυψη - Insufficient staffing for optimal
coverage (βάρος 30):
Ο αριθμός των νοσηλευτών/τριων για κάθε βάρδια και για κάθε δεξιότητα πρέπει να είναι
ίσος με τη βέλτιστη απαίτηση. Κάθε νοσηλευτής/τρια που λείπει τιμωρείται ανάλογα με
το αντίστοιχο βάρος. Οι επιπλέον νοσηλευτές πάνω από τη βέλτιστη τιμή δεν
λαμβάνονται υπόψη στο κόστος.
Για κάθε βάρδια που λείπει για την βέλτιστη κάλυψη της βάρδιας – δεξιότητας υπάρχει
«ποινή» με βάρος 30.
Παρατηρούμε ότι υπάρχουν οι παρακάτω ελλείψεις για την βέλτιστη κάλυψη (σύμφωνα
με τις απαιτήσεις REQUIREMENTS από τα αρχεία week data) :
Η συνολική ποινή για τον περιορισμό S1 είναι 8 Χ 30 βάρος = 240 βάρος συνολικά
Patrick 0 0 Night 1 4 0
(4 διαδοχικές μέρες εργασίας από προηγούμενη εβδομάδα)
Andrea 0 0 Early 3 3 0
(3 διαδοχικές μέρες εργασίας από προηγούμενη εβδομάδα)
Stefaan 0 0 None 0 0 3
(0 διαδοχικές μέρες εργασίας από προηγούμενη εβδομάδα)
Sara 0 0 Late 1 4 0
(4 διαδοχικές μέρες εργασίας από προηγούμενη εβδομάδα)
Nguyen 0 0 None 0 0 1
(0 διαδοχικές μέρες εργασίας από προηγούμενη εβδομάδα)
Για τον νοσηλευτή Patrick : Έχει σύμβαση Fulltime οπότε από το αρχείο σεναρίου
(scenario file) βλέπουμε ότι η σύμβαση του ορίζει ελάχιστο αριθμό διαδοχικών βαρδιών
3 και μέγιστο αριθμό διαδοχικών βαρδιών 5
Παρατηρούμε ότι υπάρχει παραβίαση μόνο για το μέγιστο αριθμό εργαζόμενων ημερών
εργασίας (Consecutive working days) στην 3η εβδομάδα (1 έξτρα μέρα – 1 παραβίαση)
και στην 4η εβδομάδα (1 έξτρα μέρα – 1 παραβίαση). Δηλαδή «ποινή» 2 Χ 30 = 60 βάρος
Όσον αφορά τις βάρδιες, βλέπουμε το από το αρχείο σεναρίου τις ελάχιστες και μέγιστες
διαδοχικές βάρδιες :
<ShiftTypes>
<ShiftType Id="Early">
<NumberOfConsecutiveAssignments>
<Minimum>2</Minimum>
<Maximum>5</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
<ShiftType Id="Late">
<NumberOfConsecutiveAssignments>
<Minimum>2</Minimum>
<Maximum>3</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
<ShiftType Id="Night">
<NumberOfConsecutiveAssignments>
<Minimum>4</Minimum>
<Maximum>5</Maximum>
</NumberOfConsecutiveAssignments>
</ShiftType>
</ShiftTypes>
Την 1η εβδομάδα έχει από το ιστορικό 1 βάρδια Night και του ανατίθεται άλλη μία
Night σύνολο 2 αλλά το ελάχιστο είναι 4 από το <ShiftTypes> άρα έχουμε ποινή
2 Χ 15 = 30 βάρος
Την 3η εβδομάδα κάνει 6 διαδοχικές βάρδιες Night οπότε ξεπερνάει το όριο 5 κατά
1 δηλαδή η «ποινή» είναι: 15 βάρος
Την 4η εβδομάδα για τις μέγιστες διαδοχικές βάρδιες Απόγευμα παραβίαση κατά 1
(κάνει 4 βάρδιες) άρα 15 βάρος
Συνολικό βάρος για τον περιορισμό S2 για τον Patrick : 120 βάρος
Για την νοσηλεύτρια Andrea: Σύμβαση επίσης Fulltime με όριο διαδοχικών αναθέσεων
ελάχιστο – μέγιστο, 3 & 5 αντίστοιχα.
Την 2η εβδομάδα έχει 8 διαδοχικές αναθέσεις σε συνέχεια της 1ης εβδομάδας άρα
παραβίαση 3 ημέρες Χ 30 κόστος = 90 βάρος
Συνολικό βάρος για τον περιορισμό S2 για την Andrea : 105 βάρος
Την 3η εβδομάδα υπάρχει από το ιστορικό 1 βάρδια Κυριακή Early που μετά
αλλάζει σε Night οπότε παραβιάζεται το ελάχιστο όριο 2 διαδοχικών βαρδιών
Early, δηλαδή ποινή 1 Χ 15 = 15 βάρος
Για την νοσηλεύτρια Sara: Σύμβαση PartTime με όριο διαδοχικών αναθέσεων ελάχιστο
– μέγιστο, 3 & 5 αντίστοιχα.
Την 1η εβδομάδα έχει ήδη 1 βάρδια Late από την προηγούμενη εβδομάδα και στην
αρχή της 1ης εβδομάδας έχει άδεια οπότε παραβιάζεται το ελάχιστο όριο 2 των
διαδοχικών βαρδιών για Late. Άρα ποινή 1 Χ 15 = 15 βάρος
Την 2η εβδομάδα έχει 1 βάρδια Late (την Πέμπτη - Thu) οπότε παραβιάζεται το
ελάχιστο όριο 2 των διαδοχικών βαρδιών για Late. Άρα ποινή 1 Χ 15 = 15 βάρος
Την 3η εβδομάδα έχει 3 διαδοχικές βάρδιες Night από το ιστορικό που μετά
υπάρχει ημέρα άδειας οπότε παραβιάζεται κατά 1 το ελάχιστο όριο 4 των
διαδοχικών βαρδιών για Night. Άρα ποινή 1 Χ 15 = 15 βάρος
Η συνολική ποινή για τον περιορισμό S2 για όλους/ες είναι : 465 βάρος
Ας δούμε ανά νοσηλευτή τι ισχύει από το πλάνο αναθέσεων και το αρχείο ιστορικού
καθώς και σύμφωνα με την σύμβαση τους που είναι τα όρια ελάχιστο και μέγιστο των
διαδοχικών ημερών άδειας :
Για τον νοσηλευτή Patrick: Σύμβαση Fulltime με ελάχιστο όριο διαδοχικών ημερών
άδειας 2 και μέγιστο όριο 3 ημέρες άδειας.
Την 1η εβδομάδα έχει 1 ημέρα άδειας ενώ το ελάχιστο όριο είναι 2 άρα ποινή 1 Χ
30 = 30 βάρος
Την 3η εβδομάδα έχει 1 ημέρα άδειας (Δευτέρα) ενώ το ελάχιστο όριο είναι 2 άρα
ποινή 1 Χ 30 = 30 βάρος
Την 4η εβδομάδα έχει 1 ημέρα άδειας (Δευτέρα) ενώ το ελάχιστο όριο είναι 2 άρα
ποινή 1 Χ 30 = 30 βάρος
Για την νοσηλεύτρια Andrea: Σύμβαση Fulltime με ελάχιστο όριο διαδοχικών ημερών
άδειας 2 και μέγιστο όριο 3 ημέρες άδειας.
Την 2η εβδομάδα έχει 1 ημέρα άδειας (το Σάββατο) ενώ το ελάχιστο όριο είναι 2
άρα ποινή
1 Χ 30 = 30 βάρος
Για τον νοσηλευτή Stefaan: Σύμβαση PartTime με ελάχιστο όριο διαδοχικών ημερών
άδειας 3 και μέγιστο όριο 5 ημέρες άδειας.
Την 2η εβδομάδα έχει 2 ημέρα άδειας (Παρασκευή και Σάββατο) ενώ το ελάχιστο
όριο είναι 3 διαδοχικές ημέρες άδειας άρα ποινή 1 Χ 30 = 30 βάρος
Την 3η εβδομάδα έχει 2 ημέρα άδειας (Τετάρτη και Πέμπτη) ενώ το ελάχιστο όριο
είναι 3 διαδοχικές ημέρες άδειας άρα ποινή 1 Χ 30 = 30 βάρος
Για την νοσηλεύτρια Sara: Σύμβαση PartTime με ελάχιστο όριο διαδοχικών ημερών
άδειας 3 και μέγιστο όριο 5 ημέρες άδειας.
Για τον νοσηλευτή Nguyen: Σύμβαση Fulltime με ελάχιστο όριο διαδοχικών ημερών
άδειας 2 και μέγιστο όριο 3 διαδοχικές ημέρες άδειας.
Την 1η εβδομάδα έχει 1 ημέρα άδειας από ιστορικό και την Δευτέρα της 1ης
εβδομάδας εργάζεται άρα αφού το ελάχιστο όριο είναι 2 έχουμε ποινή 1 Χ 30 = 30
βάρος
Επίσης την 1η εβδομάδα έχει 1 ημέρα άδειας (την Παρασκευή) άρα αφού το
ελάχιστο όριο είναι 2 διαδοχικές ημέρες άδειας έχουμε ποινή 1 Χ 30 = 30 βάρος
Την 2η εβδομάδα έχει 1 ημέρα άδειας (την Τετάρτη) ενώ το ελάχιστο όριο είναι 2
διαδοχικές ημέρες άδειας άρα ποινή 1 Χ 30 = 30 βάρος
Την 3η εβδομάδα έχει 1 ημέρα άδειας (την Δευτέρα) ενώ το ελάχιστο όριο είναι 2
διαδοχικές ημέρες άδειας άρα ποινή 1 Χ 30 = 30 βάρος
Την 4η εβδομάδα έχει 1 ημέρα άδειας (την Δευτέρα) ενώ το ελάχιστο όριο είναι 2
διαδοχικές ημέρες άδειας άρα ποινή 1 Χ 30 = 30 βάρος
Συνολικό βάρος για τον περιορισμό S3 για τον Nguyen: 150 βάρος
Υπάρχει συμφωνία και με τον Validator όπου : Non working days constraints:
330
SHIFT_OFF_REQUESTS = 5
Andrea Any Tue
Stefaan Any Wed
Nguyen Any Fri
Nguyen Any Sat
Sara Late Sat
Οι παραβιάσεις είναι:
SHIFT_OFF_REQUESTS = 4
Nguyen Late Tue
Andrea Any Wed
Sara Early Thu
Sara Night Thu
Οι παραβιάσεις είναι:
SHIFT_OFF_REQUESTS = 2
Andrea Late Fri
Andrea Any Sat
Οι παραβιάσεις είναι:
Οι παραβιάσεις είναι:
Κάθε νοσηλευτής/τρια που έχει ορισμένη την τιμή πλήρους Σαββατοκύριακου σε ΝΑΙ
(True), πρέπει να εργάζεται είτε και τις 2 ήμερες του σαββατοκύριακου είτε καμία. Εάν
εργάζεται μόνο μία από τις δύο ημέρες Σάββατο ή Κυριακή αυτό τιμωρείται με το
αντίστοιχο βάρος.
Τα όρια ορίζονται στο αρχείο σεναρίου στο τμήμα Contracts. Από ότι βλέπουμε και στις
δύο συμβάσεις FullTime & PartTime η τιμή Complete Weekend έχει οριστεί σε 1 άρα
υπάρχει ποινή αν κάποιος/α δεν εργάζεται πλήρες σαββατοκύριακο.
Για κάθε νοσηλευτή/τρια ο συνολικός αριθμός των αναθέσεων (εργάσιμες ημέρες) πρέπει
να περιλαμβάνεται στα όρια (ελάχιστο και μέγιστο) που επιβάλλει η σύμβασή του/της. Η
διαφορά (προς κάθε κατεύθυνση), πολλαπλασιασμένη με το βάρος της, προστίθεται στον
πίνακα βαρών.
Patrick : Η σύμβαση του είναι FullTime άρα έχει ελάχιστο όριο 15 και μέγιστο
όριο 22 αναθέσεις. Βλέπουμε στο συνολικό πρόγραμμα ότι έχει 23 αναθέσεις.
Υπάρχει δηλαδή 1 παραπάνω ανάθεση με ποινή 1 Χ 20 = 20 βάρος
Andrea : Η σύμβαση της είναι FullTime άρα έχει ελάχιστο όριο 15 και μέγιστο
όριο 22 αναθέσεις. Βλέπουμε στο συνολικό πρόγραμμα ότι έχει 21 αναθέσεις. Άρα
δεν υπάρχει παραβίαση.
Stefaan : Η σύμβαση του είναι PartTime άρα έχει ελάχιστο όριο 7 και μέγιστο
όριο 11 αναθέσεις. Βλέπουμε στο συνολικό πρόγραμμα ότι έχει 18 αναθέσεις.
Υπάρχουν δηλαδή 7 παραπάνω αναθέσεις με ποινή 7 Χ 20 = 140 βάρος
Sara : Η σύμβαση της είναι PartTime άρα έχει ελάχιστο όριο 7 και μέγιστο όριο
11 αναθέσεις. Βλέπουμε στο συνολικό πρόγραμμα ότι έχει 17 αναθέσεις.
Υπάρχουν δηλαδή 6 παραπάνω αναθέσεις με ποινή 6 Χ 20 = 120 βάρος
Nguyen : Η σύμβαση του είναι FullTime άρα έχει ελάχιστο όριο 15 και μέγιστο
όριο 22 αναθέσεις. Βλέπουμε στο συνολικό πρόγραμμα ότι έχει 24 αναθέσεις.
Υπάρχουν δηλαδή 2 παραπάνω αναθέσεις με ποινή 2 Χ 20 = 40 βάρος
Από το αρχείο σεναρίου βλέπουμε ότι και η σύμβαση FullTime και η σύμβαση PartTime
ορίζουν μέγιστα εργαζόμενα σαββατοκύριακα στην περίοδο προγραμματισμού τα 3.
Προσοχή στο ότι στα αρχεία εισόδου με μορφή text ο περιορισμός διαφέρει και είναι στα
2 μέγιστα εργαζόμενα σαββατοκύριακα οπότε αν τρέξουμε τον Validator με τα text files
βγάζει διαφορετική συνολική ποινή 1695!
Οι περισσότερες από αυτές έχουν περιγραφεί στο Κεφάλαιο 4, άλλες είναι βοηθητικές για
τις κύριες ενώ υπάρχουν και κάποιες που χρησιμοποιούνται για λόγους debugging
(print_final_ratio_matrix_days)
που έρχεται με BSD License και είναι ένα Cross Platform Java Application για παραγωγή
Windows native εκτελέσιμων.
Πίνακας Δ.1 Τρόπος εκτέλεσης του επιλυτή σε γραμμή εντολών (command prompt)
Ο χρήστης δηλαδή επιλέγει το αρχείο ιστορικού, το αρχείο σεναρίου, τον αριθμό των
εβδομάδων (4 ή 8 σύμφωνα με τους όρους του διαγωνισμού), τα αρχεία δεδομένων
εβδομάδας, την θέση των Simulator.jar & Solver.exe καθώς και τους φακέλους εξόδου και
εκτέλεσης του επιλυτή.
Label
TextBox
RadioButton
ListBox
Button
OpenFileDialog
FolderBrowserDialog
Προσοχή! Και εδώ ισχύει ότι δεν πρέπει να υπάρχουν κενά στον φάκελο από τον οποίο
προέρχονται τα αρχεία εισόδου αλλιώς ο Simulator αποτυγχάνει (προφανώς κάποιο bug
του εργαλείου Simulator).
Η αρχική οθόνη της μικρής αυτής εφαρμογής είναι όπως φαίνεται στην εικόνα Δ.1 :
Εικόνα Δ.1 : Η αρχική οθόνη της γραφικής εφαρμογής εκτέλεσης του επιλυτή (SolverExecution.exe)
Αφού έχουμε επιλέξει τα αρχεία ιστορικού και σεναρίου και πατήσουμε το κουμπί
«Επιλογή αρχείων» δίπλα στο Label “Week Data Files” μπορούμε να επιλέξουμε ένα
αρχείο δεδομένων ή παραπάνω (έχοντας πατημένο το πλήκτρο Ctrl ή και το πλήκτρο Shift
για επιλογή πολλών). Επίσης τότε εμφανίζεται ένα πλαίσιο (ListBox) με το τι έχουμε
επιλέξει καθώς και κάποια κουμπιά δεξιά με τα οποία μπορούμε να αλλάξουμε την σειρά
με την οποία θα εισαχθούν τα αρχεία δεδομένων. Το πιο πάνω στην λίστα θα εισαχθεί
στην πρώτη εβδομάδα 0, το δεύτερο από πάνω στην εβδομάδα 1 κλπ. Μπορούμε επίσης
να κάνουμε διαγραφή ενός αρχείου πατώντας το κουμπί «Διαγραφή» ή να τα
εκκαθαρίσουμε όλα πατώντας το κουμπί “Clear All”. Πατώντας το κουμπί «Πάνω» το
αρχείο μεταφέρεται μια θέση πάνω ενώ πατώντας αντίστοιχα το κουμπί «Κάτω» το αρχείο
μεταφέρεται μια θέση κάτω. Μπορούμε να επιλέξουμε ένα αρχείο δεδομένων εβδομάδας
(week data file) δύο ή παραπάνω φορές ώστε να χρησιμοποιείται παραπάνω από μία φορά
στην λύση. .
Η οθόνη στην φάση αυτή έχει ως εξής αφού έχουμε επιλέξει τα αρχεία εισόδου όπως
φαίνεται στην εικόνα Δ.3 :
Εικόνα Δ.3 : Η οθόνη της εφαρμογής μετά την επιλογή των αρχείων εισόδου (για 4 εβδομάδες)
Στο επόμενο βήμα επιλέγουμε την θέση του αρχείου Simulator.jar και την θέση του
επιλυτή Solver.exe επιλέγοντας τα αντίστοιχα αρχεία στην θέση που βρίσκονται.
Ακολούθως επιλέγουμε την θέση του φακέλου εξόδου (αυτόματα δίνει τον αντίστοιχο
φάκελο και στον Φάκελο εκτέλεσης) ή αν θέλουμε έναν ξεχωριστό φάκελο για εκείνον.
Στην Εικόνα Δ.4 φαίνεται η τελική οθόνη της εφαρμογής μετά την επιλογή των αρχείων
εισόδου (για 4 εβδομάδες) και των υπόλοιπων επιλογών :
Εικόνα Δ.4 : Η τελική οθόνη της εφαρμογής μετά την επιλογή των αρχείων εισόδου (για 4 εβδομάδες)
και των υπόλοιπων επιλογών
Στο τελευταίο βήμα πριν την εκτέλεση του επιλυτή πρέπει να πατήσουμε το κουμπί
“ΕΚΤΕΛΕΣΗ ΕΠΙΛΥΤΗ (SOLVER)» όπως φαίνεται στην Εικόνα Δ.5), προκειμένου να
γίνει η εκτέλεση του επιλυτή με τα επιλεγμένα αρχεία εισόδου και τις υπόλοιπες επιλογές.
Όταν γίνει η εκτέλεση του επιλυτή όπως φαίνεται στην Εικόνα Δ.6 εμφανίζεται ένα
παράθυρο γραμμής εντολών (command prompt) όπου εμφανίζεται η έξοδος της εκτέλεσης
του καθώς και στο τέλος το αποτέλεσμα της εκτέλεσης του επικυρωτή (Validator) που
καλείται αυτόματα από τον προσομοιωτή (Simulator).