[jboss-svn-commits] JBL Code SVN: r32286 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main: java/org/drools/planner/examples/nurserostering/solver/move/factory and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Mar 29 15:45:34 EDT 2010
Author: ge0ffrey
Date: 2010-03-29 15:45:33 -0400 (Mon, 29 Mar 2010)
New Revision: 32286
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftSwitchMove.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftSwitchMoveFactory.java
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml
Log:
ShiftSwitchMove
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftSwitchMove.java (from rev 32266, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/solver/move/LectureSwitchMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftSwitchMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftSwitchMove.java 2010-03-29 19:45:33 UTC (rev 32286)
@@ -0,0 +1,77 @@
+package org.drools.planner.examples.nurserostering.solver.move;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.WorkingMemory;
+import org.drools.planner.core.localsearch.decider.acceptor.tabu.TabuPropertyEnabled;
+import org.drools.planner.core.move.Move;
+import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
+import org.drools.planner.examples.nurserostering.domain.Shift;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ShiftSwitchMove implements Move, TabuPropertyEnabled {
+
+ private EmployeeAssignment leftEmployeeAssignment;
+ private EmployeeAssignment rightEmployeeAssignment;
+
+ public ShiftSwitchMove(EmployeeAssignment leftEmployeeAssignment, EmployeeAssignment rightEmployeeAssignment) {
+ this.leftEmployeeAssignment = leftEmployeeAssignment;
+ this.rightEmployeeAssignment = rightEmployeeAssignment;
+ if (!leftEmployeeAssignment.getShiftDate().equals(rightEmployeeAssignment.getShiftDate())) {
+ throw new IllegalArgumentException("The leftEmployeeAssignment (" + leftEmployeeAssignment
+ + ") must have the same shiftDate as the rightEmployeeAssignment ("
+ + rightEmployeeAssignment + ").");
+ }
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ return !ObjectUtils.equals(leftEmployeeAssignment.getShift(), rightEmployeeAssignment.getShift());
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new ShiftSwitchMove(rightEmployeeAssignment, leftEmployeeAssignment);
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ Shift oldLeftShift = leftEmployeeAssignment.getShift();
+ Shift oldRightShift = rightEmployeeAssignment.getShift();
+ NurseRosterMoveHelper.moveShift(workingMemory, leftEmployeeAssignment, oldRightShift);
+ NurseRosterMoveHelper.moveShift(workingMemory, rightEmployeeAssignment, oldLeftShift);
+ }
+
+ public Collection<? extends Object> getTabuProperties() {
+ return Arrays.<EmployeeAssignment>asList(leftEmployeeAssignment, rightEmployeeAssignment);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof ShiftSwitchMove) {
+ ShiftSwitchMove other = (ShiftSwitchMove) o;
+ return new EqualsBuilder()
+ .append(leftEmployeeAssignment, other.leftEmployeeAssignment)
+ .append(rightEmployeeAssignment, other.rightEmployeeAssignment)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(leftEmployeeAssignment)
+ .append(rightEmployeeAssignment)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return leftEmployeeAssignment + " <=> " + rightEmployeeAssignment;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftSwitchMoveFactory.java (from rev 32266, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/solver/move/factory/LectureSwitchMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftSwitchMoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftSwitchMoveFactory.java 2010-03-29 19:45:33 UTC (rev 32286)
@@ -0,0 +1,35 @@
+package org.drools.planner.examples.nurserostering.solver.move.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.drools.planner.core.move.Move;
+import org.drools.planner.core.move.factory.CachedMoveFactory;
+import org.drools.planner.core.solution.Solution;
+import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
+import org.drools.planner.examples.nurserostering.domain.NurseRoster;
+import org.drools.planner.examples.nurserostering.solver.move.ShiftSwitchMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ShiftSwitchMoveFactory extends CachedMoveFactory {
+
+ public List<Move> createCachedMoveList(Solution solution) {
+ NurseRoster nurseRoster = (NurseRoster) solution;
+ List<EmployeeAssignment> employeeAssignmentList = nurseRoster.getEmployeeAssignmentList();
+ List<Move> moveList = new ArrayList<Move>();
+ for (ListIterator<EmployeeAssignment> leftIt = employeeAssignmentList.listIterator(); leftIt.hasNext();) {
+ EmployeeAssignment leftEmployeeAssignment = leftIt.next();
+ for (ListIterator<EmployeeAssignment> rightIt = employeeAssignmentList.listIterator(leftIt.nextIndex()); rightIt.hasNext();) {
+ EmployeeAssignment rightEmployeeAssignment = rightIt.next();
+ if (leftEmployeeAssignment.getShiftDate().equals(rightEmployeeAssignment.getShiftDate())) {
+ moveList.add(new ShiftSwitchMove(leftEmployeeAssignment, rightEmployeeAssignment));
+ }
+ }
+ }
+ return moveList;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml 2010-03-29 18:43:46 UTC (rev 32285)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml 2010-03-29 19:45:33 UTC (rev 32286)
@@ -20,10 +20,10 @@
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.ShiftChangeMoveFactory</moveFactoryClass>
<absoluteSelection>500</absoluteSelection>
</selector>
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.ShiftSwitchMoveFactory</moveFactoryClass>-->
- <!--<absoluteSelection>500</absoluteSelection>-->
- <!--</selector>-->
+ <selector>
+ <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.ShiftSwitchMoveFactory</moveFactoryClass>
+ <absoluteSelection>500</absoluteSelection>
+ </selector>
</selector>
<acceptor>
<completePropertyTabuSize>7</completePropertyTabuSize>
More information about the jboss-svn-commits
mailing list