[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