护士调度示例:防止交班



我仍然是约束编程的初学者,我目前正试图在Python中实现护士调度问题,这类似于Google OR-Tools提供的示例。

然而,在我的调度问题中,存在多个患者,每个患者每天都有相同的班次,但在一天的不同时间点。我试图实施的约束应该确保给定的护士不被分配到相互重叠的班次。例如,如果病人X从上午10点到12点轮班,病人Y从上午9点到11点轮班,那么给定的护士应该只分配到其中一个班次。如何实现这一点呢?

我的方法是创建两个单独的列表(或组合它们的元组列表):

(1)定义每次轮班的持续时间,shift_duration(以小时为单位表示每次轮班持续时间的元素列表)

(2)定义移位开始时间,shift_starting_point(一个从0到24的元素列表,每个元素代表一个移位)在另一个列表中(类型类似于示例中的shift_requests)。

我试图应用工作车间问题中的AddNoOverlap方法,但我不知道如何使用这种方法将它们组合成一个硬约束规则。我也不知道这种方法是否有很大意义。我很感激任何帮助-谢谢!

我将从简单的方法开始:

for each conflicting pair of shifts (a, b):
for each nurse n:
model.AddBoolOr([assign_a_n.Not(), assign_b_n.Not()])

我知道这是二次方程,但它很简单。

最新更新