限制一天工作的范围数量

Limit the number of ranges worked in a day

我正在编写代码来自动为我的员工生成班次。 我已经能够创建几个约束:

到目前为止一切顺利;现在我面临另一个限制,我真的无法思考如何编码:每个工人一天不能在超过 2 个不同的范围内工作
我的意思是我不想让一个人在 08.30-10.30、12.30-13.30 和 16.30-18.30 工作,但将分配的范围限制在两个。

鉴于我有shifts[numWorkers, numDays, numShifts],我该如何安排这个约束?

如果您在每个两个小时的区块中使用这些变量 [上午 8 点班次,上午 9 点班次], 创建一个 boolvar 是真的是第一个转变是 ON,第二个是 OFF

end_of_shift = model.NewBoolVar('')
model.AddBoolOr([first_shift.Not(), second_shift, end_of_shift])
model.AddImplication(end_of_shift, first_shift)
model.AddImplication(end_of_shift, second_shift.Not())

# then for each day and each worker: 
model.Add(sum(end_of_shifts) <= 2)