[jboss-svn-commits] JBL Code SVN: r33562 - in labs/jbossrules/trunk/drools-planner: drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/acceptor and 21 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat Jun 19 13:44:09 EDT 2010
Author: ge0ffrey
Date: 2010-06-19 13:44:08 -0400 (Sat, 19 Jun 2010)
New Revision: 33562
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/TimeGradientBasedSimulatedAnnealingAcceptor.java
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/LocalSearchSolverConfig.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/acceptor/AcceptorConfig.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/forager/ForagerConfig.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/selector/SelectorConfig.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/DefaultLocalSearchSolver.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/DefaultDecider.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/forager/AcceptedForager.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/forager/AcceptedMoveScopeComparator.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/CompositeSelector.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/MoveFactorySelector.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/Selector.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/TopListSelector.java
labs/jbossrules/trunk/drools-planner/drools-planner-core/src/test/java/org/drools/planner/core/localsearch/decider/forager/AcceptedForagerTest.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelector.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/benchmark/curriculumCourseStepLimitSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/solver/curriculumCourseSolverConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/benchmark/examinationSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/benchmark/examinationStepLimitSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/solver/examinationSolverConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/manners2009/solver/manners2009SolverConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nqueens/solver/nqueensSolverConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringLongSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringMediumSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringSprintSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringStepLimitSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionLongSolverConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionMediumSolverConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionSprintSolverConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml
labs/jbossrules/trunk/drools-planner/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
Log:
Decent simulated annealing support:
- refactor out relativeSelection and absoluteSelection in favor of minimalAcceptedSelection
- Selector interface now returns an Iterator instead of a List
- first decent simulated annealing implementation
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/LocalSearchSolverConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/LocalSearchSolverConfig.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/LocalSearchSolverConfig.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -318,8 +318,7 @@
* In this mode, 2 runs on the same computer will execute the same code in the same order.
* They will also yield the same result, except if they use a time based termination
* and they have a sufficiently large difference in allocated CPU time.
- * This allows you to benchmark new optimizations (such as a new move implementation
- * or a different absoluteSelection setting) fairly.
+ * This allows you to benchmark new optimizations (such as a new move implementation) fairly.
* <p>
* The reproducible mode is not much slower than the production mode.
* </p>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/acceptor/AcceptorConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/acceptor/AcceptorConfig.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/acceptor/AcceptorConfig.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -35,6 +35,8 @@
protected Integer completeSolutionTabuSize = null;
protected Integer partialSolutionTabuSize = null;
+ protected Double simulatedAnnealingStartingTemperature = null;
+
protected Double greatDelugeWaterLevelUpperBoundRate = null;
protected Double greatDelugeWaterRisingRate = null;
@@ -126,10 +128,26 @@
this.partialSolutionTabuSize = partialSolutionTabuSize;
}
+ public Double getSimulatedAnnealingStartingTemperature() {
+ return simulatedAnnealingStartingTemperature;
+ }
+
+ public void setSimulatedAnnealingStartingTemperature(Double simulatedAnnealingStartingTemperature) {
+ this.simulatedAnnealingStartingTemperature = simulatedAnnealingStartingTemperature;
+ }
+
+ public Double getGreatDelugeWaterLevelUpperBoundRate() {
+ return greatDelugeWaterLevelUpperBoundRate;
+ }
+
public void setGreatDelugeWaterLevelUpperBoundRate(Double greatDelugeWaterLevelUpperBoundRate) {
this.greatDelugeWaterLevelUpperBoundRate = greatDelugeWaterLevelUpperBoundRate;
}
+ public Double getGreatDelugeWaterRisingRate() {
+ return greatDelugeWaterRisingRate;
+ }
+
public void setGreatDelugeWaterRisingRate(Double greatDelugeWaterRisingRate) {
this.greatDelugeWaterRisingRate = greatDelugeWaterRisingRate;
}
@@ -201,8 +219,12 @@
}
acceptorList.add(solutionTabuAcceptor);
}
- if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SIMULATED_ANNEALING))) {
+ if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SIMULATED_ANNEALING))
+ || simulatedAnnealingStartingTemperature != null) {
SimulatedAnnealingAcceptor simulatedAnnealingAcceptor = new SimulatedAnnealingAcceptor();
+ if (simulatedAnnealingStartingTemperature != null) {
+ simulatedAnnealingAcceptor.setStartingTemperature(simulatedAnnealingStartingTemperature);
+ }
acceptorList.add(simulatedAnnealingAcceptor);
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.GREAT_DELUGE))
@@ -270,6 +292,15 @@
if (partialSolutionTabuSize == null) {
partialSolutionTabuSize = inheritedConfig.getPartialSolutionTabuSize();
}
+ if (simulatedAnnealingStartingTemperature == null) {
+ simulatedAnnealingStartingTemperature = inheritedConfig.getSimulatedAnnealingStartingTemperature();
+ }
+ if (greatDelugeWaterLevelUpperBoundRate == null) {
+ greatDelugeWaterLevelUpperBoundRate = inheritedConfig.getGreatDelugeWaterLevelUpperBoundRate();
+ }
+ if (greatDelugeWaterRisingRate == null) {
+ greatDelugeWaterRisingRate = inheritedConfig.getGreatDelugeWaterRisingRate();
+ }
}
public static enum AcceptorType {
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/forager/ForagerConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/forager/ForagerConfig.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/forager/ForagerConfig.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -15,6 +15,8 @@
private Class<Forager> foragerClass = null;
private ForagerType foragerType = null;
+ protected Integer minimalAcceptedSelection = null;
+
public Forager getForager() {
return forager;
}
@@ -39,6 +41,14 @@
this.foragerType = foragerType;
}
+ public Integer getMinimalAcceptedSelection() {
+ return minimalAcceptedSelection;
+ }
+
+ public void setMinimalAcceptedSelection(Integer minimalAcceptedSelection) {
+ this.minimalAcceptedSelection = minimalAcceptedSelection;
+ }
+
// ************************************************************************
// Builder methods
// ************************************************************************
@@ -56,29 +66,40 @@
throw new IllegalArgumentException("foragerClass (" + foragerClass.getName()
+ ") does not have a public no-arg constructor", e);
}
- } else if (foragerType != null) {
+ }
+ PickEarlyByScore pickEarlyByScore;
+ if (foragerType != null) {
switch (foragerType) {
case MAX_SCORE_OF_ALL:
- return new AcceptedForager(PickEarlyByScore.NONE, false);
+ pickEarlyByScore = PickEarlyByScore.NONE;
+ break;
case FIRST_BEST_SCORE_IMPROVING:
- return new AcceptedForager(PickEarlyByScore.FIRST_BEST_SCORE_IMPROVING, false);
+ pickEarlyByScore = PickEarlyByScore.FIRST_BEST_SCORE_IMPROVING;
+ break;
case FIRST_LAST_STEP_SCORE_IMPROVING:
- return new AcceptedForager(PickEarlyByScore.FIRST_LAST_STEP_SCORE_IMPROVING, false);
+ pickEarlyByScore = PickEarlyByScore.FIRST_LAST_STEP_SCORE_IMPROVING;
+ break;
case FIRST_RANDOMLY_ACCEPTED:
- return new AcceptedForager(PickEarlyByScore.NONE, true);
+ pickEarlyByScore = PickEarlyByScore.NONE;
+ break;
default:
throw new IllegalStateException("The foragerType (" + foragerType + ") is not implemented");
}
} else {
- return new AcceptedForager(PickEarlyByScore.NONE, false);
+ pickEarlyByScore = PickEarlyByScore.NONE;
}
+ int minimalAcceptedSelection = (this.minimalAcceptedSelection == null)
+ ? Integer.MAX_VALUE : this.minimalAcceptedSelection;
+
+ return new AcceptedForager(pickEarlyByScore, minimalAcceptedSelection);
}
public void inherit(ForagerConfig inheritedConfig) {
- if (forager == null && foragerClass == null && foragerType == null) {
+ if (forager == null && foragerClass == null && foragerType == null && minimalAcceptedSelection == null) {
forager = inheritedConfig.getForager();
foragerClass = inheritedConfig.getForagerClass();
foragerType = inheritedConfig.getForagerType();
+ minimalAcceptedSelection = inheritedConfig.getMinimalAcceptedSelection();
}
}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/selector/SelectorConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/selector/SelectorConfig.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/config/localsearch/decider/selector/SelectorConfig.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -23,8 +23,6 @@
private MoveFactory moveFactory = null;
private Class<MoveFactory> moveFactoryClass = null;
protected Boolean shuffle = null;
- protected Double relativeSelection = null;
- protected Integer absoluteSelection = null;
private Integer topSize = null;
@@ -60,22 +58,6 @@
this.shuffle = shuffle;
}
- public Double getRelativeSelection() {
- return relativeSelection;
- }
-
- public void setRelativeSelection(Double relativeSelection) {
- this.relativeSelection = relativeSelection;
- }
-
- public Integer getAbsoluteSelection() {
- return absoluteSelection;
- }
-
- public void setAbsoluteSelection(Integer absoluteSelection) {
- this.absoluteSelection = absoluteSelection;
- }
-
public Integer getTopSize() {
return topSize;
}
@@ -117,14 +99,8 @@
if (shuffle != null) {
selector.setShuffle(shuffle.booleanValue());
} else {
- selector.setShuffle(relativeSelection != null || absoluteSelection != null);
+ selector.setShuffle(true);
}
- if (relativeSelection != null) {
- selector.setRelativeSelection(relativeSelection);
- }
- if (absoluteSelection != null) {
- selector.setAbsoluteSelection(absoluteSelection);
- }
return selector;
} else if (topSize != null) {
TopListSelector selector = new TopListSelector();
@@ -153,12 +129,6 @@
if (shuffle == null) {
shuffle = inheritedConfig.getShuffle();
}
- if (relativeSelection == null) {
- relativeSelection = inheritedConfig.getRelativeSelection();
- }
- if (absoluteSelection == null) {
- absoluteSelection = inheritedConfig.getAbsoluteSelection();
- }
if (topSize == null) {
topSize = inheritedConfig.getTopSize();
}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/DefaultLocalSearchSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/DefaultLocalSearchSolver.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/DefaultLocalSearchSolver.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -115,7 +115,7 @@
decider.decideNextStep(stepScope);
Move nextStep = stepScope.getStep();
if (nextStep == null) {
- // TODO JBRULES-2213 do not terminate, but warn and try again (especially with relativeSelection)
+ // TODO JBRULES-2213 do not terminate, but warn and try again
logger.warn("No move accepted for step index ({}) out of {} accepted moves. Terminating by exception.",
stepScope.getStepIndex(), decider.getForager().getAcceptedMovesSize());
break;
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/DefaultDecider.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/DefaultDecider.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/DefaultDecider.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -1,5 +1,6 @@
package org.drools.planner.core.localsearch.decider;
+import java.util.Iterator;
import java.util.List;
import org.drools.WorkingMemory;
@@ -86,8 +87,9 @@
public void decideNextStep(StepScope stepScope) {
WorkingMemory workingMemory = stepScope.getWorkingMemory();
- List<Move> moveList = selector.selectMoveList(stepScope);
- for (Move move : moveList) {
+ Iterator<Move> moveIterator = selector.moveIterator(stepScope);
+ while (moveIterator.hasNext()) {
+ Move move = moveIterator.next();
MoveScope moveScope = new MoveScope(stepScope);
moveScope.setMove(move);
// Filter out not doable moves
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -1,43 +1,69 @@
package org.drools.planner.core.localsearch.decider.acceptor.simulatedannealing;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.Random;
+
+import org.drools.planner.core.localsearch.StepScope;
import org.drools.planner.core.localsearch.decider.MoveScope;
import org.drools.planner.core.localsearch.decider.acceptor.AbstractAcceptor;
import org.drools.planner.core.localsearch.LocalSearchSolverScope;
import org.drools.planner.core.score.Score;
/**
- * TODO Under construction. Feel free to create a patch to improve this acceptor!
* @author Geoffrey De Smet
*/
public class SimulatedAnnealingAcceptor extends AbstractAcceptor {
- protected boolean compareToBestScore = false;
+ protected double startingTemperature = -1.0;
+ protected double temperatureSurvival = 0.997;
- public void setCompareToBestScore(boolean compareToBestScore) {
- this.compareToBestScore = compareToBestScore;
+ protected double temperature;
+
+ public void setStartingTemperature(double startingTemperature) {
+ this.startingTemperature = startingTemperature;
}
// ************************************************************************
// Worker methods
// ************************************************************************
+ @Override
+ public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
+ if (startingTemperature < 0.0) {
+ throw new IllegalArgumentException("The startingTemperature (" + startingTemperature
+ + ") cannot be negative.");
+ }
+ temperature = startingTemperature;
+ }
+
public double calculateAcceptChance(MoveScope moveScope) {
- Score compareScore = compareToBestScore
- ? moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()
- : moveScope.getStepScope().getLocalSearchSolverScope().getLastCompletedStepScope().getScore();
- // TODO Support for decision score
+ LocalSearchSolverScope localSearchSolverScope = moveScope.getStepScope().getLocalSearchSolverScope();
+ Score lastStepScore = localSearchSolverScope.getLastCompletedStepScope().getScore();
Score moveScore = moveScope.getScore();
- if (moveScore.compareTo(compareScore) > 0) {
- // It's better so accept it.
+ if (moveScore.compareTo(lastStepScore) > 0) {
return 1.0;
}
- double timeGradient = moveScope.getStepScope().getTimeGradient();
- LocalSearchSolverScope localSearchSolverScope = moveScope.getStepScope().getLocalSearchSolverScope();
- // TODO This algorithm might be nice, but the normal temparture based algorithm should also be possible
- double scoreDelta = 1.0 - localSearchSolverScope.getScoreDefinition().calculateTimeGradient(
- localSearchSolverScope.getStartingScore(), compareScore, moveScore);
- double acceptChance = Math.exp(timeGradient * scoreDelta);
- return acceptChance;
+ Score scoreDifference = lastStepScore.subtract(moveScore);
+ // TODO don't abuse translateScoreToGraphValue
+ Double diff = localSearchSolverScope.getScoreDefinition().translateScoreToGraphValue(scoreDifference);
+ if (diff == null) {
+ // more hard constraints broken, ignore it for now
+ return 0.0;
+ }
+ double acceptChance = Math.exp(-diff / temperature);
+ if (moveScope.getWorkingRandom().nextDouble() < acceptChance) {
+ return 1.0;
+ } else {
+ return 0.0;
+ }
}
-
+
+ @Override
+ public void stepTaken(StepScope stepScope) {
+ super.stepTaken(stepScope);
+ temperature *= temperatureSurvival;
+// System.out.println("temp: " + temperature);
+ }
+
}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/TimeGradientBasedSimulatedAnnealingAcceptor.java (from rev 33474, labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/SimulatedAnnealingAcceptor.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/TimeGradientBasedSimulatedAnnealingAcceptor.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/acceptor/simulatedannealing/TimeGradientBasedSimulatedAnnealingAcceptor.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -0,0 +1,43 @@
+package org.drools.planner.core.localsearch.decider.acceptor.simulatedannealing;
+
+import org.drools.planner.core.localsearch.LocalSearchSolverScope;
+import org.drools.planner.core.localsearch.decider.MoveScope;
+import org.drools.planner.core.localsearch.decider.acceptor.AbstractAcceptor;
+import org.drools.planner.core.score.Score;
+
+/**
+ * TODO Under construction. Feel free to create a patch to improve this acceptor!
+ * @author Geoffrey De Smet
+ */
+public class TimeGradientBasedSimulatedAnnealingAcceptor extends AbstractAcceptor {
+
+ protected boolean compareToBestScore = false;
+
+ public void setCompareToBestScore(boolean compareToBestScore) {
+ this.compareToBestScore = compareToBestScore;
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ public double calculateAcceptChance(MoveScope moveScope) {
+ Score compareScore = compareToBestScore
+ ? moveScope.getStepScope().getLocalSearchSolverScope().getBestScore()
+ : moveScope.getStepScope().getLocalSearchSolverScope().getLastCompletedStepScope().getScore();
+ // TODO Support for decision score
+ Score moveScore = moveScope.getScore();
+ if (moveScore.compareTo(compareScore) > 0) {
+ // It's better so accept it.
+ return 1.0;
+ }
+ double timeGradient = moveScope.getStepScope().getTimeGradient();
+ LocalSearchSolverScope localSearchSolverScope = moveScope.getStepScope().getLocalSearchSolverScope();
+ // TODO This algorithm might be nice, but the normal temperature based algorithm should also be possible
+ double scoreDelta = 1.0 - localSearchSolverScope.getScoreDefinition().calculateTimeGradient(
+ localSearchSolverScope.getStartingScore(), compareScore, moveScore);
+ double acceptChance = Math.exp(timeGradient * scoreDelta);
+ return acceptChance;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/forager/AcceptedForager.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/forager/AcceptedForager.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/forager/AcceptedForager.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -21,9 +21,11 @@
// 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 acceptedMoveScopeComparator;
+ protected final int minimalAcceptedSelection;
+ protected AcceptedMoveScopeComparator acceptedMoveScopeComparator;
+
+ protected int selectedCount;
protected List<MoveScope> acceptedList;
protected boolean listSorted;
protected Score maxScore;
@@ -31,19 +33,9 @@
protected MoveScope earlyPickedMoveScope = null;
- public AcceptedForager() {
- this(PickEarlyByScore.NONE, false);
- }
-
- public AcceptedForager(PickEarlyByScore pickEarlyByScore, boolean pickEarlyRandomly) {
- this(pickEarlyByScore, pickEarlyRandomly, new AcceptedMoveScopeComparator());
- }
-
- public AcceptedForager(PickEarlyByScore pickEarlyByScore, boolean pickEarlyRandomly,
- AcceptedMoveScopeComparator acceptedMoveScopeComparator) {
+ public AcceptedForager(PickEarlyByScore pickEarlyByScore, int minimalAcceptedSelection) {
this.pickEarlyByScore = pickEarlyByScore;
- this.pickEarlyRandomly = pickEarlyRandomly;
- this.acceptedMoveScopeComparator = acceptedMoveScopeComparator;
+ this.minimalAcceptedSelection = minimalAcceptedSelection;
}
// ************************************************************************
@@ -52,7 +44,8 @@
@Override
public void beforeDeciding(StepScope stepScope) {
- acceptedMoveScopeComparator.setDeciderScoreComparator(stepScope.getDeciderScoreComparator());
+ acceptedMoveScopeComparator = new AcceptedMoveScopeComparator(stepScope.getDeciderScoreComparator());
+ selectedCount = 0;
acceptedList = new ArrayList<MoveScope>(1024); // TODO use size of moveList in decider
listSorted = false;
maxScore = stepScope.getLocalSearchSolverScope().getScoreDefinition().getPerfectMinimumScore();
@@ -61,6 +54,7 @@
}
public void addMove(MoveScope moveScope) {
+ selectedCount++;
if (moveScope.getAcceptChance() > 0.0) {
checkPickEarly(moveScope);
addMoveScopeToAcceptedList(moveScope);
@@ -87,16 +81,6 @@
default:
throw new IllegalStateException("The pickEarlyByScore (" + pickEarlyByScore + ") is not implemented");
}
- if (pickEarlyRandomly) {
- if (moveScope.getAcceptChance() >= 1.0) {
- earlyPickedMoveScope = moveScope;
- } else {
- double randomChance = moveScope.getWorkingRandom().nextDouble();
- if (randomChance <= moveScope.getAcceptChance()) {
- earlyPickedMoveScope = moveScope;
- }
- }
- }
}
protected void addMoveScopeToAcceptedList(MoveScope moveScope) {
@@ -111,7 +95,7 @@
}
public boolean isQuitEarly() {
- return earlyPickedMoveScope != null;
+ return earlyPickedMoveScope != null || acceptedList.size() >= minimalAcceptedSelection;
}
public MoveScope pickMove(StepScope stepScope) {
@@ -133,8 +117,8 @@
for (ListIterator<MoveScope> it = acceptedList.listIterator(acceptedList.size()); it.hasPrevious();) {
MoveScope moveScope = it.previous();
acceptMark -= moveScope.getAcceptChance();
- // TODO That underflow warn is nonsence. randomChance can be 0.0 and the last acceptMark can end up 0.0
- // TODO so < is nonsence (do a testcase though)
+ // TODO That underflow warn is nonsense. randomChance can be 0.0 and the last acceptMark can end up 0.0
+ // TODO so < is nonsense (do a testcase though)
if (acceptMark < 0.0) {
pickedMoveScope = moveScope;
break;
@@ -142,7 +126,7 @@
}
if (pickedMoveScope == null) {
// TODO This isn't really underflow when an forager accepts only moves with acceptChance 0.0
- logger.warn("Underflow occured with acceptChanceMaxScoreTotal ({}) " +
+ logger.warn("Underflow occurred with acceptChanceMaxScoreTotal ({}) " +
"and randomChance ({}).", acceptChanceMaxScoreTotal, randomChance);
// Deal with it anyway (no fail-fast here)
pickedMoveScope = acceptedList.get(acceptedList.size() - 1);
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/forager/AcceptedMoveScopeComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/forager/AcceptedMoveScopeComparator.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/forager/AcceptedMoveScopeComparator.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -11,9 +11,9 @@
*/
public class AcceptedMoveScopeComparator implements Comparator<MoveScope> {
- private Comparator<? extends Score> deciderScoreComparator;
+ private final Comparator<? extends Score> deciderScoreComparator;
- public void setDeciderScoreComparator(Comparator<? extends Score> deciderScoreComparator) {
+ public AcceptedMoveScopeComparator(Comparator<? extends Score> deciderScoreComparator) {
this.deciderScoreComparator = deciderScoreComparator;
}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/CompositeSelector.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/CompositeSelector.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/CompositeSelector.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -1,7 +1,9 @@
package org.drools.planner.core.localsearch.decider.selector;
import java.util.ArrayList;
+import java.util.Iterator;
import java.util.List;
+import java.util.Random;
import org.drools.planner.core.localsearch.LocalSearchSolverScope;
import org.drools.planner.core.localsearch.StepScope;
@@ -46,20 +48,15 @@
}
}
- public List<Move> selectMoveList(StepScope stepScope) {
- int totalSize = 0;
- List<List<Move>> subMoveLists = new ArrayList<List<Move>>(selectorList.size());
+ public Iterator<Move> moveIterator(StepScope stepScope) {
+ List<Iterator<Move>> moveIteratorList = new ArrayList<Iterator<Move>>(selectorList.size());
for (Selector selector : selectorList) {
- List<Move> subMoveList = selector.selectMoveList(stepScope);
- totalSize += subMoveList.size();
- subMoveLists.add(subMoveList);
+ Iterator<Move> moveIterator = selector.moveIterator(stepScope);
+ if (moveIterator.hasNext()) {
+ moveIteratorList.add(moveIterator);
+ }
}
- List<Move> moveList = new ArrayList<Move>(totalSize);
- for (List<Move> subMoveList : subMoveLists) {
- moveList.addAll(subMoveList);
- }
- // TODO support overal shuffling
- return moveList;
+ return new CompositeSelectorMoveIterator(stepScope.getWorkingRandom(), moveIteratorList);
}
@Override
@@ -83,4 +80,35 @@
}
}
-}
\ No newline at end of file
+ private static class CompositeSelectorMoveIterator implements Iterator<Move> {
+
+ private final List<Iterator<Move>> moveIteratorList;
+ private final Random workingRandom;
+
+ public CompositeSelectorMoveIterator(Random workingRandom, List<Iterator<Move>> moveIteratorList) {
+ this.moveIteratorList = moveIteratorList;
+ this.workingRandom = workingRandom;
+ }
+
+ public boolean hasNext() {
+ return !moveIteratorList.isEmpty();
+ }
+
+ public Move next() {
+ int moveIteratorIndex = workingRandom.nextInt(moveIteratorList.size());
+ Iterator<Move> moveIterator = moveIteratorList.get(moveIteratorIndex);
+ Move next = moveIterator.next();
+ if (!moveIterator.hasNext()) {
+ moveIteratorList.remove(moveIteratorIndex);
+ }
+ return next;
+ }
+
+ public void remove() {
+ throw new UnsupportedOperationException(
+ "The remove method is not supported on CompositeSelectorMoveIterator");
+ }
+
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/MoveFactorySelector.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/MoveFactorySelector.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/MoveFactorySelector.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -1,6 +1,7 @@
package org.drools.planner.core.localsearch.decider.selector;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import org.drools.planner.core.localsearch.LocalSearchSolverScope;
@@ -17,8 +18,6 @@
protected MoveFactory moveFactory;
protected boolean shuffle = true;
- protected Double relativeSelection = null;
- protected Integer absoluteSelection = null;
public void setMoveFactory(MoveFactory moveFactory) {
this.moveFactory = moveFactory;
@@ -28,22 +27,6 @@
this.shuffle = shuffle;
}
- public void setRelativeSelection(Double relativeSelection) {
- this.relativeSelection = relativeSelection;
- if (relativeSelection < 0.0 || relativeSelection > 1.0) {
- throw new IllegalArgumentException( "The selector's relativeSelection (" + relativeSelection
- + ") is not in the range [0.0,1.0].");
- }
- }
-
- public void setAbsoluteSelection(Integer absoluteSelection) {
- this.absoluteSelection = absoluteSelection;
- if (absoluteSelection < 1) {
- throw new IllegalArgumentException( "The selector's absoluteSelection (" + absoluteSelection
- + ") must be at least 1.");
- }
- }
-
@Override
public void setDecider(Decider decider) {
super.setDecider(decider);
@@ -64,23 +47,15 @@
moveFactory.beforeDeciding(stepScope);
}
+ public Iterator<Move> moveIterator(StepScope stepScope) {
+ return selectMoveList(stepScope).iterator();
+ }
+
public List<Move> selectMoveList(StepScope stepScope) {
List<Move> moveList = moveFactory.createMoveList(stepScope.getWorkingSolution());
if (shuffle) {
Collections.shuffle(moveList, stepScope.getWorkingRandom());
}
- if (relativeSelection != null) {
- int selectionSize = (int) Math.ceil(relativeSelection * moveList.size());
- if (selectionSize == 0 && !moveList.isEmpty()) {
- selectionSize = 1;
- }
- moveList = moveList.subList(0, selectionSize);
- }
- if (absoluteSelection != null) {
- if (moveList.size() > absoluteSelection) {
- moveList = moveList.subList(0, absoluteSelection);
- }
- }
return moveList;
}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/Selector.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/Selector.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/Selector.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -1,5 +1,6 @@
package org.drools.planner.core.localsearch.decider.selector;
+import java.util.Iterator;
import java.util.List;
import org.drools.planner.core.localsearch.LocalSearchSolverLifecycleListener;
@@ -14,6 +15,6 @@
*/
public interface Selector extends DeciderAware, LocalSearchSolverLifecycleListener {
- List<Move> selectMoveList(StepScope stepScope);
-
-}
\ No newline at end of file
+ Iterator<Move> moveIterator(StepScope stepScope);
+
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/TopListSelector.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/TopListSelector.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/TopListSelector.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -1,6 +1,7 @@
package org.drools.planner.core.localsearch.decider.selector;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import org.drools.planner.core.localsearch.LocalSearchSolverScope;
@@ -29,8 +30,8 @@
topList = Collections.emptyList();
}
- public final List<Move> selectMoveList(StepScope stepScope) {
- return topList;
+ public Iterator<Move> moveIterator(StepScope stepScope) {
+ return topList.iterator();
}
@Override
@@ -38,4 +39,4 @@
topList = decider.getForager().getTopList(topSize);
}
-}
\ No newline at end of file
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/test/java/org/drools/planner/core/localsearch/decider/forager/AcceptedForagerTest.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/test/java/org/drools/planner/core/localsearch/decider/forager/AcceptedForagerTest.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/test/java/org/drools/planner/core/localsearch/decider/forager/AcceptedForagerTest.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -25,7 +25,7 @@
public void testPickMoveMaxScoreOfAll() {
// Setup
- Forager forager = new AcceptedForager(PickEarlyByScore.NONE, false);
+ Forager forager = new AcceptedForager(PickEarlyByScore.NONE, Integer.MAX_VALUE);
LocalSearchSolverScope localSearchSolverScope = createLocalSearchSolverScope();
forager.solvingStarted(localSearchSolverScope);
StepScope stepScope = createStepScope(localSearchSolverScope);
@@ -61,7 +61,7 @@
public void testPickMoveFirstBestScoreImproving() {
// Setup
- Forager forager = new AcceptedForager(PickEarlyByScore.FIRST_BEST_SCORE_IMPROVING, false);
+ Forager forager = new AcceptedForager(PickEarlyByScore.FIRST_BEST_SCORE_IMPROVING, Integer.MAX_VALUE);
LocalSearchSolverScope localSearchSolverScope = createLocalSearchSolverScope();
forager.solvingStarted(localSearchSolverScope);
StepScope stepScope = createStepScope(localSearchSolverScope);
@@ -91,7 +91,7 @@
public void testPickMoveFirstLastStepScoreImproving() {
// Setup
- Forager forager = new AcceptedForager(PickEarlyByScore.FIRST_LAST_STEP_SCORE_IMPROVING, false);
+ Forager forager = new AcceptedForager(PickEarlyByScore.FIRST_LAST_STEP_SCORE_IMPROVING, Integer.MAX_VALUE);
LocalSearchSolverScope localSearchSolverScope = createLocalSearchSolverScope();
forager.solvingStarted(localSearchSolverScope);
StepScope stepScope = createStepScope(localSearchSolverScope);
@@ -119,35 +119,35 @@
forager.solvingEnded(localSearchSolverScope);
}
- public void testPickMoveRandomly() {
- // Setup
- Forager forager = new AcceptedForager(PickEarlyByScore.NONE, true);
- LocalSearchSolverScope localSearchSolverScope = createLocalSearchSolverScope();
- forager.solvingStarted(localSearchSolverScope);
- StepScope stepScope = createStepScope(localSearchSolverScope);
- forager.beforeDeciding(stepScope);
- // Pre conditions
- MoveScope a = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 0.0);
- MoveScope b = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.1);
- MoveScope c = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.0);
- MoveScope d = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 0.3);
- // Do stuff
- forager.addMove(a);
- assertFalse(forager.isQuitEarly());
- forager.addMove(b);
- assertFalse(forager.isQuitEarly());
- forager.addMove(c);
- assertFalse(forager.isQuitEarly());
- forager.addMove(d);
- assertTrue(forager.isQuitEarly());
- // Post conditions
- MoveScope pickedScope = forager.pickMove(stepScope);
- assertSame(d, pickedScope);
- List<Move> topList = forager.getTopList(2);
- assertTrue(topList.contains(b.getMove()));
- assertTrue(topList.contains(d.getMove()));
- forager.solvingEnded(localSearchSolverScope);
- }
+// public void testPickMoveRandomly() {
+// // Setup
+// Forager forager = new AcceptedForager(PickEarlyByScore.NONE, 1);
+// LocalSearchSolverScope localSearchSolverScope = createLocalSearchSolverScope();
+// forager.solvingStarted(localSearchSolverScope);
+// StepScope stepScope = createStepScope(localSearchSolverScope);
+// forager.beforeDeciding(stepScope);
+// // Pre conditions
+// MoveScope a = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 0.0);
+// MoveScope b = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.1);
+// MoveScope c = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-1), 0.0);
+// MoveScope d = createMoveScope(stepScope, DefaultSimpleScore.valueOf(-20), 0.3);
+// // Do stuff
+// forager.addMove(a);
+// assertFalse(forager.isQuitEarly());
+// forager.addMove(b);
+// assertFalse(forager.isQuitEarly());
+// forager.addMove(c);
+// assertFalse(forager.isQuitEarly());
+// forager.addMove(d);
+// assertTrue(forager.isQuitEarly());
+// // Post conditions
+// MoveScope pickedScope = forager.pickMove(stepScope);
+// assertSame(d, pickedScope);
+// List<Move> topList = forager.getTopList(2);
+// assertTrue(topList.contains(b.getMove()));
+// assertTrue(topList.contains(d.getMove()));
+// forager.solvingEnded(localSearchSolverScope);
+// }
private LocalSearchSolverScope createLocalSearchSolverScope() {
LocalSearchSolverScope localSearchSolverScope = new LocalSearchSolverScope();
@@ -178,4 +178,4 @@
return moveScope;
}
-}
\ No newline at end of file
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelector.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelector.java 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelector.java 2010-06-19 17:44:08 UTC (rev 33562)
@@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -91,7 +92,7 @@
examSwitchMoveFactory.beforeDeciding(stepScope);
}
- public List<Move> selectMoveList(StepScope stepScope) {
+ public Iterator<Move> moveIterator(StepScope stepScope) {
if (nextShuffledExamListIndex >= shuffledExamList.size()) {
// Just in time shuffling
Collections.shuffle(shuffledExamList, stepScope.getWorkingRandom());
@@ -100,7 +101,7 @@
Exam exam = shuffledExamList.get(nextShuffledExamListIndex);
List<Move> moveList = cachedExamToMoveMap.get(exam);
nextShuffledExamListIndex++;
- return moveList;
+ return moveList.iterator();
}
@Override
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -38,19 +38,13 @@
</scoreDefinition>
<selector>
<selector>
- <topSize>10</topSize>
- </selector>
- <selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.LectureSwitchMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
</selector>
<acceptor>
@@ -59,6 +53,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>900</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
</solverBenchmark>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/benchmark/curriculumCourseStepLimitSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/benchmark/curriculumCourseStepLimitSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/benchmark/curriculumCourseStepLimitSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -19,19 +19,13 @@
</scoreDefinition>
<selector>
<selector>
- <topSize>10</topSize>
- </selector>
- <selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.LectureSwitchMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
</selector>
<acceptor>
@@ -41,6 +35,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>900</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
</solverBenchmark>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/solver/curriculumCourseSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/solver/curriculumCourseSolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/curriculumcourse/solver/curriculumCourseSolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -18,19 +18,13 @@
</termination>
<selector>
<selector>
- <topSize>10</topSize>
- </selector>
- <selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.LectureSwitchMoveFactory</moveFactoryClass>
- <relativeSelection>0.002</relativeSelection>
</selector>
</selector>
<acceptor>
@@ -39,16 +33,15 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>900</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
<!-- Great deluge experiments: -->
<!--<selector>-->
<!--<selector>-->
<!--<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.002</relativeSelection>-->
<!--</selector>-->
<!--<selector>-->
<!--<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.002</relativeSelection>-->
<!--</selector>-->
<!--<selector>-->
<!--<moveFactoryClass>org.drools.planner.examples.curriculumcourse.solver.move.factory.LectureSwitchMoveFactory</moveFactoryClass>-->
@@ -62,5 +55,6 @@
<!--</acceptor>-->
<!--<forager>-->
<!--<foragerType>FIRST_RANDOMLY_ACCEPTED</foragerType>-->
+ <!--<minimalAcceptedSelection>900</minimalAcceptedSelection>-->
<!--</forager>-->
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/benchmark/examinationSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/benchmark/examinationSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/benchmark/examinationSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -38,15 +38,12 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -55,6 +52,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1400</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
</solverBenchmark>
@@ -67,15 +65,12 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -84,6 +79,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1400</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
</solverBenchmark>
@@ -97,15 +93,12 @@
<selector class="org.drools.planner.examples.examination.solver.selector.AllMovesOfOneExamSelectorConfig"/>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -114,6 +107,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1400</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
</solverBenchmark>
@@ -127,15 +121,12 @@
<selector class="org.drools.planner.examples.examination.solver.selector.AllMovesOfOneExamSelectorConfig"/>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -144,61 +135,8 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1400</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
</solverBenchmark>
- <!--<solverBenchmark>-->
- <!--<name>relative0.002_moveTabu7</name>-->
- <!--<localSearchSolver>-->
- <!--<deciderScoreComparatorFactory>-->
- <!--<deciderScoreComparatorFactoryType>NATURAL</deciderScoreComparatorFactoryType>-->
- <!--</deciderScoreComparatorFactory>-->
- <!--<selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.002</relativeSelection>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.002</relativeSelection>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.002</relativeSelection>-->
- <!--</selector>-->
- <!--</selector>-->
- <!--<acceptor>-->
- <!--<completeSolutionTabuSize>1000</completeSolutionTabuSize>-->
- <!--<completeMoveTabuSize>7</completeMoveTabuSize>-->
- <!--</acceptor>-->
- <!--<forager>-->
- <!--<foragerType>MAX_SCORE_OF_ALL</foragerType>-->
- <!--</forager>-->
- <!--</localSearchSolver>-->
- <!--</solverBenchmark>-->
- <!--<solverBenchmark>-->
- <!--<name>simulatedAnnealing</name>-->
- <!--<localSearchSolver>-->
- <!--<deciderScoreComparatorFactory>-->
- <!--<deciderScoreComparatorFactoryType>NATURAL</deciderScoreComparatorFactoryType>-->
- <!--</deciderScoreComparatorFactory>-->
- <!--<selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>-->
- <!--</selector>-->
- <!--</selector>-->
- <!--<acceptor>-->
- <!--<acceptorType>SIMULATED_ANNEALING</acceptorType>-->
- <!--</acceptor>-->
- <!--<forager>-->
- <!--<foragerType>FIRST_RANDOMLY_ACCEPTED</foragerType>-->
- <!--</forager>-->
- <!--</localSearchSolver>-->
- <!--</solverBenchmark>-->
</solverBenchmarkSuite>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/benchmark/examinationStepLimitSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/benchmark/examinationStepLimitSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/benchmark/examinationStepLimitSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -22,15 +22,12 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -39,6 +36,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1400</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
</solverBenchmark>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/solver/examinationSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/solver/examinationSolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/examination/solver/examinationSolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -32,15 +32,12 @@
<!--<selector class="org.drools.planner.examples.examination.solver.selector.AllMovesOfOneExamSelectorConfig"/>-->
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -49,6 +46,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1400</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
<!--<selector>-->
<!--<moveFactoryClass>org.drools.planner.examples.examination.solver.move.factory.PeriodChangeExaminationMoveFactory</moveFactoryClass>-->
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/manners2009/solver/manners2009SolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/manners2009/solver/manners2009SolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/manners2009/solver/manners2009SolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -19,6 +19,5 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
- <!--<foragerType>FIRST_BEST_SCORE_IMPROVING</foragerType>-->
</forager>
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nqueens/solver/nqueensSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nqueens/solver/nqueensSolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nqueens/solver/nqueensSolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -13,12 +13,12 @@
</termination>
<selector>
<moveFactoryClass>org.drools.planner.examples.nqueens.solver.move.factory.NQueensMoveFactory</moveFactoryClass>
- <!-- Real world problems require to use of <relativeSelection> or <absoluteSelection>. -->
</selector>
<acceptor>
<completeSolutionTabuSize>1000</completeSolutionTabuSize>
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <!-- Real world problems require to use of <minimalAcceptedSelection> -->
</forager>
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringLongSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringLongSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringLongSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -38,23 +38,18 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSequenceSwitchLength2MoveFactory</moveFactoryClass>
- <absoluteSelection>150</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSequenceSwitchLength3MoveFactory</moveFactoryClass>
- <absoluteSelection>150</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -63,6 +58,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1100</minimalAcceptedSelection>
</forager>
</localSearchSolver>
</solverBenchmark>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringMediumSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringMediumSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringMediumSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -3,19 +3,21 @@
<benchmarkDirectory>local/data/nurserostering</benchmarkDirectory>
<solverStatisticType>BEST_SOLUTION_CHANGED</solverStatisticType>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late01_initialized.xml</inheritedUnsolvedSolutionFile>-->
+
<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium01.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium02.xml</inheritedUnsolvedSolutionFile>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium02.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium03.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium04.xml</inheritedUnsolvedSolutionFile>-->
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium05.xml</inheritedUnsolvedSolutionFile>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium05.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_hint01.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_hint02.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_hint03.xml</inheritedUnsolvedSolutionFile>-->
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late01.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late02.xml</inheritedUnsolvedSolutionFile>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late01.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late02.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late03.xml</inheritedUnsolvedSolutionFile>-->
- <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late04.xml</inheritedUnsolvedSolutionFile>-->
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late05.xml</inheritedUnsolvedSolutionFile>
+ <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late04.xml</inheritedUnsolvedSolutionFile>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/medium_late05.xml</inheritedUnsolvedSolutionFile>-->
<inheritedLocalSearchSolver>
<scoreDrl>/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl</scoreDrl>
@@ -34,20 +36,17 @@
</inheritedLocalSearchSolver>
<solverBenchmark>
- <name>absolute300PillarPart</name>
+ <name>selection800PillarPart</name>
<localSearchSolver>
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -56,41 +55,32 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>800</minimalAcceptedSelection>
</forager>
</localSearchSolver>
</solverBenchmark>
- <!--<solverBenchmark>-->
- <!--<name>absolute300SeqLength2and3PillarPart</name>-->
- <!--<localSearchSolver>-->
- <!--<selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>-->
- <!--<absoluteSelection>300</absoluteSelection>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>-->
- <!--<absoluteSelection>300</absoluteSelection>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSequenceSwitchLength2MoveFactory</moveFactoryClass>-->
- <!--<absoluteSelection>150</absoluteSelection>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSequenceSwitchLength3MoveFactory</moveFactoryClass>-->
- <!--<absoluteSelection>150</absoluteSelection>-->
- <!--</selector>-->
- <!--<selector>-->
- <!--<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>-->
- <!--<absoluteSelection>300</absoluteSelection>-->
- <!--</selector>-->
- <!--</selector>-->
- <!--<acceptor>-->
- <!--<completeSolutionTabuSize>1000</completeSolutionTabuSize>-->
- <!--<completePropertyTabuSize>11</completePropertyTabuSize>-->
- <!--</acceptor>-->
- <!--<forager>-->
- <!--<foragerType>MAX_SCORE_OF_ALL</foragerType>-->
- <!--</forager>-->
- <!--</localSearchSolver>-->
- <!--</solverBenchmark>-->
+ <solverBenchmark>
+ <name>simulatedAnnealing</name>
+ <localSearchSolver>
+ <selector>
+ <selector>
+ <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>
+ </selector>
+ </selector>
+ <acceptor>
+ <simulatedAnnealingStartingTemperature>10.0</simulatedAnnealingStartingTemperature>
+ <completePropertyTabuSize>5</completePropertyTabuSize>
+ </acceptor>
+ <forager>
+ <foragerType>FIRST_RANDOMLY_ACCEPTED</foragerType>
+ <minimalAcceptedSelection>4</minimalAcceptedSelection>
+ </forager>
+ </localSearchSolver>
+ </solverBenchmark>
</solverBenchmarkSuite>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringSprintSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringSprintSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringSprintSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -3,29 +3,29 @@
<benchmarkDirectory>local/data/nurserostering</benchmarkDirectory>
<solverStatisticType>BEST_SOLUTION_CHANGED</solverStatisticType>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint01.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint02.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint03.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint04.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint05.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint06.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint07.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint08.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint09.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint10.xml</inheritedUnsolvedSolutionFile>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint01.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint02.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint03.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint04.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint05.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint06.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint07.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint08.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint09.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint10.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_hint01.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_hint02.xml</inheritedUnsolvedSolutionFile>-->
<!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_hint03.xml</inheritedUnsolvedSolutionFile>-->
<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late01.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late02.xml</inheritedUnsolvedSolutionFile>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late02.xml</inheritedUnsolvedSolutionFile>-->
<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late03.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late04.xml</inheritedUnsolvedSolutionFile>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late04.xml</inheritedUnsolvedSolutionFile>-->
<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late05.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late06.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late07.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late08.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late09.xml</inheritedUnsolvedSolutionFile>
- <inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late10.xml</inheritedUnsolvedSolutionFile>
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late06.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late07.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late08.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late09.xml</inheritedUnsolvedSolutionFile>-->
+ <!--<inheritedUnsolvedSolutionFile>data/nurserostering/unsolved/sprint_late10.xml</inheritedUnsolvedSolutionFile>-->
<inheritedLocalSearchSolver>
<scoreDrl>/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl</scoreDrl>
@@ -43,17 +43,18 @@
</inheritedLocalSearchSolver>
<solverBenchmark>
- <name>absolute100_propertyTabu11</name>
+ <name>pillarPart200</name>
<localSearchSolver>
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>100</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>100</absoluteSelection>
</selector>
+ <selector>
+ <moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>
+ </selector>
</selector>
<acceptor>
<completeSolutionTabuSize>1000</completeSolutionTabuSize>
@@ -61,32 +62,31 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>200</minimalAcceptedSelection>
</forager>
</localSearchSolver>
</solverBenchmark>
<solverBenchmark>
- <name>pillarPart70</name>
+ <name>simAnn</name>
<localSearchSolver>
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>70</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>70</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>70</absoluteSelection>
</selector>
</selector>
<acceptor>
- <completeSolutionTabuSize>1000</completeSolutionTabuSize>
- <completePropertyTabuSize>11</completePropertyTabuSize>
+ <simulatedAnnealingStartingTemperature>10.0</simulatedAnnealingStartingTemperature>
+ <completePropertyTabuSize>5</completePropertyTabuSize>
</acceptor>
<forager>
- <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <foragerType>FIRST_RANDOMLY_ACCEPTED</foragerType>
+ <minimalAcceptedSelection>4</minimalAcceptedSelection>
</forager>
</localSearchSolver>
</solverBenchmark>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringStepLimitSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringStepLimitSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/benchmark/nurseRosteringStepLimitSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -22,11 +22,9 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>500</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -35,6 +33,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1000</minimalAcceptedSelection>
</forager>
</localSearchSolver>
</solverBenchmark>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionLongSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionLongSolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionLongSolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -11,23 +11,18 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSequenceSwitchLength2MoveFactory</moveFactoryClass>
- <absoluteSelection>150</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSequenceSwitchLength3MoveFactory</moveFactoryClass>
- <absoluteSelection>150</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -36,5 +31,6 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>1100</minimalAcceptedSelection>
</forager>
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionMediumSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionMediumSolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionMediumSolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -11,22 +11,20 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
</selector>
<acceptor>
- <completeSolutionTabuSize>1000</completeSolutionTabuSize>
- <completePropertyTabuSize>11</completePropertyTabuSize>
+ <simulatedAnnealingStartingTemperature>10.0</simulatedAnnealingStartingTemperature>
+ <completePropertyTabuSize>5</completePropertyTabuSize>
</acceptor>
<forager>
- <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <foragerType>FIRST_RANDOMLY_ACCEPTED</foragerType>
+ <minimalAcceptedSelection>4</minimalAcceptedSelection>
</forager>
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionSprintSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionSprintSolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/competition/nurseRosteringCompetitionSprintSolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -11,11 +11,9 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>100</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>100</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -24,5 +22,6 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>180</minimalAcceptedSelection>
</forager>
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringSolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -18,23 +18,18 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.EmployeeChangeMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
<!--<selector>-->
<!--<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSequenceSwitchLength2MoveFactory</moveFactoryClass>-->
- <!--<absoluteSelection>150</absoluteSelection>-->
<!--</selector>-->
<!--<selector>-->
<!--<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentSequenceSwitchLength3MoveFactory</moveFactoryClass>-->
- <!--<absoluteSelection>150</absoluteSelection>-->
<!--</selector>-->
<selector>
<moveFactoryClass>org.drools.planner.examples.nurserostering.solver.move.factory.AssignmentPillarPartSwitchMoveFactory</moveFactoryClass>
- <absoluteSelection>300</absoluteSelection>
</selector>
</selector>
<acceptor>
@@ -43,5 +38,6 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>800</minimalAcceptedSelection>
</forager>
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -38,7 +38,6 @@
<selector>
<selector>
<moveFactoryClass>org.drools.planner.examples.pas.solver.move.factory.BedDesignationPillarPartSwitchMoveFactory</moveFactoryClass>
- <relativeSelection>0.0010</relativeSelection>
</selector>
</selector>
<acceptor>
@@ -47,6 +46,7 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>500</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
</solverBenchmark>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml 2010-06-19 17:44:08 UTC (rev 33562)
@@ -16,15 +16,12 @@
<selector>
<!--<selector>-->
<!--<moveFactoryClass>org.drools.planner.examples.pas.solver.move.factory.BedChangeMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.0008</relativeSelection>-->
<!--</selector>-->
<!--<selector>-->
<!--<moveFactoryClass>org.drools.planner.examples.pas.solver.move.factory.BedDesignationSwitchMoveFactory</moveFactoryClass>-->
- <!--<relativeSelection>0.0008</relativeSelection>-->
<!--</selector>-->
<selector>
<moveFactoryClass>org.drools.planner.examples.pas.solver.move.factory.BedDesignationPillarPartSwitchMoveFactory</moveFactoryClass>
- <relativeSelection>0.0010</relativeSelection>
</selector>
</selector>
<acceptor>
@@ -33,5 +30,6 @@
</acceptor>
<forager>
<foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>500</minimalAcceptedSelection><!-- TODO tweak me -->
</forager>
</localSearchSolver>
Modified: labs/jbossrules/trunk/drools-planner/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
===================================================================
--- labs/jbossrules/trunk/drools-planner/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt 2010-06-19 08:10:12 UTC (rev 33561)
+++ labs/jbossrules/trunk/drools-planner/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt 2010-06-19 17:44:08 UTC (rev 33562)
@@ -268,7 +268,8 @@
Environment mode DEBUG now checks more and therefor it is slower than before.
-JBRULES-1804 has been fixed. The HACK to fix wierd truth maintenance behavior is obsolete.
+JBRULES-1804 has been fixed. The HACK to fix wierd truth maintenance behavior is now obsolete.
+Delete any instances of that hack to make your rules easier to read and faster.
Before in *.drl:
// HACK to fix wierd truth maintenance behavior in drools
// because making weight part of the equals/hashcode doesn't cut it
@@ -287,9 +288,11 @@
A custom ConstraintOccurrence implementation should now use the weight in its equals/hashcode methods.
IntConstraintOccurrence and DoubleConstraintOccurrence have been changed as needed.
+
From 5.1.0.m2 to 5.1.0.cr1
--------------------------
+
Custom ScoreDefinition implementations needs to implement the Double translateScoreToGraphValue(S score) method.
After in *ScoreDefinition.java:
public Double translateScoreToGraphValue(HardAndSoftScore score) {
@@ -337,3 +340,58 @@
public ...Score subtract(...Score subtrahend) {
Custom Score implementation: When rounding is needed, it should now be floored (as defined by Math.floor(double)).
+
+
+A selector no longer supports absoluteSelection and relativeSelection, because it was inefficient.
+Instead, the forager now supports minimalAcceptedSelection, which only counts doable, accepted moves
+(instead of all the selected moves).
+As a guideline, set your minimalAcceptedSelection to the sum of all your absoluteSelection and subtract 10%.
+Before in *Config.xml:
+ <selector>
+ <selector>
+ <moveFactoryClass>...ChangeMoveFactory</moveFactoryClass>
+ <absoluteSelection>500</absoluteSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>...SwitchMoveFactory</moveFactoryClass>
+ <absoluteSelection>500</absoluteSelection>
+ </selector>
+ </selector>
+ ...
+ <forager>
+ <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ </forager>
+After in *Config.xml:
+ <selector>
+ <selector>
+ <moveFactoryClass>...ChangeMoveFactory</moveFactoryClass>
+ </selector>
+ <selector>
+ <moveFactoryClass>...SwitchMoveFactory</moveFactoryClass>
+ </selector>
+ </selector>
+ ...
+ <forager>
+ <foragerType>MAX_SCORE_OF_ALL</foragerType>
+ <minimalAcceptedSelection>900</minimalAcceptedSelection>
+ </forager>
+If you weighted some MoveFactory heavier than another, vote for https://jira.jboss.org/browse/JBRULES-2553.
+
+If you use a custom selector: the Selector interface method
+ List<Move> selectMoveList(StepScope stepScope)
+has been replaced by the more efficient method
+ Iterator<Move> moveIterator(StepScope stepScope)
+Before in *Selector.java:
+ public List<Move> selectMoveList(StepScope stepScope) {
+ ...
+ return moveList;
+ }
+After in *Selector.java:
+ public Iterator<Move> moveIterator(StepScope stepScope) {
+ ...
+ return moveList.iterator();
+ }
+
+There's now a decent simulated annealing implementation.
+In many cases it clearly beats the tabu search implementation.
+See the reference manual and the nurse rostering example for more info.
More information about the jboss-svn-commits
mailing list