[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