[jboss-svn-commits] JBL Code SVN: r18109 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: java/org/drools/solver/examples/itc2007/examination/solver/move and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jan 25 08:59:44 EST 2008
Author: ge0ffrey
Date: 2008-01-25 08:59:44 -0500 (Fri, 25 Jan 2008)
New Revision: 18109
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExaminationMoveHelper.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/factory/
Removed:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeBulkMove.java
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExamSwitchMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml
Log:
better coincidence moving
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java 2008-01-25 13:18:02 UTC (rev 18108)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java 2008-01-25 13:59:44 UTC (rev 18109)
@@ -10,7 +10,6 @@
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.domain.Room;
-import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeBulkMove;
import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
@@ -28,18 +27,7 @@
List<Room> roomList = examination.getRoomList();
List<Move> moveList = new ArrayList<Move>();
for (Exam exam : examination.getExamList()) {
- if (exam.getExamCoincidence() != null) {
- if (exam.isCoincidenceLeader()) {
- for (Period period : periodList) {
- int distance = calculateShortestDistance(
- period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
- if (distance == periodJump) {
- moveList.add(new PeriodChangeBulkMove(
- exam.getExamCoincidence().getCoincidenceExamSet(), period));
- }
- }
- }
- } else {
+ if (exam.isCoincidenceLeader()) {
for (Period period : periodList) {
int distance = calculateShortestDistance(
period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java 2008-01-25 13:18:02 UTC (rev 18108)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java 2008-01-25 13:59:44 UTC (rev 18109)
@@ -10,7 +10,6 @@
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.domain.Room;
-import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeBulkMove;
import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
@@ -28,18 +27,7 @@
List<Room> roomList = examination.getRoomList();
List<Move> moveList = new ArrayList<Move>();
for (Exam exam : examination.getExamList()) {
- if (exam.getExamCoincidence() != null) {
- if (exam.isCoincidenceLeader()) {
- for (Period period : periodList) {
- int distance = calculateShortestDistance(
- period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
- if (distance <= PERIOD_JUMP) {
- moveList.add(new PeriodChangeBulkMove(
- exam.getExamCoincidence().getCoincidenceExamSet(), period));
- }
- }
- }
- } else {
+ if (exam.isCoincidenceLeader()) {
for (Period period : periodList) {
int distance = calculateShortestDistance(
period.getPeriodIndex(), exam.getPeriod().getPeriodIndex(), periodList.size());
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeExaminationMoveFactory.java 2008-01-25 13:18:02 UTC (rev 18108)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeExaminationMoveFactory.java 2008-01-25 13:59:44 UTC (rev 18109)
@@ -9,7 +9,6 @@
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.PeriodChangeBulkMove;
import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
/**
@@ -22,14 +21,7 @@
List<Period> periodList = examination.getPeriodList();
List<Move> moveList = new ArrayList<Move>();
for (Exam exam : examination.getExamList()) {
- if (exam.getExamCoincidence() != null) {
- if (exam.isCoincidenceLeader()) {
- for (Period period : periodList) {
- moveList.add(new PeriodChangeBulkMove(
- exam.getExamCoincidence().getCoincidenceExamSet(), period));
- }
- }
- } else {
+ if (exam.isCoincidenceLeader()) {
for (Period period : periodList) {
moveList.add(new PeriodChangeMove(exam, period));
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExamSwitchMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExamSwitchMove.java 2008-01-25 13:18:02 UTC (rev 18108)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExamSwitchMove.java 2008-01-25 13:59:44 UTC (rev 18109)
@@ -6,7 +6,6 @@
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
import org.drools.solver.core.move.Move;
@@ -37,17 +36,20 @@
}
public void doMove(WorkingMemory workingMemory) {
- // TODO also move coincidence
- FactHandle leftExamHandle = workingMemory.getFactHandle(leftExam);
- FactHandle rightExamHandle = workingMemory.getFactHandle(rightExam);
Period oldLeftPeriod = leftExam.getPeriod();
+ Period oldRightPeriod = rightExam.getPeriod();
Room oldLeftRoom = leftExam.getRoom();
- leftExam.setPeriod(rightExam.getPeriod());
- leftExam.setRoom(rightExam.getRoom());
- rightExam.setPeriod(oldLeftPeriod);
- rightExam.setRoom(oldLeftRoom);
- workingMemory.update(leftExamHandle, leftExam);
- workingMemory.update(rightExamHandle, rightExam);
+ Room oldRightRoom = rightExam.getRoom();
+ if (oldLeftPeriod.equals(oldRightPeriod)) {
+ ExaminationMoveHelper.moveRoom(workingMemory, leftExam, oldRightRoom);
+ ExaminationMoveHelper.moveRoom(workingMemory, rightExam, oldLeftRoom);
+ } else if (oldLeftRoom.equals(oldRightRoom)) {
+ ExaminationMoveHelper.movePeriod(workingMemory, leftExam, oldRightPeriod);
+ ExaminationMoveHelper.movePeriod(workingMemory, rightExam, oldLeftPeriod);
+ } else {
+ ExaminationMoveHelper.moveExam(workingMemory, leftExam, oldRightPeriod, oldRightRoom);
+ ExaminationMoveHelper.moveExam(workingMemory, rightExam, oldLeftPeriod, oldLeftRoom);
+ }
}
public Collection<? extends Object> getTabuProperties() {
Added: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExaminationMoveHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExaminationMoveHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExaminationMoveHelper.java 2008-01-25 13:59:44 UTC (rev 18109)
@@ -0,0 +1,45 @@
+package org.drools.solver.examples.itc2007.examination.solver.move;
+
+import org.drools.WorkingMemory;
+import org.drools.solver.examples.itc2007.examination.domain.Exam;
+import org.drools.solver.examples.itc2007.examination.domain.Period;
+import org.drools.solver.examples.itc2007.examination.domain.Room;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ExaminationMoveHelper {
+
+ public static void movePeriod(WorkingMemory workingMemory, Exam exam, Period period) {
+ exam.setPeriod(period);
+ workingMemory.update(workingMemory.getFactHandle(exam), exam);
+ movePeriodCoincidene(workingMemory, exam, period);
+ }
+
+ public static void moveRoom(WorkingMemory workingMemory, Exam exam, Room room) {
+ exam.setRoom(room);
+ workingMemory.update(workingMemory.getFactHandle(exam), exam);
+ }
+
+ public static void moveExam(WorkingMemory workingMemory, Exam exam, Period period, Room room) {
+ exam.setPeriod(period);
+ exam.setRoom(room);
+ workingMemory.update(workingMemory.getFactHandle(exam), exam);
+ movePeriodCoincidene(workingMemory, exam, period);
+ }
+
+ public static void movePeriodCoincidene(WorkingMemory workingMemory, Exam exam, Period period) {
+ if (exam.getExamCoincidence() != null) {
+ for (Exam coincidenceExam : exam.getExamCoincidence().getCoincidenceExamSet()) {
+ if (!exam.equals(coincidenceExam)) {
+ coincidenceExam.setPeriod(period);
+ workingMemory.update(workingMemory.getFactHandle(coincidenceExam), coincidenceExam);
+ }
+ }
+ }
+ }
+
+ private ExaminationMoveHelper() {
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeBulkMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeBulkMove.java 2008-01-25 13:18:02 UTC (rev 18108)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeBulkMove.java 2008-01-25 13:59:44 UTC (rev 18109)
@@ -1,80 +0,0 @@
-package org.drools.solver.examples.itc2007.examination.solver.move;
-
-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.FactHandle;
-import org.drools.WorkingMemory;
-import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.examples.itc2007.examination.domain.Exam;
-import org.drools.solver.examples.itc2007.examination.domain.Period;
-
-/**
- * @author Geoffrey De Smet
- */
-public class PeriodChangeBulkMove implements Move, TabuPropertyEnabled {
-
- private Collection<Exam> exams;
- private Period toPeriod;
-
- public PeriodChangeBulkMove(Collection<Exam> exams, Period toPeriod) {
- this.exams = exams;
- if (exams.isEmpty()) {
- throw new IllegalArgumentException("The exams is empty.");
- }
- this.toPeriod = toPeriod;
- }
-
- public boolean isMoveDoable(WorkingMemory workingMemory) {
- return !ObjectUtils.equals(extractFromPeriod(), toPeriod);
- }
-
- private Period extractFromPeriod() {
- return exams.iterator().next().getPeriod();
- }
-
- public Move createUndoMove(WorkingMemory workingMemory) {
- return new PeriodChangeBulkMove(exams, extractFromPeriod());
- }
-
- public void doMove(WorkingMemory workingMemory) {
- for (Exam exam : exams) {
- FactHandle examHandle = workingMemory.getFactHandle(exam);
- exam.setPeriod(toPeriod);
- workingMemory.update(examHandle, exam);
- }
- }
-
- public Collection<? extends Object> getTabuProperties() {
- return exams;
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof PeriodChangeBulkMove) {
- PeriodChangeBulkMove other = (PeriodChangeBulkMove) o;
- return new EqualsBuilder()
- .append(exams, other.exams)
- .append(toPeriod, other.toPeriod)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(exams)
- .append(toPeriod)
- .toHashCode();
- }
-
- public String toString() {
- return exams + " => " + toPeriod;
- }
-
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java 2008-01-25 13:18:02 UTC (rev 18108)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java 2008-01-25 13:59:44 UTC (rev 18109)
@@ -6,7 +6,6 @@
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
import org.drools.solver.core.move.Move;
@@ -35,9 +34,7 @@
}
public void doMove(WorkingMemory workingMemory) {
- FactHandle examHandle = workingMemory.getFactHandle(exam);
- exam.setPeriod(toPeriod);
- workingMemory.update(examHandle, exam);
+ ExaminationMoveHelper.movePeriod(workingMemory, exam, toPeriod);
}
public Collection<? extends Object> getTabuProperties() {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java 2008-01-25 13:18:02 UTC (rev 18108)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java 2008-01-25 13:59:44 UTC (rev 18109)
@@ -6,7 +6,6 @@
import org.apache.commons.lang.ObjectUtils;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
import org.drools.solver.core.move.Move;
@@ -35,9 +34,7 @@
}
public void doMove(WorkingMemory workingMemory) {
- FactHandle examHandle = workingMemory.getFactHandle(exam);
- exam.setRoom(toRoom);
- workingMemory.update(examHandle, exam);
+ ExaminationMoveHelper.moveRoom(workingMemory, exam, toRoom);
}
public Collection<? extends Object> getTabuProperties() {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml 2008-01-25 13:18:02 UTC (rev 18108)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml 2008-01-25 13:59:44 UTC (rev 18109)
@@ -18,15 +18,15 @@
<selector>
<selector>
<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.PeriodChangeExaminationMoveFactory</moveFactoryClass>
- <relativeSelection>0.1</relativeSelection>
+ <relativeSelection>0.01</relativeSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.RoomChangeExaminationMoveFactory</moveFactoryClass>
- <relativeSelection>0.1</relativeSelection>
+ <relativeSelection>0.01</relativeSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.ExamSwitchExaminationMoveFactory</moveFactoryClass>
- <relativeSelection>0.1</relativeSelection>
+ <relativeSelection>0.01</relativeSelection>
</selector>
</selector>
<accepter>
More information about the jboss-svn-commits
mailing list