Cecilia,这里有一些限制,我在我的排班应用程序中使用 optaplanner 库。您可以将此规则添加到 NurseRosteringScoreRules.drl 文件中,并且不需要实现约束类型。希望对你有所帮助。
rule "No dos tareas iguales el mismo dia al mismo empleado"//"oneShiftPerDay" Modificada, la antigua, hay que quitarla.
when
$leftAssignment : ShiftAssignment($leftId : id, $employee : employee, $shiftDate : shiftDate, $shiftType : shiftType, employee != null)
$rightAssignment : ShiftAssignment(employee == $employee, shiftDate == $shiftDate, $shiftType == shiftType, id > $leftId)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
rule "No Noche-Libre en días consecutivos"
salience 1
when
ShiftAssignment(
shiftType.code == "N",
$employee : employee, $shiftDate : shiftDate, employee != null)
DayOffRequest(employee == $employee, shiftDate.dayIndex == ($shiftDate.dayIndex + 1))
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
rule "No Noche-Mañana en días consecutivos"
salience 2
when
ShiftAssignment(
shiftType.code == "N",
$employee : employee, $shiftDate : shiftDate, employee != null)
ShiftAssignment(
shiftType.code == "M",
employee == $employee, shiftDate.dayIndex == ($shiftDate.dayIndex + 1)
)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
rule "No Noche-Tarde en días consecutivos"
salience 2
when
ShiftAssignment(
shiftType.code == "N",
$employee : employee, $shiftDate : shiftDate, employee != null)
ShiftAssignment(
shiftType.code == "T",
employee == $employee, shiftDate.dayIndex == ($shiftDate.dayIndex + 1)
)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
rule "No Mañana-Tarde en el mismo día"
when
$leftAssignment : ShiftAssignment($leftId : id, $employee : employee,
$shiftDate : shiftDate, $shiftType : shiftType, employee != null)
$rightAssignment : ShiftAssignment(employee == $employee,
shiftDate == $shiftDate, shiftType.code == "T", $shiftType.code == "M", id > $leftId)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
rule "No Tarde-Noche en el mismo día"
when
$leftAssignment : ShiftAssignment($leftId : id, $employee : employee,
$shiftDate : shiftDate, $shiftType : shiftType, employee != null)
$rightAssignment : ShiftAssignment(employee == $employee,
shiftDate == $shiftDate, shiftType.code == "N", $shiftType.code == "T", id > $leftId)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end