[jboss-svn-commits] JBL Code SVN: r26709 - in labs/jbossrules/trunk/drools-solver: drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider and 14 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun May 24 09:47:50 EDT 2009
Author: ge0ffrey
Date: 2009-05-24 09:47:49 -0400 (Sun, 24 May 2009)
New Revision: 26709
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/
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/DeciderAware.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/AbstractDeciderScoreComparatorFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactory.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/NaturalDeciderScoreComparator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/NaturalDeciderScoreComparatorFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactory.java
Removed:
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
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/decider/forager/ForagerConfig.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/decider/Decider.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/AbstractAccepter.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/Accepter.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/forager/AcceptedMoveScopeComparator.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractSelector.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CompositeSelector.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactorySelector.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/Selector.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/move/factory/AbstractMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/MoveFactory.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-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 + shifting hard penalty
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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -16,6 +16,7 @@
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.decider.deciderscorecomparator.DeciderScoreComparatorFactoryConfig;
import org.drools.solver.config.localsearch.finish.FinishConfig;
import org.drools.solver.config.score.definition.ScoreDefinitionConfig;
import org.drools.solver.core.localsearch.DefaultLocalSearchSolver;
@@ -45,6 +46,9 @@
@XStreamAlias("finish")
private FinishConfig finishConfig = new FinishConfig(); // TODO this new is pointless due to xstream
+ @XStreamAlias("deciderScoreComparatorFactory")
+ private DeciderScoreComparatorFactoryConfig deciderScoreComparatorFactoryConfig
+ = new DeciderScoreComparatorFactoryConfig();
@XStreamAlias("selector")
private SelectorConfig selectorConfig = new SelectorConfig();
@XStreamAlias("accepter")
@@ -100,6 +104,15 @@
this.finishConfig = finishConfig;
}
+ public DeciderScoreComparatorFactoryConfig getDeciderScoreComparatorFactoryConfig() {
+ return deciderScoreComparatorFactoryConfig;
+ }
+
+ public void setDeciderScoreComparatorFactoryConfig(
+ DeciderScoreComparatorFactoryConfig deciderScoreComparatorFactoryConfig) {
+ this.deciderScoreComparatorFactoryConfig = deciderScoreComparatorFactoryConfig;
+ }
+
public SelectorConfig getSelectorConfig() {
return selectorConfig;
}
@@ -196,6 +209,7 @@
private Decider buildDecider() {
DefaultDecider decider = new DefaultDecider();
+ decider.setDeciderScoreComparator(deciderScoreComparatorFactoryConfig.buildDeciderScoreComparatorFactory());
decider.setSelector(selectorConfig.buildSelector());
decider.setAccepter(accepterConfig.buildAccepter());
decider.setForager(foragerConfig.buildForager());
@@ -232,6 +246,11 @@
} else if (inheritedConfig.getFinishConfig() != null) {
finishConfig.inherit(inheritedConfig.getFinishConfig());
}
+ if (deciderScoreComparatorFactoryConfig == null) {
+ deciderScoreComparatorFactoryConfig = inheritedConfig.getDeciderScoreComparatorFactoryConfig();
+ } else if (inheritedConfig.getDeciderScoreComparatorFactoryConfig() != null) {
+ deciderScoreComparatorFactoryConfig.inherit(inheritedConfig.getDeciderScoreComparatorFactoryConfig());
+ }
if (selectorConfig == null) {
selectorConfig = inheritedConfig.getSelectorConfig();
} else if (inheritedConfig.getSelectorConfig() != null) {
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java (from rev 26379, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/forager/ForagerConfig.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -0,0 +1,178 @@
+package org.drools.solver.config.localsearch.decider.deciderscorecomparator;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.drools.solver.core.localsearch.decider.deciderscorecomparator.DeciderScoreComparatorFactory;
+import org.drools.solver.core.localsearch.decider.deciderscorecomparator.NaturalDeciderScoreComparatorFactory;
+import org.drools.solver.core.localsearch.decider.deciderscorecomparator.ShiftingHardPenaltyDeciderScoreComparatorFactory;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("deciderScoreComparatorFactory")
+public class DeciderScoreComparatorFactoryConfig {
+
+ private Class<DeciderScoreComparatorFactory> deciderScoreComparatorClass = null;
+ private DeciderScoreComparatorFactoryType deciderScoreComparatorFactoryType = null;
+
+ private Integer hardScoreActivationThreshold = null;
+ private Integer successiveNoHardChangeMinimum = null;
+ private Integer successiveNoHardChangeMaximum = null;
+ private Double successiveNoHardChangeRepetitionMultiplicand = null;
+ private Double hardWeightDegradationRatio = null;
+ private Integer startingHardWeight = null; // TODO determine dynamically
+
+ public Class<DeciderScoreComparatorFactory> getDeciderScoreComparatorClass() {
+ return deciderScoreComparatorClass;
+ }
+
+ public void setDeciderScoreComparatorClass(Class<DeciderScoreComparatorFactory> deciderScoreComparatorClass) {
+ this.deciderScoreComparatorClass = deciderScoreComparatorClass;
+ }
+
+ public DeciderScoreComparatorFactoryType getForagerType() {
+ return deciderScoreComparatorFactoryType;
+ }
+
+ public void setForagerType(DeciderScoreComparatorFactoryType deciderScoreComparatorFactoryType) {
+ this.deciderScoreComparatorFactoryType = deciderScoreComparatorFactoryType;
+ }
+
+ public DeciderScoreComparatorFactoryType getDeciderScoreComparatorFactoryType() {
+ return deciderScoreComparatorFactoryType;
+ }
+
+ public void setDeciderScoreComparatorFactoryType(DeciderScoreComparatorFactoryType deciderScoreComparatorFactoryType) {
+ this.deciderScoreComparatorFactoryType = deciderScoreComparatorFactoryType;
+ }
+
+ public Integer getHardScoreActivationThreshold() {
+ return hardScoreActivationThreshold;
+ }
+
+ public void setHardScoreActivationThreshold(Integer hardScoreActivationThreshold) {
+ this.hardScoreActivationThreshold = hardScoreActivationThreshold;
+ }
+
+ public Integer getSuccessiveNoHardChangeMinimum() {
+ return successiveNoHardChangeMinimum;
+ }
+
+ public void setSuccessiveNoHardChangeMinimum(Integer successiveNoHardChangeMinimum) {
+ this.successiveNoHardChangeMinimum = successiveNoHardChangeMinimum;
+ }
+
+ public Integer getSuccessiveNoHardChangeMaximum() {
+ return successiveNoHardChangeMaximum;
+ }
+
+ public void setSuccessiveNoHardChangeMaximum(Integer successiveNoHardChangeMaximum) {
+ this.successiveNoHardChangeMaximum = successiveNoHardChangeMaximum;
+ }
+
+ public Double getSuccessiveNoHardChangeRepetitionMultiplicand() {
+ return successiveNoHardChangeRepetitionMultiplicand;
+ }
+
+ public void setSuccessiveNoHardChangeRepetitionMultiplicand(Double successiveNoHardChangeRepetitionMultiplicand) {
+ this.successiveNoHardChangeRepetitionMultiplicand = successiveNoHardChangeRepetitionMultiplicand;
+ }
+
+ public Double getHardWeightDegradationRatio() {
+ return hardWeightDegradationRatio;
+ }
+
+ public void setHardWeightDegradationRatio(Double hardWeightDegradationRatio) {
+ this.hardWeightDegradationRatio = hardWeightDegradationRatio;
+ }
+
+ public Integer getStartingHardWeight() {
+ return startingHardWeight;
+ }
+
+ public void setStartingHardWeight(Integer startingHardWeight) {
+ this.startingHardWeight = startingHardWeight;
+ }
+
+ // ************************************************************************
+ // Builder methods
+ // ************************************************************************
+
+ public DeciderScoreComparatorFactory buildDeciderScoreComparatorFactory() {
+ if (deciderScoreComparatorClass != null) {
+ try {
+ return deciderScoreComparatorClass.newInstance();
+ } catch (InstantiationException e) {
+ throw new IllegalArgumentException("deciderScoreComparatorClass ("
+ + deciderScoreComparatorClass.getName() + ") does not have a public no-arg constructor", e);
+ } catch (IllegalAccessException e) {
+ throw new IllegalArgumentException("deciderScoreComparatorClass ("
+ + deciderScoreComparatorClass.getName() + ") does not have a public no-arg constructor", e);
+ }
+ } else if (deciderScoreComparatorFactoryType != null) {
+ switch (deciderScoreComparatorFactoryType) {
+ case NATURAL:
+ return new NaturalDeciderScoreComparatorFactory();
+ case SHIFTING_HARD_PENALTY:
+ ShiftingHardPenaltyDeciderScoreComparatorFactory deciderScoreComparator
+ = new ShiftingHardPenaltyDeciderScoreComparatorFactory();
+ if (hardScoreActivationThreshold != null) {
+ deciderScoreComparator.setHardScoreActivationThreshold(hardScoreActivationThreshold);
+ }
+ if (successiveNoHardChangeMinimum != null) {
+ deciderScoreComparator.setSuccessiveNoHardChangeMinimum(successiveNoHardChangeMinimum);
+ }
+ if (successiveNoHardChangeMaximum != null) {
+ deciderScoreComparator.setSuccessiveNoHardChangeMaximum(successiveNoHardChangeMaximum);
+ }
+ if (successiveNoHardChangeRepetitionMultiplicand != null) {
+ deciderScoreComparator.setSuccessiveNoHardChangeRepetitionMultiplicand(
+ successiveNoHardChangeRepetitionMultiplicand);
+ }
+ if (hardWeightDegradationRatio != null) {
+ deciderScoreComparator.setHardWeightDegradationRatio(hardWeightDegradationRatio);
+ }
+ if (startingHardWeight != null) {
+ deciderScoreComparator.setStartingHardWeight(startingHardWeight);
+ }
+ return deciderScoreComparator;
+ default:
+ throw new IllegalStateException("deciderScoreComparatorFactoryType ("
+ + deciderScoreComparatorFactoryType + ") not implemented");
+ }
+ } else {
+ return new NaturalDeciderScoreComparatorFactory();
+ }
+ }
+
+ public void inherit(DeciderScoreComparatorFactoryConfig inheritedConfig) {
+ if (deciderScoreComparatorClass == null && deciderScoreComparatorFactoryType == null) {
+ deciderScoreComparatorClass = inheritedConfig.getDeciderScoreComparatorClass();
+ deciderScoreComparatorFactoryType = inheritedConfig.getForagerType();
+ }
+ if (hardScoreActivationThreshold == null) {
+ hardScoreActivationThreshold = inheritedConfig.getHardScoreActivationThreshold();
+ }
+ if (successiveNoHardChangeMinimum == null) {
+ successiveNoHardChangeMinimum = inheritedConfig.getSuccessiveNoHardChangeMinimum();
+ }
+ if (successiveNoHardChangeMaximum == null) {
+ successiveNoHardChangeMaximum = inheritedConfig.getSuccessiveNoHardChangeMaximum();
+ }
+ if (successiveNoHardChangeRepetitionMultiplicand == null) {
+ successiveNoHardChangeRepetitionMultiplicand = inheritedConfig
+ .getSuccessiveNoHardChangeRepetitionMultiplicand();
+ }
+ if (hardWeightDegradationRatio == null) {
+ hardWeightDegradationRatio = inheritedConfig.getHardWeightDegradationRatio();
+ }
+ if (startingHardWeight == null) {
+ startingHardWeight = inheritedConfig.getStartingHardWeight();
+ }
+ }
+
+ public static enum DeciderScoreComparatorFactoryType {
+ NATURAL,
+ SHIFTING_HARD_PENALTY
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/forager/ForagerConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/forager/ForagerConfig.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/forager/ForagerConfig.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -11,7 +11,7 @@
@XStreamAlias("forager")
public class ForagerConfig {
- private Forager forager = null;
+ private Forager forager = null; // TODO remove this and document extending ForagerConfig
private Class<Forager> foragerClass = null;
private ForagerType foragerType = null;
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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/StepScope.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -1,6 +1,7 @@
package org.drools.solver.core.localsearch;
import java.util.Random;
+import java.util.Comparator;
import org.drools.WorkingMemory;
import org.drools.solver.core.move.Move;
@@ -16,6 +17,7 @@
private int stepIndex = -1;
private double timeGradient = Double.NaN;
+ private Comparator<Score> deciderScoreComparator;
private Move step = null;
private Move undoStep = null;
private Score score = null;
@@ -45,6 +47,14 @@
this.timeGradient = timeGradient;
}
+ public Comparator<Score> getDeciderScoreComparator() {
+ return deciderScoreComparator;
+ }
+
+ public void setDeciderScoreComparator(Comparator<Score> deciderScoreComparator) {
+ this.deciderScoreComparator = deciderScoreComparator;
+ }
+
public Move getStep() {
return step;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -4,6 +4,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
import org.drools.solver.core.localsearch.StepScope;
import org.drools.solver.core.localsearch.decider.forager.Forager;
+import org.drools.solver.core.localsearch.decider.deciderscorecomparator.DeciderScoreComparatorFactory;
/**
* A decider decides the next step.
@@ -12,8 +13,20 @@
*/
public interface Decider extends LocalSearchSolverAware, LocalSearchSolverLifecycleListener {
+ /**
+ * Decides the next step
+ * @param stepScope never null
+ */
void decideNextStep(StepScope stepScope);
+ /**
+ * @return never null
+ */
+ DeciderScoreComparatorFactory getDeciderScoreComparator();
+
+ /**
+ * @return never null
+ */
Forager getForager();
}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DeciderAware.java (from rev 26379, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverAware.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DeciderAware.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DeciderAware.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -0,0 +1,12 @@
+package org.drools.solver.core.localsearch.decider;
+
+import org.drools.solver.core.localsearch.LocalSearchSolver;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public interface DeciderAware {
+
+ void setDecider(Decider decider);
+
+}
\ No newline at end of file
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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -9,6 +9,7 @@
import org.drools.solver.core.localsearch.decider.accepter.Accepter;
import org.drools.solver.core.localsearch.decider.forager.Forager;
import org.drools.solver.core.localsearch.decider.selector.Selector;
+import org.drools.solver.core.localsearch.decider.deciderscorecomparator.DeciderScoreComparatorFactory;
import org.drools.solver.core.move.Move;
import org.drools.solver.core.score.Score;
import org.slf4j.Logger;
@@ -24,6 +25,7 @@
protected LocalSearchSolver localSearchSolver;
+ protected DeciderScoreComparatorFactory deciderScoreComparatorFactory;
protected Selector selector;
protected Accepter accepter;
protected Forager forager;
@@ -32,11 +34,19 @@
public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
this.localSearchSolver = localSearchSolver;
- selector.setLocalSearchSolver(localSearchSolver);
}
+ public DeciderScoreComparatorFactory getDeciderScoreComparator() {
+ return deciderScoreComparatorFactory;
+ }
+
+ public void setDeciderScoreComparator(DeciderScoreComparatorFactory deciderScoreComparator) {
+ this.deciderScoreComparatorFactory = deciderScoreComparator;
+ }
+
public void setSelector(Selector selector) {
this.selector = selector;
+ selector.setDecider(this);
}
public void setAccepter(Accepter accepter) {
@@ -60,18 +70,21 @@
// ************************************************************************
public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
+ deciderScoreComparatorFactory.solvingStarted(localSearchSolverScope);
selector.solvingStarted(localSearchSolverScope);
accepter.solvingStarted(localSearchSolverScope);
forager.solvingStarted(localSearchSolverScope);
}
public void beforeDeciding(StepScope stepScope) {
+ deciderScoreComparatorFactory.beforeDeciding(stepScope);
selector.beforeDeciding(stepScope);
accepter.beforeDeciding(stepScope);
forager.beforeDeciding(stepScope);
}
public void decideNextStep(StepScope stepScope) {
+ stepScope.setDeciderScoreComparator(deciderScoreComparatorFactory.createDeciderScoreComparator());
WorkingMemory workingMemory = stepScope.getWorkingMemory();
List<Move> moveList = selector.selectMoveList(stepScope);
for (Move move : moveList) {
@@ -125,18 +138,21 @@
}
public void stepDecided(StepScope stepScope) {
+ deciderScoreComparatorFactory.stepDecided(stepScope);
selector.stepDecided(stepScope);
accepter.stepDecided(stepScope);
forager.stepDecided(stepScope);
}
public void stepTaken(StepScope stepScope) {
+ deciderScoreComparatorFactory.stepTaken(stepScope);
selector.stepTaken(stepScope);
accepter.stepTaken(stepScope);
forager.stepTaken(stepScope);
}
public void solvingEnded(LocalSearchSolverScope localSearchSolverScope) {
+ deciderScoreComparatorFactory.solvingEnded(localSearchSolverScope);
selector.solvingEnded(localSearchSolverScope);
accepter.solvingEnded(localSearchSolverScope);
forager.solvingEnded(localSearchSolverScope);
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/AbstractAccepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/AbstractAccepter.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/AbstractAccepter.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -2,6 +2,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.localsearch.decider.Decider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/Accepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/Accepter.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/Accepter.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -2,6 +2,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
import org.drools.solver.core.localsearch.decider.MoveScope;
+import org.drools.solver.core.localsearch.decider.DeciderAware;
/**
* An Accepter accepts or rejects a selected move for the 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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/tabu/AbstractTabuAccepter.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -77,10 +77,13 @@
// The move isn't tabu at all
return 1.0;
}
- if (aspirationEnabled
- && moveScope.getScore().compareTo(moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()) > 0) {
- logger.debug(" Proposed move ({}) is tabu, but aspiration undoes its tabu.", moveScope.getMove());
- return 1.0;
+ if (aspirationEnabled) {
+ // Doesn't use the deciderScoreComparator because shifting penalties don't apply
+ if (moveScope.getScore().compareTo(
+ moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()) > 0) {
+ logger.debug(" Proposed move ({}) is tabu, but aspiration undoes its tabu.", moveScope.getMove());
+ return 1.0;
+ }
}
int tabuStepCount = moveScope.getStepScope().getStepIndex() - maximumTabuStepIndex - 1;
if (tabuStepCount < completeTabuSize) {
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/AbstractDeciderScoreComparatorFactory.java (from rev 26379, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/AbstractAccepter.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/AbstractDeciderScoreComparatorFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/AbstractDeciderScoreComparatorFactory.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -0,0 +1,42 @@
+package org.drools.solver.core.localsearch.decider.deciderscorecomparator;
+
+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;
+
+/**
+ * Abstract superclass for {@link DeciderScoreComparatorFactory}.
+ * @see DeciderScoreComparatorFactory
+ * @author Geoffrey De Smet
+ */
+public abstract class AbstractDeciderScoreComparatorFactory implements DeciderScoreComparatorFactory {
+
+ protected final transient Logger logger = LoggerFactory.getLogger(getClass());
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+ public void beforeDeciding(StepScope stepScope) {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+ public void stepDecided(StepScope stepScope) {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+ public void stepTaken(StepScope stepScope) {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+ public void solvingEnded(LocalSearchSolverScope localSearchSolverScope) {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactory.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -0,0 +1,22 @@
+package org.drools.solver.core.localsearch.decider.deciderscorecomparator;
+
+import java.util.Comparator;
+
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
+
+/**
+ * A DeciderScoreComparatorFactory creates a new DeciderScoreComparator each step,
+ * which compares 2 scores to decide the next step.
+ * That Score Comparator can consider shifting penalty, aging penalty, ...
+ * in which case it differs from the natural ordering of scores.
+ * @author Geoffrey De Smet
+ */
+public interface DeciderScoreComparatorFactory extends LocalSearchSolverLifecycleListener {
+
+ /**
+ * @return never null
+ */
+ Comparator<Score> createDeciderScoreComparator();
+
+}
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/HardPenaltyDeciderScoreComparator.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -0,0 +1,28 @@
+package org.drools.solver.core.localsearch.decider.deciderscorecomparator;
+
+import java.util.Comparator;
+
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.HardAndSoftScore;
+
+/**
+ * Compares 2 HardAndSoftScore based on the calculation the hard multiplied by a weight to the soft.
+* @author Geoffrey De Smet
+*/
+public class HardPenaltyDeciderScoreComparator implements Comparator<Score> {
+
+ private int hardWeight;
+
+ public HardPenaltyDeciderScoreComparator(int hardWeight) {
+ this.hardWeight = hardWeight;
+ }
+
+ public int compare(Score s1, Score s2) {
+ HardAndSoftScore score1 = (HardAndSoftScore) s1;
+ HardAndSoftScore score2 = (HardAndSoftScore) s2;
+ int score1Side = score1.getHardScore() * hardWeight + score1.getSoftScore();
+ int score2Side = score2.getHardScore() * hardWeight + score2.getSoftScore();
+ return score1Side < score2Side ? -1 : (score1Side == score2Side ? 0 : 1);
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/NaturalDeciderScoreComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/NaturalDeciderScoreComparator.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/NaturalDeciderScoreComparator.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -0,0 +1,17 @@
+package org.drools.solver.core.localsearch.decider.deciderscorecomparator;
+
+import java.util.Comparator;
+
+import org.drools.solver.core.score.Score;
+
+/**
+ * Compares by the natural order of scores.
+ * @author Geoffrey De Smet
+ */
+public class NaturalDeciderScoreComparator implements Comparator<Score> {
+
+ public int compare(Score score1, Score score2) {
+ return score1.compareTo(score2);
+ }
+
+}
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/NaturalDeciderScoreComparatorFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/NaturalDeciderScoreComparatorFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/NaturalDeciderScoreComparatorFactory.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -0,0 +1,21 @@
+package org.drools.solver.core.localsearch.decider.deciderscorecomparator;
+
+import java.util.Comparator;
+
+import org.drools.solver.core.score.Score;
+
+/**
+ * Implementation of {@link DeciderScoreComparatorFactory}.
+ * Compares by the natural order of scores.
+ * @see DeciderScoreComparatorFactory
+ * @author Geoffrey De Smet
+ */
+public class NaturalDeciderScoreComparatorFactory extends AbstractDeciderScoreComparatorFactory {
+
+ private Comparator<Score> naturalDeciderScoreComparator = new NaturalDeciderScoreComparator();
+
+ public Comparator<Score> createDeciderScoreComparator() {
+ return naturalDeciderScoreComparator;
+ }
+
+}
\ No newline at end of file
Added: 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 (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/deciderscorecomparator/ShiftingHardPenaltyDeciderScoreComparatorFactory.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -0,0 +1,113 @@
+package org.drools.solver.core.localsearch.decider.deciderscorecomparator;
+
+import java.util.Comparator;
+
+import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.localsearch.LocalSearchSolverScope;
+import org.drools.solver.core.score.HardAndSoftScore;
+import org.drools.solver.core.score.Score;
+
+/**
+ * Implementation of {@link HardAndSoftScore}.
+ * Compares by
+ * @see DeciderScoreComparatorFactory
+ * @author Geoffrey De Smet
+ */
+public class ShiftingHardPenaltyDeciderScoreComparatorFactory extends AbstractDeciderScoreComparatorFactory {
+
+ private int hardScoreActivationThreshold = 0;
+ private int successiveNoHardChangeMinimum = 2;
+ private int successiveNoHardChangeMaximum = 20;
+ private double successiveNoHardChangeRepetitionMultiplicand = 20.0;
+ private double hardWeightDegradationRatio = 0.2;
+
+ private int startingHardWeight = 1000; // TODO determine dynamically
+
+ private int successiveNoHardScoreChange;
+ private boolean shiftingPenaltyActive;
+ private int hardWeight;
+
+ private Comparator<Score> naturalDeciderScoreComparator = new NaturalDeciderScoreComparator();
+
+ public void setHardScoreActivationThreshold(int hardScoreActivationThreshold) {
+ this.hardScoreActivationThreshold = hardScoreActivationThreshold;
+ }
+
+ public void setSuccessiveNoHardChangeMinimum(int successiveNoHardChangeMinimum) {
+ this.successiveNoHardChangeMinimum = successiveNoHardChangeMinimum;
+ }
+
+ public void setSuccessiveNoHardChangeMaximum(int successiveNoHardChangeMaximum) {
+ this.successiveNoHardChangeMaximum = successiveNoHardChangeMaximum;
+ }
+
+ public void setSuccessiveNoHardChangeRepetitionMultiplicand(double successiveNoHardChangeRepetitionMultiplicand) {
+ this.successiveNoHardChangeRepetitionMultiplicand = successiveNoHardChangeRepetitionMultiplicand;
+ }
+
+ public void setHardWeightDegradationRatio(double hardWeightDegradationRatio) {
+ this.hardWeightDegradationRatio = hardWeightDegradationRatio;
+ }
+
+ public void setStartingHardWeight(int startingHardWeight) {
+ this.startingHardWeight = startingHardWeight;
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ @Override
+ public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
+ successiveNoHardScoreChange = 0;
+ shiftingPenaltyActive = false;
+ }
+
+ @Override
+ public void stepTaken(StepScope stepScope) {
+ if (stepScope.getStepIndex() == stepScope.getLocalSearchSolverScope().getBestSolutionStepIndex()) {
+ successiveNoHardScoreChange = 0;
+ shiftingPenaltyActive = false;
+ } else {
+ HardAndSoftScore lastStepScore = (HardAndSoftScore) stepScope.getLocalSearchSolverScope()
+ .getLastCompletedStepScope().getScore();
+ HardAndSoftScore stepScore = (HardAndSoftScore) stepScope.getScore();
+ if (stepScore.getHardScore() >= hardScoreActivationThreshold
+ && lastStepScore.getHardScore() == stepScore.getHardScore()) {
+ successiveNoHardScoreChange++;
+ } else {
+ successiveNoHardScoreChange--;
+ if (successiveNoHardScoreChange < 0) {
+ successiveNoHardScoreChange = 0;
+ }
+ }
+ int min = successiveNoHardChangeMinimum;
+ int max = successiveNoHardChangeMaximum;
+ while (true) {
+ if (successiveNoHardScoreChange < min) {
+ shiftingPenaltyActive = false;
+ break;
+ } else if (successiveNoHardScoreChange <= max) {
+ shiftingPenaltyActive = true;
+ if (successiveNoHardScoreChange == min) {
+ hardWeight = startingHardWeight;
+ } else {
+ hardWeight *= hardWeightDegradationRatio;
+ }
+ break;
+ }
+ min *= successiveNoHardChangeRepetitionMultiplicand;
+ max *= successiveNoHardChangeRepetitionMultiplicand;
+ }
+ }
+ }
+
+ public Comparator<Score> createDeciderScoreComparator() {
+ if (shiftingPenaltyActive) {
+ return new HardPenaltyDeciderScoreComparator(hardWeight);
+ } else {
+ return naturalDeciderScoreComparator;
+ }
+ }
+
+}
\ No newline at end of file
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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -21,7 +21,7 @@
// final to allow better hotspot optimization. TODO prove that it indeed makes a difference
protected final PickEarlyByScore pickEarlyByScore;
protected final boolean pickEarlyRandomly;
- protected final AcceptedMoveScopeComparator acceptionComparator;
+ protected final AcceptedMoveScopeComparator acceptedMoveScopeComparator;
protected List<MoveScope> acceptedList;
protected boolean listSorted;
@@ -39,10 +39,10 @@
}
public AcceptedForager(PickEarlyByScore pickEarlyByScore, boolean pickEarlyRandomly,
- AcceptedMoveScopeComparator acceptionComparator) {
+ AcceptedMoveScopeComparator acceptedMoveScopeComparator) {
this.pickEarlyByScore = pickEarlyByScore;
this.pickEarlyRandomly = pickEarlyRandomly;
- this.acceptionComparator = acceptionComparator;
+ this.acceptedMoveScopeComparator = acceptedMoveScopeComparator;
}
// ************************************************************************
@@ -51,6 +51,7 @@
@Override
public void beforeDeciding(StepScope stepScope) {
+ acceptedMoveScopeComparator.setDeciderScoreComparator(stepScope.getDeciderScoreComparator());
acceptedList = new ArrayList<MoveScope>(); // TODO use size of moveList in decider
listSorted = false;
maxScore = stepScope.getLocalSearchSolverScope().getScoreDefinition().getPerfectMinimumScore();
@@ -70,13 +71,15 @@
case NONE:
break;
case FIRST_BEST_SCORE_IMPROVING:
- if (moveScope.getScore().compareTo(moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()) > 0) {
+ if (moveScope.getStepScope().getDeciderScoreComparator().compare(moveScope.getScore(),
+ moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()) > 0) {
earlyPickedMoveScope = moveScope;
}
break;
case FIRST_LAST_STEP_SCORE_IMPROVING:
- if (moveScope.getScore().compareTo(moveScope.getStepScope().getLocalSearchSolverScope()
- .getLastCompletedStepScope().getScore()) > 0) {
+ if (moveScope.getStepScope().getDeciderScoreComparator().compare(moveScope.getScore(),
+ moveScope.getStepScope().getLocalSearchSolverScope().getLastCompletedStepScope().getScore())
+ > 0) {
earlyPickedMoveScope = moveScope;
}
break;
@@ -98,7 +101,7 @@
protected void addMoveScopeToAcceptedList(MoveScope moveScope) {
acceptedList.add(moveScope);
listSorted = false;
- if (moveScope.getScore().compareTo(maxScore) > 0) {
+ if (moveScope.getStepScope().getDeciderScoreComparator().compare(moveScope.getScore(), maxScore) > 0) {
acceptChanceMaxScoreTotal = moveScope.getAcceptChance();
maxScore = moveScope.getScore();
} else if (moveScope.getScore().equals(maxScore)) {
@@ -163,7 +166,7 @@
protected void sortAcceptedList() {
if (!listSorted) {
- Collections.sort(acceptedList, acceptionComparator);
+ Collections.sort(acceptedList, acceptedMoveScopeComparator);
listSorted = true;
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedMoveScopeComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedMoveScopeComparator.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedMoveScopeComparator.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -4,15 +4,27 @@
import org.apache.commons.lang.builder.CompareToBuilder;
import org.drools.solver.core.localsearch.decider.MoveScope;
+import org.drools.solver.core.localsearch.decider.deciderscorecomparator.DeciderScoreComparatorFactory;
+import org.drools.solver.core.score.Score;
/**
* @author Geoffrey De Smet
*/
public class AcceptedMoveScopeComparator implements Comparator<MoveScope> {
+ private Comparator<? extends Score> deciderScoreComparator;
+
+ public void setDeciderScoreComparator(Comparator<? extends Score> deciderScoreComparator) {
+ this.deciderScoreComparator = deciderScoreComparator;
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
public int compare(MoveScope a, MoveScope b) {
CompareToBuilder compareToBuilder = new CompareToBuilder();
- compareToBuilder.append(a.getScore(), b.getScore());
+ compareToBuilder.append(a.getScore(), b.getScore(), deciderScoreComparator);
compareToBuilder.append(a.getAcceptChance(), b.getAcceptChance());
// moves are not compared
return compareToBuilder.toComparison();
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -5,6 +5,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
import org.drools.solver.core.localsearch.StepScope;
import org.drools.solver.core.localsearch.decider.MoveScope;
+import org.drools.solver.core.localsearch.decider.DeciderAware;
import org.drools.solver.core.move.Move;
/**
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractSelector.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractSelector.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractSelector.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -3,6 +3,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolver;
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.localsearch.decider.Decider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -15,10 +16,10 @@
protected final transient Logger logger = LoggerFactory.getLogger(getClass());
- protected LocalSearchSolver localSearchSolver;
+ protected Decider decider;
- public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
- this.localSearchSolver = localSearchSolver;
+ public void setDecider(Decider decider) {
+ this.decider = decider;
}
// ************************************************************************
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CompositeSelector.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CompositeSelector.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CompositeSelector.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -6,6 +6,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolver;
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.localsearch.decider.Decider;
import org.drools.solver.core.move.Move;
/**
@@ -21,10 +22,10 @@
}
@Override
- public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
- super.setLocalSearchSolver(localSearchSolver);
+ public void setDecider(Decider decider) {
+ super.setDecider(decider);
for (Selector selector : selectorList) {
- selector.setLocalSearchSolver(localSearchSolver);
+ selector.setDecider(decider);
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactorySelector.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactorySelector.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactorySelector.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -6,6 +6,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolver;
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.localsearch.decider.Decider;
import org.drools.solver.core.move.Move;
import org.drools.solver.core.move.factory.MoveFactory;
@@ -35,9 +36,10 @@
}
}
- public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
- super.setLocalSearchSolver(localSearchSolver);
- moveFactory.setLocalSearchSolver(localSearchSolver);
+ @Override
+ public void setDecider(Decider decider) {
+ super.setDecider(decider);
+ moveFactory.setDecider(decider);
}
// ************************************************************************
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/Selector.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/Selector.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/Selector.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -5,6 +5,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolverAware;
import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.localsearch.decider.DeciderAware;
import org.drools.solver.core.move.Move;
/**
@@ -12,7 +13,7 @@
* @see AbstractSelector
* @author Geoffrey De Smet
*/
-public interface Selector extends LocalSearchSolverAware, LocalSearchSolverLifecycleListener {
+public interface Selector extends DeciderAware, LocalSearchSolverLifecycleListener {
List<Move> selectMoveList(StepScope stepScope);
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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/TopListSelector.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -36,8 +36,7 @@
@Override
public void stepTaken(StepScope stepScope) {
- // TODO FIXME: it shouldn't know DefaultLocalSearchSolver that intimitly
- topList = ((DefaultLocalSearchSolver) localSearchSolver).getDecider().getForager().getTopList(topSize);
+ topList = decider.getForager().getTopList(topSize);
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/AbstractMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/AbstractMoveFactory.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/AbstractMoveFactory.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -3,6 +3,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolver;
import org.drools.solver.core.localsearch.LocalSearchSolverScope;
import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.localsearch.decider.Decider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -13,10 +14,10 @@
protected final transient Logger logger = LoggerFactory.getLogger(getClass());
- protected LocalSearchSolver localSearchSolver;
+ protected Decider decider;
- public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
- this.localSearchSolver = localSearchSolver;
+ public void setDecider(Decider decider) {
+ this.decider = decider;
}
// ************************************************************************
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/MoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/MoveFactory.java 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/MoveFactory.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -4,13 +4,14 @@
import org.drools.solver.core.localsearch.LocalSearchSolverAware;
import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
+import org.drools.solver.core.localsearch.decider.DeciderAware;
import org.drools.solver.core.move.Move;
import org.drools.solver.core.solution.Solution;
/**
* @author Geoffrey De Smet
*/
-public interface MoveFactory extends LocalSearchSolverAware, LocalSearchSolverLifecycleListener {
+public interface MoveFactory extends DeciderAware, LocalSearchSolverLifecycleListener {
List<Move> createMoveList(Solution solution);
Deleted: 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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/AbstractScoreComparator.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -1,38 +0,0 @@
-package org.drools.solver.core.score.comparator;
-
-import java.io.Serializable;
-
-import org.drools.solver.core.score.Score;
-
-/**
- * Abstract superclass for {@link ScoreComparator}.
- * @see ScoreComparator
- * @author Geoffrey De Smet
- */
-public abstract class AbstractScoreComparator<S extends Score> implements ScoreComparator<S>, Serializable {
-
- // ************************************************************************
- // Worker methods
- // ************************************************************************
-
- public int compare(S score1, S score2) {
- return score1.compareTo(score2);
- }
-
- public int compareWithShiftingPenalty(S score1, S score2) {
- // Hook which can be optionally overwritten by subclasses.
- return compare(score1, score2);
- }
-
- public double calculateTimeGradient(S startScore, S endScore, S score) {
- // Hook which can be optionally overwritten by subclasses.
- if (startScore.compareTo(score) <= 0) {
- return 0.0;
- } else if (score.compareTo(endScore) >= 0) {
- return 1.0;
- } else {
- return 0.5;
- }
- }
-
-}
\ No newline at end of file
Deleted: 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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/HardAndSoftScoreComparator.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -1,85 +0,0 @@
-package org.drools.solver.core.score.comparator;
-
-import java.io.Serializable;
-
-import org.drools.solver.core.score.Score;
-import org.drools.solver.core.score.HardAndSoftScore;
-import org.drools.solver.core.score.DefaultHardAndSoftScore;
-
-/**
- * A HardAndSoftScoreComparator is a ScoreComparator for HardAndSoftScores.
- * @see HardAndSoftScore
- * @author Geoffrey De Smet
- */
-public class HardAndSoftScoreComparator extends AbstractScoreComparator<HardAndSoftScore> {
-
- private double hardScoreTimeGradientWeight = 0.5;
-
- 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.");
- }
- }
-
- // ************************************************************************
- // Worker methods
- // ************************************************************************
-
- public int compare(HardAndSoftScore score1, HardAndSoftScore score2) {
- return score1.compareTo(score2);
- }
-
- public boolean better(HardAndSoftScore score1, HardAndSoftScore score2) {
- return (score1.getHardScore() > score2.getHardScore())
- || (score1.getHardScore() == score2.getHardScore() && score1.getSoftScore() > score2.getSoftScore());
- }
-
- public boolean betterOrEqual(HardAndSoftScore score1, HardAndSoftScore score2) {
- return (score1.getHardScore() > score2.getHardScore())
- || (score1.getHardScore() == score2.getHardScore() && score1.getSoftScore() >= score2.getSoftScore());
- }
-
- public boolean equal(HardAndSoftScore score1, HardAndSoftScore score2) {
- return score1.getHardScore() == score2.getHardScore() && score1.getSoftScore() == score2.getSoftScore();
- }
-
- public boolean notEqual(HardAndSoftScore score1, HardAndSoftScore score2) {
- return score1.getHardScore() != score2.getHardScore() || score1.getSoftScore() != score2.getSoftScore();
- }
-
- public boolean worse(HardAndSoftScore score1, HardAndSoftScore score2) {
- return (score1.getHardScore() < score2.getHardScore())
- || (score1.getHardScore() == score2.getHardScore() && score1.getSoftScore() < score2.getSoftScore());
- }
-
- public boolean worseOrEqual(HardAndSoftScore score1, HardAndSoftScore score2) {
- return (score1.getHardScore() < score2.getHardScore())
- || (score1.getHardScore() == score2.getHardScore() && score1.getSoftScore() <= score2.getSoftScore());
- }
-
- public int compareWithShiftingPenalty(HardAndSoftScore score1, HardAndSoftScore score2) {
- // TODO implement me
- return compare(score1, score2);
- }
-
- 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 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 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;
- }
-
-}
\ No newline at end of file
Deleted: 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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/ScoreComparator.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -1,66 +0,0 @@
-package org.drools.solver.core.score.comparator;
-
-import java.util.Comparator;
-
-import org.drools.solver.core.score.Score;
-import org.drools.solver.core.score.HardAndSoftScore;
-
-/**
- * A ScoreComparator can compare 2 Scores, optionally taking shifting penalties into account.
- * <p/>
- * Most implementations are writting specifically for a certain Score implementation.
- * @see Score
- * @see AbstractScoreComparator
- * @see SimpleScoreComparator
- * @see HardAndSoftScoreComparator
- * @author Geoffrey De Smet
- */
-public interface ScoreComparator<S extends Score> extends Comparator<S> {
-
- /**
- * Compares 2 scores. The better score is greater than the other score.
- * This method follows the conventions of {@link Comparator#compare}.
- *
- * @param score1 the first score to be compared, never null.
- * @param score2 the second score to be compared, never null.
- * @return a negative integer, zero, or a positive integer as the
- * first score is worse than, equal to, or better than the
- * second score.
- * @see #compareWithShiftingPenalty
- */
- int compare(S score1, S score2);
-
- boolean better(S score1, S score2);
- boolean betterOrEqual(S score1, S score2);
- boolean equal(S score1, S score2);
- boolean notEqual(S score1, S score2);
- boolean worse(S score1, S score2);
- boolean worseOrEqual(S score1, S score2);
-
- /**
- * Compares 2 scores, taking a shifting penalty into consideration if a shifting penalty is applied.
- * The better score is greater than the other score.
- * This method follows the conventions of {@link Comparator#compare}.
- * </p>
- * A shifting penalty can for example lower (resp. highten) the weight of a constraint
- * if for a number of steps that constraint is satisfied (resp. not satisfied).
- *
- * @param score1 the first score to be compared, never null.
- * @param score2 the second score to be compared, never null.
- * @return a negative integer, zero, or a positive integer as the
- * first score is worse than, equal to, or better than the
- * second score.
- * @see #compare
- */
- int compareWithShiftingPenalty(S score1, S score2);
-
- /**
- *
- * @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);
-
-}
Deleted: 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-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/comparator/SimpleScoreComparator.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -1,63 +0,0 @@
-package org.drools.solver.core.score.comparator;
-
-import java.io.Serializable;
-
-import org.drools.solver.core.score.Score;
-import org.drools.solver.core.score.SimpleScore;
-import org.drools.solver.core.score.DefaultSimpleScore;
-
-/**
- * A SimpleScoreComparator is a ScoreComparator for SimpleScores.
- * @see SimpleScore
- * @author Geoffrey De Smet
- */
-public class SimpleScoreComparator extends AbstractScoreComparator<SimpleScore> {
-
- // ************************************************************************
- // Worker methods
- // ************************************************************************
-
- public int compare(SimpleScore score1, SimpleScore score2) {
- return score1.compareTo(score2);
- }
-
- public boolean better(SimpleScore score1, SimpleScore score2) {
- return score1.getScore() > score2.getScore();
- }
-
- public boolean betterOrEqual(SimpleScore score1, SimpleScore score2) {
- return score1.getScore() >= score2.getScore();
- }
-
- public boolean equal(SimpleScore score1, SimpleScore score2) {
- return score1.getScore() == score2.getScore();
- }
-
- public boolean notEqual(SimpleScore score1, SimpleScore score2) {
- return score1.getScore() != score2.getScore();
- }
-
- public boolean worse(SimpleScore score1, SimpleScore score2) {
- return score1.getScore() < score2.getScore();
- }
-
- public boolean worseOrEqual(SimpleScore score1, SimpleScore score2) {
- return score1.getScore() <= score2.getScore();
- }
-
- public int compareWithShiftingPenalty(SimpleScore score1, SimpleScore score2) {
- // TODO implement me
- return compare(score1, score2);
- }
-
- public double calculateTimeGradient(SimpleScore startScore, SimpleScore endScore, SimpleScore score) {
- double timeGradient = 0.0;
- 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;
- }
-
-}
\ No newline at end of file
Modified: 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 2009-05-24 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/score/definition/ScoreDefinition.java 2009-05-24 13:47:49 UTC (rev 26709)
@@ -1,7 +1,6 @@
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.
@@ -11,10 +10,6 @@
*/
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,
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 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml 2009-05-24 13:47:49 UTC (rev 26709)
@@ -16,6 +16,9 @@
<inheritedLocalSearchSolver>
<scoreDrl>/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl</scoreDrl>
+ <scoreDefinition>
+ <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
+ </scoreDefinition>
<startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
<finish>
<!--
@@ -29,9 +32,9 @@
<solverBenchmark>
<localSearchSolver>
- <scoreDefinition>
- <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
- </scoreDefinition>
+ <deciderScoreComparatorFactory>
+ <deciderScoreComparatorFactoryType>NATURAL</deciderScoreComparatorFactoryType>
+ </deciderScoreComparatorFactory>
<selector>
<selector>
<topSize>10</topSize>
@@ -58,4 +61,189 @@
</forager>
</localSearchSolver>
</solverBenchmark>
+ <solverBenchmark>
+ <localSearchSolver>
+ <deciderScoreComparatorFactory>
+ <deciderScoreComparatorFactoryType>SHIFTING_HARD_PENALTY</deciderScoreComparatorFactoryType>
+ <hardScoreActivationThreshold>0</hardScoreActivationThreshold>
+ <successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>
+ <successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>
+ <successiveNoHardChangeRepetitionMultiplicand>20.0</successiveNoHardChangeRepetitionMultiplicand>
+ <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+ <startingHardWeight>1000</startingHardWeight>
+ </deciderScoreComparatorFactory>
+ <selector>
+ <selector>
+ <topSize>10</topSize>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ </selector>
+ <accepter>
+ <completeSolutionTabuSize>500</completeSolutionTabuSize>
+ <completePropertyTabuSize>10</completePropertyTabuSize>
+ </accepter>
+ <forager>
+ <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ </forager>
+ </localSearchSolver>
+ </solverBenchmark>
+ <solverBenchmark>
+ <localSearchSolver>
+ <deciderScoreComparatorFactory>
+ <deciderScoreComparatorFactoryType>SHIFTING_HARD_PENALTY</deciderScoreComparatorFactoryType>
+ <hardScoreActivationThreshold>0</hardScoreActivationThreshold>
+ <successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>
+ <successiveNoHardChangeMaximum>10</successiveNoHardChangeMaximum>
+ <successiveNoHardChangeRepetitionMultiplicand>10.0</successiveNoHardChangeRepetitionMultiplicand>
+ <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+ <startingHardWeight>1000</startingHardWeight>
+ </deciderScoreComparatorFactory>
+ <selector>
+ <selector>
+ <topSize>10</topSize>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ </selector>
+ <accepter>
+ <completeSolutionTabuSize>500</completeSolutionTabuSize>
+ <completePropertyTabuSize>10</completePropertyTabuSize>
+ </accepter>
+ <forager>
+ <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ </forager>
+ </localSearchSolver>
+ </solverBenchmark>
+ <solverBenchmark>
+ <localSearchSolver>
+ <deciderScoreComparatorFactory>
+ <deciderScoreComparatorFactoryType>SHIFTING_HARD_PENALTY</deciderScoreComparatorFactoryType>
+ <hardScoreActivationThreshold>0</hardScoreActivationThreshold>
+ <successiveNoHardChangeMinimum>4</successiveNoHardChangeMinimum>
+ <successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>
+ <successiveNoHardChangeRepetitionMultiplicand>10.0</successiveNoHardChangeRepetitionMultiplicand>
+ <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+ <startingHardWeight>1000</startingHardWeight>
+ </deciderScoreComparatorFactory>
+ <selector>
+ <selector>
+ <topSize>10</topSize>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ </selector>
+ <accepter>
+ <completeSolutionTabuSize>500</completeSolutionTabuSize>
+ <completePropertyTabuSize>10</completePropertyTabuSize>
+ </accepter>
+ <forager>
+ <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ </forager>
+ </localSearchSolver>
+ </solverBenchmark>
+ <solverBenchmark>
+ <localSearchSolver>
+ <deciderScoreComparatorFactory>
+ <deciderScoreComparatorFactoryType>SHIFTING_HARD_PENALTY</deciderScoreComparatorFactoryType>
+ <hardScoreActivationThreshold>0</hardScoreActivationThreshold>
+ <successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>
+ <successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>
+ <successiveNoHardChangeRepetitionMultiplicand>20.0</successiveNoHardChangeRepetitionMultiplicand>
+ <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+ <startingHardWeight>500</startingHardWeight>
+ </deciderScoreComparatorFactory>
+ <selector>
+ <selector>
+ <topSize>10</topSize>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ </selector>
+ <accepter>
+ <completeSolutionTabuSize>500</completeSolutionTabuSize>
+ <completePropertyTabuSize>10</completePropertyTabuSize>
+ </accepter>
+ <forager>
+ <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ </forager>
+ </localSearchSolver>
+ </solverBenchmark>
+ <solverBenchmark>
+ <localSearchSolver>
+ <deciderScoreComparatorFactory>
+ <deciderScoreComparatorFactoryType>SHIFTING_HARD_PENALTY</deciderScoreComparatorFactoryType>
+ <hardScoreActivationThreshold>1</hardScoreActivationThreshold>
+ <successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>
+ <successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>
+ <successiveNoHardChangeRepetitionMultiplicand>20.0</successiveNoHardChangeRepetitionMultiplicand>
+ <hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>
+ <startingHardWeight>1000</startingHardWeight>
+ </deciderScoreComparatorFactory>
+ <selector>
+ <selector>
+ <topSize>10</topSize>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
+ <relativeSelection>0.002</relativeSelection>
+ </selector>
+ </selector>
+ <accepter>
+ <completeSolutionTabuSize>500</completeSolutionTabuSize>
+ <completePropertyTabuSize>10</completePropertyTabuSize>
+ </accepter>
+ <forager>
+ <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ </forager>
+ </localSearchSolver>
+ </solverBenchmark>
</solverBenchmarkSuite>
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 10:57:35 UTC (rev 26708)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml 2009-05-24 13:47:49 UTC (rev 26709)
@@ -15,6 +15,15 @@
<!--<feasableScore>-0hard/-999999soft</feasableScore>-->
<!--<maximumStepCount>100</maximumStepCount>-->
</finish>
+ <!--<deciderScoreComparatorFactory>-->
+ <!--<deciderScoreComparatorFactoryType>SHIFTING_HARD_PENALTY</deciderScoreComparatorFactoryType>-->
+ <!--<hardScoreActivationThreshold>0</hardScoreActivationThreshold>-->
+ <!--<successiveNoHardChangeMinimum>2</successiveNoHardChangeMinimum>-->
+ <!--<successiveNoHardChangeMaximum>20</successiveNoHardChangeMaximum>-->
+ <!--<successiveNoHardChangeRepetitionMultiplicand>20.0</successiveNoHardChangeRepetitionMultiplicand>-->
+ <!--<hardWeightDegradationRatio>0.2</hardWeightDegradationRatio>-->
+ <!--<startingHardWeight>1000</startingHardWeight>-->
+ <!--</deciderScoreComparatorFactory>-->
<selector>
<selector>
<topSize>10</topSize>
More information about the jboss-svn-commits
mailing list