[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