[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