[jboss-svn-commits] JBL Code SVN: r18084 - in labs/jbossrules/trunk/drools-solver: drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/selector and 13 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Jan 24 16:05:25 EST 2008
Author: ge0ffrey
Date: 2008-01-24 16:05:25 -0500 (Thu, 24 Jan 2008)
New Revision: 18084
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractSelector.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CompositeSelector.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactorySelector.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/Selector.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/CachedMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/MoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExamSwitchExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/RoomChangeExaminationMoveFactory.java
Removed:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CachedMoveListMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/selector/SelectorConfig.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/CompositeAccepter.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/Move.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExamSwitchMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/LessonScheduleMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/NQueensMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml
Log:
experimental refactor of selector
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -198,7 +198,7 @@
private Decider buildDecider() {
DefaultDecider decider = new DefaultDecider();
- decider.setMoveFactory(selectorConfig.buildMoveFactory());
+ decider.setSelector(selectorConfig.buildSelector());
decider.setAccepter(accepterConfig.buildAccepter());
decider.setForager(foragerConfig.buildForager());
return decider;
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/selector/SelectorConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/selector/SelectorConfig.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/selector/SelectorConfig.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -1,8 +1,14 @@
package org.drools.solver.config.localsearch.decider.selector;
+import java.util.ArrayList;
+import java.util.List;
+
import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.drools.solver.core.localsearch.decider.selector.CachedMoveListMoveFactory;
-import org.drools.solver.core.localsearch.decider.selector.MoveFactory;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+import org.drools.solver.core.localsearch.decider.selector.CompositeSelector;
+import org.drools.solver.core.localsearch.decider.selector.MoveFactorySelector;
+import org.drools.solver.core.localsearch.decider.selector.Selector;
+import org.drools.solver.core.move.factory.MoveFactory;
/**
* @author Geoffrey De Smet
@@ -10,10 +16,22 @@
@XStreamAlias("selector")
public class SelectorConfig {
+ @XStreamImplicit(itemFieldName = "selector")
+ private List<SelectorConfig> selectorConfigList = null;
+
private MoveFactory moveFactory = null;
private Class<MoveFactory> moveFactoryClass = null;
- private Boolean shuffleMovesEveryStep = null;
+ protected Boolean shuffle = null;
+ protected Double relativeSelection = null;
+ public List<SelectorConfig> getSelectorConfigList() {
+ return selectorConfigList;
+ }
+
+ public void setSelectorConfigList(List<SelectorConfig> selectorConfigList) {
+ this.selectorConfigList = selectorConfigList;
+ }
+
public MoveFactory getMoveFactory() {
return moveFactory;
}
@@ -30,41 +48,68 @@
this.moveFactoryClass = moveFactoryClass;
}
- public Boolean getShuffleMovesEveryStep() {
- return shuffleMovesEveryStep;
+ public Boolean getShuffle() {
+ return shuffle;
}
- public void setShuffleMovesEveryStep(Boolean shuffleMovesEveryStep) {
- this.shuffleMovesEveryStep = shuffleMovesEveryStep;
- }// ************************************************************************
+ public void setShuffle(Boolean shuffle) {
+ this.shuffle = shuffle;
+ }
+
+ public Double getRelativeSelection() {
+ return relativeSelection;
+ }
+
+ public void setRelativeSelection(Double relativeSelection) {
+ this.relativeSelection = relativeSelection;
+ }
+
+ // ************************************************************************
// Builder methods
// ************************************************************************
- public MoveFactory buildMoveFactory() {
- if (moveFactory != null) {
- return moveFactory;
- } else if (moveFactoryClass != null) {
- try {
- MoveFactory moveFactory = moveFactoryClass.newInstance();
- if (shuffleMovesEveryStep != null)
- {
- ((CachedMoveListMoveFactory) moveFactory).setShuffleListEveryStep(
- shuffleMovesEveryStep.booleanValue());
+ public Selector buildSelector() {
+ if (selectorConfigList != null) {
+ List<Selector> selectorList = new ArrayList<Selector>(selectorConfigList.size());
+ for (SelectorConfig selectorConfig : selectorConfigList) {
+ selectorList.add(selectorConfig.buildSelector());
+ }
+ CompositeSelector selector = new CompositeSelector();
+ selector.setSelectorList(selectorList);
+ return selector;
+ } else if (moveFactory != null || moveFactoryClass != null) {
+ MoveFactory initializedMoveFactory;
+ if (moveFactory != null) {
+ initializedMoveFactory = moveFactory;
+ } else {
+ try {
+ initializedMoveFactory = moveFactoryClass.newInstance();
+ } catch (InstantiationException e) {
+ throw new IllegalArgumentException("The moveFactoryClass (" + moveFactoryClass.getName()
+ + ") does not have a public no-arg constructor", e);
+ } catch (IllegalAccessException e) {
+ throw new IllegalArgumentException("The moveFactoryClass (" + moveFactoryClass.getName()
+ + ") does not have a public no-arg constructor", e);
}
- return moveFactory;
- } catch (InstantiationException e) {
- throw new IllegalArgumentException("moveFactoryClass (" + moveFactoryClass.getName()
- + ") does not have a public no-arg constructor", e);
- } catch (IllegalAccessException e) {
- throw new IllegalArgumentException("moveFactoryClass (" + moveFactoryClass.getName()
- + ") does not have a public no-arg constructor", e);
}
+ MoveFactorySelector selector = new MoveFactorySelector();
+ selector.setMoveFactory(initializedMoveFactory);
+ if (shuffle != null) {
+ selector.setShuffle(shuffle.booleanValue());
+ } else {
+ selector.setShuffle(relativeSelection != null);
+ }
+ if (relativeSelection != null) {
+ selector.setRelativeSelection(relativeSelection);
+ }
+ return selector;
} else {
throw new IllegalArgumentException("A selector with a moveFactory or moveFactory class is required.");
}
}
public void inherit(SelectorConfig inheritedConfig) {
+ // TODO FIXME
if (moveFactory == null && moveFactoryClass == null) {
moveFactory = inheritedConfig.getMoveFactory();
moveFactoryClass = inheritedConfig.getMoveFactoryClass();
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -5,7 +5,7 @@
import org.drools.solver.core.localsearch.LocalSearchSolver;
import org.drools.solver.core.localsearch.decider.accepter.Accepter;
import org.drools.solver.core.localsearch.decider.forager.Forager;
-import org.drools.solver.core.localsearch.decider.selector.MoveFactory;
+import org.drools.solver.core.localsearch.decider.selector.Selector;
import org.drools.solver.core.move.Move;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -19,7 +19,7 @@
protected LocalSearchSolver localSearchSolver;
- protected MoveFactory moveFactory;
+ protected Selector selector;
protected Accepter accepter;
protected Forager forager;
@@ -27,13 +27,13 @@
public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
this.localSearchSolver = localSearchSolver;
- moveFactory.setLocalSearchSolver(localSearchSolver);
+ selector.setLocalSearchSolver(localSearchSolver);
accepter.setLocalSearchSolver(localSearchSolver);
forager.setLocalSearchSolver(localSearchSolver);
}
- public void setMoveFactory(MoveFactory moveFactory) {
- this.moveFactory = moveFactory;
+ public void setSelector(Selector selector) {
+ this.selector = selector;
}
public void setAccepter(Accepter accepter) {
@@ -53,20 +53,20 @@
// ************************************************************************
public void solvingStarted() {
- moveFactory.solvingStarted();
+ selector.solvingStarted();
accepter.solvingStarted();
forager.solvingStarted();
}
public void beforeDeciding() {
- moveFactory.beforeDeciding();
+ selector.beforeDeciding();
accepter.beforeDeciding();
forager.beforeDeciding();
}
public Move decideNextStep() {
WorkingMemory workingMemory = localSearchSolver.getEvaluationHandler().getStatefulSession();
- for (Move move : moveFactory) {
+ for (Move move : selector.selectMoveList()) {
// Filter out not doable moves
if (move.isMoveDoable(workingMemory)) {
doMove(move);
@@ -104,99 +104,20 @@
forager.addMove(move, score, acceptChance);
}
-// /**
-// * @param move
-// * @param score
-// * @return true if the move is accepted
-// */
-// private boolean decideOnMove(Move move, double score) { // TODO FIXME
-// // Filter out not fit enough moves
-// if (!(deciderMode.isTakeFittestOnly() && (nextMove != null) && (nextScore > score))) {
-// double acceptChance = accepter.calculateAcceptChance(move, score);
-// // Filter out not acceptable moves
-// if (acceptChance > 0.0) {
-// double random = getRandom().nextDouble();
-// // Filter out not accepted moves
-// if (random < acceptChance) {
-// if (deciderMode.isTakeFittestOnly() && (nextMove != null)
-// && (score > nextScore)) {
-// acceptedCount = 0.0;
-// }
-// acceptedCount++;
-// if (random < (acceptChance / acceptedCount)) {
-// return true;
-// }
-// }
-// }
-// }
-// return false;
-// }
-
-// private void processMove(Move move, double score) {
-// if (decideOnMove(move, score)) {
-// if (logger.isDebugEnabled()) {
-// logger.debug(" Move (" + move + ") with score (" + score + ") accepted. "
-// + "Updating next move and score.");
-// }
-// nextMove = move;
-// nextScore = score;
-// if (deciderMode.isTakeFirstFound()) {
-// // Only break early if any will do or if it improves (because only improving will do)
-// if (deciderMode.isTakeFittestOnly()) {
-// quitEarly = true;
-// } else if (score > localSearchSolver.getStepScore()) {
-// quitEarly = true;
-// }
-// }
-// } else {
-// if (logger.isDebugEnabled()) {
-// logger.debug(" Move (" + move + ") with score (" + score + ") is not accepted.");
-// }
-// }
-// }
-
-// /**
-// * @param move
-// * @param score
-// * @return true if the move is accepted
-// */
-// protected boolean decideOnMove(Move move, double score) {
-// // Filter out not fit enough moves
-// if (!(deciderMode.isTakeFittestOnly() && (nextMove != null) && (nextScore > score))) {
-// double acceptChance = accepter.calculateAcceptChance(move, score);
-// // Filter out not acceptable moves
-// if (acceptChance > 0.0) {
-// double random = getRandom().nextDouble();
-// // Filter out not accepted moves
-// if (random < acceptChance) {
-// if (deciderMode.isTakeFittestOnly() && (nextMove != null)
-// && (score > nextScore)) {
-// acceptedCount = 0.0;
-// }
-// acceptedCount++;
-// if (random < (acceptChance / acceptedCount)) {
-// return true;
-// }
-// }
-// }
-// }
-// return false;
-// }
-
public void stepDecided(Move step) {
- moveFactory.stepDecided(step);
+ selector.stepDecided(step);
accepter.stepDecided(step);
forager.stepDecided(step);
}
public void stepTaken() {
- moveFactory.stepTaken();
+ selector.stepTaken();
accepter.stepTaken();
forager.stepTaken();
}
public void solvingEnded() {
- moveFactory.solvingEnded();
+ selector.solvingEnded();
accepter.solvingEnded();
forager.solvingEnded();
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/CompositeAccepter.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/CompositeAccepter.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/CompositeAccepter.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -4,16 +4,12 @@
import org.drools.solver.core.localsearch.LocalSearchSolver;
import org.drools.solver.core.move.Move;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
/**
* @author Geoffrey De Smet
*/
public class CompositeAccepter extends AbstractAccepter {
- protected final transient Logger logger = LoggerFactory.getLogger(getClass());
-
protected List<Accepter> accepterList;
public void setAccepterList(List<Accepter> accepterList) {
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -1,45 +0,0 @@
-package org.drools.solver.core.localsearch.decider.selector;
-
-import org.drools.solver.core.localsearch.LocalSearchSolver;
-import org.drools.solver.core.move.Move;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * @author Geoffrey De Smet
- */
-public abstract class AbstractMoveFactory implements MoveFactory {
-
- protected final transient Logger logger = LoggerFactory.getLogger(getClass());
-
- protected LocalSearchSolver localSearchSolver;
-
- public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
- this.localSearchSolver = localSearchSolver;
- }
-
- // ************************************************************************
- // Worker methods
- // ************************************************************************
-
- public void solvingStarted() {
- // Hook which can be optionally overwritten by subclasses.
- }
-
- public void beforeDeciding() {
- // Hook which can be optionally overwritten by subclasses.
- }
-
- public void stepDecided(Move step) {
- // Hook which can be optionally overwritten by subclasses.
- }
-
- public void stepTaken() {
- // Hook which can be optionally overwritten by subclasses.
- }
-
- public void solvingEnded() {
- // Hook which can be optionally overwritten by subclasses.
- }
-
-}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractSelector.java (from rev 18040, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/AbstractAccepter.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractSelector.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/AbstractSelector.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,45 @@
+package org.drools.solver.core.localsearch.decider.selector;
+
+import org.drools.solver.core.localsearch.LocalSearchSolver;
+import org.drools.solver.core.move.Move;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public abstract class AbstractSelector implements Selector {
+
+ protected final transient Logger logger = LoggerFactory.getLogger(getClass());
+
+ protected LocalSearchSolver localSearchSolver;
+
+ public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
+ this.localSearchSolver = localSearchSolver;
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ public void solvingStarted() {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+ public void beforeDeciding() {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+ public void stepDecided(Move step) {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+ public void stepTaken() {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+ public void solvingEnded() {
+ // Hook which can be optionally overwritten by subclasses.
+ }
+
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CachedMoveListMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CachedMoveListMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CachedMoveListMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -1,44 +0,0 @@
-package org.drools.solver.core.localsearch.decider.selector;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.drools.solver.core.move.Move;
-import org.drools.solver.core.solution.Solution;
-
-/**
- * @author Geoffrey De Smet
- */
-public abstract class CachedMoveListMoveFactory extends AbstractMoveFactory {
-
- protected List<Move> cachedMoveList;
- protected boolean shuffleListEveryStep = false;
-
- public List<Move> getCachedMoveList() {
- return cachedMoveList;
- }
-
- public boolean isShuffleListEveryStep() {
- return shuffleListEveryStep;
- }
-
- public void setShuffleListEveryStep(boolean shuffleListEveryStep) {
- this.shuffleListEveryStep = shuffleListEveryStep;
- }
-
- @Override
- public void solvingStarted() {
- cachedMoveList = createMoveList(localSearchSolver.getCurrentSolution());
- }
-
- public abstract List<Move> createMoveList(Solution startingSolution);
-
- public Iterator<Move> iterator() {
- if (shuffleListEveryStep) {
- Collections.shuffle(cachedMoveList, localSearchSolver.getRandom()); // TODO is this needed?
- }
- return cachedMoveList.iterator();
- }
-
-}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CompositeSelector.java (from rev 18040, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/CompositeAccepter.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CompositeSelector.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CompositeSelector.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,76 @@
+package org.drools.solver.core.localsearch.decider.selector;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.solver.core.localsearch.LocalSearchSolver;
+import org.drools.solver.core.move.Move;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CompositeSelector extends AbstractSelector {
+
+ protected List<Selector> selectorList;
+
+ public void setSelectorList(List<Selector> selectorList) {
+ this.selectorList = selectorList;
+ }
+
+ public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
+ super.setLocalSearchSolver(localSearchSolver);
+ for (Selector selector : selectorList) {
+ selector.setLocalSearchSolver(localSearchSolver);
+ }
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ public void solvingStarted() {
+ for (Selector selector : selectorList) {
+ selector.solvingStarted();
+ }
+ }
+
+ public void beforeDeciding() {
+ for (Selector selector : selectorList) {
+ selector.beforeDeciding();
+ }
+ }
+
+ public List<Move> selectMoveList() {
+ int totalSize = 0;
+ List<List<Move>> subMoveLists = new ArrayList<List<Move>>(selectorList.size());
+ for (Selector selector : selectorList) {
+ List<Move> subMoveList = selector.selectMoveList();
+ totalSize += subMoveList.size();
+ subMoveLists.add(subMoveList);
+ }
+ List<Move> moveList = new ArrayList<Move>(totalSize);
+ for (List<Move> subMoveList : subMoveLists) {
+ moveList.addAll(subMoveList);
+ }
+ return moveList;
+ }
+
+ public void stepDecided(Move step) {
+ for (Selector selector : selectorList) {
+ selector.stepDecided(step);
+ }
+ }
+
+ public void stepTaken() {
+ for (Selector selector : selectorList) {
+ selector.stepTaken();
+ }
+ }
+
+ public void solvingEnded() {
+ for (Selector selector : selectorList) {
+ selector.solvingEnded();
+ }
+ }
+
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -1,12 +0,0 @@
-package org.drools.solver.core.localsearch.decider.selector;
-
-import org.drools.solver.core.localsearch.LocalSearchSolverAware;
-import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
-import org.drools.solver.core.move.Move;
-
-/**
- * @author Geoffrey De Smet
- */
-public interface MoveFactory extends LocalSearchSolverAware, LocalSearchSolverLifecycleListener, Iterable<Move> {
-
-}
Added: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactorySelector.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactorySelector.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactorySelector.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,76 @@
+package org.drools.solver.core.localsearch.decider.selector;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.drools.solver.core.localsearch.LocalSearchSolver;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.MoveFactory;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class MoveFactorySelector extends AbstractSelector {
+
+ protected MoveFactory moveFactory;
+
+ protected boolean shuffle = true;
+ protected Double relativeSelection = null;
+
+ public void setMoveFactory(MoveFactory moveFactory) {
+ this.moveFactory = moveFactory;
+ }
+
+ public void setShuffle(boolean shuffle) {
+ this.shuffle = shuffle;
+ }
+
+ public void setRelativeSelection(Double relativeSelection) {
+ this.relativeSelection = relativeSelection;
+ }
+
+ public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
+ super.setLocalSearchSolver(localSearchSolver);
+ moveFactory.setLocalSearchSolver(localSearchSolver);
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ public void solvingStarted() {
+ moveFactory.solvingStarted();
+ }
+
+ public void beforeDeciding() {
+ moveFactory.beforeDeciding();
+ }
+
+ public final List<Move> selectMoveList() {
+ List<Move> moveList = moveFactory.createMoveList(localSearchSolver.getCurrentSolution());
+ if (shuffle) {
+ Collections.shuffle(moveList, localSearchSolver.getRandom());
+ }
+ if (relativeSelection != null) {
+ int selectionSize = (int) Math.ceil(relativeSelection * moveList.size());
+ if (selectionSize == 0) {
+ selectionSize = 1;
+ }
+ moveList = moveList.subList(0, selectionSize);
+ }
+ return moveList;
+ }
+
+ public void stepDecided(Move step) {
+ moveFactory.stepDecided(step);
+ }
+
+ public void stepTaken() {
+ moveFactory.stepTaken();
+ }
+
+ public void solvingEnded() {
+ moveFactory.solvingEnded();
+ }
+
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/Selector.java (from rev 18040, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/accepter/Accepter.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/Selector.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/Selector.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,16 @@
+package org.drools.solver.core.localsearch.decider.selector;
+
+import java.util.List;
+
+import org.drools.solver.core.localsearch.LocalSearchSolverAware;
+import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
+import org.drools.solver.core.move.Move;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public interface Selector extends LocalSearchSolverAware, LocalSearchSolverLifecycleListener {
+
+ List<Move> selectMoveList();
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/Move.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/Move.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/Move.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -3,7 +3,7 @@
import org.drools.FactHandle;
import org.drools.WorkingMemory;
import org.drools.solver.core.Solver;
-import org.drools.solver.core.localsearch.decider.selector.MoveFactory;
+import org.drools.solver.core.move.factory.MoveFactory;
import org.drools.solver.core.score.calculator.ScoreCalculator;
import org.drools.solver.core.solution.Solution;
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/CachedMoveFactory.java (from rev 18040, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/CachedMoveListMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/CachedMoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/CachedMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,28 @@
+package org.drools.solver.core.move.factory;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.solver.core.move.Move;
+import org.drools.solver.core.solution.Solution;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public abstract class CachedMoveFactory extends AbstractMoveFactory {
+
+ protected List<Move> cachedMoveList;
+
+ @Override
+ public void solvingStarted() {
+ cachedMoveList = createCachedMoveList(localSearchSolver.getCurrentSolution());
+ }
+
+ public abstract List<Move> createCachedMoveList(Solution startingSolution);
+
+ public List<Move> createMoveList(Solution solution) {
+ // Shallow copy so it can be shuffled and filtered etc
+ return new ArrayList<Move>(cachedMoveList);
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/MoveFactory.java (from rev 18040, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/selector/MoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/MoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/move/factory/MoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,17 @@
+package org.drools.solver.core.move.factory;
+
+import java.util.List;
+
+import org.drools.solver.core.localsearch.LocalSearchSolverAware;
+import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.core.solution.Solution;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public interface MoveFactory extends LocalSearchSolverAware, LocalSearchSolverLifecycleListener {
+
+ List<Move> createMoveList(Solution solution);
+
+}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExamSwitchExaminationMoveFactory.java (from rev 18040, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExamSwitchExaminationMoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExamSwitchExaminationMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,33 @@
+package org.drools.solver.examples.itc2007.examination.solver;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.CachedMoveFactory;
+import org.drools.solver.core.solution.Solution;
+import org.drools.solver.examples.itc2007.examination.domain.Exam;
+import org.drools.solver.examples.itc2007.examination.domain.Examination;
+import org.drools.solver.examples.itc2007.examination.solver.move.ExamSwitchMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ExamSwitchExaminationMoveFactory extends CachedMoveFactory {
+
+ public List<Move> createCachedMoveList(Solution solution) {
+ Examination examination = (Examination) localSearchSolver.getCurrentSolution();
+ List<Exam> examList = examination.getExamList();
+ List<Move> moveList = new ArrayList<Move>();
+ for (ListIterator<Exam> leftIt = examList.listIterator(); leftIt.hasNext();) {
+ Exam leftExam = leftIt.next();
+ for (ListIterator<Exam> rightIt = examList.listIterator(leftIt.nextIndex()); rightIt.hasNext();) {
+ Exam rightExam = rightIt.next();
+ moveList.add(new ExamSwitchMove(leftExam, rightExam));
+ }
+ }
+ return moveList;
+ }
+
+}
\ No newline at end of file
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -1,47 +0,0 @@
-package org.drools.solver.examples.itc2007.examination.solver;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.drools.solver.core.localsearch.decider.selector.CachedMoveListMoveFactory;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.core.solution.Solution;
-import org.drools.solver.examples.itc2007.examination.domain.Exam;
-import org.drools.solver.examples.itc2007.examination.domain.Examination;
-import org.drools.solver.examples.itc2007.examination.domain.Period;
-import org.drools.solver.examples.itc2007.examination.domain.Room;
-import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeBulkMove;
-import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
-import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
-
-/**
- * @author Geoffrey De Smet
- */
-public class ExaminationMoveFactory extends CachedMoveListMoveFactory {
-
- public List<Move> createMoveList(Solution solution) {
- Examination examination = (Examination) solution;
- List<Period> periodList = examination.getPeriodList();
- List<Room> roomList = examination.getRoomList();
- List<Move> moveList = new ArrayList<Move>();
- for (Exam exam : examination.getExamList()) {
- if (exam.getExamCoincidence() != null) {
- if (exam.isCoincidenceLeader()) {
- for (Period period : periodList) {
- moveList.add(new PeriodChangeBulkMove(
- exam.getExamCoincidence().getCoincidenceExamSet(), period));
- }
- }
- } else {
- for (Period period : periodList) {
- moveList.add(new PeriodChangeMove(exam, period));
- }
- }
- for (Room room : roomList) {
- moveList.add(new RoomChangeMove(exam, room));
- }
- }
- return moveList;
- }
-
-}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -1,11 +1,11 @@
package org.drools.solver.examples.itc2007.examination.solver;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import org.drools.solver.core.localsearch.decider.selector.AbstractMoveFactory;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.AbstractMoveFactory;
+import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.itc2007.examination.domain.Exam;
import org.drools.solver.examples.itc2007.examination.domain.Examination;
import org.drools.solver.examples.itc2007.examination.domain.Period;
@@ -22,8 +22,8 @@
private int periodJump = 1;
private int roomJump = 1;
- public Iterator<Move> iterator() {
- Examination examination = (Examination) localSearchSolver.getCurrentSolution();
+ public List<Move> createMoveList(Solution solution) {
+ Examination examination = (Examination) solution;
List<Period> periodList = examination.getPeriodList();
List<Room> roomList = examination.getRoomList();
List<Move> moveList = new ArrayList<Move>();
@@ -64,7 +64,7 @@
if (roomJump >= (roomList.size() / 2)) {
roomJump = 1;
}
- return moveList.iterator();
+ return moveList;
// TODO re-enable this stuff as it's a lot faster
// int maximumMoveSize = 100;
// // TODO not fair for first and last moves in move list
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -1,11 +1,11 @@
package org.drools.solver.examples.itc2007.examination.solver;
import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
-import org.drools.solver.core.localsearch.decider.selector.AbstractMoveFactory;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.AbstractMoveFactory;
+import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.itc2007.examination.domain.Exam;
import org.drools.solver.examples.itc2007.examination.domain.Examination;
import org.drools.solver.examples.itc2007.examination.domain.Period;
@@ -22,8 +22,8 @@
private static final int PERIOD_JUMP = 2;
private static final int ROOM_JUMP = 2;
- public Iterator<Move> iterator() {
- Examination examination = (Examination) localSearchSolver.getCurrentSolution();
+ public List<Move> createMoveList(Solution solution) {
+ Examination examination = (Examination) solution;
List<Period> periodList = examination.getPeriodList();
List<Room> roomList = examination.getRoomList();
List<Move> moveList = new ArrayList<Move>();
@@ -56,7 +56,7 @@
}
}
}
- return moveList.iterator();
+ return moveList;
// TODO re-enable this stuff as it's a lot faster
// int maximumMoveSize = 100;
// // TODO not fair for first and last moves in move list
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeExaminationMoveFactory.java (from rev 18040, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeExaminationMoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeExaminationMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,41 @@
+package org.drools.solver.examples.itc2007.examination.solver;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.CachedMoveFactory;
+import org.drools.solver.core.solution.Solution;
+import org.drools.solver.examples.itc2007.examination.domain.Exam;
+import org.drools.solver.examples.itc2007.examination.domain.Examination;
+import org.drools.solver.examples.itc2007.examination.domain.Period;
+import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeBulkMove;
+import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class PeriodChangeExaminationMoveFactory extends CachedMoveFactory {
+
+ public List<Move> createCachedMoveList(Solution solution) {
+ Examination examination = (Examination) solution;
+ List<Period> periodList = examination.getPeriodList();
+ List<Move> moveList = new ArrayList<Move>();
+ for (Exam exam : examination.getExamList()) {
+ if (exam.getExamCoincidence() != null) {
+ if (exam.isCoincidenceLeader()) {
+ for (Period period : periodList) {
+ moveList.add(new PeriodChangeBulkMove(
+ exam.getExamCoincidence().getCoincidenceExamSet(), period));
+ }
+ }
+ } else {
+ for (Period period : periodList) {
+ moveList.add(new PeriodChangeMove(exam, period));
+ }
+ }
+ }
+ return moveList;
+ }
+
+}
\ No newline at end of file
Added: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/RoomChangeExaminationMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/RoomChangeExaminationMoveFactory.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/RoomChangeExaminationMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -0,0 +1,31 @@
+package org.drools.solver.examples.itc2007.examination.solver;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.CachedMoveFactory;
+import org.drools.solver.core.solution.Solution;
+import org.drools.solver.examples.itc2007.examination.domain.Exam;
+import org.drools.solver.examples.itc2007.examination.domain.Examination;
+import org.drools.solver.examples.itc2007.examination.domain.Room;
+import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class RoomChangeExaminationMoveFactory extends CachedMoveFactory {
+
+ public List<Move> createCachedMoveList(Solution solution) {
+ Examination examination = (Examination) solution;
+ List<Room> roomList = examination.getRoomList();
+ List<Move> moveList = new ArrayList<Move>();
+ for (Exam exam : examination.getExamList()) {
+ for (Room room : roomList) {
+ moveList.add(new RoomChangeMove(exam, room));
+ }
+ }
+ return moveList;
+ }
+
+}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExamSwitchMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExamSwitchMove.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/ExamSwitchMove.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -37,6 +37,7 @@
}
public void doMove(WorkingMemory workingMemory) {
+ // TODO also move coincidence
FactHandle leftExamHandle = workingMemory.getFactHandle(leftExam);
FactHandle rightExamHandle = workingMemory.getFactHandle(rightExam);
Period oldLeftPeriod = leftExam.getPeriod();
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/LessonScheduleMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/LessonScheduleMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/LessonScheduleMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -3,8 +3,8 @@
import java.util.ArrayList;
import java.util.List;
-import org.drools.solver.core.localsearch.decider.selector.CachedMoveListMoveFactory;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.CachedMoveFactory;
import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.lessonschedule.domain.Lesson;
import org.drools.solver.examples.lessonschedule.domain.LessonSchedule;
@@ -14,9 +14,9 @@
/**
* @author Geoffrey De Smet
*/
-public class LessonScheduleMoveFactory extends CachedMoveListMoveFactory {
+public class LessonScheduleMoveFactory extends CachedMoveFactory {
- public List<Move> createMoveList(Solution solution) {
+ public List<Move> createCachedMoveList(Solution solution) {
List<Move> moveList = new ArrayList<Move>();
LessonSchedule lessonSchedule = (LessonSchedule) solution;
for (Lesson lesson : lessonSchedule.getLessonList()) {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/NQueensMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/NQueensMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/NQueensMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -3,8 +3,8 @@
import java.util.ArrayList;
import java.util.List;
-import org.drools.solver.core.localsearch.decider.selector.CachedMoveListMoveFactory;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.CachedMoveFactory;
import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.nqueens.domain.NQueens;
import org.drools.solver.examples.nqueens.domain.Queen;
@@ -13,9 +13,9 @@
/**
* @author Geoffrey De Smet
*/
-public class NQueensMoveFactory extends CachedMoveListMoveFactory {
+public class NQueensMoveFactory extends CachedMoveFactory {
- public List<Move> createMoveList(Solution solution) {
+ public List<Move> createCachedMoveList(Solution solution) {
NQueens nQueens = (NQueens) solution;
List<Move> moveList = new ArrayList<Move>();
for (Queen queen : nQueens.getQueenList()) {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -3,8 +3,8 @@
import java.util.ArrayList;
import java.util.List;
-import org.drools.solver.core.localsearch.decider.selector.CachedMoveListMoveFactory;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.CachedMoveFactory;
import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.travelingtournament.domain.Day;
import org.drools.solver.examples.travelingtournament.domain.Match;
@@ -14,9 +14,9 @@
/**
* @author Geoffrey De Smet
*/
-public class SimpleTravelingTournamentMoveFactory extends CachedMoveListMoveFactory {
+public class SimpleTravelingTournamentMoveFactory extends CachedMoveFactory {
- public List<Move> createMoveList(Solution solution) {
+ public List<Move> createCachedMoveList(Solution solution) {
List<Move> moveList = new ArrayList<Move>();
TravelingTournament travelingTournament = (TravelingTournament) solution;
for (Match match : travelingTournament.getMatchList()) {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentMoveFactory.java 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentMoveFactory.java 2008-01-24 21:05:25 UTC (rev 18084)
@@ -3,14 +3,14 @@
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Map;
-import org.drools.solver.core.localsearch.decider.selector.AbstractMoveFactory;
import org.drools.solver.core.move.Move;
+import org.drools.solver.core.move.factory.AbstractMoveFactory;
+import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.travelingtournament.domain.Day;
import org.drools.solver.examples.travelingtournament.domain.Match;
import org.drools.solver.examples.travelingtournament.domain.Team;
@@ -47,9 +47,10 @@
}
}
- public Iterator<Move> iterator() {
+
+ public List<Move> createMoveList(Solution solution) {
+ TravelingTournament travelingTournament = (TravelingTournament) solution;
List<Move> moveList = new ArrayList<Move>();
- TravelingTournament travelingTournament = (TravelingTournament) localSearchSolver.getCurrentSolution();
moveList.addAll(cachedMoveList);
RotationMovesFactory rotationMovesFactory = new RotationMovesFactory(travelingTournament);
logger.debug("Reused {} moves for N1 neighborhood.", moveList.size());
@@ -60,7 +61,7 @@
rotationMovesFactory.addTeamRotation(moveList);
logger.debug("Created {} moves for N2 U N4 neighborhood.", (moveList.size() - oldSize));
rotationMovesFactory = null;
- return moveList.iterator();
+ return moveList;
}
private static class RotationMovesFactory {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml 2008-01-24 21:05:25 UTC (rev 18084)
@@ -20,7 +20,7 @@
<solverBenchmark>
<localSearchSolver>
<selector>
- <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.ExaminationMoveFactory</moveFactoryClass>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.PeriodChangeExaminationMoveFactory</moveFactoryClass>
<shuffleMovesEveryStep>true</shuffleMovesEveryStep>
</selector>
<accepter>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml 2008-01-24 21:05:25 UTC (rev 18084)
@@ -33,7 +33,7 @@
<!--<solverBenchmark>-->
<!--<localSearchSolver>-->
<!--<selector>-->
- <!--<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.ExaminationMoveFactory</moveFactoryClass>-->
+ <!--<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.PeriodChangeExaminationMoveFactory</moveFactoryClass>-->
<!--<shuffleMovesEveryStep>true</shuffleMovesEveryStep>-->
<!--</selector>-->
<!--<accepter>-->
@@ -47,7 +47,18 @@
<solverBenchmark>
<localSearchSolver>
<selector>
- <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.NeighbourExaminationMoveFactory</moveFactoryClass>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.PeriodChangeExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.05</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.RoomChangeExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.05</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.ExamSwitchExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.05</relativeSelection>
+ </selector>
</selector>
<accepter>
<completeSolutionTabuSize>1500</completeSolutionTabuSize>
@@ -60,7 +71,18 @@
<solverBenchmark>
<localSearchSolver>
<selector>
- <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.JumpingNeighbourExaminationMoveFactory</moveFactoryClass>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.PeriodChangeExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.01</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.RoomChangeExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.01</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.ExamSwitchExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.01</relativeSelection>
+ </selector>
</selector>
<accepter>
<completeSolutionTabuSize>1500</completeSolutionTabuSize>
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml 2008-01-24 19:43:07 UTC (rev 18083)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml 2008-01-24 21:05:25 UTC (rev 18084)
@@ -16,8 +16,18 @@
<!--<maximumStepCount>100</maximumStepCount>-->
</finish>
<selector>
- <!--<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.NeighbourExaminationMoveFactory</moveFactoryClass>-->
- <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.JumpingNeighbourExaminationMoveFactory</moveFactoryClass>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.PeriodChangeExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.1</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.RoomChangeExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.1</relativeSelection>
+ </selector>
+ <selector>
+ <moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.ExamSwitchExaminationMoveFactory</moveFactoryClass>
+ <relativeSelection>0.1</relativeSelection>
+ </selector>
</selector>
<accepter>
<completeSolutionTabuSize>1500</completeSolutionTabuSize>
@@ -26,7 +36,7 @@
<foragerType>MAX_SCORE_OF_ALL</foragerType>
</forager>
<!--<selector>-->
- <!--<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.ExaminationMoveFactory</moveFactoryClass>-->
+ <!--<moveFactoryClass>org.drools.solver.examples.itc2007.examination.solver.PeriodChangeExaminationMoveFactory</moveFactoryClass>-->
<!--<shuffleMovesEveryStep>true</shuffleMovesEveryStep>-->
<!--</selector>-->
<!--<accepter>-->
More information about the jboss-svn-commits
mailing list