[jboss-svn-commits] JBL Code SVN: r31659 - in labs/jbossrules/trunk/drools-planner: drools-planner-core/src/main/java/org/drools/planner/core/move/factory and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Feb 14 05:37:38 EST 2010
Author: ge0ffrey
Date: 2010-02-14 05:37:38 -0500 (Sun, 14 Feb 2010)
New Revision: 31659
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/
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/AllMovesOfOneExamSelectorConfig.java
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/move/factory/CachedMoveFactory.java
Log:
JBRULES-2134 configure a custom selector
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-02-13 18:56:27 UTC (rev 31658)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/selector/MoveFactorySelector.java 2010-02-14 10:37:38 UTC (rev 31659)
@@ -64,7 +64,7 @@
moveFactory.beforeDeciding(stepScope);
}
- public final List<Move> selectMoveList(StepScope stepScope) {
+ public List<Move> selectMoveList(StepScope stepScope) {
List<Move> moveList = moveFactory.createMoveList(stepScope.getWorkingSolution());
if (shuffle) {
Collections.shuffle(moveList, stepScope.getWorkingRandom());
@@ -99,4 +99,4 @@
moveFactory.solvingEnded(localSearchSolverScope);
}
-}
\ No newline at end of file
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/move/factory/CachedMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/move/factory/CachedMoveFactory.java 2010-02-13 18:56:27 UTC (rev 31658)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/move/factory/CachedMoveFactory.java 2010-02-14 10:37:38 UTC (rev 31659)
@@ -14,6 +14,10 @@
protected List<Move> cachedMoveList;
+ public List<Move> getCachedMoveList() {
+ return cachedMoveList;
+ }
+
@Override
public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
cachedMoveList = createCachedMoveList(localSearchSolverScope.getWorkingSolution());
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelector.java (from rev 31468, 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-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelector.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelector.java 2010-02-14 10:37:38 UTC (rev 31659)
@@ -0,0 +1,127 @@
+package org.drools.planner.examples.examination.solver.selector;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.drools.planner.core.localsearch.LocalSearchSolverScope;
+import org.drools.planner.core.localsearch.StepScope;
+import org.drools.planner.core.localsearch.decider.Decider;
+import org.drools.planner.core.localsearch.decider.acceptor.tabu.TabuPropertyEnabled;
+import org.drools.planner.core.localsearch.decider.selector.AbstractSelector;
+import org.drools.planner.core.move.Move;
+import org.drools.planner.core.move.factory.MoveFactory;
+import org.drools.planner.examples.examination.domain.Exam;
+import org.drools.planner.examples.examination.domain.Examination;
+import org.drools.planner.examples.examination.solver.move.factory.ExamSwitchMoveFactory;
+import org.drools.planner.examples.examination.solver.move.factory.PeriodChangeMoveFactory;
+import org.drools.planner.examples.examination.solver.move.factory.RoomChangeMoveFactory;
+
+/**
+ * A custom selector implementation for the Examination example.
+ * @author Geoffrey De Smet
+ */
+public class AllMovesOfOneExamSelector extends AbstractSelector {
+
+ protected PeriodChangeMoveFactory periodChangeMoveFactory = new PeriodChangeMoveFactory();
+ protected RoomChangeMoveFactory roomChangeMoveFactory = new RoomChangeMoveFactory();
+ protected ExamSwitchMoveFactory examSwitchMoveFactory = new ExamSwitchMoveFactory();
+
+ protected Map<Exam, List<Move>> cachedExamToMoveMap;
+ protected List<Exam> shuffledExamList;
+ protected int nextShuffledExamListIndex;
+
+ @Override
+ public void setDecider(Decider decider) {
+ super.setDecider(decider);
+ periodChangeMoveFactory.setDecider(decider);
+ roomChangeMoveFactory.setDecider(decider);
+ examSwitchMoveFactory.setDecider(decider);
+ }
+
+ // ************************************************************************
+ // Worker methods
+ // ************************************************************************
+
+ @Override
+ public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
+ periodChangeMoveFactory.solvingStarted(localSearchSolverScope);
+ roomChangeMoveFactory.solvingStarted(localSearchSolverScope);
+ examSwitchMoveFactory.solvingStarted(localSearchSolverScope);
+ createCachedExamToMoveMap(localSearchSolverScope);
+ }
+
+ private void createCachedExamToMoveMap(LocalSearchSolverScope localSearchSolverScope) {
+ Examination examination = (Examination) localSearchSolverScope.getWorkingSolution();
+ int examListSize = examination.getExamList().size();
+ List<Move> cachedPeriodChangeMoveList = periodChangeMoveFactory.getCachedMoveList();
+ List<Move> cachedRoomChangeMoveList = roomChangeMoveFactory.getCachedMoveList();
+ List<Move> cachedExamSwitchMoveList = examSwitchMoveFactory.getCachedMoveList();
+ cachedExamToMoveMap = new HashMap<Exam, List<Move>>(cachedPeriodChangeMoveList.size()
+ + cachedRoomChangeMoveList.size() + cachedExamSwitchMoveList.size());
+ addToCachedExamToMoveMap(examListSize, cachedPeriodChangeMoveList);
+ addToCachedExamToMoveMap(examListSize, cachedRoomChangeMoveList);
+ addToCachedExamToMoveMap(examListSize, cachedExamSwitchMoveList);
+ shuffledExamList = new ArrayList<Exam>(cachedExamToMoveMap.keySet());
+ // shuffling is lazy (just in time in the selectMoveList method)
+ nextShuffledExamListIndex = Integer.MAX_VALUE;
+ }
+
+ private void addToCachedExamToMoveMap(int examListSize, List<Move> cachedMoveList) {
+ for (Move cachedMove : cachedMoveList) {
+ TabuPropertyEnabled tabuPropertyEnabledMove = (TabuPropertyEnabled) cachedMove;
+ for (Object o : tabuPropertyEnabledMove.getTabuProperties()) {
+ Exam exam = (Exam) o;
+ List<Move> moveList = cachedExamToMoveMap.get(exam);
+ if (moveList == null) {
+ moveList = new ArrayList<Move>(examListSize);
+ cachedExamToMoveMap.put(exam, moveList);
+ }
+ moveList.add(cachedMove);
+ }
+ }
+ }
+
+ @Override
+ public void beforeDeciding(StepScope stepScope) {
+ periodChangeMoveFactory.beforeDeciding(stepScope);
+ roomChangeMoveFactory.beforeDeciding(stepScope);
+ examSwitchMoveFactory.beforeDeciding(stepScope);
+ }
+
+ public List<Move> selectMoveList(StepScope stepScope) {
+ if (nextShuffledExamListIndex >= shuffledExamList.size()) {
+ // Just in time shuffling
+ Collections.shuffle(shuffledExamList, stepScope.getWorkingRandom());
+ nextShuffledExamListIndex = 0;
+ }
+ Exam exam = shuffledExamList.get(nextShuffledExamListIndex);
+ List<Move> moveList = cachedExamToMoveMap.get(exam);
+ nextShuffledExamListIndex++;
+ return moveList;
+ }
+
+ @Override
+ public void stepDecided(StepScope stepScope) {
+ periodChangeMoveFactory.stepDecided(stepScope);
+ roomChangeMoveFactory.stepDecided(stepScope);
+ examSwitchMoveFactory.stepDecided(stepScope);
+ }
+
+ @Override
+ public void stepTaken(StepScope stepScope) {
+ periodChangeMoveFactory.stepTaken(stepScope);
+ roomChangeMoveFactory.stepTaken(stepScope);
+ examSwitchMoveFactory.stepTaken(stepScope);
+ }
+
+ @Override
+ public void solvingEnded(LocalSearchSolverScope localSearchSolverScope) {
+ periodChangeMoveFactory.solvingEnded(localSearchSolverScope);
+ roomChangeMoveFactory.solvingEnded(localSearchSolverScope);
+ examSwitchMoveFactory.solvingEnded(localSearchSolverScope);
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelectorConfig.java (from rev 31468, 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-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelectorConfig.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/solver/selector/AllMovesOfOneExamSelectorConfig.java 2010-02-14 10:37:38 UTC (rev 31659)
@@ -0,0 +1,35 @@
+package org.drools.planner.examples.examination.solver.selector;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.drools.planner.config.localsearch.decider.selector.SelectorConfig;
+import org.drools.planner.core.localsearch.decider.selector.Selector;
+
+/**
+ * A custom selector configuration for the Examination example.
+ * @see AllMovesOfOneExamSelector
+ * @author Geoffrey De Smet
+ */
+public class AllMovesOfOneExamSelectorConfig extends SelectorConfig {
+
+ // ************************************************************************
+ // Builder methods
+ // ************************************************************************
+
+ @Override
+ public Selector buildSelector() {
+ // Note that all properties of SelectorConfig are ignored.
+ return new AllMovesOfOneExamSelector();
+ }
+
+ @Override
+ public void inherit(SelectorConfig inheritedConfig) {
+ // Note that all inherited properties are ignored because all properties of SelectorConfig are ignored.
+ super.inherit(inheritedConfig);
+ if (inheritedConfig instanceof AllMovesOfOneExamSelectorConfig) {
+ AllMovesOfOneExamSelectorConfig allMovesOfOneExamSelectorConfig
+ = (AllMovesOfOneExamSelectorConfig) inheritedConfig;
+ // Nothing specifically inheritable at the moment
+ }
+ }
+
+}
More information about the jboss-svn-commits
mailing list