Я думаю, что это можно смоделировать как модель MIP.
Размышление вслух:
Введите двоичную переменную решения:
δ(i,p) = 1 if pattern i is selected for person p
0 otherwise
Это включает в себя текущий шаблон(скажем i=0
).Это позволило бы:
- сотрудник не отправляет новый шаблон (тогда у нас есть только
i=0
для этого сотрудника) - сотрудник представляет один или несколько предпочтительных шаблонов
У нас есть ограничения:
sum(i, δ(i,p)) = 1 ∀p
sum((i,p), pattern(i,p,t)*δ(i,p)) ≈ requiredlevel(t) ∀t
δ(i,p) ∈ {0,1}
здесь pattern(i,p,t)
описывает шаблон i
: это 1, если период t покрывается, когда используется шаблон (i, p), и0 иначеЗдесь я использую ≈ для обозначения «приблизительно».(Это легко смоделировать, используя слабые места и, возможно, штрафные термины в цели).
Теперь мы максимизируем
maximize sum((i,p), weight(i,p) * δ(i,p))
, где weight(i,p)
указывает предпочтение для шаблона (например, weight(0,p)=0
, т.е.нет бонусных баллов, если не выбран новый, предпочтительный шаблон).
Примерно так не должно быть слишком сложно настроить.Конечно, возможны многие уточнения.Эти типы моделей, как правило, решаются довольно быстро.