[jboss-svn-commits] JBL Code SVN: r27908 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas: solver and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jul 12 11:19:50 EDT 2009
Author: ge0ffrey
Date: 2009-07-12 11:19:50 -0400 (Sun, 12 Jul 2009)
New Revision: 27908
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSameBedInSameNightScoreRule.drl
Removed:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleScoreRules.drl
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml
Log:
pas: nullify sameBedInSameNight
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml 2009-07-12 15:08:56 UTC (rev 27907)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml 2009-07-12 15:19:50 UTC (rev 27908)
@@ -13,7 +13,7 @@
<inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata06.xml</inheritedUnsolvedSolutionFile>
<inheritedLocalSearchSolver>
- <scoreDrl>/org/drools/solver/examples/pas/solver/patientAdmissionScheduleScoreRules.drl</scoreDrl>
+ <scoreDrl>/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl</scoreDrl>
<scoreDefinition>
<scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
</scoreDefinition>
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl (from rev 27904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleScoreRules.drl)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl 2009-07-12 15:19:50 UTC (rev 27908)
@@ -0,0 +1,154 @@
+package org.drools.solver.examples.itc2007.examination.solver;
+ dialect "java"
+
+import org.drools.solver.core.score.calculator.HardAndSoftConstraintScoreCalculator;
+import org.drools.solver.core.score.constraint.IntConstraintOccurrence;
+import org.drools.solver.core.score.constraint.ConstraintType;
+
+import org.drools.solver.examples.pas.domain.AdmissionPart;
+import org.drools.solver.examples.pas.domain.Bed;
+import org.drools.solver.examples.pas.domain.BedDesignation;
+import org.drools.solver.examples.pas.domain.Department;
+import org.drools.solver.examples.pas.domain.DepartmentSpecialism;
+import org.drools.solver.examples.pas.domain.Equipment;
+import org.drools.solver.examples.pas.domain.Gender;
+import org.drools.solver.examples.pas.domain.GenderLimitation;
+import org.drools.solver.examples.pas.domain.Night;
+import org.drools.solver.examples.pas.domain.Patient;
+import org.drools.solver.examples.pas.domain.PatientAdmissionSchedule;
+import org.drools.solver.examples.pas.domain.PreferredPatientEquipment;
+import org.drools.solver.examples.pas.domain.RequiredPatientEquipment;
+import org.drools.solver.examples.pas.domain.Room;
+import org.drools.solver.examples.pas.domain.RoomEquipment;
+import org.drools.solver.examples.pas.domain.RoomSpecialism;
+import org.drools.solver.examples.pas.domain.Specialism;
+import org.drools.solver.examples.pas.domain.solver.AdmissionPartConflict;
+import org.drools.solver.examples.pas.domain.solver.AdmissionPartSpecialismMissingInRoom;
+
+// @author Geoffrey De Smet
+
+global HardAndSoftConstraintScoreCalculator scoreCalculator;
+
+// ############################################################################
+// Hard constraints
+// ############################################################################
+
+// Not yet applicable: RoomMaintenance constraint
+
+// In seperate drl or build-in: Two patients in the same bed for a number of nights
+
+// Different genders in the same room when the room doesn't allow it.
+// TODO the official spec gives slighly lower scores in big rooms (capacity >= 3) where this constraint is broken
+rule "differentGenderInSameGenderRoomInSameNight"
+ when
+ $admissionPartConflict : AdmissionPartConflict($leftAdmissionPart : leftAdmissionPart,
+ $rightAdmissionPart : rightAdmissionPart,
+ differentGender == true);
+ $leftBedDesignation : BedDesignation(roomGenderLimitation == GenderLimitation.SAME_GENDER,
+ admissionPart == $leftAdmissionPart, $room : room);
+ $rightBedDesignation : BedDesignation(room == $room, admissionPart == $rightAdmissionPart);
+ then
+ insertLogical(new IntConstraintOccurrence("differentGenderInSameGenderRoomInSameNight",
+ // TODO this would be better for the problem, though the official spec does not do it
+ // ConstraintType.NEGATIVE_HARD,
+ ConstraintType.NEGATIVE_SOFT,
+ 50 * $admissionPartConflict.getNightSize(),
+ $leftBedDesignation, $rightBedDesignation));
+end
+
+// Build-in: Room's GenderLimitation male only and female only constraint
+
+// Build-in: Departement's mininumAge and maximumAge constraint
+
+// Build-in: RequiredPatientEquipment constraint
+
+// Not yet applicable: Patient's requiredRoomCapacity constraint
+
+// Accumulate hard constraints
+rule "hardConstraintsBroken"
+ salience -1 // Finish the other rules first (optional, for performance)
+ when
+ $hardTotal : Number() from accumulate(
+ IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_HARD, $weight : weight),
+ sum($weight) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
+ );
+ then
+ scoreCalculator.setHardConstraintsBroken($hardTotal.intValue());
+end
+
+// ############################################################################
+// Soft constraints
+// ############################################################################
+
+
+// Patient preferredMaximumRoomCapacity
+rule "preferredMaximumRoomCapacity"
+ when
+ $bedDesignation : BedDesignation(patientPreferredMaximumRoomCapacity != null,
+ patientPreferredMaximumRoomCapacity < roomCapacity);
+ then
+ insertLogical(new IntConstraintOccurrence("preferredMaximumRoomCapacity",
+ ConstraintType.NEGATIVE_SOFT,
+ // TODO this would be better for the problem, though the official spec does not do it
+ // 8 * ($bedDesignation.getRoomCapacity() - $bedDesignation.getPatientPreferredMaximumRoomCapacity())
+ // * $bedDesignation.getAdmissionPart().getNightCount(),
+ 8 * $bedDesignation.getAdmissionPart().getNightCount(),
+ $bedDesignation));
+end
+
+// DepartmentSpecialism constraint
+rule "departmentSpecialism"
+ when
+ $bedDesignation : BedDesignation($specialism : admissionPartSpecialism, $department : department);
+ not DepartmentSpecialism(department == $department, specialism == $specialism);
+ then
+ insertLogical(new IntConstraintOccurrence("departmentSpecialism",
+ ConstraintType.NEGATIVE_SOFT, 10 * $bedDesignation.getAdmissionPart().getNightCount(),
+ $bedDesignation));
+end
+
+// RoomSpecialism constraint
+rule "roomSpecialismNotExists"
+ when
+ $bedDesignation : BedDesignation(admissionPartSpecialism != null, $specialism : admissionPartSpecialism, $room : room);
+ not RoomSpecialism(room == $room, specialism == $specialism);
+ then
+ 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"
+ when
+ $preferredPatientEquipment : PreferredPatientEquipment($patient : patient, $equipment : equipment);
+ $bedDesignation : BedDesignation(patient == $patient, $room : room);
+ not RoomEquipment(room == $room, equipment == $equipment);
+ then
+ insertLogical(new IntConstraintOccurrence("preferredPatientEquipment",
+ ConstraintType.NEGATIVE_SOFT, 20 * $bedDesignation.getAdmissionPart().getNightCount(),
+ $bedDesignation, $preferredPatientEquipment));
+end
+
+// Do not change bed in an AdmissionPart on different Nights constraint is build-in
+
+// Accumulate soft constraints
+rule "softConstraintsBroken"
+ salience -1 // Finish the other rules first (optional, for performance)
+ when
+ $softTotal : Number() from accumulate(
+ IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_SOFT, $weight : weight),
+ sum($weight) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
+ );
+ then
+ scoreCalculator.setSoftConstraintsBroken($softTotal.intValue());
+end
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSameBedInSameNightScoreRule.drl (from rev 27904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleScoreRules.drl)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSameBedInSameNightScoreRule.drl (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSameBedInSameNightScoreRule.drl 2009-07-12 15:19:50 UTC (rev 27908)
@@ -0,0 +1,41 @@
+package org.drools.solver.examples.itc2007.examination.solver;
+ dialect "java"
+
+import org.drools.solver.core.score.calculator.HardAndSoftConstraintScoreCalculator;
+import org.drools.solver.core.score.constraint.IntConstraintOccurrence;
+import org.drools.solver.core.score.constraint.ConstraintType;
+
+import org.drools.solver.examples.pas.domain.AdmissionPart;
+import org.drools.solver.examples.pas.domain.Bed;
+import org.drools.solver.examples.pas.domain.BedDesignation;
+import org.drools.solver.examples.pas.domain.Department;
+import org.drools.solver.examples.pas.domain.DepartmentSpecialism;
+import org.drools.solver.examples.pas.domain.Equipment;
+import org.drools.solver.examples.pas.domain.Gender;
+import org.drools.solver.examples.pas.domain.GenderLimitation;
+import org.drools.solver.examples.pas.domain.Night;
+import org.drools.solver.examples.pas.domain.Patient;
+import org.drools.solver.examples.pas.domain.PatientAdmissionSchedule;
+import org.drools.solver.examples.pas.domain.PreferredPatientEquipment;
+import org.drools.solver.examples.pas.domain.RequiredPatientEquipment;
+import org.drools.solver.examples.pas.domain.Room;
+import org.drools.solver.examples.pas.domain.RoomEquipment;
+import org.drools.solver.examples.pas.domain.RoomSpecialism;
+import org.drools.solver.examples.pas.domain.Specialism;
+import org.drools.solver.examples.pas.domain.solver.AdmissionPartConflict;
+import org.drools.solver.examples.pas.domain.solver.AdmissionPartSpecialismMissingInRoom;
+
+// @author Geoffrey De Smet
+
+// Two patients in the same bed for a number of nights.
+rule "sameBedInSameNight"
+ when
+ $admissionPartConflict : AdmissionPartConflict($leftAdmissionPart : leftAdmissionPart,
+ $rightAdmissionPart : rightAdmissionPart);
+ $leftBedDesignation : BedDesignation(admissionPart == $leftAdmissionPart, $bed : bed);
+ $rightBedDesignation : BedDesignation(admissionPart == $rightAdmissionPart, bed == $bed);
+ then
+ insertLogical(new IntConstraintOccurrence("sameBedInSameNight",
+ ConstraintType.NEGATIVE_HARD, 1000 * $admissionPartConflict.getNightSize(),
+ $leftBedDesignation, $rightBedDesignation));
+end
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleScoreRules.drl 2009-07-12 15:08:56 UTC (rev 27907)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleScoreRules.drl 2009-07-12 15:19:50 UTC (rev 27908)
@@ -1,165 +0,0 @@
-package org.drools.solver.examples.itc2007.examination.solver;
- dialect "java"
-
-import org.drools.solver.core.score.calculator.HardAndSoftConstraintScoreCalculator;
-import org.drools.solver.core.score.constraint.IntConstraintOccurrence;
-import org.drools.solver.core.score.constraint.ConstraintType;
-
-import org.drools.solver.examples.pas.domain.AdmissionPart;
-import org.drools.solver.examples.pas.domain.Bed;
-import org.drools.solver.examples.pas.domain.BedDesignation;
-import org.drools.solver.examples.pas.domain.Department;
-import org.drools.solver.examples.pas.domain.DepartmentSpecialism;
-import org.drools.solver.examples.pas.domain.Equipment;
-import org.drools.solver.examples.pas.domain.Gender;
-import org.drools.solver.examples.pas.domain.GenderLimitation;
-import org.drools.solver.examples.pas.domain.Night;
-import org.drools.solver.examples.pas.domain.Patient;
-import org.drools.solver.examples.pas.domain.PatientAdmissionSchedule;
-import org.drools.solver.examples.pas.domain.PreferredPatientEquipment;
-import org.drools.solver.examples.pas.domain.RequiredPatientEquipment;
-import org.drools.solver.examples.pas.domain.Room;
-import org.drools.solver.examples.pas.domain.RoomEquipment;
-import org.drools.solver.examples.pas.domain.RoomSpecialism;
-import org.drools.solver.examples.pas.domain.Specialism;
-import org.drools.solver.examples.pas.domain.solver.AdmissionPartConflict;
-import org.drools.solver.examples.pas.domain.solver.AdmissionPartSpecialismMissingInRoom;
-
-// @author Geoffrey De Smet
-
-global HardAndSoftConstraintScoreCalculator scoreCalculator;
-
-// ############################################################################
-// Hard constraints
-// ############################################################################
-
-// RoomMaintenance constraint is not yet applicable
-
-// Two patients in the same bed for a number of nights.
-rule "sameBedInSameNight"
- when
- $admissionPartConflict : AdmissionPartConflict($leftAdmissionPart : leftAdmissionPart,
- $rightAdmissionPart : rightAdmissionPart);
- $leftBedDesignation : BedDesignation(admissionPart == $leftAdmissionPart, $bed : bed);
- $rightBedDesignation : BedDesignation(admissionPart == $rightAdmissionPart, bed == $bed);
- then
- insertLogical(new IntConstraintOccurrence("sameBedInSameNight",
- ConstraintType.NEGATIVE_HARD, 1000 * $admissionPartConflict.getNightSize(),
- $leftBedDesignation, $rightBedDesignation));
-end
-
-// Different genders in the same room when the room doesn't allow it.
-// TODO the official spec gives slighly lower scores in big rooms (capacity >= 3) where this constraint is broken
-rule "differentGenderInSameGenderRoomInSameNight"
- when
- $admissionPartConflict : AdmissionPartConflict($leftAdmissionPart : leftAdmissionPart,
- $rightAdmissionPart : rightAdmissionPart,
- differentGender == true);
- $leftBedDesignation : BedDesignation(roomGenderLimitation == GenderLimitation.SAME_GENDER,
- admissionPart == $leftAdmissionPart, $room : room);
- $rightBedDesignation : BedDesignation(room == $room, admissionPart == $rightAdmissionPart);
- then
- insertLogical(new IntConstraintOccurrence("differentGenderInSameGenderRoomInSameNight",
- // TODO this would be better for the problem
- // ConstraintType.NEGATIVE_HARD,
- ConstraintType.NEGATIVE_SOFT,
- 50 * $admissionPartConflict.getNightSize(),
- $leftBedDesignation, $rightBedDesignation));
-end
-
-// Room's GenderLimitation male only and female only constraint is build-in
-
-// Departement's mininumAge and maximumAge constraint is build-in
-
-// RequiredPatientEquipment constraint is build-in
-
-// Patient's requiredRoomCapacity constraint is not yet applicable
-
-// Accumulate hard constraints
-rule "hardConstraintsBroken"
- salience -1 // Finish the other rules first (optional, for performance)
- when
- $hardTotal : Number() from accumulate(
- IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_HARD, $weight : weight),
- sum($weight) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
- );
- then
- scoreCalculator.setHardConstraintsBroken($hardTotal.intValue());
-end
-
-// ############################################################################
-// Soft constraints
-// ############################################################################
-
-
-// Patient preferredMaximumRoomCapacity
-rule "preferredMaximumRoomCapacity"
- when
- $bedDesignation : BedDesignation(patientPreferredMaximumRoomCapacity != null,
- patientPreferredMaximumRoomCapacity < roomCapacity);
- then
- insertLogical(new IntConstraintOccurrence("preferredMaximumRoomCapacity",
- ConstraintType.NEGATIVE_SOFT,
- // TODO this would be better for the problem
- // 8 * ($bedDesignation.getRoomCapacity() - $bedDesignation.getPatientPreferredMaximumRoomCapacity())
- // * $bedDesignation.getAdmissionPart().getNightCount(),
- 8 * $bedDesignation.getAdmissionPart().getNightCount(),
- $bedDesignation));
-end
-
-// DepartmentSpecialism constraint
-rule "departmentSpecialism"
- when
- $bedDesignation : BedDesignation($specialism : admissionPartSpecialism, $department : department);
- not DepartmentSpecialism(department == $department, specialism == $specialism);
- then
- insertLogical(new IntConstraintOccurrence("departmentSpecialism",
- ConstraintType.NEGATIVE_SOFT, 10 * $bedDesignation.getAdmissionPart().getNightCount(),
- $bedDesignation));
-end
-
-// RoomSpecialism constraint
-rule "roomSpecialismNotExists"
- when
- $bedDesignation : BedDesignation(admissionPartSpecialism != null, $specialism : admissionPartSpecialism, $room : room);
- not RoomSpecialism(room == $room, specialism == $specialism);
- then
- 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"
- when
- $preferredPatientEquipment : PreferredPatientEquipment($patient : patient, $equipment : equipment);
- $bedDesignation : BedDesignation(patient == $patient, $room : room);
- not RoomEquipment(room == $room, equipment == $equipment);
- then
- insertLogical(new IntConstraintOccurrence("preferredPatientEquipment",
- ConstraintType.NEGATIVE_SOFT, 20 * $bedDesignation.getAdmissionPart().getNightCount(),
- $bedDesignation, $preferredPatientEquipment));
-end
-
-// Do not change bed in an AdmissionPart on different Nights constraint is build-in
-
-// Accumulate soft constraints
-rule "softConstraintsBroken"
- salience -1 // Finish the other rules first (optional, for performance)
- when
- $softTotal : Number() from accumulate(
- IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_SOFT, $weight : weight),
- sum($weight) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
- );
- then
- scoreCalculator.setSoftConstraintsBroken($softTotal.intValue());
-end
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml 2009-07-12 15:08:56 UTC (rev 27907)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml 2009-07-12 15:19:50 UTC (rev 27908)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<localSearchSolver>
- <scoreDrl>/org/drools/solver/examples/pas/solver/patientAdmissionScheduleScoreRules.drl</scoreDrl>
+ <scoreDrl>/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl</scoreDrl>
<scoreDefinition>
<scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
</scoreDefinition>
More information about the jboss-svn-commits
mailing list