You are on page 1of 143

ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ &

ΤΕΧΝΟΛΟΓΙΑΣ

Μεταπτυχιακή Εξειδίκευση στα Πληροφοριακά


Συστήματα

Διπλωματική Εργασία

Κατασκευή Προγράμματος Βαρδιών


Νοσηλευτικού Προσωπικού
Mε χρήση αλγόριθμων βελτιστοποίησης με βάση τα δεδομένα του
Διεθνούς Διαγωνισμού The Second International Nurse Rostering
Competition INRC-II (2014-2015)

Καραμανωλάκης Νικόλαος

Επιβλέπων καθηγητής: Δρ. Ιωάννης Ρεφανίδης

Πάτρα, Ιούνιος 2022


Η παρούσα εργασία αποτελεί πνευματική ιδιοκτησία του φοιτητή («συγγραφέας/δημιουργός») που
την εκπόνησε. Στο πλαίσιο της πολιτικής ανοικτής πρόσβασης ο συγγραφέας/δημιουργός εκχωρεί
στο ΕΑΠ, μη αποκλειστική άδεια χρήσης του δικαιώματος αναπαραγωγής, προσαρμογής,
δημόσιου δανεισμού, παρουσίασης στο κοινό και ψηφιακής διάχυσής τους διεθνώς, σε
ηλεκτρονική μορφή και σε οποιοδήποτε μέσο, για διδακτικούς και ερευνητικούς σκοπούς, άνευ
ανταλλάγματος και για όλο το χρόνο διάρκειας των δικαιωμάτων πνευματικής ιδιοκτησίας. Η
ανοικτή πρόσβαση στο πλήρες κείμενο για μελέτη και ανάγνωση δεν σημαίνει καθ’ οιονδήποτε
τρόπο παραχώρηση δικαιωμάτων διανοητικής ιδιοκτησίας του συγγραφέα/δημιουργού ούτε
επιτρέπει την αναπαραγωγή, αναδημοσίευση, αντιγραφή, αποθήκευση, πώληση, εμπορική χρήση,
μετάδοση, διανομή, έκδοση, εκτέλεση, «μεταφόρτωση» (downloading), «ανάρτηση» (uploading),
μετάφραση, τροποποίηση με οποιονδήποτε τρόπο, τμηματικά ή περιληπτικά της εργασίας, χωρίς
τη ρητή προηγούμενη έγγραφη συναίνεση του συγγραφέα/δημιουργού. Ο συγγραφέας/δημιουργός
διατηρεί το σύνολο των ηθικών και περιουσιακών του δικαιωμάτων.
Κατασκευή Προγράμματος Βαρδιών Νοσηλευτικού
Προσωπικού
Mε χρήση αλγόριθμων βελτιστοποίησης με βάση τα δεδομένα του
Διεθνούς Διαγωνισμού The Second International Nurse Rostering
Competition INRC-II (2014-2015)

Καραμανωλάκης Νικόλαος

Επιτροπή Επίβλεψης Διπλωματικής Εργασίας

Επιβλέπων Καθηγητής: Β’ αξιολογητής:


Δρ. Ιωάννης Ρεφανίδης Δρ. Γρηγόριος Μπεληγιάννης
Καθηγητής Καθηγητής
Πανεπιστημίου Μακεδονίας Πανεπιστημίου Πατρών

Πάτρα, Ιούνιος 2022


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Ευχαριστίες

Θα ήθελα καταρχήν να ευχαριστήσω τον επιβλέποντα καθηγητή μου κ. Ιωάννη Ρεφανίδη


για την ανάθεση του θέματος και την εμπιστοσύνη του στο πρόσωπo μου καθώς και την
υποστήριξη του καθ’ όλη την διάρκεια της εκπόνησης της. Ακολούθως την οικογένεια
μου (Ρένα – Φαίδρα – Μανώλη) που άντεξαν όλα αυτά τα χρόνια του μεταπτυχιακού με
υπομονή τα διαβάσματα μου και μου άφησαν προσωπικό χρόνο για να αφιερώσω στις
υποχρεώσεις του μεταπτυχιακού και της διπλωματικής εργασίας ειδικότερα. Επίσης τους
συνεργάτες μου από το εργασιακό περιβάλλον (7η Υ.ΠΕ. Κρήτης) που με στήριξαν
ψυχολογικά και επίσης βοήθησαν με διάθεση χρόνου. Τέλος πρέπει να κάνω μια αναφορά
στην συνάδελφο Θεώνη Καρκαλούσου που ήταν αυτή που ουσιαστικά με προέτρεψε να
ξεκινήσω το μεταπτυχιακό και ξεκίνησε έτσι αυτό το ταξίδι.

Αφιέρωση

Αφιερωμένη τέλος η εργασία αυτή στους γονείς μου, που μου έδωσαν τα εφόδια για πίστη
στην εκπαίδευση και μάθηση και ειδικά στον πατέρα μου που δεν είναι πλέον μαζί μας.
Μας λείπεις…

iv
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Περίληψη

Θέμα αυτής της διπλωματικής εργασίας αποτελεί η σχεδίαση και κατασκευή αλγόριθμου
για την επίλυση του προβλήματος της «Κατασκευής Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού». Οι περιορισμοί και τα δεδομένα εισόδου για το πρόβλημα
προήλθαν από τον Δεύτερο Διεθνή Διαγωνισμό Κατασκευής Προγράμματος
Νοσηλευτικών Βαρδιών (INRC-II) ο οποίος διεξήχθη το 2014-2015. Σε αυτόν, σε
αντίθεση με τον πρώτο Διεθνή Διαγωνισμό (INRC-I 2010) εισάγεται η έννοια των
σταδίων (εβδομάδων) και απαιτείται να δοθεί λύση σε διαδοχικές εβδομάδες του ορίζοντα
σχεδιασμού (multi-stage formulation). Γίνεται δηλαδή επίλυση του προβλήματος κάθε
εβδομάδας και τα δεδομένα εξόδου κάθε εβδομάδας μεταφέρονται στην επόμενη
εβδομάδα. Το πρόβλημα συνίσταται στην κατανομή νοσηλευτών/τριών σε βάρδιες -
Shifts (π.χ. Πρωί – Απόγευμα – Νύχτα) και δεξιότητες – Skills (π.χ. Προϊσταμένη,
Νοσηλεύτρια, Εκπαιδευόμενη) με συγκεκριμένες απαιτήσεις ανά εβδομάδα. Υπάρχουν οι
αυστηροί περιορισμοί (hard constraints) που πρέπει οπωσδήποτε να ικανοποιούνται για να
είναι έγκυρη η λύση καθώς και οι χαλαροί περιορισμοί (soft constraints) για τους οποίου
υπάρχει ποινή για κάθε παραβίαση, και έτσι βγαίνει το αποτέλεσμα της αντικειμενικής
συνάρτησης. Είναι ένα δύσκολο πρόβλημα συνδυαστικής βελτιστοποίησης υπο
περιορισμούς που είναι πολύ δύσκολο υπολογιστικά να βρεθεί σε αποδεκτό χρόνο η
βέλτιστη λύση με έναν ντετερμινιστικό αλγόριθμο. Για την επίλυση του προβλήματος
υλοποιήθηκε αλγόριθμος σε γλώσσα προγραμματισμού Java σε δύο (2) στάδια, ώστε από
μία αρχική καλή λύση που βρίσκεται να πηγαίνουμε βήμα βήμα με διάφορες μεθόδους σε
μια βελτιωμένη σχεδόν βέλτιστη λύση. Έγινε σύγκριση των δεδομένων εξόδου με τα
δεδομένα που είχαν κατατεθεί στον διαγωνισμό και υπάρχει ένα ικανοποιητικό
αποτέλεσμα.

Λέξεις – Κλειδιά

Αλγόριθμοι βελτιστοποίησης, Ωρολόγιο Πρόγραμμα, Νοσηλευτικό Προσωπικό,


Κατανομή βαρδιών, Χρονοπρογραμματισμός, INRC-II

v
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Construction of Nurse Rostering Schedules


Using optimization algorithms with the data of The Second International
Nurse Rostering Competition INRC-II (2014-2015)

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

Optimization Algorithms, Nursing Staff, Nurse Rostering, Scheduling, INRC-II

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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

4.3 Φάση 1η Αλγορίθμου – Εύρεση αρχικής έγκυρης λύσης............................................. 54


4.4 Φάση 2η Αλγορίθμου – Βελτίωση της αρχικής λύσης ................................................. 56
5. Αποτελέσματα αλγορίθμου και σύγκριση με συμμετέχοντες διαγωνισμού .................. 60
5.1 Τρόπος αξιολόγησης του διαγωνισμού INRC-II ......................................................... 60
5.1.1 Όροι (rules) του διαγωνισμού ................................................................................... 60
5.1.2 Τρόπος βαθμολόγησης και κατάταξης στον διαγωνισμό.......................................... 61
5.2 Τελικοί συμμετέχοντες (finalists) στον διαγωνισμό .................................................... 63
5.3 Παραδείγματα περίπτωσεων λύσης τελικών συμμετοχόντων διαγωνισμού................ 65
5.3.1 Περίπτωση λύσης NurseOptimizers (1η σε κατάταξη)............................................. 65
5.3.2 Περίπτωση λύσης Polytechnique Montreal (2η σε κατάταξη) ................................. 67
5.3.3 Περίπτωση λύσης SSHH - Sequence-based Selection Hyper-Heuristic (3η σε
κατάταξη) ............................................................................................................................ 69
5.3.4 Περίπτωση λύσης ORTEC (5η σε κατάταξη) ........................................................... 72
5.5 Συμπεράσματα – Βελτιώσεις διπλωματικής εργασίας ................................................. 78
Βιβλιογραφικές Αναφορές .................................................................................................. 79
Παράρτημα Α: Μορφές αρχείων εισόδου (File formats) ................................................... 82
A.1 Αρχείο Σεναρίου (Scenario file).......................................................................... 82
Α.2 Αρχείο Δεδομένων εβδομάδας (Week data file) ................................................. 85
Α.3 Αρχείο Ιστορικού (History file) .......................................................................... 86
Α.4 Αρχείο Λύσης (Solution file) .............................................................................. 87
Παράρτημα Β: Αποτίμηση Περιορισμών (Constraint evaluation) ..................................... 89
Β.1 Περιορισμός Αριθμού διαδοχικών εργασιών – Consecutive assignments (S2) .......... 91
Β.1.2 Ελάχιστος αριθμός διαδοχικών εργάσιμων ημερών (όριο από το Contracts) .......... 93
Β.1.3 Ελάχιστος και μέγιστος αριθμός διαδοχικών εργασιών στην ίδια βάρδια (όριο από
το ShiftTypes) ..................................................................................................................... 94
B.2 Περιορισμός Αριθμού διαδοχικών ημερών άδειας – Consecutive days off
(περιορισμός S3 - όριο από το Contracts) ........................................................................... 94
B.2.1 Μέγιστος αριθμός συνεχόμενων ημερών άδειας ....................................................... 94
B.2.2 Ελάχιστος αριθμός συνεχόμενων ημερών άδειας ..................................................... 95
Β.3 Απαγορευμένες διαδοχές τύπου βάρδιας - Forbidden shift type Successions
(περιορισμός H3)................................................................................................................. 96
Παράρτημα Γ: Παραδείγμα εφαρμογής – αξιολόγησης περιορισμών ............................... 97
Γ.1 Αρχείο σεναρίου (Scenario file) .................................................................................. 97
Γ.2 Αρχείο ιστορικού για την πρώτη εβδομάδα 0 (History file)...................................... 101
Γ.3 Τα αρχεία δεδομένων εβδομάδας (Week Data files) ................................................. 102
Γ.4 Αξιολόγηση περιορισμών .......................................................................................... 104
Γ.4.1 Αξιολόγηση αυστηρών (hard) περιορισμών ........................................................... 104
Γ.4.2 Αξιολόγηση χαλαρών (soft) περιορισμών .............................................................. 115
Παράρτημα Δ: Επεξήγηση των αρχείων κώδικα και της χρήσης–εκτέλεσης του επιλυτή.
........................................................................................................................................... 129
Δ.1 Περιγραφή των αρχείων κώδικα ............................................................................... 129
Δ.2 Τρόπος εκτέλεσης του επιλυτή της Διπλωματικής Εργασίας σε γραμμή εντολών
(command prompt) ............................................................................................................ 136
Δ.3 Τρόπος εκτέλεσης του επιλυτή της Διπλωματικής Εργασίας σε γραφικό περιβάλλον
........................................................................................................................................... 137

viii
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Κατάλογος Εικόνων / Σχημάτων

Σχήμα 3.1 : Η συνολική διαδικασία επίλυσης / προσομοίωσης (για 4 εβδομάδες) .......... 38


Σχήμα 3.2 : Η συνολική διαδικασία επαλήθευσης (για 4 εβδομάδες) ............................. 39
Εικόνα 5.1 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την
περίπτωση 30 νοσηλευτριών και 4 εβδομάδων .................................................................. 76
Εικόνα 5.2 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την
περίπτωση 50 νοσηλευτριών και 4 εβδομάδων .................................................................. 76
Εικόνα 5.3 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την
περίπτωση 50 νοσηλευτριών και 8 εβδομάδων .................................................................. 77
Εικόνα 5.4 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την
περίπτωση 100 νοσηλευτριών και 4 εβδομάδων ................................................................ 77
Εικόνα Δ.1 : Η αρχική οθόνη της γραφικής εφαρμογής εκτέλεσης του επιλυτή
(SolverExecution.exe) ....................................................................................................... 138
Εικόνα Δ.2 : Επιλογή αρχείου ιστορικού (History File) ................................................. 139
Εικόνα Δ.3 : Η οθόνη της εφαρμογής μετά την επιλογή των αρχείων εισόδου (για 4
εβδομάδες) ........................................................................................................................ 140
Εικόνα Δ.4 : Η τελική οθόνη της εφαρμογής μετά την επιλογή των αρχείων εισόδου (για
4 εβδομάδες) και των υπόλοιπων επιλογών ...................................................................... 141
Εικόνα Δ.5 : Το κουμπί εκτέλεσης του επιλυτή (Solver.exe) ......................................... 142
Εικόνα Δ.6 : Το παράθυρο εκτέλεσης και αποτελεσμάτων του επιλυτή (Solver.exe) ... 142

ix
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Κατάλογος Πινάκων

Πίνακας 2.1 Αλγόριθμος Μαθηματικού Προγραμματισμού .............................................. 22


Πίνακας 3.1 : Συνολικός πίνακας βάρους – ποινής για κάθε χαλαρό περιορισμό (soft
constraint) ............................................................................................................................ 42
Πίνακας 3.2 Τρόπος κλήσης του προσομοιωτή (Simulator) σε γραμμή εντολών .............. 45
Πίνακας 3.3 Τρόπος κλήσης του επιλυτή (Solver) σε γραμμή εντολών ............................. 46
Πίνακας 3.4 Παράδειγμα κλήσης του προσομοιωτή (Simulator) σε γραμμή εντολών ...... 47
Πίνακας 3.5 Παραγωγή γραμμών εντολών από προσομοιωτή (Simulator)........................ 47
Πίνακας 3.6 Τρόπος κλήσης του επικυρωτή (Validator) σε γραμμή εντολών ................... 48
Πίνακας 3.7 Παράδειγμα κλήσης του επικυρωτή (Validator) σε γραμμή εντολών ............ 48
Πίνακας 3.8 Έξοδος κλήσης του επικυρωτή (Validator) για το παράδειγμα του Πίνακα
3.7 ........................................................................................................................................ 49
Πίνακας 3.9 Έξοδος κλήσης του εργαλείου σύγκρισης (Benchmark)............................... 50
Πίνακας 5.1: Παράδειγμα βαθμολογιών των λύσεων που υποβλήθηκαν .......................... 62
Πίνακας 5.2: Αντιστοίχηση σειράς κατάταξης λύσεων για το παράδειγμα πίνακα 5.1...... 62
Πίνακας 5.3: Πίνακας μέσων όρων κατάταξης ................................................................... 63
Πίνακας 5.4: Πίνακας χαρακτηριστικών τελευταίων και κρυφών περιπτώσεων (instances)
............................................................................................................................................. 64
Πίνακας 5.5: Σύγκριση αποτελεσμάτων αλγόριθμου σε σχέση με υποβληθείσες
συμμετοχές (Submitted Results) στον Διεθνή Διαγωνισμό INRC-II.................................. 75
Πίνακας B.1: Αξιολόγηση του περιορισμού μέγιστου αριθμού διαδοχικών εργάσιμων
ημερών στην αρχή ενός σταδίου (εβδομάδας). ................................................................... 91
Πίνακας B.2: Αξιολόγηση του περιορισμού μέγιστου αριθμού διαδοχικών εργάσιμων
ημερών στην αρχή ενός σταδίου για διαφορετικές τιμές του c........................................... 92
Πίνακας Β.3: Αξιολόγηση του περιορισμού μέγιστου αριθμού διαδοχικών εργάσιμων
ημερών στο τέλος ενός σταδίου - εβδομάδας. .................................................................... 92
Πίνακας Β.4: Αξιολόγηση του περιορισμού ελάχιστου αριθμού διαδοχικών εργάσιμων
ημερών στην αρχή ενός σταδίου με όριο 3 ......................................................................... 93
Πίνακας Β.5: Αξιολόγηση του περιορισμού ελάχιστου αριθμού διαδοχικών εργάσιμων
ημερών για δύο σειρές εργασιών (με όριο το ελάχιστο 3). ................................................. 93
Πίνακας Β.6 : Αξιολόγηση του μέγιστου αριθμού διαδοχικών ημερών άδειας στην αρχή
ενός σταδίου – εβδομάδας για διαφορετικές τιμές του c (που δείχνει το άθροισμα των
διαδοχικών ημερών άδειας από το προηγούμενο στάδιο). ................................................. 95
Πίνακας Β.7 : Αξιολόγηση του περιορισμού του μέγιστου αριθμού διαδοχικών ημερών
άδειας στο τέλος ενός σταδίου. ........................................................................................... 95
Πίνακας Β.8: Αξιολόγηση του περιορισμού ελάχιστου αριθμού διαδοχικών ημερών άδειας
στην αρχή ενός σταδίου για διαφορετικές τιμές του c. ....................................................... 95
Πίνακας Β.9: Αξιολόγηση της απαγορευμένης διαδοχής τύπου βάρδιας ........................... 96
Πίνακας Δ.1 Τρόπος εκτέλεσης του επιλυτή σε γραμμή εντολών (command prompt).... 137

x
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Συντομογραφίες & Ακρωνύμια

NRP Nurse Rostering Problem


NRS Nurse Rostering Schedule
NSP Nurse Scheduling Problem
INRC-I First International Nurse Rostering Competition
INRC-II Second International Nurse Rostering Competition
XML eXtensible Markup Language
JAXB Java Architecture for XML Binding
DOM Document Object Model
ACO Ant Colony Optimization
GA Genetic Algorithm
VNS Variable Neighborhood Search
MILP Mixed Integer Linear Programming
ILP Integer Linear Programming
IP Integer Program
LR Linear Relaxation
SSPRC Shortest Path Problem with Resource Constraints
ALNS Adaptive Large Neighborhood Search
SSHH Sequence-based Selection Hyper-Heuristic

xi
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

1. Εισαγωγή

1.1 Το πρόβλημα της κατανομής νοσηλευτικών βαρδιών


Η κατασκευή προγράμματος βαρδιών νοσηλευτικού προσωπικού η οποία στα αγγλικά
αναφέρεται ως Nurse Scheduling Problem (NSP) ή Nurse Rostering Problem (NRP) είναι
ένα πολύ σημαντικό πρόβλημα στη διαχείριση της υγειονομικής περίθαλψης. Σχετικά
άρθρα χρονολογούνται από τη δεκαετία του ’70, αλλά έχει τραβήξει το ενδιαφέρον ειδικά
τα τελευταία 15 έτη. O προγραμματισμός της κατανομής των εργαζομένων σε
νοσηλευτικά ιδρύματα είναι ιδιαίτερα δύσκολος λόγω των διαφορετικών αναγκών του
προσωπικού σε διαφορετικές ημέρες και βάρδιες. Σε αντίθεση με πολλούς άλλους
οργανισμούς, οι φορείς αυτοί λειτουργούν επί 24ώρου βάσεως, 365 μέρες το χρόνο.

Η κατανομή νοσηλευτικών βαρδιών επηρεάζει το προσωπικό των νοσοκομείων σε


καθημερινή βάση σε όλο τον κόσμο. Η ανάγκη για ποιοτικές λύσεις λογισμικού είναι
έντονη για διάφορους λόγους. Ειδικότερα, είναι πολύ σημαντικό να χρησιμοποιείται
αποτελεσματικά ο χρόνος και η προσπάθεια, να εξισορροπείται ομοιόμορφα ο φόρτος
εργασίας μεταξύ των εργαζομένων και να επιχειρείται η ικανοποίηση των προτιμήσεων
του προσωπικού. Μια κατανομή υψηλής ποιότητας μπορεί να οδηγήσει σε ένα πιο
ικανοποιημένο και επομένως πιο αποτελεσματικό εργατικό δυναμικό. Υπάρχει επίσης
μεγάλη εξοικονόμηση χρόνου χρησιμοποιώντας μια λύση λογισμικού αντί για
χειροκίνητες λύσεις ή λύσεις απλά με χρήση μιας σουίτας γραφείου (π.χ. Office).

Το πρόβλημα συνίσταται στην κατανομή νοσηλευτών/τριών σε βάρδιες (π.χ. Πρωί –


Απόγευμα – Νύχτα) είτε καθόλη την διάρκεια του πλάνου εργασίας είτε συγκεκριμένου
χρονικού πλάνου. Θα πρέπει να ικανοποιούνται οι κανονισμοί εργασίας των εργαζομένων,
οι στόχοι και απαιτήσεις της νοσηλευτικής μονάδας (π.χ. Νοσοκομείο, Μονάδα
Φροντίδας Ηλικιωμένων) καθώς τέλος και οι προτιμήσεις του κάθε εργαζόμενου. Πάνω
στις παραπάνω προϋποθέσεις ορίζονται περιορισμοί. Συνήθως υπάρχουν οι «Αυστηροί»
(Hard) περιορισμοί και οι «Χαλαροί» (Soft) περιορισμοί.

Οι αυστηροί περιορισμοί θα πρέπει να ικανοποιούνται όλοι ανεξαιρέτως για να γίνει


αποδεκτή η κατανομή που έχει βρεθεί. Από την άλλη οι χαλαροί περιορισμοί δεν είναι
απαραίτητο να ικανοποιούνται όλοι, αλλά υπάρχει μια ποινή (penalty) για κάθε

Διπλωματική Εργασία 12
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

παραβίαση. Το σύνολο των ποινών για όλους τους χαλαρούς περιορισμούς αποτελούν την
αντικειμενική συνάρτηση για την λύση.

Βλέπουμε λοιπόν ότι η κατασκευή προγράμματος βαρδιών νοσηλευτικού προσωπικού


είναι ένα σύνθετο πρόβλημα όπου πρέπει να βρεθεί μια όσον το δυνατόν βέλτιστη λύση η
οποία δεν θα έχει παραβίαση κάποιου αυστηρού περιορισμού και η συνολική της ποινή θα
είναι τέτοια ώστε να ικανοποιούνται οι απαιτήσεις του νοσοκομείου αλλά και των
εργαζομένων.

1.2 Σκοπός διπλωματικής εργασίας


Αρχικά έγινε μελέτη του προβλήματος του χρονοπρογραμματισμού και ειδικά της
κατανομής νοσηλευτικών βαρδιών και ακολούθως μελετήθηκαν αναλυτικά οι όροι του
Δεύτερου Διεθνή Διαγωνισμού Κατασκευής Προγράμματος Νοσηλευτικών Βαρδιών
(INRC-II). Από την ιστοσελίδα του διαγωνισμού (http://mobiz.vives.be/inrc2/) έγινε λήψη
όλων των αρχείων ώστε να υπάρχουν σε περίπτωση μη λειτουργίας της και μελετήθηκε το
αρχείο με τις προδιαγραφές («Problem Specification and Rules»). Ο σκοπός λοιπόν της
εργασίας είναι να σχεδιαστεί και υλοποιηθεί ένας αλγόριθμος που θα δίνει αποδεκτή λύση
στο πρόβλημα της κατανομής των νοσηλευτριών, άρα θα ικανοποιεί όλους τους
αυστηρούς περιορισμούς και επίσης θα είναι όσο το δυνατόν βέλτιστος όσον αφορά τις
ποινές από τους χαλαρούς περιορισμούς.

1.3 Διάρθρωση διπλωματικής εργασίας


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

Διπλωματική Εργασία 13
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

κεφάλαιο υπάρχει η παρουσίαση του αλγόριθμου που σχεδιάστηκε για την επίλυση του
προβλήματος. Στο πέμπτο κεφάλαιο υπάρχει μια παρουσίαση από κάποιες λύσεις που
βρέθηκε βιβλιογραφία για τους τελικούς συμμετέχοντες του διαγωνισμού (finalists) καθώς
και παρουσίαση των αποτελεσμάτων τους σε σύγκριση με τον δικό μου αλγόριθμο.

Τέλος, στα παραρτήματα, στο Α) υπάρχει αναλυτική παρουσίαση των αρχείων των
δεδομένων εισόδου (file formats), στο Β) υπάρχει μια ανάλυση – επεξήγηση για κάποιους
περίπλοκους χαλαρούς περιορισμούς, στο Γ) ένα πλήρες παράδειγμα για κάποια
δεδομένα εισόδου και μια λύση του πως ελέγχονται οι αυστηροί περιορισμοί και πως
υπολογίζονται οι χαλαροί περιορισμοί, τέλος στο Παράρτημα Δ) μια περιγραφή των
αρχείων του κώδικα καθώς και επεξήγηση του τρόπου εκτέλεσης του επιλυτή (Solver) σε
γραμμή εντολών (command prompt) και σε γραφικό περιβάλλον με μία φόρμα που έχει
δημιουργηθεί στα πλαίσια της διπλωματικής εργασίας.

1.4 Ορολογία διπλωματικής εργασίας


Παρακάτω φαίνονται οι βασικοί όροι που χρησιμοποιούνται από τον διαγωνισμό αλλά και
κάποιοι που χρησιμοποιούνται κατά την επίλυση του προβλήματος. Παρατίθεται και η
ορολογία στα αγγλικά που χρησιμοποιείται από τα εργαλεία του διαγωνισμού:

 Σενάριο (Scenario) : Είναι τα δεδομένα εισόδου που αφορούν τις γενικές


παραμέτρους του προβλήματος που εξετάζεται και δεν αλλάζουν ανά εβδομάδα.
Για παράδειγμα είναι η λίστα των νοσηλευτριών, των συμβάσεων εργασίας, των
απαγορευμένων διαδοχών βάρδιας κλπ. Βρίσκονται στο αρχείο σεναρίου (Scenario
file).
 Δεδομένα εβδομάδας (Week Data) : Είναι τα δεδομένα εισόδου που αφορούν τις
απαιτήσεις της κάθε εβδομάδας όσον αφορά τις απαιτήσεις σε εργασία και τις
προτιμήσεις μη εργασίας των νοσηλευτριών. Μπορούν φυσικά να είναι τα ίδια για
δύο διαφορετικές εβδομάδες. Βρίσκονται στο αρχείο δεδομένων εβδομάδας (Week
Data file).
 Ιστορικό (History) : Είναι τα δεδομένα εισόδου που μεταφέρουν τις πληροφορίες
αναθέσεων από τις προηγούμενες εβδομάδες και χρειάζονται για να υπολογιστούν
και αξιολογηθούν περιορισμοί για την τρέχουσα εβδομάδα που εξετάζεται. Για
παράδειγμα πόσες συνολικές αναθέσεις έχει η νοσηλεύτρια ή ποια ήταν η

Διπλωματική Εργασία 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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

συγκεκριμένη εβδομάδα παράγει ένα σύνολο αναθέσεων σύμφωνα με τα δεδομένα


εισόδου.
 Προσομοιωτής (Simulator) : Η Java εφαρμογή που δίνεται από την ιστοσελίδα του
διαγωνισμού και η οποία καλεί για κάθε εβδομάδα από το σύνολο του χρονικού
διαστήματος τον επιλυτή για να παράξει την λύση για τη συγκεκριμένη εβδομάδα
δίνοντας του ως παράμετρο τα αρχεία εισόδου και συγκεκριμένα το αρχείο
σεναρίου, το αρχείο δεδομένων εβδομάδας και το αρχείο ιστορικού.
 Επικυρωτής (Validator) : Η Java εφαρμογή που δίνεται επίσης από την ιστοσελίδα
του διαγωνισμού και η οποία καλείται στο τέλος της διαδικασίας του
Προσομοιωτή (για όλες τις εβδομάδες) ώστε να εξάγει κατά πόσον η λύση είναι
έγκυρη καθώς και το σύνολο των ποινών των χαλαρών περιορισμών. Μπορεί να
εκτελεστεί και μόνη της.

Διπλωματική Εργασία 16
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

2. Θεωρητικό υπόβαθρο του προβλήματος

2.1 Η έννοια του χρονοπρογραμματισμού

Γενικά η κατηγορία των προβλημάτων προγραμματισμού περιλαμβάνει μια μεγάλη


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

H κατασκευή χρονοδιαγράμματος (Scheduling) είναι η διάταξη των οντοτήτων


(άνθρωποι, εργασίες, οχήματα, διαλέξεις, εξετάσεις, συναντήσεις κ.λπ.) σε ένα μοτίβο στο
χωροχρόνο με τέτοιο τρόπο ώστε περιορισμοί να ικανοποιούνται και ορισμένοι στόχοι να
επιτυγχάνονται Η κατασκευή ενός χρονοδιαγράμματος είναι το πρόβλημα στο οποίο ο
χρόνος, ο χώρος και άλλοι (συχνά περιορισμένοι) πόροι πρέπει να ληφθούν υπόψη στη
διάταξη. Οι περιορισμοί είναι σχέσεις μεταξύ των οντοτήτων ή μεταξύ των οντοτήτων και
των προτύπων που περιορίζουν την κατασκευή του χρονοδιαγράμματος.

Η κατανομή προσωπικού (Employee rostering) μπορεί να οριστεί ως η διαδικασία


κατασκευής χρονοδιαγραμμάτων εργασιών που ικανοποιούν τις απαιτήσεις των πελατών
αξιοποιώντας το διαθέσιμο προσωπικό κάτω από τους περιορισμούς που επιβάλλονται
από την σύμβασης εργασίας του κάθε εργαζόμενου. Λόγω της εξαιρετικά μεγάλης
ύπαρξης περιορισμών στη φύση του προβλήματος τα καλά χρονοδιαγράμματα εργασίας
είναι δύσκολο να βρεθούν, ενώ τα βέλτιστα είναι συχνά ένας άπιαστος στόχος (Valouxis
et al.,2012).

Στα προβλήματα του πραγματικού κόσμου, η έκφραση των συνθηκών που κάνουν ένα
πρόγραμμα προτιμότερο από κάποιο άλλο και ενσωματώνοντας αυτές τις πληροφορίες σε
ένα αυτοματοποιημένο σύστημα, δεν είναι εύκολη υπόθεση. Επιπλέον, η συνδυαστική

Διπλωματική Εργασία 17
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

φύση αυτών των προβλημάτων συνεπάγεται την εξερεύνηση τεράστιων χώρων


αναζήτησης .

Ειδικότερα, προβλήματα χρονοπρογραμματισμού προσωπικού (timetabling) αφορούν


πολλές περιπτώσεις όπου υπάρχει ανάγκη για κατανομή προσωπικού σε χρονικά
διαστήματα (time slots). Τέτοιες συνήθεις περιπτώσεις μπορεί να είναι:

 Ωρολόγια πρόγραμματα σε πανεπιστημιακές σχολές και κατανομή φοιτητών σε


μαθήματα.
 Ωρολόγια προγράμματα σε σχολεία – κατανομή μαθητών και καθηγητών σε
τάξεις.
 Κατανομή εργαζομένων σε βάρδιες σε μεγάλες βιομηχανίες.
 Κατανομή υπαλλήλων σε δημόσιες και ιδιωτικές υπηρεσίες.

2.2 Ο χρονοπρογραμματισμός για νοσηλευτικές βάρδιες


Όσον αφορά τον όρο κατανομή βαρδιών νοσηλευτικού προσωπικού (Nurse Rostering) , ο
όρος έχει αρκετά διαφορετικά νοήματα σε όλη τη βιβλιογραφία. Ο Wren (1996)
χαρακτήρισε το rostering ως την τοποθέτηση, με την επιφύλαξη περιορισμών, των πόρων
σε θέσεις σε ένα μοτίβο. Κάποιος μπορεί να επιδιώξει να ελαχιστοποιήσει κάποιο στόχο ή
απλώς να επιτύχει μια έγκυρη κατανομή. Συχνά οι πόροι θα εναλλάσσονται μέσα στην
κατανομή. Στη βιβλιογραφία, η κατανομή νοσηλευτικών βαρδιών αναφέρεται στο
βραχυπρόθεσμο χρονοδιάγραμμα του προσωπικού (με τυπικό χρονικό ορίζοντα μερικών
εβδομάδων).

Η κατανομή βαρδιών νοσηλευτικού προσωπικού περιλαμβάνει την κατασκευή βέλτιστων


αναθέσεων βάρδιας για νοσηλευτικό προσωπικό για ένα συγκεκριμένο χρονικό διάστημα
που συνήθως είναι περίπου ένας μήνας. Το χρονοδιάγραμμα πρέπει να προβλέπει
συγκεκριμένο αριθμό προσωπικού για τους τύπους βάρδιας κάθε ημέρας, προκειμένου να
είναι έγκυρο. Ο τύπος βάρδιας είναι ο όρος που χρησιμοποιείται για την αναπαράσταση
ενός χρονικού πλαισίου για το οποίο μια νοσηλεύτρια με συγκεκριμένη δεξιότητα
απαιτείται. Επιπλέον, το πρόγραμμα θα πρέπει να αποφεύγει την εισαγωγή μοτίβων
βάρδιας που είναι δύσκολο να ακολουθηθούν και θα πρέπει να σέβεται όσο το δυνατόν
περισσότερο τη σύμβαση εργασίας κάθε εργαζόμενου. Ως σύμβαση εργασίας

Διπλωματική Εργασία 18
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

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

Είναι σύνηθες φαινόμενο να διαχωρίζονται οι περιορισμοί που αφορούν προβλήματα


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

Στην πράξη, η κατασκευή χρονοδιαγράμματος μπορεί να θεωρηθεί ως πρόβλημα


αναζήτησης για το οποίο απαιτείται να βρεθεί οποιοδήποτε εφικτό πρόγραμμα ή ως ένα
πρόβλημα βελτιστοποίησης για το οποίο αναζητείται το καλύτερο εφικτό πρόγραμμα. Η
καλύτερη λύση ορίζεται συχνά ότι είναι αυτή με τη χαμηλότερη ποινή (όσον αφορά την
παραβίαση των χαλαρών περιορισμών).

Ο προγραμματισμός κατανομής των εργαζομένων έχει αντιμετωπιστεί από τους


διευθυντές προσωπικού, τους επιχειρησιακούς ερευνητές και τους επιστήμονες
πληροφορικής για περισσότερα από 40 χρόνια. Ο προγραμματισμός του προσωπικού ενός
νοσοκομείου είναι ιδιαίτερα δύσκολος λόγω διαφορετικών αναγκών προσωπικού σε
διαφορετικές ημέρες και βάρδιες. Σε αντίθεση με πολλούς άλλους οργανισμούς, τα
νοσοκομεία και άλλα ιδρύματα υγειονομικής περίθαλψης εργάζονται όλο το
εικοσιτετράωρο, 365 ημέρες το χρόνο. Η ακανόνιστη εργασία με βάρδιες έχει αντίκτυπο
στην ευημερία και την ικανοποίηση της εργασίας των νοσηλευτών. Ο βαθμός στον οποίο
η κατανομή του προσωπικού ικανοποιεί το προσωπικό μπορεί να επηρεάσει το εργασιακό
περιβάλλον και την αποδοτικότητα του οργανισμού.

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

Διπλωματική Εργασία 19
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

καλών χρονοδιαγραμμάτων είναι μεγάλη, ειδικά στην υγειονομική περίθαλψη, όπου δεν
είναι αποδεκτό να μην υποστηρίζεται πλήρως η φροντίδα των ασθενών, οι ανάγκες και οι
απαιτήσεις του προσωπικού.

Οι αυτοματοποιημένες προσεγγίσεις έχουν σημαντικές δυνατότητες για τη βελτίωση της


διαδικασίας της κατανομής προσωπικού και της ποιότητας του. Οι μαθηματικές ή
ευρετικές προσεγγίσεις μπορούν να παράγουν εύκολα μια σειρά από λύσεις, μπορούν να
δώσουν την ποιότητα των λύσεων και μπορούν να δοκιμάσουν να κατανεμηθεί
ομοιόμορφα η εργασία μεταξύ του προσωπικού. Ένα από τα πιο σημαντικά οφέλη της
αυτοματοποίησης της κατανομής προσωπικού είναι η πολύ σημαντική εξοικονόμηση
χρόνου για το εμπλεκόμενο διοικητικό προσωπικό.

Σε νοσοκομεία συνήθως υπάρχουν δύο τρόποι όσον αφορά το διοικητικό κομμάτι της
δημιουργίας της κατανομής των νοσηλευτικών βαρδιών. Ο ένας είναι ο συγκεντρωτικός
τρόπος (Centralized Scheduling) όπου η κατανομή δημιουργείται κεντρικά για όλο το
νοσοκομείο ενώ ο δεύτερος είναι ανά κλινική (Departmental - Unit Scheduling), όπου εκεί
συνήθως οι προϊσταμένες (HeadNurses) δημιουργούν το πρόγραμμα. Ο πρώτος προσφέρει
το πλεονέκτημα της εξοικονόμησης πόρων αλλά μπορεί να οδηγήσει σε αρκετές «αδικίες»
ενώ ο δεύτερος είναι ο πιο συνηθισμένος μιας και υπάρχει καλύτερη γνώση για τα θέματα
και τις απαιτήσεις κάθε κλινικής αλλά δίνει παραπάνω φόρτο εργασίας στις προϊσταμένες.

2.3 Ιστορικό επίλυσης του προβλήματος της κατανομής νοσηλευτικών


βαρδιών
Από τη δεκαετία του 1960 έχουν δημοσιευθεί πολλές εργασίες για διάφορες πτυχές του
προβλήματος της κατανομής νοσηλευτικών βαρδιών. Προσεγγίσεις σε διάφορους
κλάδους, και μερικές φορές συνδυασμοί από αυτές έχουν προταθεί για την επίλυση του
προβλήματος. Πρώιμες προσπάθειες δημιούργησαν απλουστευμένα μοντέλα του
προβλήματος χρησιμοποιώντας το μοντέλο του μαθηματικού προγραμματισμού -
Mathematical Programming όπου χρησιμοποιείται μία αντικειμενική συνάρτηση που
βελτιστοποιείται υπό ορισμένους περιορισμούς (constraints). Αργότερα επιχειρήθηκαν
μοντέλα όπως ο Γραμμικός και Ακέραιος Προγραμματισμός – Linear and Integer
Programming (Jaumarda et al., 1998· Thornton και Sattar, 1997), τεχνικές
βελτιστοποίησης δικτύου (Millar και Kiragu, 1998) και μέθοδοι προγραμματισμού

Διπλωματική Εργασία 20
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

περιορισμών – Constraing Programming (Cheng et al., 1997). Στη δεκαετία του 1980 και
αργότερα, τεχνικές τεχνητής νοημοσύνης για το πρόβλημα της κατανομής νοσηλευτριών
(δηλωτικές προσεγγίσεις, προγραμματισμός περιορισμών, έμπειρα συστήματα)
ερευνήθηκαν με κάποια επιτυχία. Επίσης ένας αριθμός μεταευρετικών αλγορίθμων, όπως
η προσομοιωμένη ανόπτηση – «Simulated Annealing», «Tabu Search» και Εξελικτικοί
Αλγόριθμοι - Evolutionary Algorithms ήταν οι μεθόδοι επιλογής αρκετών ερευνητών στην
προσπάθειά τους να αντιμετωπίσουν το πρόβλημα (Dowsland, 1998; Burke et al., 2001a).
Συχνά, αυτές οι μέθοδοι συνδυάζονται με άλλες είτε παρόμοιες είτε όχι.

Μετέπειτα δημοσιευμένες εργασίες χρησιμοποιούν τεχνικές όπως η «Branch and Price»


(Maenhout και Vanhoucke, 2010), «Scatter Search» (Burke et al., 2010a) και υβριδικές
προσεγγίσεις (Burke et al., 2010b), ενώ η φύση πολλαπλών σκοπών του προβλήματος
διερευνάται συχνά (Burke et al., 2009). Τέλος, έχει προταθεί επίσης και η προσέγγιση
«Αναζήτηση μεταβλητής γειτονιάς» - «Variable Neighbourhood Search» που είναι ένα
μεταευρετικό πλαίσιο που εκμεταλλεύεται συστηματικά την ιδέα της αλλαγής της
γειτονιάς, τόσο στην κατάβαση σε τοπικά ελάχιστα όσο και στην απόδραση από αυτά.

Ας δούμε μερικές από τις προσεγγίσεις.

2.4 Προσεγγίσεις βελτιστοποίησης: Μαθηματικός προγραμματισμός


Οι μέθοδοι μαθηματικού προγραμματισμού είναι κατάλληλες για την εύρεση βέλτιστων
λύσεων. Ωστόσο, Ο κύριος περιορισμός τους είναι ότι απλά δεν είναι κατάλληλοι
(τουλάχιστον, από μόνοι τους) για τους τεράστιους και πολύπλοκους χώρους αναζήτησης
που αντιπροσωπεύονται από σύγχρονα προβλήματα κατανομής νοσηλευτών σε
νοσηλευτικά ιδρύματα.

Οι περισσότεροι ερευνητές περιορίζουν τις διαστάσεις του προβλήματος και λαμβάνουν


υπόψη τους ένα μικρό σύνολο από περιορισμούς στο μοντέλο τους. Αυτά τα μοντέλα
τείνουν να είναι πολύ απλά για να μεταφερθούν σε ένα σύγχρονο νοσοκομείο.

Όπως αναφέρθηκε παραπάνω, οι περισσότερες από τις μαθηματικές προσεγγίσεις


βασίζονται στη βελτιστοποίηση της τιμής μιας μοναδικής αντικειμενικής συνάρτησης.
Ωστόσο, έχουν διεξαχθεί επίσης μια σειρά από πειράματα με προγραμματισμός στόχων

Διπλωματική Εργασία 21
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

(goal programming) ή λήψης αποφάσεων πολλαπλών αντικειμένων (multi objective


decision making).

Στο πρακτικό κομμάτι κάποια βήματα ενός τέτοιου αλγόριθμου είναι (Miller et al, 1976) :

1) Εύρεση των έγκυρων προγραμμάτων για κάθε εργαζόμενο π(i)


2) Υπολογισμός του κόστους του προγράμματος κάθε εργαζόμενου
3) Επέλεξε ένα αρχικό μείγμα προγραμμάτων (ένα πρόγραμμα για
κάθε νοσηλεύτρια) και έστω BEST το κόστος του (επέλεξε το
χαμηλότερο σε κόστος για κάθε νοσηλεύτρια).
4) Θέσε i=1, K = αριθμός προγραμμάτων , k=1 και CYCLE=0
5) Δοκίμασε το k υποψήφιο πρόγραμμα, x(ik), από το μείγμα
προγραμμάτων αφαιρώντας προσωρινα το τρέχων πρόγραμμα της
νοσηλεύτριας i από το τρέχων μείγμα προγραμμάτων και
εισάγωντας το πρόγραμμα x(ik). Έστω TEST είναι το κόστος
του νέου μείγματος.
6) Αν TEST < BEST πήγαινε στο Βήμα 8
7) Θέσε k=k+1. Αν k=K+1 πήγαινε στο βήμα 9. Αλλιώς πήγαινε στο
Βήμα 5.
8) Θέσε CYCLE=0 και BEST=TEST. Εισήγαγε το πρόγραμμα x(ik) στη
θέση του τρέχοντος προγράμματος για την νοσηλεύτρια i στο
μείγμα προγραμμάτων. Τώρα το μείγμα προγραμμάτων περιέχει
την καλύτερη λύση μέχρι τώρα. Πήγαινε στο Βήμα 7.
9) Αν CYCLE=αριθμό νοσηλευτριών σταμάτα. Αλλιώς θέσε i=i+1 (Αν
i>αριθμού νοσηλευτριών θέσε i=1) και θέσε K= αριθμό των
προγραμμάτων, K=1 και CYCLE=CYCLE+1. Πήγαινε στο Βήμα 5

Πίνακας 2.1 Αλγόριθμος Μαθηματικού Προγραμματισμού

Όπως βλέπουμε βασικό μειονέκτημα είναι ότι πρέπει να βρεθούν για κάθε νοσηλεύτρια
όλα τα δυνατά προγράμματα. Επίσης ο αλγόριθμος δεν εγγυάται ότι θα βρεθεί πάντα μια
έγκυρη λύση.

Γενικά οι λύσεις μαθηματικού προγραμματισμού περιορίζονται όσον αφορά την ευκολία


έκφρασης των περιορισμών και των στόχων. Για αυτό και αυτές οι προσεγγίσεις
εφαρμόζονται πιο συχνά σε απλοποιημένες εκδόσεις του προβλήματος του πραγματικού
κόσμου ή όπου υπάρχουν λίγες επιπλοκές στο αρχικό πρόβλημα.

Διπλωματική Εργασία 22
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

2.5 Η προσέγγιση του ακέραιου γραμμικού προγραμματισμού (Integer


Linear Programming)
Ο ακέραιος προγραμματισμός είναι η κατηγορία προβλημάτων που μπορούν να
εκφραστούν ως βελτιστοποίηση μιας γραμμικής συνάρτησης που υπόκειται σε ένα σύνολο
γραμμικών περιορισμών σε ακέραιες μεταβλητές.

Στην προσέγγιση του ακέραιου γραμμικού προγραμματισμού υπάρχουν ακέραιες


μεταβλητές απόφασης (decision variables), έστω Xijk, που παίρνουν τιμές είτε 0 είτε 1 για
κάθε νοσηλεύτρια, για κάθε ημέρα και κάθε βάρδια,. Το i ορίζει την νοσηλεύτρια, το j την
ημέρα και το k την βάρδια. Η τιμή 1 σημαίνει ότι η νοσηλεύτρια i εργάζεται την βάρδια k
στην ημέρα j ενώ η τιμή 0 ότι δεν εργάζεται. Για κάθε βάρδια ορίζεται μια ποινή (penalty)
Pjk που χαρακτηρίζει την δυσκολία της βάρδιας k στην ημέρα j. Σκοπός του αλγόριθμου
είναι να μειωθεί η συνολική ποινή και πιθανά να υπάρχει μια ισορροπημένη κατανομή
ανάμεσα στις νοσηλεύτριες. Οι περιορισμοί επίσης του προβλήματος εκφράζονται με
μαθηματικούς τύπους και δημιουργούνται έτσι σχέσεις για επίλυση.

Τέτοια προβλήματα είναι NP-hard και πολλοί αλγόριθμοι έχουν προταθεί για την ακριβή
επίλυση τους. Για την κατά προσέγγιση και γρήγορη επίλυση μεγάλων περιπτώσεων
τέτοιων προβλημάτων έχουν προταθεί η τεχνική αναζήτησης «Branch and Bound», η
οποία συνήθως έχει απαγορευτικό χρόνο υπολογισμού για περιπτώσεις μεγάλων
προβλημάτων. Εφόσον το αρχικό πρόβλημα έχει λυθεί, είναι απαραίτητο η λύση να
βελτιωθεί περαιτέρω σε σχέση με τα ακάλυπτα στοιχεία του προβλήματος
χρησιμοποιώντας διάφορες προσεγγίσεις τοπικής αναζήτησης.

Η εφαρμογή μια καλής μεθόδου ακέραιου προγραμματισμού για μια συγκεκριμένη


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

Οι περισσότερες μαθηματικές προσεγγίσεις εφαρμόζουν ακριβείς μεθόδους για να βρουν


ένα έγκυρο σύνολο χρονοδιαγραμμάτων. Το πρόβλημα όμως στην πραγματικότητα είναι
τόσο περίπλοκο που σχεδόν όλες οι δημοσιεύσεις αναφέρουν ευρετικές μεθόδους οι

Διπλωματική Εργασία 23
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

οποίες χρησιμοποιούνται για να φτιάχνουν την κατανομή σε βάρδιες και να καλύπτουν


και τις απαιτήσεις σε προτιμήσεις του προσωπικού.

2.6 Γενετικοί Αλγόριθμοι (Geneting Algorithms)


Οι γενετικοί αλγόριθμοι (Genetic Algorigthms - GA) ανήκουν στις μεταευρετικές
προσεγγίσεις για την επίλυση του προβλήματος της κατανομής νοσηλευτικών βαρδιών.
Χρησιμοποιούνται συχνά για την εύρεση βέλτιστων ή σχεδόν βέλτιστων λύσεων σε
δύσκολα προβλήματα που διαφορετικά θα χρειαζόταν μεγάλος ή άπειρος χρόνος για να
λυθούν.

Ο τρόπος λειτουργίας τους είναι εμπνευσμένος από την βιολογία, την γενετική και την
φυσική επιλογή (την ιδέα της επιβίωσης του πιο ικανού), για αυτό και το όνομα τους.
Είναι ένας αλγόριθμος αναζήτησης όπου οι διάδοχες καταστάσεις παράγονται με το
συνδυασμό δύο γονικών καταστάσεων, παρά με την τροποποίηση μιας μεμονωμένης
κατάστασης. Η μέθοδος κάνει διασταύρωση μιας πιθανής λύσης με μια άλλη λύση για τη
δημιουργία νέων λύσεων.

Η διαδικασία ξεκινά με τη δημιουργία ενός τυχαίου πληθυσμού καταστάσεων που


παρομοιάζουν στα χρωμοσώματα. Κάθε κατάσταση ή άτομο, αναπαρίσταται ως μια
συμβολοσειρά σε ένα πεπερασμένο αλφάβητο - συνήθως, μια συμβολοσειρά 0 και 1. Τότε
ο γενετικός αλγόριθμος θα μετρήσει το κόστος καταλληλότητας κάθε
χρωμοσώματος/λύσης στον πληθυσμό. Μετά από αυτό θα επιλεγούν δύο «πιο ικανά»
χρωμοσώματα για να διασταυρωθούν και να παράγουν απογόνους. Επειτα οι νέες λύσεις
θα «μεταλλαχθούν» έτσι ώστε αυτές να έχουν μέρη λύσης από τους γονείς αλλά δεν είναι
πραγματικά ίδιες με τον γονέα. Μερικές από τις καλύτερες λύσεις από κάθε γενιά
διατηρούνται ενώ οι άλλες αντικαθίστανται από τις νεοσύστατες λύσεις. Αυτή η
διαδικασία θα επαναληφθεί έως ότου επιτευχθεί η κατάσταση διακοπής.

Ωστόσο, η βελτιστοποίηση υπό περιορισμούς με γενετικούς αλγόριθμους παραμένει


δύσκολη. Η ρίζα του προβλήματος είναι ότι συνδυάζοντας μερικές λύσεις για να
σχηματιστούν καλές πλήρεις έγκυρες λύσεις, πράγμα που δεν είναι αρκετό, καθώς αυτό
δεν ελέγχει για την συνέπεια των περιορισμών.

Διπλωματική Εργασία 24
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Οι συναρτήσεις ποινής προσπαθούν να αποφύγουν τις μη έγκυρες λύσεις απομακρύνοντας


την αναζήτηση από αυτές, ενώ συναρτήσεις «επισκευής» προσπαθούν να «φτιάξουν»
τέτοιες λύσεις ώστε να γίνουν έγκυρες. Ωστόσο, τιμωρώντας μη έγκυρες λύσεις δεν
αποτελεί εγγύηση ότι ο γενετικός αλγόριθμος θα πετύχει να βρει καλές έγκυρες λύσεις,
καθώς μια ελαφρώς μη έγκυρη λύση με καλή απόδοση μπορεί να κυριαρχήσει στην
αναζήτηση. Αν ο χώρος λύσης κυριαρχείται από μη έγκυρες λύσεις τότε η προσπάθεια να
βρεθούν έγκυρες λύσεις μόνο με συναρτήσεις ποινής είναι απίθανο να είναι επιτυχές. Για
αυτό ο γενετικός αλγόριθμος συνδυάζεται με άλλες ευρετικές μεθόδους
αποκωδικοποίησης (decoder functions) για να βρεθεί η πραγματική λύση.

2.7 Αλγόριθμος αναζήτησης «Αναρρίχηση σε λόφο» (Hill Climbing)


Ο αλγόριθμος αναζήτησης «αναρρίχηση σε λόφο» (Hill Climbing) είναι ένας αλγόριθμος
όπου υπάρχει απλώς ένας βρόχος που κινείται συνεχώς προς την κατεύθυνση της
αυξανόμενης αξίας, δηλαδή στην ανηφόρα. Τερματίζεται όταν φτάσει σε μια «κορυφή»
όπου κανένας γείτονας δεν έχει μεγαλύτερη τιμή. Ο αλγόριθμος δεν διατηρεί ένα δέντρο
αναζήτησης, επομένως η δομή δεδομένων για τον τρέχοντα κόμβο χρειάζεται μόνο την
κατάσταση και την αξία της αντικειμενικής συνάρτησης. Η αναρρίχηση λόφων δεν
κοιτάζει πέρα από τους άμεσους γείτονες του τρέχοντος κόμβου. Στην περίπτωση που
υπάρχουν γείτονες με την ίδια τιμή επιλέγεται τυχαία ένας από αυτούς.

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

Επίσης μπορεί να υπάρξει περίπτωση να φτάσει σε μία κατάσταση όπου να μην μπορεί να
κάνει πρόοδο αφού θα έχει φτάσει σε ένα «οροπέδιο» (plateau) όπου δεν υπάρχουν
ξεκάθαρες κορυφές για να μεταβεί. Για παράδειγμα όταν οι επόμενες κορυφές έχουν όλες
ίδια τιμή με την τρέχουσα κατάσταση.

Τέλος έχουν προταθεί κάποιες παραλλαγές του αλγόριθμου Hill Climbing όπως ο
«Stochastic Hill Climbing” όπου επιλέγεται μια κίνηση τυχαία μεταξύ των ανηφορικών

Διπλωματική Εργασία 25
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

κινήσεων. Η πιθανότητα επιλογής μπορεί να ποικίλλει ανάλογα με την κλίση της


ανηφορικής κίνησης. Αυτή συνήθως συγκλίνει πιο αργά από την πιο απότομη ανάβαση,
αλλά σε ορισμένες περιπτώσεις βρίσκει καλύτερες λύσεις. Ο αλγόριθμος «First Choice
Hill Climbing» υλοποιεί τον αλγόριθμο Stochastic Hill Climbing δημιουργώντας
διαδόχους τυχαία μέχρι να δημιουργηθεί ένας καλύτερος από την τωρινή κατάσταση.
Αυτή είναι μια καλή στρατηγική όταν μια κατάσταση έχει πολλούς (π.χ. χιλιάδες)
διαδόχους.

Οι αλγόριθμοι αναρρίχησης λόφων που έχουν περιγραφεί μέχρι τώρα είναι ελλιπείς,
συχνά αποτυγχάνουν να βρουν τον στόχο όταν υπάρχει γιατί μπορεί να κολλήσουν στα
τοπικά μέγιστα. Ο αλγόριθμος «Αναρρίχηση με τυχαία επανεκκίνηση» (Random-restart
Hill Climbing) διεξάγει μια σειρά αναζητήσεων αναρρίχησης λόφων από τυχαία
δημιουργημένες αρχικές καταστάσεις και τερματίζει όταν βρεθεί ένας στόχος. Είναι
πλήρης με πιθανότητα να πλησιάζει το 1, για τον ασήμαντο λόγο ότι τελικά θα
δημιουργήσει μια κατάσταση στόχου ως αρχική κατάσταση. Αν κάθε αναρρίχηση –
αναζήτηση έχει πιθανότητα p επιτυχίας, τότε ο αναμενόμενος αριθμός επανεκκινήσεων
του αλγόριθμου που απαιτούνται είναι 1/p.

Η επιτυχία του αλγόριθμου αναρρίχησης λόφων εξαρτάται σε μεγάλο βαθμό από τη


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

2.8 Αλγόριθμος αναζήτησης «Προσομοιωμένης Ανόπτησης» (Simulated


Annealing)
Ο αλγόριθμος αναρρίχησης σε λόφο που δεν κάνει ποτέ κινήσεις προς καταστάσεις με
χαμηλότερη τιμή (ή υψηλότερο κόστος) είναι εγγυημένο ότι δεν είναι πλήρης, επειδή
μπορεί να κολλήσει σε ένα τοπικό μέγιστο. Από την άλλη ένας αλγόριθμος όπου γίνεται
ένας καθαρά τυχαίος περίπατος - δηλαδή η μετάβαση σε έναν διάδοχο που επιλέγεται
ομοιόμορφα τυχαία από το σύνολο των διαδόχων είναι πλήρης, αλλά εξαιρετικά

Διπλωματική Εργασία 26
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

αναποτελεσματικός. Επομένως, φαίνεται λογικό να προσπαθήσουμε να συνδυάσουμε την


αναρρίχηση σε λόφο με έναν τυχαίο περίπατο με κάποιο τρόπο που να αποφέρει
αποτελεσματικότητα και πληρότητα. Ο αλγόριθμος της «Προσομοιωμένης Ανόπτησης»
(Simulated Annealing) είναι ένας τέτοιος αλγόριθμος.

Στη μεταλλουργία, ανόπτηση ονομάζεται η θερμική κατεργασία στην οποία υποβάλλεται


ένα μέταλλο ή κράμα, που έχει υποστεί κάποια κατεργασία π.χ. σφυρηλάτηση ή
ενδοτράχυνση, προκειμένου στη συνέχεια υποβαλλόμενο σε ψύξη να βελτιωθεί η
ευκαμψία του και να γίνει λιγότερο εύθρυπτο (Wikipedia). Ο αλγόριθμος της
προσομοιωμένης ανόπτησης έχει εμπνευστεί από αυτή την διαδικασία.

Καταρχάς ορίζεται μια αρχική θερμοκρασία T, το ελάχιστο Tmin και ένα όριο
επαναλήψεων. Επίσης επιλέγεται ένα αρχικό σημείο εκκίνησης (λύση). Ο εσωτερικός
βρόχος του αλγορίθμου είναι αρκετά παρόμοιος με τον αλγόριθμο ανάβασης λόφου.
Ωστόσο, αντί να επιλέξει την καλύτερη κίνηση, επιλέγει μια τυχαία κίνηση. Αν η κίνηση
βελτιώνει την κατάσταση, είναι πάντα αποδεκτή. Διαφορετικά, ο αλγόριθμος δέχεται την
κίνηση με κάποια πιθανότητα p μικρότερη από 1. Η πιθανότητα μειώνεται εκθετικά
ανάλογα με το πόσο «κακή» είναι η κίνηση. Η πιθανότητα επίσης μειώνεται όσο πέφτει η
«θερμοκρασία» T, δηλαδή είναι πιο πιθανό να επιτρέπονται «κακές» κινήσεις στην
έναρξη όταν η «θερμοκρασία» είναι υψηλή και γίνονται πιο απίθανες καθώς το T
μειώνεται. Κάποιος μπορεί να αποδείξει ότι εάν το χρονοδιάγραμμα χαμηλώσει το T
αρκετά αργά, ο αλγόριθμος θα βρει ένα συνολικό βέλτιστο με πιθανότητα να πλησιάζει το
1.

2.9 Αλγόριθμος αναζήτησης Ταμπού (Tabu Search)


Ο αλγόριθμος αναζήτησης Ταμπού (Tabu Search) είναι ένας μετα-ευρετικός αλγόριθμος
και μπορεί να περιγραφεί σαν μια διαδικασία τοπικής αναζήτησης που επιτρέπει κινήσεις
προς τα πάνω (up-hill moves) επιλέγοντας την καλύτερη κίνηση στην τρέχουσα γειτονιά
ακόμα και αν δεν είναι πιο βελτιωμένη από την προηγούμενη.

Ο αλγόριθμος χρησιμοποιεί δομές μνήμης που σχηματίζουν αυτό που είναι γνωστό ως
λίστα ταμπού, – εξ ου και το όνομα του αλγορίθμου - ένα σύνολο κανόνων και
απαγορευμένων λύσεων που χρησιμοποιούνται για να φιλτράρουν ποιες λύσεις θα γίνουν

Διπλωματική Εργασία 27
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

δεκτές στη γειτονιά. Η λίστα ταμπού περιέχει απογορευμένες κινήσεις ώστε η αναζήτηση
να μην επιστρέφει πολύ γρήγορα σε προηγούμενες επισκέψιμες λύσεις και έτσι ο
αλγόριθμος να μην κολλάει σε τοπικά μέγιστα ή οροπέδια.

Επίσης προκειμένου να υπάρχει κέρδος στην ποιότητα της λύσης και την αποδοτικότητα
του αλγορίθμου χρησιμοποιούνται έξυπνες τεχνικές όπως το να απομακρύνεται η
αναζήτηση προς άλλες μακρινές γειτονιές που είναι πιο «υποσχόμενες». Αυτό γίνεται
χρησιμοποιώντας ειδικά επιλεγμένα υποσύνολα της γειτονιάς τα οποία λέγονται
υποψήφιες λίστες στρατηγικής και επίσης, την αναγνώριση χαρακτηριστικών που παίζουν
σημαντικό κομμάτι στην αναζήτηση προς καλές λύσεις τα οποία λέγονται χαρακτηριστικά
επιρροής (influential attributes). Υπάρχει επίσης η περίπτωση εφόσον κολλήσει ο
αλγόριθμος κάπου να αναζητηθεί μια γειτονιά ακόμα και χρησιμοποιώντας μη έγκυρες
λύσεις ώστε να μπορεί να προχωρήσει.

Η αναζήτηση Ταμπού έχει αρκετές ομοιότητες με τον αλγόριθμο προσομοιωμένης


ανόπτησης, καθώς και οι δύο περιλαμβάνουν πιθανές κινήσεις προς τα κάτω. Στην
πραγματικότητα, η προσομοιωμένη ανόπτηση θα μπορούσε να θεωρηθεί ως μια ειδική
μορφή Tabu Search, όπου μια κίνηση γίνεται ταμπού με μια καθορισμένη πιθανότητα.

Έχει το πλεονέκτημα ότι μπορεί να αποφύγει τοπικά μέγιστα και οροπέδια επιλέγοντας
για παράδειγμα λύσεις που δεν βελτιώνουν την ποινή, ενώ χρησιμοποιώντας την λίστα
ταμπού αποφεύγει τους κύκλους και την επανάληψη των λύσεων αλλά έχει το
μειονέκτημα ότι μπορεί να χρειάζεται πολλές επαναλήψεις ενώ και η παραμετροποίηση
του δεν είναι εύκολη.

2.10 Αλγόριθμος βελτιστοποίησης αποικιών μυρμηγκιών (Ant Colony


Optimization – ACO)
Ο αλγόρθμος βελτιστοποίησης αποικιών μυρμηγκιών (Ant Colony Optimization – ACO)
είναι ένα από τους πιο επιτυχημένους μετα-ευρετικούς αλγόριθμους εμπνευσμένους από
τη φύση. Προτάθηκε αρχικά από τον Dorigo et al. το 1991. Η ιδέα που συνδέει τη
βελτιστοποίηση με τα βιολογικά μυρμήγκια βασίζεται στην παρατήρηση της
συμπεριφοράς τους στην αναζήτηση τροφής: όταν περπατούν σε διαδρομές από τη φωλιά
προς μια πηγή τροφής, τα μυρμήγκια φαίνεται να μην βρίσκουν απλά μια τυχαία

Διπλωματική Εργασία 28
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

διαδρομή, αλλά μία αρκετά «καλή», από άποψη σύντομης διάρκειας. Έτσι, η
συμπεριφορά τους, τους επιτρέπει να λύσουν ένα πρόβλημα βελτιστοποίησης.

Αυτό το είδος της επιτυχίας των βιολογικών μυρμηγκιών εξηγείται εξ ολοκλήρου από το
είδος της επικοινωνίας τους και με τον τρόπο που αποφασίζουν πού θα πάνε: Καθώς
περπατούν, τα μυρμήγκια αφήνουν μια χημική ουσία που ονομάζεται φερομόνη στο
έδαφος και τείνουν να επιλέγουν διαδρομές που χαρακτηρίζονται από ισχυρή
συγκέντρωση φερομόνης. Έχοντας δύο αρχικά ανεξερεύνητες διαδρομές, μια σύντομη και
μια μακρύτερη, μεταξύ της φωλιάς και της πηγής τροφής, τα μυρμήγκια επιλέγουν στην
αρχή τυχαία ποια θα περπατήσουν. Μυρμήγκια που έχουν επιλέξει, στην αρχή τυχαία, την
πιο σύντομη διαδρομή είναι τα πρώτα που θα φτάσουν στο φαγητό και θα ξεκινήσουν την
επιστροφή τους στη φωλιά. Επομένως, η φερομόνη αρχίζει να συσσωρεύεται πιο γρήγορα
στη συντομότερη διαδρομή παρά στην μακρύτερη. Τα επόμενα μυρμήγκια τείνουν να
ακολουθούν τη συντομότερη διαδρομή επειδή έχει μεγαλύτερη συγκέντρωση φερομόνης,
ενισχύοντάς την έτσι όλο και περισσότερο, και προσελκύοντας περαιτέρω άλλα
μυρμήγκια στην καλή διαδρομή.

Τα συνδυαστικά προβλήματα βελτιστοποίησης που αντιμετωπίζονται από τον αλγόριθμο


βελτιστοποίησης αποικιών μυρμηγκιών κωδικοποιούνται συνήθως από έναν σταθμισμένο
γράφο G = (V, A), ένα πλήρως συνδεδεμένο γράφημα του οποίου οι κόμβοι V αποτελούν
στοιχεία λύσεων, ενώ οι ακμές Α είναι συνδέσεις μεταξύ των στοιχείων. Η εύρεση λύσης
σημαίνει να κατασκευαστεί μια έγκυρη διαδρομή στο γράφο G.

Ο αλγόριθμος είναι ουσιαστικά η αλληλεπίδραση τριών διαδικασιών. Στο πρώτο βήμα


κάθε επανάληψης, την κατασκευή λύσεων, κάθε «τεχνητό μυρμήγκι» κατασκευάζει
στοχαστικά μια λύση, δηλαδή τη σειρά με την οποία πρέπει να ακολουθηθούν οι ακμές
του γραφήματος.

Στο δεύτερο βήμα, την «εξάτμιση» φερομόνης, συγκρίνονται τα μονοπάτια που βρήκαν τα
διάφορα μυρμήγκια και γίνεται ενημέρωση των φερομόνων. Η φερομόνη μειώνεται στις
ακμές από κάθε μυρμήγκι μόλις προστεθεί σε ένα μερικό περπάτημα στο γράφημα
κατασκευής, αυτή η λειτουργία ονομάζεται τοπική ενημέρωση. Η μείωση της φερομόνης
σε επιλεγμένες ακμές είναι σημαντική, προκειμένου να αποφευχθεί η υπερβολικά
γρήγορη σύγκλιση του αλγορίθμου σε μη βέλτιστες λύσεις και να ευνοηθεί η εξερεύνηση
νέων περιοχών του χώρου αναζήτησης. Είναι ενδιαφέρον επίσης ότι η φερομόνη
μειώνεται στο βιολογικό περιβάλλον των μυρμηγκιών, λόγω εξάτμισης.

Διπλωματική Εργασία 29
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Στο τρίτο βήμα, οι DeamonActions είναι κεντρικοποιημένες λειτουργίες που


χρησιμοποιούν γενική γνώση σχετικά με την διαδικασία αναζήτησης του αλγορίθμου.
Εδώ, ο όρος «κεντρικοποιημένες» χρησιμοποιείται σε αντίθεση με τον όρο «τοπικό», και
προσδιορίζει εκείνες τις λειτουργίες που δεν μπορούν να εκτελεστούν από μεμονωμένα
μυρμήγκια (αφού αυτά λειτουργούν τοπικά). Οι DeamonActions μπορεί να
περιλαμβάνουν: την αξιολόγηση και σύγκριση του στόχου της τιμής της αντικειμενικής
συνάρτησης διαφορετικών λύσεων που παράγονται από μυρμήγκια, την εφαρμογή μιας
ευρετικής τοπικής αναζήτησης σε λύσεις, προκειμένου να ενταθεί η αναζήτηση κοντά σε
ορισμένες επιλεγμένες λύσεις. Επίσης την συλλογή γενικών πληροφοριών που μπορούν
να χρησιμοποιηθούν για την αύξηση της φερομόνης σε ορισμένες λύσεις ή σε ορισμένα
στοιχεία λύσεων, προκειμένου να προκαταλάβουν την αναζήτηση και να την εντείνουν
γύρω από λύσεις με δεδομένα χαρακτηριστικά (αυτή η κεντρική ενημέρωση φερομόνης
ονομάζεται επίσης γενική ενημέρωση).

2.11 Αλγόριθμος αναζήτησης μεταβλητής γειτονιάς (Variable


Neighborhood Search)
Ο αλγόριθμος αναζήτησης μεταβλητής γειτονιάς (Variable Neighborhood Search – VNS)
είναι ένας μεταευρετικός αλγόριθμος που προτάθηκε από τους Pierre Hansen and Nenad
Mladenovic (1997). Εκμεταλλεύεται συστηματικά την ιδέα της αλλαγής της γειτονιάς,
τόσο στην κατάβαση σε τοπικά ελάχιστα όσο και στην απόδραση από τις κοιλάδες που τα
περιέχουν.

Σε αντίθεση με άλλες μεταευρετικές μεθόδους που βασίζονται σε τοπικές μεθόδους


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

Διπλωματική Εργασία 30
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

βέλτιστο. Αυτή η ρουτίνα μπορεί επίσης να χρησιμοποιήσει αρκετές γειτονιές. Επομένως,


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

Ο αλγόριθμος βασίζεται στις ακόλουθες αντιλήψεις:

 Ένα τοπικό ελάχιστο σε σχέση με μια γειτονιά δεν είναι απαραίτητα τοπικό
ελάχιστο για μια άλλη γειτονιά.
 Ένα συνολικό ελάχιστο είναι ένα τοπικό ελάχιστο σε σχέση με όλες τις πιθανές
γειτονιές.
 Για πολλά προβλήματα, τα τοπικά ελάχιστα σε σχέση με μία ή περισσότερες
γειτονιές είναι σχετικά κοντά μεταξύ τους.

Αυτή η τελευταία παρατήρηση, η οποία είναι εμπειρική, υπονοεί ότι ένα τοπικό ελάχιστο
παρέχει συχνά κάποιες πληροφορίες για το συνολικό. Αυτό μπορεί για παράδειγμα να
είναι πολλές μεταβλητές με την ίδια τιμή. Ωστόσο, συνήθως δεν είναι γνωστό ποιες από
όλες. Μια οργανωμένη μελέτη της γειτονιάς αυτού του τοπικού ελάχιστου είναι επομένως
ενδεδειγμένη, μέχρι να βρεθεί ένα καλύτερο.

Σε αντίθεση με πολλούς άλλους μεταευρετικούς αλγόριθμους, τα βασικά σχήματα του


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

Διπλωματική Εργασία 31
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

3. Περιγραφή του προβλήματος

3.1 Ιστορικό – γενικά στοιχεία


Ο Πρώτος Διεθνής Διαγωνισμός Κατασκευής Προγράμματος Νοσηλευτικών Βαρδιών
(Internation Nurse Rostering Competition INRC-I ) διεξήχθη το 2010. Στον διαγωνισμό
υπεβλήθησαν 15 συμμετοχές σε τρεις κατηγορίες (sprint, medium & long tracks). Έκτοτε,
αρκετές ερευνητικές ομάδες έλαβαν την διατύπωση και τις αντίστοιχες περιπτώσεις ως
πρόκληση και έδωσαν αξιοσημείωτα αποτελέσματα. Βρέθηκαν και αναφέρθηκαν επίσης
βέλτιστες λύσεις καθώς και νέες καλύτερες λύσεις.

Το πρόβλημα που εξετάστηκε για τον διαγωνισμό INRC-I ήταν η ανάθεση


νοσηλευτών/τριων σε βάρδιες σε έναν σταθερό πλάνο σχεδιασμού, υπό την επιφύλαξη
ενός μεγάλου αριθμού αυστηρών και χαλαρών περιορισμών (hard & soft constraints).

Για τον Δεύτερο Διεθνή Διαγωνισμό Κατασκευής Προγράμματος Νοσηλευτικών Βαρδιών


(INRC-II), προτάθηκε ένα μικρότερο σύνολο τύπων περιορισμών, αλλά με την
διαμόρφωση του προβλήματος σε πολλαπλά στάδια (multi-stage formulation). Αυτό
σημαίνει δηλαδή, ότι οι λύσεις των συμμετεχόντων στον διαγωνισμό καλούνται να
αντιμετωπίσουν μια σειρά περιπτώσεων, αναφερόμενες σε συνεχόμενες εβδομάδες
μεγαλύτερου χρονικού ορίζοντα προγραμματισμού (4 ή 8 εβδομάδες).

Η μέθοδος αναζήτησης που θα έπρεπε να σχεδιαστεί από τους συμμετέχοντες στον


διαγωνισμό θα έπρεπε να είναι σε θέση να λύσει ένα μόνο στάδιο του προβλήματος που
αντιστοιχεί σε μία εβδομάδα. Ορισμένες πληροφορίες, που ονομάζονται ιστορικό
(History), μεταφέρονται μεταξύ διαδοχικών εβδομάδων, έτσι ώστε αυτή που προέρχεται
από την προηγούμενη εβδομάδα να λαμβάνεται υπόψη από τον επιλυτή (Solver). Το
ιστορικό περιλαμβάνει δεδομένα συνόρων (border data όπως λέγονται), όπως η τελευταία
εργαζόμενη βάρδια κάθε νοσηλευτή/τριας και μετρητές (counters) για αθροιστικά
δεδομένα, όπως οι συνολικές νυχτερινές βάρδιες του νοσηλευτή/τριας. Τα δεδομένα των
μετρητών πρέπει να ελέγχονται έναντι των ολικών ορίων, αλλά μόνο στο τέλος της
περιόδου προγραμματισμού. Ο ορίζοντας προγραμματισμού δεν κυλά αλλά είναι
σταθερός, με την έννοια ότι την τελευταία εβδομάδα όλοι οι μετρητές ελέγχονται στα όριά
τους.

Διπλωματική Εργασία 32
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Παρέχεται από τον διαγωνισμό ένα απλό λογισμικό γραμμής εντολών (command line
software) προσομοίωσης/επικύρωσης που θα χρησιμοποιηθεί για την προσομοίωση της
διαδικασίας επίλυσης και για την αξιολόγηση της ποιότητας του επιλυτή (Solver). Ο
προσομοιωτής (Simulator) καλεί τον επιλυτή (Solver) του συμμετέχοντα στον διαγωνισμό
για κάθε στάδιο επαναληπτικά και στη συνέχεια ενημερώνει το ιστορικό (δηλαδή το
αρχείο ιστορικού) μετά από κάθε μεμονωμένη εκτέλεση. Στο τέλος της εκτέλεσης του
Simulator ο παρεχόμενος επικυρωτής (Validator) συνενώνει τις λύσεις για όλες τις
εβδομάδες και τις αξιολογεί όλες μαζί, μαζί με τα αθροιστικά δεδομένα που προέρχονται
από το τελικό ιστορικό. Εξάγει ως αποτέλεσμα αν η λύση του επιλυτή είναι έγκυρη καθώς
και την συνολική τιμή της ποινής (penalty) για την λύση.

Ο επιλυτής (Solver) πρέπει να λάβει υπόψη τις ακόλουθες ξεχωριστές πηγές εισόδου:

Σενάριο (Scenario) : Πληροφορίες που είναι ίδιες για όλες τις εβδομάδες του ορίζοντα
προγραμματισμού, όπως η λίστα των νοσηλευτών/τριών, συμβάσεις νοσηλευτών/τριων,
τύποι βάρδιας κ.α.

Δεδομένα εβδομάδας (Week Data) : Συγκεκριμένα δεδομένα της μεμονωμένης


εβδομάδας, όπως οι καθημερινές απαιτήσεις κάλυψης και οι προτιμήσεις μη εργασίας
νοσηλευτών/τριων για συγκεκριμένες ημέρες ή βάρδιες συγκεκριμένης ημέρας.

Ιστορικό (History) : Πληροφορίες που πρέπει να διαβιβάζονται από την μια εβδομάδα
στην άλλη, προκειμένου να υπολογιστούν σωστά οι παραβιάσεις περιορισμών.
Περιλαμβάνει πληροφορίες για τα δεδομένα συνόρων (border data) και ολικούς μετρητές
(global counters).

Ο επιλυτής (Solver) πρέπει να παράγει ένα αρχείο εξόδου με την λύση, βάσει του οποίου,
ο προσομοιωτής (Simulator) υπολογίζει το νέο αρχείο ιστορικού, για να περάσει πίσω
στον επιλυτή για την λύση της επόμενης εβδομάδας. Όπως θα εξηγηθεί περαιτέρω, εκτός
από τα υποχρεωτικά αρχεία εισόδου και εξόδου, ένα προσαρμοσμένο αρχείο δεδομένων
μπορεί να χρησιμοποιηθεί για την ανταλλαγή πληροφοριών μεταξύ δύο σταδίων.

Παρακάτω η οργάνωση – παρουσίαση των δεδομένων στο κεφάλαιο είναι ως εξής : Η


ενότητα 3.2 απεικονίζει τον ορισμό του προβλήματος, η ενότητα 3.3 περιγράφει την
διαδικασία επίλυσης. Η ενότητα 3.4 περιγράφει τους περιορισμούς του διαγωνισμού ενώ
η ενότητα 3.5 το θέμα των περιπτώσεων (Instances). Η ενότητα 3.6 περιγράφει τα
παρεχώμενα εργαλεία λογισμικού που διατέθηκαν στους συμμετέχοντες του διαγωνισμού

Διπλωματική Εργασία 33
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

για να αξιολογήσουν την επίλυσή τους. Να σημειωθεί επίσης ότι στο Παράρτημα Α του
κειμένου υπάρχει περιγραφή για τις μορφές αρχείων (file formats) ενώ το Παράρτημα Β
παρέχει μια βαθύτερη ματιά στην αξιολόγηση ορισμένων περίπλοκων περιορισμών (hard
& soft constraints). Τέλος στο Παράρτημα Γ υπάρχει ένα αναλυτικό παράδειγμα του πως
βγαίνουν οι ποινές για μια συγκεκριμένη εβδομάδα με συγκεκριμένα δεδομένα εισόδου.

3.2 Ορισμός προβλήματος


Το βασικό πρόβλημα (το ένα στάδιο) συνίσταται στον εβδομαδιαίο προγραμματισμό ενός
σταθερού αριθμού νοσηλευτών/τριων χρησιμοποιώντας ένα σύνολο βαρδιών, έτσι ώστε
κάθε μέρα ένας νοσηλευτής/τρια να εργάζεται σε βάρδια ή να έχει ρεπό (day-off). Οι
νοσηλευτές/τριες μπορεί να έχουν πολλαπλές δεξιότητες (skills) και για κάθε δεξιότητα
έχουμε διαφορετικές απαιτήσεις κάλυψης.

Δεδομένης της φύσης πολλαπλών σταδίων της συνολικής διαδικασίας, τα δεδομένα


εισόδου του προβλήματος προέρχονται από τρεις διαφορετικές πηγές, που ονομάζονται
σενάριο (scenario), δεδομένα εβδομάδας (week data) και ιστορικό (history), όπως
εξηγείται στις ακόλουθες ενότητες. Ο τρόπος οργάνωσης των πληροφοριών στα αρχεία
εξηγείται στο Παράρτημα Α.

3.2.1 Σενάριο (Scenario)


Το σενάριο αντιπροσωπεύει τα γενικά δεδομένα που είναι κοινά σε όλα τα στάδια της
συνολικής διαδικασίας. Περιέχει τις ακόλουθες πληροφορίες:

1. Ορίζοντας προγραμματισμού (Planning Horizon): Ο αριθμός των εβδομάδων


που αποτελούν την περίοδο προγραμματισμού.
2. Δεξιότητες (Skills) : Η λίστα των δεξιοτήτων που περιλαμβάνονται στα δεδομένα
εισόδου [για παράδειγμα : επικεφαλής νοσοκόμα (HeadNurse), τακτική νοσοκόμα
(Nurse), ασκούμενος (Trainee) κλπ]. Κάθε νοσηλευτής/τρια έχει μία ή
περισσότερες δεξιότητες, αλλά σε κάθε βάρδια εργασίας καλύπτει ακριβώς ένα
αίτημα δεξιοτήτων.

Διπλωματική Εργασία 34
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

3. Τύποι βάρδιας (Shift types) : Για κάθε τύπο βάρδιας (για παράδειγμα: Πρωί -
Early, Απόγευμα - Late, Νύχτα - Night), δίνεται ο ελάχιστος και ο μέγιστος
αριθμός συνεχόμενων αναθέσεων του συγκεκριμένου τύπου
4. Απαγορευμένες διαδοχές τύπων βάρδιας (Forbidden Shift Type Succesions) :
Είναι ένας πίνακας απαγορευμένων διαδοχών τύπου βάρδιας. Για παράδειγμα,
μπορεί να μην επιτρέπεται να ανατίθεται σε ένα νοσηλευτή/τρια μια βάρδια πρωί
την επόμενη ημέρα από βάρδια νύχτας.
5. Συμβάσεις (Contracts): Κάθε νοσηλευτής/τρια έχει μία μοναδική συγκεκριμένη
σύμβαση (για παράδειγμα : πλήρους απασχόλησης – Full Time, μερικής
απασχόλησης – Part Time, ημιαπασχόληση – Half Time κλπ). Η σύμβαση θέτει
όρια στη διανομή και τον αριθμό των αναθέσεων εντός του ορίζοντα
προγραμματισμού. Αναλυτικά, πέρα από το όνομα της σύμβασης περιέχει τα εξής
όρια εργασίας:
 ελάχιστος και μέγιστος συνολικός αριθμός αναθέσεων εργασιών στον
συνολικό ορίζοντα προγραμματισμού.

 ελάχιστος και μέγιστος αριθμός συνεχόμενων εργάσιμων ημερών.

 ελάχιστος και μέγιστος αριθμός συνεχόμενων ημερών μη εργασίας –


άδειας (days-off).

 μέγιστος αριθμός εργάσιμων σαββατοκύριακων στον συνολικό ορίζοντα


προγραμματισμού.

 μια τιμή ναι/όχι (Boolean) που αντιπροσωπεύει την παρουσία του


περιορισμού «Πλήρες σαββατοκύριακο» - Complete Weekend στον/στην
νοσηλευτή/τρια, ο οποίος δηλώνει ότι ο/η νοσηλευτής/τρια θα πρέπει να
εργάζεται και τις δύο ημέρες του σαββατοκύριακου ή καμία από αυτές.

6. Νοσηλευτές/τριες (Nurses) : Για κάθε εργαζόμενο/η, δίνεται το όνομα


(αναγνωριστικό), η σύμβαση εργασίας και η λίστα των δεξιοτήτων του/της.

3.2.2 Δεδομένα εβδομάδας (Week Data)


Τα δεδομένα της εβδομάδας (Week Data) περιέχουν τα δεδομένα με τις απαιτήσεις
εργασίας για μια συγκεκριμένη εβδομάδα. Αποτελούνται από τις ακόλουθες πληροφορίες:

Διπλωματική Εργασία 35
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Απαιτήσεις (Requirements) : Δίνεται, για κάθε βάρδια, για κάθε δεξιότητα, για κάθε
ημέρα της εβδομάδας, ο ελάχιστος και ο βέλτιστος αριθμός νοσηλευτών/τριων που είναι
απαραίτητος για την εκπλήρωση των εργασιακών καθηκόντων.

Αιτήματα μη εργασίας νοσηλευτών/τριων (Nurse Shift Off Requests) : Δίνεται, μια


τριπλέτα που αποτελείται από το όνομα του νοσηλευτή/τριας, την ημέρα της εβδομάδας
και μια βάρδια. Η παρουσία μιας δεδομένης τριπλέτας αντιπροσωπεύει το αίτημα της
νοσηλεύτριας να μην εργαστεί στη δεδομένη βάρδια τη δεδομένη ημέρα. Το ειδικό όνομα
βάρδιας Any αντιπροσωπεύει το αίτημα να μην εργάστεί κάποιος/α σε οποιαδήποτε
βάρδια της ημέρας, δηλαδή το να έχει ρεπό - άδεια (day off).

Οι παραπάνω πληροφορίες ποικίλλουν από εβδομάδα σε εβδομάδα, λόγω μεταβλητότητας


στον αριθμό των τρεχόντων ασθενών, των απαιτήσεων του νοσοκομείου ή μονάδας
υγείας και συγκεκριμένων προτιμήσεων των νοσηλευτών/τριων.

Συμβατικά, όλες οι εβδομάδες ξεκινούν με την ημέρα Δευτέρα, έτσι τα δεδομένα


αποθηκεύονται με τη σειρά Δευτέρα, Τρίτη,…εώς Κυριακή.

3.2.3 Ιστορικό (History)


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

Δεδομένα Συνόρων (Border Data) : Τα δεδομένα συνόρων χρησιμοποιούνται για τον


έλεγχο των περιορισμών σε διαδοχικές αναθέσεις. Αυτά είναι:

 Η βάρδια που εργαζόταν την τελευταία ημέρα της προηγούμενης εβδομάδας, ή η


ειδική τιμή «Καμία» (None) εάν o νοσηλευτής/τρια είχε ρεπό – άδεια (day off).

 O αριθμός διαδοχικών βαρδιών του ίδιου τύπου και ο αριθμός διαδοχικών


βαρδιών γενικά (και τα δύο είναι 0 εάν η τελευταία βάρδια που εργάστηκε είναι
Καμία - None) ·

 Ο αριθμός συνεχόμενων ημερών μη εργασίας – days off (0 αν την τελευταία μέρα


υπήρχε ανατεθειμένη βάρδια).

Διπλωματική Εργασία 36
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Μετρητές (Counters): Οι μετρητές συλλέγουν τη σωρευτική αξία για τις εβδομάδες


συγκεκριμένων ποσοτήτων ενδιαφέροντος, οι οποίες πρέπει να ελεγχθούν μόνο στο τέλος
της περιόδου προγραμματισμού (την τελευταία εβδομάδα). Αυτοί είναι:

 Ο συνολικός αριθμός αναθέσεων βαρδιών εργασίας.

 Ο συνολικός αριθμός σαββατοκύριακων που έχουν εργασία. Αν έστω μια από τις
δύο ήμερες του σαββατοκύριακου έχει ανατεθεί σε βάρδια αυτό σημαίνει ότι το
σαββατοκύριακο ήταν εργαζόμενο και αυξάνεται ο συγκεκριμένος μετρητής.

Το ιστορικό υπολογίζεται μετά από κάθε εβδομάδα με βάση τη λύση που έδωσε ο
επιλυτής (Solver) και το προηγούμενο ιστορικό. Το ιστορικό που διαβιβάστηκε στον
επιλυτή για την πρώτη εβδομάδα έχει όλες τις τιμές μετρητή ίσες με 0, ενώ τα δεδομένα
συνόρων μπορεί να έχουν οποιαδήποτε τιμή.

3.3 Διαδικασία επίλυσης


Η πλήρης διαδικασία επίλυσης είναι ένας βρόχος που εκτελεί σε κάθε βήμα ο επιλυτής
(Solver) για μια εβδομάδα, επαναλαμβάνοντας για όλες τις εβδομάδες στην περίοδο
προγραμματισμού (4 ή 8 εβδομάδες).

Μετά από κάθε εβδομάδα, οι πληροφορίες ιστορικού υπολογίζονται με βάση τη λύση και
το προηγούμενο ιστορικό και παραδίδονται σε ένα νέο αρχείο. Αυτό γίνεται από τον
προσομοιωτή (Simulator) που παρέχεται, ενώ ο επιλυτής πρέπει να παραδώσει μόνο την
ίδια τη λύση.

Η πλήρης διαδικασία σκιαγραφείται στο Σχήμα 3.1, υποθέτοντας ένα σενάριο 4


εβδομάδων. Τα αρχεία εισόδου είναι χρωματισμένα σε διαφορετικές αποχρώσεις του
κυανού (cyan) και τα αρχεία εξόδου σε διαφορετικές αποχρώσεις του ματζέντα (magenta).

Εκτός από τη δημιουργία ενός αρχείου λύσης μετά την επίλυση κάθε σταδίου, ο επιλυτής
μπορεί να θέλει να αποθηκεύσει κάποιες άλλες πληροφορίες πρόβλεψης σε ένα
προσαρμοσμένο αρχείο (με κίτρινο χρώμα στο Σχήμα 3.1) και να τις περάσει στην
επόμενη κλήση επίλυσης, προκειμένου να καθοδηγήσει την επίλυση του το επόμενο
στάδιο καλύτερα. Το περιεχόμενο και η μορφή αυτού του αρχείου είναι ελεύθερη, αλλά το
όνομά του καθορίζεται από τον προσομοιωτή, όπως περιγράφεται παρακάτω.

Διπλωματική Εργασία 37
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Σχήμα 3.1 : Η συνολική διαδικασία επίλυσης / προσομοίωσης (για 4 εβδομάδες)

Διπλωματική Εργασία 38
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Το αποτέλεσμα που παράγει ο επιλυτής είναι μια λίστα αναθέσεων των νοσηλευτών/τριων
σε βάρδιες και δεξιότητες. Κάθε καταχώρηση περιέχει το όνομα του νοσηλευτή/τριας, την
ημέρα της εβδομάδας, τη βάρδια και την δεξιότητα. Για παράδειγμα μια τέτοια
καταχώρηση μπορεί να είναι : [<Μαρία>, Τρίτη, Νύχτα, Προϊσταμένη], που αναφέρει ότι
η νοσηλεύτρια Μαρία θα έχει ανάθεση εργασίας την Τρίτη την νυχτερινή βάρδια με το
ρόλο της Προϊσταμένης Νοσηλεύτριας.

Η ποιότητα της συνολικής λύσης αξιολογείται από τον επικυρωτή (Validator) όπως
φαίνεται στο Σχήμα 3.2 για ολόκληρο τον ορίζοντα σχεδιασμού με βάση:

 Την λύση για κάθε εβδομάδα που περιέχει τις αναθέσεις των νοσηλευτών/τριων σε
βάρδιες και δεξιότητες, χρησιμοποιώντας τις απαιτήσεις στο αρχείο δεδομένων της
εβδομάδας και τα δεδομένα συνόρων στο αρχείο ιστορικού

 Τους μετρητές του τελικού αρχείου ιστορικού, έναντι των ορίων που
προβλέπονται στο σενάριο.

Σχήμα 3.2 : Η συνολική διαδικασία επαλήθευσης (για 4 εβδομάδες)

Διπλωματική Εργασία 39
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

3.4 Περιορισμοί Διαγωνισμού (Constraints)


Σύμφωνα με όσα περιγράφηκαν παραπάνω, χωρίζουμε τους περιορισμούς σε δύο σύνολα:
α) αυτούς που μπορούν να υπολογιστούν για κάθε εβδομάδα ξεχωριστά και β) σε εκείνους
που υπολογίζονται μόνο συνολικά στο τέλος της περιόδου προγραμματισμού.

Ως συνήθως, χωρίζονται επίσης σε αυστηρούς (hard constraints) και χαλαρούς


περιορισμούς (soft constraints). Οι αυστηροί περιορισμοί πρέπει να ικανοποιούνται πάντα
και οι χαλαροί συμβάλλουν στην αντικειμενική λειτουργία. Το βάρος κάθε μεμονωμένου
χαλαρού περιορισμού φαίνεται παρακάτω μετά το όνομα του και πριν από την περιγραφή.

3.4.1 Περιορισμοί για μια μεμονωμένη εβδομάδα


Παρακάτω είναι η λίστα των περιορισμών αυστηρών (Hard) και χαλαρών (Soft):

Οι αυστηροί περιορισμοί (hard constraints) είναι:

Η1. Μία εργασία ανά ημέρα (Single assignment per day : Ένας νοσηλευτής/τρια
μπορεί να ανατεθεί το πολύ σε μία βάρδια κάθε ημέρα. Δεν μπορεί να δουλέψει δεύτερη
βάρδια δηλαδή το ίδιο 24ωρο.

Η2. Υποστελέχωση (Under-staffing) : Ο αριθμός των νοσηλευτών/τριων για κάθε


βάρδια και για κάθε δεξιότητα πρέπει να είναι τουλάχιστον ίσος με την ελάχιστη
απαίτηση της βάρδιας - δεξιότητας.

Η3. Διαδοχές τύπου βάρδιας (Shift type successions) : Οι αναθέσεις τύπου βάρδιας ενός
νοσηλευτή/τριας σε δύο συνεχόμενες ημέρες πρέπει να ανήκουν στις νόμιμες επιτρεπτές
διαδοχές που προβλέπονται στο σενάριο. Δεν μπορεί δηλαδή να παραβιασθεί η
απαγορευμένη διαδοχή βάρδιας από Νύχτα σε Πρωί.

Η4. Έλλειψη απαιτούμενης δεξιότητας (Missing required skill) : Μια βάρδια μιας
συγκεκριμένης δεξιότητας (Skill) πρέπει απαραίτητα να συμπληρωθεί από έναν
νοσηλευτή/τρια που έχει αυτή την δεξιότητα.

Διπλωματική Εργασία 40
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Οι χαλαροί περιορισμοί (soft constraints) είναι:

S1. Ανεπαρκές προσωπικό για βέλτιστη κάλυψη - Insufficient staffing for optimal
coverage (Βάρος-Ποινή 30): Ο αριθμός των νοσηλευτών/τριων για κάθε βάρδια και για
κάθε δεξιότητα πρέπει να είναι ίσος με τη βέλτιστη απαίτηση. Κάθε νοσηλευτής/τρια που
λείπει τιμωρείται ανάλογα με το βάρος που παρέχεται. Οι επιπλέον νοσηλευτές πάνω από
τη βέλτιστη τιμή δεν λαμβάνονται υπόψη στο κόστος ποινής.

S2. Διαδοχικές αναθέσεις - Consecutive assignments (Βάρος 15/30): Πρέπει να


τηρούνται ο ελάχιστος και ο μέγιστος αριθμός διαδοχικών εργασιών, ανά βάρδια ή ολικά.
Η αξιολόγησή τους περιλαμβάνει δεδομένα συνόρων από το ιστορικό. Κάθε επιπλέον
ημέρα ή μέρα που λείπει πολλαπλασιάζεται με το αντίστοιχο βάρος. Το βάρος όσον
αφορά τις διαδοχικές αναθέσεις για την βάρδια είναι 15 ενώ για τις συνεχόμενες
εργάσιμες ημέρες είναι 30.

S3. Διαδοχικές ημέρες μη εργασίας - Consecutive days off (Βάρος 30): Πρέπει να
τηρείται ο ελάχιστος και ο μέγιστος αριθμός συνεχόμενων ημερών μη εργασίας – ρεπό -
άδειας. Η αξιολόγησή τους περιλαμβάνει επίσης τα δεδομένα συνόρων από το ιστορικό.
Κάθε επιπλέον ημέρα ή ημέρα που λείπει πολλαπλασιάζεται με το αντίστοιχο βάρος.

S4. Προτιμήσεις - Preferences (Βάρος 10): Κάθε ανάθεση σε ανεπιθύμητη βάρδια από
τις προτιμήσεις των νοσηλευτριών στην τρέχουσα εβδομάδα τιμωρείται με το αντίστοιχο
βάρος.

S5. Πλήρες σαββατοκύριακο - Complete week-end (Βάρος 30): Κάθε νοσηλευτής/τρια


που έχει ορισμένη την τιμή πλήρους Σαββατοκύριακου σε ΝΑΙ (δηλαδή 1), πρέπει να
εργάζεται είτε και τις 2 ήμερες του σαββατοκύριακου είτε καμία. Εάν εργάζεται μόνο μία
από τις δύο ημέρες Σάββατο ή Κυριακή αυτό τιμωρείται με το αντίστοιχο βάρος.

3.4.2 Περιορισμοί που εκτείνονται σε όλο τον ορίζοντα προγραμματισμού


Οι ακόλουθοι (χαλαροί) περιορισμοί αξιολογούνται μόνο στο τέλος της περιόδου
προγραμματισμού (την τελευταία εβδομάδα):

S6. Συνολικές αναθέσεις - Total assignments (Βάρος 20): Για κάθε νοσηλευτή/τρια ο
συνολικός αριθμός των αναθέσεων (εργάσιμες ημέρες) πρέπει να περιλαμβάνεται στα
όρια (ελάχιστο και μέγιστο) που επιβάλλει η σύμβασή του/της. Η διαφορά (προς κάθε

Διπλωματική Εργασία 41
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

κατεύθυνση), πολλαπλασιασμένη με το βάρος της, προστίθεται στην αντικειμενική


συνάρτηση.

S7. Συνολικά εργάσιμα σαββατοκύριακα - Total working week-ends (Βάρος 30):

Για κάθε νοσηλευτή/τρια, ο αριθμός των εργαζόμενων σαββατοκύριακων που εργάζεται


πρέπει να είναι μικρότερος ή ίσος με το μέγιστο επιτρεπτό. Ο αριθμός των εργαζόμενων
σαββατοκύριακων που υπερβαίνουν προστίθεται στην αντικειμενική συνάρτηση
πολλαπλασιαζόμενος με το βάρος. Ένα σαββατοκύριακο θεωρείται «εργαζόμενο» εάν
τουλάχιστον μία από τις δύο ημέρες (Σάββατο ή Κυριακή) έχει ανάθεση βάρδιας.

Προφανώς, ο επιλυτής πρέπει να λαμβάνει υπόψη τους περιορισμούς S6 και S7 σε κάθε


μεμονωμένο στάδιο. Ωστόσο, οι τιμές παραβίασής τους έχουν μειούμενο βαθμό
αβεβαιότητας από μία εβδομάδα στην επόμενη και μόνο την τελευταία εβδομάδα μπορούν
να αξιολογηθούν με ακρίβεια. Εναπόκειται στον επιλυτή να αποφασίσει τον τρόπο
μοντελοποίησης τους στη συνάρτηση κόστους τις προηγούμενες εβδομάδες.

Παρακάτω στον πίνακα 3.1 φαίνονται συνολικά τα βάρη – ποινές για κάθε έναν από τους
χαλαρούς περιορισμούς:

ΠΕΡΙΟΡΙΣΜΟΣ ΒΑΡΟΣ -
ΠΟΙΝΗ
S1. Ανεπαρκές προσωπικό για βέλτιστη κάλυψη - Insufficient 30
staffing for optimal coverage

S2. Διαδοχικές αναθέσεις - Consecutive assignments 15 (βάρδια)


30 (μέρες)
S3. Διαδοχικές ημέρες μη εργασίας - Consecutive days off 30

S4. Προτιμήσεις - Preferences 10

S5. Πλήρες σαββατοκύριακο - Complete week-end 30

S6. Συνολικές αναθέσεις - Total assignments 20

S7. Συνολικά εργάσιμα σαββατοκύριακα - Total working week- 30


ends

Πίνακας 3.1 : Συνολικός πίνακας βάρους – ποινής για κάθε χαλαρό περιορισμό (soft constraint)

Διπλωματική Εργασία 42
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

3.5 Περιπτώσεις (Instances)


Μια ολοκληρωμένη διαδικασία επίλυσης απαιτεί ως είσοδο ένα σενάριο (scenario), ένα
αρχικό ιστορικό (history) και 4 (ή 8) δεδομένα εβδομάδων (week data) και παράγει 4 (ή 8)
λύσεις εβδομάδων (week solutions) και ένα τελικό ιστορικό (final history). Το σενάριο, τα
δεδομένα εβδομάδων, το ιστορικό και οι λύσεις εβδομάδας γράφονται σε ξεχωριστά
αρχεία, το καθένα με τη δική του σύνταξη.

Για ευκολία επεξεργασίας, όλα τα αρχεία παραδειγμάτων παρέχονται σε μορφές XML,


JSON και κειμένου (text-only), και κάθε συμμετέχων στον διαγωνισμό μπορούσε να
χρησιμοποιήσει τη μορφή που θεωρεί ότι είναι πιο βολική για την υλοποίησή του. Οι
μορφές αρχείων εξηγούνται στο Παράρτημα Α.

Τα αρχεία που ανήκουν στην ίδια υπόθεση ομαδοποιούνται σε ένα σύνολο δεδομένων
(dataset), το οποίο αποτελείται από το ακόλουθο σύνολο αρχείων:

 1 αρχείο σεναρίου.

 3 αρχικά αρχεία ιστορικού.

 10 αρχεία δεδομένων εβδομάδων.

Επομένως, μια περίπτωση (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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

3.6 Εργαλεία λογισμικού του διαγωνισμού


Στους συμμετέχοντες στον διαγωνισμό παρέχονταν μια σειρά εργαλείων λογισμικού. Ο
προσομοιωτής (Simulator) διαχειρίζεται τη διαδικασία επίλυσης πολλαπλών σταδίων. Ο
επικυρωτής (Validator) πιστοποιεί την ποιότητα μιας δεδομένης περίπτωσης (instance).
Το εργαλείο επιδόσεων (benchmark) υπολογίζει τον επιτρεπτό χρόνο λειτουργίας της
λύσης για κάθε υπολογιστή. Τέλος, το εργαλείο ελέγχου εφικτότητας (feasibility checker)
δίνει τη δυνατότητα στον συμμετέχοντα στον διαγωνισμό να ελέγξει ότι μια συγκεκριμένη
περίπτωση (instance) ενός συγκεκριμένου συνόλου δεδομένων (dataset) έχει ή όχι
τουλάχιστον μία λύση που ικανοποιεί όλους τους αυστηρούς περιορισμούς (hard
constraints).

3.6.1 Προσομοιωτής (Simulator)


Στην ιστοσελίδα του διαγωνισμού, είναι διαθέσιμο το Java πρόγραμμα Simulator.jar που
τρέχει την επίλυση του προβλήματος και εξάγει στο τέλος και το κόστος καλώντας τον
επικυρωτή (Validator). Όπως φάνηκε στο σχήμα 3.1, ο προσομοιωτής λαμβάνει ένα
αρχείο σεναρίου, ένα αρχικό αρχείο ιστορικού, το όνομα αρχείου του εκτελέσιμου του
επιλυτή και μια ακολουθία αρχείων δεδομένων εβδομάδας ως είσοδό του. Στη συνέχεια,
εφαρμόζει τον επιλυτή (Solver) σε κάθε αρχείο δεδομένων εβδομάδας, δημιουργώντας
ένα αρχείο ιστορικού για κάθε στάδιο - εβδομάδα με βάση τη λύση που λαμβάνεται από
κάθε κλήση επίλυσης. Αφού επιλυθεί το αρχείο δεδομένων της τελευταίας εβδομάδας
στην ακολουθία, ο επικυρωτής (Validator) καλείται να αξιολογήσει ολόκληρο τον
ορίζοντα προγραμματισμού. Εκτός από τη βασική είσοδο που περιγράφηκε παραπάνω, ο
χρήστης μπορεί επίσης να καθορίσει τυχαίους «σπόρους» (random seeds) για τον επιλυτή
του, τον κατάλογο στον οποίο τρέχει ο επιλυτής και τον κατάλογο όπου όλα τα αρχεία
λύσεων, τα παραγόμενα αρχεία ιστορικού, τα αρχεία καταγραφής (log files) του επιλυτή
και τα αποτελέσματα του επικυρωτή αποθηκεύονται. Επιπρόσθετα εκτός από τη
δημιουργία ενός αρχείου λύσης μετά την επίλυση κάθε σταδίου, ο επιλυτής μπορεί να
θέλει να αποθηκεύσει κάποιες άλλες πληροφορίες σε ένα προκαθορισμένο αρχείο (custom
file) και να τις περάσει στην επόμενη κλήση επίλυσης, προκειμένου να καθοδηγήσει
καλύτερη την επίλυση του επόμενου σταδίου. Μια τέτοια ανάγκη υποστηρίζεται επίσης
από τον προσομοιωτή.

Διπλωματική Εργασία 44
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Ο προσομοιωτής καλείται χρησιμοποιώντας τις ακόλουθες παραμέτρους της γραμμής


εντολών (οι παράμετροι στις αγκύλες είναι προαιρετικές) όπως φαίνεται στον Πίνακα 3.2:

java -jar Simulator.jar --sce <Scenario_File>


--his <Initial_History_File>
--weeks <Week_Data_File_1> .. <Week_Data_File_N>
--solver <Solver_Executable>
[--runDir <Running_Directory>]
[--outDir <Output_Directory>]
[--cus]
[--rand <Random_Seed_1> .. <Random_Seed_N>]
[--timeout <Timeout_In_Seconds>]

Πίνακας 3.2 Τρόπος κλήσης του προσομοιωτή (Simulator) σε γραμμή εντολών

Αναλυτικά:

 Τα ονόματα αρχείων του αρχείου σεναρίου, του αρχείου του αρχικού ιστορικού
και των αρχείων των δεδομένων εβδομάδας, μπορούν να είναι είτε με απόλυτο
είτε με σχετικό μονοπάτι. Αν είναι με σχετικό μονοπάτι, θα γίνουν είσοδος από
τον τρέχον κατάλογο εργασίας (όχι τον κατάλογο τρεξίματος).

 Ο αριθμός των αρχείων δεδομένων εβδομάδας Ν (Week_Data_File_N) πρέπει να


είναι ίσος με τον αριθμό των εβδομάδων που είναι καταχωρημένες στο αρχείο
σεναρίου

 Πριν την κλήση του επιλυτή, εκτελείται η εντολή cd <Running Directory>

 Ο αριθμός των τυχαίων «σπόρων» (random seeds) μετά την επιλογή –rand μπορεί
να είναι είτε ένα είτε Ν. Αν δοθεί μόνο ένα θα χρησιμοποιηθεί για όλες τις
κλήσεις του επιλυτή.

 Ο επιλυτής μπορεί να θέλει να ξέρει πόση ώρα έχει για να λύσει κάθε αρχείο
δεδομένων εβδομάδας. Αυτή η τιμή θα μπορούσε να περάσει σε κάθε κλήση
επίλυσης χρησιμοποιώντας την επιλογή --timeout. Εάν έχει οριστεί το <Timeout
In Seconds> και το τρέχον λειτουργικό σύστημα είναι Linux ή Mac OS X, ο
προσομοιωτής θα μετρήσει επίσης τον χρόνο εκτέλεσης κάθε κλήσης επίλυσης
χρησιμοποιώντας την εντολή time -p και θα δώσει μια προειδοποίηση εάν ο
χρόνος λειτουργίας της κάθε επίλυσης υπερβεί τον επιτρεπόμενο χρόνο. Το
χρονικό όριο μετριέται ως χρόνος CPU.

Διπλωματική Εργασία 45
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Ο προσομοιωτής (simulator) λειτουργεί υπό την παραδοχή ότι ο επιλυτής (Solver) έχει
την ακόλουθη σύνταξη :

Solver_Executable --sce <Scenario_File> --his <Initial_History_File>


--week <Week_Data_File> --sol <Solution_File_Name>
[--cusIn <Custom_Input_File>]
[--cusOut <Custom_Output_File>]
[--rand <Random_Seed>]
[--timeout <Timeout_In_Seconds>]

Πίνακας 3.3 Τρόπος κλήσης του επιλυτή (Solver) σε γραμμή εντολών

Ο προσομοιωτής (Simulator) δημιουργεί τα ακόλουθα αρχεία στον κατάλογο <Output


Directory>:

 history-week0.<extension>, history-week1.<extension>, ..., history-


weekN.<extension>: αρχεία ιστορικού που δημιουργούνται από τον
προσομοιωτή μετά από κάθε κλήση του επιλυτή. Το <extension> ορίζεται με
βάση τo σχετικό αρχείο εισόδου (δηλαδή text ή xml ή json).

 custom-week0, custom-week1, ..., custom-weekN: Προκαθορισμένα αρχεία


που παράγονται από τον επιλυτή, αν έχει χρησιμοποιηθεί η παράμετρος --cus

 result-week0.txt, result-week1.txt, ..., result-weekN.txt: Αρχεία καταγραφής


για κάθε κλήση του επιλυτή

 Validator-results.txt: Τα αποτελέσματα του επικυρωτή (Validator)

Ο προσομοιωτής ζητά από τον επιλυτή να δημιουργήσει ένα αρχείο λύσης για κάθε
στάδιο. Αυτά τα αρχεία λύσεων βρίσκονται επίσης στον κατάλογο <Output_Directory>,
με τα ονόματα :

sol-week0.<extension>, sol-week1.<extension>,...., sol-weekN..<extension>.

Σημαντική σημείωση: ο προσομοιωτής (Simulator) και ο επικυρωτής (Validator) πρέπει


να βρίσκονται στον ίδιο κατάλογο.

Διπλωματική Εργασία 46
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Για παράδειγμα, μια γραμμή εντολών για τον προσομοιωτή (Simulator) θα μπορούσε να
είναι η:

java -jar Simulator.jar --his H0-n005w4-0.txt --sce Sc-n005w4.txt


--weeks WD-n005w4-2.txt WD-n005w4-0.txt WD-n005w4-2.txt WD-n005w4-1.txt
--solver ./solver.exe --runDir Devel/ --outDir Simulator_out/
--cus --rand 10 11 12 13 --timeout 10.5

Πίνακας 3.4 Παράδειγμα κλήσης του προσομοιωτή (Simulator) σε γραμμή εντολών

Η οποία παράγει τις ακόλουθες γραμμές εντολών (εφόσον ο τρέχων κατάλογος εργασίας
είναι ο : Data:

cd Devel

.\solver.exe --sce Data\Sc-n005w4.txt


--his Data\H0-n005w4-0.txt
--week Data\WD-n005w4-2.txt
--sol Data\Simulator_out\sol-week0.txt
--cusOut Data\Simulator_out\custom-week0
--rand 10 --timeout 10.5

.\solver.exe --sce Data\Sc-n005w4.txt


--his Data\history-week0.txt
--week Data\WD-n005w4-0.txt
--sol Data\Simulator_out\sol-week1.txt
--cusIn Data\Simulator_out\custom-week0
--cusOut Data\Simulator_out\custom-week1
--rand 11 --timeout 10.5

.\solver.exe --sce Data\Sc-n005w4.txt


--his Data\history-week1.txt
--week Data\WD-n005w4-2.txt
--sol Data\Simulator_out\sol-week2.txt
--cusIn Data\Simulator_out\custom-week1
--cusOut Data\Simulator_out\custom-week2
--rand 12 --timeout 10.5

.\solver.exe --sce Data\Sc-n005w4.txt


--his Data\ history-week2.txt
--week Data\WD-n005w4-1.txt
--sol Data\Simulator_out\sol-week3.txt
--cusIn Data\Simulator_out\custom-week2
--cusOut Data\Simulator_out\custom-week3
--rand 13 --timeout 10.5

Πίνακας 3.5 Παραγωγή γραμμών εντολών από προσομοιωτή (Simulator)

Διπλωματική Εργασία 47
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

3.6.2 Επικυρωτής (Validator)


Ο επικυρωτής είναι ένα Java πρόγραμμα που ελέγχει την εγκυρότητα μιας λύσης μιας
περίπτωσης (instance) και υπολογίζει την αντίστοιχη τιμή της αντικειμενικής συνάρτησης
σύμφωνα με τη μέθοδο αξιολόγησης και τα βάρη των περιορισμών (constraints) που
περιγράφονται στην Ενότητα 2.4. Ο επικυρωτής καλείται αυτόματα από τον προσομοιωτή
στο τέλος της διαδικασίας επίλυσης. Μπορεί επίσης να χρησιμοποιηθεί και ως αυτόνομο
πρόγραμμα με την ακόλουθη σύνταξη:

java -jar Validator.jar --sce <Scenario_File> --his


<Initial_History_File> --weeks <Week_Data_File_1> ….. <Week_Data_File_N>
--sols <Solution_File_1> .... <Solution_File_N> [--verbose]

Πίνακας 3.6 Τρόπος κλήσης του επικυρωτή (Validator) σε γραμμή εντολών

Εάν χρησιμοποιηθεί η επιλογή --verbose, εμφανίζονται λεπτομέρειες για την παραβίαση


κάθε χαλαρού περιορισμού για κάθε νοσηλευτή/τρια.

Για παράδειγμα, η γραμμή εντολών :

java -jar validator.jar --sce Data\n005w4\Sc-n005w4.xml


--his Data\n005w4\H0-n005w4-0.xml
--weeks Data\n005w4\WD-n005w4-1.xml Data\n005w4\WD-n005w4-2.xml
Data\n005w4\WD-n005w4-3.xml Data\n005w4\WD-n005w4-3.xml
--sols Data\n005w4\Solution_H_0-WD_1-2-3-3\Sol-n005w4-1-0.xml
Data\n005w4\Solution_H_0-WD_1-2-3-3\Sol-n005w4-2-1.xml
Data\n005w4\Solution_H_0-WD_1-2-3-3\Sol-n005w4-3-2.xml
Data\n005w4\Solution_H_0-WD_1-2-3-3\Sol-n005w4-3-3.xml

Πίνακας 3.7 Παράδειγμα κλήσης του επικυρωτή (Validator) σε γραμμή εντολών

Παράγει την ακόλουθη έξοδο (όπου M|T|W|T|F|S|S : οι μέρες της εβδομάδας Monday εώς
Sunday) και N|E|L αντίστοιχα οι βάρδιες Night, Early, Late δηλαδή στα ελληνικά Νύχτα,
Πρωί,Απόγευμα:

Διπλωματική Εργασία 48
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

|M|T|W|T|F|S|S| |M|T|W|T|F|S|S| |M|T|W|T|F|S|S| |M|T|W|T|F|S|S|


-----------------------------------------------------------------------
Patrick |N|-|E|E|E|L|L| |-|-|E|E|L|L|L| |-|N|N|N|N|N|N| |-|L|L|L|L|N|N|
Andrea |L|L|-|-|L|L|L| |N|N|N|N|N|-|L| |L|L|L|-|-|N|N| |N|N|N|-|-|E|E|
Stefaan |N|N|N|N|-|-|-| |E|E|L|L|-|-|E| |N|N|-|-|E|E|E| |N|N|-|-|-|L|L|
Sara |-|-|-|N|N|N|N| |N|-|-|-|E|E|E| |E|L|L|L|-|-|-| |E|E|E|E|E|-|-|
Nguyen |E|E|L|L|-|E|E| |L|L|-|L|N|N|N| |-|E|E|E|L|L|L| |-|L|L|N|N|N|N|

Hard constraint violations


--------------------------
Minimal coverage constraints: 0
Required skill constraints: 0
Illegal shift type succession constraints: 0
Single assignment per day: 0

Cost per constraint type


------------------------
Total assignment constraints: 320
Consecutive constraints: 465
Non working days constraints: 330
Preferences: 70
Max working weekend: 90
Complete weekends: 60
Optimal coverage constraints: 240
------------------------
Total cost: 1575

Πίνακας 3.8 Έξοδος κλήσης του επικυρωτή (Validator) για το παράδειγμα του Πίνακα 3.7

3.6.3 Εργαλείο σύγκρισης (Benchmark)


Το εργαλείο σύγκρισης (Benchmark) έχει σχεδιαστεί για να ελέγχει πόσο γρήγορα ο
υπολογιστής τρέχει τις διαδικασίες που εμπλέκονται στην κατασκευή της λύσης του
χρονοδιαγράμματος. Για κάθε μέγεθος προβλήματος, το οποίο ορίζεται ως ο αριθμός των
νοσηλευτών στο αρχείο σεναρίου, το πρόγραμμα δείχνει πόση ώρα μπορεί να εκτελείται ο
αλγόριθμος επίλυσης για κάθε στάδιο. Δεν είναι δυνατόν να δοθούν απόλυτα ισότιμοι
δείκτες αξιολόγησης για πολλές πλατφόρμες και αλγόριθμους, και μπορεί το εργαλείο να
είναι πιο ευνοϊκό σε μερικές περιπτώσεις από άλλες. Επισημαίνεται ότι για το τελικό
στάδιο του διαγωνισμού οι λύσεις των τελικών συμμετεχόντων έτρεξαν σε μια τυπική
μηχανή για λόγους ίσου ανταγωνισμού.

Το εργαλείο σύγκρισης είναι κατάλληλο μόνο για μεμονωμένα μηχανήματα ενός


επεξεργαστή (single processor machines). Δεν είναι κατάλληλο, για παράδειγμα, για
εξειδικευμένες παράλληλες μηχανές (parallel machines) ή συστήματα clusters. Σε γενικές
γραμμές, για μηχανήματα πολλαπλών πυρήνων (multi-core machines), επιτρέπεται να
χρησιμοποιείται ένας μόνο πυρήνας.

Διπλωματική Εργασία 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

Πίνακας 3.9 Έξοδος κλήσης του εργαλείου σύγκρισης (Benchmark)

3.6.4 Εργαλείο ελέγχου εφικτότητας (Feasibility Checker)


Θα μπορούσε να είναι πιθανό ότι κάποια περίπτωση (instance) που δημιουργήθηκε από
ένα δεδομένο σύνολο δεδομένων να είναι ανέφικτο να βρεθεί για αυτήν έγκυρη λύση.
Προκειμένου να αποφευχθεί η σπατάλη χρόνου των συμμετεχόντων για την αναζήτηση
εφικτών λύσεων όταν δεν υπάρχουν, παρεχόταν ένα εργαλείο ελέγχου εφικτότητας, το
οποίο λειτουργούσε σαν ένα web service και το οποίο πλέον δεν είναι προσβάσιμο.

Διπλωματική Εργασία 50
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

4. Τρόπος επίλυσης του προβλήματος – Αλγόριθμος

4.1 Είσοδος, Έξοδος δεδομένων


Μια πρώτη εργασία που έπρεπε να γίνει ήταν η είσοδος των παραμέτρων του
προβλήματος από τα αρχεία εισόδου. Τα αρχεία εισόδου δίνονται ως παράμετρος όταν ο
προσομοιωτής (Simulator) καλεί τον επιλυτή (Solver) για μία εβδομάδα. Θυμίζω τα
αρχεία εισόδου είναι :

 Αρχείο Σεναρίου (Scenario file) : Οι καθολικές παραμέτροι του προβλήματος.


 Αρχείο Δεδομένων εβδομάδας (Week Data file) : Οι απαιτήσεις για το προσωπικό
κάθε εβδομάδα (ένα αρχείο για κάθε εβδομάδα).
 Αρχείο Ιστορικού (History file) : Το αρχικό ιστορικό ή το ιστορικό εργασίας της
προηγούμενης εβδομάδας.

Ο διαγωνισμός INRC-II έδινε στην ιστοσελίδα του δοκιμαστικά αρχεία δεδομένων


(Datasets) και υπήρχαν τρεις (3) δυνατές μορφές για τα αρχεία εισόδου. Αυτές ήταν:

 Αρχεία κειμένου (text only files)


 Αρχεία XML
 Αρχεία JSON

Από αυτές τις μορφές επελέγη η μορφή 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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Μερικά τέτοια σχόλια (annotations) που υποστηρίζονται είναι:

 @XmlRootElement: Το όνομα του ριζικού στοιχείου XML προέρχεται από το


όνομα της κλάσης και μπορούμε επίσης να καθορίσουμε το όνομα του ριζικού
στοιχείου της XML χρησιμοποιώντας το χαρακτηριστικό του ονόματος.
Για παράδειγμα : @XmlRootElement(name = «Scenario»)

 @XmlType: ορίζει τη σειρά με την οποία εγγράφονται τα πεδία στο αρχείο XML

 @XmlElement: ορίζει το πραγματικό όνομα του στοιχείου XML που θα


χρησιμοποιηθεί.
Για παράδειγμα για το στοιχείο δεξιότητα : @XmlElement(name = «Skill»)

 @XmlElementWrapper : ορίζει μια ομάδα από XmlElements. Για παράδειγμα


μια λίστα πεδίων δεξιοτήτων : @XmlElementWrapper(name = «Skills»)

 @XmlAttribute: ορίζει ότι το πεδίο id αντιστοιχίζεται ως χαρακτηριστικό αντί για


στοιχείο. Για παράδειγμα για το XML πεδίο <Nurse Id=«Patrick»>
@XmlAttribute(name = «Id»)

 @XmlTransient: σχολιάζουμε πεδία που δεν θέλουμε να συμπεριληφθούν στην


XML
 @XmlAccessorType : ορίζει τα πεδία και τις ιδιότητες των κλάσεων Java που
χρησιμοποιεί η μηχανή JAXB για δέσμευση. Έχει τέσσερις τιμές:
PUBLIC_MEMBER, FIELD, PROPERTY και NONE.
Για παράδειγμα : @XmlAccessorType(XmlAccessType.FIELD)

Πληροφορίες για τα αρχεία XML από αυτά που δίνονται από τον διαγωνισμό INRC-II και
πως αυτά διαβάζονται από το πρόγραμμα δίνονται στα Παραρτήματα Α (η μορφή τους) &
Παράρτημα Δ (τρόπος διαβάσματος).

Με αντίστοιχο τρόπο γίνεται και η έξοδος δεδομένων γράφοντας σε αρχεία XML την
λύση από τα αντικείμενα Java χρησιμοποιώντας το Μarshalling. Η έξοδος είναι τα αρχεία
XML με την παραγόμενη λύση κάθε εβδομάδας τα οποία αρχεία χρησιμοποιεί ο
προσομοιωτής (Simulator) για την εκτέλεση της λύσης στον συνολικό ορίζοντα
προγραμματισμού και ο επικυρωτής (Validator) για την αξιολόγηση των λύσεων.

Διπλωματική Εργασία 52
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

4.2 Προεπεξεργασία δεδομένων


Αφού γίνει η ανάγνωση των αρχείων δεδομένων εισόδου τα δεδομένα αποθήκευονται στα
αντίστοιχα αντικείμενα κλάσεων Java. Δηλαδή στα αντικείμενα :

 scenario : για τα δεδομένα εισόδου από το αρχείο σεναρίου (scenario file)


 history : για τα δεδομένα εισόδου από το αρχείο ιστορικού (history file)
 weekdata : για τα δεδομένα εισόδου από το αρχείο δεδομένων εβδομάδας (week
data file)

Έτσι μπορούμε να έχουμε πρόσβαση οποιαδήποτε στιγμή θέλουμε σε όλα τα δεδομένα


εισόδου χωρίς να χρειάζεται να ξαναδιαβάζουμε τα αρχεία εισόδου. Τα αντικείμενα αυτά
δίνονται ως παράμετροι στις διάφορες συναρτήσεις.

Ακολούθως δημιουργούνται κάποιες λίστες που χρησιμεύουν παρακάτω στον αλγόριθμο.


Η λίστα SkillNurses είναι μια ArrayList και περιέχει για κάθε δεξιότητα (που είναι το
στοιχείο 0 της λίστας) ποιες νοσηλεύτριες έχουν την συγκεκριμένη δεξιότητα ώστε να
είναι εύκολη η πρόσβαση και να μην γίνεται αναζήτηση στα δεδομένα εισόδου κάθε
φορά.

Επίσης δημιουργείται η λίστα 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
εβδομάδων) μιας και εξετάζουν τους χαλαρούς περιορισμούς που αφορούν τον συνολικό
ορίζοντα προγραμματισμού (συνολικές αναθέσεις & συνολικά εργαζόμενα
σαββατοκύριακα).

4.3 Φάση 1η Αλγορίθμου – Εύρεση αρχικής έγκυρης λύσης


Σε αυτήν την πρώτη φάση του αλγορίθμου ο αλγόριθμος βρίσκει μια πρώτη έγκυρη λύση
η οποία όμως έχει κάποια χαρακτηριστικά ώστε να μην είναι απλά μια τυχαία έγκυρη
λύση αλλά μια καλή έγκυρη λύση. Για αυτό μάλιστα η συγκεκριμένη φάση επειδή δεν
έχει μεγάλη χρονική απαίτηση επαναλαμβάνεται για ένα πεπερασμένο αριθμό
επαναλήψεων, έστω 100 φορές. Στο τέλος των επαναλήψεων επιλέγεται η λύση με την
καλύτερη τιμή στην αντικειμενική συνάρτηση, δηλαδή την μικρότερη τιμή στο σύνολο
των ποινών – βαρών των χαλαρών περιορισμών (soft constraints).

Για να κατασκευαστεί αυτό το πρώτο έγκυρο πρόγραμμα για την εβδομάδα πηγαίνουμε
σειριακά ανά ημέρα ξεκινώντας από την Δευτέρα και φτάνοντας μέχρι την Κυριακή.
Γίνονται αναθέσεις εξετάζοντας ταυτόχρονα και τους τύπους βάρδιας και τις δεξιότητες.
Καλείται η συνάρτηση find_week_coverage χρησιμοποιώντας την παράμετρο counter=0
(που σημαίνει ημέρα Δευτέρα) για να φτιάξει το πρόγραμμα της εβδομάδας.

Η συγκεκριμένη συνάρτηση find_week_coverage αρχίζει ξεκινώντας από την ημέρα


counter (εφόσον είναι η έναρξη του αλγορίθμου μιλάμε για την ημέρα 0 – Δευτέρα) και
βρίσκει για κάθε μέρα τις ελάχιστες κάλυψεις που απαιτούν τα δεδομένα της εβδομάδας
για κάθε τύπο βάρδιας και δεξιότητας (προκειμένου να ικανοποιηθεί ο αυστηρός

Διπλωματική Εργασία 54
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

περιορισμός H2 – ελάχιστη κάλυψη βάρδιας & δεξιότητας). Στη συνέχεια για κάθε τέτοιο
συνδυασμό όπου η κάλυψη είναι μεγαλύτερη του μηδέν καλεί την συνάρτηση
findNurseByLastDay τόσες φορές, όσες είναι οι απαιτούμενες βάρδιες. Εφόσον
τελείωσει με μία μέρα (π.χ. την Δευτέρα) πάει στην επόμενη Τρίτη, Τετάρτη κλπ.

Η συνάρτηση findNurseByLastDay είναι αυτή που επιστρέφει μια νοσηλεύτρια για την
ανάθεση που ζητείται για τον συγκεκριμένο τύπο βάρδιας και δεξιότητας. Ο τρόπος που
δουλεύει είναι ο εξής: πάει και βρίσκει την προηγούμενη μέρα αν υπάρχει κάποια
νοσηλεύτρια που έχει ανάθεση με τον συγκεκριμένο τύπο βάρδιας για τον οποίο
αναζητούμε ανάθεση. Ο λόγος που γίνεται αυτή η αναζήτηση είναι μιας και από μελέτη
των δεδομένων προέκυψε ότι μια τέτοια σειρά από ίδιες βάρδιες δίνει καλά αποτελέσματα
τελικά.

Στην συνέχεια καλεί την συνάρτηση check_max_days η οποία επιστρέφει μια τιμή
Boolean που όταν είναι true σημαίνει ότι η νοσηλεύτρια έχει ξεπεράσει τον περιορισμό
των συνεχόμενων εργάσιμων ημερών. Οπότε στην περίπτωση που βρεθεί μία που έχει
στην χθεσινή ημέρα κάνει τέτοια βάρδια αλλά έχει περάσει το όριο των max_days πρέπει
να επιλεγεί μια άλλη νοσηλεύτρια. Αφού γίνει έλεγχος για το αν υπάρχει τέτοια για την
προηγούμενη μέρα τότε επιλέγεται η κατάλληλη διαφορετικά επιλέγεται μια στην τύχη.
Για να μην μπει ο αλγόριθμος σε ατέρμονο βρόχο (loop) χρησιμοποιείται η λίστα
ArrayList checkednurses που κρατάει ποιες νοσηλεύτριες έχουμε ελέγξει.

Ακολούθως ελέγχεται η συγκεκριμένη ανάθεση αν τηρεί τους αυστηρούς περιορισμούς


Η1 (μια ανάθεση ανά ημέρα) & Η3 (απαγορευμένες διαδοχές βάρδιας), αφού οι H2
(ελάχιστη κάλυψη) & H4 (απαιτούμενη δεξιότητα) ελέγχονται ουσιαστικά από τη
διαδικασία του αλγόριθμου έτσι κι αλλιώς. Στην περίπτωση που τηρεί του περιορισμούς
H1 & H3 τότε επιλέγεται αυτή η νοσηλεύτρια για την ανάθεση, διαφορετικά επιλέγεται
μια άλλη στην τύχη με την συνάρτηση findNurse.

Η τιμή που η συνάρτηση find_week_coverage επιστρέφει είναι μια ArrayList και αυτή
είναι μια λίστα με όσες αναθέσεις έχουν πρόβλημα, αν τυχόν για μια συγκεκριμένη ημέρα
δεν μπορέσει να βρεθεί μια κατάλληλη νοσηλεύτρια που να ικανοποιεί τους αυστηρούς
περιορισμούς. Σε αυτή την περίπτωση υπάρχει αδιέξοδο οπότε για να λυθεί το αδιέξοδο
πρώτα καλώντας την συνάρτηση remove_from_assigns αφαιρούμε τις αναθέσεις από την
προηγούμενη μέρα και πέρα από αυτήν από την οποία υπάρχει πρόβλημα και μετά
τρέχουμε ξανά την συνάρτηση find_week_coverage για αυτή την προηγούμενη μέρα (με

Διπλωματική Εργασία 55
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

παράμετρο π.χ. για την Τετάρτη counter=2). Αν τυχόν πάλι έχουμε αδιέξοδο τότε
πηγαίνουμε μία μέρα πίσω κάθε φορά μέχρι να λυθεί το αδιέξοδο.

Στο τέλος αφού έχουμε μια πρώτη έγκυρη λύση υπολογίζουμε την συνολική ποινή της με
την συνάρτηση Check_Soft_Constraints και αποθηκεύουμε αυτή την τιμή στον πίνακα
finalsoftpenalty ενώ ο πίνακας finalsolutions περιέχει τις λύσεις κάθε φορά μέχρι το τέλος
των επαναλήψεων (έστω 100). Όταν τελειώσουν οι επαναλήψεις βρίσκουμε ποια είναι η
λύση με την καλύτερη συνολική ποινή και την κρατάμε αφού αυτή περνάει σαν
παράμετρος στην δεύτερη φάση του αλγορίθμου.

4.4 Φάση 2η Αλγορίθμου – Βελτίωση της αρχικής λύσης


Στην συνέχεια αφού έχουμε βρει μια πρώτη «καλή» έγκυρη λύση περνάμε στην δεύτερη
φάση που είναι η φάση που βελτιώνεται η λύση αυτή.

Στις επόμενες μεθοδολογίες προκειμένου να είναι εύκολη η διαχείριση των αναθέσεων


αφού μέχρι τώρα οι αναθέσεις βρίσκονται σε μια ArrayList με αναθέσεις χρησιμοποιείται
ένας πίνακας assigns_matrix ο οποίος περιέχει το σύνολο των αναθέσεων. Στις γραμμές
του πίνακα έχουμε κάθε νοσηλεύτρια για την οποία υπάρχει ανάθεση μέσα στην
εβδομάδα ενώ οι στήλες του πίνακα περιέχουν τις μέρες ξεκινώντας από Δευτέρα μέχρι
και την Κυριακή. Κάθε κελί του είναι μια ανάθεση (αντικείμενο Assignment). Υπάρχουν
οι ακόλουθες συνάρτησεις σχετικές με τον πίνακα αυτό:

 create_assigns_matrix : η συνάρτηση που δημιουργεί τον πίνακα assigns_matrix


από μία λύση
 solution_from_assigns_matrix : η οποία από έναν τέτοιο πίνακα assigns_matrix
δίνει σαν έξοδο μια λύση (προκειμένου για παράδειγμα να γίνει έλεγχος αυτής για
κάποιον αυστηρό ή χαλαρό περιορισμό)
 copy_solution_by_matrix : η οποία κάνει αντιγραφή μιας λύσης σε μια άλλη μέσω
του πίνακα
 print_matrix : η οποία τυπώνει τον πίνακα αναθέσεων της εβδομάδας
(χρησιμοποιείται για λόγους debugging)
 print_final_ratio_matrix_days : η οποία τυπώνει τον πίνακα αναθέσεων της
εβδομάδας μαζί με τις συνολικές αναθέσεις που υπάρχουν αναλογικά (επίσης
χρησιμοποιείται για λόγους debugging)

Διπλωματική Εργασία 56
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Χρησιμοποιείται επίσης ο πίνακας nurses_matrix που κρατά λίστα με τις νοσηλεύτριες


του προβλήματος και του οποίου η σειρά των νοσηλευτριών στις γραμμές του είναι ίδια
με του πίνακα assigns_matrix.

Η πρώτη βελτίωση αφορά τον χαλαρό περιορισμό S1 για την κάλυψη των βέλτιστων
αναθέσεων σε βάρδια. Χρησιμοποιείται η ακόλουθη συνάρτηση :

 Find_Optimal_Coverage : βελτιώνει την λύση προσθέτοντας κάποιες από τις


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

Στο δεύτερο σημείο καλείται για 3 επαναλήψεις η συνάρτηση : fix_total_assigns_new η


οποία αφορά τον περιορισμό S6 για τις συνολικές αναθέσεις και η οποία βρίσκει για κάθε
νοσηλευτή χρησιμοποιώντας την συνάρτηση find_extra_max_days πόσες ημέρες
παραπάνω από το όριο των μέγιστων εργάσιμων ημερών για τον συνολικό ορίζοντα
προγραμματισμού δουλεύει. Για τις εβδομάδες εκτός της τελευταίας οι ημέρες βγαίνουν
αναλογικά ώστε να βρεθεί αν θα ξεπεράσουν το συνολικό όριο. Με ένα αριθμό
επαναλήψεων γίνεται μετακίνηση των αναθέσεων της νοσηλεύτριας με την μεγαλύτερη
παραβίαση του παραπάνω ορίου σε μια άλλη για να μην υπάρχει παραβίαση του
περιορισμού.

Ακολούθως εκτελούνται συναρτήσεις για την περαιτέρω βελτίωση της λύσης που έχει
βρεθεί και συγκεκριμένα οι παρακάτω συναρτήσεις :

 fix_nurses_preferences : βελτιώνει την λύση όσον αφορά τον χαλαρό περιορισμό


S4 για τις προτιμήσεις μη εργασίας για τις νοσηλεύτριες, εφόσον αυτές μπορούν
να μεταφερθούν σε άλλη νοσηλεύτρια που δεν εργάζεται ή έχει άλλου τύπου
βάρδια. Αν θα γίνει πάλι αυτή η αποδοχή εξαρτάται από την ποινή που επιφέρει
στη συνολική λύση.
 fix_max_weekends : βελτιώνει την λύση ελέγχοντας τον περιορισμό για τον
περιορισμό S7 για τον μέγιστο αριθμό των εργαζόμενων σαββατοκύριακων.
Κάνει τον έλεγχο με εξαίρεση την πρώτη εβδομάδα που κάτι τέτοιο δεν έχει
νόημα. Χρησιμοποιεί την συνάρτηση nurse_over_max_weekends για να ελέγξει αν
η νοσηλεύτρια έχει περάσει το όριο των μέγιστων εργαζόμενων
σαββατοκύριακων. Εφόσον το έχει ξεπεράσει τότε μετακινεί τις αναθέσεις του

Διπλωματική Εργασία 57
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

σαββατοκύριακου της σε μια άλλη που δεν έχει ξεπεράσει το όριο για τα
σαββατοκύριακα.
 fix_complete_weekends : Βελτιώνει την λύση ελέγχοντας τον χαλαρό περιορισμό
S5 για όσες νοσηλεύτριες έχουν τον κανόνα complete_weekend=1 και δουλεύουν
μία από τις δύο ημέρες του σαββατοκύριακου. Σύμφωνα με τον περιορισμό όταν
complete_weekend=1, τότε θα πρέπει να δουλεύουν ή και τις δύο μέρες του
σαββατοκύριακου ή καμία. Σε αυτές τις περιπτώσεις μετακινεί μέρες που είναι
μόνες τους (π.χ. το Σάββατο) σε άλλη νοσηλεύτρια που δουλεύει μόνο Κυριακή ή
και το ανάποδο.

Ακολούθως υπάρχει μια ομάδα επόμενων συναρτήσεων οι οποίες εκτελούνται για μικρό
αριθμό επαναλήψεων (έστω 3 φορές).

 improve_for_single_workday : βελτιώνει την λύση βρίσκοντας στο πρόγραμμα


αναθέσων ημέρες εργασίας που είναι μόνες τους και έχουν μία μέρα μη εργασίας
(day off) πριν και μετά από αυτές, οπότε μετακινεί αυτή την μονή μέρα εργασίας
αλλού
 improve_for_single_dayoff : βελτιώνει την λύση βρίσκοντας στο πρόγραμμα
αναθέσων ημέρες μη εργασίας που είναι μόνες τους και έχουν μία μέρα εργασίας
πριν και μετά από αυτές, οπότε μετακινεί αυτή την πρώτη μέρα εργασίας αλλού.
Τα παραπάνω προέκυψαν μελετώντας τα δεδομένα και τις απαιτήσεις του
προβλήματος.

Ακολούθως υπάρχουν κάποιες συναρτήσεις που καλούνται επίσης για


πεπερασμένο αριθμό επαναλήψεων (έστω 3) εμπνευσμένες από τον αλγόριθμο
αναζήτης μεταβλητής γειτονιάς [Τassopoulos Ι., Solos Ι., Beligiannis G., (2015)] οι
οποίες επίσης κάνουν ανταλλαγές (swaps) μεταξύ νοσηλευτριών για τύπους
βάρδιας και δεξιότητες ταυτόχρονα. Οι συναρτήσεις ανταλλαγών είναι :
 Ομάδα συναρτήσεων ανταλλαγής ανά νοσηλευτή
1. exchange_dayoff_with_work_per_nurse : ανταλλάσει ημέρες μη
εργασίας (days off) με μέρες εργασίας στην ίδια ημέρα (vertically στον
πίνακα assigns_matrix). Επιλέγει την καλύτερη τιμή συνολικής ποινής
αφού κάνει τις ανταλλαγές για κάθε νοσηλευτή, οπότε στον επόμενο
αρχίζει ξανά η διαδικασία.

Διπλωματική Εργασία 58
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

2. exchange_work_with_work_per_nurse : ίδιο με προηγούμενο αλλά


γίνονται ανταλλαγές εργάσιμων ημερών με εργάσιμες ημέρες.
3. exchange_anything_per_nurse : ίδιο με το πρώτο αλλά ανταλλάσει
οποιαδήποτε ανάθεση χωρίς να εξετάζει αν είναι ημέρα εργασίας ή
ρεπό
 Ομάδα συναρτήσεων ανταλλαγής ανά ημέρα. Υπάρχουν αντίστοιχα οι :
1. exchange_dayoff_with_work_per_day
2. exchange_work_with_work_per_day
3. exchange_anything_per_day

Η διαφορά με την προηγούμενη ομάδα συναρτήσεων είναι ότι η εξέταση της


μικρότερης ποινής γίνεται στο τέλος κάθε ημέρας, αφού γίνουν οι ανταλλαγές
για όλους τους νοσηλευτές.

 Ομάδα συναρτήσεων ανταλλαγής για τη συνολική εβδομάδα. Υπάρχουν


αντίστοιχα οι :
1. exchange_dayoff_with_work_per_week
2. exchange_work_with_work_per_week
3. exchange_anything_per_week
Η διαφορά με τις προηγούμενες ομάδες συναρτήσεων είναι ότι η εξέταση της
μικρότερης ποινής γίνεται στο τέλος όλου του πλάνου της εβδομάδας, αφού γίνουν
οι ανταλλαγές για όλους τους νοσηλευτές.

Έτσι μετά από όλες αυτές τις συναρτήσεις έχουμε μια όσον το δυνατόν βέλτιστη λύση και
μας μένει να την κρατήσουμε άρα στο τέλος η λύση γράφεται σε ένα XML αρχείο
χρησιμοποιώντας την βιβλιοθήκη JAXB (Marshalling).

Διπλωματική Εργασία 59
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

5. Αποτελέσματα αλγορίθμου και σύγκριση με συμμετέχοντες


διαγωνισμού

5.1 Τρόπος αξιολόγησης του διαγωνισμού INRC-II

5.1.1 Όροι (rules) του διαγωνισμού


Καταρχήν για τον Δεύτερο Διεθνή Διαγωνισμό Κατασκευής Προγράμματος
Νοσηλευτικών Βαρδιών (INRC-II) υπήρχαν κάποιοι όροι που έπρεπε να τηρηθούν από
τους συμμετέχοντες σε αυτόν. Μερικοί αξιοσημείωτοι που θα πρέπει να αναφέρουμε
(πέρα από τους τυπικούς π.χ. ότι οι συμμετέχοντες πρέπει να τηρούν τους όρους κλπ)
είναι:

 Κανόνας 4 : Οι συμμετέχοντες μπορούν να χρησιμοποιήσουν οποιαδήποτε


γλώσσα προγραμματισμού. Η χρήση λογισμικού τρίτων επιτρέπεται σύμφωνα με
τυς ακόλουθους περιορισμούς :
 είναι ελεύθερο λογισμικό
 η συμπεριφορά του είναι (εύλογα) τεκμηριωμένη.
 τρέχει κάτω από ένα λειτουργικό σύστημα ευρέως διαδεδομένο
(Unix/Linux, Windows ή Mac OS X).
 Κανόνας 5 : Οι συμμετέχοντες πρέπει να αξιολογήσουν το μηχάνημά τους με το
πρόγραμμα που παρέχεται (εργαλείο Benchmark) για να γνωρίζουν πόσο χρόνο
έχουν διαθέσιμο για να εκτελέσουν το πρόγραμμά τους για κάθε στάδιο στο
μηχάνημα τους. Ο επιλυτής (Solver) πρέπει να τρέχει σε έναν μόνο πυρήνα της
μηχανής (single core).
 Κανόνας 6: Ο επιλυτής πρέπει να λάβει ως είσοδο τα αρχεία εισόδου σε μία από
τις μορφές που περιγράφονται και να παράγει ως έξοδο μια λίστα από αρχεία
λύσεων για όλα τα στάδια – εβδομάδες (στην ίδια μορφή). Θα πρέπει να το κάνει
εντός του επιτρεπόμενου χρόνου εκτέλεσης CPU.
 Κανόνας 7 : Ο επιλυτής που χρησιμοποιείται θα πρέπει να είναι το ίδιο εκτελέσιμο
για όλες τις εβδομάδες, αλλά προφανώς εσωτερικά θα μπορούσε να εκμεταλλευτεί
τις πληροφορίες σχετικά με την εβδομάδα που λύνει και να προσαρμόσει τη
συμπεριφορά του ανάλογα με αυτήν.

Διπλωματική Εργασία 60
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 Κανόνας 9 : Μαζί με τη λύση για κάθε περίπτωση, οι συμμετέχοντες θα πρέπει


επίσης να υποβάλουν μια συνοπτική και σαφή περιγραφή του αλγορίθμου τους,
ώστε κατ' αρχήν άλλοι να μπορούν να τον εφαρμόσουν.
 Κανόνας 10 : Ένα σύνολο 5 φιναλιστ θα επιλεγεί μετά τη λήξη της προθεσμίας
του διαγωνισμού. Η σειρά των συμμετεχόντων θα βασίζεται στις βαθμολογίες που
καθορίστηκαν στις παρεχόμενες περιπτώσεις (instances). Η πραγματική λίστα θα
βασίζεται στην κατάταξη των επιλυτών σε κάθε μεμονωμένη περίπτωση. Ο μέσος
μέσος όρος των κατατάξεων θα δίνει την λίστα των τελικών θέσεων.
Περισσότερες λεπτομέρειες για την βαθμολόγηση και κατάταξη δίνεται παρακάτω.
 Κανόνας 11 : Οι φιναλιστ θα κληθούν να παράσχουν το εκτελέσιμο αρχείο που θα
τρέξει και θα δοκιμαστεί από τους διοργανωτές. Οι επιλυτές των φιναλιστ θα
τρέξουν από τους διοργανωτές του διαγωνισμού σε νέες περιπτώσεις - instances
(συμπεριλαμβανομένων νέων συνόλων δεδομένων - datasets). Είναι ευθύνη του
συμμετέχοντος να διασφαλίσει ότι παρέχονται όλες οι πληροφορίες που θα
επιτρέψουν στους διοργανωτές να αναδημιουργήσουν την λύση. Εάν δεν ληφθούν
οι κατάλληλες πληροφορίες ή πράγματι οι λύσεις που υποβλήθηκαν δεν μπορούν
να αναδημιουργηθούν, ένας άλλος φιναλιστ επιλέγεται από τους αρχικούς
συμμετέχοντες.

5.1.2 Τρόπος βαθμολόγησης και κατάταξης στον διαγωνισμό


Η διαδικασία βαθμολόγησης και κατάταξης που ακολουθήθηκε βασίστηκε στον πρώτο
Διεθνή Διαγωνισμό INRC-I (2010) αλλά και σε άλλους παρόμοιους διαγωνισμούς.
Ουσιαστικά δημιουργείται ένας πίνακας όπου γραμμές είναι οι συμμετέχοντες και στήλες
είναι οι διαφορετικές περιπτώσεις (instances) για τις οποίες δοκιμάζεται ο επιλυτής του
κάθε συμμετέχοντα. Στα κελιά του πίνακα βάζουμε την τιμή της αντικειμενικής
συνάρτησης (το σύνολο των ποινών των χαλαρών περιορισμών). Σε περίπτωση που ο
συμμετέχων παρέχει για μια περίπτωση μια μη έγκυρη λύση ή δεν την παρέχει καθόλου,
τότε εκχωρείται μια συμβατική τιμή M η οποία είναι μεγαλύτερη από όλα τα
αποτελέσματα που παρείχαν οι άλλοι συμμετέχοντες για εκείνη την περίπτωση.
Παρακάτω στον Πίνακα 5.1 φαίνεται παράδειγμα πίνακα με 7 συμμετέχοντες και 6
περιπτώσεις επίλυσης.

Διπλωματική Εργασία 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: Παράδειγμα βαθμολογιών των λύσεων που υποβλήθηκαν

Ο πίνακας X των αποτελεσμάτων μετατρέπεται σε έναν πίνακα βαθμών R που αποδίδει σε


κάθε κελί μια τιμή από 1 έως k, όπου k ο αριθμός των συμμετεχόντων. Δηλαδή στην
μικρότερη ποινή δίνεται ο βαθμός 1 στην αμέσως μεγαλύτερη ο βαθμός 2 και συνεχίζει
έτσι μέχρι το k που έχει την μεγαλύτερη τιμή. Χρησιμοποιούνται μέσοι βαθμοί σε
περίπτωση ισοπαλιών (για παράδειγμα ισοπαλία μεταξύ των 2 πρώτων μπαίνει και στους
δύο κατάταξη 1.5). Παρακάτω ο πίνακας 5.2 δείχνει την σειρά κατάταξης για το
παράδειγμα του πίνακα 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

Πίνακας 5.3: Πίνακας μέσων όρων κατάταξης

Ο νικητής είναι αυτός με το μικρότερο μέσο όρο. Σε περίπτωση ισοβαθμίας, μία δοκιμή
προστίθεται για όλες τις περιπτώσεις μέχρι να βρεθεί ένας μοναδικός νικητής.

5.2 Τελικοί συμμετέχοντες (finalists) στον διαγωνισμό


Στο Δεύτερο Διεθνή Διαγωνισμό Κατασκευής Προγράμματος Νοσηλευτικών Βαρδιών
(INRC-II) υπεβλήθησαν 15 εμπρόθεσμες συμμετοχές. Από την ιστοσελίδα του
διαγωνισμού (http://mobiz.vives.be/inrc2/?page_id=226) αναφέρεται ότι:

Η διαδικασία επιλογής για την εκλογή των φιναλίστ ήταν η εξής: πρώτα κατατάξαμε τους
διαγωνιζόμενους αποκλειστικά με βάση τα υποβληθέντα αποτελέσματα μόνο, μετά
αρχίσαμε να τρέχουμε τους αλγόριθμους για τους πέντε πρώτους και μετά έναν προς έναν,
έως ότου η διαφορά με τον επόμενο διαγωνιζόμενο να είναι θετική, τόσο για τα
υποβληθέντα αποτελέσματα όσο και για τα επικυρωμένα αποτελέσματά μας. Καταλήξαμε
με 7 φιναλίστ για την κρυφή φάση. (Σ.Σ. Δηλαδή οι επιλυτές (Solvers) τους δοκιμάστηκαν
σε κάποιες κρυφές περιπτώσεις - instances).

Στον πίνακα 5.4 φαίνονται οι περιπτώσεις στις οποίες έγινε εξέταση των τελικών
συμμετοχόντων τόσο για τις τελευταίες περιπτώσεις (Late Instances) όσο και τις κρυφές
(Hidden Instances). Φαίνονται ο αριθμός νοσηλευτριών (Nurses) όπου έγινε εξέταση σε
αυτές τις περιπτώσεις, ο αριθμός των εβδομάδων (Weeks), δεξιοτήτων (Skills), Τύπων
βαρδιών (Shifts) καθώς και ο αριθμός των συμβάσεων εργασίας (Contracts).

Διπλωματική Εργασία 63
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Περιπτώσεις Νοσηλεύτριες (Nurses) Εβδομάδες Δεξιότητες Τύποι Συμβάσεις


(Instances) (Weeks) (Skills) βάρδιας εργασίας
(Shifts) (Contracts)
Τελευταίες
30,40,50,60,80,100,120 4,8 4 4 3,4
Late
Κρυφές
35,70,110 4,8 4 4 3,4
Hidden

Πίνακας 5.4: Πίνακας χαρακτηριστικών τελευταίων και κρυφών περιπτώσεων (instances)

Ενδεικτικά οι τελικοί φιναλιστ του διαγωνισμού INRC-II (σύμφωνα με τον μέσο όρο
κατάταξης στις κρυφές περιπτώσεις – instances) ήταν :

1. Μέσος όρος κατάταξης (1.76): NurseOptimizers, Michael Römer, Taieb


Mellouli, Institute of Business Information Systems and Operations Research,
Martin Luther University Halle-Wittenberg

2. Μέσος όρος κατάταξης (1.86): Polytechnique Montreal, Legrain Antoine, Omer


Jérémy, Rosat Samuel, Polytechnique Montreal

3. Μέσος όρος κατάταξης (2.84): SSHH, Ahmed Kheiri, University of Exeter

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

6. Μέσος όρος κατάταξης (6.13): LabGOL, Federica Picca Nicolino, Francesco


Bagattini, Luca Bravi, Niccolò Bulgarini, Alessandro Galligari, Fabio
Schoen, Università degli Studi di Firenze, Italy

7. Μέσος όρος κατάταξης (6.32): ThreeJohns, Tassopoulos X. Ioannis, Solos P.


Ioannis, Beligiannis N. Grigorios, University of Patras, Greece

Διπλωματική Εργασία 64
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

5.3 Παραδείγματα περίπτωσεων λύσης τελικών συμμετοχόντων


διαγωνισμού

5.3.1 Περίπτωση λύσης NurseOptimizers (1η σε κατάταξη)


Η ομάδα NurseOptimizers - που ήταν και οι νικητές του διαγωνισμού - αντιμετώπισαν το
πρόβλημα διατυπώνοντάς το ως ένα πρόβλημα Μεικτού Ακέραιου Γραμμικού
Προγραμματισμού (Mixed Integer Linear Programming – MILP) βασισμένο σε ροή
δικτύου που λύθηκε άμεσα από τον επιλύτη ανοιχτού κώδικα Coin CBC χωρίς να
καταφύγει σε προσεγγίσεις αποσύνθεσης όπως ο αλγόριθμος Branch-and-Price.

Η διατύπωσή τους μπορεί να χαρακτηριστεί ως μια σύνθεση MILP ροής πολλών ειδών
που βασίζεται σε δίκτυα διευρυμένα από την κατάσταση τους (ο όρος στα αγγλικά είναι
multi-commodity flow MILP based on stated-expanded networks) και παρόμοιες
διατυπώσεις έχουν χρησιμοποιηθεί στο πλαίσιο του χρονοπρογραμματισμού του
πληρώματος αεροπορικών εταιρειών.

Κάθε νοσηλευτής σχετίζεται με ένα κατευθυνόμενο ακυκλικό επίπεδο δικτύου στο οποίο
οι κατευθυνόμενες ακμές αντιστοιχούν σε αναθέσεις βάρδιας εργασίας και μη εργασίας
(day off). Μια ροή από την πηγή μέχρι τον τελικό προορισμό σε αυτό το στρώμα δικτύου
μπορεί να ερμηνευθεί ως κατανομή νοσηλευτικών βαρδιών (roster). Το δίκτυο
επεκτείνεται σε καταστάσεις με τρόπο ώστε κάθε κόμβος να συσχετίζεται όχι μόνο με
έναν δείκτη ώρας και βάρδιας αλλά και με πληροφορίες κατάστασης που απαιτούνται για
την αξιολόγηση ενός υποσυνόλου κανόνων (κυρίως κανόνες που αφορούν τμήματα από
ημέρες εργασίας και ημέρες μη εργασίας (days off).

Κατά συνέπεια, κάθε εκχώρηση βάρδιας σχετίζεται με πολλαπλές ακμές στο δίκτυο που
προέρχονται από διαφορετικούς κόμβους καταστάσεων. Oι εξαρτώμενες από κατάσταση
ποινές των χαλαρών κανόνων σχετίζονται με τις μεταβλητές ροής. Οι κανόνες που δεν
είναι ενσωματωμένοι στο δίκτυο (δηλαδή οι κανόνες που αφορούν τον συνολικό αριθμό
εργασιών και τα συνολικά εργαζόμενα Σαββατοκύριακα) ελέγχονται από
συμπληρωματικούς περιορισμούς. Το μοντέλο θεωρεί την ανάθεση βαρδιών εργασίας και
μη εργασίας (days off) να γίνεται ξεχωριστά για κάθε νοσηλευτή. Προκειμένου να μειωθεί
η συμμετρία του μοντέλου, η ανάθεση της δεξιότητας (Skill) στην οποία εργάζεται μια
νοσηλεύτρια αντιμετωπίζεται από ένα συγκεντρωτικό στοιχείο μοντέλου. Η λεπτομερής
ανάθεση δεξιοτήτων εκτελείται στη συνέχεια σε ένα στάδιο μεταεπεξεργασίας.

Διπλωματική Εργασία 65
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Ενώ η σκιαγραφημένη διατύπωση οδηγεί σε συγκριτικά μεγάλες περιπτώσεις μοντέλων


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

Πραγματοποιήθηκε μια εκτεταμένη δοκιμή με διαφορετικές ρυθμίσεις παραμέτρων του


επιλυτή CBC που χρησιμοποιήθηκε για την επίλυση των περιπτώσεων του μοντέλου
MILP προκειμένου να επιτευχθούν έγκυρες λύσεις υψηλής ποιότητας σε σύντομο χρονικό
διάστημα. Για παράδειγμα, ο επιλύτης χρησιμοποιεί τον επιλύτη φραγμού για τη
χαλάρωση γραμμικού προγραμματισμού (LP relaxation), η προεπεξεργασία και η ισχυρή
διακλάδωση απενεργοποιούνται και τα ευρετικά κατάδυσης (diving heuristics) είναι
ενεργοποιημένα.

Προκειμένου να χειριστεί το χαρακτηριστικό των πολλαπλών σταδίων σε συνδυασμό με


την αβεβαιότητα σχετικά με τις μελλοντικές απαιτήσεις και επιθυμίες στα χαρακτηριστικά
του διαγωνισμού INRC-II, ο επιλυτής χρησιμοποιεί μια ντετερμινιστική προσέγγιση
κοιτώντας μπροστά: Χρησιμοποιώντας τεχνητά παραγόμενα δεδομένα ζήτησης, η
περίοδος προγραμματισμού παρατείνεται κατά μια περίοδο προσμονής (anticipation
period). Η δημιουργία δεδομένων ζήτησης χρησιμοποιεί γνωστές πληροφορίες ζήτησης
από την τρέχουσα εβδομάδα προγραμματισμού και από τις προηγούμενες εβδομάδες.

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

Διπλωματική Εργασία 66
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

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

Στον διαγωνισμό ο συγκεκριμένος επιλυτής κατετάγη πρώτος τόσο στις γνωστές


τελευταίες περιπτώσεις όσο και στις κρυφές περιπτώσεις στον διαγωνισμό με μέση
κατάταξη 1,76 στις κρυφές. Εξετάζοντας τις λεπτομέρειες των αποτελεσμάτων, μπορεί
κανείς να παρατηρήσει ότι ο συγκεκριμένος επιλυτής βρήκε την καλύτερη λύση σε 394
από 600 εκτελέσεις. Σε 36 τρεξίματα, ωστόσο, ο επιλυτής δεν βρήκε μια έγκυρη λύση
εντός του δεδομένου χρονικού ορίου. Αυτή η συμπεριφορά οφείλεται στο γεγονός ότι ο
επιλυτής MILP ανοικτού κώδικα δεν μπόρεσε να βρει μια ακέραια λύση εντός των
δεδομένων χρονικών ορίων

5.3.2 Περίπτωση λύσης Polytechnique Montreal (2η σε κατάταξη)


Στην λύση αυτή που κατατάχθηκε δεύτερη στον διαγωνισμό INRC-II το πρόβλημα
μοντελοποιήθηκε ως ακέραιο πρόγραμμα (Integer Program - IP) που λύνεται
χρησιμοποιώντας μια διαδικασία «διακλάδωσης και τιμής» (Branch & Price). Σε αυτό το
μοντέλο κάθε στήλη του προγράμματος (IP) αντιστοιχεί σε μια κατανομή βαρδιών,
δηλαδή μια ακολουθία διαδοχικών εργάσιμων ημερών για μια νοσηλεύτρια. Σε αντίθεση,
τα κλασικά μοντέλα περιλαμβάνουν μεμονωμένα προγράμματα νοσηλευτών στο συνολικό
ορίζοντα προγραμματισμού. Αντιμετωπίζονται περιπτώσεις που αφορούν έως και 120
νοσηλευτές και 4 βάρδιες σε ορίζοντα 8 εβδομάδων με την ενσωμάτωση του αλγόριθμου
Branch & Price σε ένα πλαίσιο αναζήτησης μεγάλης γειτονιάς. Οι αρχικές λύσεις της
αναζήτησης της μεγάλης γειτονιάς βρίσκονται από έναν αλγόριθμο κυλιόμενου ορίζοντα
(rolling-horizon algorithm) που ταιριάζει στο μοντέλο κατανομής των βαρδιών.

Ένας αλγόριθμος διακλάδωσης και τιμής (Branch & Price) ενσωματώνει μια παραγωγή
στήλης σε ένα κλασικό σχήμα διακλάδωσης και δέσμευσης (Branch & Bound) για την
επίλυση γραμμικών προγραμμάτων με περιορισμούς ακεραιότητας. Σε αυτό το πλαίσιο,
κάθε γραμμική χαλάρωση (Linear Relaxation) που συμβαίνει στο δέντρο διακλάδωσης
λύνεται με τη δημιουργία στήλης και σχεδιάζονται συγκεκριμένοι κανόνες διακλάδωσης.

Διπλωματική Εργασία 67
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Γενικά τα μοντέλα που επιλύουν το πρόβλημα κατανομής νοσηλευτικών βαρδιών (Nurse


Scheduling Problem - NSP) με αλγόριθμους διακλάδωσης και τιμής (Branch & Price)
μοιράζονται την ίδια προσέγγιση μοντελοποίησης: το πρόβλημα απόδοσης τιμών
δημιουργεί πλήρεις κατανομές βαρδιών και οι μεταβλητές απόφασης υποδεικνύουν εάν
αυτοί οι πλήρεις κατανομές βαρδιών πρόκειται να χρησιμοποιηθούν στη λύση.

Στη συγκεκριμένη περίπτωση επίλυσης δεν παράγονται πλήρεις αλλά μερικές – μη


πλήρεις κατανομές βαρδιών, που ονομάζονται εναλλαγές (rotations). Η εναλλαγή
(rotation) είναι μια ακολουθία αναθέσεων βάρδιας σε διαδοχικές ημέρες που προηγούνται
και ακολουθούνται από μία τουλάχιστον ημέρα μη εργασίας – άδειας (day off). Η
δεξιότητα που χρησιμοποιείται από κάθε νοσηλεύτρια σε κάθε βάρδια εργασίας δεν
προσδιορίζεται. Να σημειωθεί ότι μια εναλλαγή είναι έγκυρη αν ισχύουν οι αυστηροί
περιορισμοί H1 & H3 (δηλαδή μία νοσηλεύτρια έχει μία βάρδια ανά ημέρα & ο
περιορισμός των απαγορευμένων διαδοχικών βαρδιών).

Στη συνέχεια, ο αλγόριθμος ακέραιου προγράμματος δημιουργεί πλήρη


χρονοδιαγράμματα για τους νοσηλευτές από τις υπάρχουσες εναλλαγές (rotations) και
κατανέμει τις δεξιότητες που πρέπει να εκτελέσουν. Οι εξατομικευμένες εναλλαγές
δημιουργούνται με την επίλυση του προβλήματος Shortest Path Problem with Resource
Constraints (SPPRC) για κάθε νοσηλευτή. Δηλαδή αποδίδει μια νέα στήλη αρνητικού
μειωμένου κόστους ή βεβαιώνει ότι η βέλτιστη λύση της περιορισμένης γραμμικής
χαλάρωσης είναι βέλτιστη για τη μη περιορισμένη έκδοση.

Σύμφωνα με τους συγγραφείς της προτεινόμενης λύσης, είναι η πρώτη προσπάθεια


αντιμετώπισης του πρόβληματος κατανομής νοσηλευτικών βαρδιών με ένα μοντέλο που
βασίζεται στην εναλλαγή (rotation). Διερευνήθηκε αυτή η προσέγγιση, επειδή περιορίζει
τον αριθμό των έγκυρων στηλών που μπορούν να δημιουργηθούν και μειώνει την
πολυπλοκότητα του προβλήματος απόδοσης τιμής (pricing). Αυτή η αλλαγή του
παραδείγματος οδηγεί επίσης στην ανάπτυξη ειδικών κανόνων διακλάδωσης και δομικών
τροποποιήσεων στο δίκτυο απόδοσης τιμών. Ο διαχωρισμός της κατανομής των βάρδιων
και των δεξιοτήτων είναι ανεξάρτητος από την προσέγγιση της εναλλαγής. Αυτή η
αποσύνθεση, καθώς και η συγκέντρωση των νοσηλευτών στην ανάθεση δεξιοτήτων
αποτελούν επίσης μέρος του μεθοδολογίας της περίπτωσης λύσης.

Οι συγγραφείς της προτεινόμενης λύσης επίσης αναφέρουν ότι με στόχο την επίλυση
μεγάλων περιπτώσεων, ενσωματώθηκε στον αλγόριθμο Branch & Price και μια

Διπλωματική Εργασία 68
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

προσαρμοστική διαδικασία αναζήτησης μεγάλης γειτονιάς (Adaptive Large Neighborhood


Search - ALNS). Το ALNS είναι μια τοπική αναζήτηση όπου λαμβάνονται οι
επαναλήψεις με τη διαδοχική εκ νέου βελτιστοποίηση του προβλήματος σε ένα
υποσύνολο μεταβλητών διατηρώντας άλλες μεταβλητές αναλλοίωτες. Στην υλοποίηση,
είτε βελτιστοποιούνται εκ νέου τα πλήρη χρονοδιαγράμματα περιορισμένου αριθμού
νοσηλευτών είτε μερικά χρονοδιαγράμματα μεγαλύτερου αριθμού νοσηλευτών.

Έχουν αναπτυχθεί επίσης πολλοί αρχέγονοι ευρετικοί αλγόριθμοι που βασίζονται στη
διαδικασία διακλάδωσης και τιμής (Branch & Price) για να βρεθεί αρχική λύση για την
διαδικασία αναζήτησης μεγάλης γειτονιάς (ALNS). Ένας από αυτούς είναι μια μέθοδος
κυλιόμενου ορίζοντα (rolling-horizon) που υπολογίζει διαδοχικά εβδομαδιαία
χρονοδιαγράμματα ενώ λαμβάνει υπόψη μια εκτίμηση του αντίκτυπου των τρεχουσών
αποφάσεων στο μέλλον

Για την περίπτωση επίλυσης χρησιμοποίηθηκαν εργαλεία ανοικτού κώδικα όπως το


πλαίσιο BCP για τη διαδικασία Branch & Price , όπου ο επιλεγμένος γραμμικός επιλυτής
είναι ο CLP. Έχει επίσης χρησιμοποιηθεί η βιβλιοθήκη Boost για την επίλυση του
προβλήματος του συντομότερου μονοπατιού.

5.3.3 Περίπτωση λύσης SSHH - Sequence-based Selection Hyper-Heuristic (3η σε


κατάταξη)
Στην περίπτωση αυτή η μεθοδολογία βασίζεται σε έναν υπερευρετικό αλγόριθμο επιλογής
που βασίζεται σε ακολουθία και χρησιμοποιεί ένα στατιστικό μοντέλο Markov (Sequence-
based Selection Hyper-Heuristic - SSHH). Η προτεινόμενη μεθοδολογία ενσωματώνει
έναν αφιερωμένο αλγόριθμο για τη δημιουργία έγκυρων αρχικών λύσεων και μια σειρά
ευρετικών αλγορίθμων χαμηλού επιπέδου με διαφορετικές δυναμικές που σέβονται τους
περιορισμούς της διατύπωσης του προβλήματος του διαγωνισμού INRC-II. Εμπειρικά
αποτελέσματα και η ανάλυση υποδηλώνουν ότι η προτεινόμενη προσέγγιση έχει
σημαντικές δυνατότητες για δύσκολες περιπτώσεις προβλημάτων.

Οι υπερευρετικοί αλγόριθμοι αντιπροσωπεύουν μια κατηγορία μεθόδων βελτιστοποίησης


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

Διπλωματική Εργασία 69
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

αλγόριθμοι επιλογής, επιλέγουν ευρετικούς αλγόριθμους από ένα προκαθορισμένο


χαμηλού επιπέδου σύνολο τέτοιων αλγορίθμων και τους χρησιμοποιούν για να
πραγματοποιήσουν μια σειρά αλλαγών (διαταραχές) σε μια εξελισσόμενη λύση για τη
βελτίωση της ποιότητάς της. Οι γενετικοί υπερευρετικοί αλγόριθμοι εξελίσσονται και
προσδιορίζουν νέους ευρετικούς αλγόριθμους με βάση ένα σύνολο ευρετικών αλγόριθμων
χαμηλού επιπέδου που παρουσιάζουν βελτιωμένες δυνατότητες αναζήτησης και
απόδοσης.

Το κίνητρο πίσω από την ανάπτυξη ενός υπερευρετικού αλγόριθμου επιλογής που
βασίζεται σε ακολουθία (Sequence-based Selection Hyper-Heuristic - SSHH) για το
πρόβλημα της κατανομής νοσηλευτικών βαρδιών είναι να οικοδομηθεί μια πιο ισχυρή
προσέγγιση αναζήτησης του χώρου λύσεων. Το SSHH είναι ένα από τα πρώτα υπερ-
ευρετικά που χρησιμοποιεί ακολουθίες ευρετικών, ενώ σύμφωνα με τους συγγραφείς της
περίπτωσης λύσης, τα πολλά υποσχόμενα κέρδη απόδοσης του έχουν επαληθευτεί για ένα
ευρύ φάσμα προβλημάτων, σε τομείς όπως το σχολικό χρονοδιάγραμμα, η δρομολόγηση
οχημάτων, δρομολόγηση αποθέματος μεταξύ άλλων.

Ο υπερευρετικός αλγόριθμος επιλογής (Selection Hyper-heuristic) είναι μια μεθοδολογία


αναζήτησης που λειτουργεί σε επίπεδο ευρετικών (ή τελεστών μετακίνησης γειτονιάς)
αντί να λειτουργεί απευθείας στην χωρό αναζήτησης της βελτιστοποίησης. Ένα σύνολο
ευρετικών αναζήτησης (ευρετικά χαμηλού επιπέδου) που μπορεί να έχει διαφορετική
συμπεριφορά αναζήτησης ορίζεται να κάνει αναζήτηση στο χώρο βελτιστοποίησης του
προβλήματος. Ένας υπερευρετικός αλγόριθμος επιλογής αναζητά να βρει έναν
αποτελεσματικό τρόπο επιλογής και ανάμειξης των πιο πολλά υποσχόμενων ευρετικών
αλγορίθμων σε κάθε στάδιο της διαδικασίας αναζήτησης της βελτιστοποίησης.

Ο προτεινόμενος αλγόριθμος SSHH χρησιμοποιεί μια συγκεκριμένη διαδικασία


κατασκευής για τη δημιουργία μιας αρχικής έγκυρης λύσης και εκμεταλλεύεται την
δύναμη αναζήτησης ενός συνόλου εννέα αποκλειστικά χαμηλού επιπέδου ευρετικών
μεθόδων για την αποτελεσματική αναζήτηση του τοπίου βελτιστοποίησης ώστε να
βελτιώσει την αρχική λύση με σεβασμό στην εγκυρότητα. Οι προτεινόμενες ευρετικές
μέθοδοι χαμηλού επιπέδου έχουν διαφορετική διαφοροποίηση και χαρακτηριστικά
εντατικοποίησης και καλύπτουν μεγάλη ποικιλία ευρετικών τύπων, όπως η διαταραχή
(perturbation) και η «καταστροφή και αναδημιουργία» (ruin and recreate).

Διπλωματική Εργασία 70
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Ο προτεινόμενος αλγόριθμος SSHH χρησιμοποιεί ένα κρυφό μοντέλο Markov (hidden


Markov model) ως μέθοδο επιλογής με στόχο την αναγνώριση αποτελεσματικών
ακολουθιών μέσω της εκμάθησης καλών μεταβάσεων μεταξύ των ευρετικών μεθόδων
χαμηλού επιπέδου. Για να επιτευχθεί αυτό, ο αλγόριθμος στο κρυφό μοντέλο Markov
κάνει αντιστοίχηση των καταστάσεων σε ευρετικές μεθόδους χαμηλού επιπέδου. Για κάθε
ευρετική μέθοδο χαμηλού επιπέδου στο μοντέλο, ορίζεται ένας πίνακας μετάβασης για να
προσδιορίσει την πιθανότητα μετάβασης από τον εαυτό του σε οποιοδήποτε άλλη
ευρετική μέθοδο χαμηλού επιπέδου (συμπεριλαμβανομένης και της ίδιας). Επιπροσθέτως,
κάθε ευρετικό χαμηλού επιπέδου έχει έναν συνδεδεμένο πίνακα κατασκευής ακολουθίας
για να καθοριστεί εάν θα τερματιστεί η ακολουθία σε αυτό το σημείο. Ο πίνακας
κατασκευής ακολουθίας αποθηκεύει βαθμολογίες για καθένα από τα ευρετικά χαμηλού
επιπέδου σε δύο στήλες: συνέχεια (continue) και τέλος (end).

Αρχικά, μια τυχαία ευρετική μέθοδος επιλέγεται ως εκκίνηση. Η επαναληπτική


διαδικασία του υπερευρετικού αλγορίθμου στη συνέχεια ξεκινά και εκτελείται μέχρι να
ξεπεραστεί ένα χρονικό όριο. Αρχίζει επιλέγοντας την επόμενη ευρετική μέθοδο
χρησιμοποιώντας την στρατηγική του τροχού ρουλέτας και την προσθέτει στην
ακολουθία. Ακολούθως, καθορίζεται αν η ακολουθία θα τερματιστεί ή όχι σε αυτό το
σημείο, βάσει των πιθανοτήτων του πίνακα κατασκευής ακολουθίας (sequence
construction matrix). Αρχικά οι πιθανότητες αυτές αρχικοποιούνται στο 0,50 για κάθε
ευρετική μέθοδο.

Στην περίπτωση που η ακολουθία δεν τερματίζεται, ο αλγόριθμος μετακινείται κάθε φορά
από την τρέχουσα στην επόμενη ευρετική μέθοδο χαμηλού επιπέδου. Όταν τελικά η
ακολουθία τερματιστεί, αυτή θα εφαρμοστεί στην τρέχουσα λύση ώστε να δημιουργηθεί
μια νέα λύση. Σε αυτό το σημείο, εάν η ποιότητα της νέας λύσης είναι καλύτερη από την
ποιότητα της καλύτερης λύσης μέχρι εκείνη τη στιγμή, τότε η ακολουθία ευρετικών
μεθόδων χαμηλού επιπέδου που οδήγησε σε αυτήν παίρνει ανάλογη βαθμολογία στον
πίνακα καταστάσεων και στον πίνακα κατασκευής ακολουθίας (sequence construction
matrix). Αυτό αυξάνει την πιθανότητα επιλογής των ακολουθιών που δημιουργούν
βελτιωμένες λύσεις.

Το δεύτερο συστατικό ενός παραδοσιακού υπερευρετικού πλαισίου επιλογής είναι η


αποδοχή κίνησης (move acceptance). Το κριτήριο αποδοχής της κίνησης χρησιμοποιείται
για να αποφασίσει αν θα αποδεχτεί ή θα απορρίψει τη νέα υποψήφια λύση. Εάν η νέα

Διπλωματική Εργασία 71
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

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

Για την αποτελεσματική αναζήτηση του χώρου αναζήτησης του προβλήματος


αναπτύχθηκαν στα πλαίσια της περίπτωσης λύσης ένα σύνολο από εννέα αρκετά απλές
ευρετικές μεθόδοι χαμηλού επιπέδου για το συγκεκριμένο πρόβλημα:

 Τέσσερις ευρετικές μέθοδοι διαταραχών (perturbations)


 Δύο ευρετικές μέθοδοι καταστροφής και δημιουργίας (ruin and recreate)
 Τρεις ευρετικές μέθοδοι ανταλλαγών (exchanges - swaps)

Οι ευρετικές μέθοδοι χαμηλού επιπέδου τροποποιούν μια λύση λαμβάνοντας υπόψη


τύπους βάρδιας, δεξιότητες ή και τα δύο μαζί, εντός συγκεκριμένων τμημάτων χρόνου. Οι
μέθοδοι μπορούν για παράδειγμα να ανταλλάσουν βάρδιες, δεξιότητες ή και τα δύο μαζί
μεταξύ νοσηλευτριών είτε οριζόντια είτε κάθετα στον πίνακα κατανομής νοσηλευτικών
βαρδιών ή μπορούν να αλλάζουν τις βάρδιες ή δεξιότητες στην τύχη για ένα συγκεκριμένο
μπλοκ ημερών από μια ή περισσότερες νοσηλεύτριες (καταστροφή και δημιουργία).

Ο αλγόριθμος SSHH κατέλαβε την τρίτη θέση μεταξύ των συμμετοχόντων στον
διαγωνισμό INRC-II. Σύμφωνα με τους συγγραφείς της προτεινόμενης λύσης, ο
προτεινόμενος αλγόριθμος ήταν ο μόνος συμμετέχων μεταξύ των τριών πρώτων του
διαγωνισμού που μπόρεσε να εντοπίσει μία έγκυρη λύση για όλες τις περιπτώσεις και
απέδωσε συγκρίσιμα καλά, σε στατιστικούς όρους, απέναντι στον νικητή στις πιο
δύσκολες περιπτώσεις. Επιπλέον, ο αλγόριθμος επέδειξε ισχυρή υπολογιστική απόδοση
ως προς την ποιότητα της παραγώμενης λύση σε όλες τις περιπτώσεις δοκιμών δεδομένου
του διαθέσιμου υπολογιστικού ορίου χρόνου.

5.3.4 Περίπτωση λύσης ORTEC (5η σε κατάταξη)


Η ORTEC είναι μια εταιρεία με έδρα την Ολλανδία που παρέχει λύσεις βελτιστοποίησης
στους πελάτες της εδώ και 40 χρόνια περίπου. Μία από αυτές τις λύσεις είναι το εργαλείο
“ORTEC Workforce Scheduling”. Για την συμμετοχή λοιπόν στον διαγωνισμό
χρησιμοποιήθηκε αυτό το εργαλείο και το αποτέλεσμα ήταν να βγει 5η στην κατάταξη.

Αυτό το προϊόν δίνει τη δυνατότητα στους σχεδιαστές των χρονοδιαγραμμάτων των


πελατών να δημιουργήσουν και να διατηρήσουν χρονοδιαγράμματα. Η δημιουργία
χρονοδιαγραμμάτων μπορεί να ελεγχθεί από ένα πολύ εκτεταμένο κατάλογο αυστηρών

Διπλωματική Εργασία 72
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

και χαλαρών περιορισμών, και γι' αυτό το λόγο έχει κατασκευαστεί η μηχανή του
εργαλείου ως μηχανή «μαύρου κουτιού»: μόνο το συνολικό κόστος καθοδηγεί τον
αλγόριθμο, όχι η φύση των παραβιάσεων.

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

Η εταιρεία έκανε ανάλυση των περιπτώσεων και βρήκε ότι για παράδειγμα με 30 ή
περισσότερους νοσηλευτές δεν υπάρχει περίπτωση να μην βρεθεί έγκυρη λύση. Μια άλλη
παρατήρηση ήταν ότι η διακύμανση της ζήτησης ανά τύπο βάρδιας και δεξιότητας είναι
τεράστια, η διακύμανση δε στον συνολικό αριθμό των βάρδιων ανά εβδομάδα είναι
σχεδόν απούσα. Επιπλέον τα δεδομένα είναι τέτοια ώστε να καλύπτονται οι ελάχιστες
απαιτήσεις σε προσωπικό πολύ εύκολα αλλά η επίτευξη των βέλτιστων απαιτήσεων
προσωπικού πάντα παραβιάζει τον μέγιστο απαιτούμενο αριθμός εργασιών. Επίσης η
υψηλή διακύμανση της ζήτησης ανά τύπο βάρδιας και δεξιότητα πιθανότατα προκαλούν
αναπόφευκτο κόστος, καθώς θα είναι αδύνατο να ικανοποιηθούν όλοι οι περιορισμοί για
διαδοχικές εργασίες ανά τύπο βάρδιας.

Τα παραπάνω οδήγησαν στο συμπέρασμα ότι κατά τη διάρκεια της δημιουργίας ενός
εβδομαδιαίου προγράμματος, θα ήταν χρήσιμο να υπάρχει οδήγηση σε μια καλή σύνδεση
με την επόμενη εβδομάδα εισάγοντας ορισμένους τεχνητούς χαλαρούς περιορισμούς.
Αυτοί οι 2 «τεχνητοί» περιορισμοί που χρησιμοποιήθηκαν σύμφωνα με την εταιρεία είναι:

 Φροντίζουμε την τελευταία μέρα της εβδομάδας (Κυριακή) να μπορούμε να


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

Διπλωματική Εργασία 73
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

επόμενη εβδομάδα. Ας υποθέσουμε για παράδειγμα ότι τοποθετούμε μια περίοδος


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

Για τους καθολικούς μετρητές για τον μέγιστο αριθμό συνολικών βάρδιων και τον αριθμό
των εργαζόμενων Σαββατοκύριακων, έγινε προσαρμογή των παραμέτρων με αναλογικό
τρόπο. Για παράδειγμα, εάν το πρόγραμμα είναι για τέσσερις εβδομάδες και ο μέγιστος
αριθμός βάρδιων για έναν υπάλληλο είναι 16, τότε την πρώτη εβδομάδα μπαίνει το
μέγιστο σε 4, την δεύτερη εβδομάδα το μέγιστο αυτής της εβδομάδας είναι 8
(συμπεριλαμβανομένης της μέτρησης για την πρώτη εβδομάδα), κλπ.

Για να υπάρξουν αναπαραγώμενα αποτελέσματα σύμφωνα με τους όρους του


διαγωνισμού γίνεται για κάθε περίπτωση μια λύση δύο τυπικών αποκλίσεων κάτω από το
μέσο κόστος στα τρεξίματα. Υποθέτοντας κανονική κατανομή για το κόστος των
παραγόμενων χρονοδιαγραμμάτων, χρειάζονται γύρω στα 40 τρεξίματα για να επιτευχθεί
αυτό το αποτέλεσμα, στα πλαίσια του στενού χρονικού πλαισίου.

5.4 Σύγκριση αποτελεσμάτων αλγορίθμου σε σχέση με συμμετοχές


διαγωνισμού
Ακολουθεί παρακάτω στον πίνακα 5.5 μια ανάλυση αποτελεσμάτων του αλγόριθμου της
διπλωματικής εργασίας (στήλη με κίτρινο ΔΕ 138216) σε σχέση με τα αποτελέσματα που
έχουν κατατεθεί στις υποβληθείσες συμμετοχές των 15 συμμετεχόντων του διαγωνισμού
(Submitted Results) για τα Late Instances. Αναφέρονται ενδεικτικά 10 διαφορετικές
περιπτώσεις (instances) είτε για 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 διαφορετικές περιπτώσεις (η πρώτη στήλη
ΔΕ… αφορά την διπλωματική εργασία) :

Περίπτωση n030w4_History file 1_


WeekDataFiles 6-2-9-1
12000
10000
8000
6000
4000
2000
0

Εικόνα 5.1 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την περίπτωση 30


νοσηλευτριών και 4 εβδομάδων

Περίπτωση n050w4_History file 0_


WeekDataFiles 0-4-8-7
20000
18000
16000
14000
12000
10000
8000
6000
4000
2000
0

Εικόνα 5.2 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την περίπτωση 50


νοσηλευτριών και 4 εβδομάδων

Διπλωματική Εργασία 76
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Περίπτωση n050w8_History file 1_


WeekDataFiles 1-7-8-5-7-4-1-8
50000
45000
40000
35000
30000
25000
20000
15000
10000
5000
0

Εικόνα 5.3 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την περίπτωση 50


νοσηλευτριών και 8 εβδομάδων

Περίπτωση n100w4_History file 0


WeekDataFiles 1-1-0-8
40000
35000
30000
25000
20000
15000
10000
5000
0

Εικόνα 5.4 : Σύγκριση αποτελεσμάτων ΔΕ με συμμετέχοντες διαγωνισμού για την περίπτωση 100
νοσηλευτριών και 4 εβδομάδων

Διπλωματική Εργασία 77
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

5.5 Συμπεράσματα – Βελτιώσεις διπλωματικής εργασίας


Στην διπλωματική εργασία αρχικά μελετήθηκαν αναλυτικά οι όροι του Διεθνούς
διαγωνισμού «The Second International Nurse Rostering Competition INRC-II (2014-
2015)», έγινε δηλαδή μελέτη του προβλήματος (μιας και δεν υπήρχε γνώση του) και των
απαιτήσεων. Ακολούθως αποφασίστηκε η υλοποίηση της εφαρμογής στην γλώσσα
προγραμματισμού Java.

Η πρώτη εργασία ήταν η εισαγωγή των αρχείων εισόδου σε αντικείμενα κλάσεων.


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

Στην πρώτη φάση του αλγορίθμου βρίσκεται μια αρχικά ικανοποιητική έγκυρη λύση η
οποία βελτιστοποιείται με διάφορες μεθόδους στην 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. & Petrovic S. (2002), “Recent research directions in automated timetabling”,


European Journal of Operational Research 140 (2002) 266–280

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

Collins English Dictionary

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

Hansen, P. & Mladenović, N. (1999). An Introduction to Variable Neighborhood Search.

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

Wikipedia, Tabu Search (https://en.wikipedia.org/wiki/Tabu_search)

Wikipedia, Variable Neighborhood Search,


(https://en.wikipedia.org/wiki/Variable_neighborhood_search)

Wren, A. (1996). Scheduling, timetabling and rostering — A special relationship?. In:


Burke, E., Ross, P. (eds) Practice and Theory of Automated Timetabling. PATAT 1995.
Lecture Notes in Computer Science, vol 1153. Springer, Berlin, Heidelberg.
https://doi.org/10.1007/3-540-61794-9_51

Μακράκη Γ. (2021), Δημιουργία Ωρολόγιου Προγράμματος Πανεπιστημικών Ιδρυμάτων,


Πανεπιστήμιο Μακεδονίας (Πτυχιακή Εργασία – επιβλέπων κ. Ρεφανίδης)

Παυλίδης Α., (2019), Ανάπτυξη πλήρους εφαρμογής για την αποδοτική επίλυση του
προβλήματος Nurse rostering (εύρεση βέλτιστου ωρολογίου προγράμματος εργασίας σε
νοσοκομειακά ιδρύματα), Ελληνικό Ανοικτό Πανεπιστήμιο (Διπλωματική Εργασία –
επιβλέπων κ. Μπεληγιάννης)

Σακελλαρίου H. , Χρονοπρογραμματισμός (scheduling), Πανεπιστήμιο Μακεδονίας

Διπλωματική Εργασία 81
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Παράρτημα Α: Μορφές αρχείων εισόδου (File formats)

Σε αυτό το παράρτημα περιγράφεται η μορφή για τα αρχεία εισόδου δηλαδή το αρχείο


σεναρίου (Scenario file), το αρχείο δεδομένων εβδομάδας (week data file) και το αρχείο
ιστορικού (history file) καθώς και το αρχείο εξόδου της λύσης (solution file). Εξηγείται
μόνο η μορφή κειμένου XML λεπτομερώς, μιας και η εργασία χρησιμοποεί αυτή την
μορφή για τα δεδομένα εισόδου και εξόδου. Με ανάλογο τρόπο περιγράφονται και οι
άλλες μορφές (text only & JSON).

A.1 Αρχείο Σεναρίου (Scenario file)


Το ID του αρχείου XML περιέχει το όνομα του συνόλου δεδομένων (dataset) με τη μορφή
nXXXwY, όπου XXX είναι ο αριθμός των νοσηλευτών και Y ο αριθμός των εβδομάδων
του ορίζοντα προγραμματισμού. Αυτό είναι το αναγνωριστικό του σεναρίου που
χρησιμοποιείται στη συνέχεια στο σχετικό ιστορικό, δεδομένα εβδομάδων και αρχεία
λύσεων.

Παράδειγμα: <Scenario Id="n005w4"


Στη συνέχεια αναφέρεται η διάρκεια του ορίζοντα προγραμματισμού, εκφρασμένη σε
αριθμό εβδομάδων

<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>

Ακολούθως για κάθε τύπο βάρδιας, περιγράφονται επίσης οι απαγορευμένες διαδοχές


τύπων βάρδιας. Στο ακόλουθο παράδειγμα, οι διαδοχές Νύχτα (Night)  Πρωί (Early)
και Νύχτα (Night)  Απόγευμα (Early) απαγορεύονται. Στο πεδίο <PrecedingShiftType>
ορίζεται η βάρδια που εξετάζουμε και στο πεδίο <SucceedingShiftTypes> οι βάρδιες που
απαγορεύονται σε διαδοχή της PrecedingShiftType :

<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>

Τέλος, το τμήμα νοσηλευτών/τριών αναφέρει για κάθε νοσηλευτή/τρια το όνομα –


αναγνωριστικό (Nurse Id), τον τύπο της σύμβασης (Contract) και τις δεξιότητες που έχει
(Skills).

<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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Α.2 Αρχείο Δεδομένων εβδομάδας (Week data file)


Στο αρχείο δεδομένων εβδομάδας, πρώτα απ 'όλα υπάρχει το αναγνωριστικό του
αντίστοιχου σεναρίου.

<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) αναφέρεται με


την τριπλέτα Νοσηλευτής/τρια (Nurse), Τύπος βάρδιας (ShiftType) και Ημέρα (Day). Ο
ειδικός τύπος βάρδιας Any σημαίνει ότι o/η νοσηλευτής/τρια θα ήθελε να μην εργάζεται
οποιαδήποτε βάρδια την συγκεκριμένη ημέρα.

<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>

Α.3 Αρχείο Ιστορικού (History file)


Οι πρώτες γραμμές του αρχείου ιστορικού περιγράφουν την εβδομάδα (Week) στην οποία
αναφέρεται το ιστορικό (δηλαδή 0 για το αρχικό αρχείο ιστορικού, 1 μετά την πρώτη
εβδομάδα κλπ) και το σχετικό αρχείο σεναρίου (Scenario).

<Week>0</Week>
<Scenario>n005w4</Scenario>

Επιπλέον, το αρχείο περιέχει για κάθε νοσηλεύτρια (Nurse), το ιστορικό του


νοσηλευτή/τριας (NurseHistory), όσον αφορά τον συνολικό αριθμό των ημερών
αναθέσεων (NumberOfAssignments), τον συνολικό αριθμό των Σαββατοκύριακων που
έχει εργαστεί (NumberOfWorkingWeekends). Επίσης τον τύπο της τελευταίας βάρδιας
εργασίας για την προηγούμενη εβδομάδα (LastAssignedShiftType), όπου αν η τελευταία
ημέρα της προηγούμενης εβδομάδας ήταν άδεια – day off δηλώνεται σαν None. Τέλος τον
αριθμό των συνεχόμενων εργασιών του τύπου της τελευταίας βάρδιας
(NumberOfConsecutiveAssignments), τον αριθμό των συνεχόμενων εργάσιμων ημερών
(NumberOfConsecutiveWorkingDays ) και τον αριθμό των συνεχόμενων ημερών μη

Διπλωματική Εργασία 86
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

εργασίας ρεπό – days off (NumberOfConsecutiveDaysOff). Για παράδειγμα αν στην


τελευταία μέρα της προηγούμενης εβδομάδας δεν είχε ανατεθεί βάρδια άρα ήταν day off
τότε τα NumberOfConsecutiveAssignments και NumberOfConsecutiveWorkingDays
ισούνται με 0. Παρακάτω ένα παράδειγμα από το ιστορικό με τελευταία ανάθεση βάρδιας
και με τελευταίο ρεπό – day off.

<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>

Α.4 Αρχείο Λύσης (Solution file)


Το αρχείο λύσης δίνει την ανάθεση των νοσηλευτών/τριών σε βάρδια, δεξιότητα και
ημέρα. Το αρχείο ξεκινά με την αναφορά στην εβδομάδα που επιλύεται (Week) και στο
σενάριο (Scenario). Η πρώτη εβδομάδα είναι η 0 και η τελευταία η 3 αν πρόκειται για 4
εβδομάδες.

<Week>0</Week>
<Scenario>n005w4</Scenario>

Στη συνέχεια, εμφανίζεται κάθε ανάθεση σε εργασία (με οποιαδήποτε σειρά),


αναφέροντας το όνομα του/της νοσηλευτή/τριας (Nurse), την ημέρα (Day), τον τύπο της
βάρδιας (ShiftType) και την σχετική δεξιότητα (Skill). Οι μη εργάσιμες μέρες – ρεπό
(days off) δεν αναφέρονται:

Διπλωματική Εργασία 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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Παράρτημα Β: Αποτίμηση Περιορισμών (Constraint


evaluation)

Σε αυτό το παράρτημα, εξηγούνται λεπτομερέστερα ορισμένοι από τους περιορισμούς που


παρουσιάζονται στην Ενότητα 3.4 Περιορισμοί Διαγωνισμού (Constraints).
Συγκεκριμένα, εξηγούνται οι περιορισμοί που περιλαμβάνουν δεδομένα συνόρων (αρχείο
ιστορικού). Αντίθετα, οι περιορισμοί H1, H2, H4, S1, S4, S5, S6 και S7 δεν βασίζονται σε
δεδομένα συνόρων για την αξιολόγησή τους οπότε η αξιολόγησή τους είναι ξεκάθαρη και
δεν υπόκειται σε διφορούμενη ερμηνεία.

Για τους υπόλοιπους περιορισμούς 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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Β.1 Περιορισμός Αριθμού διαδοχικών εργασιών – Consecutive


assignments (S2)
Σύμφωνα με τον περιορισμό S2 πρέπει να τηρούνται ο ελάχιστος και ο μέγιστος αριθμός
διαδοχικών εργασιών, ανά βάρδια ή συνολικά σαν μέρες εργασίας. Τα όρια για την
βάρδια ορίζονται στο αρχείο σεναρίου στο τμήμα <ShiftTypes>, ενώ το συνολικό όριο
στο ίδιο αρχείο στο τμήμα <Contracts>. Και στις δύο αυτές περιπτώσεις στο παράδειγμα
μας τα όρια είναι στο 3 είτε για την βάρδια είτε για την σύμβαση εργασίας. Παρακάτω
υπάρχει αναλυτική εξήγηση:

Β.1.1 Μέγιστος αριθμός διαδοχικών εργάσιμων ημερών (όριο από το Contracts)


Η αξιολόγηση του περιορισμού στην αρχή ενός σταδίου εξαρτάται από την τιμή c του
αριθμού των διαδοχικών εργάσιμων ημερών στην αρχή ενός σταδίου (από το ιστορικό).
Στον Πίνακα Β.1, ο περιορισμός αξιολογείται για c = 5, δείχνοντας για σαφήνεια και την
εβδομάδα πριν από την περίοδο προγραμματισμού.

Το σύμβολο • χρησιμοποιείται για να δείξει οποιαδήποτε βάρδια εργασίας και το


σύμβολο - σημαίνει μια ημέρα ρεπό - άδειας (day off). Ένα κενό κελί χρησιμοποιείται
για αναθέσεις που δεν σχετίζονται με το υπό εξέταση παράδειγμα.

Όπως φαίνεται, ο αξιολογητής μετράει μόνο την «επιπλέον» τιμή της παραβίασης, καθώς
μέρος της παραβίασης έχει ήδη ληφθεί υπόψη κατά την αξιολόγηση του προηγούμενου
σταδίου (βλ. πίνακα Β.3).

Προηγούμενη εβδομάδα Τρέχουσα εβδομάδα


Δ Τ Τ Π Π Σ Κ Δ Τ Τ Π Π Σ Κ Παραβιάσε
Ε Ρ Ε Ε Α Α Υ Ε Ρ Ε Ε Α Α Υ ις
– • • • • • – 0
– • • • • • • – 1
– • • • • • • • – 2
Πίνακας B.1: Αξιολόγηση του περιορισμού μέγιστου αριθμού διαδοχικών εργάσιμων ημερών στην
αρχή ενός σταδίου (εβδομάδας).

Από αυτό το σημείο και μετά, η προηγούμενη περίοδος προγραμματισμού θα


αντιπροσωπεύεται από μια στήλη που δηλώνει την τιμή του σχετικού μετρητή από το
ιστορικό.

Διπλωματική Εργασία 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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Β.1.2 Ελάχιστος αριθμός διαδοχικών εργάσιμων ημερών (όριο από το Contracts)

Ο Πίνακας 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.

B.2 Περιορισμός Αριθμού διαδοχικών ημερών άδειας – Consecutive


days off (περιορισμός S3 - όριο από το Contracts)
B.2.1 Μέγιστος αριθμός συνεχόμενων ημερών άδειας
Η αξιολόγηση του περιορισμού στην αρχή ενός σταδίου εξαρτάται από την τιμή του
αριθμού των διαδοχικών ημερών άδειας από το ιστορικό, που ονομάζουμε ξανά c. Ο
Πίνακας Β.6 δείχνει την αξιολόγηση του περιορισμού μέγιστου αριθμού διαδοχικών
ημερών άδειας στην αρχή του σταδίου - εβδομάδας. Και σε αυτόν τον πίνακα το σύμβολο
• χρησιμοποιείται για να δείξει οποιαδήποτε βάρδια εργασίας και το σύμβολο - σημαίνει
μια ημέρα άδειας.

Ιστορικό ΔΕ ΤΡ ΤΕ ΠΕ ΠΑ ΣΑ ΚΥ Παραβιάσεις
• 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.

B.2.2 Ελάχιστος αριθμός συνεχόμενων ημερών άδειας

Ο Πίνακας Β.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
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Β.3 Απαγορευμένες διαδοχές τύπου βάρδιας - Forbidden shift type Successions


(περιορισμός H3)

Στον Πίνακα Β.9, φαίνεται η αξιολόγηση του περιορισμού για την απαγορευμένη διαδοχή
βάρδιας στην αρχή του σταδίου - εβδομάδας. Σύμφωνα με το παράδειγμα μας, μετά από
βάρδια Απόγευμα δεν επιτρέπεται να έχουμε επόμενη βάρδια Πρωί. Όπως φαίνεται, ο
περιορισμός παραβιάζεται μόνο όταν ο τελευταίος εκχωρημένος τύπος βάρδιας από το
ιστορικό είναι ίσος με Απόγευμα και η βάρδια Δευτέρας είναι Πρωί. Ο περιορισμός δεν
έχει βάρος μιας και ανήκει στους αυστηρούς περιορισμούς.

Ιστορικό ΔΕ ΤΡ ΤΕ ΠΕ ΠΑ ΣΑ ΚΥ Παραβίαση
Π NAI
Απόγευμα Α OXI
– OXI
Π OXI
Α OXI
Πρωί – OXI
Πίνακας Β.9: Αξιολόγηση της απαγορευμένης διαδοχής τύπου βάρδιας

Διπλωματική Εργασία 96
Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Παράρτημα Γ: Παραδείγμα εφαρμογής – αξιολόγησης


περιορισμών

Θα πάρουμε σαν παράδειγμα από τις δοκιμαστικές λύσεις που δίνονταν μαζί με τον
διαγωνισμό την περίπτωση που φαίνεται στην Ενότητα 3.6.2 για την περιγραφή του
Επικυρωτή (Validator). H περίπτωση αφορά την περίπτωση (instance) n005w4, δηλαδή
περίπτωση για 5 νοσηλεύτριες και περίοδο προγραμματισμού 4 εβδομάδων.

Ας δούμε καταρχήν τα αρχεία εισόδου:

Γ.1 Αρχείο σεναρίου (Scenario file)


Το αρχείο (Sc-n005w4.xml) έχει ως εξής :

<Scenario Id="n005w4" (περίπτωση με 5 νοσηλευτές/τριες και 4 εβδομάδες


προγραμματισμού)

<NumberOfWeeks>4</NumberOfWeeks>

(Ο αριθμός των εβδομάδων του πλάνου του προβλήματος)

<Skills>
<Skill>HeadNurse</Skill>
<Skill>Nurse</Skill>
</Skills>

(Δηλαδή 2 τύποι δεξιοτήτων HeadNurse & Nurse)

Διπλωματική Εργασία 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>

Δηλαδή υπάρχουν 2 συμβάσεις εργασίας, Πλήρης απασχόλησης – FullTime και Μερικής


Απασχόλησης – PartTime. Για το παράδειγμα της PartTime οι ελάχιστες και μέγιστες
συνολικές αναθέσεις σε όλο τον ορίζοντα προγραμματισμού είναι 7 & 11 αντίστοιχα, ο
ελάχιστος και μέγιστος αριθμό διαδοχικών ημερών εργασίας είναι 3 και 5 αντίστοιχα, ο
ελάχιστος και μέγιστος αριθμό διαδοχικών ημερών μη εργασίας - άδειας (days off) είναι 3
και 5 επίσης. Ακολούθως ο αριθμός του μέγιστου αριθμού εργαζόμενων
σαββατοκύριακων (ακόμα και μία ημέρα) είναι 3 σε όλο τον ορίζοντα των εβδομάδων,
ενώ ο τελευταίος αριθμός που είναι 1 δείχνει την Boolean μεταβλητή του περιορισμού

Διπλωματική Εργασία 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>

Η λίστα των νοσηλευτών/νοσηλευτριών μαζί με τη σύμβαση εργασίας τους και την


δεξιότητα ή τις δεξιότητες που έχουν.

Διπλωματική Εργασία 100


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Γ.2 Αρχείο ιστορικού για την πρώτη εβδομάδα 0 (History file)


Το αρχείο (H0-n005w4-0.xml) έχει ως εξής :

<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>

Διπλωματική Εργασία 101


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Δηλαδή για κάθε νοσηλευτή/νοσηλεύτρια, καταρχάς το όνομα του/της, και ακολούθως: 1.


ο αριθμός των συνολικών αναθέσεων μέχρι τώρα, 2. ο αριθμός των συνολικών
εργαζόμενων σαββατοκύριακων – που εδώ είναι και τα δυο μηδενικά αφού είναι η έναρξη
της περιόδου προγραμματισμού. Ακολουθεί 3. η τελευταία εργαζόμενη βάρδια ή None αν
είχε άδεια (day off), 4. ο αριθμός των διαδοχικών αναθέσεων του τελευταίου τύπου
βάρδιας, 5. ο αριθμός των διαδοχικών ημερών εργασίας και 6. ο αριθμός των διαδοχικών
ημερών άδειας (days off).

Γ.3 Τα αρχεία δεδομένων εβδομάδας (Week Data files)


Για την 1η εβδομάδα (αρχείο WD-n005w4-1) :

<Scenario>n005w4</Scenario>

(Το χαρακτηριστικό του προβλήματος που χαρακτηρίζει όλα τα αρχεία.)

Λόγω μεγέθους το αρχείο δεδομένων εβδομάδας παρουσιάζεται παρακάτω στην μορφή


του αρχείου κειμένου. Οι βάρδιες αντιστοιχούν σε Early  Πρωί, Late  Απόγευμα,
Night  Νύχτα. Κάθε παρένθεση αντιπροσωπεύει την ελάχιστη και την βέλτιστη κάλυψη
που ζητείται για την αντίστοιχη μέρα ξεκινώντας από την Δευτέρα και καταλήγοντας στην
Κυριακή. Για παράδειγμα το Late Nurse (0,1) (1,1)….. σημαίνει ελάχιστη κάλυψη για
την βάρδια Late και δεξιότητα Nurse 0 για Δευτέρα και 1 για Τρίτη ενώ για την βέλτιστη
κάλυψη είναι 1 και για τις δύο ημέρες :

REQUIREMENTS 1ης εβδομάδας

Early HeadNurse (0,0) (0,0) (1,1) (0,0) (1,1) (0,0) (0,0)


Early Nurse (1,1) (1,1) (0,1) (1,1) (0,1) (1,1) (1,1)
Late HeadNurse (1,1) (0,0) (0,0) (0,0) (0,0) (1,1) (1,1)
Late Nurse (0,1) (1,1) (1,1) (1,1) (1,1) (1,1) (1,1)
Night HeadNurse (1,1) (0,0) (1,1) (1,1) (0,0) (0,0) (0,0)
Night Nurse (1,1) (1,1) (0,1) (1,1) (0,1) (1,1) (1,1)

Τα δεδομένα αφορούν τους περιορισμούς και θα εξεταστούν παρακάτω.

Διπλωματική Εργασία 102


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Οι προτιμήσεις για μη εργασία από τους νοσηλευτές/τριες πάλι σε μορφή αρχείου


κειμένου (text file) για την συγκεκριμένη 1η εβδομάδα (για παράδειγμα ο Stefaan δεν
θέλει να δουλέψει καθόλου την Τετάρτη – το χαρακτηριστικό Any):

SHIFT_OFF_REQUESTS = 5
Andrea Any Tue
Stefaan Any Wed
Nguyen Any Fri
Nguyen Any Sat
Sara Late Sat

Για την 2η εβδομάδα (αρχείο WD-n005w4-2) :

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

Διπλωματική Εργασία 103


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Γ.4 Αξιολόγηση περιορισμών

Γ.4.1 Αξιολόγηση αυστηρών (hard) περιορισμών

Από την έξοδο του επικυρωτή (Validator) βλέπουμε ότι δίνεται ο παρακάτω πίνακας
αναθέσεων. Όπου στην πρώτη γραμμή οι μέρες της εβδομάδας (με το πρώτο γράμμα της
ημέρα στα αγγλικά) και για τους τύπους βάρδιας αντιστοιχούν E  Early (Πρωί),
L  Late (Απόγευμα), N  Night (Νύχτα).

|M|T|W|T|F|S|S| |M|T|W|T|F|S|S| |M|T|W|T|F|S|S| |M|T|W|T|F|S|S|


-----------------------------------------------------------------------
Patrick |N|-|E|E|E|L|L| |-|-|E|E|L|L|L| |-|N|N|N|N|N|N| |-|L|L|L|L|N|N|
Andrea |L|L|-|-|L|L|L| |N|N|N|N|N|-|L| |L|L|L|-|-|N|N| |N|N|N|-|-|E|E|
Stefaan |N|N|N|N|-|-|-| |E|E|L|L|-|-|E| |N|N|-|-|E|E|E| |N|N|-|-|-|L|L|
Sara |-|-|-|N|N|N|N| |N|-|-|-|E|E|E| |E|L|L|L|-|-|-| |E|E|E|E|E|-|-|
Nguyen |E|E|L|L|-|E|E| |L|L|-|L|N|N|N| |-|E|E|E|L|L|L| |-|L|L|N|N|N|N|

Η έξοδος που δίνει ο Validator είναι :

Hard constraint violations


--------------------------

Minimal coverage constraints: 0


Required skill constraints: 0
Illegal shift type succession constraints: 0
Single assignment per day: 0

Cost per constraint type


------------------------

Total assignment constraints: 320


Consecutive constraints: 465
Non working days constraints: 330
Preferences: 70
Max working weekend: 90
Complete weekends: 60
Optimal coverage constraints: 240

------------------------
Total cost: 1575

Διπλωματική Εργασία 104


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Πάμε να δούμε αναλυτικά αν ικανοποιούνται οι αυστηροί περιορισμοί (hard constraints)


H1. Μια εργασία ανά ημέρα – Single assignment per day

Βλέπουμε ξεκάθαρα ότι δεν υπάρχει νοσηλευτής να εργάζεται 2 φορές κάποια ημέρα
οπότε δεν υπάρχει όντως κάποια παραβίαση.

Όντως και ο Validator αναφέρει: Single assignment per day: 0 (εννοεί με


αυτόν τον τρόπο ότι δεν υπάρχει παραβίαση)

Η2. Υποστελέχωση - Under-staffing

Ο αριθμός των νοσηλευτών/τριων για κάθε βάρδια και για κάθε δεξιότητα πρέπει να είναι
τουλάχιστον ίσος με την ελάχιστη απαίτηση της βάρδιας – δεξιότητας.

Εδώ θα χρειαστούμε τα αρχεία week_data και των αναθέσεων ώστε να δούμε τις
απαιτήσεις κάθε εβδομάδας καθώς και τις αναθέσεις. Στα αρχεία δεδομένων εβδομάδας
δηλώνεται για κάθε μέρα (κάθε μέρα είναι μια παρένθεση), η ελάχιστη και η βέλτιστη
απαίτηση αναθέσεων για κάθε τύπο βάρδιας και δεξιότητας. Στα αρχεία λύσεων οι
αναθέσεις ανά νοσηλευτή/τρια, η μέρα, ο τύπος βάρδιας και η δεξιότητα.

Για την 1η εβδομάδα :

REQUIREMENTS 1ης εβδομάδας

Early HeadNurse (0,0) (0,0) (1,1) (0,0) (1,1) (0,0) (0,0)


Early Nurse (1,1) (1,1) (0,1) (1,1) (0,1) (1,1) (1,1)
Late HeadNurse (1,1) (0,0) (0,0) (0,0) (0,0) (1,1) (1,1)
Late Nurse (0,1) (1,1) (1,1) (1,1) (1,1) (1,1) (1,1)
Night HeadNurse (1,1) (0,0) (1,1) (1,1) (0,0) (0,0) (0,0)
Night Nurse (1,1) (1,1) (0,1) (1,1) (0,1) (1,1) (1,1)

Διπλωματική Εργασία 105


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Για την 1η εβδομάδα υπάρχουν οι παρακάτω ελάχιστες απαιτήσεις:

1. Τύπος Βάρδιας Early, δεξιότητα HeadNurse  Τετάρτη και Παρασκευή 1 βάρδια

2. Τύπος Βάρδιας Early, δεξιότητα Nurse  για όλες τις μέρες εκτός Τετάρτης και
Παρασκευής (ακόμα και σαββατοκύριακο) 1 βάρδια.

3. Τύπος Βάρδιας Late, δεξιότητα Headnurse  Δευτέρα, Σάββατο & Κυριακή 1


βάρδια

4. Τύπος Βάρδιας Late, δεξιότητα Nurse  Τρίτη εώς και Κυριακή 1 βάρδια

5. Τύπος Βάρδιας Night, δεξιότητα HeadNurse  Δευτέρα , Τετάρτη και Πέμπτη 1


βάρδια

6. Τύπος Βάρδιας Night, δεξιότητα Nurse  όλες τις μέρες εκτός Τετάρτη &
Παρασκευή 1 βάρδια

Οι αναθέσεις για την 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

Διπλωματική Εργασία 106


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Βλέπουμε για κάθε απαίτηση:

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 (άρα ικανοποιείται)

Για την 2η εβδομάδα :

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η εβδομάδα υπάρχουν οι παρακάτω ελάχιστες απαιτήσεις:

1. Τύπος Βάρδιας Early, δεξιότητα HeadNurse, Δευτέρα και Κυριακή 1 βάρδια

2. Τύπος Βάρδιας Early, δεξιότητα Nurse, για όλες τις μέρες εκτός Δευτέρας (ακόμα
και σαββατοκύριακο) 1 βάρδια.

3. Τύπος Βάρδιας Late, δεξιότητα Headnurse, Πέμπτη & Κυριακή 1 βάρδια

4. Τύπος Βάρδιας Late, δεξιότητα Nurse, κάθε μέρα εκτός Σάββατο 1 βάρδια

Διπλωματική Εργασία 107


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

5. Τύπος Βάρδιας Night, δεξιότητα HeadNurse, Δευτέρα , Τετάρτη και Παρασκευή


1 βάρδια

6. Τύπος Βάρδιας Night, δεξιότητα Nurse, όλες τις μέρες εκτός Τρίτη & Τετάρτη 1
βάρδια

Οι αναθέσεις για την 2η εβδομάδα είναι :

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 (άρα ικανοποιείται)

Διπλωματική Εργασία 108


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

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 (άρα ικανοποιείται)

Για την 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)

Για την 3η εβδομάδα υπάρχουν οι παρακάτω ελάχιστες απαιτήσεις:

1. Τύπος Βάρδιας Early, δεξιότητα Nurse, για όλες τις μέρες 1 βάρδια.

2. Τύπος Βάρδιας Late, δεξιότητα Headnurse, Τρίτη & Τετάρτη 1 βάρδια

3. Τύπος Βάρδιας Late, δεξιότητα Nurse, κάθε μέρα εκτός Δευτέρα & Σάββατο 1
βάρδια

4. Τύπος Βάρδιας Night, δεξιότητα HeadNurse, Δευτέρα , Τρίτη, Σάββατο και


Κυριακή 1 βάρδια

5. Τύπος Βάρδιας Night, δεξιότητα Nurse, όλες τις μέρες εκτός Δευτέρα &
Παρασκευή 1 βάρδια

Διπλωματική Εργασία 109


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Οι αναθέσεις για την 3η εβδομάδα είναι :

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 (ικανοποιείται)

2. Andrea Tue Late HeadNurse, Andrea Wed Late HeadNurse (ικανοποιείται)

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 (ικανοποιείται)

Διπλωματική Εργασία 110


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Για την 4η εβδομάδα :

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)

Για την 4η εβδομάδα υπάρχουν οι παρακάτω ελάχιστες απαιτήσεις (ίδιες με 3η


εβδομάδα):

1. Τύπος Βάρδιας Early, δεξιότητα Nurse, για όλες τις μέρες 1 βάρδια.

2. Τύπος Βάρδιας Late, δεξιότητα Headnurse, Τρίτη & Τετάρτη 1 βάρδια

3. Τύπος Βάρδιας Late, δεξιότητα Nurse, κάθε μέρα εκτός Δευτέρα & Σάββατο 1
βάρδια

4. Τύπος Βάρδιας Night, δεξιότητα HeadNurse, Δευτέρα , Τρίτη, Σάββατο και


Κυριακή 1 βάρδια

5. Τύπος Βάρδιας Night, δεξιότητα Nurse, όλες τις μέρες εκτός Δευτέρα &
Παρασκευή 1 βάρδια

Διπλωματική Εργασία 111


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Οι αναθέσεις για την 4η εβδομάδα είναι :

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 (ικανοποιείται)

2. Patrick Tue Late HeadNurse, Patrick Wed Late HeadNurse (ικανοποιείται)

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,

Διπλωματική Εργασία 112


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Nguyen Sat Night Nurse, Nguyen Sun Night Nurse (ικανοποιείται)

Άρα ικανοποιούνται όλες οι απαιτήσεις του περιορισμού H2 για την ελάχιστη


κάλυψη της βάρδιας – δεξιότητας όπως αναφέρει και ο Validator :

Στην έξοδο του Validator αναφέρεται σαν : Minimal coverage constraints : 0

Η3. Διαδοχές τύπου βάρδιας - Shift type successions

Οι αναθέσεις τύπου βάρδιας ενός νοσηλευτή/τριας σε δύο συνεχόμενες ημέρες πρέπει να


ανήκουν στις νόμιμες επιτρεπτές διαδοχές που προβλέπονται στο σενάριο.

Στο παράδειγμα μας δεν επιτρέπεται να έχουμε μετά από Late  Early και μετά από
Night  Early ή Late

Κοιτώνας το πλάνο των 4 εβδομάδων που παράχθηκε από την λύση βλέπουμε:

|M|T|W|T|F|S|S| |M|T|W|T|F|S|S| |M|T|W|T|F|S|S| |M|T|W|T|F|S|S|


-----------------------------------------------------------------------
Patrick |N|-|E|E|E|L|L| |-|-|E|E|L|L|L| |-|N|N|N|N|N|N| |-|L|L|L|L|N|N|
Andrea |L|L|-|-|L|L|L| |N|N|N|N|N|-|L| |L|L|L|-|-|N|N| |N|N|N|-|-|E|E|
Stefaan |N|N|N|N|-|-|-| |E|E|L|L|-|-|E| |N|N|-|-|E|E|E| |N|N|-|-|-|L|L|
Sara |-|-|-|N|N|N|N| |N|-|-|-|E|E|E| |E|L|L|L|-|-|-| |E|E|E|E|E|-|-|
Nguyen |E|E|L|L|-|E|E| |L|L|-|L|N|N|N| |-|E|E|E|L|L|L| |-|L|L|N|N|N|N|

Παρατηρούμε ότι δεν παραβιάζεται κάποιος από τους 2 περιορισμούς.

Διπλωματική Εργασία 113


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Λαμβάνουμε επίσης υπόψιν το αρχικό ιστορικό :

<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>

Επίσης παρατηρούμε ότι δεν υπάρχει καμία παραβίαση στον προγραμματισμό της πρώτης
εβδομάδας.

Διπλωματική Εργασία 114


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Άρα συνολικά δεν υπάρχει κάποια παραβίαση για τον περιορισμό H3.

όπως δείχνει και ο Validator : Illegal shift type succession constraints: 0

Η4. Έλλειψη απαιτούμενης δεξιότητας - Missing required skill

Μια βάρδια μιας συγκεκριμένης δεξιότητας πρέπει απαραίτητα να συμπληρωθεί από έναν
νοσηλευτή/τρια που έχει αυτή την ικανότητα.

Βλέπουμε ότι όλοι οι νοσηλευτές έχουν την δεξιότητα HeadNurse & Nurse εκτός από
τους Sara & Nguyen που έχουν δεξιότητα μόνο Nurse αλλά από τις αναθέσεις όντως
βλέπουμε ότι δεν έχουν λάβει ανάθεση σε HeadNurse οπότε ικανοποιείται και αυτός ο
αυστηρός περιορισμός H4 όπως αναφέρει και ο Validator : Required skill
constraints: 0 .

Γ.4.2 Αξιολόγηση χαλαρών (soft) περιορισμών

Για να δούμε τώρα αναλυτικά τους χαλαρούς περιορισμούς (soft constraints) :

S1. Ανεπαρκές προσωπικό για βέλτιστη κάλυψη - Insufficient staffing for optimal
coverage (βάρος 30):

Ο αριθμός των νοσηλευτών/τριων για κάθε βάρδια και για κάθε δεξιότητα πρέπει να είναι
ίσος με τη βέλτιστη απαίτηση. Κάθε νοσηλευτής/τρια που λείπει τιμωρείται ανάλογα με
το αντίστοιχο βάρος. Οι επιπλέον νοσηλευτές πάνω από τη βέλτιστη τιμή δεν
λαμβάνονται υπόψη στο κόστος.

Για κάθε βάρδια που λείπει για την βέλτιστη κάλυψη της βάρδιας – δεξιότητας υπάρχει
«ποινή» με βάρος 30.

Διπλωματική Εργασία 115


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Παρατηρούμε ότι υπάρχουν οι παρακάτω ελλείψεις για την βέλτιστη κάλυψη (σύμφωνα
με τις απαιτήσεις REQUIREMENTS από τα αρχεία week data) :

1. Εβδομάδα 1η , Mon, Late, Nurse


2. Εβδομάδα 1η , Wed, Early, Nurse
3. Εβδομάδα 1η , Wed, Night, Nurse
4. Εβδομάδα 1η , Fri, Early, Nurse
5. Εβδομάδα 2η , Mon, Early, Nurse
6. Εβδομάδα 2η , Wed, Night, Nurse
7. Εβδομάδα 3η , Mon, Night, Nurse
8. Εβδομάδα 4η , Mon, Late, Nurse

Άρα έχουμε 8 παραβιάσεις οπότε :

Η συνολική ποινή για τον περιορισμό S1 είναι 8 Χ 30 βάρος = 240 βάρος συνολικά

όπως αναφέρει και ο Validator: Optimal coverage constraints: 240

S2. Διαδοχικές αναθέσεις - Consecutive assignments (βάρος 15/30)

Πρέπει να τηρούνται ο ελάχιστος και ο μέγιστος αριθμός διαδοχικών εργασιών, ανά


βάρδια ή συνολικά. Η αξιολόγησή τους περιλαμβάνει επίσης δεδομένα συνόρων. Κάθε
επιπλέον ημέρα ή μέρα που λείπει πολλαπλασιάζεται με το αντίστοιχο βάρος. Τα βάρη για
διαδοχικούς περιορισμούς βάρδιας και για συνεχόμενες εργάσιμες ημέρες είναι 15 και 30
αντίστοιχα.

Έχουμε το πλάνο αναθέσεων και το αρχικό ιστορικό :

|M|T|W|T|F|S|S| |M|T|W|T|F|S|S| |M|T|W|T|F|S|S| |M|T|W|T|F|S|S|


-----------------------------------------------------------------------
Patrick |N|-|E|E|E|L|L| |-|-|E|E|L|L|L| |-|N|N|N|N|N|N| |-|L|L|L|L|N|N|
Andrea |L|L|-|-|L|L|L| |N|N|N|N|N|-|L| |L|L|L|-|-|N|N| |N|N|N|-|-|E|E|
Stefaan |N|N|N|N|-|-|-| |E|E|L|L|-|-|E| |N|N|-|-|E|E|E| |N|N|-|-|-|L|L|
Sara |-|-|-|N|N|N|N| |N|-|-|-|E|E|E| |E|L|L|L|-|-|-| |E|E|E|E|E|-|-|
Nguyen |E|E|L|L|-|E|E| |L|L|-|L|N|N|N| |-|E|E|E|L|L|L| |-|L|L|N|N|N|N|

Διπλωματική Εργασία 116


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

NURSE_HISTORY (σε μορφή text για ευκολία)

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 (λαμβάνοντας υπόψιν και το


αρχικό History file 0). Εκεί έχει 4 ημέρες εργασίας από προηγούμενη εβδομάδα.

Παρατηρούμε ότι υπάρχει παραβίαση μόνο για το μέγιστο αριθμό εργαζόμενων ημερών
εργασίας (Consecutive working days) στην 3η εβδομάδα (1 έξτρα μέρα – 1 παραβίαση)
και στην 4η εβδομάδα (1 έξτρα μέρα – 1 παραβίαση). Δηλαδή «ποινή» 2 Χ 30 = 60 βάρος

Διπλωματική Εργασία 117


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Όσον αφορά τις βάρδιες, βλέπουμε το από το αρχείο σεναρίου τις ελάχιστες και μέγιστες
διαδοχικές βάρδιες :

<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>

Παρατηρούμε ότι για τον Patrick υπάρχει παραβίαση για :

 Την 1η εβδομάδα έχει από το ιστορικό 1 βάρδια Night και του ανατίθεται άλλη μία
Night σύνολο 2 αλλά το ελάχιστο είναι 4 από το <ShiftTypes> άρα έχουμε ποινή
2 Χ 15 = 30 βάρος

 Την 3η εβδομάδα κάνει 6 διαδοχικές βάρδιες Night οπότε ξεπερνάει το όριο 5 κατά
1 δηλαδή η «ποινή» είναι: 15 βάρος

 Την 4η εβδομάδα για τις μέγιστες διαδοχικές βάρδιες Απόγευμα παραβίαση κατά 1
(κάνει 4 βάρδιες) άρα 15 βάρος

Συνολικό βάρος για τον περιορισμό S2 για τον Patrick : 120 βάρος

Διπλωματική Εργασία 118


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Για την νοσηλεύτρια Andrea: Σύμβαση επίσης Fulltime με όριο διαδοχικών αναθέσεων
ελάχιστο – μέγιστο, 3 & 5 αντίστοιχα.

Για το κριτήριο Consecutive working days:

 Την 2η εβδομάδα έχει 8 διαδοχικές αναθέσεις σε συνέχεια της 1ης εβδομάδας άρα
παραβίαση 3 ημέρες Χ 30 κόστος = 90 βάρος

Για τις διαδοχικές βάρδιες:

 Την 3η εβδομάδα υπάρχουν 4 διαδοχικές βάρδιες Late άρα υπάρχει παραβίαση


κατά 1 ημέρα του μέγιστου ορίου 3, δηλαδή 1 Χ 15 = 15 βάρος

Συνολικό βάρος για τον περιορισμό S2 για την Andrea : 105 βάρος

Για τον νοσηλευτή Stefaan: Σύμβαση PartTime με όριο διαδοχικών αναθέσεων


ελάχιστο – μέγιστο, 3 & 5 αντίστοιχα.

Για το κριτήριο Consecutive working days: Δεν υπάρχει κάποια παραβίαση

Για τις διαδοχικές βάρδιες:

 Την 3η εβδομάδα υπάρχει από το ιστορικό 1 βάρδια Κυριακή Early που μετά
αλλάζει σε Night οπότε παραβιάζεται το ελάχιστο όριο 2 διαδοχικών βαρδιών
Early, δηλαδή ποινή 1 Χ 15 = 15 βάρος

 Την 3η εβδομάδα υπάρχουν 2 βάρδιες Night άρα παραβιάζεται το ελάχιστο όριο


των 4 διαδοχικών βαρδιών Night, δηλαδή ποινή 2 Χ 15 = 30 βάρος

 Την 4η εβδομάδα υπάρχουν 2 βάρδιες Night άρα παραβιάζεται το ελάχιστο όριο


των 4 διαδοχικών βαρδιών Night, δηλαδή ποινή 2 Χ 15 = 30 βάρος

Συνολικό βάρος για τον περιορισμό S2 για τον Stefaan: 75 βάρος

Διπλωματική Εργασία 119


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Για την νοσηλεύτρια Sara: Σύμβαση PartTime με όριο διαδοχικών αναθέσεων ελάχιστο
– μέγιστο, 3 & 5 αντίστοιχα.

Για το κριτήριο Consecutive working days:

 Την 3η εβδομάδα έχουμε 7 διαδοχικές αναθέσεις άρα παραβίαση 2 ημέρες από το


μέγιστο όριο 5 διαδοχικών αναθέσεων, δηλαδή ποινή 2 Χ 30 = 60 βάρος

Για τις διαδοχικές βάρδιες:

 Την 1η εβδομάδα έχει ήδη 1 βάρδια Late από την προηγούμενη εβδομάδα και στην
αρχή της 1ης εβδομάδας έχει άδεια οπότε παραβιάζεται το ελάχιστο όριο 2 των
διαδοχικών βαρδιών για Late. Άρα ποινή 1 Χ 15 = 15 βάρος

Συνολικό βάρος για τον περιορισμό S2 για την Sara: 75 βάρος

Για τον νοσηλευτή Nguyen: Σύμβαση FullTime με όριο διαδοχικών αναθέσεων


ελάχιστο – μέγιστο, 3 & 5 αντίστοιχα.

Για το κριτήριο Consecutive working days:

 Την 3η εβδομάδα έχουμε 6 διαδοχικές αναθέσεις άρα παραβίαση 1 ημέρα από το


μέγιστο όριο 5 διαδοχικών αναθέσεων, δηλαδή ποινή 1 Χ 30 = 30 βάρος

 Την 4η εβδομάδα έχουμε 6 διαδοχικές αναθέσεις άρα παραβίαση 1 ημέρα από το


μέγιστο όριο 5 διαδοχικών αναθέσεων, δηλαδή ποινή 1 Χ 30 = 30 βάρος

Για τις διαδοχικές βάρδιες:

 Την 2η εβδομάδα έχει 1 βάρδια Late (την Πέμπτη - Thu) οπότε παραβιάζεται το
ελάχιστο όριο 2 των διαδοχικών βαρδιών για Late. Άρα ποινή 1 Χ 15 = 15 βάρος

 Την 3η εβδομάδα έχει 3 διαδοχικές βάρδιες Night από το ιστορικό που μετά
υπάρχει ημέρα άδειας οπότε παραβιάζεται κατά 1 το ελάχιστο όριο 4 των
διαδοχικών βαρδιών για Night. Άρα ποινή 1 Χ 15 = 15 βάρος

Συνολικό βάρος για τον περιορισμό S2 για τον Nguyen: 90 βάρος

Η συνολική ποινή για τον περιορισμό S2 για όλους/ες είναι : 465 βάρος

Διπλωματική Εργασία 120


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Υπάρχει συμφωνία και με τον Validator: Consecutive constraints: 465

S3. Διαδοχικές ημέρες άδειας - Consecutive days off (βάρος 30)

Πρέπει να τηρείται ο ελάχιστος και ο μέγιστος αριθμός συνεχόμενων ημερών μη εργασίας


– ρεπό – άδειας (days off).

Ας δούμε ανά νοσηλευτή τι ισχύει από το πλάνο αναθέσεων και το αρχείο ιστορικού
καθώς και σύμφωνα με την σύμβαση τους που είναι τα όρια ελάχιστο και μέγιστο των
διαδοχικών ημερών άδειας :

Για τον νοσηλευτή Patrick: Σύμβαση Fulltime με ελάχιστο όριο διαδοχικών ημερών
άδειας 2 και μέγιστο όριο 3 ημέρες άδειας.

Οι παραβιάσεις του περιορισμού είναι:

 Την 1η εβδομάδα έχει 1 ημέρα άδειας ενώ το ελάχιστο όριο είναι 2 άρα ποινή 1 Χ
30 = 30 βάρος

 Την 3η εβδομάδα έχει 1 ημέρα άδειας (Δευτέρα) ενώ το ελάχιστο όριο είναι 2 άρα
ποινή 1 Χ 30 = 30 βάρος

 Την 4η εβδομάδα έχει 1 ημέρα άδειας (Δευτέρα) ενώ το ελάχιστο όριο είναι 2 άρα
ποινή 1 Χ 30 = 30 βάρος

Συνολικό βάρος για τον περιορισμό S3 για τον Patrick : 90 βάρος

Για την νοσηλεύτρια Andrea: Σύμβαση Fulltime με ελάχιστο όριο διαδοχικών ημερών
άδειας 2 και μέγιστο όριο 3 ημέρες άδειας.

Οι παραβιάσεις του περιορισμού είναι:

 Την 2η εβδομάδα έχει 1 ημέρα άδειας (το Σάββατο) ενώ το ελάχιστο όριο είναι 2
άρα ποινή

1 Χ 30 = 30 βάρος

Συνολικό βάρος για τον περιορισμό S3 για την Andrea: 30 βάρος

Διπλωματική Εργασία 121


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Για τον νοσηλευτή Stefaan: Σύμβαση PartTime με ελάχιστο όριο διαδοχικών ημερών
άδειας 3 και μέγιστο όριο 5 ημέρες άδειας.

Οι παραβιάσεις του περιορισμού είναι:

 Την 2η εβδομάδα έχει 2 ημέρα άδειας (Παρασκευή και Σάββατο) ενώ το ελάχιστο
όριο είναι 3 διαδοχικές ημέρες άδειας άρα ποινή 1 Χ 30 = 30 βάρος

 Την 3η εβδομάδα έχει 2 ημέρα άδειας (Τετάρτη και Πέμπτη) ενώ το ελάχιστο όριο
είναι 3 διαδοχικές ημέρες άδειας άρα ποινή 1 Χ 30 = 30 βάρος

Συνολικό βάρος για τον περιορισμό S3 για τον Stefaan: 60 βάρος

Για την νοσηλεύτρια Sara: Σύμβαση PartTime με ελάχιστο όριο διαδοχικών ημερών
άδειας 3 και μέγιστο όριο 5 ημέρες άδειας.

Οι παραβιάσεις του περιορισμού είναι:

Δεν υπάρχουν παραβιάσεις.

Συνολικό βάρος για τον περιορισμό S3 για την Sara: 0 βάρος

Για τον νοσηλευτή 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 βάρος

Διπλωματική Εργασία 122


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Συνολικό βάρος για τον περιορισμό S3 για τον Nguyen: 150 βάρος

Η συνολική ποινή για τον περιορισμό S3 είναι: 330 βάρος

Υπάρχει συμφωνία και με τον Validator όπου : Non working days constraints:
330

S4. Προτιμήσεις – Preferences (βάρος 10)

Κάθε ανάθεση σε ανεπιθύμητη βάρδια τιμωρείται με το αντίστοιχο βάρος. Oι προτιμήσεις


για μη εργασία δηλώνονται στο αρχείο δεδομένων εβδομάδας (week data) για κάθε
νοσηλευτή/τρια.

Ας δούμε τα στοιχεία από τα αρχεία των week data ανά εβδομάδα:

Για την 1η εβδομάδα οι προτιμήσεις μη εργασίας είναι (μορφή text) :

SHIFT_OFF_REQUESTS = 5
Andrea Any Tue
Stefaan Any Wed
Nguyen Any Fri
Nguyen Any Sat
Sara Late Sat

Οι παραβιάσεις είναι:

 Andrea Any Tue (δουλεύει)

 Stefaan Any Wed (δουλεύει)

 Nguyen Any Sat (δουλεύει)

Για την 1η εβδομάδα έχουμε 3 παραβιάσεις Χ 10 = 30 βάρος

Για την 2η εβδομάδα οι προτιμήσεις μη εργασίας είναι (μορφή text) :

SHIFT_OFF_REQUESTS = 4
Nguyen Late Tue
Andrea Any Wed
Sara Early Thu
Sara Night Thu

Διπλωματική Εργασία 123


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Οι παραβιάσεις είναι:

 Andrea Any Wed (δουλεύει)

 Nguyen Late Tue (δουλεύει Late)

Για την 2η εβδομάδα έχουμε 2 παραβιάσεις Χ 10 = 20 βάρος

Για την 3η & 4η εβδομάδα οι προτιμήσεις μη εργασίας είναι (μορφή text) :

SHIFT_OFF_REQUESTS = 2
Andrea Late Fri
Andrea Any Sat

Οι παραβιάσεις είναι:

 Andrea Any Sat (δουλεύει)

Για την 3η εβδομάδα έχουμε 1 παραβίαση Χ 10 = 10 βάρος

Για την 4η εβδομάδα

Οι παραβιάσεις είναι:

 Andrea Any Sat (δουλεύει)

Για την 4η εβδομάδα έχουμε 1 παραβίαση Χ 10 = 10 βάρος

Η συνολική ποινή για τον περιορισμό S4 είναι : 70 βάρος

Πράγματι υπάρχει συμφωνία και με τον Validator όπου : Preferences: 70

Διπλωματική Εργασία 124


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

S5. Πλήρες σαββατοκύριακο - Complete week-end (βάρος 30)

Κάθε νοσηλευτής/τρια που έχει ορισμένη την τιμή πλήρους Σαββατοκύριακου σε ΝΑΙ
(True), πρέπει να εργάζεται είτε και τις 2 ήμερες του σαββατοκύριακου είτε καμία. Εάν
εργάζεται μόνο μία από τις δύο ημέρες Σάββατο ή Κυριακή αυτό τιμωρείται με το
αντίστοιχο βάρος.

Τα όρια ορίζονται στο αρχείο σεναρίου στο τμήμα Contracts. Από ότι βλέπουμε και στις
δύο συμβάσεις FullTime & PartTime η τιμή Complete Weekend έχει οριστεί σε 1 άρα
υπάρχει ποινή αν κάποιος/α δεν εργάζεται πλήρες σαββατοκύριακο.

Κοιτώντας τις αναθέσεις για κάθε νοσηλευτή:

 Patrick : δουλεύει όλα τα σαββατοκύριακα πλήρως (και τις 2 ημέρες)

 Andrea : την 2η εβδομάδα δεν δουλεύει πλήρες σαββατοκύριακο (μόνο Κυριακή)


οπότε υπάρχει ποινή με βάρος 30

 Stefaan : την 2η εβδομάδα δεν δουλεύει πλήρες σαββατοκύριακο (μόνο Κυριακή)


οπότε υπάρχει ποινή με βάρος 30

 Sara : δουλεύει όλα τα σαββατοκύρια πλήρως ή δεν δουλεύει καθόλου

 Nguyen : δουλεύει όλα τα σαββατοκύρια πλήρως

Η συνολική ποινή για τον περιορισμό S5 είναι : 60 βάρος

Υπάρχει συμφωνία με τον Validator όπου αναφέρεται : Complete weekends: 60

Διπλωματική Εργασία 125


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Περιορισμοί που εκτείνονται σε όλο τον ορίζοντα προγραμματισμού

Οι ακόλουθοι (χαλαροί) περιορισμοί αξιολογούνται μόνο στο τέλος της περιόδου


προγραμματισμού:

S6. Συνολικές αναθέσεις - Total assignments (βάρος 20)

Για κάθε νοσηλευτή/τρια ο συνολικός αριθμός των αναθέσεων (εργάσιμες ημέρες) πρέπει
να περιλαμβάνεται στα όρια (ελάχιστο και μέγιστο) που επιβάλλει η σύμβασή του/της. Η
διαφορά (προς κάθε κατεύθυνση), πολλαπλασιασμένη με το βάρος της, προστίθεται στον
πίνακα βαρών.

Για κάθε νοσηλευτή/τρια:

 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 βάρος

Η συνολική ποινή για τον περιορισμό S6 είναι : 320 βάρος

Υπάρχει συμφωνία με τον Validator : Total assignment constrainsts: 320

Διπλωματική Εργασία 126


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

S7. Συνολικά εργάσιμα σαββατοκύριακα - Total working week-ends (βάρος 30)

Για κάθε νοσηλευτή/τρια, ο αριθμός των εργαζόμενων σαββατοκύριακων που εργάζεται


πρέπει να είναι μικρότερος ή ίσος με το μέγιστο επιτρεπτό. Ένα σαββατοκύριακο
θεωρείται «εργαζόμενο» εάν τουλάχιστον μία από τις δύο ημέρες (Σάββατο και Κυριακή)
είναι εργάσιμη. Κάθε παραβίαση πολλαπλασιασμένη με το βάρος προστίθεται στην ποινή
των χαλαρών περιορισμών.

Από το αρχείο σεναρίου βλέπουμε ότι και η σύμβαση FullTime και η σύμβαση PartTime
ορίζουν μέγιστα εργαζόμενα σαββατοκύριακα στην περίοδο προγραμματισμού τα 3.
Προσοχή στο ότι στα αρχεία εισόδου με μορφή text ο περιορισμός διαφέρει και είναι στα
2 μέγιστα εργαζόμενα σαββατοκύριακα οπότε αν τρέξουμε τον Validator με τα text files
βγάζει διαφορετική συνολική ποινή 1695!

Για κάθε νοσηλευτή/τρια:

 Patrick : Βλέπουμε στο συνολικό πρόγραμμα ότι δουλεύει 4 σαββατοκύριακα.


Άρα δουλεύει 1 παραπάνω από το όριο 3 με ποινή 1 Χ 30 = 30 βάρος

 Andrea : Βλέπουμε στο συνολικό πρόγραμμα ότι δουλεύει 4 σαββατοκύριακα.


Άρα δουλεύει 1 παραπάνω από το όριο 3 με ποινή 1 Χ 30 = 30 βάρος

 Stefaan : Βλέπουμε στο συνολικό πρόγραμμα ότι δουλεύει 3 σαββατοκύριακα.


Άρα δεν υπάρχει παραβίαση του περιορισμού.

 Sara : Βλέπουμε στο συνολικό πρόγραμμα ότι δουλεύει 2 σαββατοκύριακα. Άρα


δεν υπάρχει παραβίαση του περιορισμού.

 Nguyen : Βλέπουμε στο συνολικό πρόγραμμα ότι δουλεύει 4 σαββατοκύριακα.


Άρα δουλεύει 1 παραπάνω από το όριο 3 με ποινή 1 Χ 30 = 30 βάρος

Η συνολική ποινή για τον περιορισμό S7 λοιπόν είναι : 90 βάρος

Υπάρχει συμφωνία με τον Validator : Max working weekend: 90

Διπλωματική Εργασία 127


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Αθροίζοντας λοιπόν τους περιορισμούς S1 έως S7 έχουμε:

 Η συνολική ποινή για τον περιορισμό S1 είναι : 240 βάρος

 Η συνολική ποινή για τον περιορισμό S2 είναι : 465 βάρος

 Η συνολική ποινή για τον περιορισμό S3 είναι: 330 βάρος

 Η συνολική ποινή για τον περιορισμό S4 είναι : 70 βάρος

 Η συνολική ποινή για τον περιορισμό S5 είναι : 60 βάρος

 Η συνολική ποινή για τον περιορισμό S6 είναι : 320 βάρος

 Η συνολική ποινή για τον περιορισμό S7 είναι : 90 βάρος

Τελικό άθροισμα βαρών : 1575

Υπάρχει συμφωνία και σε αυτό με τον Validator: Total cost: 1575

Διπλωματική Εργασία 128


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Παράρτημα Δ: Επεξήγηση των αρχείων κώδικα και της


χρήσης–εκτέλεσης του επιλυτή.

Δ.1 Περιγραφή των αρχείων κώδικα


Ακολουθεί η περιγραφή των αρχείων με τον κώδικα Java που βρίσκονται στον φάκελο
Java_code. Πολλά από τα αρχεία αφορούν την είσοδο των δεδομένων εισόδου από τα
αρχεία XML ή την έξοδο δεδομένων σε αρχεία XML.
Αρχεία που αφορούν την είσοδο (διάβασμα) και έξοδο (γράψιμο) δεδομένων από/σε
XML αρχεία:

 Assignment.java : Περιέχει την κλάση Assignment η οποία χρησιμοποιείται για


να περιγράψει μια ανάθεση η οποία αργότερα μια συλλογή από αυτές (η λύση) θα
γραφτεί σαν έξοδος στο αρχείο XML.
 Contract.java : Περιέχει την κλάση Contract η οποία χρησιμοποιείται για να
περιγράψει μία σύμβαση εργασίας κατά την είσοδο δεδομένων από το XML
αρχείο σεναρίου (scenario file).
 ForbShiftTypeSuccession.java : Περιέχει την κλάση ForbShiftTypeSuccession η
οποία χρησιμοποιείται για να περιγράψει μία απαγορευμένη διαδοχή βάρδιας κατά
την είσοδο δεδομένων από το XML αρχείο σεναρίου (scenario file).
 MinMaxValue.java : Περιέχει την κλάση MinMaxValue που χρησιμοποιείται για
διάφορες περιπτώσεις ελάχιστου και μέγιστου στο αρχείο σεναρίου όπως στις
βάρδιες ο ελάχιστος και μέγιστος αριθμός συνεχόμενων εργάσιμων ημερών ή στις
συμβάσεις εργασίας (Contract) επίσης.
 Nurse.java : Περιέχει την κλάση Nurse η οποία χρησιμοποιείται για να
περιγράψει μία νοσηλεύτρια κατά την είσοδο δεδομένων από το XML αρχείο
σεναρίου (scenario file).
 NurseHistory.java : Περιέχει την κλάση NurseHistory η οποία χρησιμοποιείται
για να περιγράψει ένα ιστορικό νοσηλεύτριας από την προηγούμενη εβδομάδα
κατά την είσοδο δεδομένων από το XML αρχείο ιστορικού (history file).

Διπλωματική Εργασία 129


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 ReqCoverage.java : Περιέχει την κλάση ReqCoverage που χρησιμοποιείται στο


αρχείο δεδομένων εβδομάδας (weekdata file) για να περιγράψει το αίτημα για την
ελάχιστη και την βέλτιστη κάλυψη σε δεξιότητα και βάρδια.
 Requirement.java : Περιέχει την κλάση Requirement η οποία χρησιμοποιείται
για να περιγράψει μία απαίτηση κάλυψης για μια δεξιότητα και ένα τύπο βάρδιας
για όλες τις μέρες της εβδομάδας κατά την είσοδο δεδομένων από το XML αρχείο
δεδομένων εβδομάδας (weekdata file).
 ShiftOffRequest.java : Περιέχει την κλάση ShiftOffRequest η οποία
χρησιμοποιείται για να περιγράψει μία απαίτηση νοσηλεύτριας για μη εργασία
κατά την είσοδο δεδομένων από το XML αρχείο δεδομένων εβδομάδας (weekdata
file).
 ShiftType.java : Περιέχει την κλάση ShiftType η οποία χρησιμοποιείται για να
περιγράψει ένα τύπο βάρδιας κατά την είσοδο δεδομένων από το XML αρχείο
σεναρίου (scenario file).
 Scenario.java : Περιέχει την κλάση Scenario η οποία χρησιμοποιείται για να
περιγράψει ολόκληρο το αρχείο σεναρίου (scenario file) κατά την είσοδο
δεδομένων από το XML αρχείο.
 WeekData.java : Περιέχει την κλάση WeekData η οποία χρησιμοποιείται για να
περιγράψει ολόκληρο το αρχείο δεδομένων εβδομάδας (weekdata file) κατά την
είσοδο δεδομένων από το XML αρχείο.
 History.java : Περιέχει την κλάση History η οποία χρησιμοποιείται για να
περιγράψει ολόκληρο το αρχείο ιστορικού (history file) κατά την είσοδο
δεδομένων από το XML αρχείο.
 Solution.java : Περιέχει την κλάση Solution η οποία χρησιμοποιείται για να
περιγράψει ολόκληρο το σύνολο των αναθέσεων (δηλαδή μια λύση για μία
εβδομάδα) κατά την έξοδο δεδομένων και το γράψιμο στο XML αρχείο των
λύσεων (solution file).
 JAXB_ReadXMLHistory.java : Περιέχει την συνάρτηση getHistory η οποία
διαβάζει (Unmarhalling) ένα αρχείο ιστορικού που δίνεται ως παράμετρος της.

Διπλωματική Εργασία 130


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 JAXB_ReadXMLScenario.java : Περιέχει την συνάρτηση getScenario η οποία


διαβάζει (Unmarhalling) ένα αρχείο σεναρίου (scenario file) που δίνεται ως
παράμετρος της.
 JAXB_ReadXMLSolution.java : Περιέχει την συνάρτηση getSolution η οποία
διαβάζει (Unmarhalling) ένα αρχείο λύσης που δίνεται ως παράμετρος της
(χρησιμοποιείται για debugging).
 JAXB_ReadXMLWeekData.java : Περιέχει την συνάρτηση getWeekData η
οποία διαβάζει (Unmarhalling) ένα αρχείο δεδομένων εβδομάδας (weekdata file)
που δίνεται ως παράμετρος της.
 JAXB_WriteXMLSolution : Περιέχει την συνάρτηση WriteXMLtoFile η οποία
γράφει (Marhalling) μια λύση που δίνεται ως παράμετρος της σε ένα αρχείο XML
το οποίο επίσης δίνεται ως παράμετρος.

Αλλα αρχεία που περιέχουν τις συναρτήσεις του αλγόριθμου :

 CheckConstraints.java : Χρησιμοποιείται για τους ελέγχους εγκυρότητας της


λύσης που εξετάζουμε και τον υπολογισμό των βαρών (ποινών) των χαλαρών
περιορισμών. Περιέχει τις συναρτήσεις :
 Check_Hard_Constraints : Καλεί όλους τους ελέγχους για τους αυστηρούς
περιορισμούς H1-H2-H3-H4. Επιστρέφει την Boolean τιμή true αν η λύση
είναι έγκυρη.
 Check_Soft_Constraints : Καλεί όλους τους ελέγχους για τους χαλαρούς
περιορισμούς S1-S2-S3-S4-S5-S6-S7 (οι 2 τελευταίοι καλούνται μόνο την
τελευταία εβδομάδα του προβλήματος). Επιστρέφει το σύνολο των ποινών για
την λύση που εξετάζεται.
 CheckHard1 : κάνει έλεγχο για τον αυστηρό περιορισμό H1 και επιστρέφει την
Boolean τιμή true αν δεν υπάρχει παραβίαση.
 CheckHard2 : κάνει έλεγχο για τον αυστηρό περιορισμό H2 και επιστρέφει την
Boolean τιμή true αν δεν υπάρχει παραβίαση.
 CheckHard3 : κάνει έλεγχο για τον αυστηρό περιορισμό H3 και επιστρέφει την
Boolean τιμή true αν δεν υπάρχει παραβίαση.

Διπλωματική Εργασία 131


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 CheckHard3_History : κάνει έλεγχο για τον αυστηρό περιορισμό H3 όσον


αφορά την πλευρά του ιστορικού (προηγούμενη εβδομάδα) και επιστρέφει την
Boolean τιμή true αν δεν υπάρχει παραβίαση.
 CheckHard4 : κάνει έλεγχο για τον αυστηρό περιορισμό H4 και επιστρέφει την
Boolean τιμή true αν δεν υπάρχει παραβίαση.
 CheckSoft1 : κάνει έλεγχο για τον χαλαρό περιορισμό S1 όσον αφορά τον
χαλαρό περιορισμό για την βέλτιστη κάλυψη και επιστρέφει την ποινή –
βάρος.
 CheckSoft2_consecutiveworkingshifts : κάνει έλεγχο για τον χαλαρό
περιορισμό S2 όσον αφορά τις συνεχόμενες βάρδιες και επιστρέφει την ποινή
– βάρος.
 CheckSoft2_consecutiveworkingdays : κάνει έλεγχο για τον χαλαρό
περιορισμό S2 όσον αφορά τις συνεχόμενες ημέρες εργασίας και επιστρέφει
την ποινή – βάρος.
 CheckSoft3 : κάνει έλεγχο για τον χαλαρό περιορισμό S3 όσον αφορά τις
διαδοχικές ημέρες μη εργασίας (days off) και επιστρέφει την ποινή – βάρος.
 CheckSoft4 : κάνει έλεγχο για τον χαλαρό περιορισμό S4 όσον αφορά τις
προτιμήσεις μη εργασίας των νοσηλευτριών και επιστρέφει την ποινή – βάρος.
 CheckSoft5 : κάνει έλεγχο για τον χαλαρό περιορισμό S5 όσον αφορά τον
περιορισμό του πλήρες σαββατοκύριακου (complete weekend) και επιστρέφει
την ποινή – βάρος.
 CheckSoft6 : κάνει έλεγχο για τον χαλαρό περιορισμό S6 όσον αφορά τον
περιορισμό των συνολικών αναθέσεων και επιστρέφει την ποινή – βάρος.
 CheckSoft7 : κάνει έλεγχο για τον χαλαρό περιορισμό S7 όσον αφορά τον
περιορισμό των συνολικών εργαζόμενων σαββατοκύριακων και επιστρέφει την
ποινή – βάρος.

Διπλωματική Εργασία 132


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 FindSolutionByDay.java : Χρησιμοποιείται στην 1η φάση του αλγορίθμου για


την εύρεση της πρώτης έγκυρης λύσης και έχει μεθοδολογία για εύρεση για
παράδειγμα μιας νοσηλεύτριας σε μια ανάθεση. Περιέχει τις συναρτήσεις :
 create_assigns_matrix : Δημιουργεί τον πίνακα assigns_matrix από μια
λύση. Ο πίνακας αυτός χρησιμοποιείται ευρέως στον αλγόριθμο για
μετάβαση από μια λύση σε μία άλλη.
 solution_from_assigns_matrix : Το αντίθετο του προηγούμενου δηλαδή
παράγει μια λύση από έναν πίνακα assigns_matrix.
 check_max_days : Ελέγχει αν μια νοσηλεύτρια έχει ξεπεράσει το μέγιστο
όριο των εργαζόμενων ημερών.
 Find_Optimal_Coverage : Βελτιώνει την λύση προσθέτοντας κάποιες
βέλτιστες αναθέσεις.
 remove_from_assigns : Αφαιρεί αναθέσεις από μια λύση αν υπάρχει
αδιέξοδο.
 find_week_coverage : Η συνάρτηση που βρίσκει το πρόγραμμα της
εβδομάδας από μια μέρα και μετά. Καλεί την findNurseByLastDay για να
γίνουν οι αναθέσεις.
 findNurse : Βρίσκει τυχαία μια νοσηλεύτρια για ανάθεση αν υπάρχει
πρόβλημα στην εύρεση βάσει τελευταία ημέρας.
 findNurseByLastDay : Επιστρέφει μια νοσηλεύτρια για μια ανάθεση που
ζητείται βάσει της προηγούμενης ημέρας (την βάρδια). Η νοσηλεύτρια δεν
θα πρέπει να παραβιάζει κάποιο αυστηρό περιορισμό.

 Improve_Solution.java : Περιέχει τις περισσότερες συναρτήσεις για την 2η φάση


του αλγόριθμου στην οποία υπάρχει βελτίωση της πρώτης λύσης που έχει βρεθεί.
Περιέχει τις συναρτήσεις :
 fix_nurses_preferences : Βελτιώνει την λύση σε σχέση με τον περιορισμό
S4 των προτιμήσεων μη εργασίας των νοσηλευτριών.
 fix_max_weekends : Βελτιώνει την λύση σε σχέση με τον περιορισμό S7
για το μέγιστο αριθμό εργαζόμενων σαββατοκύριακων

Διπλωματική Εργασία 133


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 fix_complete_weekends : Βελτιώνει την λύση σε σχέση με τον περιορισμό


S5 για τον περιορισμό του complete weekend.
 copy_solution_by_matrix : Αντιγράφει μια λύση μέσω του πίνακα
assigns_matrix.
 checkhistoryshift : Ελέγχει αν η βάρδια της Δευτέρας για μια
νοσηλεύτρια έχει σύγκρουση όσον αφορά τον περιορισμό Η3 : Διαδοχές
τύπου βάρδιας σε σχέση με την προηγούμενη βάρδια από το ιστορικό.
Επιστρέφει την Boolean τιμή true αν είναι εντάξει και δεν υπάρχει
πρόβλημα διαδοχής.
 Checkpreviousshift : Ελέγχει αν η βάρδια που εξετάζεται για μια
νοσηλεύτρια έχει σύγκρουση όσον αφορά τον περιορισμό Η3 : Διαδοχές
τύπου βάρδιας σε σχέση με την προηγούμενη βάρδια της νοσηλεύτριας.
Επιστρέφει την Boolean τιμή true αν δεν υπάρχει πρόβλημα.
 Checknextshift : Ελέγχει αν η βάρδια που εξετάζεται για μια νοσηλεύτρια
έχει σύγκρουση όσον αφορά τον περιορισμό Η3 : Διαδοχές τύπου βάρδιας
σε σχέση με την βάρδια της νοσηλεύτριας την επόμενη ημέρα. Επιστρέφει
την Boolean τιμή true αν δεν υπάρχει πρόβλημα.
 fix_total_assigns_new : Βελτιώνει την λύση σε σχέση με τον περιορισμό
S6 : Συνολικές αναθέσεις. Εξετάζει την λύση όχι μόνο την τελευταία
εβδομάδα αλλά και τις προηγούμενες υπολογίζοντας αναλογικά τις μέρες
εργασίας.
 find_extra_max_days : Υπολογίζει τις παραπάνω μέρες που έχει δουλέψει
η νοσηλεύτρια (την τελευταία εβδομάδα της λύσης) ή αναλογικά τις μέρες
που θα δουλέψει.
 nurse_over_max_weekends : Ελέγχει αν η νοσηλεύτρια έχει δουλέψει
πάνω από το όριο των μεγιστων εργαζόμενων σαββατοκύριακων που έχει
στην σύμβαση εργασίας της.
 improve_for_single_workday : Βελτιώνει μια λύση αλλάζοντας βάρδιες
που αφορούν ημέρες εργασίας που είναι μόνες τους ανάμεσα σε ημέρες μη
εργασίας (days off). Έχει διαπιστωθεί από μελέτη ότι αυτές προσθέτουν
μεγάλο βάρος στην αντικειμενική συνάρτηση.

Διπλωματική Εργασία 134


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 improve_for_single_dayoff : Βελτιώνει μια λύση αλλάζοντας βάρδιες που


αφορούν ημέρες μη εργασίας (days off) που είναι μόνες τους ανάμεσα σε
ημέρες εργασίας (work days). Έχει διαπιστωθεί από μελέτη ότι αυτές
προσθέτουν μεγάλο βάρος στην αντικειμενική συνάρτηση.
 print_matrix : Τυπώνει τον πίνακα των αναθέσεων assigns matrix
(χρησιμοποιείται για λόγους debugging).
 print_final_ratio_matrix_days : Τυπώνει τον πίνακα των αναθέσεων
assigns matrix μαζί με τις ημέρες που υποθετικά θα δουλέψει αναλογικά σε
όλο το διάστημα των εβδομάδων (χρησιμοποιείται για λόγους debugging)..
 exchange_dayoff_with_work_per_day : Βελτιώνει μια λύση κάνοντας
εναλλαγή μια βάρδιας μη εργασίας με βάρδια εργασίας και επιλέγοντας την
καλύτερη λύση ανά ημέρα.
 exchange_work_with_work_per_day : Βελτιώνει μια λύση κάνοντας
εναλλαγή μιας βάρδιας εργασίας με βάρδια εργασίας και επιλέγοντας την
καλύτερη λύση ανά ημέρα.
 exchange_anything_per_day : Βελτιώνει μια λύση κάνοντας εναλλαγή
μιας βάρδιας με οποιαδήποτε άλλη βάρδια και επιλέγοντας την καλύτερη
λύση ανά ημέρα.
 exchange_dayoff_with_work_per_week : Βελτιώνει μια λύση κάνοντας
εναλλαγή μια βάρδιας μη εργασίας με βάρδια εργασίας και επιλέγοντας την
καλύτερη λύση ανά εβδομάδα.
 exchange_work_with_work_per_week : Βελτιώνει μια λύση κάνοντας
εναλλαγή μιας βάρδιας εργασίας με βάρδια εργασίας και επιλέγοντας την
καλύτερη λύση ανά εβδομάδα συνολικά.
 exchange_anything_per_week : Βελτιώνει μια λύση κάνοντας εναλλαγή
μιας βάρδιας με οποιαδήποτε άλλη βάρδια και επιλέγοντας την καλύτερη
λύση ανά όλη την εβδομάδα.
 exchange_dayoff_with_work_per_nurse : Βελτιώνει μια λύση κάνοντας
εναλλαγή μιας βάρδιας μη εργασίας με βάρδια εργασίας και επιλέγοντας
την καλύτερη λύση μετά από κάθε εξέταση νοσηλεύτριας.

Διπλωματική Εργασία 135


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 exchange_work_with_work_per_nurse : Βελτιώνει μια λύση κάνοντας


εναλλαγή μιας βάρδιας εργασίας με βάρδια εργασίας και επιλέγοντας την
καλύτερη λύση μετά από κάθε εξέταση νοσηλεύτριας
 exchange_anything_per_nurse : Βελτιώνει μια λύση κάνοντας εναλλαγή
μιας βάρδιας με οποιαδήποτε άλλη βάρδια και επιλέγοντας την καλύτερη
λύση μετά από κάθε εξέταση νοσηλεύτριας

Οι περισσότερες από αυτές έχουν περιγραφεί στο Κεφάλαιο 4, άλλες είναι βοηθητικές για
τις κύριες ενώ υπάρχουν και κάποιες που χρησιμοποιούνται για λόγους debugging
(print_final_ratio_matrix_days)

 FindSolutionSolver.java : Το βασικό αρχείο που περιέχει την public static void


main που εκτελεί τον αλγόριθμο. Από αυτό το αρχείο παράγεται το εκτελέσιμο.
Δίνονται σαν ορίσματα τα αρχεία δεδομένων εισόδου, γίνεται η ανάγνωση των
δεδομένων εισόδου και ακολούθως εκτελούνται οι συναρτήσεις που υλοποιούν την
1η και την 2η φάση του αλγορίθμου. Στο τέλος γίνεται η έξοδος του προγράμματος
γράφοντας την λύση στο XML αρχείο.

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


γραμμή εντολών (command prompt)
Για να γίνει η εκτέλεση του επιλυτή θα πρέπει καταρχήν να είναι εγκατεστημένη η Java
(JRE) προκειμένου να μπορει να εκτελεστεί το εργαλείο Simulator.jar που καλεί τον
επιλυτή (Solver) όπως και το εργαλείο Validator.jar που κάνει αξιολόγηση της
παραγώμενης λύσης. Προσοχή, για να τρέξει ο Validator πρέπει να τοποθετηθεί στον
φάκελο Simulator_out το αρχείο Validator.jar. Παρακάτω στον πίνακα Δ.1 φαίνεται ο
τρόπος εκτέλεσης (για το παράδειγμα της περίπτωσης 5 νοσηλευτριών και 4 εβδομάδων –
instance n005w4). Προσοχή! Δεν πρέπει να υπάρχουν κενά στον φάκελο από τον οποίο
προέρχονται τα αρχεία εισόδου αλλιώς ο Simulator αποτυγχάνει (προφανώς κάποιο bug
του εργαλείου Simulator). Να σημειωθεί ότι το εκτελέσιμο Solver.exe που
χρησιμοποιείται παράχθηκε από το αρχείο jar με το freeware πρόγραμμα Launch4j 3.14

Διπλωματική Εργασία 136


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

που έρχεται με BSD License και είναι ένα Cross Platform Java Application για παραγωγή
Windows native εκτελέσιμων.

java -jar simulator.jar --his Data\n005w4\H0-n005w4-0.xml --sce


Data\n005w4\Sc-n005w4.xml --weeks Data\n005w4\WD-n005w4-1.xml
Data\n005w4\WD-n005w4-2.xml Data\n005w4\WD-n005w4-3.xml
Data\n005w4\WD-n005w4-3.xml --solver solver.exe --outDir
Simulator_out --runDir Simulator_out

Πίνακας Δ.1 Τρόπος εκτέλεσης του επιλυτή σε γραμμή εντολών (command prompt)

Δ.3 Τρόπος εκτέλεσης του επιλυτή της Διπλωματικής Εργασίας σε


γραφικό περιβάλλον
Προκειμένου να είναι ευκολότερη και πιο πρακτική η εκτέλεση του επιλυτή (Solver.exe)
δημιουργήθηκε μια μικρή εφαρμογή για την επιλογή των αρχείων εισόδου, του φακέλου
εξόδου και την εκτέλεση του επιλυτή.

Ο χρήστης δηλαδή επιλέγει το αρχείο ιστορικού, το αρχείο σεναρίου, τον αριθμό των
εβδομάδων (4 ή 8 σύμφωνα με τους όρους του διαγωνισμού), τα αρχεία δεδομένων
εβδομάδας, την θέση των Simulator.jar & Solver.exe καθώς και τους φακέλους εξόδου και
εκτέλεσης του επιλυτή.

Η εφαρμογή για λόγους ευκολίας δημιουργήθηκε σε περιβάλλον Microsoft Visual Studio


και γλώσσα VB .Net μιας και υπάρχει η παροχή έτοιμων εργαλείων - controls) για την
υλοποίηση τέτοιων επιλογών. Υπάρχει διαθέσιμο έτσι λοιπόν το εκτελέσιμο
SolverExecution.exe

Ενδεικτικά υλοποιήθηκε σαν μια Windows Form εφαρμογή με controls όπως τα :

 Label
 TextBox
 RadioButton
 ListBox

Διπλωματική Εργασία 137


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

 Button
 OpenFileDialog
 FolderBrowserDialog

Προσοχή! Και εδώ ισχύει ότι δεν πρέπει να υπάρχουν κενά στον φάκελο από τον οποίο
προέρχονται τα αρχεία εισόδου αλλιώς ο Simulator αποτυγχάνει (προφανώς κάποιο bug
του εργαλείου Simulator).

Η αρχική οθόνη της μικρής αυτής εφαρμογής είναι όπως φαίνεται στην εικόνα Δ.1 :

Εικόνα Δ.1 : Η αρχική οθόνη της γραφικής εφαρμογής εκτέλεσης του επιλυτή (SolverExecution.exe)

Διπλωματική Εργασία 138


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Αρχικά επιλέγουμε το αρχείο ιστορικού πατώντας το κουμπί «Επιλογή αρχείου» δίπλα


στο Label “History File” οπότε βρίσκουμε το αρχείο ιστορικού και πατάμε το κουμπί
«Άνοιγμα» στο control OpenFileDialog. Το ίδιο γίνεται και με το αρχείο σεναρίου
πατώντας το αντίστοιχο κουμπί «Επιλογή αρχείου» δίπλα στο Label “Scenario File”.
Παράδειγμα επιλογής αρχείου ιστορικού (History File) φαίνεται στην Εικόνα Δ.2 :

Εικόνα Δ.2 : Επιλογή αρχείου ιστορικού (History File)

Αφού έχουμε επιλέξει τα αρχεία ιστορικού και σεναρίου και πατήσουμε το κουμπί
«Επιλογή αρχείων» δίπλα στο Label “Week Data Files” μπορούμε να επιλέξουμε ένα
αρχείο δεδομένων ή παραπάνω (έχοντας πατημένο το πλήκτρο Ctrl ή και το πλήκτρο Shift
για επιλογή πολλών). Επίσης τότε εμφανίζεται ένα πλαίσιο (ListBox) με το τι έχουμε
επιλέξει καθώς και κάποια κουμπιά δεξιά με τα οποία μπορούμε να αλλάξουμε την σειρά
με την οποία θα εισαχθούν τα αρχεία δεδομένων. Το πιο πάνω στην λίστα θα εισαχθεί
στην πρώτη εβδομάδα 0, το δεύτερο από πάνω στην εβδομάδα 1 κλπ. Μπορούμε επίσης
να κάνουμε διαγραφή ενός αρχείου πατώντας το κουμπί «Διαγραφή» ή να τα
εκκαθαρίσουμε όλα πατώντας το κουμπί “Clear All”. Πατώντας το κουμπί «Πάνω» το
αρχείο μεταφέρεται μια θέση πάνω ενώ πατώντας αντίστοιχα το κουμπί «Κάτω» το αρχείο
μεταφέρεται μια θέση κάτω. Μπορούμε να επιλέξουμε ένα αρχείο δεδομένων εβδομάδας

Διπλωματική Εργασία 139


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

(week data file) δύο ή παραπάνω φορές ώστε να χρησιμοποιείται παραπάνω από μία φορά
στην λύση. .

Η οθόνη στην φάση αυτή έχει ως εξής αφού έχουμε επιλέξει τα αρχεία εισόδου όπως
φαίνεται στην εικόνα Δ.3 :

Εικόνα Δ.3 : Η οθόνη της εφαρμογής μετά την επιλογή των αρχείων εισόδου (για 4 εβδομάδες)

Διπλωματική Εργασία 140


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Στο επόμενο βήμα επιλέγουμε την θέση του αρχείου Simulator.jar και την θέση του
επιλυτή Solver.exe επιλέγοντας τα αντίστοιχα αρχεία στην θέση που βρίσκονται.
Ακολούθως επιλέγουμε την θέση του φακέλου εξόδου (αυτόματα δίνει τον αντίστοιχο
φάκελο και στον Φάκελο εκτέλεσης) ή αν θέλουμε έναν ξεχωριστό φάκελο για εκείνον.
Στην Εικόνα Δ.4 φαίνεται η τελική οθόνη της εφαρμογής μετά την επιλογή των αρχείων
εισόδου (για 4 εβδομάδες) και των υπόλοιπων επιλογών :

Εικόνα Δ.4 : Η τελική οθόνη της εφαρμογής μετά την επιλογή των αρχείων εισόδου (για 4 εβδομάδες)
και των υπόλοιπων επιλογών

Στο τελευταίο βήμα πριν την εκτέλεση του επιλυτή πρέπει να πατήσουμε το κουμπί
“ΕΚΤΕΛΕΣΗ ΕΠΙΛΥΤΗ (SOLVER)» όπως φαίνεται στην Εικόνα Δ.5), προκειμένου να
γίνει η εκτέλεση του επιλυτή με τα επιλεγμένα αρχεία εισόδου και τις υπόλοιπες επιλογές.

Διπλωματική Εργασία 141


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Εικόνα Δ.5 : Το κουμπί εκτέλεσης του επιλυτή (Solver.exe)


Να σημειωθεί ότι πριν την εκτέλεση του επιλυτή γίνονται διάφοροι έλεγχοι όπως το αν
έχουν επιλεγεί όλα τα αρχεία εισόδου, αν έχει επιλεγεί ο σωστός αριθμός των αρχείων
εισόδου σύμφωνα με τον αριθμό των εβδομάδων, αν τα αρχεία είναι της μορφής XML, αν
τα αρχεία υπάρχουν κλπ.

Όταν γίνει η εκτέλεση του επιλυτή όπως φαίνεται στην Εικόνα Δ.6 εμφανίζεται ένα
παράθυρο γραμμής εντολών (command prompt) όπου εμφανίζεται η έξοδος της εκτέλεσης
του καθώς και στο τέλος το αποτέλεσμα της εκτέλεσης του επικυρωτή (Validator) που
καλείται αυτόματα από τον προσομοιωτή (Simulator).

Εικόνα Δ.6 : Το παράθυρο εκτέλεσης και αποτελεσμάτων του επιλυτή (Solver.exe)

Τέλος πατώντας το κουμπί ΕΞΟΔΟΣ γίνεται έξοδος από την εφαρμογή.

Διπλωματική Εργασία 142


Καραμανωλάκης Νικόλαος, «Κατασκευή Προγράμματος Βαρδιών
Νοσηλευτικού Προσωπικού»

Υπεύθυνη Δήλωση Συγγραφέα:


Δηλώνω ρητά ότι, σύμφωνα με το άρθρο 8 του Ν.1599/1986, η παρούσα εργασία αποτελεί αποκλειστικά
προϊόν προσωπικής μου εργασίας, δεν προσβάλλει κάθε μορφής δικαιώματα διανοητικής ιδιοκτησίας,
προσωπικότητας και προσωπικών δεδομένων τρίτων, δεν περιέχει έργα/εισφορές τρίτων για τα οποία
απαιτείται άδεια των δημιουργών/δικαιούχων και δεν είναι προϊόν μερικής ή ολικής αντιγραφής, οι πηγές δε
που χρησιμοποιήθηκαν περιορίζονται στις βιβλιογραφικές αναφορές και μόνον και πληρούν τους κανόνες
της επιστημονικής παράθεσης.

Διπλωματική Εργασία 143

You might also like