轮班排班中的异构资源
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
在轮班排班问题中,如果需要的员工数量取决于员工的表现如何,您将如何建模?
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