覆盖Google OR工具中的约束

时间:2019-07-30 13:43:04

标签: python or-tools

我正在使用Google OR工具制作调度程序。在这种情况下,工人必须有最小的轮班长度(在这里说其为2),不允许任何小于此长度的轮班长度(类似于or-tool提供的示例)。 因此,例如:

working - working - working - not working是允许的,但是:

not working - working - not working,不允许

这是我想要的行为。但是,我在模型中实现了多个角色,并且在必要时希望我的员工能够在他们之间进行切换。问题是如果我有两个角色(R1和R2),我希望能够允许这样的情况:

R1: working - not working - not working

R2: not working - working - working

在此情况下,该员工在两个角色之间的工作量超过了最低要求。似乎这不是允许的顺序,因为在上班时间1期间,员工的工作时间少于最小轮班时间。

如果您只工作一个角色,我想不出一种方法来限制转变,但是如果您要工作2,则可以放宽该约束。您可以始终将其作为软约束,但是如果您只是每天工作1个角色,您实际上必须遵守最小班次长度规则。有没有办法“矛盾”一个特定的硬约束?也就是说,一种让我根据所有可能的角色切换构建序列并将其包含在优化程序搜索中的方法?

1 个答案:

答案 0 :(得分:0)

为每位员工创建一个BoolVar(如果他仅扮演1个角色,则为true),然后将OnlyEnforceIf添加到创建的BoolVar的约束中。