[jboss-svn-commits] JBL Code SVN: r33017 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main: resources/org/drools/planner/examples/nurserostering/solver and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun May 23 03:29:58 EDT 2010
Author: ge0ffrey
Date: 2010-05-23 03:29:57 -0400 (Sun, 23 May 2010)
New Revision: 33017
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
Log:
nurse rostering score rule minimumConsecutiveWorkingDays
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java 2010-05-23 06:50:21 UTC (rev 33016)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringEvaluatorHelper.java 2010-05-23 07:29:57 UTC (rev 33017)
@@ -6,6 +6,7 @@
import java.io.OutputStream;
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.TreeMap;
import org.apache.commons.io.IOUtils;
import org.drools.planner.examples.common.business.SolutionBusiness;
@@ -58,7 +59,7 @@
private String lineContainsFilter;
private StringBuilder lineBuffer = new StringBuilder(120);
- private Map<String, int[]> excessMap = new LinkedHashMap<String, int[]>();
+ private Map<String, int[]> excessMap = new TreeMap<String, int[]>();
private String lastEmployeeCode = null;
private EvaluatorSummaryFilterOutputStream(String name, String lineContainsFilter) {
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-23 06:50:21 UTC (rev 33016)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl 2010-05-23 07:29:57 UTC (rev 33017)
@@ -144,75 +144,27 @@
($dayLength - $maximumValue) * $contractLine.getMaximumWeight(),
$employeeConsecutiveAssignment));
end
-//rule "maximumConsecutiveWorkingDays"
-// when
-// $contractLine : MinMaxContractLine(
-// contractLineType == ContractLineType.CONSECUTIVE_WORKING_DAYS, maximumEnabled == true,
-// $contract : contract, $maximumIndexDiff : maximumIndexDiff
-// )
-// $employee : Employee(contract == $contract)
-//
-// // The first day has no working day before it
-// EmployeeAssignment(
-// employee == $employee,
-// $firstDayIndex : shiftDateDayIndex
-// )
-// not EmployeeAssignment(employee == $employee, shiftDateDayIndex == ($firstDayIndex - 1))
-//
-// // The last day has no working day after it
-// EmployeeAssignment(
-// employee == $employee,
-// shiftDateDayIndex > ($firstDayIndex + $maximumIndexDiff), // Too many days
-// $lastDayIndex : shiftDateDayIndex
-// )
-// not EmployeeAssignment(employee == $employee, shiftDateDayIndex == ($lastDayIndex + 1))
-//
-// // There are no free days between the first and last day
-// not(
-// $shiftDate : ShiftDate(dayIndex > $firstDayIndex && < $lastDayIndex)
-// and not EmployeeAssignment(employee == $employee, shiftDate == $shiftDate)
-// )
-// then
-// insertLogical(new IntConstraintOccurrence("maximumConsecutiveWorkingDays", ConstraintType.NEGATIVE_SOFT,
-// ($lastDayIndex - $firstDayIndex - $maximumIndexDiff) * $contractLine.getMaximumWeight(),
-// $employee, $firstDayIndex, $lastDayIndex));
-//end
// Minimum number of consecutive working days
-//rule "minimumConsecutiveWorkingDays"
-// when
-// $contractLine : MinMaxContractLine(
-// contractLineType == ContractLineType.CONSECUTIVE_WORKING_DAYS, minimumEnabled == true,
-// $contract : contract, $minimumIndexDiff : minimumIndexDiff
-// )
-// $employee : Employee(contract == $contract)
-//
-// // The first day has no working day before it
-// EmployeeAssignment(
-// employee == $employee,
-// $firstDayIndex : shiftDateDayIndex
-// )
-// not EmployeeAssignment(employee == $employee, shiftDateDayIndex == ($firstDayIndex - 1))
-//
-// // The last day has no working day after it
-// EmployeeAssignment(
-// employee == $employee,
-// shiftDateDayIndex > $firstDayIndex,
-// shiftDateDayIndex < ($firstDayIndex + $minimumIndexDiff), // Too few days
-// $lastDayIndex : shiftDateDayIndex
-// )
-// not EmployeeAssignment(employee == $employee, shiftDateDayIndex == ($lastDayIndex + 1))
-//
-// // There are no free days between the first and last day
-// forall($shiftDate : ShiftDate(dayIndex > $firstDayIndex && < $lastDayIndex)
-// EmployeeAssignment(employee == $employee, shiftDate == $shiftDate)
-// )
-// then
-// insertLogical(new IntConstraintOccurrence("minimumConsecutiveWorkingDays", ConstraintType.NEGATIVE_SOFT,
-// ($firstDayIndex + $minimumIndexDiff - $lastDayIndex) * $contractLine.getMinimumWeight(),
-// $employee, $firstDayIndex, $lastDayIndex));
-//end
+rule "minimumConsecutiveWorkingDays"
+ when
+ $contractLine : MinMaxContractLine(
+ contractLineType == ContractLineType.CONSECUTIVE_WORKING_DAYS, minimumEnabled == true,
+ $contract : contract, $minimumValue : minimumValue
+ )
+ $employee : Employee(contract == $contract)
+ $employeeConsecutiveAssignment : EmployeeConsecutiveAssignment(
+ employee == $employee,
+ dayLength < $minimumValue,
+ $dayLength : dayLength
+ )
+ then
+ insertLogical(new IntConstraintOccurrence("minimumConsecutiveWorkingDays", ConstraintType.NEGATIVE_SOFT,
+ ($minimumValue - $dayLength) * $contractLine.getMinimumWeight(),
+ $employeeConsecutiveAssignment));
+end
+
// Maximum number of consecutive free days
// TODO
More information about the jboss-svn-commits
mailing list