如何确定轮班中女性员工的数量

How to fix number of females employees in a shift

我正在为员工班次添加自定义规则,其中我有 4 种班次,在一种班次中,女性员工的数量必须固定

我试过在 shift class 中添加一个字段,即 requiredFemalesEmployees,它被设置为 1 //硬约束 规则 "OneFemaleInShiftA"

when    
$gender:Employee(gender=="F")
 $rfe:Shift(requiredFemalesEmployees==1)
 accumulate(
$a:ShiftAssignment(employee==$gender,$shift:shift.requiredFemalesEmployees),
 $total :count($a)
)

then
 if($total.intValue()!=1){
 scoreHolder.addHardConstraintMatch(kcontext, - 1);
 } 

结束

任何建议都会有很大帮助。

首先,您创建了一个名为 $rfe 的变量,但未被使用,在这一行中: $a:ShiftAssignment(employee==$gender,$shift:shift.requiredFemalesEmployees), 你给 $shift 分配了什么?

这是我的例子:

rule "oneFemaleInShift"
    when    
        $gender:Employee(gender=="F")
        $rfe:Shift(requiredFemalesEmployees==1)
        Number(intValue!=1) from accumulate(
            $a:ShiftAssignment(employee==$gender, ¿¿$shift:shift.requiredFemalesEmployees??),
            count($a)
        )

    then
        scoreHolder.addHardConstraintMatch(kcontext, - 1);

我们需要领域模型或 java POJO 的来源来了解它们之间的关系。

我认为这会对你有所帮助:

rule "oneFemaleInShift"
    when    
        $femaleEmployee:Employee(gender=="F") //GET FEMALE POJOS
        $rfe:Shift(requiredFemalesEmployees==1) // GET SHIFT WHERE FEMALE IS REQUIRED
        Number(intValue > 0) from accumulate( //COUNT NUMBER OF FEMALE EMPLOYEES IN THAT SHIFT, PENALIZE SOLUTION WHERE THERE ARE LESS THAN 1
            $a:ShiftAssignment(employee==$femaleEmployee, shift==$rfe), 
            count($a)
        )
    then
        scoreHolder.addHardConstraintMatch(kcontext, - 1); // LOOK AT THE VALUE OF HARD SCORE, PROPORTION WITH OTHER HARD CONSTRAINT