[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