[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