[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