[jboss-svn-commits] JBL Code SVN: r27232 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: java/org/drools/solver/examples/patientadmissionschedule/solver/move and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jun 28 07:43:34 EDT 2009
Author: ge0ffrey
Date: 2009-06-28 07:43:33 -0400 (Sun, 28 Jun 2009)
New Revision: 27232
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/BedDesignationSwitchMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/factory/BedDesignationSwitchMoveFactory.java
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/AdmissionPart.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/PatientAdmissionSchedule.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/BedChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/factory/BedChangeMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/patientadmissionschedule/solver/patientAdmissionScheduleSolverConfig.xml
Log:
pas: switch admission moves
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/AdmissionPart.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/AdmissionPart.java 2009-06-28 11:08:42 UTC (rev 27231)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/AdmissionPart.java 2009-06-28 11:43:33 UTC (rev 27232)
@@ -2,6 +2,7 @@
import org.apache.commons.lang.builder.CompareToBuilder;
import org.drools.solver.examples.common.domain.AbstractPersistable;
+import org.drools.solver.examples.patientadmissionschedule.domain.solver.AdmissionPartConflict;
/**
* @author Geoffrey De Smet
@@ -58,4 +59,10 @@
return patient + "(" + firstNight + "-" + lastNight + ")";
}
+ public int calculateSameNightCount(AdmissionPart other) {
+ int firstNightIndex = Math.max(getFirstNight().getIndex(), other.getFirstNight().getIndex());
+ int lastNightIndex = Math.min(getLastNight().getIndex(), other.getLastNight().getIndex());
+ return Math.max(0, lastNightIndex - firstNightIndex + 1);
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/PatientAdmissionSchedule.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/PatientAdmissionSchedule.java 2009-06-28 11:08:42 UTC (rev 27231)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/domain/PatientAdmissionSchedule.java 2009-06-28 11:43:33 UTC (rev 27232)
@@ -177,13 +177,10 @@
for (AdmissionPart leftAdmissionPart : admissionPartList) {
for (AdmissionPart rightAdmissionPart : admissionPartList) {
if (leftAdmissionPart.getId() < rightAdmissionPart.getId()) {
- int firstNightIndex = Math.max(leftAdmissionPart.getFirstNight().getIndex(),
- rightAdmissionPart.getFirstNight().getIndex());
- int lastNightIndex = Math.min(leftAdmissionPart.getLastNight().getIndex(),
- rightAdmissionPart.getLastNight().getIndex());
- if (firstNightIndex <= lastNightIndex) {
+ int sameNightCount = leftAdmissionPart.calculateSameNightCount(rightAdmissionPart);
+ if (sameNightCount > 0) {
admissionPartConflictList.add(new AdmissionPartConflict(
- leftAdmissionPart, rightAdmissionPart, lastNightIndex - firstNightIndex + 1));
+ leftAdmissionPart, rightAdmissionPart, sameNightCount));
}
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/BedChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/BedChangeMove.java 2009-06-28 11:08:42 UTC (rev 27231)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/BedChangeMove.java 2009-06-28 11:43:33 UTC (rev 27232)
@@ -10,8 +10,8 @@
import org.drools.runtime.rule.FactHandle;
import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.patientadmissionschedule.domain.Bed;
import org.drools.solver.examples.patientadmissionschedule.domain.BedDesignation;
-import org.drools.solver.examples.patientadmissionschedule.domain.Bed;
/**
* @author Geoffrey De Smet
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/BedDesignationSwitchMove.java (from rev 27229, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/move/SeatDesignationSwitchMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/BedDesignationSwitchMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/BedDesignationSwitchMove.java 2009-06-28 11:43:33 UTC (rev 27232)
@@ -0,0 +1,82 @@
+package org.drools.solver.examples.patientadmissionschedule.solver.move;
+
+import java.util.Arrays;
+import java.util.Collection;
+
+import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.WorkingMemory;
+import org.drools.runtime.rule.FactHandle;
+import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.patientadmissionschedule.domain.Bed;
+import org.drools.solver.examples.patientadmissionschedule.domain.BedDesignation;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class BedDesignationSwitchMove implements Move, TabuPropertyEnabled {
+
+ private BedDesignation leftBedDesignation;
+ private BedDesignation rightBedDesignation;
+
+ public BedDesignationSwitchMove(BedDesignation leftBedDesignation, BedDesignation rightBedDesignation) {
+ this.leftBedDesignation = leftBedDesignation;
+ this.rightBedDesignation = rightBedDesignation;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ return !ObjectUtils.equals(leftBedDesignation.getBed(), rightBedDesignation.getBed())
+ && rightBedDesignation.getBed().allowsAdmissionPart(leftBedDesignation.getAdmissionPart())
+ && leftBedDesignation.getBed().allowsAdmissionPart(rightBedDesignation.getAdmissionPart());
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new BedDesignationSwitchMove(rightBedDesignation, leftBedDesignation);
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ Bed oldLeftBed = leftBedDesignation.getBed();
+ Bed oldRightBed = rightBedDesignation.getBed();
+ moveBed(workingMemory, leftBedDesignation, oldRightBed);
+ moveBed(workingMemory, rightBedDesignation, oldLeftBed);
+ }
+
+ // Extract to helper class if other moves are created
+ private static void moveBed(WorkingMemory workingMemory, BedDesignation bedDesignation, Bed toBed) {
+ FactHandle factHandle = workingMemory.getFactHandle(bedDesignation);
+ bedDesignation.setBed(toBed);
+ workingMemory.update(factHandle, bedDesignation);
+ }
+
+ public Collection<? extends Object> getTabuProperties() {
+ return Arrays.<BedDesignation>asList(leftBedDesignation, rightBedDesignation);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof BedDesignationSwitchMove) {
+ BedDesignationSwitchMove other = (BedDesignationSwitchMove) o;
+ return new EqualsBuilder()
+ .append(leftBedDesignation, other.leftBedDesignation)
+ .append(rightBedDesignation, other.rightBedDesignation)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(leftBedDesignation)
+ .append(rightBedDesignation)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return leftBedDesignation + " <=> " + rightBedDesignation;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/factory/BedChangeMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/factory/BedChangeMoveFactory.java 2009-06-28 11:08:42 UTC (rev 27231)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/factory/BedChangeMoveFactory.java 2009-06-28 11:43:33 UTC (rev 27232)
@@ -6,14 +6,9 @@
import org.drools.solver.core.move.Move;
import org.drools.solver.core.move.factory.CachedMoveFactory;
import org.drools.solver.core.solution.Solution;
-import org.drools.solver.examples.itc2007.examination.domain.Exam;
-import org.drools.solver.examples.itc2007.examination.domain.Examination;
-import org.drools.solver.examples.itc2007.examination.domain.Period;
-import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
-import org.drools.solver.examples.patientadmissionschedule.domain.PatientAdmissionSchedule;
import org.drools.solver.examples.patientadmissionschedule.domain.Bed;
-import org.drools.solver.examples.patientadmissionschedule.domain.AdmissionPart;
import org.drools.solver.examples.patientadmissionschedule.domain.BedDesignation;
+import org.drools.solver.examples.patientadmissionschedule.domain.PatientAdmissionSchedule;
import org.drools.solver.examples.patientadmissionschedule.solver.move.BedChangeMove;
/**
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/factory/BedDesignationSwitchMoveFactory.java (from rev 27229, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/move/factory/SeatDesignationSwitchMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/factory/BedDesignationSwitchMoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/solver/move/factory/BedDesignationSwitchMoveFactory.java 2009-06-28 11:43:33 UTC (rev 27232)
@@ -0,0 +1,36 @@
+package org.drools.solver.examples.patientadmissionschedule.solver.move.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.CachedMoveFactory;
+import org.drools.solver.core.solution.Solution;
+import org.drools.solver.examples.patientadmissionschedule.domain.BedDesignation;
+import org.drools.solver.examples.patientadmissionschedule.domain.PatientAdmissionSchedule;
+import org.drools.solver.examples.patientadmissionschedule.solver.move.BedDesignationSwitchMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class BedDesignationSwitchMoveFactory extends CachedMoveFactory {
+
+ public List<Move> createCachedMoveList(Solution solution) {
+ PatientAdmissionSchedule patientAdmissionSchedule = (PatientAdmissionSchedule) solution;
+ List<BedDesignation> bedDesignationList = patientAdmissionSchedule.getBedDesignationList();
+ List<Move> moveList = new ArrayList<Move>();
+ for (ListIterator<BedDesignation> leftIt = bedDesignationList.listIterator(); leftIt.hasNext();) {
+ BedDesignation leftBedDesignation = leftIt.next();
+ for (ListIterator<BedDesignation> rightIt = bedDesignationList.listIterator(leftIt.nextIndex());
+ rightIt.hasNext();) {
+ BedDesignation rightBedDesignation = rightIt.next();
+ if (leftBedDesignation.getAdmissionPart().calculateSameNightCount(rightBedDesignation.getAdmissionPart()) > 0) {
+ moveList.add(new BedDesignationSwitchMove(leftBedDesignation, rightBedDesignation));
+ }
+ }
+ }
+ return moveList;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/patientadmissionschedule/solver/patientAdmissionScheduleSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/patientadmissionschedule/solver/patientAdmissionScheduleSolverConfig.xml 2009-06-28 11:08:42 UTC (rev 27231)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/patientadmissionschedule/solver/patientAdmissionScheduleSolverConfig.xml 2009-06-28 11:43:33 UTC (rev 27232)
@@ -22,10 +22,10 @@
<moveFactoryClass>org.drools.solver.examples.patientadmissionschedule.solver.move.factory.BedChangeMoveFactory</moveFactoryClass>
<relativeSelection>0.002</relativeSelection>
</selector>
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.002</relativeSelection>-->
- <!--</selector>-->
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.patientadmissionschedule.solver.move.factory.BedDesignationSwitchMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
</selector>
<accepter>
<completeSolutionTabuSize>1000</completeSolutionTabuSize>
More information about the jboss-svn-commits
mailing list