This implementation is based on immovable planning entities, which works just as well for other use cases (such as vehicle routing, course scheduling, task scheduling, ...).
Immovable planning entities
Drools Planner 5.5.0.Beta1 will directly support immovable planning entities in the new selector framework, making it much easier to do continuous planning:To make some planning entities immovable, simply add an entity
SelectionFilter
that returns true
if an entity is movable and false
if it is immovable:public class MovableShiftAssignmentSelectionFilter implements SelectionFilter<ShiftAssignment> { public boolean accept(ScoreDirector scoreDirector, ShiftAssignment shiftAssignment) { ShiftDate shiftDate = shiftAssignment.getShift().getShiftDate(); NurseRoster nurseRoster = (NurseRoster) scoreDirector.getWorkingSolution(); return nurseRoster.getNurseRosterInfo().isInPlanningWindow(shiftDate); } }
And configure it like this:
@PlanningEntity(movableEntitySelectionFilter = MovableShiftAssignmentSelectionFilter.class) public class ShiftAssignment { ... }

No comments:
Post a comment