[jboss-svn-commits] JBL Code SVN: r33207 - labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/solution/initializer.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun May 30 12:00:07 EDT 2010
Author: ge0ffrey
Date: 2010-05-30 12:00:06 -0400 (Sun, 30 May 2010)
New Revision: 33207
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/solution/initializer/NurseRosteringStartingSolutionInitializer.java
Log:
first initializer
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-05-30 15:26:51 UTC (rev 33206)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/solver/solution/initializer/NurseRosteringStartingSolutionInitializer.java 2010-05-30 16:00:06 UTC (rev 33207)
@@ -5,8 +5,11 @@
import java.util.List;
import java.util.Random;
+import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.planner.core.localsearch.LocalSearchSolverScope;
+import org.drools.planner.core.score.DefaultHardAndSoftScore;
+import org.drools.planner.core.score.Score;
import org.drools.planner.core.solution.initializer.AbstractStartingSolutionInitializer;
import org.drools.planner.examples.common.domain.PersistableIdComparator;
import org.drools.planner.examples.nurserostering.domain.Assignment;
@@ -27,90 +30,46 @@
public void initializeSolution(LocalSearchSolverScope localSearchSolverScope) {
NurseRoster schedule = (NurseRoster) localSearchSolverScope.getWorkingSolution();
- initializeEmployeeAssignmentList(localSearchSolverScope, schedule);
+ initializeAssignmentList(localSearchSolverScope, schedule);
}
- private void initializeEmployeeAssignmentList(LocalSearchSolverScope localSearchSolverScope,
+ private void initializeAssignmentList(LocalSearchSolverScope localSearchSolverScope,
NurseRoster nurseRoster) {
List<Shift> shiftList = nurseRoster.getShiftList();
WorkingMemory workingMemory = localSearchSolverScope.getWorkingMemory();
- List<Assignment> assignmentList = createEmployeeAssignmentList(nurseRoster);
- // TODO implement this class
-// for (Assignment employeeAssignment : assignmentList) {
-// Score unnurseRosterdScore = localSearchSolverScope.calculateScoreFromWorkingMemory();
-// FactHandle employeeAssignmentHandle = null;
-//
-// List<ShiftScoring> shiftScoringList = new ArrayList<ShiftScoring>(shiftList.size());
-// for (Shift shift : shiftList) {
-// if (employeeAssignmentHandle == null) {
-// employeeAssignment.setShift(shift);
-// employeeAssignmentHandle = workingMemory.insert(employeeAssignment);
-// } else {
-// employeeAssignment.setShift(shift);
-// workingMemory.update(employeeAssignmentHandle, employeeAssignment);
-// }
-// Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
-// shiftScoringList.add(new ShiftScoring(shift, score));
-// }
-// Collections.sort(shiftScoringList);
-//
-// boolean almostPerfectMatch = false;
-// Score bestScore = DefaultHardAndSoftScore.valueOf(Integer.MIN_VALUE, Integer.MIN_VALUE);
-// Shift bestShift = null;
-// Room bestRoom = null;
-// for (ShiftScoring shiftScoring : shiftScoringList) {
-// if (bestScore.compareTo(shiftScoring.getScore()) >= 0) {
-// // No need to check the rest
-// break;
-// }
-// employeeAssignment.setShift(shiftScoring.getShift());
-// workingMemory.update(employeeAssignmentHandle, employeeAssignment);
-//
-// for (Room room : roomList) {
-// employeeAssignment.setRoom(room);
-// workingMemory.update(employeeAssignmentHandle, employeeAssignment);
-// Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
-// if (score.compareTo(unnurseRosterdScore) < 0) {
-// if (score.compareTo(bestScore) > 0) {
-// bestScore = score;
-// bestShift = shiftScoring.getShift();
-// bestRoom = room;
-// }
-// } else if (score.compareTo(unnurseRosterdScore) >= 0) {
-// // TODO due to the score rules, the score can unnurseRosterdScore can be higher than the score
-// // In theory every possibility should be looked into
-// almostPerfectMatch = true;
-// break;
-// }
-// }
-// if (almostPerfectMatch) {
-// break;
-// }
-// }
-// if (!almostPerfectMatch) {
-// if (bestShift == null || bestRoom == null) {
-// throw new IllegalStateException("The bestShift (" + bestShift + ") or the bestRoom ("
-// + bestRoom + ") cannot be null.");
-// }
-// employeeAssignment.setShift(bestShift);
-// employeeAssignment.setRoom(bestRoom);
-// workingMemory.update(employeeAssignmentHandle, employeeAssignment);
-// }
-// logger.debug(" Assignment ({}) initialized for starting solution.", employeeAssignment);
-// }
-
- // TODO tmp begin
+ List<Assignment> assignmentList = createAssignmentList(nurseRoster);
for (Assignment assignment : assignmentList) {
- workingMemory.insert(assignment);
+ FactHandle assignmentHandle = null;
+ Score bestScore = DefaultHardAndSoftScore.valueOf(Integer.MIN_VALUE, Integer.MIN_VALUE);
+ Shift bestShift = null;
+ for (Shift shift : shiftList) {
+ if (assignmentHandle == null) {
+ assignment.setShift(shift);
+ assignmentHandle = workingMemory.insert(assignment);
+ } else {
+ assignment.setShift(shift);
+ workingMemory.update(assignmentHandle, assignment);
+ }
+ Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ if (score.compareTo(bestScore) > 0) {
+ bestScore = score;
+ bestShift = shift;
+ }
+ }
+ if (bestShift == null || bestShift == null) {
+ throw new IllegalStateException("The bestShift (" + bestShift + ") cannot be null.");
+ }
+ assignment.setShift(bestShift);
+ workingMemory.update(assignmentHandle, assignment);
+ logger.debug(" Assignment ({}) initialized for starting solution.", assignment);
}
- // TODO tmp end
Collections.sort(assignmentList, new PersistableIdComparator());
nurseRoster.setEmployeeAssignmentList(assignmentList);
}
- public List<Assignment> createEmployeeAssignmentList(NurseRoster nurseRoster) {
+ public List<Assignment> createAssignmentList(NurseRoster nurseRoster) {
List<Employee> employeeList = nurseRoster.getEmployeeList();
// List<EmployeeInitializationWeight> employeeInitializationWeightList
More information about the jboss-svn-commits
mailing list