[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