[jboss-svn-commits] JBL Code SVN: r17982 - in labs/jbossrules/trunk/drools-solver: drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jan 20 06:11:35 EST 2008


Author: ge0ffrey
Date: 2008-01-20 06:11:34 -0500 (Sun, 20 Jan 2008)
New Revision: 17982

Added:
   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-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/AbstractTabuAccepter.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/MoveTabuAccepter.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/PropertyTabuAccepter.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/SolutionTabuAccepter.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/TabuPropertyEnabled.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/java/org/drools/solver/examples/lessonschedule/solver/move/TimeslotChangeMove.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/YChangeMove.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/DayChangeMove.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MatchSwapMove.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MultipleMatchListRotateMove.java
Log:
tabuProperties can also be a Set, not just a List

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/AbstractTabuAccepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/AbstractTabuAccepter.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/AbstractTabuAccepter.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,5 +1,6 @@
 package org.drools.solver.core.localsearch.decider.accepter.tabu;
 
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -54,9 +55,9 @@
     }
 
     public double calculateAcceptChance(Move move, double score) {
-        List<? extends Object> tabuList = findTabu(move);
+        Collection<? extends Object> tabus = findTabu(move);
         int maximumTabuStepIndex = -1;
-        for (Object tabu : tabuList) {
+        for (Object tabu : tabus) {
             Integer tabuStepIndexInteger = tabuToStepIndexMap.get(tabu);
             if (tabuStepIndexInteger != null) {
                 maximumTabuStepIndex = Math.max(tabuStepIndexInteger, maximumTabuStepIndex);
@@ -84,8 +85,8 @@
     @Override
     public void stepDecided(Move step) {
         if (step != null) { // TODO fixme by better use of lifecycle method
-            List<? extends Object> tabuList = findNewTabu(step);
-            for (Object tabu : tabuList) {
+            Collection<? extends Object> tabus = findNewTabu(step);
+            for (Object tabu : tabus) {
                 // required to push tabu to the end of the line
                 if (tabuToStepIndexMap.containsKey(tabu)) {
                     tabuToStepIndexMap.remove(tabu);
@@ -104,9 +105,9 @@
         }
     }
 
-    protected abstract List<? extends Object> findTabu(Move move);
+    protected abstract Collection<? extends Object> findTabu(Move move);
 
-    protected List<? extends Object> findNewTabu(Move step) {
+    protected Collection<? extends Object> findNewTabu(Move step) {
         return findTabu(step);
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/MoveTabuAccepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/MoveTabuAccepter.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/MoveTabuAccepter.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,7 +1,7 @@
 package org.drools.solver.core.localsearch.decider.accepter.tabu;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 import org.drools.solver.core.move.Move;
 
@@ -21,14 +21,15 @@
     // ************************************************************************
 
     @Override
-    protected List<? extends Object> findTabu(Move move) {
+    protected Collection<? extends Object> findTabu(Move move) {
         return Collections.singletonList(move);
     }
 
     @Override
-    protected List<? extends Object> findNewTabu(Move step) {
+    protected Collection<? extends Object> findNewTabu(Move step) {
         if (useUndoMoveAsTabuMove) {
-            return Collections.singletonList(step.createUndoMove(localSearchSolver.getEvaluationHandler().getStatefulSession()));
+            return Collections.singletonList(step.createUndoMove(
+                    localSearchSolver.getEvaluationHandler().getStatefulSession()));
         } else {
             return Collections.singletonList(step);
         }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/PropertyTabuAccepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/PropertyTabuAccepter.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/PropertyTabuAccepter.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,6 +1,6 @@
 package org.drools.solver.core.localsearch.decider.accepter.tabu;
 
-import java.util.List;
+import java.util.Collection;
 
 import org.drools.solver.core.move.Move;
 
@@ -14,9 +14,9 @@
     // ************************************************************************
 
     @Override
-    protected List<? extends Object> findTabu(Move move) {
+    protected Collection<? extends Object> findTabu(Move move) {
         TabuPropertyEnabled tabuPropertyEnabled = (TabuPropertyEnabled) move;
-        return tabuPropertyEnabled.getTabuPropertyList();
+        return tabuPropertyEnabled.getTabuProperties();
     }
 
 }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/SolutionTabuAccepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/SolutionTabuAccepter.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/SolutionTabuAccepter.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,7 +1,7 @@
 package org.drools.solver.core.localsearch.decider.accepter.tabu;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 import org.drools.solver.core.move.Move;
 
@@ -15,12 +15,12 @@
     // ************************************************************************
 
     @Override
-    protected List<? extends Object> findTabu(Move move) {
+    protected Collection<? extends Object> findTabu(Move move) {
         return Collections.singletonList(localSearchSolver.getCurrentSolution());
     }
 
     @Override
-    protected List<? extends Object> findNewTabu(Move step) {
+    protected Collection<? extends Object> findNewTabu(Move step) {
         return Collections.singletonList(localSearchSolver.getCurrentSolution().cloneSolution());
     }
     

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/TabuPropertyEnabled.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/TabuPropertyEnabled.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/TabuPropertyEnabled.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,12 +1,12 @@
 package org.drools.solver.core.localsearch.decider.accepter.tabu;
 
-import java.util.List;
+import java.util.Collection;
 
 /**
  * @author Geoffrey De Smet
  */
 public interface TabuPropertyEnabled {
 
-    List<? extends Object> getTabuPropertyList();
+    Collection<? extends Object> getTabuProperties();
 
 }

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeBulkMove.java (from rev 17981, 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/PeriodChangeBulkMove.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeBulkMove.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -0,0 +1,83 @@
+package org.drools.solver.examples.itc2007.examination.solver.move;
+
+import java.util.Collection;
+
+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) {
+        Period fromPeriod = extractFromPeriod();
+        if (fromPeriod == null) {
+            return (toPeriod != null);
+        }
+        return !fromPeriod.equals(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 lessonHandle = workingMemory.getFactHandle(exam);
+            exam.setPeriod(toPeriod);
+            workingMemory.update(lessonHandle, 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-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,7 +1,7 @@
 package org.drools.solver.examples.itc2007.examination.solver.move;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
@@ -43,7 +43,7 @@
         workingMemory.update(lessonHandle, exam);
     }
 
-    public List<? extends Object> getTabuPropertyList() {
+    public Collection<? extends Object> getTabuProperties() {
         return Collections.singletonList(exam);
     }
 

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-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,7 +1,7 @@
 package org.drools.solver.examples.itc2007.examination.solver.move;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
@@ -43,7 +43,7 @@
         workingMemory.update(lessonHandle, exam);
     }
 
-    public List<? extends Object> getTabuPropertyList() {
+    public Collection<? extends Object> getTabuProperties() {
         return Collections.singletonList(exam);
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/move/TimeslotChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/move/TimeslotChangeMove.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/move/TimeslotChangeMove.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,7 +1,7 @@
 package org.drools.solver.examples.lessonschedule.solver.move;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
@@ -43,7 +43,7 @@
         workingMemory.update(lessonHandle, lesson);
     }
 
-    public List<? extends Object> getTabuPropertyList() {
+    public Collection<? extends Object> getTabuProperties() {
         return Collections.singletonList(lesson);
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/YChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/YChangeMove.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/YChangeMove.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,7 +1,7 @@
 package org.drools.solver.examples.nqueens.solver.move;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
@@ -39,7 +39,7 @@
         workingMemory.update(queenHandle, queen);
     }
 
-    public List<? extends Object> getTabuPropertyList() {
+    public Collection<? extends Object> getTabuProperties() {
         return Collections.singletonList(queen);
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/DayChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/DayChangeMove.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/DayChangeMove.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,7 +1,7 @@
 package org.drools.solver.examples.travelingtournament.solver.simple.move;
 
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
@@ -43,7 +43,7 @@
         workingMemory.update(matchHandle, match);
     }
 
-    public List<? extends Object> getTabuPropertyList() {
+    public Collection<? extends Object> getTabuProperties() {
         return Collections.singletonList(match);
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MatchSwapMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MatchSwapMove.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MatchSwapMove.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,7 +1,7 @@
 package org.drools.solver.examples.travelingtournament.solver.smart.move;
 
 import java.util.Arrays;
-import java.util.List;
+import java.util.Collection;
 
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
@@ -43,7 +43,7 @@
         workingMemory.update(secondMatchHandle, secondMatch);
     }
 
-    public List<? extends Object> getTabuPropertyList() {
+    public Collection<? extends Object> getTabuProperties() {
         return Arrays.asList(firstMatch, secondMatch);
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MultipleMatchListRotateMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MultipleMatchListRotateMove.java	2008-01-20 10:48:36 UTC (rev 17981)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MultipleMatchListRotateMove.java	2008-01-20 11:11:34 UTC (rev 17982)
@@ -1,6 +1,7 @@
 package org.drools.solver.examples.travelingtournament.solver.smart.move;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -63,7 +64,7 @@
         workingMemory.update(secondMatchHandle, secondMatch);
     }
 
-    public List<? extends Object> getTabuPropertyList() {
+    public Collection<? extends Object> getTabuProperties() {
         List<Match> tabuPropertyList = new ArrayList<Match>(firstMatchList.size() + secondMatchList.size());
         tabuPropertyList.addAll(firstMatchList);
         tabuPropertyList.addAll(secondMatchList);




More information about the jboss-svn-commits mailing list