[jboss-svn-commits] JBL Code SVN: r27799 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas: solver/solution/initializer and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Jul 9 15:30:38 EDT 2009


Author: ge0ffrey
Date: 2009-07-09 15:30:38 -0400 (Thu, 09 Jul 2009)
New Revision: 27799

Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Department.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Room.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/solver/solution/initializer/PatientAdmissionScheduleStartingSolutionInitializer.java
Log:
pas: initializer weight sorting

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Department.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Department.java	2009-07-09 19:12:51 UTC (rev 27798)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Department.java	2009-07-09 19:30:38 UTC (rev 27799)
@@ -61,4 +61,19 @@
         return true;
     }
 
+    public int countDisallowedAdmissionPart(AdmissionPart admissionPart) {
+        return countDisallowedPatientAge(admissionPart.getPatient());
+    }
+
+    public int countDisallowedPatientAge(Patient patient) {
+        int count = 0;
+        if (minimumAge != null && patient.getAge() < minimumAge) {
+            count++;
+        }
+        if (maximumAge != null && patient.getAge() > maximumAge) {
+            count++;
+        }
+        return count;
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Room.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Room.java	2009-07-09 19:12:51 UTC (rev 27798)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Room.java	2009-07-09 19:30:38 UTC (rev 27799)
@@ -117,4 +117,43 @@
         return true;
     }
 
+    public int countDisallowedAdmissionPart(AdmissionPart admissionPart) {
+        return department.countDisallowedAdmissionPart(admissionPart)
+            + countDisallowedPatientGender(admissionPart.getPatient())
+            + countMissingRequiredRoomProperties(admissionPart.getPatient());
+    }
+
+    public int countDisallowedPatientGender(Patient patient) {
+        switch (genderLimitation) {
+            case ANY_GENDER:
+                return 0;
+            case MALE_ONLY:
+                return patient.getGender() == Gender.MALE ? 0 : 1;
+            case FEMALE_ONLY:
+                return patient.getGender() == Gender.FEMALE ? 0 : 1;
+            case SAME_GENDER:
+                // scoreRules check this
+                return 0;
+            default:
+                throw new IllegalStateException("genderLimitation (" + genderLimitation + ") not implemented");
+        }
+    }
+
+    public int countMissingRequiredRoomProperties(Patient patient) {
+        int count = 0;
+        for (RequiredPatientEquipment requiredPatientEquipment : patient.getRequiredPatientEquipmentList()) {
+            Equipment requiredEquipment = requiredPatientEquipment.getEquipment();
+            boolean hasRequiredEquipment = false;
+            for (RoomEquipment roomEquipment : roomEquipmentList) {
+                if (roomEquipment.getEquipment().equals(requiredEquipment)) {
+                    hasRequiredEquipment = true;
+                }
+            }
+            if (!hasRequiredEquipment) {
+                count++;
+            }
+        }
+        return count;
+    }
+
 }
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/solver/solution/initializer/PatientAdmissionScheduleStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/solver/solution/initializer/PatientAdmissionScheduleStartingSolutionInitializer.java	2009-07-09 19:12:51 UTC (rev 27798)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/solver/solution/initializer/PatientAdmissionScheduleStartingSolutionInitializer.java	2009-07-09 19:30:38 UTC (rev 27799)
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.Comparator;
 
 import org.drools.FactHandle;
 import org.drools.WorkingMemory;
@@ -15,6 +16,9 @@
 import org.drools.solver.examples.pas.domain.Bed;
 import org.drools.solver.examples.pas.domain.BedDesignation;
 import org.drools.solver.examples.pas.domain.PatientAdmissionSchedule;
+import org.drools.solver.examples.pas.domain.Room;
+import org.drools.solver.examples.itc2007.examination.domain.Period;
+import org.apache.commons.lang.builder.CompareToBuilder;
 
 /**
  * @author Geoffrey De Smet
@@ -38,7 +42,7 @@
         WorkingMemory workingMemory = localSearchSolverScope.getWorkingMemory();
         List<BedDesignation> bedDesignationList = createBedDesignationList(patientAdmissionSchedule);
         // Assign one admissionPart at a time
-        List<Bed> bedListInPriority = new ArrayList(patientAdmissionSchedule.getBedList());
+        List<Bed> bedListInPriority = new ArrayList(patientAdmissionSchedule.getBedList()); // TODO try LinkedList
 int stillRunningCounter = 0; // TODO https://jira.jboss.org/jira/browse/JBRULES-2145
         for (BedDesignation bedDesignation : bedDesignationList) {
 System.out.println("Trunk is bugged " + ++stillRunningCounter +"/" + bedDesignationList.size() + " but we do not use trunk. See JBRULES-2145.");
@@ -99,15 +103,49 @@
     }
 
     private List<BedDesignation> createBedDesignationList(PatientAdmissionSchedule patientAdmissionSchedule) {
-        List<BedDesignation> bedDesignationList = new ArrayList<BedDesignation>(
-                patientAdmissionSchedule.getAdmissionPartList().size());
+        List<BedDesignationInitializationWeight> initializationWeightList
+                = new ArrayList<BedDesignationInitializationWeight>(
+                        patientAdmissionSchedule.getAdmissionPartList().size());
         for (AdmissionPart admissionPart : patientAdmissionSchedule.getAdmissionPartList()) {
             BedDesignation bedDesignation = new BedDesignation();
             bedDesignation.setId(admissionPart.getId());
             bedDesignation.setAdmissionPart(admissionPart);
-            bedDesignationList.add(bedDesignation);
+            int weight = 0;
+            for (Room room : patientAdmissionSchedule.getRoomList()) {
+                weight += (room.getCapacity() * room.countDisallowedAdmissionPart(admissionPart));
+            }
+            weight *= bedDesignation.getAdmissionPart().getNightCount();
+            initializationWeightList.add(new BedDesignationInitializationWeight(bedDesignation, weight));
         }
+        Collections.sort(initializationWeightList);
+        List<BedDesignation> bedDesignationList = new ArrayList<BedDesignation>(
+                patientAdmissionSchedule.getAdmissionPartList().size());
+        for (BedDesignationInitializationWeight bedDesignationInitializationWeight : initializationWeightList) {
+            bedDesignationList.add(bedDesignationInitializationWeight.getBedDesignation());
+        }
         return bedDesignationList;
     }
 
+    private class BedDesignationInitializationWeight implements Comparable<BedDesignationInitializationWeight> {
+
+        private BedDesignation bedDesignation;
+        private int weight;
+
+        private BedDesignationInitializationWeight(BedDesignation bedDesignation, int weight) {
+            this.bedDesignation = bedDesignation;
+            this.weight = weight;
+        }
+
+        public BedDesignation getBedDesignation() {
+            return bedDesignation;
+        }
+
+        public int compareTo(BedDesignationInitializationWeight other) {
+            return -new CompareToBuilder()
+                    .append(weight, other.weight)
+                    .toComparison();
+        }
+
+    }
+
 }
\ No newline at end of file




More information about the jboss-svn-commits mailing list