如何管理连续班次约束?
我正在尝试制作一个优化排班程序,但在定义连续午餐时间的限制时遇到了困难。定义一个限制,比如在8小时的工作日中,每个员工必须至少有3小时的午餐时间,这个比较简单。用hrs表示每小时的选择,限制可以写成类似于Sum(hrs) >= 3。
但是,要定义这3小时必须是连续的,我想不出一个好的方法来设置这个限制。我开始尝试使用一些不同的方式,但不确定这是否是最好的方法。目前我正在用pyomo进行这些尝试。
1 个回答
0
startlunch[t] >= lunch[t]-lunch[t-1]
sum(startlunch) <= 1
sum(lunch) >= 3
lunch, startlunch: binary variables
直观理解:startlunch[t]=1
表示我们开始吃午饭的时刻。我们从 lunch[t-1]=0
(上一个时刻没有吃午饭)变到 lunch[t]=1
(这个时刻开始吃午饭)。
- 你可以假设
lunch[-1]=0
,也就是说在开始之前的时刻是没有吃午饭的。 - 你可以给变量加上一个工人的索引。