[jboss-svn-commits] JBL Code SVN: r27253 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: java/org/drools/solver/examples/patientadmissionschedule/domain/solver and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jun 28 16:04:02 EDT 2009
Author: ge0ffrey
Date: 2009-06-28 16:04:01 -0400 (Sun, 28 Jun 2009)
New Revision: 27253
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartSpecialismMissingInRoom.java
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/PatientAdmissionSchedule.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/Room.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartConflict.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionScheduleInputConvertor.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/patientadmissionschedule/solver/patientAdmissionScheduleScoreRules.drl
Log:
pas: fix RoomSpecialism constraint
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/PatientAdmissionSchedule.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/PatientAdmissionSchedule.java 2009-06-28 19:20:19 UTC (rev 27252)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/PatientAdmissionSchedule.java 2009-06-28 20:04:01 UTC (rev 27253)
@@ -12,6 +12,7 @@
import org.drools.solver.examples.itc2007.examination.domain.Topic;
import org.drools.solver.examples.itc2007.examination.domain.Student;
import org.drools.solver.examples.patientadmissionschedule.domain.solver.AdmissionPartConflict;
+import org.drools.solver.examples.patientadmissionschedule.domain.solver.AdmissionPartSpecialismMissingInRoom;
/**
* @author Geoffrey De Smet
@@ -169,6 +170,7 @@
facts.addAll(bedDesignationList);
}
facts.addAll(calculateAdmissionPartConflictList());
+ facts.addAll(calculateAdmissionPartSpecialismMissingInRoomList());
return facts;
}
@@ -188,6 +190,29 @@
return admissionPartConflictList;
}
+ private List<AdmissionPartSpecialismMissingInRoom> calculateAdmissionPartSpecialismMissingInRoomList() {
+ List<AdmissionPartSpecialismMissingInRoom> admissionPartSpecialismMissingInRoomList
+ = new ArrayList<AdmissionPartSpecialismMissingInRoom>();
+ for (AdmissionPart admissionPart : admissionPartList) {
+ if (admissionPart.getSpecialism() != null) {
+ for (Room room : roomList) {
+ int mininumPriority = Integer.MAX_VALUE;
+ for (RoomSpecialism roomSpecialism : room.getRoomSpecialismList()) {
+ if (roomSpecialism.getSpecialism().equals(admissionPart.getSpecialism())) {
+ mininumPriority = Math.min(mininumPriority, roomSpecialism.getPriority());
+ }
+ }
+ int weight = (mininumPriority == Integer.MAX_VALUE) ? 2 : mininumPriority - 1;
+ if (weight > 0) {
+ admissionPartSpecialismMissingInRoomList.add(
+ new AdmissionPartSpecialismMissingInRoom(admissionPart, room, mininumPriority));
+ }
+ }
+ }
+ }
+ return admissionPartSpecialismMissingInRoomList;
+ }
+
/**
* Clone will only deep copy the bedDesignationList
*/
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/Room.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/Room.java 2009-06-28 19:20:19 UTC (rev 27252)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/Room.java 2009-06-28 20:04:01 UTC (rev 27253)
@@ -16,6 +16,7 @@
private int capacity;
private GenderLimitation genderLimitation;
+ private List<RoomSpecialism> roomSpecialismList;
private List<RoomEquipment> roomEquipmentList;
public String getName() {
@@ -50,6 +51,14 @@
this.genderLimitation = genderLimitation;
}
+ public List<RoomSpecialism> getRoomSpecialismList() {
+ return roomSpecialismList;
+ }
+
+ public void setRoomSpecialismList(List<RoomSpecialism> roomSpecialismList) {
+ this.roomSpecialismList = roomSpecialismList;
+ }
+
public List<RoomEquipment> getRoomEquipmentList() {
return roomEquipmentList;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartConflict.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartConflict.java 2009-06-28 19:20:19 UTC (rev 27252)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartConflict.java 2009-06-28 20:04:01 UTC (rev 27253)
@@ -47,27 +47,6 @@
this.nightSize = nightSize;
}
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof AdmissionPartConflict) {
- AdmissionPartConflict other = (AdmissionPartConflict) o;
- return new EqualsBuilder()
- .append(leftAdmissionPart, other.leftAdmissionPart)
- .append(rightAdmissionPart, other.rightAdmissionPart)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(leftAdmissionPart)
- .append(rightAdmissionPart)
- .toHashCode();
- }
-
public int compareTo(AdmissionPartConflict other) {
return new CompareToBuilder()
.append(leftAdmissionPart, other.leftAdmissionPart)
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartSpecialismMissingInRoom.java (from rev 27236, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartConflict.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartSpecialismMissingInRoom.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/solver/AdmissionPartSpecialismMissingInRoom.java 2009-06-28 20:04:01 UTC (rev 27253)
@@ -0,0 +1,61 @@
+package org.drools.solver.examples.patientadmissionschedule.domain.solver;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.solver.examples.patientadmissionschedule.domain.AdmissionPart;
+import org.drools.solver.examples.patientadmissionschedule.domain.Room;
+
+/**
+ * Calculated during initialization, not modified during score calculation.
+ * @author Geoffrey De Smet
+ */
+public class AdmissionPartSpecialismMissingInRoom implements Serializable {
+
+ private AdmissionPart admissionPart;
+ private Room room;
+ private int weight;
+
+ public AdmissionPartSpecialismMissingInRoom(AdmissionPart admissionPart, Room room, int weight) {
+ this.admissionPart = admissionPart;
+ this.room = room;
+ this.weight = weight;
+ }
+
+ public AdmissionPart getAdmissionPart() {
+ return admissionPart;
+ }
+
+ public void setAdmissionPart(AdmissionPart admissionPart) {
+ this.admissionPart = admissionPart;
+ }
+
+ public Room getRoom() {
+ return room;
+ }
+
+ public void setRoom(Room room) {
+ this.room = room;
+ }
+
+ public int getWeight() {
+ return weight;
+ }
+
+ public void setWeight(int weight) {
+ this.weight = weight;
+ }
+
+ public int compareTo(AdmissionPartSpecialismMissingInRoom other) {
+ return new CompareToBuilder()
+ .append(admissionPart, other.admissionPart)
+ .append(room, other.room)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return admissionPart + " & " + room + " = " + weight;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionScheduleInputConvertor.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionScheduleInputConvertor.java 2009-06-28 19:20:19 UTC (rev 27252)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionScheduleInputConvertor.java 2009-06-28 20:04:01 UTC (rev 27253)
@@ -221,6 +221,7 @@
+ ") is expected to contain even number of tokens (" + roomSpecialismTokens.length
+ ") after 4th pipeline (|) seperated by a space ( ).");
}
+ List<RoomSpecialism> roomSpecialismListOfRoom = new ArrayList<RoomSpecialism>(roomSpecialismTokens.length / 2);
for (int j = 0; j < roomSpecialismTokens.length; j += 2) {
int priority = Integer.parseInt(roomSpecialismTokens[j]);
long specialismId = Long.parseLong(roomSpecialismTokens[j + 1]);
@@ -235,12 +236,14 @@
}
roomSpecialism.setSpecialism(specialism);
roomSpecialism.setPriority(priority);
+ roomSpecialismListOfRoom.add(roomSpecialism);
roomSpecialismList.add(roomSpecialism);
roomSpecialismId++;
}
}
+ room.setRoomSpecialismList(roomSpecialismListOfRoom);
- List<RoomEquipment> roomEquipmentOfRoomList = new ArrayList<RoomEquipment>(equipmentListSize);
+ List<RoomEquipment> roomEquipmentListOfRoom = new ArrayList<RoomEquipment>(equipmentListSize);
String[] roomEquipmentTokens = splitBySpace(lineTokens[5]);
if (roomEquipmentTokens.length != equipmentListSize) {
throw new IllegalArgumentException("Read line (" + line
@@ -254,7 +257,7 @@
roomEquipment.setId(roomEquipmentId);
roomEquipment.setRoom(room);
roomEquipment.setEquipment(indexToEquipmentMap.get(j));
- roomEquipmentOfRoomList.add(roomEquipment);
+ roomEquipmentListOfRoom.add(roomEquipment);
roomEquipmentList.add(roomEquipment);
roomEquipmentId++;
} else if (hasEquipment != 0) {
@@ -262,7 +265,7 @@
+ ") is expected to have 0 or 1 hasEquipment (" + hasEquipment + ").");
}
}
- room.setRoomEquipmentList(roomEquipmentOfRoomList);
+ room.setRoomEquipmentList(roomEquipmentListOfRoom);
}
patientAdmissionSchedule.setRoomList(roomList);
patientAdmissionSchedule.setRoomSpecialismList(roomSpecialismList);
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/patientadmissionschedule/solver/patientAdmissionScheduleScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/patientadmissionschedule/solver/patientAdmissionScheduleScoreRules.drl 2009-06-28 19:20:19 UTC (rev 27252)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/patientadmissionschedule/solver/patientAdmissionScheduleScoreRules.drl 2009-06-28 20:04:01 UTC (rev 27253)
@@ -23,6 +23,7 @@
import org.drools.solver.examples.patientadmissionschedule.domain.RoomSpecialism;
import org.drools.solver.examples.patientadmissionschedule.domain.Specialism;
import org.drools.solver.examples.patientadmissionschedule.domain.solver.AdmissionPartConflict;
+import org.drools.solver.examples.patientadmissionschedule.domain.solver.AdmissionPartSpecialismMissingInRoom;
// @author Geoffrey De Smet
@@ -43,7 +44,7 @@
$rightBedDesignation : BedDesignation(admissionPart == $rightAdmissionPart, bed == $bed);
then
insertLogical(new IntConstraintOccurrence("sameBedInSameNight",
- ConstraintType.NEGATIVE_HARD, $admissionPartConflict.getNightSize(),
+ ConstraintType.NEGATIVE_HARD, 100 * $admissionPartConflict.getNightSize(),
$leftBedDesignation, $rightBedDesignation));
end
@@ -58,7 +59,7 @@
$rightBedDesignation : BedDesignation(room == $room, admissionPart == $rightAdmissionPart);
then
insertLogical(new IntConstraintOccurrence("differentGenderInSameGenderRoomInSameNight",
- ConstraintType.NEGATIVE_HARD, $admissionPartConflict.getNightSize(),
+ ConstraintType.NEGATIVE_HARD, 5 * $admissionPartConflict.getNightSize(),
$leftBedDesignation, $rightBedDesignation));
end
@@ -111,15 +112,24 @@
end
// RoomSpecialism constraint
-rule "roomSpecialism"
+rule "roomSpecialismNotExists"
when
- $bedDesignation : BedDesignation($specialism : admissionPartSpecialism, $room : room);
+ $bedDesignation : BedDesignation(admissionPartSpecialism != null, $specialism : admissionPartSpecialism, $room : room);
not RoomSpecialism(room == $room, specialism == $specialism);
then
- insertLogical(new IntConstraintOccurrence("roomSpecialism",
- ConstraintType.NEGATIVE_SOFT, 10,
+ insertLogical(new IntConstraintOccurrence("roomSpecialismNotExists",
+ ConstraintType.NEGATIVE_SOFT, 20 * $bedDesignation.getAdmissionPart().getNightCount(),
$bedDesignation));
end
+rule "roomSpecialismNotFirstPriority"
+ when
+ $bedDesignation : BedDesignation(admissionPartSpecialism != null, $specialism : admissionPartSpecialism, $room : room);
+ RoomSpecialism(priority > 1, room == $room, specialism == $specialism, $priority : priority);
+ then
+ insertLogical(new IntConstraintOccurrence("roomSpecialismNotFirstPriority",
+ ConstraintType.NEGATIVE_SOFT, 10 * ($priority - 1) * $bedDesignation.getAdmissionPart().getNightCount(),
+ $bedDesignation));
+end
// PreferredPatientEquipment constraint
rule "preferredPatientEquipment"
More information about the jboss-svn-commits
mailing list