killer76 Δημοσ. 19 Δεκεμβρίου 2024 Δημοσ. 19 Δεκεμβρίου 2024 (επεξεργασμένο) Έχω φτιάξει για την δουλειά ένα αρκετά μεγάλο site σε codeigniter που το 99% έχει να κάνει με CRUD δεδομένων σε ΒΔ, υπολογισμούς, στατιστικά κλπ. Τώρα όμως έχει μπει στο μυαλό μου μία νέα πρόκληση που μου φαίνεται κάπως αδύνατη τελικά να υλοποιηθεί. Θέλω να βοηθήσω τον εργοδότη μου σε κάτι που το κάνουμε μέχρι τώρα "χειροκίνητα". Δεν ξέρω αν είναι απλό και απλά δεν έχω βρει την σωστή προσέγγιση ακόμα ή αν όντως είναι απίστευτα δύσκολο κάτι τέτοιο. Και εξηγώ... Στην δουλειά έχουμε 10 υπαλλήλους. Στον κάθε υπάλληλο υπάρχουν κάποια δεδομένα. Οι παράμετροι των υπαλλήλων (περιληπτικά): Ο υπάλληλος Α' δουλεύει με σταθερό ωράριο 30 ώρες / εβδομάδα Δευ-Σαβ 9:00 με 14:00. Επίσης ξέρει και από ταμείο. Ο υπάλληλος Β', Γ, Δ', Ε', Ζ' κλπ δουλεύει 40 ώρες την εβδομάδα και συνεχόμενο ωράριο και σπαστό. Ο υπάλληλος Β', Γ, Δ' κλπ ξέρει και από ταμείο. Ο υπάλληλος Γ', έχει πάντα ρεπό Σάββατο. και κάποιοι άλλη παράμετροι. Οι παράμετροι της επιχείρησης (περιληπτικά): Τα ωράρια είναι συνεχόμενα (9:00-17:00 ή 13:00-21:00 και τα σπαστά 9:00-13:00 & 17:00-21:00) Σε όλη την διάρκεια της ημέρας πρέπει να υπάρχει σίγουρα κάποιος που ξέρει από ταμείο Στις ώρες 9:00-13:00 & 17:00-21:00 πρέπει να υπάρχουν τουλάχιστον 3 άτομα, ενώ στις 13:00-17:00 τουλάχιστον 2 άτομα Όλοι οι υπάλληλοι ζητάνε όσο το δυνατόν το λιγότερο σπαστά και απογεύματα. Το ζητούμενο. Υπάρχει τρόπος να υπολογίζεται και να εκτυπώνεται σε πίνακα όσο πιο δίκαια γίνεται το πρόγραμμα τηε επόμενης εβδομάδας ? Να επανυπολογίζεται όταν ισχύσει μια άδεια? (πχ ο Γ' να πάρει 2 εβομάδα άδεια) Να επανυπολογίζεται όταν ισχύσει κάτι έκτακτο. (Ο Ε' να ζητήσει ρεπό την τετάρτη ή/και ο Β' να θέλει την πεμπτη να έρθει απόγευμα.) Επεξ/σία 19 Δεκεμβρίου 2024 από killer76
geomagas Δημοσ. 19 Δεκεμβρίου 2024 Δημοσ. 19 Δεκεμβρίου 2024 (επεξεργασμένο) Ενδιαφέρον! Και ζόρικο... Κάποιες αρχικές σκέψεις: Ας ξεχάσουμε για λίγο τον Α που μας χαλάει το φεγκ σούι. Κατ' αρχάς να υποθέσω ότι το μαγαζί δεν δουλεύει Κυριακές, σωστά; Άρα έχουμε Δευτέρα έως Σάββατο 9:00-21:00, δηλαδή 6 δωδεκάωρα που χωρίζονται σε 3 τετράωρα slots ανά μέρα: 9:00-13:00 με 3 κατ' ελάχιστον υπαλλήλους, δηλαδή 3*4=12 εργατοώρες 13:00-17:00 με 2 κατ' ελάχιστον υπαλλήλους, δηλαδή 2*4=8 εργατοώρες 17:00-21:00 με 3 κατ' ελάχιστον υπαλλήλους, δηλαδή άλλες 12 εργατοώρες Στο σύνολο, χρειάζεσαι 32 εργατοώρες τη μέρα, δηλαδή 4 8ωρα, και τη βδομάδα 4*6=24 8ωρα. Από την άλλη, κάθε υπάλληλος δουλεύει 40 ώρες τη βδομάδα, δηλαδή 5 8ωρα (την 6η μέρα έχει ρεπό). Επιπλέον, μέσα στη μέρα υπάρχουν τρεις βάρδιες: Πρωινή (Π) που καλύπτει τα slots 1,2 Απογευματινή (Α) που καλύπτει τα 2,3 Σπαστή (Σ) που καλύπτει τα 1,3 Επομένως, για να καλύψεις τις ελάχιστες ανάγκες, χρειάζεσαι 5 υπαλλήλους, από τους οποίους κάθε μέρα ο ένας θα είναι Π, ο ένας Α, οι δύο Σ και ο τελευταίος Ρ(επό). Με αυτό το υπεραπλουστευμένο σενάριο, και χωρίς να υπολογίσουμε άδειες, επιθυμίες, το κριτήριο της γνώσης του ταμείου ή τα ρεπό του Γ το Σάββατο, έστω ότι έχουμε 5 υπαλλήλους (Β,Γ,Δ,Ε,Ζ). Θα μπορούσε να βγει ένα πρόγραμμα με κυλιόμενες βάρδιες [ΠΑΣΣΡ] για τον καθένα: | Β Γ Δ Ε Ζ Δ | Π Α Σ Σ Ρ Τ | Ρ Π Α Σ Σ Τ | Σ Ρ Π Α Σ Π | Σ Σ Ρ Π Α Π | Α Σ Σ Ρ Π Σ | Π Α Σ Σ Ρ Εδώ ο Ζ έχει δύο (Ρ) αντί για ένα, και αυτό συμβαίνει γιατί όπως είπαμε χρειάζεσαι 24 8ωρα τη βδομάδα, ενώ με 5 υπαλλήλους έχεις διαθέσιμα 25. Όμως, κάθε βδομάδα κάποιος άλλος θα έχει δύο (Ρ), επομένως σε βάθος χρόνου το πρόγραμμα είναι δίκαιο. Από κει και πέρα, αρχίζεις να εφαρμόζεις τους περιορισμούς σου και να κάνεις τροποποιήσεις. Πχ: ο Γ έχει πάντα (Ρ) το Σάββατο, οπότε την αντίστοιχη βάρδια του θα πρέπει να την καλύψει κάποιος άλλος. το ίδιο και στις περιπτώσεις που κάποιος έχει άδεια για τους υπαλλήλους που σου περισσεύουν (μέχρι τους 10), θα πρέπει να τους αναθέσεις κάποια βάρδια, κατά προτίμηση (Π) Τώρα, σχετικά με τον Α, αυτός δεν μπορεί να αντικαταστήσει κανέναν στο παραπάνω σχήμα. Κι αυτό γιατί δουλεύει ένα 5ωρο (ουσιαστικά 4ωρο + 1 ώρα), οπότε όταν δουλεύει θα είναι πάντα ο έξτρα (μισός) πρωινός. Τέλος, σχετικά με το ταμείο, οι ιδανικοί συνδυασμοί που μπορείς να κάνεις κατά τη γνώμη μου είναι: Ένας (Π) και ένας (Σ) που να ξέρουν ταμείο Ένας (Σ) και ένας (Α) που να ξέρουν ταμείο Ο Α και ένας (Α) που να ξέρει ταμείο Επεξ/σία 19 Δεκεμβρίου 2024 από geomagas 1
Predatorkill Δημοσ. 19 Δεκεμβρίου 2024 Δημοσ. 19 Δεκεμβρίου 2024 2 ώρες πριν, geomagas είπε Ενδιαφέρον! Και ζόρικο... Κάποιες αρχικές σκέψεις: Ας ξεχάσουμε για λίγο τον Α που μας χαλάει το φεγκ σούι. Κατ' αρχάς να υποθέσω ότι το μαγαζί δεν δουλεύει Κυριακές, σωστά; Άρα έχουμε Δευτέρα έως Σάββατο 9:00-21:00, δηλαδή 6 δωδεκάωρα που χωρίζονται σε 3 τετράωρα slots ανά μέρα: 9:00-13:00 με 3 κατ' ελάχιστον υπαλλήλους, δηλαδή 3*4=12 εργατοώρες 13:00-17:00 με 2 κατ' ελάχιστον υπαλλήλους, δηλαδή 2*4=8 εργατοώρες 17:00-21:00 με 3 κατ' ελάχιστον υπαλλήλους, δηλαδή άλλες 12 εργατοώρες Στο σύνολο, χρειάζεσαι 32 εργατοώρες τη μέρα, δηλαδή 4 8ωρα, και τη βδομάδα 4*6=24 8ωρα. Από την άλλη, κάθε υπάλληλος δουλεύει 40 ώρες τη βδομάδα, δηλαδή 5 8ωρα (την 6η μέρα έχει ρεπό). Επιπλέον, μέσα στη μέρα υπάρχουν τρεις βάρδιες: Πρωινή (Π) που καλύπτει τα slots 1,2 Απογευματινή (Α) που καλύπτει τα 2,3 Σπαστή (Σ) που καλύπτει τα 1,3 Επομένως, για να καλύψεις τις ελάχιστες ανάγκες, χρειάζεσαι 5 υπαλλήλους, από τους οποίους κάθε μέρα ο ένας θα είναι Π, ο ένας Α, οι δύο Σ και ο τελευταίος Ρ(επό). Με αυτό το υπεραπλουστευμένο σενάριο, και χωρίς να υπολογίσουμε άδειες, επιθυμίες, το κριτήριο της γνώσης του ταμείου ή τα ρεπό του Γ το Σάββατο, έστω ότι έχουμε 5 υπαλλήλους (Β,Γ,Δ,Ε,Ζ). Θα μπορούσε να βγει ένα πρόγραμμα με κυλιόμενες βάρδιες [ΠΑΣΣΡ] για τον καθένα: | Β Γ Δ Ε Ζ Δ | Π Α Σ Σ Ρ Τ | Ρ Π Α Σ Σ Τ | Σ Ρ Π Α Σ Π | Σ Σ Ρ Π Α Π | Α Σ Σ Ρ Π Σ | Π Α Σ Σ Ρ Εδώ ο Ζ έχει δύο (Ρ) αντί για ένα, και αυτό συμβαίνει γιατί όπως είπαμε χρειάζεσαι 24 8ωρα τη βδομάδα, ενώ με 5 υπαλλήλους έχεις διαθέσιμα 25. Όμως, κάθε βδομάδα κάποιος άλλος θα έχει δύο (Ρ), επομένως σε βάθος χρόνου το πρόγραμμα είναι δίκαιο. Από κει και πέρα, αρχίζεις να εφαρμόζεις τους περιορισμούς σου και να κάνεις τροποποιήσεις. Πχ: ο Γ έχει πάντα (Ρ) το Σάββατο, οπότε την αντίστοιχη βάρδια του θα πρέπει να την καλύψει κάποιος άλλος. το ίδιο και στις περιπτώσεις που κάποιος έχει άδεια για τους υπαλλήλους που σου περισσεύουν (μέχρι τους 10), θα πρέπει να τους αναθέσεις κάποια βάρδια, κατά προτίμηση (Π) Τώρα, σχετικά με τον Α, αυτός δεν μπορεί να αντικαταστήσει κανέναν στο παραπάνω σχήμα. Κι αυτό γιατί δουλεύει ένα 5ωρο (ουσιαστικά 4ωρο + 1 ώρα), οπότε όταν δουλεύει θα είναι πάντα ο έξτρα πρωινός. Τέλος, σχετικά με το ταμείο, οι ιδανικοί συνδυασμοί που μπορείς να κάνεις κατά τη γνώμη μου είναι: Ένας (Π) και ένας (Σ) που να ξέρουν ταμείο Ένας (Σ) και ένας (Α) που να ξέρουν ταμείο Ο Α και ένας (Α) που να ξέρει ταμείο το τερματισες! 1
parsifal Δημοσ. 19 Δεκεμβρίου 2024 Δημοσ. 19 Δεκεμβρίου 2024 (επεξεργασμένο) Το πρόβλημα μπορεί να λυθεί με έναν Constraint Programming solver, π.χ. με τη βιβλιοθήκη ortools της Python. Για βοήθεια στην υλοποίηση, θα μπορούσες να ζητήσεις hints από κάποιο GenAI service, π.χ. Gemini: Quote I want to solve an employee scheduling problem. Ask me questions about the problem constraints and when done, generate a solution in Python using the ortools library. Επεξ/σία 19 Δεκεμβρίου 2024 από parsifal 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα