[jboss-svn-commits] JBL Code SVN: r33108 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main: java/org/drools/planner/examples/nurserostering/domain/contract and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu May 27 04:52:29 EDT 2010


Author: ge0ffrey
Date: 2010-05-27 04:52:28 -0400 (Thu, 27 May 2010)
New Revision: 33108

Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Employee.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/WeekendDefinition.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/Contract.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
Log:
identical shift types

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Employee.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Employee.java	2010-05-27 07:40:41 UTC (rev 33107)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Employee.java	2010-05-27 08:52:28 UTC (rev 33108)
@@ -50,4 +50,8 @@
         return code + "(" + name + ")";
     }
 
+    public int getWeekendLength() {
+        return getContract().getWeekendLength();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/WeekendDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/WeekendDefinition.java	2010-05-27 07:40:41 UTC (rev 33107)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/WeekendDefinition.java	2010-05-27 08:52:28 UTC (rev 33108)
@@ -70,4 +70,8 @@
         return dayOfWeekSet.contains(dayOfWeek);
     }
 
+    public int getWeekendLength() {
+        return dayOfWeekSet.size();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/Contract.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/Contract.java	2010-05-27 07:40:41 UTC (rev 33107)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/Contract.java	2010-05-27 08:52:28 UTC (rev 33108)
@@ -62,4 +62,8 @@
         return code;
     }
 
+    public int getWeekendLength() {
+        return weekendDefinition.getWeekendLength();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl	2010-05-27 07:40:41 UTC (rev 33107)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl	2010-05-27 08:52:28 UTC (rev 33108)
@@ -27,13 +27,13 @@
 import org.drools.planner.examples.nurserostering.domain.request.ShiftOffRequest;
 import org.drools.planner.examples.nurserostering.domain.request.ShiftOnRequest;
 import org.drools.planner.examples.nurserostering.domain.solver.EmployeeAssignmentTotal;
-import org.drools.planner.examples.nurserostering.domain.solver.EmployeeWeekendSequence;
-import org.drools.planner.examples.nurserostering.domain.solver.EmployeeWorkSequence;
-import org.drools.planner.examples.nurserostering.domain.solver.EmployeeFreeDaySequence;
 import org.drools.planner.examples.nurserostering.domain.solver.EmployeeConsecutiveAssignmentEnd;
 import org.drools.planner.examples.nurserostering.domain.solver.EmployeeConsecutiveAssignmentStart;
 import org.drools.planner.examples.nurserostering.domain.solver.EmployeeConsecutiveWeekendAssignmentEnd;
 import org.drools.planner.examples.nurserostering.domain.solver.EmployeeConsecutiveWeekendAssignmentStart;
+import org.drools.planner.examples.nurserostering.domain.solver.EmployeeFreeDaySequence;
+import org.drools.planner.examples.nurserostering.domain.solver.EmployeeWeekendSequence;
+import org.drools.planner.examples.nurserostering.domain.solver.EmployeeWorkSequence;
 
 // @author Geoffrey De Smet
 
@@ -79,12 +79,12 @@
         MinMaxContractLine(contractLineType == ContractLineType.TOTAL_ASSIGNMENTS, enabled == true,
             $contract : contract)
         $employee : Employee(contract == $contract)
-        $totalAssignmentSize : Number() from accumulate(
+        $assignmentTotal : Number() from accumulate(
             $assignment : Assignment(employee == $employee),
             count($assignment)
         )
     then
-        insertLogical(new EmployeeAssignmentTotal($employee, $totalAssignmentSize.intValue()));
+        insertLogical(new EmployeeAssignmentTotal($employee, $assignmentTotal.intValue()));
 end
 
 // Minimum number of assignments
@@ -420,7 +420,26 @@
 end
 
 // Identical shiftTypes during a weekend
-// TODO
+rule "identicalShiftTypesDuringWeekend"
+    when
+        $contractLine : BooleanContractLine(contractLineType == ContractLineType.IDENTICAL_SHIFT_TYPES_DURING_WEEKEND,
+            enabled == true, $contract : contract)
+        $employee : Employee(contract == $contract, $weekendLength : weekendLength)
+        ShiftDate(dayOfWeek == DayOfWeek.SUNDAY, $sundayIndex : dayIndex)
+        $shiftType : ShiftType()
+        $weekendAssignmentTotal : Number(intValue > 0 && < $weekendLength) from accumulate(
+            $assignment : Assignment(
+                weekend == true,
+                weekendSundayIndex == $sundayIndex,
+                employee == $employee,
+                shiftType == $shiftType),
+            count($assignment)
+        )
+    then
+        insertLogical(new IntConstraintOccurrence("identicalShiftTypesDuringWeekend", ConstraintType.NEGATIVE_SOFT,
+                ($weekendLength - $weekendAssignmentTotal.intValue()) * $contractLine.getWeight(),
+                $employee, $sundayIndex, $shiftType));
+end
 
 // Two free days after a night shift
 // TODO



More information about the jboss-svn-commits mailing list