以下是您修改后的问题的答案,即如何添加要求每个员工连续工作时间段的约束。在
我建议您添加以下约束(此处以代数方式编写):x[t+1,p] <= x[t,p] + (1 - (1/T) * sum_{s=1}^{t-1} x[s,p]) for all p, for all t < T
其中x是您的staffed变量(这里写为x表示紧凑性),t是时间索引,T是时间段数,p是员工索引。在
约束的逻辑是:如果x[t,p] = 0(该雇员没有在t期间工作)和{}为任何s < t(该雇员在任何以前的期间工作),那么x[t+1,p]必须{}(该雇员不能在t+1期间工作。因此,一旦员工停止工作,他们就不能重新开始工作。注意,如果x[t,p] = 1或x[s,p] = 0每一个{},那么{}可以等于{}。在
下面是我在pulp中实现的这个约束:
^{pr2}$
我运行模型得到:Optimal
Staffed
Timeslot Staffmember
1 C2 1.0
2 C2 1.0
3 C2 1.0
4 C2 1.0
5 C2 1.0
6 C2 1.0
7 C2 1.0
8 C2 1.0
9 C2 1.0
C6 1.0
10 C2 1.0
C6 1.0
11 C2 1.0
C6 1.0
12 C2 1.0
C6 1.0
13 C3 1.0
C6 1.0
14 C3 1.0
C6 1.0
因此,员工在连续的时间段内工作。在
请注意,新的约束会稍微减慢模型的速度。它仍然可以在30秒左右解决问题。但是,如果您要解决更大的实例,您可能需要重新考虑约束。在