Сначала посмотрите на shift_scheduling_sat.py пример.Адаптация к ограничениям навыков должна быть легкой.
Теперь об истечении срока действия.
Первый шаг - отметить смены, когда медсестра изучает навык.
Для каждой смены, длякаждой медсестре, создайте bool var
, если медсестра работает в паре с кем-то, кто обладает компетенцией.Прибавьте к выводу, что у медсестры есть расписание в эту смену, а у квалифицированного специалиста в ту же смену -> медсестра имеет право на эту компетенцию в эту смену.
Теперь для всех других смен, требующих этой компетенции,
вызнать время каждой смены.Для данной смены соберите все потенциальные предыдущие смены достаточно близко (без истечения срока действия) и добавьте работы медсестры, для которых эта смена подразумевает Or (медсестра приобрела эту смену за одну совместимую предыдущую смену - включая эту).