[jboss-svn-commits] JBL Code SVN: r26017 - in labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver: config/score and 8 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Apr 11 04:39:44 EDT 2009
Author: ge0ffrey
Date: 2009-04-11 04:39:44 -0400 (Sat, 11 Apr 2009)
New Revision: 26017
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java
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/localsearch/DefaultLocalSearchSolver.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolver.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/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/finish/FeasableScoreFinish.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
Log:
javadocs and other stuff I could salvage from the score_refactor_attempt_1 trainwreck
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -0,0 +1,76 @@
+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;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("score")
+public class ScoreConfig {
+
+ private Comparable score = null;
+ private ScoreType scoreType = null;
+ private String scoreString;
+
+ public Comparable getScore() {
+ return score;
+ }
+
+ public void setScore(Comparable score) {
+ this.score = score;
+ }
+
+ public ScoreType getScoreType() {
+ return scoreType;
+ }
+
+ public void setScoreType(ScoreType scoreType) {
+ this.scoreType = scoreType;
+ }
+
+ public String getScoreString() {
+ return scoreString;
+ }
+
+ public void setScoreString(String scoreString) {
+ this.scoreString = scoreString;
+ }
+
+ // ************************************************************************
+ // Builder methods
+ // ************************************************************************
+
+ public Comparable buildScore() {
+ if (score != null) {
+ return score;
+ } else if (scoreType != null) {
+ switch (scoreType) {
+ case SIMPLE:
+ return DefaultSimpleScore.valueOf(scoreString);
+ case HARD_AND_SOFT:
+ return DefaultHardAndSoftScore.valueOf(scoreString);
+ default:
+ throw new IllegalStateException("scoreType (" + scoreType + ") not implemented");
+ }
+ } else {
+ return null;
+ }
+ }
+
+ public void inherit(ScoreConfig inheritedConfig) {
+ if (score == null && scoreType == null && scoreString == null) {
+ score = inheritedConfig.getScore();
+ scoreType = inheritedConfig.getScoreType();
+ scoreString = inheritedConfig.getScoreString();
+ }
+ }
+
+ public static enum ScoreType {
+ 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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -3,6 +3,7 @@
import org.drools.solver.core.solution.Solution;
/**
+ * A Solver solves planning problems.
* @author Geoffrey De Smet
*/
public interface Solver {
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -72,22 +72,18 @@
localSearchSolverScope.setWorkingSolution(startingSolution);
}
- // TODO define a better API
public double getBestScore() {
return this.localSearchSolverScope.getBestScore();
}
- // TODO define a better API
public Solution getBestSolution() {
return this.localSearchSolverScope.getBestSolution();
}
- // TODO define a better API
public long getTimeMillisSpend() {
return this.localSearchSolverScope.calculateTimeMillisSpend();
}
- // TODO define a better API
public LocalSearchSolverScope getLocalSearchSolverScope() {
return localSearchSolverScope;
}
@@ -116,7 +112,6 @@
nextStep, decider.getForager().getAcceptedMovesSize()});
stepDecided(stepScope);
nextStep.doMove(stepScope.getWorkingMemory());
-// stepIndex++; // TODO influences
stepTaken(stepScope);
stepScope = createNextStepScope(localSearchSolverScope, stepScope);
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolver.java 2009-04-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolver.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -3,6 +3,8 @@
import org.drools.solver.core.Solver;
/**
+ * A LocalSearchSolver is a Solver which uses a local search algorithm,
+ * such as tabu search, simulated annealing, ...
* @author Geoffrey De Smet
*/
public interface LocalSearchSolver extends Solver {
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/bestsolution/BestSolutionRecaller.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -9,6 +9,7 @@
import org.slf4j.LoggerFactory;
/**
+ * A BestSolutionRecaller remembers the best solution that the LocalSearchSolver encounters.
* @author Geoffrey De Smet
*/
public class BestSolutionRecaller implements LocalSearchSolverAware, LocalSearchSolverLifecycleListener {
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -14,6 +14,7 @@
import org.slf4j.LoggerFactory;
/**
+ * Default implementation of {@link Decider}.
* @author Geoffrey De Smet
*/
public class DefaultDecider implements Decider {
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/AbstractTabuAccepter.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -11,8 +11,11 @@
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.localsearch.decider.accepter.Accepter;
/**
+ * Abstract superclass for all TabuAccepters.
+ * @see Accepter
* @author Geoffrey De Smet
*/
public abstract class AbstractTabuAccepter extends AbstractAccepter {
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -10,6 +10,9 @@
import org.drools.solver.core.move.Move;
/**
+ * An AcceptedForager is a Forager which forages accepted moves and ignores unaccepted moves.
+ * @See Forager
+ * @See Accepter
* @author Geoffrey De Smet
*/
public class AcceptedForager extends AbstractForager {
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/FeasableScoreFinish.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -9,9 +9,6 @@
public class FeasableScoreFinish extends AbstractFinish {
private double feasableScore;
-
- private double startingScore;
- private double feasableDelta;
public void setFeasableScore(double feasableScore) {
this.feasableScore = feasableScore;
@@ -21,22 +18,22 @@
// Worker methods
// ************************************************************************
- @Override
- public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
- startingScore = localSearchSolverScope.getStartingScore();
- feasableDelta = startingScore - feasableScore;
- }
-
public boolean isFinished(StepScope stepScope) {
double bestScore = stepScope.getLocalSearchSolverScope().getBestScore();
return bestScore >= feasableScore;
}
public double calculateTimeGradient(StepScope stepScope) {
- double stepScore = stepScope.getLocalSearchSolverScope().getLastCompletedStepScope().getScore();
- double stepDelta = startingScore - stepScore;
- double timeGradient = stepDelta / feasableDelta;
- return Math.min(timeGradient, 1.0);
+ 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);
+ }
}
}
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/HardAndSoftScoreComparator.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -14,12 +14,17 @@
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) {
@@ -73,19 +78,23 @@
return perfectScore;
}
+ public HardAndSoftScore getWorstScore() {
+ return worstScore;
+ }
+
public double calculateTimeGradient(HardAndSoftScore startScore, HardAndSoftScore endScore,
HardAndSoftScore score) {
double timeGradient = 0.0;
int totalHardScore = Math.max(0, endScore.getHardScore() - startScore.getHardScore());
if (totalHardScore > 0) {
- int hardScoreDelta = Math.max(0, score.getHardScore() - startScore.getHardScore());
- double hardTimeGradient = Math.min(1.0, (double) hardScoreDelta / (double) totalHardScore);
+ int deltaHardScore = Math.max(0, score.getHardScore() - startScore.getHardScore());
+ double hardTimeGradient = Math.min(1.0, (double) deltaHardScore / (double) totalHardScore);
timeGradient += (hardTimeGradient * hardScoreTimeGradientWeight);
}
int totalSoftScore = Math.max(0, endScore.getSoftScore() - startScore.getSoftScore());
if (totalSoftScore > 0) {
- int softScoreDelta = Math.max(0, score.getSoftScore() - startScore.getSoftScore());
- double softTimeGradient = Math.min(1.0, (double) softScoreDelta / (double) totalSoftScore);
+ int deltaSoftScore = Math.max(0, score.getSoftScore() - startScore.getSoftScore());
+ double softTimeGradient = Math.min(1.0, (double) deltaSoftScore / (double) totalSoftScore);
timeGradient += (softTimeGradient * (1.0 - hardScoreTimeGradientWeight));
}
return timeGradient;
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/ScoreComparator.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -65,6 +65,16 @@
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-11 00:20:49 UTC (rev 26016)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/SimpleScoreComparator.java 2009-04-11 08:39:44 UTC (rev 26017)
@@ -14,11 +14,16 @@
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
// ************************************************************************
@@ -60,12 +65,16 @@
return perfectScore;
}
+ public SimpleScore getWorstScore() {
+ return worstScore;
+ }
+
public double calculateTimeGradient(SimpleScore startScore, SimpleScore endScore, SimpleScore score) {
double timeGradient = 0.0;
- int totalSoftScore = Math.max(0, endScore.getScore() - startScore.getScore());
- if (totalSoftScore > 0) {
- int softScoreDelta = Math.max(0, score.getScore() - startScore.getScore());
- timeGradient = Math.min(1.0, (double) softScoreDelta / (double) totalSoftScore);
+ int totalScore = Math.max(0, endScore.getScore() - startScore.getScore());
+ if (totalScore > 0) {
+ int deltaScore = Math.max(0, score.getScore() - startScore.getScore());
+ timeGradient = Math.min(1.0, (double) deltaScore / (double) totalScore);
}
return timeGradient;
}
More information about the jboss-svn-commits
mailing list