如何解决护士排班示例:防止轮班重叠
我仍然是约束编程的初学者,我目前正在尝试用 Python 实现护士调度问题,这类似于 Google OR-Tools 上提供的示例。
但是,在我的日程安排问题中,有多个患者每天都有相同的轮班次数,但在一天中的不同时间点。我试图实施的约束应该确保给定的护士不会被分配到时间上相互重叠的班次。例如,如果患者 X 从上午 10 点到 12 点有班次,而患者 Y 有从上午 9 点到 11 点的班次,则给定的护士应该只分配到这些班次之一。将如何实施这一点?
(1) 一个定义每个班次的持续时间,shift_duration
(一个元素列表,每个元素代表一个班次的持续时间,以小时为单位)
(2) 在另一个列表中定义轮班开始时间,shift_starting_point
(从 0 到 24 的元素列表,每个元素代表一个轮班)(类型类似于示例中的 shift_requests
) .
我试图应用 Job Shop Problem 中的 AddNoOverlap
方法,但我无法弄清楚如何使用此方法将它们组合成硬约束规则。我也不知道这种方法是否有意义。我很感激任何帮助 - 谢谢!
解决方法
我会从简单的方法开始:
for each conflicting pair of shifts (a,b):
for each nurse n:
model.AddBoolOr([assign_a_n.Not(),assign_b_n.Not()])
我知道这是二次的,但它很简单。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。