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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue May 18 15:17:43 EDT 2010


Author: ge0ffrey
Date: 2010-05-18 15:17:43 -0400 (Tue, 18 May 2010)
New Revision: 32941

Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/LocalSearchSolverConfig.java
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/DefaultLocalSearchSolver.java
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/LocalSearchSolverScope.java
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/calculator/AbstractScoreCalculator.java
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/calculator/ScoreCalculator.java
Log:
debug environmentMode should also do assertStepScoreIsUncorrupted

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/LocalSearchSolverConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/LocalSearchSolverConfig.java	2010-05-18 17:59:40 UTC (rev 32940)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/LocalSearchSolverConfig.java	2010-05-18 19:17:43 UTC (rev 32941)
@@ -176,6 +176,9 @@
         localSearchSolver.setBestSolutionRecaller(new BestSolutionRecaller());
         localSearchSolver.setTermination(terminationConfig.buildTermination(scoreDefinition));
         localSearchSolver.setDecider(buildDecider());
+        if (environmentMode == EnvironmentMode.DEBUG) {
+            localSearchSolver.setAssertStepScoreIsUncorrupted(true);
+        }
         return localSearchSolver;
     }
 
@@ -228,13 +231,13 @@
 
     private Decider buildDecider() {
         DefaultDecider decider = new DefaultDecider();
-        if (environmentMode == EnvironmentMode.DEBUG) {
-            decider.setAssertUndoMoveIsUncorrupted(true);
-        }
         decider.setDeciderScoreComparator(deciderScoreComparatorFactoryConfig.buildDeciderScoreComparatorFactory());
         decider.setSelector(selectorConfig.buildSelector());
         decider.setAcceptor(acceptorConfig.buildAcceptor());
         decider.setForager(foragerConfig.buildForager());
+        if (environmentMode == EnvironmentMode.DEBUG) {
+            decider.setAssertUndoMoveIsUncorrupted(true);
+        }
         return decider;
     }
 

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/DefaultLocalSearchSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/DefaultLocalSearchSolver.java	2010-05-18 17:59:40 UTC (rev 32940)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/DefaultLocalSearchSolver.java	2010-05-18 19:17:43 UTC (rev 32941)
@@ -27,6 +27,8 @@
     protected Termination termination;
     protected Decider decider;
 
+    protected boolean assertStepScoreIsUncorrupted = false;
+
     protected LocalSearchSolverScope localSearchSolverScope = new LocalSearchSolverScope(); // TODO remove me
 
     public void setRandomSeed(long randomSeed) {
@@ -59,6 +61,11 @@
         this.bestSolutionRecaller.setSolverEventSupport(solverEventSupport);
     }
 
+    public void setTermination(Termination termination) {
+        this.termination = termination;
+        this.termination.setLocalSearchSolver(this);
+    }
+
     public Decider getDecider() {
         return decider;
     }
@@ -68,9 +75,8 @@
         this.decider.setLocalSearchSolver(this);
     }
 
-    public void setTermination(Termination termination) {
-        this.termination = termination;
-        this.termination.setLocalSearchSolver(this);
+    public void setAssertStepScoreIsUncorrupted(boolean assertStepScoreIsUncorrupted) {
+        this.assertStepScoreIsUncorrupted = assertStepScoreIsUncorrupted;
     }
 
     public void setStartingSolution(Solution startingSolution) {
@@ -117,6 +123,9 @@
             nextStep.doMove(stepScope.getWorkingMemory());
             // there is no need to recalculate the score, but we still need to set it
             localSearchSolverScope.getWorkingSolution().setScore(stepScope.getScore());
+            if (assertStepScoreIsUncorrupted) {
+                localSearchSolverScope.assertWorkingScore(stepScope.getScore());
+            }
             stepTaken(stepScope);
             stepScope = createNextStepScope(localSearchSolverScope, stepScope);
         }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/LocalSearchSolverScope.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/LocalSearchSolverScope.java	2010-05-18 17:59:40 UTC (rev 32940)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/LocalSearchSolverScope.java	2010-05-18 19:17:43 UTC (rev 32941)
@@ -9,6 +9,7 @@
 import org.drools.RuleBase;
 import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
+import org.drools.planner.core.move.Move;
 import org.drools.planner.core.score.calculator.ScoreCalculator;
 import org.drools.planner.core.score.Score;
 import org.drools.planner.core.score.constraint.ConstraintOccurrence;
@@ -170,6 +171,24 @@
         }
     }
 
+    public void assertWorkingScore(Score presumedScore) {
+        StatefulSession tmpWorkingMemory = ruleBase.newStatefulSession();
+        ScoreCalculator tmpScoreCalculator = workingScoreCalculator.clone();
+        tmpWorkingMemory.setGlobal(GLOBAL_SCORE_CALCULATOR_KEY, tmpScoreCalculator);
+        for (Object fact : workingSolution.getFacts()) {
+            tmpWorkingMemory.insert(fact);
+        }
+        tmpWorkingMemory.fireAllRules();
+        Score score = tmpScoreCalculator.calculateScore();
+        tmpWorkingMemory.dispose();
+        if (!presumedScore.equals(score)) {
+            throw new IllegalStateException(
+                    "The presumedScore (" + presumedScore + ") is corrupted because it is not the real score  ("
+                            + score + ").\n"
+                    + buildConstraintOccurrenceSummary());
+        }
+    }
+
     /**
      * TODO Refactor this with the ConstraintOccurrenceTotal class: https://jira.jboss.org/jira/browse/JBRULES-2510
      * @return never null

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/calculator/AbstractScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/calculator/AbstractScoreCalculator.java	2010-05-18 17:59:40 UTC (rev 32940)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/calculator/AbstractScoreCalculator.java	2010-05-18 19:17:43 UTC (rev 32941)
@@ -12,4 +12,12 @@
     // Worker methods
     // ************************************************************************
 
+    public ScoreCalculator clone() {
+        try {
+            return (ScoreCalculator) super.clone();
+        } catch (CloneNotSupportedException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/calculator/ScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/calculator/ScoreCalculator.java	2010-05-18 17:59:40 UTC (rev 32940)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/score/calculator/ScoreCalculator.java	2010-05-18 19:17:43 UTC (rev 32941)
@@ -7,7 +7,7 @@
  * @TODO score-in-solution refactor
  * @author Geoffrey De Smet
  */
-public interface ScoreCalculator {
+public interface ScoreCalculator extends Cloneable {
 
     /**
      * Calculates the score: the solution (encountered at a step)
@@ -23,4 +23,6 @@
      */
     Score calculateScore();
 
+    ScoreCalculator clone();
+
 }



More information about the jboss-svn-commits mailing list