[jboss-svn-commits] JBL Code SVN: r32369 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main: java/org/drools/planner/examples/nurserostering/solver/move and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Apr 2 11:24:01 EDT 2010


Author: ge0ffrey
Date: 2010-04-02 11:24:01 -0400 (Fri, 02 Apr 2010)
New Revision: 32369

Added:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/EmployeeAssignmentSwitchMove.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/EmployeeChangeMove.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/EmployeeAssignmentSwitchMoveFactory.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/EmployeeChangeMoveFactory.java
Removed:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftChangeMove.java
   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/ShiftChangeMoveFactory.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/java/org/drools/planner/examples/nurserostering/domain/EmployeeAssignment.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/NurseRosterMoveHelper.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/solution/initializer/NurseRosteringStartingSolutionInitializer.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/swingui/NurseRosteringPanel.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml
Log:
nurse rostering: Refactored to design choice alternative 2b because a shift may NOT have more employees working than there are required (more info on blog of design choices soon).

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/EmployeeAssignment.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/EmployeeAssignment.java	2010-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/EmployeeAssignment.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -12,59 +12,43 @@
 @XStreamAlias("EmployeeAssignment")
 public class EmployeeAssignment extends AbstractPersistable implements Comparable<EmployeeAssignment> {
 
-    private Employee employee;
-    private ShiftDate shiftDate;
+    private Shift shift;
 
     // Changed by moves, between score calculations.
-    // Can be null, if the employee is not working on the shiftDate
-    private Shift shift;
+    private Employee employee;
 
-    public Employee getEmployee() {
-        return employee;
-    }
-
-    public void setEmployee(Employee employee) {
-        this.employee = employee;
-    }
-
-    public ShiftDate getShiftDate() {
-        return shiftDate;
-    }
-
-    public void setShiftDate(ShiftDate shiftDate) {
-        this.shiftDate = shiftDate;
-    }
-
     public Shift getShift() {
         return shift;
     }
 
     public void setShift(Shift shift) {
-        if (shift != null && !shift.getShiftDate().equals(shiftDate)) {
-            throw new IllegalArgumentException("The EmployeeAssignment (" + this + ") cannot have a shift (" + shift
-                    + ") with a different shiftDate(" + shiftDate + ").");
-        }
         this.shift = shift;
     }
 
+    public Employee getEmployee() {
+        return employee;
+    }
+
+    public void setEmployee(Employee employee) {
+        this.employee = employee;
+    }
+
     public String getLabel() {
-        return employee + "->" + (shift == null ?  "FREE" : shift.getShiftType());
+        return shift + "->" + employee;
     }
 
     public int compareTo(EmployeeAssignment other) {
         return new CompareToBuilder()
-                .append(employee, other.employee)
-                .append(shiftDate, other.shiftDate)
                 .append(shift, other.shift)
+                .append(employee, other.employee)
                 .toComparison();
     }
 
     public EmployeeAssignment clone() {
         EmployeeAssignment clone = new EmployeeAssignment();
         clone.id = id;
-        clone.employee = employee;
-        clone.shiftDate = shiftDate;
         clone.shift = shift;
+        clone.employee = employee;
         return clone;
     }
 
@@ -80,9 +64,8 @@
             EmployeeAssignment other = (EmployeeAssignment) o;
             return new EqualsBuilder()
                     .append(id, other.id)
-                    .append(employee, other.employee)
-                    .append(shiftDate, other.shiftDate)
                     .append(shift, other.shift)
+                    .append(employee, other.employee)
                     .isEquals();
         } else {
             return false;
@@ -97,19 +80,22 @@
     public int solutionHashCode() {
         return new HashCodeBuilder()
                 .append(id)
-                .append(employee)
-                .append(shiftDate)
                 .append(shift)
+                .append(shift)
                 .toHashCode();
     }
 
     @Override
     public String toString() {
-        return employee + "(" + shiftDate + ")" + "->" + shift;
+        return shift + "->" + employee;
     }
 
+    public ShiftDate getShiftDate() {
+        return getShift().getShiftDate();
+    }
+
     public int getShiftDateDayIndex() {
-        return getShiftDate().getDayIndex();
+        return getShift().getShiftDate().getDayIndex();
     }
 
 }

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/EmployeeAssignmentSwitchMove.java (from rev 32306, 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/EmployeeAssignmentSwitchMove.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/EmployeeAssignmentSwitchMove.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -0,0 +1,73 @@
+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.Employee;
+import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
+import org.drools.planner.examples.nurserostering.domain.Shift;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class EmployeeAssignmentSwitchMove implements Move, TabuPropertyEnabled {
+
+    private EmployeeAssignment leftEmployeeAssignment;
+    private EmployeeAssignment rightEmployeeAssignment;
+
+    public EmployeeAssignmentSwitchMove(EmployeeAssignment leftEmployeeAssignment, EmployeeAssignment rightEmployeeAssignment) {
+        this.leftEmployeeAssignment = leftEmployeeAssignment;
+        this.rightEmployeeAssignment = rightEmployeeAssignment;
+    }
+
+    public boolean isMoveDoable(WorkingMemory workingMemory) {
+        return !ObjectUtils.equals(leftEmployeeAssignment.getShift(), rightEmployeeAssignment.getShift());
+    }
+
+    public Move createUndoMove(WorkingMemory workingMemory) {
+        return new EmployeeAssignmentSwitchMove(rightEmployeeAssignment, leftEmployeeAssignment);
+    }
+
+    public void doMove(WorkingMemory workingMemory) {
+        Employee oldLeftEmployee = leftEmployeeAssignment.getEmployee();
+        Employee oldRightEmployee = rightEmployeeAssignment.getEmployee();
+        NurseRosterMoveHelper.moveEmployee(workingMemory, leftEmployeeAssignment, oldRightEmployee);
+        NurseRosterMoveHelper.moveEmployee(workingMemory, rightEmployeeAssignment, oldLeftEmployee);
+    }
+
+    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 EmployeeAssignmentSwitchMove) {
+            EmployeeAssignmentSwitchMove other = (EmployeeAssignmentSwitchMove) 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/EmployeeChangeMove.java (from rev 32306, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftChangeMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/EmployeeChangeMove.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/EmployeeChangeMove.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -0,0 +1,70 @@
+package org.drools.planner.examples.nurserostering.solver.move;
+
+import java.util.Collection;
+import java.util.Collections;
+
+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.Employee;
+import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
+import org.drools.planner.examples.nurserostering.domain.Shift;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class EmployeeChangeMove implements Move, TabuPropertyEnabled {
+
+    private EmployeeAssignment employeeAssignment;
+    private Employee toEmployee;
+
+    public EmployeeChangeMove(EmployeeAssignment employeeAssignment, Employee toEmployee) {
+        this.employeeAssignment = employeeAssignment;
+        this.toEmployee = toEmployee;
+    }
+
+    public boolean isMoveDoable(WorkingMemory workingMemory) {
+        return !ObjectUtils.equals(employeeAssignment.getEmployee(), toEmployee);
+    }
+
+    public Move createUndoMove(WorkingMemory workingMemory) {
+        return new EmployeeChangeMove(employeeAssignment, employeeAssignment.getEmployee());
+    }
+
+    public void doMove(WorkingMemory workingMemory) {
+        NurseRosterMoveHelper.moveEmployee(workingMemory, employeeAssignment, toEmployee);
+    }
+
+    public Collection<? extends Object> getTabuProperties() {
+        return Collections.singletonList(employeeAssignment);
+    }
+
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        } else if (o instanceof EmployeeChangeMove) {
+            EmployeeChangeMove other = (EmployeeChangeMove) o;
+            return new EqualsBuilder()
+                    .append(employeeAssignment, other.employeeAssignment)
+                    .append(toEmployee, other.toEmployee)
+                    .isEquals();
+        } else {
+            return false;
+        }
+    }
+
+    public int hashCode() {
+        return new HashCodeBuilder()
+                .append(employeeAssignment)
+                .append(toEmployee)
+                .toHashCode();
+    }
+
+    public String toString() {
+        return employeeAssignment + " => " + toEmployee;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/NurseRosterMoveHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/NurseRosterMoveHelper.java	2010-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/NurseRosterMoveHelper.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -2,6 +2,7 @@
 
 
 import org.drools.WorkingMemory;
+import org.drools.planner.examples.nurserostering.domain.Employee;
 import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
 import org.drools.planner.examples.nurserostering.domain.Shift;
 import org.drools.runtime.rule.FactHandle;
@@ -11,9 +12,9 @@
  */
 public class NurseRosterMoveHelper {
 
-    public static void moveShift(WorkingMemory workingMemory, EmployeeAssignment employeeAssignment, Shift shift) {
+    public static void moveEmployee(WorkingMemory workingMemory, EmployeeAssignment employeeAssignment, Employee toEmployee) {
         FactHandle factHandle = workingMemory.getFactHandle(employeeAssignment);
-        employeeAssignment.setShift(shift);
+        employeeAssignment.setEmployee(toEmployee);
         workingMemory.update(factHandle, employeeAssignment);
     }
 

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftChangeMove.java	2010-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftChangeMove.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -1,69 +0,0 @@
-package org.drools.planner.examples.nurserostering.solver.move;
-
-import java.util.Collection;
-import java.util.Collections;
-
-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 ShiftChangeMove implements Move, TabuPropertyEnabled {
-
-    private EmployeeAssignment employeeAssignment;
-    private Shift toShift;
-
-    public ShiftChangeMove(EmployeeAssignment employeeAssignment, Shift toShift) {
-        this.employeeAssignment = employeeAssignment;
-        this.toShift = toShift;
-    }
-
-    public boolean isMoveDoable(WorkingMemory workingMemory) {
-        return !ObjectUtils.equals(employeeAssignment.getShift(), toShift);
-    }
-
-    public Move createUndoMove(WorkingMemory workingMemory) {
-        return new ShiftChangeMove(employeeAssignment, employeeAssignment.getShift());
-    }
-
-    public void doMove(WorkingMemory workingMemory) {
-        NurseRosterMoveHelper.moveShift(workingMemory, employeeAssignment, toShift);
-    }
-
-    public Collection<? extends Object> getTabuProperties() {
-        return Collections.singletonList(employeeAssignment);
-    }
-
-    public boolean equals(Object o) {
-        if (this == o) {
-            return true;
-        } else if (o instanceof ShiftChangeMove) {
-            ShiftChangeMove other = (ShiftChangeMove) o;
-            return new EqualsBuilder()
-                    .append(employeeAssignment, other.employeeAssignment)
-                    .append(toShift, other.toShift)
-                    .isEquals();
-        } else {
-            return false;
-        }
-    }
-
-    public int hashCode() {
-        return new HashCodeBuilder()
-                .append(employeeAssignment)
-                .append(toShift)
-                .toHashCode();
-    }
-
-    public String toString() {
-        return employeeAssignment + " => " + toShift;
-    }
-
-}

Deleted: 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/ShiftSwitchMove.java	2010-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftSwitchMove.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -1,77 +0,0 @@
-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/EmployeeAssignmentSwitchMoveFactory.java (from rev 32306, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftSwitchMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/EmployeeAssignmentSwitchMoveFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/EmployeeAssignmentSwitchMoveFactory.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -0,0 +1,33 @@
+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.EmployeeAssignmentSwitchMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class EmployeeAssignmentSwitchMoveFactory 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();
+                moveList.add(new EmployeeAssignmentSwitchMove(leftEmployeeAssignment, rightEmployeeAssignment));
+            }
+        }
+        return moveList;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/EmployeeChangeMoveFactory.java (from rev 32306, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftChangeMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/EmployeeChangeMoveFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/EmployeeChangeMoveFactory.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -0,0 +1,33 @@
+package org.drools.planner.examples.nurserostering.solver.move.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+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.Employee;
+import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
+import org.drools.planner.examples.nurserostering.domain.NurseRoster;
+import org.drools.planner.examples.nurserostering.domain.Shift;
+import org.drools.planner.examples.nurserostering.domain.ShiftDate;
+import org.drools.planner.examples.nurserostering.solver.move.EmployeeChangeMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class EmployeeChangeMoveFactory extends CachedMoveFactory {
+
+    public List<Move> createCachedMoveList(Solution solution) {
+        NurseRoster nurseRoster = (NurseRoster) solution;
+        List<Move> moveList = new ArrayList<Move>();
+        List<Employee> employeeList = nurseRoster.getEmployeeList();
+        for (EmployeeAssignment employeeAssignment : nurseRoster.getEmployeeAssignmentList()) {
+            for (Employee employee : employeeList) {
+                moveList.add(new EmployeeChangeMove(employeeAssignment, employee));
+            }
+        }
+        return moveList;
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftChangeMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftChangeMoveFactory.java	2010-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftChangeMoveFactory.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -1,32 +0,0 @@
-package org.drools.planner.examples.nurserostering.solver.move.factory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-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.domain.Shift;
-import org.drools.planner.examples.nurserostering.domain.ShiftDate;
-import org.drools.planner.examples.nurserostering.solver.move.ShiftChangeMove;
-
-/**
- * @author Geoffrey De Smet
- */
-public class ShiftChangeMoveFactory extends CachedMoveFactory {
-
-    public List<Move> createCachedMoveList(Solution solution) {
-        NurseRoster nurseRoster = (NurseRoster) solution;
-        List<Move> moveList = new ArrayList<Move>();
-        for (EmployeeAssignment employeeAssignment : nurseRoster.getEmployeeAssignmentList()) {
-            ShiftDate shiftDate = employeeAssignment.getShiftDate();
-            for (Shift shift : shiftDate.getShiftList()) {
-                moveList.add(new ShiftChangeMove(employeeAssignment, shift));
-            }
-        }
-        return moveList;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftSwitchMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftSwitchMoveFactory.java	2010-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftSwitchMoveFactory.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -1,35 +0,0 @@
-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/java/org/drools/planner/examples/nurserostering/solver/solution/initializer/NurseRosteringStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/solution/initializer/NurseRosteringStartingSolutionInitializer.java	2010-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/solution/initializer/NurseRosteringStartingSolutionInitializer.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -140,19 +140,17 @@
 //        }
 
         // TODO tmp begin
-        List<ShiftDate> shiftDateList = nurseRoster.getShiftDateList();
+        List<Shift> shiftList = nurseRoster.getShiftList();
         int employeeAssignmentId = 0;
         Random random = new Random(); // not seeded, tmp!
-        for (Employee employee : employeeList) {
-            for (ShiftDate shiftDate : shiftDateList) {
+        for (Shift shift : shiftList) {
+            for (int i = 0; i < shift.getRequiredEmployeeSize(); i++) {
                 EmployeeAssignment employeeAssignment = new EmployeeAssignment();
                 employeeAssignment.setId((long) employeeAssignmentId);
                 employeeAssignmentId++;
-                employeeAssignment.setEmployee(employee);
-                employeeAssignment.setShiftDate(shiftDate);
-                List<Shift> shiftList = shiftDate.getShiftList();
-                int randomInt = random.nextInt(shiftList.size() + 1);
-                employeeAssignment.setShift(randomInt == shiftList.size() ? null : shiftList.get(randomInt));
+                employeeAssignment.setShift(shift);
+                int randomInt = random.nextInt(employeeList.size());
+                employeeAssignment.setEmployee(employeeList.get(randomInt));
                 employeeAssignmentList.add(employeeAssignment);
             }
         }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/swingui/NurseRosteringPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/swingui/NurseRosteringPanel.java	2010-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/swingui/NurseRosteringPanel.java	2010-04-02 15:24:01 UTC (rev 32369)
@@ -20,7 +20,7 @@
 import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
 import org.drools.planner.examples.nurserostering.domain.NurseRoster;
 import org.drools.planner.examples.nurserostering.domain.Shift;
-import org.drools.planner.examples.nurserostering.solver.move.ShiftChangeMove;
+import org.drools.planner.examples.nurserostering.solver.move.EmployeeChangeMove;
 
 /**
  * TODO this code is highly unoptimized
@@ -81,10 +81,8 @@
         if (schedule.isInitialized()) {
             for (EmployeeAssignment employeeAssignment : schedule.getEmployeeAssignmentList()) {
                 Shift shift = employeeAssignment.getShift();
-                if (shift != null) {
-                    ShiftEmployeePanel shiftEmployeePanel = shiftEmployeePanelMap.get(shift).get(employeeAssignment.getEmployee());
-                    shiftEmployeePanel.addEmployeeAssignment(employeeAssignment);
-                }
+                ShiftEmployeePanel shiftEmployeePanel = shiftEmployeePanelMap.get(shift).get(employeeAssignment.getEmployee());
+                shiftEmployeePanel.addEmployeeAssignment(employeeAssignment);
             }
         }
     }
@@ -115,14 +113,14 @@
         }
 
         public void actionPerformed(ActionEvent e) {
-            List<Shift> shiftList = getNurseRoster().getShiftList();
-            JComboBox shiftListField = new JComboBox(shiftList.toArray());
-            shiftListField.setSelectedItem(employeeAssignment.getShift());
-            int result = JOptionPane.showConfirmDialog(NurseRosteringPanel.this.getRootPane(), shiftListField,
-                    "Select shift", JOptionPane.OK_CANCEL_OPTION);
+            List<Employee> employeeList = getNurseRoster().getEmployeeList();
+            JComboBox employeeListField = new JComboBox(employeeList.toArray());
+            employeeListField.setSelectedItem(employeeAssignment.getShift());
+            int result = JOptionPane.showConfirmDialog(NurseRosteringPanel.this.getRootPane(), employeeListField,
+                    "Select employee", JOptionPane.OK_CANCEL_OPTION);
             if (result == JOptionPane.OK_OPTION) {
-                Shift toShift = (Shift) shiftListField.getSelectedItem();
-                solutionBusiness.doMove(new ShiftChangeMove(employeeAssignment, toShift));
+                Employee toEmployee = (Employee) employeeListField.getSelectedItem();
+                solutionBusiness.doMove(new EmployeeChangeMove(employeeAssignment, toEmployee));
                 workflowFrame.updateScreen();
             }
         }

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-04-02 14:16:06 UTC (rev 32368)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml	2010-04-02 15:24:01 UTC (rev 32369)
@@ -17,11 +17,11 @@
     </termination>
     <selector>
         <selector>
-            <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.ShiftChangeMoveFactory</moveFactoryClass>
+            <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
             <absoluteSelection>500</absoluteSelection>
         </selector>
         <selector>
-            <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.ShiftSwitchMoveFactory</moveFactoryClass>
+            <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeAssignmentSwitchMoveFactory</moveFactoryClass>
             <absoluteSelection>500</absoluteSelection>
         </selector>
     </selector>



More information about the jboss-svn-commits mailing list