[jboss-svn-commits] JBL Code SVN: r26240 - in labs/jbossrules/trunk/drools-solver: drools-solver-core/src/main/java/org/drools/solver/config/localsearch and 38 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Apr 24 09:16:20 EDT 2009
Author: ge0ffrey
Date: 2009-04-24 09:16:20 -0400 (Fri, 24 Apr 2009)
New Revision: 26240
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/ScoreDefinitionConfig.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/DefaultHardAndSoftConstraintScoreCalculator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/AbstractScoreDefinition.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/HardAndSoftScoreDefinition.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/ScoreDefinition.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/SimpleScoreDefinition.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/score/definition/
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/score/definition/HardAndSoftScoreDefinitionTest.java
Removed:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/evaluation/
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractHardAndSoftConstraintScoreCalculator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/DynamicHardAndSoftConstraintScoreCalculator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/StaticHardAndSoftConstraintScoreCalculator.java
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmark.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkResult.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/finish/FinishConfig.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverScope.java
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/bestsolution/BestSolutionRecaller.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/MoveScope.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/greatdeluge/GreatDelugeAccepter.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/simulatedannealing/SimulatedAnnealingAccepter.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/forager/AcceptedForager.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/TopListSelector.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/FeasableScoreFinish.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/DefaultHardAndSoftScore.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/DefaultSimpleScore.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/Score.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractScoreCalculator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/HardAndSoftConstraintScoreCalculator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/ScoreCalculator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/SimpleScoreCalculator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/AbstractScoreComparator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/HardAndSoftScoreComparator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/ScoreComparator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/SimpleScoreComparator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/accepter/greatdeluge/GreatDelugeAccepterTest.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForagerTest.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseShortSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
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/lessonschedule/solver/lessonScheduleSolverConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/benchmark/nqueensSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/solver/nqueensSolverConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/breakNl14SolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/smartTravelingTournamentSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentSolverConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentSolverConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/java/org/drools/solver/examples/nqueens/NQueensSmokeTest.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/resources/org/drools/solver/examples/nqueens/solver/nqueensSmokeSolverConfig.xml
labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
Log:
The Big Score Refactor
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmark.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmark.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmark.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -92,8 +92,8 @@
public SolverBenchmarkResult getWorstResult() {
SolverBenchmarkResult worstResult = null;
for (SolverBenchmarkResult solverBenchmarkResult : solverBenchmarkResultList) {
- if (worstResult == null || solverBenchmarkResult.getScore() < worstResult.getScore()
- || (solverBenchmarkResult.getScore() == worstResult.getScore()
+ if (worstResult == null || solverBenchmarkResult.getScore().compareTo(worstResult.getScore()) < 0
+ || (solverBenchmarkResult.getScore().equals(worstResult.getScore())
&& solverBenchmarkResult.getTimeMillesSpend() > worstResult.getTimeMillesSpend())) {
worstResult = solverBenchmarkResult;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkResult.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkResult.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkResult.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -3,6 +3,7 @@
import java.io.File;
import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.drools.solver.core.score.Score;
/**
* @author Geoffrey De Smet
@@ -11,7 +12,7 @@
public class SolverBenchmarkResult {
private File unsolvedSolutionFile = null;
- private Double score = null;
+ private Score score = null;
private Long timeMillesSpend = null;
private File solvedSolutionFile = null;
@@ -23,11 +24,11 @@
this.unsolvedSolutionFile = unsolvedSolutionFile;
}
- public Double getScore() {
+ public Score getScore() {
return score;
}
- public void setScore(Double score) {
+ public void setScore(Score score) {
this.score = score;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -16,14 +16,15 @@
import org.drools.solver.config.localsearch.decider.accepter.AccepterConfig;
import org.drools.solver.config.localsearch.decider.forager.ForagerConfig;
import org.drools.solver.config.localsearch.decider.selector.SelectorConfig;
-import org.drools.solver.config.localsearch.evaluation.scorecalculator.ScoreCalculatorConfig;
import org.drools.solver.config.localsearch.finish.FinishConfig;
+import org.drools.solver.config.score.definition.ScoreDefinitionConfig;
import org.drools.solver.core.localsearch.DefaultLocalSearchSolver;
import org.drools.solver.core.localsearch.LocalSearchSolver;
import org.drools.solver.core.localsearch.bestsolution.BestSolutionRecaller;
import org.drools.solver.core.localsearch.decider.Decider;
import org.drools.solver.core.localsearch.decider.DefaultDecider;
import org.drools.solver.core.solution.initializer.StartingSolutionInitializer;
+import org.drools.solver.core.score.definition.ScoreDefinition;
/**
* @author Geoffrey De Smet
@@ -35,8 +36,8 @@
@XStreamImplicit(itemFieldName = "scoreDrl")
private List<String> scoreDrlList = null;
- @XStreamAlias("scoreCalculator")
- private ScoreCalculatorConfig scoreCalculatorConfig = new ScoreCalculatorConfig();
+ @XStreamAlias("scoreDefinition")
+ private ScoreDefinitionConfig scoreDefinitionConfig = new ScoreDefinitionConfig();
private StartingSolutionInitializer startingSolutionInitializer = null;
private Class<StartingSolutionInitializer> startingSolutionInitializerClass = null;
@@ -67,12 +68,12 @@
this.scoreDrlList = scoreDrlList;
}
- public ScoreCalculatorConfig getScoreCalculatorConfig() {
- return scoreCalculatorConfig;
+ public ScoreDefinitionConfig getScoreDefinitionConfig() {
+ return scoreDefinitionConfig;
}
- public void setScoreCalculatorConfig(ScoreCalculatorConfig scoreCalculatorConfig) {
- this.scoreCalculatorConfig = scoreCalculatorConfig;
+ public void setScoreDefinitionConfig(ScoreDefinitionConfig scoreDefinitionConfig) {
+ this.scoreDefinitionConfig = scoreDefinitionConfig;
}
public StartingSolutionInitializer getStartingSolutionInitializer() {
@@ -135,10 +136,13 @@
localSearchSolver.setRandomSeed(0L);
}
localSearchSolver.setRuleBase(buildRuleBase());
- localSearchSolver.setScoreCalculator(scoreCalculatorConfig.buildScoreCalculator());
+ ScoreDefinition scoreDefinition = scoreDefinitionConfig.buildScoreDefinition();
+ localSearchSolver.setScoreDefinition(scoreDefinition);
+ // remove when score-in-solution refactor
+ localSearchSolver.setScoreCalculator(scoreDefinitionConfig.buildScoreCalculator());
localSearchSolver.setStartingSolutionInitializer(buildStartingSolutionInitializer());
localSearchSolver.setBestSolutionRecaller(new BestSolutionRecaller());
- localSearchSolver.setFinish(finishConfig.buildFinish());
+ localSearchSolver.setFinish(finishConfig.buildFinish(scoreDefinition));
localSearchSolver.setDecider(buildDecider());
return localSearchSolver;
}
@@ -214,10 +218,10 @@
}
}
}
- if (scoreCalculatorConfig == null) {
- scoreCalculatorConfig = inheritedConfig.getScoreCalculatorConfig();
- } else if (inheritedConfig.getScoreCalculatorConfig() != null) {
- scoreCalculatorConfig.inherit(inheritedConfig.getScoreCalculatorConfig());
+ if (scoreDefinitionConfig == null) {
+ scoreDefinitionConfig = inheritedConfig.getScoreDefinitionConfig();
+ } else if (inheritedConfig.getScoreDefinitionConfig() != null) {
+ scoreDefinitionConfig.inherit(inheritedConfig.getScoreDefinitionConfig());
}
if (startingSolutionInitializer == null && startingSolutionInitializerClass == null) {
startingSolutionInitializer = inheritedConfig.getStartingSolutionInitializer();
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/finish/FinishConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/finish/FinishConfig.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/finish/FinishConfig.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -12,6 +12,7 @@
import org.drools.solver.core.localsearch.finish.StepCountFinish;
import org.drools.solver.core.localsearch.finish.TimeMillisSpendFinish;
import org.drools.solver.core.localsearch.finish.UnimprovedStepCountFinish;
+import org.drools.solver.core.score.definition.ScoreDefinition;
/**
* @author Geoffrey De Smet
@@ -29,7 +30,7 @@
private Long maximumSecondsSpend = null;
private Long maximumMinutesSpend = null;
private Long maximumHouresSpend = null;
- private Double feasableScore = null;
+ private String feasableScore = null;
private Integer maximumUnimprovedStepCount = null;
public Finish getFinish() {
@@ -96,11 +97,11 @@
this.maximumHouresSpend = maximumHouresSpend;
}
- public Double getFeasableScore() {
+ public String getFeasableScore() {
return feasableScore;
}
- public void setFeasableScore(Double feasableScore) {
+ public void setFeasableScore(String feasableScore) {
this.feasableScore = feasableScore;
}
@@ -116,7 +117,7 @@
// Builder methods
// ************************************************************************
- public Finish buildFinish() {
+ public Finish buildFinish(ScoreDefinition scoreDefinition) {
List<Finish> finishList = new ArrayList<Finish>();
if (finish != null) {
finishList.add(finish);
@@ -159,7 +160,7 @@
}
if (feasableScore != null) {
FeasableScoreFinish finish = new FeasableScoreFinish();
- finish.setFeasableScore(feasableScore);
+ finish.setFeasableScore(scoreDefinition.parseScore(feasableScore));
finishList.add(finish);
}
if (maximumUnimprovedStepCount != null) {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,7 +1,6 @@
package org.drools.solver.config.score;
import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.drools.solver.core.score.Score;
import org.drools.solver.core.score.DefaultSimpleScore;
import org.drools.solver.core.score.DefaultHardAndSoftScore;
@@ -49,9 +48,9 @@
} else if (scoreType != null) {
switch (scoreType) {
case SIMPLE:
- return DefaultSimpleScore.valueOf(scoreString);
+ return DefaultSimpleScore.parseScore(scoreString);
case HARD_AND_SOFT:
- return DefaultHardAndSoftScore.valueOf(scoreString);
+ return DefaultHardAndSoftScore.parseScore(scoreString);
default:
throw new IllegalStateException("scoreType (" + scoreType + ") not implemented");
}
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/ScoreDefinitionConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/ScoreDefinitionConfig.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/ScoreDefinitionConfig.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -0,0 +1,107 @@
+package org.drools.solver.config.score.definition;
+
+import org.drools.solver.core.score.definition.ScoreDefinition;
+import org.drools.solver.core.score.definition.SimpleScoreDefinition;
+import org.drools.solver.core.score.definition.HardAndSoftScoreDefinition;
+import org.drools.solver.core.score.calculator.ScoreCalculator;
+import org.drools.solver.core.score.calculator.SimpleScoreCalculator;
+import org.drools.solver.core.score.calculator.DefaultHardAndSoftConstraintScoreCalculator;
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("scoreDefinition")
+public class ScoreDefinitionConfig {
+
+ private ScoreDefinition scoreDefinition = null;
+ private Class<ScoreDefinition> scoreDefinitionClass = null;
+ private ScoreDefinitionType scoreDefinitionType = null;
+
+ public ScoreDefinition getScoreDefinition() {
+ return scoreDefinition;
+ }
+
+ public void setScoreDefinition(ScoreDefinition scoreDefinition) {
+ this.scoreDefinition = scoreDefinition;
+ }
+
+ public Class<ScoreDefinition> getScoreDefinitionClass() {
+ return scoreDefinitionClass;
+ }
+
+ public void setScoreDefinitionClass(Class<ScoreDefinition> scoreDefinitionClass) {
+ this.scoreDefinitionClass = scoreDefinitionClass;
+ }
+
+ public ScoreDefinitionType getScoreDefinitionType() {
+ return scoreDefinitionType;
+ }
+
+ public void setScoreDefinitionType(ScoreDefinitionType scoreDefinitionType) {
+ this.scoreDefinitionType = scoreDefinitionType;
+ }
+
+ // ************************************************************************
+ // Builder methods
+ // ************************************************************************
+
+ public ScoreDefinition buildScoreDefinition() {
+ if (scoreDefinition != null) {
+ return scoreDefinition;
+ } else if (scoreDefinitionClass != null) {
+ try {
+ return scoreDefinitionClass.newInstance();
+ } catch (InstantiationException e) {
+ throw new IllegalArgumentException("scoreDefinitionClass (" + scoreDefinitionClass.getName()
+ + ") does not have a public no-arg constructor", e);
+ } catch (IllegalAccessException e) {
+ throw new IllegalArgumentException("scoreDefinitionClass (" + scoreDefinitionClass.getName()
+ + ") does not have a public no-arg constructor", e);
+ }
+ } else if (scoreDefinitionType != null) {
+ switch (scoreDefinitionType) {
+ case SIMPLE:
+ return new SimpleScoreDefinition();
+ case HARD_AND_SOFT:
+ return new HardAndSoftScoreDefinition();
+ default:
+ throw new IllegalStateException("scoreDefinitionType (" + scoreDefinitionType + ") not implemented");
+ }
+ } else {
+ return new SimpleScoreDefinition();
+ }
+ }
+
+ /**
+ * @TODO score-in-solution refactor
+ */
+ public ScoreCalculator buildScoreCalculator() {
+ if (scoreDefinitionType != null) {
+ switch (scoreDefinitionType) {
+ case SIMPLE:
+ return new SimpleScoreCalculator();
+ case HARD_AND_SOFT:
+ return new DefaultHardAndSoftConstraintScoreCalculator();
+ default:
+ throw new IllegalStateException("scoreDefinitionType (" + scoreDefinitionType + ") not implemented");
+ }
+ } else {
+ return new SimpleScoreCalculator();
+ }
+ }
+
+ public void inherit(ScoreDefinitionConfig inheritedConfig) {
+ if (scoreDefinition == null && scoreDefinitionClass == null && scoreDefinitionType == null) {
+ scoreDefinition = inheritedConfig.getScoreDefinition();
+ scoreDefinitionClass = inheritedConfig.getScoreDefinitionClass();
+ scoreDefinitionType = inheritedConfig.getScoreDefinitionType();
+ }
+ }
+
+ public static enum ScoreDefinitionType {
+ SIMPLE,
+ HARD_AND_SOFT,
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,6 +1,7 @@
package org.drools.solver.core;
import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
/**
* A Solver solves planning problems.
@@ -10,7 +11,7 @@
void setStartingSolution(Solution startingSolution);
- double getBestScore();
+ Score getBestScore();
Solution getBestSolution();
/**
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -8,12 +8,16 @@
import org.drools.solver.core.localsearch.finish.Finish;
import org.drools.solver.core.move.Move;
import org.drools.solver.core.score.calculator.ScoreCalculator;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.HardAndSoftScore;
+import org.drools.solver.core.score.definition.ScoreDefinition;
import org.drools.solver.core.solution.Solution;
import org.drools.solver.core.solution.initializer.StartingSolutionInitializer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
+ * Default implementation of {@link LocalSearchSolver}.
* @author Geoffrey De Smet
*/
public class DefaultLocalSearchSolver implements LocalSearchSolver, LocalSearchSolverLifecycleListener {
@@ -37,6 +41,10 @@
localSearchSolverScope.setRuleBase(ruleBase);
}
+ public void setScoreDefinition(ScoreDefinition scoreDefinition) {
+ localSearchSolverScope.setScoreDefinition(scoreDefinition);
+ }
+
public void setScoreCalculator(ScoreCalculator scoreCalculator) {
localSearchSolverScope.setWorkingScoreCalculator(scoreCalculator);
}
@@ -72,7 +80,7 @@
localSearchSolverScope.setWorkingSolution(startingSolution);
}
- public double getBestScore() {
+ public Score getBestScore() {
return this.localSearchSolverScope.getBestScore();
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverScope.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverScope.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverScope.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -6,6 +6,8 @@
import org.drools.StatefulSession;
import org.drools.WorkingMemory;
import org.drools.solver.core.score.calculator.ScoreCalculator;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.definition.ScoreDefinition;
import org.drools.solver.core.solution.Solution;
/**
@@ -16,6 +18,7 @@
public static final String GLOBAL_SCORE_CALCULATOR_KEY = "scoreCalculator";
protected RuleBase ruleBase;
+ private ScoreDefinition scoreDefinition;
private long startingSystemTimeMillis;
@@ -24,18 +27,30 @@
private ScoreCalculator workingScoreCalculator;
private Random workingRandom;
- private double startingScore;
+ private Score startingScore;
private int bestSolutionStepIndex;
private Solution bestSolution;
- private double bestScore;
+ private Score bestScore;
private StepScope lastCompletedStepScope;
+ public RuleBase getRuleBase() {
+ return ruleBase;
+ }
+
public void setRuleBase(RuleBase ruleBase) {
this.ruleBase = ruleBase;
}
+ public ScoreDefinition getScoreDefinition() {
+ return scoreDefinition;
+ }
+
+ public void setScoreDefinition(ScoreDefinition scoreDefinition) {
+ this.scoreDefinition = scoreDefinition;
+ }
+
public long getStartingSystemTimeMillis() {
return startingSystemTimeMillis;
}
@@ -73,11 +88,11 @@
this.workingRandom = workingRandom;
}
- public double getStartingScore() {
+ public Score getStartingScore() {
return startingScore;
}
- public void setStartingScore(double startingScore) {
+ public void setStartingScore(Score startingScore) {
this.startingScore = startingScore;
}
@@ -97,11 +112,11 @@
this.bestSolution = bestSolution;
}
- public double getBestScore() {
+ public Score getBestScore() {
return bestScore;
}
- public void setBestScore(double bestScore) {
+ public void setBestScore(Score bestScore) {
this.bestScore = bestScore;
}
@@ -117,9 +132,9 @@
// Calculated methods
// ************************************************************************
- public double calculateScoreFromWorkingMemory() {
+ public Score calculateScoreFromWorkingMemory() {
workingMemory.fireAllRules();
- return workingScoreCalculator.calculateStepScore();
+ return workingScoreCalculator.calculateScore();
}
public void resetTimeMillisSpend() {
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 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/StepScope.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -5,6 +5,7 @@
import org.drools.WorkingMemory;
import org.drools.solver.core.move.Move;
import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
/**
* @author Geoffrey De Smet
@@ -17,7 +18,7 @@
private double timeGradient = Double.NaN;
private Move step = null;
private Move undoStep = null;
- private double score = Double.NaN;
+ private Score score = null;
private Solution clonedSolution = null;
public StepScope(LocalSearchSolverScope localSearchSolverScope) {
@@ -60,11 +61,11 @@
this.undoStep = undoStep;
}
- public double getScore() {
+ public Score getScore() {
return score;
}
- public void setScore(double score) {
+ public void setScore(Score score) {
this.score = score;
}
@@ -75,6 +76,7 @@
public void setClonedSolution(Solution clonedSolution) {
this.clonedSolution = clonedSolution;
}
+
// ************************************************************************
// Calculated methods
// ************************************************************************
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/bestsolution/BestSolutionRecaller.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/bestsolution/BestSolutionRecaller.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/bestsolution/BestSolutionRecaller.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -5,6 +5,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.score.Score;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -27,7 +28,7 @@
// ************************************************************************
public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
- double initialScore = localSearchSolverScope.getStartingScore();
+ Score initialScore = localSearchSolverScope.getStartingScore();
logger.info("Initialization time spend ({}) for score ({}). Updating best solution and best score.",
localSearchSolverScope.calculateTimeMillisSpend(), initialScore);
localSearchSolverScope.setBestSolutionStepIndex(-1);
@@ -43,9 +44,9 @@
public void stepTaken(StepScope stepScope) {
LocalSearchSolverScope localSearchSolverScope = stepScope.getLocalSearchSolverScope();
- double newScore = stepScope.getScore();
- double bestScore = localSearchSolverScope.getBestScore();
- if (newScore > bestScore) {
+ Score newScore = stepScope.getScore();
+ Score bestScore = localSearchSolverScope.getBestScore();
+ if (newScore.compareTo(bestScore) > 0) {
logger.info("New score ({}) is better then last best score ({}). Updating best solution and best score.",
newScore, bestScore);
localSearchSolverScope.setBestSolutionStepIndex(stepScope.getStepIndex());
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 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -10,6 +10,7 @@
import org.drools.solver.core.localsearch.decider.forager.Forager;
import org.drools.solver.core.localsearch.decider.selector.Selector;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.score.Score;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -104,9 +105,9 @@
processMove(moveScope);
undoMove.doMove(workingMemory);
if (verifyUndoMoveIsUncorrupted) {
- double undoScore = moveScope.getStepScope().getLocalSearchSolverScope().calculateScoreFromWorkingMemory();
- if (undoScore != moveScope.getStepScope().getLocalSearchSolverScope()
- .getLastCompletedStepScope().getScore()) {
+ Score undoScore = moveScope.getStepScope().getLocalSearchSolverScope().calculateScoreFromWorkingMemory();
+ if (!undoScore.equals(moveScope.getStepScope().getLocalSearchSolverScope()
+ .getLastCompletedStepScope().getScore())) {
throw new IllegalStateException(
"Corrupted undo move (" + undoMove + ") received from move (" + move + ").");
}
@@ -116,7 +117,7 @@
}
private void processMove(MoveScope moveScope) {
- double score = moveScope.getStepScope().getLocalSearchSolverScope().calculateScoreFromWorkingMemory();
+ Score score = moveScope.getStepScope().getLocalSearchSolverScope().calculateScoreFromWorkingMemory();
moveScope.setScore(score);
double acceptChance = accepter.calculateAcceptChance(moveScope);
moveScope.setAcceptChance(acceptChance);
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/MoveScope.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/MoveScope.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/MoveScope.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -6,6 +6,8 @@
import org.drools.solver.core.localsearch.StepScope;
import org.drools.solver.core.move.Move;
import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.DefaultHardAndSoftScore;
/**
* @author Geoffrey De Smet
@@ -16,8 +18,7 @@
private Move move = null;
private Move undoMove = null;
private double acceptChance = Double.NaN;
- private double score = Double.NEGATIVE_INFINITY;
- private double decisionScore = Double.NaN;
+ private Score score = DefaultHardAndSoftScore.valueOf(Integer.MIN_VALUE, Integer.MIN_VALUE);
public MoveScope(StepScope stepScope) {
this.stepScope = stepScope;
@@ -51,22 +52,14 @@
this.acceptChance = acceptChance;
}
- public double getScore() {
+ public Score getScore() {
return score;
}
- public void setScore(double score) {
+ public void setScore(Score score) {
this.score = score;
}
- public double getDecisionScore() {
- return decisionScore;
- }
-
- public void setDecisionScore(double decisionScore) {
- this.decisionScore = decisionScore;
- }
-
// ************************************************************************
// Calculated methods
// ************************************************************************
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/greatdeluge/GreatDelugeAccepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/greatdeluge/GreatDelugeAccepter.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/greatdeluge/GreatDelugeAccepter.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -4,8 +4,10 @@
import org.drools.solver.core.localsearch.StepScope;
import org.drools.solver.core.localsearch.decider.MoveScope;
import org.drools.solver.core.localsearch.decider.accepter.AbstractAccepter;
+import org.drools.solver.core.score.Score;
/**
+ * TODO Under construction. Feel free to create a patch to improve this accepter!
* @author Geoffrey De Smet
*/
public class GreatDelugeAccepter extends AbstractAccepter {
@@ -14,18 +16,12 @@
protected final double waterRisingRate;
// TODO lowerboundRate when waterLevel rises on every MoveScope (not just every step) to reset waterlevel to upperbound
// protected final double waterLevelLowerBoundRate;
- protected final double perfectScore;
- protected double waterLevelScore = Double.NaN;
+ protected Score waterLevelScore = null;
public GreatDelugeAccepter(double waterLevelUpperBoundRate, double waterRisingRate) {
- this(waterLevelUpperBoundRate, waterRisingRate, 0.0);
- }
-
- public GreatDelugeAccepter(double waterLevelUpperBoundRate, double waterRisingRate, double perfectScore) {
this.waterLevelUpperBoundRate = waterLevelUpperBoundRate;
this.waterRisingRate = waterRisingRate;
- this.perfectScore = perfectScore;
}
// ************************************************************************
@@ -42,27 +38,32 @@
throw new IllegalArgumentException("The greatDelugeWaterRisingRate (" + waterRisingRate
+ ") should be between 0.0 and 1.0 (preferably very close to 0.0).");
}
- waterLevelScore = localSearchSolverScope.getBestScore() * waterLevelUpperBoundRate;
- if (waterLevelScore >= perfectScore) {
+ waterLevelScore = localSearchSolverScope.getBestScore().multiply(waterLevelUpperBoundRate);
+ Score perfectMaximumScore = localSearchSolverScope.getScoreDefinition().getPerfectMaximumScore();
+ if (waterLevelScore.compareTo(perfectMaximumScore) > 0) {
throw new IllegalArgumentException("The waterLevelScore (" + waterLevelScore
- + ") should be higher than the perfectScore(" + perfectScore + ").");
+ + ") should not be higher than the perfectMaximumScore(" + perfectMaximumScore + ").");
}
}
public double calculateAcceptChance(MoveScope moveScope) {
- if (moveScope.getScore() >= waterLevelScore) {
+ if (moveScope.getScore().compareTo(waterLevelScore) >= 0) {
return 1.0;
+ } else {
+ return 0.0;
}
- return 0.0;
}
@Override
public void stepTaken(StepScope stepScope) {
if (stepScope.getStepIndex() == stepScope.getLocalSearchSolverScope().getBestSolutionStepIndex()) {
// New best score
- waterLevelScore = stepScope.getLocalSearchSolverScope().getBestScore() * waterLevelUpperBoundRate;
+ waterLevelScore = stepScope.getLocalSearchSolverScope().getBestScore().multiply(waterLevelUpperBoundRate);
} else {
- waterLevelScore += (perfectScore - waterLevelScore) * waterRisingRate;
+ Score perfectMaximumScore = stepScope.getLocalSearchSolverScope().getScoreDefinition()
+ .getPerfectMaximumScore();
+ Score waterLevelAugend = perfectMaximumScore.substract(waterLevelScore).multiply(waterRisingRate);
+ waterLevelScore = waterLevelScore.add(waterLevelAugend);
// TODO maybe if waterlevel is higher than bestScore, than ...
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/simulatedannealing/SimulatedAnnealingAccepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/simulatedannealing/SimulatedAnnealingAccepter.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/simulatedannealing/SimulatedAnnealingAccepter.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -2,20 +2,17 @@
import org.drools.solver.core.localsearch.decider.MoveScope;
import org.drools.solver.core.localsearch.decider.accepter.AbstractAccepter;
+import org.drools.solver.core.localsearch.LocalSearchSolverScope;
+import org.drools.solver.core.score.Score;
/**
- * TODO Under construction
+ * TODO Under construction. Feel free to create a patch to improve this accepter!
* @author Geoffrey De Smet
*/
public class SimulatedAnnealingAccepter extends AbstractAccepter {
- protected double scoreDeltaNormalizer = 10000.0;
protected boolean compareToBestScore = false;
- public void setScoreDeltaNormalizer(double scoreDeltaNormalizer) {
- this.scoreDeltaNormalizer = scoreDeltaNormalizer;
- }
-
public void setCompareToBestScore(boolean compareToBestScore) {
this.compareToBestScore = compareToBestScore;
}
@@ -25,20 +22,22 @@
// ************************************************************************
public double calculateAcceptChance(MoveScope moveScope) {
- double compareScore = compareToBestScore
+ Score compareScore = compareToBestScore
? moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()
: moveScope.getStepScope().getLocalSearchSolverScope().getLastCompletedStepScope().getScore();
// TODO Support for decision score
- double scoreDelta = moveScope.getScore() - compareScore;
- if (scoreDelta > 0.0) { // TODO if scoreDelta 0 then it will end up 1.0 anyway?
+ Score moveScore = moveScope.getScore();
+ if (moveScore.compareTo(compareScore) > 0) {
+ // It's better so accept it.
return 1.0;
- } else {
- double timeGradient = moveScope.getStepScope().getTimeGradient();
- double acceptChance = Math.exp(scoreDelta * timeGradient / scoreDeltaNormalizer);
-// double acceptChance = Math.min(Math.exp(scoreDelta / scoreDeltaNormalizer), 1.0) * (1.0 - timeGradient);
- // Math.min(acceptChance, 1.0) is oboselete because scoreDelta <= 0.0
- return acceptChance;
}
+ double timeGradient = moveScope.getStepScope().getTimeGradient();
+ LocalSearchSolverScope localSearchSolverScope = moveScope.getStepScope().getLocalSearchSolverScope();
+ // TODO This algorithm might be nice, but the normal temparture based algorithm should also be possible
+ double scoreDelta = 1.0 - localSearchSolverScope.getScoreDefinition().calculateTimeGradient(
+ localSearchSolverScope.getStartingScore(), compareScore, moveScore);
+ double acceptChance = Math.exp(timeGradient * scoreDelta);
+ return acceptChance;
}
}
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 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/AbstractTabuAccepter.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -78,7 +78,7 @@
return 1.0;
}
if (aspirationEnabled
- && moveScope.getScore() > moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()) {
+ && moveScope.getScore().compareTo(moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()) > 0) {
logger.debug(" Proposed move ({}) is tabu, but aspiration undoes its tabu.", moveScope.getMove());
return 1.0;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -8,6 +8,7 @@
import org.drools.solver.core.localsearch.StepScope;
import org.drools.solver.core.localsearch.decider.MoveScope;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.score.Score;
/**
* An AcceptedForager is a Forager which forages accepted moves and ignores unaccepted moves.
@@ -24,7 +25,7 @@
protected List<MoveScope> acceptedList;
protected boolean listSorted;
- protected double maxScore;
+ protected Score maxScore;
protected double acceptChanceMaxScoreTotal;
protected MoveScope earlyPickedMoveScope = null;
@@ -52,7 +53,7 @@
public void beforeDeciding(StepScope stepScope) {
acceptedList = new ArrayList<MoveScope>(); // TODO use size of moveList in decider
listSorted = false;
- maxScore = Double.NEGATIVE_INFINITY;
+ maxScore = stepScope.getLocalSearchSolverScope().getScoreDefinition().getPerfectMinimumScore();
acceptChanceMaxScoreTotal = 0.0;
earlyPickedMoveScope = null;
}
@@ -69,13 +70,13 @@
case NONE:
break;
case FIRST_BEST_SCORE_IMPROVING:
- if (moveScope.getScore() > moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()) {
+ if (moveScope.getScore().compareTo(moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()) > 0) {
earlyPickedMoveScope = moveScope;
}
break;
case FIRST_LAST_STEP_SCORE_IMPROVING:
- if (moveScope.getScore() > moveScope.getStepScope().getLocalSearchSolverScope()
- .getLastCompletedStepScope().getScore()) {
+ if (moveScope.getScore().compareTo(moveScope.getStepScope().getLocalSearchSolverScope()
+ .getLastCompletedStepScope().getScore()) > 0) {
earlyPickedMoveScope = moveScope;
}
break;
@@ -97,10 +98,10 @@
protected void addMoveScopeToAcceptedList(MoveScope moveScope) {
acceptedList.add(moveScope);
listSorted = false;
- if (moveScope.getScore() > maxScore) {
+ if (moveScope.getScore().compareTo(maxScore) > 0) {
acceptChanceMaxScoreTotal = moveScope.getAcceptChance();
maxScore = moveScope.getScore();
- } else if (moveScope.getScore() == maxScore) {
+ } else if (moveScope.getScore().equals(maxScore)) {
acceptChanceMaxScoreTotal += moveScope.getAcceptChance();
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/TopListSelector.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/TopListSelector.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/TopListSelector.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -36,7 +36,7 @@
@Override
public void stepTaken(StepScope stepScope) {
- // TODO fixme
+ // TODO FIXME: it shouldn't know DefaultLocalSearchSolver that intemitly
topList = ((DefaultLocalSearchSolver) localSearchSolver).getDecider().getForager().getTopList(topSize);
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/FeasableScoreFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/FeasableScoreFinish.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/FeasableScoreFinish.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -2,15 +2,16 @@
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.score.Score;
/**
* @author Geoffrey De Smet
*/
public class FeasableScoreFinish extends AbstractFinish {
- private double feasableScore;
+ private Score feasableScore;
- public void setFeasableScore(double feasableScore) {
+ public void setFeasableScore(Score feasableScore) {
this.feasableScore = feasableScore;
}
@@ -19,21 +20,16 @@
// ************************************************************************
public boolean isFinished(StepScope stepScope) {
- double bestScore = stepScope.getLocalSearchSolverScope().getBestScore();
- return bestScore >= feasableScore;
+ Score bestScore = stepScope.getLocalSearchSolverScope().getBestScore();
+ return bestScore.compareTo(feasableScore) >= 0;
}
public double calculateTimeGradient(StepScope stepScope) {
LocalSearchSolverScope localSearchSolverScope = stepScope.getLocalSearchSolverScope();
- double startingScore = localSearchSolverScope.getStartingScore();
- double stepScore = localSearchSolverScope.getLastCompletedStepScope().getScore();
- if (feasableScore <= stepScore) {
- return 1.0;
- } else if (stepScore <= startingScore) {
- return 0.0;
- } else {
- return (stepScore - startingScore) / (feasableScore - startingScore);
- }
+ Score startingScore = localSearchSolverScope.getStartingScore();
+ Score stepScore = localSearchSolverScope.getLastCompletedStepScope().getScore();
+ return localSearchSolverScope.getScoreDefinition()
+ .calculateTimeGradient(startingScore, feasableScore, stepScore);
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/DefaultHardAndSoftScore.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/DefaultHardAndSoftScore.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/DefaultHardAndSoftScore.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -4,6 +4,7 @@
* Default implementation of {@link HardAndSoftScore}.
* <p/>
* This class is immutable.
+ * @see HardAndSoftScore
* @author Geoffrey De Smet
*/
public final class DefaultHardAndSoftScore extends AbstractScore<HardAndSoftScore>
@@ -12,7 +13,7 @@
private static final String HARD_LABEL = "hard";
private static final String SOFT_LABEL = "soft";
- public static Score valueOf(String scoreString) {
+ public static DefaultHardAndSoftScore parseScore(String scoreString) {
String[] scoreTokens = scoreString.split(HARD_LABEL + "\\/");
if (scoreTokens.length != 2 || !scoreTokens[1].endsWith(SOFT_LABEL)) {
throw new IllegalArgumentException("The scoreString (" + scoreString
@@ -23,11 +24,11 @@
return valueOf(hardScore, softScore);
}
- public static Score valueOf(int hardScore) {
+ public static DefaultHardAndSoftScore valueOf(int hardScore) {
return new DefaultHardAndSoftScore(hardScore);
}
- public static Score valueOf(int hardScore, int softScore) {
+ public static DefaultHardAndSoftScore valueOf(int hardScore, int softScore) {
return new DefaultHardAndSoftScore(hardScore, softScore);
}
@@ -56,8 +57,28 @@
// Worker methods
// ************************************************************************
+ public HardAndSoftScore add(HardAndSoftScore augend) {
+ return new DefaultHardAndSoftScore(this.hardScore + augend.getHardScore(),
+ this.softScore + augend.getSoftScore());
+ }
+
+ public HardAndSoftScore substract(HardAndSoftScore subtrahend) {
+ return new DefaultHardAndSoftScore(this.hardScore - subtrahend.getHardScore(),
+ this.softScore - subtrahend.getSoftScore());
+ }
+
+ public HardAndSoftScore multiply(double multiplicand) {
+ return new DefaultHardAndSoftScore((int) Math.round(this.hardScore * multiplicand),
+ (int) Math.round(this.softScore * multiplicand));
+ }
+
+ public HardAndSoftScore divide(double divisor) {
+ return new DefaultHardAndSoftScore((int) Math.round(this.hardScore / divisor),
+ (int) Math.round(this.softScore / divisor));
+ }
+
public boolean equals(Object o) {
- // A direct implementation (instead of EqualsBuilder) for to avoid dependencies
+ // A direct implementation (instead of EqualsBuilder) to avoid dependencies
if (this == o) {
return true;
} else if (o instanceof HardAndSoftScore) {
@@ -70,12 +91,12 @@
}
public int hashCode() {
- // A direct implementation (instead of HashCodeBuilder) for to avoid dependencies
+ // A direct implementation (instead of HashCodeBuilder) to avoid dependencies
return (((17 * 37) + hardScore)) * 37 + softScore;
}
public int compareTo(HardAndSoftScore other) {
- // A direct implementation (instead of CompareToBuilder) for to avoid dependencies
+ // A direct implementation (instead of CompareToBuilder) to avoid dependencies
if (hardScore != other.getHardScore()) {
if (hardScore < other.getHardScore()) {
return -1;
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/DefaultSimpleScore.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/DefaultSimpleScore.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/DefaultSimpleScore.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -7,17 +7,18 @@
* Default implementation of {@link SimpleScore}.
* <p/>
* This class is immutable.
+ * @see SimpleScore
* @author Geoffrey De Smet
*/
public final class DefaultSimpleScore extends AbstractScore<SimpleScore>
implements SimpleScore {
- public static Score valueOf(int score) {
- return new DefaultSimpleScore(score);
+ public static DefaultSimpleScore parseScore(String scoreString) {
+ return valueOf(Integer.parseInt(scoreString));
}
- public static Score valueOf(String scoreString) {
- return valueOf(Integer.parseInt(scoreString));
+ public static DefaultSimpleScore valueOf(int score) {
+ return new DefaultSimpleScore(score);
}
private final int score;
@@ -34,8 +35,24 @@
// Worker methods
// ************************************************************************
+ public SimpleScore add(SimpleScore augend) {
+ return new DefaultSimpleScore(this.score + augend.getScore());
+ }
+
+ public SimpleScore substract(SimpleScore subtrahend) {
+ return new DefaultSimpleScore(this.score - subtrahend.getScore());
+ }
+
+ public SimpleScore multiply(double multiplicand) {
+ return new DefaultSimpleScore((int) Math.round(this.score * multiplicand));
+ }
+
+ public SimpleScore divide(double divisor) {
+ return new DefaultSimpleScore((int) Math.round(this.score / divisor));
+ }
+
public boolean equals(Object o) {
- // A direct implementation (instead of EqualsBuilder) for to avoid dependencies
+ // A direct implementation (instead of EqualsBuilder) to avoid dependencies
if (this == o) {
return true;
} else if (o instanceof SimpleScore) {
@@ -47,12 +64,12 @@
}
public int hashCode() {
- // A direct implementation (instead of HashCodeBuilder) for to avoid dependencies
+ // A direct implementation (instead of HashCodeBuilder) to avoid dependencies
return (17 * 37) + score;
}
public int compareTo(SimpleScore other) {
- // A direct implementation (instead of CompareToBuilder) for to avoid dependencies
+ // A direct implementation (instead of CompareToBuilder) to avoid dependencies
if (score < other.getScore()) {
return -1;
} else if (score > other.getScore()) {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/Score.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/Score.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/Score.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -10,4 +10,34 @@
*/
public interface Score<S extends Score> extends Comparable<S> {
+ /**
+ * Returns a Score whose value is (this + augend).
+ * @param augend value to be added to this Score
+ * @return this + augend
+ */
+ S add(S augend);
+
+ /**
+ * Returns a Score whose value is (this - subtrahend).
+ * @param subtrahend value to be subtracted from this Score
+ * @return this - subtrahend, rounded as necessary
+ */
+ S substract(S subtrahend);
+
+ /**
+ * Returns a Score whose value is (this × multiplicand).
+ * Rounding will be applied as needed.
+ * @param multiplicand value to be multiplied by this Score.
+ * @return this * multiplicand
+ */
+ S multiply(double multiplicand);
+
+ /**
+ * Returns a Score whose value is (this / divisor).
+ * Rounding will be applied as needed.
+ * @param divisor value by which this Score is to be divided
+ * @return this / divisor
+ */
+ S divide(double divisor);
+
}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractHardAndSoftConstraintScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractHardAndSoftConstraintScoreCalculator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractHardAndSoftConstraintScoreCalculator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,38 +0,0 @@
-package org.drools.solver.core.score.calculator;
-
-/**
- * @author Geoffrey De Smet
- */
-public abstract class AbstractHardAndSoftConstraintScoreCalculator extends AbstractScoreCalculator
- implements HardAndSoftConstraintScoreCalculator {
-
- protected int hardConstraintsBroken;
- protected int softConstraintsBroken;
-
- public int getHardConstraintsBroken() {
- return hardConstraintsBroken;
- }
-
- public void setHardConstraintsBroken(int hardConstraintsBroken) {
- this.hardConstraintsBroken = hardConstraintsBroken;
- }
-
- public int getSoftConstraintsBroken() {
- return softConstraintsBroken;
- }
-
- public void setSoftConstraintsBroken(int softConstraintsBroken) {
- this.softConstraintsBroken = softConstraintsBroken;
- }
-
- // ************************************************************************
- // Worker methods
- // ************************************************************************
-
- public double calculateHardAndSoftConstraintScore(double hardConstraintsWeight) {
- double constraintsBroken = ((double) hardConstraintsBroken) * hardConstraintsWeight;
- constraintsBroken += (double) softConstraintsBroken;
- return -constraintsBroken;
- }
-
-}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractScoreCalculator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractScoreCalculator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -12,8 +12,4 @@
// Worker methods
// ************************************************************************
- public double calculateDecisionScore() {
- return calculateStepScore();
- }
-
}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/DefaultHardAndSoftConstraintScoreCalculator.java (from rev 26022, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/AbstractHardAndSoftConstraintScoreCalculator.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/DefaultHardAndSoftConstraintScoreCalculator.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/DefaultHardAndSoftConstraintScoreCalculator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -0,0 +1,39 @@
+package org.drools.solver.core.score.calculator;
+
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.DefaultHardAndSoftScore;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class DefaultHardAndSoftConstraintScoreCalculator extends AbstractScoreCalculator
+ implements HardAndSoftConstraintScoreCalculator {
+
+ protected int hardConstraintsBroken;
+ protected int softConstraintsBroken;
+
+ public int getHardConstraintsBroken() {
+ return hardConstraintsBroken;
+ }
+
+ public void setHardConstraintsBroken(int hardConstraintsBroken) {
+ this.hardConstraintsBroken = hardConstraintsBroken;
+ }
+
+ public int getSoftConstraintsBroken() {
+ return softConstraintsBroken;
+ }
+
+ public void setSoftConstraintsBroken(int softConstraintsBroken) {
+ this.softConstraintsBroken = softConstraintsBroken;
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ public Score calculateScore() {
+ return DefaultHardAndSoftScore.valueOf(-hardConstraintsBroken, -softConstraintsBroken);
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/DynamicHardAndSoftConstraintScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/DynamicHardAndSoftConstraintScoreCalculator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/DynamicHardAndSoftConstraintScoreCalculator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,66 +0,0 @@
-package org.drools.solver.core.score.calculator;
-
-/**
- * @author Geoffrey De Smet
- */
-public class DynamicHardAndSoftConstraintScoreCalculator extends AbstractHardAndSoftConstraintScoreCalculator {
-
- private double decisionHardConstraintsWeight;
- private double minHardConstraintsWeight;
- private double maxHardConstraintsWeight;
- private double hardConstraintsWeightStepAdjustment;
-
- public DynamicHardAndSoftConstraintScoreCalculator() {
- this(1000000.0);
- }
-
- public DynamicHardAndSoftConstraintScoreCalculator(double startHardConstraintsWeight) {
- this(startHardConstraintsWeight, startHardConstraintsWeight / 1000.0, startHardConstraintsWeight);
- }
-
- public DynamicHardAndSoftConstraintScoreCalculator(double startHardConstraintsWeight, double minHardConstraintsWeight, double maxHardConstraintsWeight) {
- this(startHardConstraintsWeight, minHardConstraintsWeight, maxHardConstraintsWeight, 1.2);
- }
-
- public DynamicHardAndSoftConstraintScoreCalculator(double startHardConstraintsWeight,
- double minHardConstraintsWeight, double maxHardConstraintsWeight,
- double hardConstraintsWeightStepAdjustment) {
- if (minHardConstraintsWeight > startHardConstraintsWeight) {
- throw new IllegalArgumentException("minHardConstraintsWeight (" + minHardConstraintsWeight
- + ") cannot be larger than startHardConstraintsWeight(" + startHardConstraintsWeight + ").");
- }
- if (startHardConstraintsWeight > maxHardConstraintsWeight) {
- throw new IllegalArgumentException("startHardConstraintsWeight (" + startHardConstraintsWeight
- + ") cannot be larger than maxHardConstraintsWeight(" + maxHardConstraintsWeight + ").");
- }
- this.decisionHardConstraintsWeight = startHardConstraintsWeight;
- this.minHardConstraintsWeight = minHardConstraintsWeight;
- this.maxHardConstraintsWeight = maxHardConstraintsWeight;
- this.hardConstraintsWeightStepAdjustment = hardConstraintsWeightStepAdjustment;
- }
-
- // ************************************************************************
- // Worker methods
- // ************************************************************************
-
- public double calculateStepScore() {
- adjustDecisionHardConstraintsWeight();
- return calculateHardAndSoftConstraintScore(maxHardConstraintsWeight); // the step score is always calculated on the maximum
- }
-
- private void adjustDecisionHardConstraintsWeight() {
- if (hardConstraintsBroken == 0) {
- decisionHardConstraintsWeight /= hardConstraintsWeightStepAdjustment;
- decisionHardConstraintsWeight = Math.max(decisionHardConstraintsWeight, minHardConstraintsWeight);
- } else {
- decisionHardConstraintsWeight *= hardConstraintsWeightStepAdjustment;
- decisionHardConstraintsWeight = Math.min(decisionHardConstraintsWeight, maxHardConstraintsWeight);
- }
- }
-
- @Override
- public double calculateDecisionScore() {
- return calculateHardAndSoftConstraintScore(decisionHardConstraintsWeight);
- }
-
-}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/HardAndSoftConstraintScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/HardAndSoftConstraintScoreCalculator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/HardAndSoftConstraintScoreCalculator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,6 +1,7 @@
package org.drools.solver.core.score.calculator;
/**
+ * @TODO rename to HardAndSoftScoreCalculator if it survives the score-in-solution refactor
* @author Geoffrey De Smet
*/
public interface HardAndSoftConstraintScoreCalculator extends ScoreCalculator {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/ScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/ScoreCalculator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/ScoreCalculator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,14 +1,17 @@
package org.drools.solver.core.score.calculator;
+import org.drools.solver.core.score.Score;
+
/**
* Evaluates a solution based on its WorkingMemory (which is part of the rule production system).
+ * @TODO score-in-solution refactor
* @author Geoffrey De Smet
*/
public interface ScoreCalculator {
/**
- * Calculates the step score: the solution (encountered at a step)
- * with the highest step score will be seen as the the best solution.
+ * Calculates the score: the solution (encountered at a step)
+ * with the highest score will be seen as the the best solution.
* </p>
* The step score calculation should be kept stable over all steps.
* </p>
@@ -16,26 +19,8 @@
* the WorkingMemory's FactHandles should have been correctly notified.
* Before the score is calculated, all rules are fired,
* which should trigger an update of this instance.
- * @return the step score of the solution
+ * @return never null, the score of the solution
*/
- double calculateStepScore();
+ Score calculateScore();
- /**
- * Calculates the decision score: the move with the highest decision score
- * will be chosen as the next step (provided it is accepted by the accepter of course).
- * </p>
- * The decision score calculation should be kept stable in a single step decision,
- * but it can change between steps.
- * For example: the weight of hard constraints can be lowered (hightened) if few (many) are broken
- * to allow to pass through (avoid) hard constraint solution zones.
- * </p>
- * When the solution is modified during a Move,
- * the WorkingMemory's FactHandles should have been correctly notified.
- * Before the score is calculated, all rules are fired,
- * which should trigger an update of this instance.
- * @return the decision score of the solution, ussually the same as the step score
- * @see AbstractScoreCalculator
- */
- double calculateDecisionScore();
-
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/SimpleScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/SimpleScoreCalculator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/SimpleScoreCalculator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,17 +1,20 @@
package org.drools.solver.core.score.calculator;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.DefaultSimpleScore;
+
/**
* @author Geoffrey De Smet
*/
public class SimpleScoreCalculator extends AbstractScoreCalculator {
- private double score;
+ private int score;
- public double getScore() {
+ public int getScore() {
return score;
}
- public void setScore(double score) {
+ public void setScore(int score) {
this.score = score;
}
@@ -19,8 +22,8 @@
// Worker methods
// ************************************************************************
- public double calculateStepScore() {
- return score;
+ public Score calculateScore() {
+ return DefaultSimpleScore.valueOf(score);
}
}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/StaticHardAndSoftConstraintScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/StaticHardAndSoftConstraintScoreCalculator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/calculator/StaticHardAndSoftConstraintScoreCalculator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,26 +0,0 @@
-package org.drools.solver.core.score.calculator;
-
-/**
- * @author Geoffrey De Smet
- */
-public class StaticHardAndSoftConstraintScoreCalculator extends AbstractHardAndSoftConstraintScoreCalculator {
-
- protected double hardConstraintsWeight;
-
- public StaticHardAndSoftConstraintScoreCalculator() {
- this(1000000.0);
- }
-
- public StaticHardAndSoftConstraintScoreCalculator(double hardConstraintsWeight) {
- this.hardConstraintsWeight = hardConstraintsWeight;
- }
-
- // ************************************************************************
- // Worker methods
- // ************************************************************************
-
- public double calculateStepScore() {
- return calculateHardAndSoftConstraintScore(hardConstraintsWeight);
- }
-
-}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/AbstractScoreComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/AbstractScoreComparator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/AbstractScoreComparator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -24,11 +24,6 @@
return compare(score1, score2);
}
- public S getPerfectScore() {
- // Hook which can be optionally overwritten by subclasses.
- return null;
- }
-
public double calculateTimeGradient(S startScore, S endScore, S score) {
// Hook which can be optionally overwritten by subclasses.
if (startScore.compareTo(score) <= 0) {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/HardAndSoftScoreComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/HardAndSoftScoreComparator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/HardAndSoftScoreComparator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -12,19 +12,9 @@
* @author Geoffrey De Smet
*/
public class HardAndSoftScoreComparator extends AbstractScoreComparator<HardAndSoftScore> {
-
- private HardAndSoftScore perfectScore = new DefaultHardAndSoftScore(0, 0);
- private HardAndSoftScore worstScore = new DefaultHardAndSoftScore(Integer.MIN_VALUE, Integer.MIN_VALUE);
+
private double hardScoreTimeGradientWeight = 0.5;
- public void setPerfectScore(HardAndSoftScore perfectScore) {
- this.perfectScore = perfectScore;
- }
-
- public void setWorstScore(HardAndSoftScore worstScore) {
- this.worstScore = worstScore;
- }
-
public void setHardScoreTimeGradientWeight(double hardScoreTimeGradientWeight) {
this.hardScoreTimeGradientWeight = hardScoreTimeGradientWeight;
if (hardScoreTimeGradientWeight < 0.0 || hardScoreTimeGradientWeight > 1.0) {
@@ -74,14 +64,6 @@
return compare(score1, score2);
}
- public HardAndSoftScore getPerfectScore() {
- return perfectScore;
- }
-
- public HardAndSoftScore getWorstScore() {
- return worstScore;
- }
-
public double calculateTimeGradient(HardAndSoftScore startScore, HardAndSoftScore endScore,
HardAndSoftScore score) {
double timeGradient = 0.0;
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/ScoreComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/ScoreComparator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/ScoreComparator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -55,26 +55,6 @@
int compareWithShiftingPenalty(S score1, S score2);
/**
- * The perfect score is the score of which there is no better in any problem instance.
- * This doesn't mean that the current problem instance, or any problem instance for that matter,
- * could ever attain that score.
- * </p>
- * For example, most cases have a perfect score of zero, as most use cases only have negative scores.
- * @return null if not supported
- */
- S getPerfectScore();
-
- /**
- * The worst score is the score of which there is no worser in any problem instance.
- * This doesn't mean that the current problem instance, or any problem instance for that matter,
- * could ever attain such a bad score.
- * </p>
- * For example, most cases have a worst score of negative infinity.
- * @return null if not supported
- */
- S getWorstScore();
-
- /**
*
* @param startScore never null
* @param endScore never null
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/SimpleScoreComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/SimpleScoreComparator.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/SimpleScoreComparator.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -13,17 +13,6 @@
*/
public class SimpleScoreComparator extends AbstractScoreComparator<SimpleScore> {
- private SimpleScore perfectScore = new DefaultSimpleScore(0);
- private SimpleScore worstScore = new DefaultSimpleScore(Integer.MIN_VALUE);
-
- public void setPerfectScore(SimpleScore perfectScore) {
- this.perfectScore = perfectScore;
- }
-
- public void setWorstScore(SimpleScore worstScore) {
- this.worstScore = worstScore;
- }
-
// ************************************************************************
// Worker methods
// ************************************************************************
@@ -61,14 +50,6 @@
return compare(score1, score2);
}
- public SimpleScore getPerfectScore() {
- return perfectScore;
- }
-
- public SimpleScore getWorstScore() {
- return worstScore;
- }
-
public double calculateTimeGradient(SimpleScore startScore, SimpleScore endScore, SimpleScore score) {
double timeGradient = 0.0;
int totalScore = Math.max(0, endScore.getScore() - startScore.getScore());
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/AbstractScoreDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/AbstractScoreDefinition.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/AbstractScoreDefinition.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -0,0 +1,25 @@
+package org.drools.solver.core.score.definition;
+
+import java.io.Serializable;
+
+import org.drools.solver.core.score.Score;
+
+/**
+ * Abstract superclass for {@link ScoreDefinition}.
+ * @see ScoreDefinition
+ * @see HardAndSoftScoreDefinition
+ * @author Geoffrey De Smet
+ */
+public abstract class AbstractScoreDefinition<S extends Score> implements ScoreDefinition<S>, Serializable {
+
+ public S getPerfectMaximumScore() {
+ // Hook which can be optionally overwritten by subclasses.
+ return null;
+ }
+
+ public S getPerfectMinimumScore() {
+ // Hook which can be optionally overwritten by subclasses
+ return null;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/HardAndSoftScoreDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/HardAndSoftScoreDefinition.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/HardAndSoftScoreDefinition.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -0,0 +1,86 @@
+package org.drools.solver.core.score.definition;
+
+import org.drools.solver.core.score.HardAndSoftScore;
+import org.drools.solver.core.score.DefaultHardAndSoftScore;
+import org.drools.solver.core.score.Score;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class HardAndSoftScoreDefinition extends AbstractScoreDefinition<HardAndSoftScore> {
+
+ private double hardScoreTimeGradientWeight = 0.75;
+
+ private HardAndSoftScore perfectMaximumScore = new DefaultHardAndSoftScore(0, 0);
+ private HardAndSoftScore perfectMinimumScore = new DefaultHardAndSoftScore(Integer.MIN_VALUE, Integer.MIN_VALUE);
+
+ /**
+ * It's recommended to use a number which can be exactly represented as a double,
+ * such as 0.5, 0.25, 0.75, 0.125, ... but not 0.1, 0.2, ...
+ * @param hardScoreTimeGradientWeight 0.0 <= hardScoreTimeGradientWeight <= 1.0
+ */
+ public void setHardScoreTimeGradientWeight(double hardScoreTimeGradientWeight) {
+ this.hardScoreTimeGradientWeight = hardScoreTimeGradientWeight;
+ if (hardScoreTimeGradientWeight < 0.0 || hardScoreTimeGradientWeight > 1.0) {
+ throw new IllegalArgumentException("Property hardScoreTimeGradientWeight (" + hardScoreTimeGradientWeight
+ + ") must be greater or equal to 0.0jg and smaller or equal to 1.0.");
+ }
+ }
+
+ public void setPerfectMaximumScore(HardAndSoftScore perfectMaximumScore) {
+ this.perfectMaximumScore = perfectMaximumScore;
+ }
+
+ public void setPerfectMinimumScore(HardAndSoftScore perfectMinimumScore) {
+ this.perfectMinimumScore = perfectMinimumScore;
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ public HardAndSoftScore getPerfectMaximumScore() {
+ return perfectMaximumScore;
+ }
+
+ public HardAndSoftScore getPerfectMinimumScore() {
+ return perfectMinimumScore;
+ }
+
+ public Score parseScore(String scoreString) {
+ return DefaultHardAndSoftScore.parseScore(scoreString);
+ }
+
+ public double calculateTimeGradient(HardAndSoftScore startScore, HardAndSoftScore endScore,
+ HardAndSoftScore score) {
+ if (score.getHardScore() > endScore.getHardScore()) {
+ return 1.0;
+ } else if (startScore.getHardScore() > score.getHardScore()) {
+ return 0.0;
+ }
+ double softScoreTimeGradientWeight;
+ double timeGradient;
+ if (startScore.getHardScore() == endScore.getHardScore()) {
+ softScoreTimeGradientWeight = 1.0;
+ timeGradient = 0.0;
+ } else {
+ softScoreTimeGradientWeight = 1.0 - hardScoreTimeGradientWeight;
+ int hardScoreTotal = endScore.getHardScore() - startScore.getHardScore();
+ int hardScoreDelta = score.getHardScore() - startScore.getHardScore();
+ double hardTimeGradient = (double) hardScoreDelta / (double) hardScoreTotal;
+ timeGradient = hardTimeGradient * hardScoreTimeGradientWeight;
+ }
+ if (score.getSoftScore() >= endScore.getSoftScore()) {
+ timeGradient += softScoreTimeGradientWeight;
+ } else if (startScore.getSoftScore() >= score.getSoftScore()) {
+ // No change: timeGradient += 0.0
+ } else {
+ int softScoreTotal = endScore.getSoftScore() - startScore.getSoftScore();
+ int softScoreDelta = score.getSoftScore() - startScore.getSoftScore();
+ double softTimeGradient = (double) softScoreDelta / (double) softScoreTotal;
+ timeGradient += softTimeGradient * softScoreTimeGradientWeight;
+ }
+ return timeGradient;
+ }
+
+}
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/ScoreDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/ScoreDefinition.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/ScoreDefinition.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -0,0 +1,56 @@
+package org.drools.solver.core.score.definition;
+
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.comparator.ScoreComparator;
+
+/**
+ * A ScoreDefinition knows how to compare scores and what the perfect maximum/minimum Score is.
+ * @see AbstractScoreDefinition
+ * @see HardAndSoftScoreDefinition
+ * @author Geoffrey De Smet
+ */
+public interface ScoreDefinition<S extends Score> {
+
+// ScoreComparator getScoreComparator();
+//
+// ScoreComparator getShiftingPenaltyScoreComparator();
+
+ /**
+ * The perfect maximum score is the score of which there is no better in any problem instance.
+ * This doesn't mean that the current problem instance, or any problem instance for that matter,
+ * could ever attain that score.
+ * </p>
+ * For example, most cases have a perfect maximum score of zero, as most use cases only have negative scores.
+ * @return null if not supported
+ */
+ S getPerfectMaximumScore();
+
+ /**
+ * The perfect minimum score is the score of which there is no worser in any problem instance.
+ * This doesn't mean that the current problem instance, or any problem instance for that matter,
+ * could ever attain such a bad score.
+ * </p>
+ * For example, most cases have a perfect minimum score of negative infinity.
+ * @return null if not supported
+ */
+ S getPerfectMinimumScore();
+
+ /**
+ * Parses the String and returns a Score.
+ * @param scoreString never null
+ * @return never null
+ */
+ Score parseScore(String scoreString);
+
+ /**
+ * @TODO rename because
+ * org.drools.solver.core.localsearch.decider.accepter.simulatedannealing.SimulatedAnnealingAccepter
+ * also uses it
+ * @param startScore never null
+ * @param endScore never null
+ * @param score never null
+ * @return between 0.0 and 1.0
+ */
+ double calculateTimeGradient(S startScore, S endScore, S score);
+
+}
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/SimpleScoreDefinition.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/SimpleScoreDefinition.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/SimpleScoreDefinition.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -0,0 +1,50 @@
+package org.drools.solver.core.score.definition;
+
+import org.drools.solver.core.score.SimpleScore;
+import org.drools.solver.core.score.DefaultSimpleScore;
+import org.drools.solver.core.score.Score;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class SimpleScoreDefinition extends AbstractScoreDefinition<SimpleScore> {
+
+ private SimpleScore perfectMaximumScore = new DefaultSimpleScore(0);
+ private SimpleScore perfectMinimumScore = new DefaultSimpleScore(Integer.MIN_VALUE);
+
+ public void setPerfectMaximumScore(SimpleScore perfectMaximumScore) {
+ this.perfectMaximumScore = perfectMaximumScore;
+ }
+
+ public void setPerfectMinimumScore(SimpleScore perfectMinimumScore) {
+ this.perfectMinimumScore = perfectMinimumScore;
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ public SimpleScore getPerfectMaximumScore() {
+ return perfectMaximumScore;
+ }
+
+ public SimpleScore getPerfectMinimumScore() {
+ return perfectMinimumScore;
+ }
+
+ public Score parseScore(String scoreString) {
+ return DefaultSimpleScore.parseScore(scoreString);
+ }
+
+ public double calculateTimeGradient(SimpleScore startScore, SimpleScore endScore, SimpleScore score) {
+ if (score.getScore() >= endScore.getScore()) {
+ return 1.0;
+ } else if (startScore.getScore() >= score.getScore()) {
+ return 0.0;
+ }
+ int scoreTotal = endScore.getScore() - startScore.getScore();
+ int scoreDelta = score.getScore() - startScore.getScore();
+ return ((double) scoreDelta) / ((double) scoreTotal);
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/accepter/greatdeluge/GreatDelugeAccepterTest.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/accepter/greatdeluge/GreatDelugeAccepterTest.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/accepter/greatdeluge/GreatDelugeAccepterTest.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -8,6 +8,9 @@
import org.drools.solver.core.localsearch.decider.MoveScope;
import org.drools.solver.core.localsearch.decider.accepter.Accepter;
import org.drools.solver.core.move.DummyMove;
+import org.drools.solver.core.score.DefaultSimpleScore;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.definition.SimpleScoreDefinition;
/**
* @author Geoffrey De Smet
@@ -23,13 +26,13 @@
stepScope.setStepIndex(0);
accepter.beforeDeciding(stepScope);
// Pre conditions
- MoveScope a1 = createMoveScope(stepScope, -2000.0);
- MoveScope a2 = createMoveScope(stepScope, -1300.0);
- MoveScope a3 = createMoveScope(stepScope, -1200.0);
- MoveScope b1 = createMoveScope(stepScope, -1200.0);
- MoveScope b2 = createMoveScope(stepScope, -100.0);
- MoveScope c1 = createMoveScope(stepScope, -1100.0);
- MoveScope c2 = createMoveScope(stepScope, -120.0);
+ MoveScope a1 = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-2000));
+ MoveScope a2 = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1300));
+ MoveScope a3 = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1200));
+ MoveScope b1 = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1200));
+ MoveScope b2 = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-100));
+ MoveScope c1 = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1100));
+ MoveScope c2 = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-120));
// Do stuff
assertEquals(0.0, accepter.calculateAcceptChance(a1));
assertEquals(0.0, accepter.calculateAcceptChance(a2));
@@ -49,19 +52,20 @@
private LocalSearchSolverScope createLocalSearchSolverScope() {
LocalSearchSolverScope localSearchSolverScope = new LocalSearchSolverScope();
+ localSearchSolverScope.setScoreDefinition(new SimpleScoreDefinition());
localSearchSolverScope.setWorkingRandom(new Random() {
public double nextDouble() {
return 0.2;
}
});
- localSearchSolverScope.setBestScore(-1000.0);
+ localSearchSolverScope.setBestScore(DefaultSimpleScore.valueOf(-1000));
StepScope lastStepScope = new StepScope(localSearchSolverScope);
- lastStepScope.setScore(-1000.0);
+ lastStepScope.setScore(DefaultSimpleScore.valueOf(-1000));
localSearchSolverScope.setLastCompletedStepScope(lastStepScope);
return localSearchSolverScope;
}
- public MoveScope createMoveScope(StepScope stepScope, double score) {
+ public MoveScope createMoveScope(StepScope stepScope, Score score) {
MoveScope moveScope = new MoveScope(stepScope);
moveScope.setMove(new DummyMove());
moveScope.setScore(score);
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForagerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForagerTest.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForagerTest.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -9,6 +9,9 @@
import org.drools.solver.core.localsearch.decider.MoveScope;
import org.drools.solver.core.move.DummyMove;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.score.DefaultSimpleScore;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.definition.SimpleScoreDefinition;
/**
* @author Geoffrey De Smet
@@ -23,11 +26,11 @@
StepScope stepScope = new StepScope(localSearchSolverScope);
forager.beforeDeciding(stepScope);
// Pre conditions
- MoveScope a = createMoveScope(stepScope, -20.0, 30.0);
- MoveScope b = createMoveScope(stepScope, -1.0, 9.0);
- MoveScope c = createMoveScope(stepScope, -20.0, 20.0);
- MoveScope d = createMoveScope(stepScope, -300.0, 50000.0);
- MoveScope e = createMoveScope(stepScope, -1.0, 1.0);
+ MoveScope a = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 30.0);
+ MoveScope b = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 9.0);
+ MoveScope c = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 20.0);
+ MoveScope d = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-300), 50000.0);
+ MoveScope e = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 1.0);
// Do stuff
forager.addMove(a);
assertFalse(forager.isQuitEarly());
@@ -59,10 +62,10 @@
StepScope stepScope = new StepScope(localSearchSolverScope);
forager.beforeDeciding(stepScope);
// Pre conditions
- MoveScope a = createMoveScope(stepScope, -1.0, 0.0);
- MoveScope b = createMoveScope(stepScope, -20.0, 1.0);
- MoveScope c = createMoveScope(stepScope, -300.0, 1.0);
- MoveScope d = createMoveScope(stepScope, -1.0, 0.3);
+ MoveScope a = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.0);
+ MoveScope b = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 1.0);
+ MoveScope c = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-300), 1.0);
+ MoveScope d = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.3);
// Do stuff
forager.addMove(a);
assertFalse(forager.isQuitEarly());
@@ -89,10 +92,10 @@
StepScope stepScope = new StepScope(localSearchSolverScope);
forager.beforeDeciding(stepScope);
// Pre conditions
- MoveScope a = createMoveScope(stepScope, -1.0, 0.0);
- MoveScope b = createMoveScope(stepScope, -300.0, 1.0);
- MoveScope c = createMoveScope(stepScope, -4000.0, 1.0);
- MoveScope d = createMoveScope(stepScope, -20.0, 0.3);
+ MoveScope a = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.0);
+ MoveScope b = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-300), 1.0);
+ MoveScope c = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-4000), 1.0);
+ MoveScope d = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 0.3);
// Do stuff
forager.addMove(a);
assertFalse(forager.isQuitEarly());
@@ -119,10 +122,10 @@
StepScope stepScope = new StepScope(localSearchSolverScope);
forager.beforeDeciding(stepScope);
// Pre conditions
- MoveScope a = createMoveScope(stepScope, -20.0, 0.0);
- MoveScope b = createMoveScope(stepScope, -1.0, 0.1);
- MoveScope c = createMoveScope(stepScope, -1.0, 0.0);
- MoveScope d = createMoveScope(stepScope, -20.0, 0.3);
+ MoveScope a = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 0.0);
+ MoveScope b = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.1);
+ MoveScope c = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.0);
+ MoveScope d = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 0.3);
// Do stuff
forager.addMove(a);
assertFalse(forager.isQuitEarly());
@@ -143,19 +146,20 @@
private LocalSearchSolverScope createLocalSearchSolverScope() {
LocalSearchSolverScope localSearchSolverScope = new LocalSearchSolverScope();
+ localSearchSolverScope.setScoreDefinition(new SimpleScoreDefinition());
localSearchSolverScope.setWorkingRandom(new Random() {
public double nextDouble() {
return 0.2;
}
});
- localSearchSolverScope.setBestScore(-10.0);
+ localSearchSolverScope.setBestScore(DefaultSimpleScore.valueOf(-10));
StepScope lastStepScope = new StepScope(localSearchSolverScope);
- lastStepScope.setScore(-100.0);
+ lastStepScope.setScore(DefaultSimpleScore.valueOf(-100));
localSearchSolverScope.setLastCompletedStepScope(lastStepScope);
return localSearchSolverScope;
}
- public MoveScope createMoveScope(StepScope stepScope, double score, double acceptChance) {
+ public MoveScope createMoveScope(StepScope stepScope, Score score, double acceptChance) {
MoveScope moveScope = new MoveScope(stepScope);
moveScope.setMove(new DummyMove());
moveScope.setScore(score);
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/score/definition/HardAndSoftScoreDefinitionTest.java (from rev 26022, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/score/DefaultHardAndSoftScoreTest.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/score/definition/HardAndSoftScoreDefinitionTest.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/score/definition/HardAndSoftScoreDefinitionTest.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -0,0 +1,72 @@
+package org.drools.solver.core.score.definition;
+
+import junit.framework.TestCase;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.DefaultHardAndSoftScore;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class HardAndSoftScoreDefinitionTest extends TestCase {
+
+ public void testCalculateTimeGradient() {
+ HardAndSoftScoreDefinition scoreDefinition = new HardAndSoftScoreDefinition();
+ scoreDefinition.setHardScoreTimeGradientWeight(0.75);
+
+ // Normal cases
+ // Smack in the middle
+ assertEquals(0.6, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-14,-340)));
+ // No hard broken, total soft broken
+ assertEquals(0.75, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-10,-400)));
+ // Total hard broken, no soft broken
+ assertEquals(0.25, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-20,-300)));
+ // No hard broken, more than total soft broken
+ assertEquals(0.75, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-10,-900)));
+ // More than total hard broken, no soft broken
+ assertEquals(0.0, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-90,-300)));
+
+ // Perfect min/max cases
+ assertEquals(1.0, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-10,-300), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-10,-300)));
+ assertEquals(0.0, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-20,-400)));
+ assertEquals(1.0, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-10,-300)));
+
+ // Hard total delta is 0
+ assertEquals(0.6, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-10,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-10,-340)));
+ assertEquals(0.0, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-10,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-20,-340)));
+ assertEquals(1.0, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-10,-400), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-0,-340)));
+
+ // Soft total delta is 0
+ assertEquals((0.6 * 0.75) + 0.25, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-300), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-14,-300)));
+ assertEquals(0.6 * 0.75, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-300), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-14,-400)));
+ assertEquals((0.6 * 0.75) + 0.25, scoreDefinition.calculateTimeGradient(
+ DefaultHardAndSoftScore.valueOf(-20,-300), DefaultHardAndSoftScore.valueOf(-10,-300),
+ DefaultHardAndSoftScore.valueOf(-14,-0)));
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -20,6 +20,7 @@
import org.drools.solver.core.score.constraint.DoubleConstraintOccurrence;
import org.drools.solver.core.score.constraint.IntConstraintOccurrence;
import org.drools.solver.core.score.constraint.UnweightedConstraintOccurrence;
+import org.drools.solver.core.score.Score;
import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.common.persistence.SolutionDao;
import org.slf4j.Logger;
@@ -87,7 +88,7 @@
return localSearchSolverScope.getWorkingSolution();
}
- public double getScore() {
+ public Score getScore() {
return localSearchSolverScope.calculateScoreFromWorkingMemory();
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -28,8 +28,6 @@
*/
public class WorkflowFrame extends JFrame {
- public static final NumberFormat NUMBER_FORMAT = NumberFormat.getInstance();
-
protected final transient Logger logger = LoggerFactory.getLogger(getClass());
private SolutionBusiness solutionBusiness;
@@ -186,7 +184,7 @@
public void updateScreen() {
solutionPanel.resetPanel();
validate();
- resultLabel.setText("Score = " + NUMBER_FORMAT.format(solutionBusiness.getScore()));
+ resultLabel.setText("Score = " + solutionBusiness.getScore());
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -9,6 +9,8 @@
import org.drools.runtime.rule.FactHandle;
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.solution.initializer.AbstractStartingSolutionInitializer;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.DefaultHardAndSoftScore;
import org.drools.solver.examples.common.domain.PersistableIdComparator;
import org.drools.solver.examples.itc2007.curriculumcourse.domain.Course;
import org.drools.solver.examples.itc2007.curriculumcourse.domain.CurriculumCourseSchedule;
@@ -41,7 +43,7 @@
List<Lecture> lectureList = createLectureList(schedule);
for (Lecture lecture : lectureList) {
- double unscheduledScore = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ Score unscheduledScore = localSearchSolverScope.calculateScoreFromWorkingMemory();
FactHandle lectureHandle = null;
List<PeriodScoring> periodScoringList = new ArrayList<PeriodScoring>(periodList.size());
@@ -53,17 +55,17 @@
lecture.setPeriod(period);
workingMemory.update(lectureHandle, lecture);
}
- double score = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
periodScoringList.add(new PeriodScoring(period, score));
}
Collections.sort(periodScoringList);
boolean almostPerfectMatch = false;
- double bestScore = Double.NEGATIVE_INFINITY;
+ Score bestScore = DefaultHardAndSoftScore.valueOf(Integer.MIN_VALUE, Integer.MIN_VALUE);
Period bestPeriod = null;
Room bestRoom = null;
for (PeriodScoring periodScoring : periodScoringList) {
- if (bestScore >= periodScoring.getScore()) {
+ if (bestScore.compareTo(periodScoring.getScore()) >= 0) {
// No need to check the rest
break;
}
@@ -73,14 +75,14 @@
for (Room room : roomList) {
lecture.setRoom(room);
workingMemory.update(lectureHandle, lecture);
- double score = localSearchSolverScope.calculateScoreFromWorkingMemory();
- if (score < unscheduledScore) {
- if (score > bestScore) {
+ Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ if (score.compareTo(unscheduledScore) < 0) {
+ if (score.compareTo(bestScore) > 0) {
bestScore = score;
bestPeriod = periodScoring.getPeriod();
bestRoom = room;
}
- } else if (score >= unscheduledScore) {
+ } else if (score.compareTo(unscheduledScore) >= 0) {
// TODO due to the score rules, the score can unscheduledScore can be higher than the score
// In theory every possibility should be looked into
almostPerfectMatch = true;
@@ -169,9 +171,9 @@
private class PeriodScoring implements Comparable<PeriodScoring> {
private Period period;
- private double score;
+ private Score score;
- private PeriodScoring(Period period, double score) {
+ private PeriodScoring(Period period, Score score) {
this.period = period;
this.score = score;
}
@@ -180,7 +182,7 @@
return period;
}
- public double getScore() {
+ public Score getScore() {
return score;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -13,6 +13,8 @@
import org.drools.FactHandle;
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.solution.initializer.AbstractStartingSolutionInitializer;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.DefaultHardAndSoftScore;
import org.drools.solver.examples.common.domain.PersistableIdComparator;
import org.drools.solver.examples.itc2007.examination.domain.Exam;
import org.drools.solver.examples.itc2007.examination.domain.Examination;
@@ -49,7 +51,7 @@
List<ExamInitializationWeight> examInitialWeightList = createExamAssigningScoreList(examination);
for (ExamInitializationWeight examInitialWeight : examInitialWeightList) {
- double unscheduledScore = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ Score unscheduledScore = localSearchSolverScope.calculateScoreFromWorkingMemory();
Exam leader = examInitialWeight.getExam();
FactHandle leaderHandle = null;
@@ -77,7 +79,7 @@
workingMemory.modifyInsert(examToHandle.getExamHandle(), examToHandle.getExam());
}
}
- double score = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
periodScoringList.add(new PeriodScoring(period, score));
}
Collections.sort(periodScoringList);
@@ -101,14 +103,14 @@
}
private void scheduleLeader(List<PeriodScoring> periodScoringList, List<Room> roomList,
- LocalSearchSolverScope localSearchSolverScope, WorkingMemory workingMemory, double unscheduledScore,
+ LocalSearchSolverScope localSearchSolverScope, WorkingMemory workingMemory, Score unscheduledScore,
List<ExamToHandle> examToHandleList, Exam leader, FactHandle leaderHandle) {
boolean perfectMatch = false;
- double bestScore = Double.NEGATIVE_INFINITY;
+ Score bestScore = DefaultHardAndSoftScore.valueOf(Integer.MIN_VALUE, Integer.MIN_VALUE);
Period bestPeriod = null;
Room bestRoom = null;
for (PeriodScoring periodScoring : periodScoringList) {
- if (bestScore >= periodScoring.getScore()) {
+ if (bestScore.compareTo(periodScoring.getScore()) >= 0) {
// No need to check the rest
break;
}
@@ -121,14 +123,14 @@
workingMemory.modifyRetract(leaderHandle);
leader.setRoom(room);
workingMemory.modifyInsert(leaderHandle, leader);
- double score = localSearchSolverScope.calculateScoreFromWorkingMemory();
- if (score < unscheduledScore) {
- if (score > bestScore) {
+ Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ if (score.compareTo(unscheduledScore) < 0) {
+ if (score.compareTo(bestScore) > 0) {
bestScore = score;
bestPeriod = periodScoring.getPeriod();
bestRoom = room;
}
- } else if (score == unscheduledScore) {
+ } else if (score.equals(unscheduledScore)) {
perfectMatch = true;
break;
} else {
@@ -163,21 +165,21 @@
if (exam.getRoom() != null) {
throw new IllegalStateException("Exam (" + exam + ") already has a room.");
}
- double unscheduledScore = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ Score unscheduledScore = localSearchSolverScope.calculateScoreFromWorkingMemory();
boolean perfectMatch = false;
- double bestScore = Double.NEGATIVE_INFINITY;
+ Score bestScore = DefaultHardAndSoftScore.valueOf(Integer.MIN_VALUE, Integer.MIN_VALUE);
Room bestRoom = null;
for (Room room : roomList) {
workingMemory.modifyRetract(examHandle);
exam.setRoom(room);
workingMemory.modifyInsert(examHandle, exam);
- double score = localSearchSolverScope.calculateScoreFromWorkingMemory();
- if (score < unscheduledScore) {
- if (score > bestScore) {
+ Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ if (score.compareTo(unscheduledScore) < 0) {
+ if (score.compareTo(bestScore) > 0) {
bestScore = score;
bestRoom = room;
}
- } else if (score == unscheduledScore) {
+ } else if (score.equals(unscheduledScore)) {
perfectMatch = true;
break;
} else {
@@ -345,9 +347,9 @@
private class PeriodScoring implements Comparable<PeriodScoring> {
private Period period;
- private double score;
+ private Score score;
- private PeriodScoring(Period period, double score) {
+ private PeriodScoring(Period period, Score score) {
this.period = period;
this.score = score;
}
@@ -356,7 +358,7 @@
return period;
}
- public double getScore() {
+ public Score getScore() {
return score;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseShortSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseShortSolverBenchmarkConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseShortSolverBenchmarkConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -17,9 +17,9 @@
<solverBenchmark>
<localSearchSolver>
- <scoreCalculator>
- <scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<selector>
<selector>
<topSize>10</topSize>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -35,9 +35,9 @@
<solverBenchmark>
<localSearchSolver>
- <scoreCalculator>
- <scoreCalculatorType>DYNAMIC_HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<selector>
<selector>
<topSize>10</topSize>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<localSearchSolver>
<scoreDrl>/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>DYNAMIC_HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<startingSolutionInitializerClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.solution.initializer.CurriculumCourseStartingSolutionInitializer</startingSolutionInitializerClass>
<finish>
<!--
@@ -12,7 +12,7 @@
ge0ffrey's old pc: 1152
-->
<maximumSecondsSpend>429</maximumSecondsSpend>
- <!--<feasableScore>-999999.0</feasableScore>-->
+ <!--<feasableScore>-0hard/-999999soft</feasableScore>-->
<!--<maximumStepCount>100</maximumStepCount>-->
</finish>
<selector>
@@ -41,26 +41,26 @@
</forager>
<!-- Great deluge experiments: -->
<!--<selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.002</relativeSelection>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.002</relativeSelection>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.move.factory.LectureSwitchMoveFactory</moveFactoryClass>-->
- <!--<shuffle>true</shuffle>-->
- <!--</selector>-->
+ <!--<selector>-->
+ <!--<moveFactoryClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>-->
+ <!--<relativeSelection>0.002</relativeSelection>-->
<!--</selector>-->
+ <!--<selector>-->
+ <!--<moveFactoryClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>-->
+ <!--<relativeSelection>0.002</relativeSelection>-->
+ <!--</selector>-->
+ <!--<selector>-->
+ <!--<moveFactoryClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.move.factory.LectureSwitchMoveFactory</moveFactoryClass>-->
+ <!--<shuffle>true</shuffle>-->
+ <!--</selector>-->
+ <!--</selector>-->
<!--<accepter>-->
- <!--<greatDelugeWaterLevelUpperBoundRate>1.30</greatDelugeWaterLevelUpperBoundRate>-->
- <!--<greatDelugeWaterRisingRate>0.000000143</greatDelugeWaterRisingRate>-->
- <!--<completePropertyTabuSize>10</completePropertyTabuSize>-->
+ <!--<greatDelugeWaterLevelUpperBoundRate>1.30</greatDelugeWaterLevelUpperBoundRate>-->
+ <!--<greatDelugeWaterRisingRate>0.000000143</greatDelugeWaterRisingRate>-->
+ <!--<completePropertyTabuSize>10</completePropertyTabuSize>-->
<!--</accepter>-->
<!--<forager>-->
- <!--<foragerType>FIRST_RANDOMLY_ACCEPTED</foragerType>-->
+ <!--<foragerType>FIRST_RANDOMLY_ACCEPTED</foragerType>-->
<!--</forager>-->
</localSearchSolver>
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -16,9 +16,9 @@
<solverBenchmark>
<localSearchSolver>
- <scoreCalculator>
- <scoreCalculatorType>DYNAMIC_HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<selector>
<selector>
<topSize>10</topSize>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -29,9 +29,9 @@
<solverBenchmark>
<localSearchSolver>
- <scoreCalculator>
- <scoreCalculatorType>DYNAMIC_HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<selector>
<selector>
<topSize>10</topSize>
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 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,10 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<localSearchSolver>
<scoreDrl>/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <!--<scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>-->
- <scoreCalculatorType>DYNAMIC_HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
<finish>
<!--
@@ -13,7 +12,7 @@
ge0ffrey's old pc: 1152
-->
<maximumSecondsSpend>429</maximumSecondsSpend>
- <!--<feasableScore>-999999.0</feasableScore>-->
+ <!--<feasableScore>-0hard/-999999soft</feasableScore>-->
<!--<maximumStepCount>100</maximumStepCount>-->
</finish>
<selector>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/lessonschedule/solver/lessonScheduleSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/lessonschedule/solver/lessonScheduleSolverConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/lessonschedule/solver/lessonScheduleSolverConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<localSearchSolver>
<scoreDrl>/org/drools/solver/examples/lessonschedule/solver/lessonScheduleScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<finish>
<maximumUnimprovedStepCount>10</maximumUnimprovedStepCount>
</finish>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/benchmark/nqueensSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/benchmark/nqueensSolverBenchmarkConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/benchmark/nqueensSolverBenchmarkConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -10,13 +10,13 @@
<inheritedUnsolvedSolutionFile>data/nqueens/unsolved/unsolvedNQueens32.xml</inheritedUnsolvedSolutionFile>
<inheritedLocalSearchSolver>
<scoreDrl>/org/drools/solver/examples/nqueens/solver/nQueensScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>SIMPLE</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>SIMPLE</scoreDefinitionType>
+ </scoreDefinition>
<finish>
<finishCompositionStyle>OR</finishCompositionStyle>
<maximumSecondsSpend>10</maximumSecondsSpend>
- <feasableScore>0.0</feasableScore>
+ <feasableScore>0</feasableScore>
</finish>
<selector>
<moveFactoryClass>org.drools.solver.examples.nqueens.solver.move.factory.NQueensMoveFactory</moveFactoryClass>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/solver/nqueensSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/solver/nqueensSolverConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/solver/nqueensSolverConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<localSearchSolver>
<scoreDrl>/org/drools/solver/examples/nqueens/solver/nQueensScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>SIMPLE</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>SIMPLE</scoreDefinitionType>
+ </scoreDefinition>
<finish>
<finishCompositionStyle>OR</finishCompositionStyle>
<maximumStepCount>100</maximumStepCount>
- <feasableScore>0.0</feasableScore>
+ <feasableScore>0</feasableScore>
</finish>
<selector>
<moveFactoryClass>org.drools.solver.examples.nqueens.solver.move.factory.NQueensMoveFactory</moveFactoryClass>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/breakNl14SolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/breakNl14SolverBenchmarkConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/breakNl14SolverBenchmarkConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -7,9 +7,9 @@
<inheritedUnsolvedSolutionFile>data/travelingtournament/smart/unsolved/1-nl14.xml</inheritedUnsolvedSolutionFile>
<inheritedLocalSearchSolver>
<scoreDrl>/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>DYNAMIC_HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<selector>
<moveFactoryClass>org.drools.solver.examples.travelingtournament.solver.smart.move.factory.SmartTravelingTournamentMoveFactory</moveFactoryClass>
</selector>
@@ -25,7 +25,7 @@
<localSearchSolver>
<finish>
<finishCompositionStyle>AND</finishCompositionStyle>
- <feasableScore>-188727.0</feasableScore><!-- 188728 (Van Hentenryck and Vergados, May 18 2006) -->
+ <feasableScore>-0hard/-188727soft</feasableScore><!-- 188728 (Van Hentenryck and Vergados, May 18 2006) -->
<maximumUnimprovedStepCount>20</maximumUnimprovedStepCount>
</finish>
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/smartTravelingTournamentSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/smartTravelingTournamentSolverBenchmarkConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/smartTravelingTournamentSolverBenchmarkConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -7,9 +7,9 @@
<inheritedUnsolvedSolutionFile>data/travelingtournament/smart/unsolved/1-nl10.xml</inheritedUnsolvedSolutionFile>
<inheritedLocalSearchSolver>
<scoreDrl>/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<finish>
<maximumHouresSpend>2</maximumHouresSpend>
</finish>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentSolverConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentSolverConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<localSearchSolver>
<scoreDrl>/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<finish>
<maximumHouresSpend>2</maximumHouresSpend>
</finish>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentSolverConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentSolverConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<localSearchSolver>
<scoreDrl>/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<finish>
<!--<maximumHouresSpend>2</maximumHouresSpend>-->
<maximumStepCount>100</maximumStepCount>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/java/org/drools/solver/examples/nqueens/NQueensSmokeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/java/org/drools/solver/examples/nqueens/NQueensSmokeTest.java 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/java/org/drools/solver/examples/nqueens/NQueensSmokeTest.java 2009-04-24 13:16:20 UTC (rev 26240)
@@ -2,6 +2,8 @@
import junit.framework.TestCase;
import org.drools.solver.core.Solver;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.DefaultSimpleScore;
import org.drools.solver.core.solution.Solution;
import org.drools.solver.config.XmlSolverConfigurer;
import org.drools.solver.examples.common.persistence.XstreamSolutionDaoImpl;
@@ -28,8 +30,8 @@
solver.solve();
Solution bestSolution = solver.getBestSolution();
assertNotNull(bestSolution);
- double bestScore = solver.getBestScore();
- assertEquals(0.0, bestScore);
+ Score bestScore = solver.getBestScore();
+ assertEquals(DefaultSimpleScore.valueOf(0), bestScore);
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/resources/org/drools/solver/examples/nqueens/solver/nqueensSmokeSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/resources/org/drools/solver/examples/nqueens/solver/nqueensSmokeSolverConfig.xml 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/resources/org/drools/solver/examples/nqueens/solver/nqueensSmokeSolverConfig.xml 2009-04-24 13:16:20 UTC (rev 26240)
@@ -1,13 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?>
<localSearchSolver>
<scoreDrl>/org/drools/solver/examples/nqueens/solver/nQueensScoreRules.drl</scoreDrl>
- <scoreCalculator>
- <scoreCalculatorType>SIMPLE</scoreCalculatorType>
- </scoreCalculator>
+ <scoreDefinition>
+ <scoreDefinitionType>SIMPLE</scoreDefinitionType>
+ </scoreDefinition>
<finish>
<finishCompositionStyle>OR</finishCompositionStyle>
<maximumStepCount>5</maximumStepCount>
- <feasableScore>0.0</feasableScore>
+ <feasableScore>0</feasableScore>
</finish>
<selector>
<moveFactoryClass>org.drools.solver.examples.nqueens.solver.move.factory.NQueensMoveFactory</moveFactoryClass>
Modified: labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
===================================================================
--- labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt 2009-04-24 09:31:27 UTC (rev 26239)
+++ labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt 2009-04-24 13:16:20 UTC (rev 26240)
@@ -8,3 +8,69 @@
----------------------
No backwards imcompatible changes.
+
+From 5.0.0 to 5.0.1
+-------------------
+
+A score is no longer a double, now it's a Score instance.
+
+
+In the Solver interface, the return type of the getBestScore() method changed:
+Before:
+ double score = solver.getBestScore();
+After:
+ Score score = solver.getBestScore();
+
+
+Simple scores are written "-999", and hard and soft scores are written "-999hard/-999soft".
+You will see this in the examples GUI.
+In the *ScoreConfig.xml, configuring a feasableScore also reflects this.
+Before with simple score:
+ <finish>
+ <feasableScore>-123456789.0</feasableScore>
+ </finish>
+After:
+ <finish>
+ <feasableScore>-123456789</feasableScore>
+ </finish>
+Before with hard and soft score (Note that the hard part started from 1000000):
+ <finish>
+ <feasableScore>-123456789.0</feasableScore>
+ </finish>
+After:
+ <finish>
+ <feasableScore>-123hard/-456789soft</feasableScore>-->
+ </finish>
+
+
+In the *ScoreConfig.xml, you no longer configure a ScoreCalculator,
+but now you configure a ScoreDefinition instead.
+
+Before:
+ <scoreCalculator>
+ <scoreCalculatorType>SIMPLE</scoreCalculatorType>
+ </scoreCalculator>
+After:
+ <scoreDefinition>
+ <scoreDefinitionType>SIMPLE</scoreDefinitionType>
+ </scoreDefinition>
+
+Before:
+ <scoreCalculator>
+ <scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
+ </scoreCalculator>
+After:
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
+
+DYNAMIC_HARD_AND_SOFT_CONSTRAINTS was bugged and has been removed, but will be replaced
+by shiftingPenalty support.
+Before:
+ <scoreCalculator>
+ <scoreCalculatorType>DYNAMIC_HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
+ </scoreCalculator>
+After:
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
More information about the jboss-svn-commits
mailing list