Problème typique et méthode d'exécution
Compte tenu du nombre d'employés, du nombre de jours prévus, du nombre de types de quarts, des schémas de quarts à éviter et du nombre requis de quarts par jour, trouvez un horaire qui répond à ces exigences. Il existe de nombreuses variantes de fonctions objectives et de contraintes.
usage
Signature: shift_scheduling(ndy, nst, shift, proh, need)
Docstring:
Problème d'horaire de travail
contribution
ndy:Journées
nst:Nombre d'employés
shift:décalage(Un personnage)Liste de
proh:Modèle d'interdiction(Chaîne de décalage)Liste de
need:Liste du nombre de personnes requis pour chaque quart de travail(Chaque jour)
production
Un tableau des nombres d'équipes par jour et par personnel
python
from ortoolpy import shift_scheduling
ndy, nst = 8, 4
shift = 'Nuit de vacances'
proh = ['Nuit après nuit', 'Soleil de nuit', 'Jour jour jour']
need = {'journée':[2] * 8, 'Nuit':[1] * 8}
r = shift_scheduling(ndy, nst, shift, proh, need)
print(r)
import numpy as np, pandas as pd
a = pd.DataFrame(np.vectorize(lambda i: shift[i])(r),
columns=[chr(65+i) for i in range(nst)],
index=['%Jour j'%i for i in range(1,ndy+1)])
for sft,lst in need.items():
a['%s requis'%sft] = lst
a['%plan de s'%sft] = (a.iloc[:,:4]==sft).sum(1)
print(a)
résultat
[[0, 1, 2, 1],
[1, 2, 0, 1],
[1, 0, 1, 2],
[2, 1, 1, 0],
[0, 1, 2, 1],
[1, 2, 0, 1],
[1, 0, 1, 2],
[2, 1, 1, 0]]
A B C D jour requis plan de jour nuit requis plan de nuit
Jour 1 Jour férié Nuit Jour 2 2 1 1
Jour 2 Jour Nuit Vacances 2 2 1 1
Jour 3 Jour Vacances Nuit 2 2 1 1
Jour 4 Nuit Jour Fermé 2 2 1 1
Jour 5 Jour férié Nuit Jour 2 2 1 1
Jour 6 Jour Nuit Vacances 2 2 1 1
Jour 7 Jour Vacances Nuit 2 2 1 1
Jour 8 Nuit Jour Fermé 2 2 1 1
python
# pandas.DataFrame
from ortoolpy.optimization import ShiftScheduling
ShiftScheduling(8, 4, 'Nuit de vacances', ['Nuit après nuit','Soleil de nuit','Jour jour jour'], {'journée':[2]*8, 'Nuit':[1]*8})
A | B | C | D | jour requis th> | Plan de jour th> | Nécessaire la nuit th> | Plan de nuit th> | |
---|---|---|---|---|---|---|---|---|
Jour 1 th> | Fermé td> | jour td> | nuit td> | jour td> | 2 | 2 | 1 | 1 |
Jour 2 th> | jour td> | nuit td> | Fermé td> | jour td> | 2 | 2 | 1 | 1 |
Jour 3 th> | jour td> | Fermé td> | jour td> | nuit td> | 2 | 2 | 1 | 1 |
Jour 4 th> | nuit td> | jour td> | jour td> | Fermé td> | 2 | 2 | 1 | 1 |
Jour 5 th> | Fermé td> | jour td> | nuit td> | jour td> | 2 | 2 | 1 | 1 |
Jour 6 th> | jour td> | nuit td> | Fermé td> | jour td> | 2 | 2 | 1 | 1 |
Jour 7 th> | jour td> | Fermé td> | jour td> | nuit td> | 2 | 2 | 1 | 1 |
Jour 8 th> | nuit td> | jour td> | jour td> | Fermé td> | 2 | 2 | 1 | 1 |
Recommended Posts