Typisches Problem und Ausführungsmethode
Finden Sie anhand der Anzahl der Mitarbeiter, der Anzahl der geplanten Tage, der Anzahl der Schichttypen, der zu vermeidenden Schichtmuster und der erforderlichen Anzahl der Schichten pro Tag einen Zeitplan, der diese Anforderungen erfüllt. Es gibt viele Variationen objektiver Funktionen und Einschränkungen.
usage
Signature: shift_scheduling(ndy, nst, shift, proh, need)
Docstring:
Arbeitsplanungsproblem
Eingang
ndy:Tage
nst:Anzahl der Mitarbeiter
shift:Verschiebung(Ein Charakter)Liste von
proh:Verbotsmuster(String verschieben)Liste von
need:Liste der erforderlichen Anzahl von Personen für jede Schicht(Jeden Tag)
Ausgabe
Eine Tabelle mit Schichtnummern nach Tag und Personal
python
from ortoolpy import shift_scheduling
ndy, nst = 8, 4
shift = 'Urlaubsnacht'
proh = ['Nacht für Nacht', 'Nachtsonne', 'Tag Tag Tag']
need = {'Tag':[2] * 8, 'Nacht':[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=['%Tag d'%i for i in range(1,ndy+1)])
for sft,lst in need.items():
a['%s erforderlich'%sft] = lst
a['%s Plan'%sft] = (a.iloc[:,:4]==sft).sum(1)
print(a)
Ergebnis
[[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 Tag erforderlich Tagesplan Nacht erforderlich Nachtplan
Tag 1 Feiertagsnacht Tag 2 2 1 1
Tag 2 Tag Nacht Urlaub 2 2 1 1
Tag 3 Tag Feiertagsnacht 2 2 1 1
Tag 4 Nacht Tag geschlossen 2 2 1 1
Tag 5 Feiertagsnacht Tag 2 2 1 1
Tag 6 Tag Nacht Urlaub 2 2 1 1
Tag 7 Tag Feiertag Nacht 2 2 1 1
Tag 8 Nacht Tag geschlossen 2 2 1 1
python
# pandas.DataFrame
from ortoolpy.optimization import ShiftScheduling
ShiftScheduling(8, 4, 'Urlaubsnacht', ['Nacht für Nacht','Nachtsonne','Tag Tag Tag'], {'Tag':[2]*8, 'Nacht':[1]*8})
A | B | C | D | Tag erforderlich th> | Tagesplan th> | Wird nachts benötigt th> | Nachtplan th> | |
---|---|---|---|---|---|---|---|---|
Tag 1 th> | Geschlossen td> | Tag td> | Nacht td> | Tag td> | 2 | 2 | 1 | 1 |
Tag 2 th> | Tag td> | Nacht td> | Geschlossen td> | Tag td> | 2 | 2 | 1 | 1 |
Tag 3 th> | Tag td> | Geschlossen td> | Tag td> | Nacht td> | 2 | 2 | 1 | 1 |
Tag 4 th> | Nacht td> | Tag td> | Tag td> | Geschlossen td> | 2 | 2 | 1 | 1 |
Tag 5 th> | Geschlossen td> | Tag td> | Nacht td> | Tag td> | 2 | 2 | 1 | 1 |
Tag 6 th> | Tag td> | Nacht td> | Geschlossen td> | Tag td> | 2 | 2 | 1 | 1 |
Tag 7 th> | Tag td> | Geschlossen td> | Tag td> | Nacht td> | 2 | 2 | 1 | 1 |
Tag 8 th> | Nacht td> | Tag td> | Tag td> | Geschlossen td> | 2 | 2 | 1 | 1 |
Recommended Posts