[jboss-svn-commits] JBL Code SVN: r32265 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples: examination/domain and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Mar 28 14:39:31 EDT 2010


Author: ge0ffrey
Date: 2010-03-28 14:39:30 -0400 (Sun, 28 Mar 2010)
New Revision: 32265

Added:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/
   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/ShiftChangeMove.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/
   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/solution/
Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/domain/CurriculumCourseSchedule.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/domain/Examination.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftDate.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftType.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringInputConverter.java
Log:
ShiftChangeMove

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/domain/CurriculumCourseSchedule.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/domain/CurriculumCourseSchedule.java	2010-03-28 17:54:32 UTC (rev 32264)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/domain/CurriculumCourseSchedule.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -158,7 +158,6 @@
         clone.periodList = periodList;
         clone.roomList = roomList;
         clone.unavailablePeriodConstraintList = unavailablePeriodConstraintList;
-        // deep clone lectures
         List<Lecture> clonedLectureList = new ArrayList<Lecture>(lectureList.size());
         for (Lecture lecture : lectureList) {
             Lecture clonedLecture = lecture.clone();

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/domain/Examination.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/domain/Examination.java	2010-03-28 17:54:32 UTC (rev 32264)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/domain/Examination.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -163,7 +163,6 @@
         clone.roomList = roomList;
         clone.periodHardConstraintList = periodHardConstraintList;
         clone.roomHardConstraintList = roomHardConstraintList;
-        // deep clone exams
         List<Exam> clonedExamList = new ArrayList<Exam>(examList.size());
         for (Exam exam : examList) {
             Exam clonedExam = exam.clone();

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java	2010-03-28 17:54:32 UTC (rev 32264)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -150,11 +150,11 @@
         this.shiftOnRequestList = shiftOnRequestList;
     }
 
-    public List<EmployeeAssignment> getNurseAssignmentList() {
+    public List<EmployeeAssignment> getEmployeeAssignmentList() {
         return employeeAssignmentList;
     }
 
-    public void setNurseAssignmentList(List<EmployeeAssignment> employeeAssignmentList) {
+    public void setEmployeeAssignmentList(List<EmployeeAssignment> employeeAssignmentList) {
         this.employeeAssignmentList = employeeAssignmentList;
     }
 
@@ -215,16 +215,13 @@
         clone.dayOnRequestList = dayOnRequestList;
         clone.shiftOffRequestList = shiftOffRequestList;
         clone.shiftOnRequestList = shiftOnRequestList;
-        // TODO add more properties
-
-
-        // deep clone lectures
-        List<EmployeeAssignment> clonedLectureList = new ArrayList<EmployeeAssignment>(employeeAssignmentList.size());
+        List<EmployeeAssignment> clonedEmployeeAssignmentList = new ArrayList<EmployeeAssignment>(
+                employeeAssignmentList.size());
         for (EmployeeAssignment employeeAssignment : employeeAssignmentList) {
             EmployeeAssignment clonedEmployeeAssignment = employeeAssignment.clone();
-            clonedLectureList.add(clonedEmployeeAssignment);
+            clonedEmployeeAssignmentList.add(clonedEmployeeAssignment);
         }
-        clone.employeeAssignmentList = clonedLectureList;
+        clone.employeeAssignmentList = clonedEmployeeAssignmentList;
         clone.score = score;
         return clone;
     }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftDate.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftDate.java	2010-03-28 17:54:32 UTC (rev 32264)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftDate.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -1,6 +1,7 @@
 package org.drools.planner.examples.nurserostering.domain;
 
 import java.util.Date;
+import java.util.List;
 
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
@@ -16,6 +17,8 @@
     private String dateString;
     private DayOfWeek dayOfWeek;
 
+    private List<Shift> shiftList;
+
     public int getDayIndex() {
         return dayIndex;
     }
@@ -40,6 +43,14 @@
         this.dayOfWeek = dayOfWeek;
     }
 
+    public List<Shift> getShiftList() {
+        return shiftList;
+    }
+
+    public void setShiftList(List<Shift> shiftList) {
+        this.shiftList = shiftList;
+    }
+
     public int compareTo(ShiftDate other) {
         return new CompareToBuilder()
                 .append(dayIndex, other.dayIndex)

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftType.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftType.java	2010-03-28 17:54:32 UTC (rev 32264)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftType.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -1,5 +1,7 @@
 package org.drools.planner.examples.nurserostering.domain;
 
+import java.util.List;
+
 import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.planner.examples.common.domain.AbstractPersistable;

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringInputConverter.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringInputConverter.java	2010-03-28 17:54:32 UTC (rev 32264)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringInputConverter.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -155,8 +155,9 @@
                 String dateString = dateFormat.format(calendar.getTime());
                 shiftDate.setDateString(dateString);
                 shiftDate.setDayOfWeek(DayOfWeek.valueOfCalendar(calendar.get(Calendar.DAY_OF_WEEK)));
+                shiftDate.setShiftList(new ArrayList<Shift>());
                 shiftDateList.add(shiftDate);
-                this.shiftDateMap.put(dateString, shiftDate);
+                shiftDateMap.put(dateString, shiftDate);
                 id++;
                 dayIndex++;
                 calendar.add(Calendar.DAY_OF_YEAR, 1);
@@ -232,6 +233,7 @@
                     shift.setId(shiftId);
                     ShiftDate shiftDate = shiftDateEntry.getValue();
                     shift.setShiftDate(shiftDate);
+                    shiftDate.getShiftList().add(shift);
                     shift.setShiftType(shiftType);
                     shift.setRequiredEmployeeSize(0); // Filled in later
                     shiftList.add(shift);

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/NurseRosterMoveHelper.java (from rev 32249, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/solver/move/CurriculumCourseMoveHelper.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/NurseRosterMoveHelper.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/NurseRosterMoveHelper.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -0,0 +1,23 @@
+package org.drools.planner.examples.nurserostering.solver.move;
+
+
+import org.drools.WorkingMemory;
+import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
+import org.drools.planner.examples.nurserostering.domain.Shift;
+import org.drools.runtime.rule.FactHandle;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class NurseRosterMoveHelper {
+
+    public static void moveShift(WorkingMemory workingMemory, EmployeeAssignment employeeAssignment, Shift shift) {
+        FactHandle factHandle = workingMemory.getFactHandle(employeeAssignment);
+        employeeAssignment.setShift(shift);
+        workingMemory.update(factHandle, employeeAssignment);
+    }
+
+    private NurseRosterMoveHelper() {
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftChangeMove.java (from rev 32249, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/solver/move/RoomChangeMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftChangeMove.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/ShiftChangeMove.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -0,0 +1,69 @@
+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;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftChangeMoveFactory.java (from rev 32249, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/solver/move/factory/RoomChangeMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftChangeMoveFactory.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/move/factory/ShiftChangeMoveFactory.java	2010-03-28 18:39:30 UTC (rev 32265)
@@ -0,0 +1,32 @@
+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;
+    }
+
+}



More information about the jboss-svn-commits mailing list