[jboss-svn-commits] JBL Code SVN: r17981 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: java/org/drools/solver/examples/itc2007/examination/solver/move and 16 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jan 20 05:48:37 EST 2008
Author: ge0ffrey
Date: 2008-01-20 05:48:36 -0500 (Sun, 20 Jan 2008)
New Revision: 17981
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/move/
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/move/TimeslotChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/YChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/DayChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MatchSwapMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MultipleMatchListRotateMove.java
Removed:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationStartingSolutionInitializer.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/RoomChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/TimeslotChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/domain/
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/YChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/DayChangeMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentScoreCalculator.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MatchSwapMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MultipleMatchListRotateMove.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentScoreCalculator.java
Modified:
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/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/swingui/ExaminationPanel.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/lessonschedule/swingui/LessonSchedulePanel.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/nqueens/swingui/NQueensPanel.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/java/org/drools/solver/examples/travelingtournament/swingui/TravelingTournamentPanel.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:
put moves into a subpackage
Modified: 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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationMoveFactory.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -10,6 +10,8 @@
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.PeriodChangeMove;
+import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
/**
* @author Geoffrey De Smet
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationStartingSolutionInitializer.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationStartingSolutionInitializer.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,180 +0,0 @@
-package org.drools.solver.examples.itc2007.examination.solver;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.apache.commons.lang.builder.CompareToBuilder;
-import org.drools.FactHandle;
-import org.drools.StatefulSession;
-import org.drools.solver.core.evaluation.EvaluationHandler;
-import org.drools.solver.core.solution.initializer.AbstractStartingSolutionInitializer;
-import org.drools.solver.examples.common.domain.PersistableIdComparator;
-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.PeriodHardConstraint;
-import org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraintType;
-import org.drools.solver.examples.itc2007.examination.domain.Room;
-import org.drools.solver.examples.itc2007.examination.domain.Topic;
-
-/**
- * @author Geoffrey De Smet
- */
-public class ExaminationStartingSolutionInitializer extends AbstractStartingSolutionInitializer {
-
- public void intializeSolution() {
- Examination examination = (Examination) solver.getEvaluationHandler().getSolution();
- if (!examination.isInitialized()) {
- initializeExamList(examination);
- }
- }
-
- private void initializeExamList(Examination examination) {
- EvaluationHandler evaluationHandler = solver.getEvaluationHandler();
- List<Topic> topicList = examination.getTopicList();
- List<Period> periodList = examination.getPeriodList();
- List<Room> roomList = examination.getRoomList();
- List<Exam> examList = new ArrayList<Exam>(topicList.size());
- examination.setExamList(examList);
- evaluationHandler.setSolution(examination);
- StatefulSession statefulSession = evaluationHandler.getStatefulSession();
-
- List<Topic> assigningTopicList = createAssigningTopicList(examination);
-
- for (Topic topic : assigningTopicList) {
- double unscheduledScore = evaluationHandler.fireAllRulesAndCalculateStepScore();
-
- Exam exam = new Exam();
- exam.setId(topic.getId());
- exam.setTopic(topic);
- examList.add(exam);
- FactHandle examHandle = null;
-
- List<PeriodScoring> periodScoringList = new ArrayList<PeriodScoring>(periodList.size());
-
- for (Period period : periodList) {
- exam.setPeriod(period);
- if (examHandle == null) {
- // Score rules don't support a nullable exam.getPeriod()
- examHandle = statefulSession.insert(exam);
- } else {
- statefulSession.update(examHandle, exam);
- }
- double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
- periodScoringList.add(new PeriodScoring(period, score));
- }
- Collections.sort(periodScoringList);
-
- boolean perfectMatch = false;
- double bestScore = Double.NEGATIVE_INFINITY;
- Period bestPeriod = null;
- Room bestRoom = null;
- for (PeriodScoring periodScoring : periodScoringList) {
- if (bestScore >= periodScoring.getScore()) {
- // No need to check the rest
- break;
- }
- exam.setPeriod(periodScoring.getPeriod());
- for (Room room : roomList) {
- exam.setRoom(room);
- statefulSession.update(examHandle, exam);
- double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
- if (score < unscheduledScore) {
- if (score > bestScore) {
- bestScore = score;
- bestPeriod = periodScoring.getPeriod();
- bestRoom = room;
- }
- } else if (score == unscheduledScore) {
- perfectMatch = true;
- break;
- } else {
- throw new IllegalStateException("The score (" + score
- + ") cannot be higher than unscheduledScore (" + unscheduledScore + ").");
- }
- }
- if (perfectMatch) {
- break;
- }
- }
- if (!perfectMatch) {
- if (bestPeriod == null || bestRoom == null) {
- throw new IllegalStateException("The bestPeriod (" + bestPeriod + ") or the bestRoom ("
- + bestRoom + ") cannot be null.");
- }
- exam.setPeriod(bestPeriod);
- exam.setRoom(bestRoom);
- statefulSession.update(examHandle, exam);
- }
- logger.debug(" Exam ({}) initialized for starting solution.", exam);
- }
- Collections.sort(examList, new PersistableIdComparator());
- }
-
- /**
- * Order the topics in the order which we 'll assign them into periods and rooms.
- * @param examination not null
- * @return not null
- */
- private List<Topic> createAssigningTopicList(Examination examination) {
- List<Topic> assigningTopicList = new ArrayList<Topic>(examination.getTopicList());
- Collections.sort(assigningTopicList, new Comparator<Topic>() {
- public int compare(Topic a, Topic b) {
- return new CompareToBuilder()
- .append(b.getStudentListSize(), a.getStudentListSize()) // Descending
- .append(b.getDuration(), a.getDuration()) // Descending
- .append(a.getId(), b.getId()) // Ascending
- .toComparison();
- }
- });
- for (PeriodHardConstraint periodHardConstraint : examination.getPeriodHardConstraintList()) {
- if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.EXAM_COINCIDENCE) {
- int leftSideIndex = assigningTopicList.indexOf(periodHardConstraint.getLeftSideTopic());
- int rightSideIndex = assigningTopicList.indexOf(periodHardConstraint.getRightSideTopic());
- int firstIndex = Math.min(leftSideIndex, rightSideIndex);
- int lastIndex = Math.max(leftSideIndex, rightSideIndex);
- if ((lastIndex - firstIndex) > 1) {
- // TODO lastIndex - firstIndex can be 2 with another COINCIDENCE in the middle of it
- Topic lastTopic = assigningTopicList.remove(lastIndex);
- assigningTopicList.add(firstIndex + 1, lastTopic);
- }
- } else if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.AFTER) {
- int afterSideIndex = assigningTopicList.indexOf(periodHardConstraint.getLeftSideTopic());
- int beforeSideIndex = assigningTopicList.indexOf(periodHardConstraint.getRightSideTopic());
- if (afterSideIndex < beforeSideIndex) {
- Topic beforeTopic = assigningTopicList.remove(beforeSideIndex);
- assigningTopicList.add(afterSideIndex, beforeTopic);
- }
- }
- }
-
- return assigningTopicList;
- }
-
- private class PeriodScoring implements Comparable<PeriodScoring> {
-
- private Period period;
- private double score;
-
- private PeriodScoring(Period period, double score) {
- this.period = period;
- this.score = score;
- }
-
- public Period getPeriod() {
- return period;
- }
-
- public double getScore() {
- return score;
- }
-
- public int compareTo(PeriodScoring other) {
- return - new CompareToBuilder().append(score, other.score).toComparison();
- }
-
- }
-
-}
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/JumpingNeighbourExaminationMoveFactory.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -10,6 +10,8 @@
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.PeriodChangeMove;
+import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
/**
* @author Geoffrey De Smet
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/NeighbourExaminationMoveFactory.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -10,6 +10,8 @@
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.PeriodChangeMove;
+import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
/**
* @author Geoffrey De Smet
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeMove.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,75 +0,0 @@
-package org.drools.solver.examples.itc2007.examination.solver;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
-import org.drools.WorkingMemory;
-import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.examples.itc2007.examination.domain.Exam;
-import org.drools.solver.examples.itc2007.examination.domain.Period;
-
-/**
- * @author Geoffrey De Smet
- */
-public class PeriodChangeMove implements Move, TabuPropertyEnabled {
-
- private Exam exam;
- private Period toPeriod;
-
- public PeriodChangeMove(Exam exam, Period toPeriod) {
- this.exam = exam;
- this.toPeriod = toPeriod;
- }
-
- public boolean isMoveDoable(WorkingMemory workingMemory) {
- Period fromPeriod = exam.getPeriod();
- if (fromPeriod == null) {
- return (toPeriod != null);
- }
- return !fromPeriod.equals(toPeriod);
- }
-
- public Move createUndoMove(WorkingMemory workingMemory) {
- return new PeriodChangeMove(exam, exam.getPeriod());
- }
-
- public void doMove(WorkingMemory workingMemory) {
- FactHandle lessonHandle = workingMemory.getFactHandle(exam);
- exam.setPeriod(toPeriod);
- workingMemory.update(lessonHandle, exam);
- }
-
- public List<? extends Object> getTabuPropertyList() {
- return Collections.singletonList(exam);
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof PeriodChangeMove) {
- PeriodChangeMove other = (PeriodChangeMove) o;
- return new EqualsBuilder()
- .append(exam, other.exam)
- .append(toPeriod, other.toPeriod)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(exam)
- .append(toPeriod)
- .toHashCode();
- }
-
- public String toString() {
- return exam + " => " + toPeriod;
- }
-
-}
\ 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/RoomChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/RoomChangeMove.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/RoomChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,75 +0,0 @@
-package org.drools.solver.examples.itc2007.examination.solver;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
-import org.drools.WorkingMemory;
-import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.examples.itc2007.examination.domain.Exam;
-import org.drools.solver.examples.itc2007.examination.domain.Room;
-
-/**
- * @author Geoffrey De Smet
- */
-public class RoomChangeMove implements Move, TabuPropertyEnabled {
-
- private Exam exam;
- private Room toRoom;
-
- public RoomChangeMove(Exam exam, Room toRoom) {
- this.exam = exam;
- this.toRoom = toRoom;
- }
-
- public boolean isMoveDoable(WorkingMemory workingMemory) {
- Room fromRoom = exam.getRoom();
- if (fromRoom == null) {
- return (toRoom != null);
- }
- return !fromRoom.equals(toRoom);
- }
-
- public Move createUndoMove(WorkingMemory workingMemory) {
- return new RoomChangeMove(exam, exam.getRoom());
- }
-
- public void doMove(WorkingMemory workingMemory) {
- FactHandle lessonHandle = workingMemory.getFactHandle(exam);
- exam.setRoom(toRoom);
- workingMemory.update(lessonHandle, exam);
- }
-
- public List<? extends Object> getTabuPropertyList() {
- return Collections.singletonList(exam);
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof PeriodChangeMove) {
- RoomChangeMove other = (RoomChangeMove) o;
- return new EqualsBuilder()
- .append(exam, other.exam)
- .append(toRoom, other.toRoom)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(exam)
- .append(toRoom)
- .toHashCode();
- }
-
- public String toString() {
- return exam + " => " + toRoom;
- }
-
-}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java (from rev 17904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/PeriodChangeMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/PeriodChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -0,0 +1,75 @@
+package org.drools.solver.examples.itc2007.examination.solver.move;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.itc2007.examination.domain.Exam;
+import org.drools.solver.examples.itc2007.examination.domain.Period;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class PeriodChangeMove implements Move, TabuPropertyEnabled {
+
+ private Exam exam;
+ private Period toPeriod;
+
+ public PeriodChangeMove(Exam exam, Period toPeriod) {
+ this.exam = exam;
+ this.toPeriod = toPeriod;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ Period fromPeriod = exam.getPeriod();
+ if (fromPeriod == null) {
+ return (toPeriod != null);
+ }
+ return !fromPeriod.equals(toPeriod);
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new PeriodChangeMove(exam, exam.getPeriod());
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ FactHandle lessonHandle = workingMemory.getFactHandle(exam);
+ exam.setPeriod(toPeriod);
+ workingMemory.update(lessonHandle, exam);
+ }
+
+ public List<? extends Object> getTabuPropertyList() {
+ return Collections.singletonList(exam);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof PeriodChangeMove) {
+ PeriodChangeMove other = (PeriodChangeMove) o;
+ return new EqualsBuilder()
+ .append(exam, other.exam)
+ .append(toPeriod, other.toPeriod)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(exam)
+ .append(toPeriod)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return exam + " => " + toPeriod;
+ }
+
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java (from rev 17904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/RoomChangeMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/move/RoomChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -0,0 +1,75 @@
+package org.drools.solver.examples.itc2007.examination.solver.move;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.itc2007.examination.domain.Exam;
+import org.drools.solver.examples.itc2007.examination.domain.Room;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class RoomChangeMove implements Move, TabuPropertyEnabled {
+
+ private Exam exam;
+ private Room toRoom;
+
+ public RoomChangeMove(Exam exam, Room toRoom) {
+ this.exam = exam;
+ this.toRoom = toRoom;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ Room fromRoom = exam.getRoom();
+ if (fromRoom == null) {
+ return (toRoom != null);
+ }
+ return !fromRoom.equals(toRoom);
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new RoomChangeMove(exam, exam.getRoom());
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ FactHandle lessonHandle = workingMemory.getFactHandle(exam);
+ exam.setRoom(toRoom);
+ workingMemory.update(lessonHandle, exam);
+ }
+
+ public List<? extends Object> getTabuPropertyList() {
+ return Collections.singletonList(exam);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof PeriodChangeMove) {
+ RoomChangeMove other = (RoomChangeMove) o;
+ return new EqualsBuilder()
+ .append(exam, other.exam)
+ .append(toRoom, other.toRoom)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(exam)
+ .append(toRoom)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return exam + " => " + toRoom;
+ }
+
+}
\ No newline at end of file
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java (from rev 17904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationStartingSolutionInitializer.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -0,0 +1,180 @@
+package org.drools.solver.examples.itc2007.examination.solver.solution.initializer;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.FactHandle;
+import org.drools.StatefulSession;
+import org.drools.solver.core.evaluation.EvaluationHandler;
+import org.drools.solver.core.solution.initializer.AbstractStartingSolutionInitializer;
+import org.drools.solver.examples.common.domain.PersistableIdComparator;
+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.PeriodHardConstraint;
+import org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraintType;
+import org.drools.solver.examples.itc2007.examination.domain.Room;
+import org.drools.solver.examples.itc2007.examination.domain.Topic;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class ExaminationStartingSolutionInitializer extends AbstractStartingSolutionInitializer {
+
+ public void intializeSolution() {
+ Examination examination = (Examination) solver.getEvaluationHandler().getSolution();
+ if (!examination.isInitialized()) {
+ initializeExamList(examination);
+ }
+ }
+
+ private void initializeExamList(Examination examination) {
+ EvaluationHandler evaluationHandler = solver.getEvaluationHandler();
+ List<Topic> topicList = examination.getTopicList();
+ List<Period> periodList = examination.getPeriodList();
+ List<Room> roomList = examination.getRoomList();
+ List<Exam> examList = new ArrayList<Exam>(topicList.size());
+ examination.setExamList(examList);
+ evaluationHandler.setSolution(examination);
+ StatefulSession statefulSession = evaluationHandler.getStatefulSession();
+
+ List<Topic> assigningTopicList = createAssigningTopicList(examination);
+
+ for (Topic topic : assigningTopicList) {
+ double unscheduledScore = evaluationHandler.fireAllRulesAndCalculateStepScore();
+
+ Exam exam = new Exam();
+ exam.setId(topic.getId());
+ exam.setTopic(topic);
+ examList.add(exam);
+ FactHandle examHandle = null;
+
+ List<PeriodScoring> periodScoringList = new ArrayList<PeriodScoring>(periodList.size());
+
+ for (Period period : periodList) {
+ exam.setPeriod(period);
+ if (examHandle == null) {
+ // Score rules don't support a nullable exam.getPeriod()
+ examHandle = statefulSession.insert(exam);
+ } else {
+ statefulSession.update(examHandle, exam);
+ }
+ double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
+ periodScoringList.add(new PeriodScoring(period, score));
+ }
+ Collections.sort(periodScoringList);
+
+ boolean perfectMatch = false;
+ double bestScore = Double.NEGATIVE_INFINITY;
+ Period bestPeriod = null;
+ Room bestRoom = null;
+ for (PeriodScoring periodScoring : periodScoringList) {
+ if (bestScore >= periodScoring.getScore()) {
+ // No need to check the rest
+ break;
+ }
+ exam.setPeriod(periodScoring.getPeriod());
+ for (Room room : roomList) {
+ exam.setRoom(room);
+ statefulSession.update(examHandle, exam);
+ double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
+ if (score < unscheduledScore) {
+ if (score > bestScore) {
+ bestScore = score;
+ bestPeriod = periodScoring.getPeriod();
+ bestRoom = room;
+ }
+ } else if (score == unscheduledScore) {
+ perfectMatch = true;
+ break;
+ } else {
+ throw new IllegalStateException("The score (" + score
+ + ") cannot be higher than unscheduledScore (" + unscheduledScore + ").");
+ }
+ }
+ if (perfectMatch) {
+ break;
+ }
+ }
+ if (!perfectMatch) {
+ if (bestPeriod == null || bestRoom == null) {
+ throw new IllegalStateException("The bestPeriod (" + bestPeriod + ") or the bestRoom ("
+ + bestRoom + ") cannot be null.");
+ }
+ exam.setPeriod(bestPeriod);
+ exam.setRoom(bestRoom);
+ statefulSession.update(examHandle, exam);
+ }
+ logger.debug(" Exam ({}) initialized for starting solution.", exam);
+ }
+ Collections.sort(examList, new PersistableIdComparator());
+ }
+
+ /**
+ * Order the topics in the order which we 'll assign them into periods and rooms.
+ * @param examination not null
+ * @return not null
+ */
+ private List<Topic> createAssigningTopicList(Examination examination) {
+ List<Topic> assigningTopicList = new ArrayList<Topic>(examination.getTopicList());
+ Collections.sort(assigningTopicList, new Comparator<Topic>() {
+ public int compare(Topic a, Topic b) {
+ return new CompareToBuilder()
+ .append(b.getStudentListSize(), a.getStudentListSize()) // Descending
+ .append(b.getDuration(), a.getDuration()) // Descending
+ .append(a.getId(), b.getId()) // Ascending
+ .toComparison();
+ }
+ });
+ for (PeriodHardConstraint periodHardConstraint : examination.getPeriodHardConstraintList()) {
+ if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.EXAM_COINCIDENCE) {
+ int leftSideIndex = assigningTopicList.indexOf(periodHardConstraint.getLeftSideTopic());
+ int rightSideIndex = assigningTopicList.indexOf(periodHardConstraint.getRightSideTopic());
+ int firstIndex = Math.min(leftSideIndex, rightSideIndex);
+ int lastIndex = Math.max(leftSideIndex, rightSideIndex);
+ if ((lastIndex - firstIndex) > 1) {
+ // TODO lastIndex - firstIndex can be 2 with another COINCIDENCE in the middle of it
+ Topic lastTopic = assigningTopicList.remove(lastIndex);
+ assigningTopicList.add(firstIndex + 1, lastTopic);
+ }
+ } else if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.AFTER) {
+ int afterSideIndex = assigningTopicList.indexOf(periodHardConstraint.getLeftSideTopic());
+ int beforeSideIndex = assigningTopicList.indexOf(periodHardConstraint.getRightSideTopic());
+ if (afterSideIndex < beforeSideIndex) {
+ Topic beforeTopic = assigningTopicList.remove(beforeSideIndex);
+ assigningTopicList.add(afterSideIndex, beforeTopic);
+ }
+ }
+ }
+
+ return assigningTopicList;
+ }
+
+ private class PeriodScoring implements Comparable<PeriodScoring> {
+
+ private Period period;
+ private double score;
+
+ private PeriodScoring(Period period, double score) {
+ this.period = period;
+ this.score = score;
+ }
+
+ public Period getPeriod() {
+ return period;
+ }
+
+ public double getScore() {
+ return score;
+ }
+
+ public int compareTo(PeriodScoring other) {
+ return - new CompareToBuilder().append(score, other.score).toComparison();
+ }
+
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/swingui/ExaminationPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/swingui/ExaminationPanel.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/swingui/ExaminationPanel.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -20,8 +20,8 @@
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.PeriodChangeMove;
-import org.drools.solver.examples.itc2007.examination.solver.RoomChangeMove;
+import org.drools.solver.examples.itc2007.examination.solver.move.PeriodChangeMove;
+import org.drools.solver.examples.itc2007.examination.solver.move.RoomChangeMove;
/**
* @author Geoffrey De Smet
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/LessonScheduleMoveFactory.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -9,6 +9,7 @@
import org.drools.solver.examples.lessonschedule.domain.Lesson;
import org.drools.solver.examples.lessonschedule.domain.LessonSchedule;
import org.drools.solver.examples.lessonschedule.domain.Timeslot;
+import org.drools.solver.examples.lessonschedule.solver.move.TimeslotChangeMove;
/**
* @author Geoffrey De Smet
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/TimeslotChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/TimeslotChangeMove.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/TimeslotChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,75 +0,0 @@
-package org.drools.solver.examples.lessonschedule.solver;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
-import org.drools.WorkingMemory;
-import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.examples.lessonschedule.domain.Lesson;
-import org.drools.solver.examples.lessonschedule.domain.Timeslot;
-
-/**
- * @author Geoffrey De Smet
- */
-public class TimeslotChangeMove implements Move, TabuPropertyEnabled {
-
- private Lesson lesson;
- private Timeslot toTimeslot;
-
- public TimeslotChangeMove(Lesson lesson, Timeslot toTimeslot) {
- this.lesson = lesson;
- this.toTimeslot = toTimeslot;
- }
-
- public boolean isMoveDoable(WorkingMemory workingMemory) {
- Timeslot fromTimeslot = lesson.getTimeslot();
- if (fromTimeslot == null) {
- return (toTimeslot != null);
- }
- return !fromTimeslot.equals(toTimeslot);
- }
-
- public Move createUndoMove(WorkingMemory workingMemory) {
- return new TimeslotChangeMove(lesson, lesson.getTimeslot());
- }
-
- public void doMove(WorkingMemory workingMemory) {
- FactHandle lessonHandle = workingMemory.getFactHandle(lesson);
- lesson.setTimeslot(toTimeslot);
- workingMemory.update(lessonHandle, lesson);
- }
-
- public List<? extends Object> getTabuPropertyList() {
- return Collections.singletonList(lesson);
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof TimeslotChangeMove) {
- TimeslotChangeMove other = (TimeslotChangeMove) o;
- return new EqualsBuilder()
- .append(lesson, other.lesson)
- .append(toTimeslot, other.toTimeslot)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(lesson)
- .append(toTimeslot)
- .toHashCode();
- }
-
- public String toString() {
- return lesson + " => " + toTimeslot;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/move/TimeslotChangeMove.java (from rev 17904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/TimeslotChangeMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/move/TimeslotChangeMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/solver/move/TimeslotChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -0,0 +1,75 @@
+package org.drools.solver.examples.lessonschedule.solver.move;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.lessonschedule.domain.Lesson;
+import org.drools.solver.examples.lessonschedule.domain.Timeslot;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class TimeslotChangeMove implements Move, TabuPropertyEnabled {
+
+ private Lesson lesson;
+ private Timeslot toTimeslot;
+
+ public TimeslotChangeMove(Lesson lesson, Timeslot toTimeslot) {
+ this.lesson = lesson;
+ this.toTimeslot = toTimeslot;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ Timeslot fromTimeslot = lesson.getTimeslot();
+ if (fromTimeslot == null) {
+ return (toTimeslot != null);
+ }
+ return !fromTimeslot.equals(toTimeslot);
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new TimeslotChangeMove(lesson, lesson.getTimeslot());
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ FactHandle lessonHandle = workingMemory.getFactHandle(lesson);
+ lesson.setTimeslot(toTimeslot);
+ workingMemory.update(lessonHandle, lesson);
+ }
+
+ public List<? extends Object> getTabuPropertyList() {
+ return Collections.singletonList(lesson);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof TimeslotChangeMove) {
+ TimeslotChangeMove other = (TimeslotChangeMove) o;
+ return new EqualsBuilder()
+ .append(lesson, other.lesson)
+ .append(toTimeslot, other.toTimeslot)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(lesson)
+ .append(toTimeslot)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return lesson + " => " + toTimeslot;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/swingui/LessonSchedulePanel.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/swingui/LessonSchedulePanel.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/swingui/LessonSchedulePanel.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -20,7 +20,7 @@
import org.drools.solver.examples.lessonschedule.domain.Lesson;
import org.drools.solver.examples.lessonschedule.domain.LessonSchedule;
import org.drools.solver.examples.lessonschedule.domain.Timeslot;
-import org.drools.solver.examples.lessonschedule.solver.TimeslotChangeMove;
+import org.drools.solver.examples.lessonschedule.solver.move.TimeslotChangeMove;
/**
* @author Geoffrey De Smet
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/NQueensMoveFactory.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -8,6 +8,7 @@
import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.nqueens.domain.NQueens;
import org.drools.solver.examples.nqueens.domain.Queen;
+import org.drools.solver.examples.nqueens.solver.move.YChangeMove;
/**
* @author Geoffrey De Smet
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/YChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/YChangeMove.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/YChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,71 +0,0 @@
-package org.drools.solver.examples.nqueens.solver;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
-import org.drools.WorkingMemory;
-import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.examples.nqueens.domain.Queen;
-
-/**
- * @author Geoffrey De Smet
- */
-public class YChangeMove implements Move, TabuPropertyEnabled {
-
- private Queen queen;
- private int toY;
-
- public YChangeMove(Queen queen, int toY) {
- this.queen = queen;
- this.toY = toY;
- }
-
- public boolean isMoveDoable(WorkingMemory workingMemory) {
- int fromY = queen.getY();
- return fromY != toY;
- }
-
- public Move createUndoMove(WorkingMemory workingMemory) {
- return new YChangeMove(queen, queen.getY());
- }
-
- public void doMove(WorkingMemory workingMemory) {
- FactHandle queenHandle = workingMemory.getFactHandle(queen);
- queen.setY(toY);
- workingMemory.update(queenHandle, queen);
- }
-
- public List<? extends Object> getTabuPropertyList() {
- return Collections.singletonList(queen);
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof YChangeMove) {
- YChangeMove other = (YChangeMove) o;
- return new EqualsBuilder()
- .append(queen, other.queen)
- .append(toY, other.toY)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(queen)
- .append(toY)
- .toHashCode();
- }
-
- public String toString() {
- return queen + " => " + toY;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/YChangeMove.java (from rev 17904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/YChangeMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/YChangeMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/solver/move/YChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -0,0 +1,71 @@
+package org.drools.solver.examples.nqueens.solver.move;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.nqueens.domain.Queen;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class YChangeMove implements Move, TabuPropertyEnabled {
+
+ private Queen queen;
+ private int toY;
+
+ public YChangeMove(Queen queen, int toY) {
+ this.queen = queen;
+ this.toY = toY;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ int fromY = queen.getY();
+ return fromY != toY;
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new YChangeMove(queen, queen.getY());
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ FactHandle queenHandle = workingMemory.getFactHandle(queen);
+ queen.setY(toY);
+ workingMemory.update(queenHandle, queen);
+ }
+
+ public List<? extends Object> getTabuPropertyList() {
+ return Collections.singletonList(queen);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof YChangeMove) {
+ YChangeMove other = (YChangeMove) o;
+ return new EqualsBuilder()
+ .append(queen, other.queen)
+ .append(toY, other.toY)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(queen)
+ .append(toY)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return queen + " => " + toY;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/swingui/NQueensPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/swingui/NQueensPanel.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/swingui/NQueensPanel.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -19,7 +19,7 @@
import org.drools.solver.examples.common.swingui.SolutionPanel;
import org.drools.solver.examples.nqueens.domain.NQueens;
import org.drools.solver.examples.nqueens.domain.Queen;
-import org.drools.solver.examples.nqueens.solver.YChangeMove;
+import org.drools.solver.examples.nqueens.solver.move.YChangeMove;
/**
* @author Geoffrey De Smet
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/DayChangeMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/DayChangeMove.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/DayChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,75 +0,0 @@
-package org.drools.solver.examples.travelingtournament.solver.simple;
-
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
-import org.drools.WorkingMemory;
-import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.examples.travelingtournament.domain.Day;
-import org.drools.solver.examples.travelingtournament.domain.Match;
-
-/**
- * @author Geoffrey De Smet
- */
-public class DayChangeMove implements Move, TabuPropertyEnabled {
-
- private Match match;
- private Day toDay;
-
- public DayChangeMove(Match match, Day toDay) {
- this.match = match;
- this.toDay = toDay;
- }
-
- public boolean isMoveDoable(WorkingMemory workingMemory) {
- Day fromDay = match.getDay();
- if (fromDay == null) {
- return (toDay != null);
- }
- return !fromDay.equals(toDay);
- }
-
- public Move createUndoMove(WorkingMemory workingMemory) {
- return new DayChangeMove(match, match.getDay());
- }
-
- public void doMove(WorkingMemory workingMemory) {
- FactHandle matchHandle = workingMemory.getFactHandle(match);
- match.setDay(toDay);
- workingMemory.update(matchHandle, match);
- }
-
- public List<? extends Object> getTabuPropertyList() {
- return Collections.singletonList(match);
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof DayChangeMove) {
- DayChangeMove other = (DayChangeMove) o;
- return new EqualsBuilder()
- .append(match, other.match)
- .append(toDay, other.toDay)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(match)
- .append(toDay)
- .toHashCode();
- }
-
- public String toString() {
- return match + " => " + toDay;
- }
-
-}
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentMoveFactory.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -9,6 +9,7 @@
import org.drools.solver.examples.travelingtournament.domain.Day;
import org.drools.solver.examples.travelingtournament.domain.Match;
import org.drools.solver.examples.travelingtournament.domain.TravelingTournament;
+import org.drools.solver.examples.travelingtournament.solver.simple.move.DayChangeMove;
/**
* @author Geoffrey De Smet
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentScoreCalculator.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/SimpleTravelingTournamentScoreCalculator.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,35 +0,0 @@
-package org.drools.solver.examples.travelingtournament.solver.simple;
-
-import java.util.Iterator;
-
-import org.drools.WorkingMemory;
-import org.drools.base.ClassObjectFilter;
-import org.drools.solver.core.solution.Solution;
-import org.drools.solver.examples.travelingtournament.solver.domain.Hop;
-
-/**
- * @author Geoffrey De Smet
- */
-public class SimpleTravelingTournamentScoreCalculator { // DELETEME
-
- public double calculateStepScore(Solution solution, WorkingMemory workingMemory) {
- double score = 0;
- // Hard constraints
-// score -= statefulSession.getQueryResults("multipleMatchesPerTeamPerDay").size();
- score -= workingMemory.getQueryResults("multipleMatchesPerTeamPerDay1").size();
- score -= workingMemory.getQueryResults("multipleMatchesPerTeamPerDay2").size();
- score -= workingMemory.getQueryResults("multipleMatchesPerTeamPerDay3").size();
- score -= workingMemory.getQueryResults("multipleMatchesPerTeamPerDay4").size();
- score -= workingMemory.getQueryResults("fourConsecutiveHomeMatches").size();
- score -= workingMemory.getQueryResults("fourConsecutiveAwayMatches").size();
- score -= workingMemory.getQueryResults("matchRepeater").size();
- score *= 1000000.0;
- // Soft constraints
- for (Iterator<Hop> it = workingMemory.iterateObjects(new ClassObjectFilter(Hop.class)); it.hasNext();) {
- Hop hop = it.next();
- score -= hop.getDistance();
- }
- return score;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/DayChangeMove.java (from rev 17904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/DayChangeMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/DayChangeMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/simple/move/DayChangeMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -0,0 +1,75 @@
+package org.drools.solver.examples.travelingtournament.solver.simple.move;
+
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.travelingtournament.domain.Day;
+import org.drools.solver.examples.travelingtournament.domain.Match;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class DayChangeMove implements Move, TabuPropertyEnabled {
+
+ private Match match;
+ private Day toDay;
+
+ public DayChangeMove(Match match, Day toDay) {
+ this.match = match;
+ this.toDay = toDay;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ Day fromDay = match.getDay();
+ if (fromDay == null) {
+ return (toDay != null);
+ }
+ return !fromDay.equals(toDay);
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return new DayChangeMove(match, match.getDay());
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ FactHandle matchHandle = workingMemory.getFactHandle(match);
+ match.setDay(toDay);
+ workingMemory.update(matchHandle, match);
+ }
+
+ public List<? extends Object> getTabuPropertyList() {
+ return Collections.singletonList(match);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof DayChangeMove) {
+ DayChangeMove other = (DayChangeMove) o;
+ return new EqualsBuilder()
+ .append(match, other.match)
+ .append(toDay, other.toDay)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(match)
+ .append(toDay)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return match + " => " + toDay;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MatchSwapMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MatchSwapMove.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MatchSwapMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,75 +0,0 @@
-package org.drools.solver.examples.travelingtournament.solver.smart;
-
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
-import org.drools.WorkingMemory;
-import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.examples.travelingtournament.domain.Day;
-import org.drools.solver.examples.travelingtournament.domain.Match;
-
-/**
- * @author Geoffrey De Smet
- */
-public class MatchSwapMove implements Move, TabuPropertyEnabled {
-
- private Match firstMatch;
- private Match secondMatch;
-
- public MatchSwapMove(Match firstMatch, Match secondMatch) {
- this.firstMatch = firstMatch;
- this.secondMatch = secondMatch;
- }
-
- public boolean isMoveDoable(WorkingMemory workingMemory) {
- return true;
- }
-
- public Move createUndoMove(WorkingMemory workingMemory) {
- return this;
- }
-
- public void doMove(WorkingMemory workingMemory) {
- FactHandle firstMatchHandle = workingMemory.getFactHandle(firstMatch);
- FactHandle secondMatchHandle = workingMemory.getFactHandle(secondMatch);
- Day oldFirstMatchDay = firstMatch.getDay();
- firstMatch.setDay(secondMatch.getDay());
- secondMatch.setDay(oldFirstMatchDay);
- workingMemory.update(firstMatchHandle, firstMatch);
- workingMemory.update(secondMatchHandle, secondMatch);
- }
-
- public List<? extends Object> getTabuPropertyList() {
- return Arrays.asList(firstMatch, secondMatch);
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof MatchSwapMove) {
- MatchSwapMove other = (MatchSwapMove) o;
- return new EqualsBuilder()
- .append(firstMatch, other.firstMatch)
- .append(secondMatch, other.secondMatch)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(firstMatch)
- .append(secondMatch)
- .toHashCode();
- }
-
- public String toString() {
- return firstMatch + " <=> " + secondMatch;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MultipleMatchListRotateMove.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MultipleMatchListRotateMove.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MultipleMatchListRotateMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,98 +0,0 @@
-package org.drools.solver.examples.travelingtournament.solver.smart;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.lang.builder.EqualsBuilder;
-import org.apache.commons.lang.builder.HashCodeBuilder;
-import org.drools.FactHandle;
-import org.drools.WorkingMemory;
-import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
-import org.drools.solver.core.move.Move;
-import org.drools.solver.examples.travelingtournament.domain.Day;
-import org.drools.solver.examples.travelingtournament.domain.Match;
-
-/**
- * @author Geoffrey De Smet
- */
-public class MultipleMatchListRotateMove implements Move, TabuPropertyEnabled {
-
- private List<Match> firstMatchList;
- private List<Match> secondMatchList;
-
- public MultipleMatchListRotateMove(List<Match> firstMatchList, List<Match> secondMatchList) {
- this.firstMatchList = firstMatchList;
- this.secondMatchList = secondMatchList;
- }
-
- public boolean isMoveDoable(WorkingMemory workingMemory) {
- return true;
- }
-
- public Move createUndoMove(WorkingMemory workingMemory) {
- List<Match> inverseFirstMatchList = new ArrayList<Match>(firstMatchList);
- Collections.reverse(inverseFirstMatchList);
- List<Match> inverseSecondMatchList = new ArrayList<Match>(secondMatchList);
- Collections.reverse(inverseSecondMatchList);
- return new MultipleMatchListRotateMove(inverseFirstMatchList, inverseSecondMatchList);
- }
-
- public void doMove(WorkingMemory workingMemory) {
- rotateList(firstMatchList, workingMemory);
- if (!secondMatchList.isEmpty()) { // TODO create SingleMatchListRotateMove
- rotateList(secondMatchList, workingMemory);
- }
- }
-
- private void rotateList(List<Match> matchList, WorkingMemory workingMemory) {
- Iterator<Match> it = matchList.iterator();
- Match firstMatch = it.next();
- Match secondMatch = null;
- Day startDay = firstMatch.getDay();
- while (it.hasNext()) {
- secondMatch = it.next();
- FactHandle firstMatchHandle = workingMemory.getFactHandle(firstMatch);
- firstMatch.setDay(secondMatch.getDay());
- workingMemory.update(firstMatchHandle, firstMatch);
- firstMatch = secondMatch;
- }
- FactHandle secondMatchHandle = workingMemory.getFactHandle(firstMatch);
- secondMatch.setDay(startDay);
- workingMemory.update(secondMatchHandle, secondMatch);
- }
-
- public List<? extends Object> getTabuPropertyList() {
- List<Match> tabuPropertyList = new ArrayList<Match>(firstMatchList.size() + secondMatchList.size());
- tabuPropertyList.addAll(firstMatchList);
- tabuPropertyList.addAll(secondMatchList);
- return tabuPropertyList;
- }
-
- public boolean equals(Object o) {
- if (this == o) {
- return true;
- } else if (o instanceof MultipleMatchListRotateMove) {
- MultipleMatchListRotateMove other = (MultipleMatchListRotateMove) o;
- return new EqualsBuilder()
- .append(firstMatchList, other.firstMatchList)
- .append(secondMatchList, other.secondMatchList)
- .isEquals();
- } else {
- return false;
- }
- }
-
- public int hashCode() {
- return new HashCodeBuilder()
- .append(firstMatchList)
- .append(secondMatchList)
- .toHashCode();
- }
-
- public String toString() {
- return firstMatchList + " & " + secondMatchList;
- }
-
-}
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentMoveFactory.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -15,6 +15,8 @@
import org.drools.solver.examples.travelingtournament.domain.Match;
import org.drools.solver.examples.travelingtournament.domain.Team;
import org.drools.solver.examples.travelingtournament.domain.TravelingTournament;
+import org.drools.solver.examples.travelingtournament.solver.smart.move.MatchSwapMove;
+import org.drools.solver.examples.travelingtournament.solver.smart.move.MultipleMatchListRotateMove;
/**
* @author Geoffrey De Smet
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentScoreCalculator.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentScoreCalculator.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/SmartTravelingTournamentScoreCalculator.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -1,56 +0,0 @@
-package org.drools.solver.examples.travelingtournament.solver.smart;
-
-import java.util.Iterator;
-
-import org.drools.WorkingMemory;
-import org.drools.base.ClassObjectFilter;
-import org.drools.solver.core.solution.Solution;
-import org.drools.solver.examples.travelingtournament.solver.domain.Hop;
-
-/**
- * @author Geoffrey De Smet
- */
-public class SmartTravelingTournamentScoreCalculator { // DELETEME
-
-// private int hardConstraintsWeight = 50000;
- private int hardConstraintsWeight = 1000000;
- private int maxHardConstraintsWeight = 1000000;
- private int minHardConstraintsWeight = 300;
-
- public double calculateStepScore(Solution solution, WorkingMemory workingMemory) {
- int hardConstraints = calculateHardConstraintsScore(workingMemory);
-// // adjust it for decision calculation
-// if (hardConstraints == 0) {
-// hardConstraintsWeight /= 1.2;
-// hardConstraintsWeight = Math.max(hardConstraintsWeight, minHardConstraintsWeight);
-// } else {
-// hardConstraintsWeight *= 1.2;
-// hardConstraintsWeight = Math.min(hardConstraintsWeight, maxHardConstraintsWeight);
-// }
- return (hardConstraints * maxHardConstraintsWeight)
- + calculateSoftConstraintsScore(workingMemory);
- }
-
- public double calculateDecisionScore(Solution solution, WorkingMemory workingMemory) {
- return (calculateHardConstraintsScore(workingMemory) * hardConstraintsWeight)
- + calculateSoftConstraintsScore(workingMemory);
- }
-
- private double calculateSoftConstraintsScore(WorkingMemory workingMemory) {
- int score = 0;
- for (Iterator<Hop> it = workingMemory.iterateObjects(new ClassObjectFilter(Hop.class)); it.hasNext();) {
- Hop hop = it.next();
- score -= hop.getDistance();
- }
- return score;
- }
-
- private int calculateHardConstraintsScore(WorkingMemory workingMemory) {
- int score = 0;
- score -= workingMemory.getQueryResults("fourConsecutiveHomeMatches").size();
- score -= workingMemory.getQueryResults("fourConsecutiveAwayMatches").size();
- score -= workingMemory.getQueryResults("matchRepeater").size();
- return score;
- }
-
-}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MatchSwapMove.java (from rev 17904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MatchSwapMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MatchSwapMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MatchSwapMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -0,0 +1,75 @@
+package org.drools.solver.examples.travelingtournament.solver.smart.move;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.travelingtournament.domain.Day;
+import org.drools.solver.examples.travelingtournament.domain.Match;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class MatchSwapMove implements Move, TabuPropertyEnabled {
+
+ private Match firstMatch;
+ private Match secondMatch;
+
+ public MatchSwapMove(Match firstMatch, Match secondMatch) {
+ this.firstMatch = firstMatch;
+ this.secondMatch = secondMatch;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ return true;
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ return this;
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ FactHandle firstMatchHandle = workingMemory.getFactHandle(firstMatch);
+ FactHandle secondMatchHandle = workingMemory.getFactHandle(secondMatch);
+ Day oldFirstMatchDay = firstMatch.getDay();
+ firstMatch.setDay(secondMatch.getDay());
+ secondMatch.setDay(oldFirstMatchDay);
+ workingMemory.update(firstMatchHandle, firstMatch);
+ workingMemory.update(secondMatchHandle, secondMatch);
+ }
+
+ public List<? extends Object> getTabuPropertyList() {
+ return Arrays.asList(firstMatch, secondMatch);
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof MatchSwapMove) {
+ MatchSwapMove other = (MatchSwapMove) o;
+ return new EqualsBuilder()
+ .append(firstMatch, other.firstMatch)
+ .append(secondMatch, other.secondMatch)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(firstMatch)
+ .append(secondMatch)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return firstMatch + " <=> " + secondMatch;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MultipleMatchListRotateMove.java (from rev 17904, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/MultipleMatchListRotateMove.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MultipleMatchListRotateMove.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/solver/smart/move/MultipleMatchListRotateMove.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -0,0 +1,98 @@
+package org.drools.solver.examples.travelingtournament.solver.smart.move;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.FactHandle;
+import org.drools.WorkingMemory;
+import org.drools.solver.core.localsearch.decider.accepter.tabu.TabuPropertyEnabled;
+import org.drools.solver.core.move.Move;
+import org.drools.solver.examples.travelingtournament.domain.Day;
+import org.drools.solver.examples.travelingtournament.domain.Match;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class MultipleMatchListRotateMove implements Move, TabuPropertyEnabled {
+
+ private List<Match> firstMatchList;
+ private List<Match> secondMatchList;
+
+ public MultipleMatchListRotateMove(List<Match> firstMatchList, List<Match> secondMatchList) {
+ this.firstMatchList = firstMatchList;
+ this.secondMatchList = secondMatchList;
+ }
+
+ public boolean isMoveDoable(WorkingMemory workingMemory) {
+ return true;
+ }
+
+ public Move createUndoMove(WorkingMemory workingMemory) {
+ List<Match> inverseFirstMatchList = new ArrayList<Match>(firstMatchList);
+ Collections.reverse(inverseFirstMatchList);
+ List<Match> inverseSecondMatchList = new ArrayList<Match>(secondMatchList);
+ Collections.reverse(inverseSecondMatchList);
+ return new MultipleMatchListRotateMove(inverseFirstMatchList, inverseSecondMatchList);
+ }
+
+ public void doMove(WorkingMemory workingMemory) {
+ rotateList(firstMatchList, workingMemory);
+ if (!secondMatchList.isEmpty()) { // TODO create SingleMatchListRotateMove
+ rotateList(secondMatchList, workingMemory);
+ }
+ }
+
+ private void rotateList(List<Match> matchList, WorkingMemory workingMemory) {
+ Iterator<Match> it = matchList.iterator();
+ Match firstMatch = it.next();
+ Match secondMatch = null;
+ Day startDay = firstMatch.getDay();
+ while (it.hasNext()) {
+ secondMatch = it.next();
+ FactHandle firstMatchHandle = workingMemory.getFactHandle(firstMatch);
+ firstMatch.setDay(secondMatch.getDay());
+ workingMemory.update(firstMatchHandle, firstMatch);
+ firstMatch = secondMatch;
+ }
+ FactHandle secondMatchHandle = workingMemory.getFactHandle(firstMatch);
+ secondMatch.setDay(startDay);
+ workingMemory.update(secondMatchHandle, secondMatch);
+ }
+
+ public List<? extends Object> getTabuPropertyList() {
+ List<Match> tabuPropertyList = new ArrayList<Match>(firstMatchList.size() + secondMatchList.size());
+ tabuPropertyList.addAll(firstMatchList);
+ tabuPropertyList.addAll(secondMatchList);
+ return tabuPropertyList;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof MultipleMatchListRotateMove) {
+ MultipleMatchListRotateMove other = (MultipleMatchListRotateMove) o;
+ return new EqualsBuilder()
+ .append(firstMatchList, other.firstMatchList)
+ .append(secondMatchList, other.secondMatchList)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(firstMatchList)
+ .append(secondMatchList)
+ .toHashCode();
+ }
+
+ public String toString() {
+ return firstMatchList + " & " + secondMatchList;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/swingui/TravelingTournamentPanel.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/swingui/TravelingTournamentPanel.java 2008-01-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/swingui/TravelingTournamentPanel.java 2008-01-20 10:48:36 UTC (rev 17981)
@@ -20,7 +20,7 @@
import org.drools.solver.examples.travelingtournament.domain.Day;
import org.drools.solver.examples.travelingtournament.domain.Match;
import org.drools.solver.examples.travelingtournament.domain.TravelingTournament;
-import org.drools.solver.examples.travelingtournament.solver.simple.DayChangeMove;
+import org.drools.solver.examples.travelingtournament.solver.simple.move.DayChangeMove;
/**
* @author Geoffrey De Smet
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml 2008-01-20 10:48:36 UTC (rev 17981)
@@ -11,7 +11,7 @@
<scoreCalculator>
<scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
</scoreCalculator>
- <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
+ <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
<finish>
<maximumStepCount>500</maximumStepCount>
</finish>
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml 2008-01-20 10:48:36 UTC (rev 17981)
@@ -19,7 +19,7 @@
<scoreCalculator>
<scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
</scoreCalculator>
- <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
+ <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
<finish>
<!--
Official benchmark maximumSecondsSpend allowed on:
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-20 06:20:43 UTC (rev 17980)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml 2008-01-20 10:48:36 UTC (rev 17981)
@@ -4,7 +4,7 @@
<scoreCalculator>
<scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
</scoreCalculator>
- <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
+ <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
<finish>
<!--
Official benchmark maximumSecondsSpend allowed on:
More information about the jboss-svn-commits
mailing list