Google 或工具:具有可用性约束的员工排班

Google OR Tools: Employee Scheduling with availability constraint

根据 here 中的护士调度示例,我正在尝试为问题添加更多约束。例如:护士A不能在周一工作2班和3班,护士B全天只能工作1班和3班。

如何实施这样的约束?

如果在 OR-tools 中无法实现,请就如何实现类似的东西提出建议。

对于您的示例,您需要做的就是添加一个约束,以防止将班次分配给该特定护士:

   solver.Add(shifts[(2, 1)] != 3)  # Nurse 2 cannot be assigned shift 3 on day 1

更一般地说:

   solver.Add(shifts[(j, i)] != n)  # Nurse j cannot be assigned shift n on day i

显然,如果可能的话,您会希望在循环中执行此操作以简化它。