[jboss-svn-commits] JBL Code SVN: r33023 - 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
Mon May 24 04:52:27 EDT 2010
Author: ge0ffrey
Date: 2010-05-24 04:52:27 -0400 (Mon, 24 May 2010)
New Revision: 33023
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeAssignmentTotal.java
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
Log:
insertEmployeeAssignmentTotal
Added: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeAssignmentTotal.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeAssignmentTotal.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeAssignmentTotal.java 2010-05-24 08:52:27 UTC (rev 33023)
@@ -0,0 +1,78 @@
+package org.drools.planner.examples.nurserostering.domain.solver;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.planner.examples.nurserostering.domain.Employee;
+import org.drools.planner.examples.nurserostering.domain.ShiftDate;
+import org.drools.planner.examples.nurserostering.domain.contract.Contract;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class EmployeeAssignmentTotal implements Comparable<EmployeeAssignmentTotal>, Serializable {
+
+ private Employee employee;
+ private int total;
+
+ public EmployeeAssignmentTotal(Employee employee, int total) {
+ this.employee = employee;
+ this.total = total;
+ }
+
+ public Employee getEmployee() {
+ return employee;
+ }
+
+ public void setEmployee(Employee employee) {
+ this.employee = employee;
+ }
+
+ public int getTotal() {
+ return total;
+ }
+
+ public void setTotal(int total) {
+ this.total = total;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof EmployeeAssignmentTotal) {
+ EmployeeAssignmentTotal other = (EmployeeAssignmentTotal) o;
+ return new EqualsBuilder()
+ .append(employee, other.employee)
+ .append(total, other.total)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(employee)
+ .append(total)
+ .toHashCode();
+ }
+
+ public int compareTo(EmployeeAssignmentTotal other) {
+ return new CompareToBuilder()
+ .append(employee, other.employee)
+ .append(total, other.total)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return employee + " = " + total;
+ }
+
+ public Contract getEmployeeContract() {
+ return employee.getContract();
+ }
+
+}
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-24 08:45:36 UTC (rev 33022)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl 2010-05-24 08:52:27 UTC (rev 33023)
@@ -25,6 +25,7 @@
import org.drools.planner.examples.nurserostering.domain.request.DayOnRequest;
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.EmployeeConsecutiveAssignment;
import org.drools.planner.examples.nurserostering.domain.solver.EmployeeConsecutiveAssignmentEnd;
import org.drools.planner.examples.nurserostering.domain.solver.EmployeeConsecutiveAssignmentStart;
@@ -67,39 +68,47 @@
// Soft constraints
// ############################################################################
+rule "insertEmployeeAssignmentTotal"
+ salience 1 // Do these rules first (optional, for performance)
+ when
+ MinMaxContractLine(contractLineType == ContractLineType.TOTAL_ASSIGNMENTS, enabled == true,
+ $contract : contract)
+ $employee : Employee(contract == $contract)
+ $totalAssignmentSize : Number() from accumulate(
+ $assignment : Assignment(employee == $employee),
+ count($assignment)
+ )
+ then
+ insertLogical(new EmployeeAssignmentTotal($employee, $totalAssignmentSize.intValue()));
+end
+
// Minimum number of assignments
rule "minimumTotalAssignments"
when
- $contractLine : MinMaxContractLine(
+ MinMaxContractLine(
contractLineType == ContractLineType.TOTAL_ASSIGNMENTS, minimumEnabled == true,
$contract : contract, $minimumValue : minimumValue
)
- $employee : Employee(contract == $contract)
- $totalAssignmentSize : Number(intValue < $minimumValue) from accumulate(
- $assignment : Assignment(employee == $employee),
- count($assignment)
- )
+ EmployeeAssignmentTotal(employeeContract == $contract, total < $minimumValue,
+ $employee : employee, $total : total)
then
insertLogical(new IntConstraintOccurrence("minimumTotalAssignments", ConstraintType.NEGATIVE_SOFT,
- Math.abs($minimumValue - $totalAssignmentSize.intValue()),
+ $minimumValue - $total,
$employee));
end
// Maximum number of assignments
rule "maximumTotalAssignments"
when
- $contractLine : MinMaxContractLine(
+ MinMaxContractLine(
contractLineType == ContractLineType.TOTAL_ASSIGNMENTS, maximumEnabled == true,
$contract : contract, $maximumValue : maximumValue
)
- $employee : Employee(contract == $contract)
- $totalAssignmentSize : Number(intValue > $maximumValue) from accumulate(
- $assignment : Assignment(employee == $employee),
- count($assignment)
- )
+ EmployeeAssignmentTotal(employeeContract == $contract, total > $maximumValue,
+ $employee : employee, $total : total)
then
insertLogical(new IntConstraintOccurrence("maximumTotalAssignments", ConstraintType.NEGATIVE_SOFT,
- Math.abs($totalAssignmentSize.intValue() - $maximumValue),
+ $total - $maximumValue,
$employee));
end
More information about the jboss-svn-commits
mailing list