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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun May 30 10:52:20 EDT 2010


Author: ge0ffrey
Date: 2010-05-30 10:52:20 -0400 (Sun, 30 May 2010)
New Revision: 33203

Added:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBefore2DaysWithAWorkDayPattern.java
Removed:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBeforeWorkSequencePattern.java
Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
Log:
unwantedPatternFreeBefore2DaysWithAWorkDayPattern

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBefore2DaysWithAWorkDayPattern.java (from rev 33196, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBeforeWorkSequencePattern.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBefore2DaysWithAWorkDayPattern.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBefore2DaysWithAWorkDayPattern.java	2010-05-30 14:52:20 UTC (rev 33203)
@@ -0,0 +1,26 @@
+package org.drools.planner.examples.nurserostering.domain;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("FreeBefore2DaysWithAWorkDayPattern")
+public class FreeBefore2DaysWithAWorkDayPattern extends Pattern {
+
+    private DayOfWeek freeDayOfWeek;
+
+    public DayOfWeek getFreeDayOfWeek() {
+        return freeDayOfWeek;
+    }
+
+    public void setFreeDayOfWeek(DayOfWeek freeDayOfWeek) {
+        this.freeDayOfWeek = freeDayOfWeek;
+    }
+
+    @Override
+    public String toString() {
+        return "Free on "  + freeDayOfWeek + " followed by a work day within 2 days";
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBeforeWorkSequencePattern.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBeforeWorkSequencePattern.java	2010-05-30 14:33:05 UTC (rev 33202)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/FreeBeforeWorkSequencePattern.java	2010-05-30 14:52:20 UTC (rev 33203)
@@ -1,47 +0,0 @@
-package org.drools.planner.examples.nurserostering.domain;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-
-/**
- * @author Geoffrey De Smet
- */
- at XStreamAlias("FreeBeforeWorkSequencePattern")
-public class FreeBeforeWorkSequencePattern extends Pattern {
-
-    private DayOfWeek firstWorkDayOfWeek; // null means any
-    
-    private ShiftType workShiftType; // null means any
-
-    private int workDayLength;
-
-    public DayOfWeek getFirstWorkDayOfWeek() {
-        return firstWorkDayOfWeek;
-    }
-
-    public void setFirstWorkDayOfWeek(DayOfWeek firstWorkDayOfWeek) {
-        this.firstWorkDayOfWeek = firstWorkDayOfWeek;
-    }
-
-    public ShiftType getWorkShiftType() {
-        return workShiftType;
-    }
-
-    public void setWorkShiftType(ShiftType workShiftType) {
-        this.workShiftType = workShiftType;
-    }
-
-    public int getWorkDayLength() {
-        return workDayLength;
-    }
-
-    public void setWorkDayLength(int workDayLength) {
-        this.workDayLength = workDayLength;
-    }
-
-    @Override
-    public String toString() {
-        return "Free followed by "  + workDayLength + " work days of " + workShiftType
-                +" beginning on " + firstWorkDayOfWeek;
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java	2010-05-30 14:33:05 UTC (rev 33202)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java	2010-05-30 14:52:20 UTC (rev 33203)
@@ -18,7 +18,7 @@
 import org.drools.planner.examples.common.persistence.AbstractXmlSolutionImporter;
 import org.drools.planner.examples.nurserostering.domain.DayOfWeek;
 import org.drools.planner.examples.nurserostering.domain.Employee;
-import org.drools.planner.examples.nurserostering.domain.FreeBeforeWorkSequencePattern;
+import org.drools.planner.examples.nurserostering.domain.FreeBefore2DaysWithAWorkDayPattern;
 import org.drools.planner.examples.nurserostering.domain.NurseRoster;
 import org.drools.planner.examples.nurserostering.domain.Pattern;
 import org.drools.planner.examples.nurserostering.domain.Shift;
@@ -318,7 +318,10 @@
                     }
                     Pattern pattern;
                     if (patternEntryElementList.get(0).getChild("ShiftType").getText().equals("None")) {
-                        pattern = new FreeBeforeWorkSequencePattern();
+                        pattern = new FreeBefore2DaysWithAWorkDayPattern();
+                        if (patternEntryElementList.size() != 3) {
+                            throw new IllegalStateException("boe");
+                        }
                     } else if (patternEntryElementList.get(1).getChild("ShiftType").getText().equals("None")) {
                         pattern = new WorkBeforeFreeSequencePattern();
                         // TODO support this too (not needed for competition)
@@ -391,9 +394,9 @@
                                 }
                             }
                         }
-                        if (pattern instanceof FreeBeforeWorkSequencePattern) {
-                            FreeBeforeWorkSequencePattern castedPattern = (FreeBeforeWorkSequencePattern) pattern;
-                            if (patternEntryIndex == 1) {
+                        if (pattern instanceof FreeBefore2DaysWithAWorkDayPattern) {
+                            FreeBefore2DaysWithAWorkDayPattern castedPattern = (FreeBefore2DaysWithAWorkDayPattern) pattern;
+                            if (patternEntryIndex == 0) {
                                 if (dayOfWeek == null) {
                                     // TODO Support an any dayOfWeek too (not needed for competition)
                                     throw new UnsupportedOperationException("On patternEntryIndex (" + patternEntryIndex
@@ -401,7 +404,9 @@
                                             + ") the dayOfWeek should not be (Any)."
                                             + "\n None of the test data exhibits such a pattern.");
                                 }
-                                castedPattern.setFirstWorkDayOfWeek(dayOfWeek);
+                                castedPattern.setFreeDayOfWeek(dayOfWeek);
+                            }
+                            if (patternEntryIndex == 1) {
                                 if (shiftType != null) {
                                     // TODO Support a specific shiftType too (not needed for competition)
                                     throw new UnsupportedOperationException("On patternEntryIndex (" + patternEntryIndex
@@ -409,15 +414,15 @@
                                             + ") the shiftType should be (Any)."
                                             + "\n None of the test data exhibits such a pattern.");
                                 }
-                                castedPattern.setWorkShiftType(shiftType);
-                                castedPattern.setWorkDayLength(patternEntryElementList.size() - 1);
+                                // castedPattern.setWorkShiftType(shiftType);
+                                // castedPattern.setWorkDayLength(patternEntryElementList.size() - 1);
                             }
-                            if (patternEntryIndex > 1 && shiftType != castedPattern.getWorkShiftType()) {
-                                throw new IllegalArgumentException("On patternEntryIndex (" + patternEntryIndex
-                                        + ") of FreeBeforeWorkSequence pattern (" + pattern.getCode()
-                                        + ") the shiftType (" + shiftType + ") should be ("
-                                        + castedPattern.getWorkShiftType() + ").");
-                            }
+                            // if (patternEntryIndex > 1 && shiftType != castedPattern.getWorkShiftType()) {
+                            //     throw new IllegalArgumentException("On patternEntryIndex (" + patternEntryIndex
+                            //             + ") of FreeBeforeWorkSequence pattern (" + pattern.getCode()
+                            //             + ") the shiftType (" + shiftType + ") should be ("
+                            //             + castedPattern.getWorkShiftType() + ").");
+                            // }
                             if (patternEntryIndex != 0 && shiftTypeIsNone) {
                                 throw new IllegalArgumentException("On patternEntryIndex (" + patternEntryIndex
                                         + ") of FreeBeforeWorkSequence pattern (" + pattern.getCode()

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-30 14:33:05 UTC (rev 33202)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl	2010-05-30 14:52:20 UTC (rev 33203)
@@ -8,10 +8,9 @@
 import org.drools.planner.examples.nurserostering.domain.DayOfWeek;
 import org.drools.planner.examples.nurserostering.domain.Employee;
 import org.drools.planner.examples.nurserostering.domain.Assignment;
-import org.drools.planner.examples.nurserostering.domain.FreeBeforeWorkSequencePattern;
+import org.drools.planner.examples.nurserostering.domain.FreeBefore2DaysWithAWorkDayPattern;
 import org.drools.planner.examples.nurserostering.domain.NurseRoster;
 import org.drools.planner.examples.nurserostering.domain.Pattern;
-import org.drools.planner.examples.nurserostering.domain.contract.PatternContractLine;
 import org.drools.planner.examples.nurserostering.domain.RosterInfo;
 import org.drools.planner.examples.nurserostering.domain.Shift;
 import org.drools.planner.examples.nurserostering.domain.ShiftDate;
@@ -28,6 +27,7 @@
 import org.drools.planner.examples.nurserostering.domain.contract.ContractLine;
 import org.drools.planner.examples.nurserostering.domain.contract.ContractLineType;
 import org.drools.planner.examples.nurserostering.domain.contract.MinMaxContractLine;
+import org.drools.planner.examples.nurserostering.domain.contract.PatternContractLine;
 import org.drools.planner.examples.nurserostering.domain.request.DayOffRequest;
 import org.drools.planner.examples.nurserostering.domain.request.DayOnRequest;
 import org.drools.planner.examples.nurserostering.domain.request.ShiftOffRequest;
@@ -525,39 +525,31 @@
 end
 
 // Unwanted patterns
-//rule "unwantedPatternFreeBeforeWorkSequencePattern"
-//    when
-//        $pattern : FreeBeforeWorkSequencePattern(
-//            $firstWorkDayOfWeek : firstWorkDayOfWeek,
-//            $workShiftType : workShiftType,
-//            $workDayLength : workDayLength
-//        )
-//        PatternContractLine(
-//            pattern == $pattern, $contract : contract
-//        )
-//
-//        Assignment(
-//            eval($firstWorkDayOfWeek == null) || (shiftDateDayOfWeek == $firstWorkDayOfWeek),
-//            eval($workShiftType == null) || (shiftType == $workShiftType),
-//            contract == $contract,
-//            $employee : employee, $firstWorkDayIndex : shiftDateDayIndex
-//        )
-//        // A free day before
-//        EmployeeFreeSequence(
-//            employee == $employee,
-//            lastDayIndex == ($firstWorkDayIndex - 1)
-//        )
-//        $employeeWorkSequence(
-//            employee == $employee,
-//            shiftDateDayIndex == $firstWorkDayIndex,
-//            dayLength >= $workDayLength
-//        )
-//    then
-//        insertLogical(new IntConstraintOccurrence("unwantedPatternFreeBeforeWorkSequencePattern",
-//                ConstraintType.NEGATIVE_SOFT,
-//                $pattern.getWeight(),
-//                $employee, $pattern, $firstWorkDayIndex));
-//end
+rule "unwantedPatternFreeBefore2DaysWithAWorkDayPattern"
+    when
+        $pattern : FreeBefore2DaysWithAWorkDayPattern(
+            $freeDayOfWeek : freeDayOfWeek
+        )
+        PatternContractLine(
+            pattern == $pattern, $contract : contract
+        )
+        ShiftDate(dayOfWeek == $freeDayOfWeek, $freeDayIndex : dayIndex)
+
+        Assignment(
+            contract == $contract,
+            shiftDateDayIndex == ($freeDayIndex + 1) || shiftDateDayIndex == ($freeDayIndex + 2),
+            $employee : employee
+        )
+        not Assignment(
+            employee == $employee,
+            shiftDateDayIndex == $freeDayIndex
+        )
+    then
+        insertLogical(new IntConstraintOccurrence("unwantedPatternFreeBefore2DaysWithAWorkDayPattern",
+                ConstraintType.NEGATIVE_SOFT,
+                $pattern.getWeight(),
+                $employee, $pattern, $freeDayIndex));
+end
 // TODO support WorkBeforeFreeSequencePattern too (not needed for competition)
 //rule "unwantedPatternWorkBeforeFreeSequencePattern"
 //    when



More information about the jboss-svn-commits mailing list