[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