[rules-users] Planner - NurseRostering: MaxWorkingWeekendsInFourWeeks
Geoffrey De Smet
ge0ffrey.spam at gmail.com
Tue Jan 22 04:01:06 EST 2013
That MaxWorkingWeekendsInFourWeeks is not this rule, right?
// Maximum number of consecutive working weekends
rule "maximumConsecutiveWorkingWeekends"
when
$contractLine : MinMaxContractLine(
contractLineType ==
ContractLineType.CONSECUTIVE_WORKING_WEEKENDS, maximumEnabled == true,
$contract : contract, $maximumValue : maximumValue
)
$employee : Employee(contract == $contract)
$employeeWeekendSequence : EmployeeWeekendSequence(
employee == $employee,
weekendLength > $maximumValue,
$weekendLength : weekendLength
)
then
insertLogical(new
IntConstraintOccurrence("maximumConsecutiveWorkingWeekends",
ConstraintType.SOFT,
($maximumValue - $weekendLength) *
$contractLine.getMaximumWeight(),
$employeeWeekendSequence));
end
If it's not, I probably didn't implement it because (IIRC) there were 1
or 2 constraints which were described in the problem description,
but were canceled during the competition, due to:
- ambiguity on how to score them
- and none of the datasets actually violated any of those constraints.
For example, all datasets had exactly 4 weekends IIRC.
hth
Op 21-01-13 23:16, John Poole schreef:
> 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 at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
More information about the rules-users
mailing list