The parameters for MaxWorkingWeekendsInFourWeeks is in some of the
input files for the NurseRostering example, but it doesn't seem to be
the rules(drl) file.
Is it implemented elsewhere? I've tried doing is like this, but it
doesn't work as a HARD constraint. I'm running it as SOFT now, but  it
would nice to compare it to a better version.

//Rules for workingweekends
rule "insertWorkingWeekends"
    when
        MinMaxContractLine(contractLineType ==
ContractLineType.TOTAL_WORKING_WEEKENDS_IN_FOUR_WEEKS, enabled ==
true,
            $contract : contract)
        $employee : Employee(contract == $contract)
                ShiftAssignment(employee == $employee, $shiftDateDayIndex :
shiftDate.dayIndex, weekend == true)
    then
        insertLogical(new WorkingWeekend($employee, $shiftDateDayIndex/7));
end

// Maximum working weekends in four weeks
rule "insertWorkingWeekendsInFourWeeks"
       // salience 1 // Do these rules first (optional, for performance)
    when
        MinMaxContractLine(contractLineType ==
ContractLineType.TOTAL_WORKING_WEEKENDS_IN_FOUR_WEEKS, enabled ==
true,
            $contract : contract)
        $employee : Employee(contract == $contract)
                WorkingWeekend(employee == $employee, $week: week)
        $workingWeekendTotal : Number() from accumulate(
            $workingWeekend : WorkingWeekend(employee == $employee,
week >= $week, week-$week < 3 ),
            count($workingWeekend)
        )
    then
        insertLogical(new WorkingWeekendTotalFourWeeks($employee,
$workingWeekendTotal.intValue(), $week));
end


// Maximum working weekends in four weeks
rule "maxWorkingWeekendsInFourWeeks"
    when
        $contractLine : MinMaxContractLine(
            contractLineType ==
ContractLineType.TOTAL_WORKING_WEEKENDS_IN_FOUR_WEEKS, maximumEnabled
== true,
            $contract : contract, $maximumValue : maximumValue
        )
        $employee : Employee(contract == $contract)
        WorkingWeekendTotalFourWeeks(employeeContract == $contract,
total > $maximumValue,
             employee==$employee, $total : total, $week : week)
    then
        insertLogical(new
IntConstraintOccurrence("maxWorkingWeekendsInFourWeeks",
ConstraintType.NEGATIVE_SOFT,
                ($total - $maximumValue) * $contractLine.getMaximumWeight(),
                $employee, $week));
end
_______________________________________________
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users

Reply via email to