gpt4 book ai didi

java - DRL 规则确保每位员工一个月内夜类次数不超过 5 次

转载 作者:行者123 更新时间:2023-12-01 18:51:37 25 4
gpt4 key购买 nike

我正在尝试编写规则来限制每个员工在一个月内完成夜类的次数。契约(Contract)要求是员工在 28 个白类周期内总共上夜类的时间不得超过 5 个”。

我已经厌倦了使用以下方法,但效果有限。欢迎任何建议

rule "minimumConsecutiveNightShifts"
salience 1
when
$contractLine : MinMaxContractLine(contractLineType == ContractLineType.TOTAL_NIGHT_ASSIGNMENTS, enabled == true,
$contract : contract)
$employee : Employee(contract == $contract)
$shiftType : ShiftType(night == true)

accumulate(
$assignment : ShiftAssignment(employee == $employee, shiftType == $shiftType);
$total : count($assignment)

)
then
int totalInt = $total.intValue();
System.out.println($contract);
if ($contractLine.isMinimumEnabled() && totalInt < $contractLine.getMinimumValue()) {
scoreHolder.addSoftConstraintMatch(kcontext,
(totalInt - $contractLine.getMinimumValue()) * $contractLine.getMinimumWeight());
} else if ($contractLine.isMaximumEnabled() && totalInt > $contractLine.getMaximumValue()) {
scoreHolder.addSoftConstraintMatch(kcontext,
($contractLine.getMaximumValue() - totalInt) * $contractLine.getMaximumWeight());
} else {
// Workaround for https://issues.jboss.org/browse/PLANNER-761
scoreHolder.addSoftConstraintMatch(kcontext, 0);
}
end

最佳答案

从护士轮类示例开始,您应该能够选择夜类 A,然后累积分配给同一员工(日期在 A 之后且 A + 28 天之前)的所有夜类。如果累积计数太多或太少,则惩罚硬约束。

通过 ConstraintStreams,我们正在寻找更简单、更有效的方法来表达此类约束。

关于java - DRL 规则确保每位员工一个月内夜类次数不超过 5 次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59726338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com