Я пытаюсь реализовать задачу планирования сотрудника (медсестры) и ищу совет о том, как реализовать конкретное ограничение c. Проблема заключается в следующем: существует набор сотрудников и дней (оба обозначены целыми числами). ). Каждому сотруднику может быть назначена дневная смена D [(i, j)], ночная смена N [(i, j)] или выходной V [(i, j)]. Это мои переменные решения:
D = LpVariable.dicts(name="Dagdienst", indexs=[(i, j) for i in employees for j in days], cat='Binary')
N = LpVariable.dicts(name="Nachtdienst", indexs=[(i, j) for i in employees for j in days], cat='Binary')
V = LpVariable.dicts(name="Vrij", indexs=[(i, j) for i in employees for j in days], cat='Binary')
Примером ограничения для составления разумных графиков является следующее.
for i in employees:
for j in days:
m += D[(i, j)] + N[(i, j)] + V[(i, j)] == 1
Другое ограничение, которое, кажется, действует (то есть ни один сотрудник не был назначен день следующие два дня после ночной смены после реализации этого ограничения)
for i in employees:
for j in range(1, len(days)-1):
m += N[(i, j)] + D[(i, (j + 1))] <= 1
m += N[(i, j)] + D[(i, (j + 2))] <= 1
Я надеюсь, что реализация вышеупомянутого ограничения говорит сама за себя. Если требуется разъяснение, пожалуйста, спросите!
Таким же образом я пытаюсь применить ограничение, что существует максимальное количество последовательных дней, которые сотрудник может (день) назначать смены.
max_consecutive_days = 4
for i in medewerkers:
for j in range(1, (len(dagen)+1 - max_consecutive_days)):
m += D[(i, j)] + D[(i, j + 1)] + D[(i, j + 2)] + D[(i, j + 3)] <= max_consecutive_days
Однако это, похоже, не влияет на составленные графики, поскольку сотрудникам все еще назначается 4+ дня подряд.
Что мне здесь не хватает? Заранее спасибо!