我正在编写代码以自动为我的工人生成班次。 我已经能够创建一些约束条件:
到目前为止一切都很好;现在我面临着另一个约束,我真的无法思考如何编写代码:每个工人一天不能在两个以上的不同范围内工作。
我的意思是我不希望一个人工作(例如)08.30-10.30、12.30-13.30和16.30-18.30,但是将分配的范围限制为两个。
鉴于我有shifts[numWorkers, numDays, numShifts]
,我该如何安排此约束?
答案 0 :(得分:1)
如果您每两个小时[上午8点班,上午9点班]的每个区块都使用这些变量, 创建一个布尔值是真实的,即第一个班次为开,第二个班次为关
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)