如何管理连续班次约束?

0 投票
1 回答
29 浏览
提问于 2025-04-13 15:11

我正在尝试制作一个优化排班程序,但在定义连续午餐时间的限制时遇到了困难。定义一个限制,比如在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(这个时刻开始吃午饭)。

  1. 你可以假设 lunch[-1]=0,也就是说在开始之前的时刻是没有吃午饭的。
  2. 你可以给变量加上一个工人的索引。

撰写回答