轮班排班中的异构资源

Heterogeneous resources in shift rostering

在轮班排班问题中,如果需要的员工数量取决于员工的表现如何,您将如何建模?

optaplanner 文档和其他地方给出的建议是,您应该将多对多关系分为多对一和一对多。在 nurrostering 示例中,这会产生 Shift、ShiftAssignment 和 Employee。

但是在护士排班中,Shift 有一个固定的 requiredEmployeeSize 属性。在我的问题中,我不能在这里有固定值。所需员工人数由员工能力决定。

你会怎么做?

谢谢!

首先,在 Employee class 中定义一个数字 capacity 变量,在 Shift class 中定义一个数字 need 变量。

然后,您可以使用如下规则。对于每个班次,如果分配的总容量不足,则此规则将应用惩罚。

rule "Insufficient Capacity Assignment"
    when
        $shift : Shift(need > 0, $need : need)
        $totalCapacity : Number() from accumulate(
            $assignment : ShiftAssignment(employee != null, shift == $shift, $capacity : employee.getCapacity() ),
            sum($capacity)
        )
        eval($totalCapacity.intValue() < $need)
    then
        scoreHolder.addHardConstraintMatch(kcontext, 1, -10);
end