[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