[jboss-svn-commits] JBL Code SVN: r23271 - in labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch: decider and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Oct 2 14:16:44 EDT 2008


Author: ge0ffrey
Date: 2008-10-02 14:16:43 -0400 (Thu, 02 Oct 2008)
New Revision: 23271

Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/StepScope.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java
   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
Log:
fix bug that caused last improving step to be not done for best solution

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/StepScope.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/StepScope.java	2008-10-02 17:18:29 UTC (rev 23270)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/StepScope.java	2008-10-02 18:16:43 UTC (rev 23271)
@@ -16,6 +16,7 @@
     private int stepIndex = -1;
     private double timeGradient = Double.NaN;
     private Move step = null;
+    private Move undoStep = null;
     private double score = Double.NaN;
     private Solution clonedSolution = null;
 
@@ -51,6 +52,14 @@
         this.step = step;
     }
 
+    public Move getUndoStep() {
+        return undoStep;
+    }
+
+    public void setUndoStep(Move undoStep) {
+        this.undoStep = undoStep;
+    }
+
     public double getScore() {
         return score;
     }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java	2008-10-02 17:18:29 UTC (rev 23270)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java	2008-10-02 18:16:43 UTC (rev 23271)
@@ -87,7 +87,9 @@
         }
         MoveScope pickedMoveScope = forager.pickMove(stepScope);
         if (pickedMoveScope != null) {
-            stepScope.setStep(pickedMoveScope.getMove());
+            Move step = pickedMoveScope.getMove();
+            stepScope.setStep(step);
+            stepScope.setUndoStep(step.createUndoMove(workingMemory));
             stepScope.setScore(pickedMoveScope.getScore());
         }
     }

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-10-02 17:18:29 UTC (rev 23270)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/AbstractTabuAccepter.java	2008-10-02 18:16:43 UTC (rev 23271)
@@ -97,25 +97,23 @@
     }
 
     @Override
-    public void stepDecided(StepScope stepScope) {
-        if (stepScope.getStep() != null) { // TODO fixme by better use of lifecycle method
-            Collection<? extends Object> tabus = findNewTabu(stepScope);
-            for (Object tabu : tabus) {
-                // required to push tabu to the end of the line
-                if (tabuToStepIndexMap.containsKey(tabu)) {
-                    tabuToStepIndexMap.remove(tabu);
-                    tabuSequenceList.remove(tabu);
-                }
-                int maximumTabuListSize = completeTabuSize + partialTabuSize; // is at least 1
-                while (tabuSequenceList.size() >= maximumTabuListSize) {
-                    Iterator<Object> it = tabuSequenceList.iterator();
-                    Object removeTabu = it.next();
-                    it.remove();
-                    tabuToStepIndexMap.remove(removeTabu);
-                }
-                tabuToStepIndexMap.put(tabu, stepScope.getStepIndex());
-                tabuSequenceList.add(tabu);
+    public void stepTaken(StepScope stepScope) {
+        Collection<? extends Object> tabus = findNewTabu(stepScope);
+        for (Object tabu : tabus) {
+            // required to push tabu to the end of the line
+            if (tabuToStepIndexMap.containsKey(tabu)) {
+                tabuToStepIndexMap.remove(tabu);
+                tabuSequenceList.remove(tabu);
             }
+            int maximumTabuListSize = completeTabuSize + partialTabuSize; // is at least 1
+            while (tabuSequenceList.size() >= maximumTabuListSize) {
+                Iterator<Object> it = tabuSequenceList.iterator();
+                Object removeTabu = it.next();
+                it.remove();
+                tabuToStepIndexMap.remove(removeTabu);
+            }
+            tabuToStepIndexMap.put(tabu, stepScope.getStepIndex());
+            tabuSequenceList.add(tabu);
         }
     }
 

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-10-02 17:18:29 UTC (rev 23270)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/MoveTabuAccepter.java	2008-10-02 18:16:43 UTC (rev 23271)
@@ -30,12 +30,10 @@
     @Override
     protected Collection<? extends Object> findNewTabu(StepScope stepScope) {
         Move tabuMove;
-        Move step = stepScope.getStep();
         if (useUndoMoveAsTabuMove) {
-            // In stepTaken this the undoMove would be corrupted
-            tabuMove = step.createUndoMove(stepScope.getWorkingMemory());
+            tabuMove = stepScope.getUndoStep();
         } else {
-            tabuMove = step;
+            tabuMove = stepScope.getStep();
         }
         return Collections.singletonList(tabuMove);
     }




More information about the jboss-svn-commits mailing list