【发布时间】:2020-08-12 22:14:58
【问题描述】:
上下文是使用 Drools 规则计算分数的 OptaPlanner 的员工轮班分配。 我的员工不能连续工作超过三天而没有休息日。 我非常愚蠢地实现了这样一个约束:
rule "No more than three consecutive working days"
when
ShiftAssignment(
$id1 : id,
$empoloyee : empoloyee != null,
$shift1 : shift
)
ShiftAssignment(
id > $id1,
empoloyee == $empoloyee,
shift.isConsecutiveDay($shift1),
$id2 : id,
$shift2 : shift
)
ShiftAssignment(
id > $id2,
empoloyee == $empoloyee,
shift.isConsecutiveDay($shift2),
$id3 : id,
$shift3 : shift
)
ShiftAssignment(
id > $id3,
empoloyee == $empoloyee,
shift.isConsecutiveDay($shift10)
)
then
scoreHolder.penalize(kcontext);
end
我希望方法/变量的名称清楚地表明它们的作用/含义。 有没有更方便、更智能的方式来实现这样的规则?请记住,上面的三天可能需要更改为更大的数字(我使用三天来避免规则中更现实的十行或更多代码)。谢谢。
【问题讨论】:
标签: drools optaplanner