[jboss-svn-commits] JBL Code SVN: r27228 - labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/solution/initializer.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jun 28 06:30:53 EDT 2009


Author: ge0ffrey
Date: 2009-06-28 06:30:52 -0400 (Sun, 28 Jun 2009)
New Revision: 27228

Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/solution/initializer/PatientAdmissionScheduleStartingSolutionInitializer.java
Log:
pas: solution initializer

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/solution/initializer/PatientAdmissionScheduleStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/solution/initializer/PatientAdmissionScheduleStartingSolutionInitializer.java	2009-06-28 10:15:50 UTC (rev 27227)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/solution/initializer/PatientAdmissionScheduleStartingSolutionInitializer.java	2009-06-28 10:30:52 UTC (rev 27228)
@@ -2,37 +2,23 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
-import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.WorkingMemory;
 import org.drools.FactHandle;
 import org.drools.solver.core.localsearch.LocalSearchSolverScope;
 import org.drools.solver.core.solution.initializer.AbstractStartingSolutionInitializer;
 import org.drools.solver.core.score.Score;
 import org.drools.solver.core.score.DefaultHardAndSoftScore;
-import org.drools.solver.core.score.DefaultSimpleScore;
 import org.drools.solver.examples.common.domain.PersistableIdComparator;
-import org.drools.solver.examples.itc2007.examination.domain.Exam;
-import org.drools.solver.examples.itc2007.examination.domain.Examination;
-import org.drools.solver.examples.itc2007.examination.domain.Period;
-import org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint;
-import org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraintType;
-import org.drools.solver.examples.itc2007.examination.domain.Room;
-import org.drools.solver.examples.itc2007.examination.domain.Topic;
-import org.drools.solver.examples.itc2007.examination.domain.solver.ExamBefore;
-import org.drools.solver.examples.itc2007.examination.domain.solver.ExamCoincidence;
-import org.drools.solver.examples.itc2007.curriculumcourse.domain.CurriculumCourseSchedule;
-import org.drools.solver.examples.itc2007.curriculumcourse.domain.Lecture;
-import org.drools.solver.examples.itc2007.curriculumcourse.domain.Course;
 import org.drools.solver.examples.manners2009.domain.Manners2009;
 import org.drools.solver.examples.manners2009.domain.Guest;
 import org.drools.solver.examples.manners2009.domain.SeatDesignation;
 import org.drools.solver.examples.manners2009.domain.Seat;
+import org.drools.solver.examples.patientadmissionschedule.domain.PatientAdmissionSchedule;
+import org.drools.solver.examples.patientadmissionschedule.domain.Bed;
+import org.drools.solver.examples.patientadmissionschedule.domain.BedDesignation;
+import org.drools.solver.examples.patientadmissionschedule.domain.AdmissionPart;
 
 /**
  * @author Geoffrey De Smet
@@ -41,67 +27,70 @@
 
     @Override
     public boolean isSolutionInitialized(LocalSearchSolverScope localSearchSolverScope) {
-        Manners2009 manners2009 = (Manners2009) localSearchSolverScope.getWorkingSolution();
-        return manners2009.isInitialized();
+        PatientAdmissionSchedule patientAdmissionSchedule = (PatientAdmissionSchedule) localSearchSolverScope.getWorkingSolution();
+        return patientAdmissionSchedule.isInitialized();
     }
 
     public void initializeSolution(LocalSearchSolverScope localSearchSolverScope) {
-        Manners2009 manners2009 = (Manners2009) localSearchSolverScope.getWorkingSolution();
-        initializeSeatDesignationList(localSearchSolverScope, manners2009);
+        PatientAdmissionSchedule patientAdmissionSchedule = (PatientAdmissionSchedule)
+                localSearchSolverScope.getWorkingSolution();
+        initializeBedDesignationList(localSearchSolverScope, patientAdmissionSchedule);
     }
 
-    private void initializeSeatDesignationList(LocalSearchSolverScope localSearchSolverScope, Manners2009 manners2009) {
+    private void initializeBedDesignationList(LocalSearchSolverScope localSearchSolverScope,
+            PatientAdmissionSchedule patientAdmissionSchedule) {
         WorkingMemory workingMemory = localSearchSolverScope.getWorkingMemory();
-        List<SeatDesignation> seatDesignationList = createSeatDesignationList(manners2009);
-        // Assign one guest at a time
-        List<Seat> undesignatedSeatList = manners2009.getSeatList();
-        for (SeatDesignation seatDesignation : seatDesignationList) {
-            Score bestScore = DefaultSimpleScore.valueOf(Integer.MIN_VALUE);
-            Seat bestSeat = null;
+        List<BedDesignation> bedDesignationList = createBedDesignationList(patientAdmissionSchedule);
+        // Assign one admissionPart at a time
+        List<Bed> undesignatedBedList = patientAdmissionSchedule.getBedList();
+        for (BedDesignation bedDesignation : bedDesignationList) {
+            Score bestScore = DefaultHardAndSoftScore.valueOf(Integer.MIN_VALUE);
+            Bed bestBed = null;
 
-            FactHandle seatDesignationHandle = null;
-            // Try every seat for that guest
-            // TODO by reordening the seats so index 0 has a different table then index 1 and so on,
+            FactHandle bedDesignationHandle = null;
+            // Try every bed for that admissionPart
+            // TODO by reordening the beds so index 0 has a different table then index 1 and so on,
             // this will probably be faster because perfectMatch will be true sooner
-            for (Seat seat : undesignatedSeatList) {
-                if (seatDesignation.getGuest().getGender() == seat.getRequiredGender()) {
-                    if (seatDesignationHandle == null) {
-                        seatDesignation.setSeat(seat);
-                        seatDesignationHandle = workingMemory.insert(seatDesignation);
+            for (Bed bed : undesignatedBedList) {
+                if (bed.allowsAdmissionPart(bedDesignation.getAdmissionPart())) {
+                    if (bedDesignationHandle == null) {
+                        bedDesignation.setBed(bed);
+                        bedDesignationHandle = workingMemory.insert(bedDesignation);
                     } else {
-                        workingMemory.modifyRetract(seatDesignationHandle);
-                        seatDesignation.setSeat(seat);
-                        workingMemory.modifyInsert(seatDesignationHandle, seatDesignation);
+                        workingMemory.modifyRetract(bedDesignationHandle);
+                        bedDesignation.setBed(bed);
+                        workingMemory.modifyInsert(bedDesignationHandle, bedDesignation);
                     }
                     Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
                     if (score.compareTo(bestScore) > 0) {
                         bestScore = score;
-                        bestSeat = seat;
+                        bestBed = bed;
                     }
                 }
             }
-            if (bestSeat == null) {
-                throw new IllegalStateException("The bestSeat (" + bestSeat + ") cannot be null.");
+            if (bestBed == null) {
+                throw new IllegalStateException("The bestBed (" + bestBed + ") cannot be null.");
             }
-            workingMemory.modifyRetract(seatDesignationHandle);
-            seatDesignation.setSeat(bestSeat);
-            workingMemory.modifyInsert(seatDesignationHandle, seatDesignation);
-            undesignatedSeatList.remove(bestSeat);
+            workingMemory.modifyRetract(bedDesignationHandle);
+            bedDesignation.setBed(bestBed);
+            workingMemory.modifyInsert(bedDesignationHandle, bedDesignation);
+            undesignatedBedList.remove(bestBed);
         }
         // For the GUI's combobox list mainly, not really needed
-        Collections.sort(seatDesignationList, new PersistableIdComparator());
-        manners2009.setSeatDesignationList(seatDesignationList);
+        Collections.sort(bedDesignationList, new PersistableIdComparator());
+        patientAdmissionSchedule.setBedDesignationList(bedDesignationList);
     }
 
-    private List<SeatDesignation> createSeatDesignationList(Manners2009 manners2009) {
-        List<SeatDesignation> seatDesignationList = new ArrayList<SeatDesignation>(manners2009.getGuestList().size());
-        for (Guest guest : manners2009.getGuestList()) {
-            SeatDesignation seatDesignation = new SeatDesignation();
-            seatDesignation.setId(guest.getId());
-            seatDesignation.setGuest(guest);
-            seatDesignationList.add(seatDesignation);
+    private List<BedDesignation> createBedDesignationList(PatientAdmissionSchedule patientAdmissionSchedule) {
+        List<BedDesignation> bedDesignationList = new ArrayList<BedDesignation>(
+                patientAdmissionSchedule.getAdmissionPartList().size());
+        for (AdmissionPart admissionPart : patientAdmissionSchedule.getAdmissionPartList()) {
+            BedDesignation bedDesignation = new BedDesignation();
+            bedDesignation.setId(admissionPart.getId());
+            bedDesignation.setAdmissionPart(admissionPart);
+            bedDesignationList.add(bedDesignation);
         }
-        return seatDesignationList;
+        return bedDesignationList;
     }
 
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list