护士排班示例:最大小时数限制
Nurse scheduling example: maximum hours constraint
我正在 Python 中实施护士调度问题,这与 Google OR-Tools 上提供的示例类似。
但是,我想实施一个硬约束,即每个护士每周最多只能工作 40 小时(每个班次的时长不同)。如何在示例的上下文中(在 python 中)实现这一点?
我的方法是创建一个单独的列表,在其中定义每个班次的长度(类型类似于示例中的 shift_requests
)。然后,运行 每个护士的一些 hours_worked
计数器,并检查给定的轮班分配是否会导致计数器超过 40 小时。但我不知道如何实现“检查”部分,我什至不确定这是否是解决此问题的最佳方案。
感谢@Stradivari 提供此解决方案。
一种方法是对每个护士分别用分配的长度作为系数(常数)来约束 boolvars 的总和:
for n in all_nurses:
model.Add(sum(shift_durations[d][s] * shifts[(n, d, s)] for d in all_days for s in all_shifts) <= 40)
我正在 Python 中实施护士调度问题,这与 Google OR-Tools 上提供的示例类似。
但是,我想实施一个硬约束,即每个护士每周最多只能工作 40 小时(每个班次的时长不同)。如何在示例的上下文中(在 python 中)实现这一点?
我的方法是创建一个单独的列表,在其中定义每个班次的长度(类型类似于示例中的 shift_requests
)。然后,运行 每个护士的一些 hours_worked
计数器,并检查给定的轮班分配是否会导致计数器超过 40 小时。但我不知道如何实现“检查”部分,我什至不确定这是否是解决此问题的最佳方案。
感谢@Stradivari 提供此解决方案。
一种方法是对每个护士分别用分配的长度作为系数(常数)来约束 boolvars 的总和:
for n in all_nurses:
model.Add(sum(shift_durations[d][s] * shifts[(n, d, s)] for d in all_days for s in all_shifts) <= 40)