[jboss-svn-commits] JBL Code SVN: r26711 - in labs/jbossrules/trunk/drools-solver: drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator and 4 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun May 24 11:04:42 EDT 2009


Author: ge0ffrey
Date: 2009-05-24 11:04:41 -0400 (Sun, 24 May 2009)
New Revision: 26711

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactoryTest.java
Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/HardPenaltyDeciderScoreComparator.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactory.java
   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
Log:
decider score comparator: hard weight survival ratio

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java	2009-05-24 14:11:07 UTC (rev 26710)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java	2009-05-24 15:04:41 UTC (rev 26711)
@@ -18,7 +18,7 @@
     private Integer successiveNoHardChangeMinimum = null;
     private Integer successiveNoHardChangeMaximum = null;
     private Double successiveNoHardChangeRepetitionMultiplicand = null;
-    private Double hardWeightDegradationRatio = null;
+    private Double hardWeightSurvivalRatio = null;
     private Integer startingHardWeight = null; // TODO determine dynamically
 
     public Class<DeciderScoreComparatorFactory> getDeciderScoreComparatorClass() {
@@ -77,12 +77,12 @@
         this.successiveNoHardChangeRepetitionMultiplicand = successiveNoHardChangeRepetitionMultiplicand;
     }
 
-    public Double getHardWeightDegradationRatio() {
-        return hardWeightDegradationRatio;
+    public Double getHardWeightSurvivalRatio() {
+        return hardWeightSurvivalRatio;
     }
 
-    public void setHardWeightDegradationRatio(Double hardWeightDegradationRatio) {
-        this.hardWeightDegradationRatio = hardWeightDegradationRatio;
+    public void setHardWeightSurvivalRatio(Double hardWeightSurvivalRatio) {
+        this.hardWeightSurvivalRatio = hardWeightSurvivalRatio;
     }
 
     public Integer getStartingHardWeight() {
@@ -128,8 +128,8 @@
                         deciderScoreComparator.setSuccessiveNoHardChangeRepetitionMultiplicand(
                                 successiveNoHardChangeRepetitionMultiplicand);
                     }
-                    if (hardWeightDegradationRatio != null) {
-                        deciderScoreComparator.setHardWeightDegradationRatio(hardWeightDegradationRatio);
+                    if (hardWeightSurvivalRatio != null) {
+                        deciderScoreComparator.setHardWeightSurvivalRatio(hardWeightSurvivalRatio);
                     }
                     if (startingHardWeight != null) {
                         deciderScoreComparator.setStartingHardWeight(startingHardWeight);
@@ -162,8 +162,8 @@
             successiveNoHardChangeRepetitionMultiplicand = inheritedConfig
                     .getSuccessiveNoHardChangeRepetitionMultiplicand();
         }
-        if (hardWeightDegradationRatio == null) {
-            hardWeightDegradationRatio = inheritedConfig.getHardWeightDegradationRatio();
+        if (hardWeightSurvivalRatio == null) {
+            hardWeightSurvivalRatio = inheritedConfig.getHardWeightSurvivalRatio();
         }
         if (startingHardWeight == null) {
             startingHardWeight = inheritedConfig.getStartingHardWeight();

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/HardPenaltyDeciderScoreComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/HardPenaltyDeciderScoreComparator.java	2009-05-24 14:11:07 UTC (rev 26710)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/HardPenaltyDeciderScoreComparator.java	2009-05-24 15:04:41 UTC (rev 26711)
@@ -17,6 +17,10 @@
         this.hardWeight = hardWeight;
     }
 
+    public int getHardWeight() {
+        return hardWeight;
+    }
+
     public int compare(Score s1, Score s2) {
         HardAndSoftScore score1 = (HardAndSoftScore) s1;
         HardAndSoftScore score2 = (HardAndSoftScore) s2;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactory.java	2009-05-24 14:11:07 UTC (rev 26710)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactory.java	2009-05-24 15:04:41 UTC (rev 26711)
@@ -20,7 +20,7 @@
     private int successiveNoHardChangeMinimum = 2;
     private int successiveNoHardChangeMaximum = 20;
     private double successiveNoHardChangeRepetitionMultiplicand = 20.0;
-    private double hardWeightDegradationRatio = 0.2;
+    private double hardWeightSurvivalRatio = 0.8;
 
     private int startingHardWeight = 1000; // TODO determine dynamically
 
@@ -46,8 +46,8 @@
         this.successiveNoHardChangeRepetitionMultiplicand = successiveNoHardChangeRepetitionMultiplicand;
     }
 
-    public void setHardWeightDegradationRatio(double hardWeightDegradationRatio) {
-        this.hardWeightDegradationRatio = hardWeightDegradationRatio;
+    public void setHardWeightSurvivalRatio(double hardWeightSurvivalRatio) {
+        this.hardWeightSurvivalRatio = hardWeightSurvivalRatio;
     }
 
     public void setStartingHardWeight(int startingHardWeight) {
@@ -93,7 +93,7 @@
                     if (successiveNoHardScoreChange == min) {
                         hardWeight = startingHardWeight;
                     } else {
-                        hardWeight *= hardWeightDegradationRatio;
+                        hardWeight *= hardWeightSurvivalRatio;
                     }
                     break;
                 }

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactoryTest.java (from rev 26645, 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/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactoryTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactoryTest.java	2009-05-24 15:04:41 UTC (rev 26711)
@@ -0,0 +1,110 @@
+package org.drools.solver.core.localsearch.decider.deciderscorecomparator;
+
+import junit.framework.TestCase;
+import org.drools.solver.core.localsearch.LocalSearchSolverScope;
+import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.score.DefaultHardAndSoftScore;
+import org.drools.solver.core.score.comparator.NaturalScoreComparator;
+import org.drools.solver.core.score.definition.HardAndSoftScoreDefinition;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ShiftingHardPenaltyDeciderScoreComparatorFactoryTest extends TestCase {
+
+    public void testShiftingPenaltyActiveAndHardWeight() {
+        // Setup
+        ShiftingHardPenaltyDeciderScoreComparatorFactory deciderScoreComparatorFactory
+                = new ShiftingHardPenaltyDeciderScoreComparatorFactory();
+        deciderScoreComparatorFactory.setHardScoreActivationThreshold(-10);
+        deciderScoreComparatorFactory.setSuccessiveNoHardChangeMinimum(1);
+        deciderScoreComparatorFactory.setSuccessiveNoHardChangeMaximum(3);
+        deciderScoreComparatorFactory.setSuccessiveNoHardChangeRepetitionMultiplicand(5.0);
+        deciderScoreComparatorFactory.setHardWeightSurvivalRatio(0.9);
+
+        LocalSearchSolverScope localSearchSolverScope = createLocalSearchSolverScope();
+        deciderScoreComparatorFactory.solvingStarted(localSearchSolverScope);
+        StepScope stepScope = localSearchSolverScope.getLastCompletedStepScope();
+        // Under hardScoreActivationThreshold 1
+        stepScope = nextStepScope(stepScope);
+        deciderScoreComparatorFactory.beforeDeciding(stepScope);
+        assertTrue(deciderScoreComparatorFactory.createDeciderScoreComparator() instanceof NaturalScoreComparator);
+        deciderScoreComparatorFactory.stepDecided(stepScope);
+        stepScope.setScore(DefaultHardAndSoftScore.valueOf(-11, -200));
+        deciderScoreComparatorFactory.stepTaken(stepScope);
+        // Under hardScoreActivationThreshold 2
+        stepScope = nextStepScope(stepScope);
+        deciderScoreComparatorFactory.beforeDeciding(stepScope);
+        assertTrue(deciderScoreComparatorFactory.createDeciderScoreComparator() instanceof NaturalScoreComparator);
+        deciderScoreComparatorFactory.stepDecided(stepScope);
+        stepScope.setScore(DefaultHardAndSoftScore.valueOf(-10, -200));
+        localSearchSolverScope.setBestSolutionStepIndex(stepScope.getStepIndex());
+        deciderScoreComparatorFactory.stepTaken(stepScope);
+        // Above hardScoreActivationThreshold 0
+        stepScope = nextStepScope(stepScope);
+        deciderScoreComparatorFactory.beforeDeciding(stepScope);
+        assertTrue(deciderScoreComparatorFactory.createDeciderScoreComparator() instanceof NaturalScoreComparator);
+        deciderScoreComparatorFactory.stepDecided(stepScope);
+        stepScope.setScore(DefaultHardAndSoftScore.valueOf(-10, -200));
+        deciderScoreComparatorFactory.stepTaken(stepScope);
+        // Above hardScoreActivationThreshold 1
+        stepScope = nextStepScope(stepScope);
+        deciderScoreComparatorFactory.beforeDeciding(stepScope);
+        assertEquals(1000, ((HardPenaltyDeciderScoreComparator)
+                deciderScoreComparatorFactory.createDeciderScoreComparator()).getHardWeight());
+        deciderScoreComparatorFactory.stepDecided(stepScope);
+        stepScope.setScore(DefaultHardAndSoftScore.valueOf(-10, -200));
+        deciderScoreComparatorFactory.stepTaken(stepScope);
+        // Above hardScoreActivationThreshold 2
+        stepScope = nextStepScope(stepScope);
+        deciderScoreComparatorFactory.beforeDeciding(stepScope);
+        assertEquals(900, ((HardPenaltyDeciderScoreComparator)
+                deciderScoreComparatorFactory.createDeciderScoreComparator()).getHardWeight());
+        deciderScoreComparatorFactory.stepDecided(stepScope);
+        stepScope.setScore(DefaultHardAndSoftScore.valueOf(-10, -200));
+        deciderScoreComparatorFactory.stepTaken(stepScope);
+        // Above hardScoreActivationThreshold 3
+        stepScope = nextStepScope(stepScope);
+        deciderScoreComparatorFactory.beforeDeciding(stepScope);
+        assertEquals(810, ((HardPenaltyDeciderScoreComparator)
+                deciderScoreComparatorFactory.createDeciderScoreComparator()).getHardWeight());
+        deciderScoreComparatorFactory.stepDecided(stepScope);
+        stepScope.setScore(DefaultHardAndSoftScore.valueOf(-10, -200));
+        deciderScoreComparatorFactory.stepTaken(stepScope);
+        // Above hardScoreActivationThreshold 4
+        stepScope = nextStepScope(stepScope);
+        deciderScoreComparatorFactory.beforeDeciding(stepScope);
+        assertTrue(deciderScoreComparatorFactory.createDeciderScoreComparator() instanceof NaturalScoreComparator);
+        deciderScoreComparatorFactory.stepDecided(stepScope);
+        stepScope.setScore(DefaultHardAndSoftScore.valueOf(-10, -200));
+        deciderScoreComparatorFactory.stepTaken(stepScope);
+        // Above hardScoreActivationThreshold 5
+        stepScope = nextStepScope(stepScope);
+        deciderScoreComparatorFactory.beforeDeciding(stepScope);
+        assertEquals(1000, ((HardPenaltyDeciderScoreComparator)
+                deciderScoreComparatorFactory.createDeciderScoreComparator()).getHardWeight());
+        deciderScoreComparatorFactory.stepDecided(stepScope);
+        stepScope.setScore(DefaultHardAndSoftScore.valueOf(-10, -200));
+        deciderScoreComparatorFactory.stepTaken(stepScope);
+    }
+
+    private StepScope nextStepScope(StepScope lastStepScope) {
+        StepScope stepScope = new StepScope(lastStepScope.getLocalSearchSolverScope());
+        lastStepScope.getLocalSearchSolverScope().setLastCompletedStepScope(lastStepScope);
+        stepScope.setStepIndex(lastStepScope.getStepIndex() + 1);
+        return stepScope;
+    }
+
+    private LocalSearchSolverScope createLocalSearchSolverScope() {
+        LocalSearchSolverScope localSearchSolverScope = new LocalSearchSolverScope();
+        localSearchSolverScope.setScoreDefinition(new HardAndSoftScoreDefinition());
+        localSearchSolverScope.setBestScore(DefaultHardAndSoftScore.valueOf(-11, -200));
+        localSearchSolverScope.setBestSolutionStepIndex(1000);
+        StepScope lastStepScope = new StepScope(localSearchSolverScope);
+        lastStepScope.setStepIndex(1000);
+        lastStepScope.setScore(DefaultHardAndSoftScore.valueOf(-11, -200));
+        localSearchSolverScope.setLastCompletedStepScope(lastStepScope);
+        return localSearchSolverScope;
+    }
+
+}
\ 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/examinationSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml	2009-05-24 14:11:07 UTC (rev 26710)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml	2009-05-24 15:04:41 UTC (rev 26711)
@@ -69,7 +69,7 @@
                 <successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>
                 <successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>
                 <successiveNoHardChangeRepetitionMultiplicand>20.0</successiveNoHardChangeRepetitionMultiplicand>
-                <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+                <hardWeightSurvivalRatio>0.2</hardWeightSurvivalRatio>
                 <startingHardWeight>1000</startingHardWeight>
             </deciderScoreComparatorFactory>
             <selector>
@@ -106,7 +106,7 @@
                 <successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>
                 <successiveNoHardChangeMaximum>10</successiveNoHardChangeMaximum>
                 <successiveNoHardChangeRepetitionMultiplicand>10.0</successiveNoHardChangeRepetitionMultiplicand>
-                <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+                <hardWeightSurvivalRatio>0.2</hardWeightSurvivalRatio>
                 <startingHardWeight>1000</startingHardWeight>
             </deciderScoreComparatorFactory>
             <selector>
@@ -143,7 +143,7 @@
                 <successiveNoHardChangeMinimum>4</successiveNoHardChangeMinimum>
                 <successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>
                 <successiveNoHardChangeRepetitionMultiplicand>10.0</successiveNoHardChangeRepetitionMultiplicand>
-                <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+                <hardWeightSurvivalRatio>0.2</hardWeightSurvivalRatio>
                 <startingHardWeight>1000</startingHardWeight>
             </deciderScoreComparatorFactory>
             <selector>
@@ -180,7 +180,7 @@
                 <successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>
                 <successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>
                 <successiveNoHardChangeRepetitionMultiplicand>20.0</successiveNoHardChangeRepetitionMultiplicand>
-                <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+                <hardWeightSurvivalRatio>0.2</hardWeightSurvivalRatio>
                 <startingHardWeight>500</startingHardWeight>
             </deciderScoreComparatorFactory>
             <selector>
@@ -217,7 +217,7 @@
                 <successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>
                 <successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>
                 <successiveNoHardChangeRepetitionMultiplicand>20.0</successiveNoHardChangeRepetitionMultiplicand>
-                <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+                <hardWeightSurvivalRatio>0.2</hardWeightSurvivalRatio>
                 <startingHardWeight>1000</startingHardWeight>
             </deciderScoreComparatorFactory>
             <selector>

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-05-24 14:11:07 UTC (rev 26710)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml	2009-05-24 15:04:41 UTC (rev 26711)
@@ -21,7 +21,7 @@
         <!--<successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>-->
         <!--<successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>-->
         <!--<successiveNoHardChangeRepetitionMultiplicand>20.0</successiveNoHardChangeRepetitionMultiplicand>-->
-        <!--<hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>-->
+        <!--<hardWeightSurvivalRatio>0.2</hardWeightSurvivalRatio>-->
         <!--<startingHardWeight>1000</startingHardWeight>-->
     <!--</deciderScoreComparatorFactory>-->
     <selector>




More information about the jboss-svn-commits mailing list