我正在努力寻找如何利用Google OR Tools CP-SAT求解器来对护士调度问题进行切实可行的解决方案,并稍作修改:每次轮班仅限于具有一定能力(即新手,中级,高级)。能力会在一段时间后到期,这意味着无法安排护士进行需要到期的轮班工作。但是,护士可以通过与当前具有这种能力的人一起轮班来恢复能力。
在我的程序中,我希望一次安排多天。我该如何定义一个约束,说具有过期能力的护士只能安排在第n天轮班,前提是该护士计划在小于n的某天恢复能力?
答案 0 :(得分:2)
首先查看shift_scheduling_sat.py示例。适应技能限制应该很容易。
现在,即将到期。
第一步是标记护士学习技能的班次。
对于每个班次,对于每个护士,如果护士与具有胜任能力的人员配对,则创建一个bool var
。再加上暗示护士是该班次的日程安排和同一班次的熟练人员->护士具有该班次的能力。
现在所有需要该能力的其他班次,
您知道每个班次的时间。对于给定的班次,收集足够接近的所有潜在先前班次(没有到期),并在此班次上添加护士工作意味着Or(护士在一个兼容的先前班次上获得了该班次-包括该班次)。