c# - 限制一天工作的范围数
问题描述
我正在编写代码来自动为我的工人生成轮班。我已经能够创建几个约束:
- 一天中的每个班次都分配给一个工人
- 每个工人每天的工作时间不能超过 8 小时
- 每个工人每周应该工作 [ #minShifts , #maxShifts ] 小时
- 每个工人不能同时在不同的房间工作
- 每个工人一天不能在超过 2 个不同的房间工作
到现在为止还挺好; 现在我面临着另一个我无法真正思考如何编码的限制:每个工人一天不能在超过 2 个不同的范围内工作。
我的意思是我不希望一个人在 08.30-10.30、12.30-13.30 和 16.30-18.30 工作,但将分配的范围限制为两个。
鉴于我有shifts[numWorkers, numDays, numShifts]
,我该如何安排这个约束?
解决方案
如果您在两个小时的每个块中都使用这些变量 [上午 8 点班次,上午 9 点班次],则创建一个布尔变量,即第一个班次为 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)
推荐阅读
- azure - Azure Functions - 并发问题
- php - 如何使用 PATCH HTTP 方法从请求对象中获取 JSON 格式的表单内容?
- javascript - 如何通过发布请求将形状像一些JSON对象数组的字符串传递给数组
- java - CentOS7:将默认 JAVA 设置为 Oracle JDK 而不是 openJDK
- android - REST api 通过改造返回不同的数据类型
- angular - 我想通过 xmlHttpRequest 在 azure 上以角度 5 访问本地文件
- authentication - Nuxeo:激活匿名用户后无法登录
- python - QTabWidget 中 QListWidget 上的 QScroller 不起作用
- c# - 使用 LINQ 从具有特定名称的数组中获取 GameObject
- java - JSch:从私钥文件创建公钥