限制一天工作的范围数量
Limit the number of ranges worked in a day
我正在编写代码来自动为我的员工生成班次。
我已经能够创建几个约束:
- 一天中的每个班次都分配给一个工人
- 每个工人每天工作不能超过8小时
- 每个工人每周应工作 [#minShifts、#maxShifts] 小时
- 每个工人不能同时在不同的房间工作
- 每个工人一天不能在超过 2 个不同的房间工作
到目前为止一切顺利;现在我面临另一个限制,我真的无法思考如何编码:每个工人一天不能在超过 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)
我正在编写代码来自动为我的员工生成班次。 我已经能够创建几个约束:
- 一天中的每个班次都分配给一个工人
- 每个工人每天工作不能超过8小时
- 每个工人每周应工作 [#minShifts、#maxShifts] 小时
- 每个工人不能同时在不同的房间工作
- 每个工人一天不能在超过 2 个不同的房间工作
到目前为止一切顺利;现在我面临另一个限制,我真的无法思考如何编码:每个工人一天不能在超过 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)