[jboss-svn-commits] JBL Code SVN: r26341 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: java/org/drools/solver/examples/manners2009/domain and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sat May 2 11:26:03 EDT 2009
Author: ge0ffrey
Date: 2009-05-02 11:26:03 -0400 (Sat, 02 May 2009)
New Revision: 26341
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Seat.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/move/factory/SeatDesignationSwitchMoveFactory.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/solution/initializer/Manners2009StartingSolutionInitializer.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009ScoreRules.drl
Log:
manners2009: score initializer,build in boy-girl constraint
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java 2009-05-02 14:40:19 UTC (rev 26340)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java 2009-05-02 15:26:03 UTC (rev 26341)
@@ -125,10 +125,10 @@
for (int i = 0; i < course.getLectureSize(); i++) {
Lecture lecture = new Lecture();
lecture.setId((long) lectureId);
+ lectureId++;
lecture.setCourse(course);
lecture.setLectureIndexInCourse(i);
lectureList.add(lecture);
- lectureId++;
}
}
return lectureList;
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Seat.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Seat.java 2009-05-02 14:40:19 UTC (rev 26340)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Seat.java 2009-05-02 15:26:03 UTC (rev 26341)
@@ -59,4 +59,8 @@
return table + "." + seatIndexInTable;
}
+ public Gender getRequiredGender() {
+ return (seatIndexInTable % 2 == 0) ? Gender.MALE : Gender.FEMALE;
+ }
+
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/move/factory/SeatDesignationSwitchMoveFactory.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/move/factory/SeatDesignationSwitchMoveFactory.java 2009-05-02 14:40:19 UTC (rev 26340)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/move/factory/SeatDesignationSwitchMoveFactory.java 2009-05-02 15:26:03 UTC (rev 26341)
@@ -25,7 +25,9 @@
for (ListIterator<SeatDesignation> rightIt = seatDesignationList.listIterator(leftIt.nextIndex());
rightIt.hasNext();) {
SeatDesignation rightSeatDesignation = rightIt.next();
- moveList.add(new SeatDesignationSwitchMove(leftSeatDesignation, rightSeatDesignation));
+ if (leftSeatDesignation.getGuest().getGender() == rightSeatDesignation.getGuest().getGender()) {
+ moveList.add(new SeatDesignationSwitchMove(leftSeatDesignation, rightSeatDesignation));
+ }
}
}
return moveList;
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/solution/initializer/Manners2009StartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/solution/initializer/Manners2009StartingSolutionInitializer.java 2009-05-02 14:40:19 UTC (rev 26340)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/solver/solution/initializer/Manners2009StartingSolutionInitializer.java 2009-05-02 15:26:03 UTC (rev 26341)
@@ -15,6 +15,7 @@
import org.drools.solver.core.solution.initializer.AbstractStartingSolutionInitializer;
import org.drools.solver.core.score.Score;
import org.drools.solver.core.score.DefaultHardAndSoftScore;
+import org.drools.solver.core.score.DefaultSimpleScore;
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;
@@ -25,9 +26,13 @@
import org.drools.solver.examples.itc2007.examination.domain.Topic;
import org.drools.solver.examples.itc2007.examination.domain.solver.ExamBefore;
import org.drools.solver.examples.itc2007.examination.domain.solver.ExamCoincidence;
+import org.drools.solver.examples.itc2007.curriculumcourse.domain.CurriculumCourseSchedule;
+import org.drools.solver.examples.itc2007.curriculumcourse.domain.Lecture;
+import org.drools.solver.examples.itc2007.curriculumcourse.domain.Course;
import org.drools.solver.examples.manners2009.domain.Manners2009;
import org.drools.solver.examples.manners2009.domain.Guest;
import org.drools.solver.examples.manners2009.domain.SeatDesignation;
+import org.drools.solver.examples.manners2009.domain.Seat;
/**
* @author Geoffrey De Smet
@@ -47,16 +52,53 @@
private void initializeSeatDesignationList(LocalSearchSolverScope localSearchSolverScope, Manners2009 manners2009) {
WorkingMemory workingMemory = localSearchSolverScope.getWorkingMemory();
+ List<SeatDesignation> seatDesignationList = createSeatDesignationList(manners2009);
+ // Assign one guest at a time
+ for (SeatDesignation seatDesignation : seatDesignationList) {
+ Score bestScore = DefaultSimpleScore.valueOf(Integer.MIN_VALUE);
+ Seat bestSeat = null;
+
+ FactHandle seatDesignationHandle = null;
+ // Try every seat for that guest
+ // TODO by reordening the seats so index 0 has a different table then index 1 and so on,
+ // this will probably be faster because perfectMatch will be true sooner
+ for (Seat seat : manners2009.getSeatList()) {
+ if (seatDesignation.getGuest().getGender() == seat.getRequiredGender()) {
+ if (seatDesignationHandle == null) {
+ seatDesignation.setSeat(seat);
+ seatDesignationHandle = workingMemory.insert(seatDesignation);
+ } else {
+ workingMemory.modifyRetract(seatDesignationHandle);
+ seatDesignation.setSeat(seat);
+ workingMemory.modifyInsert(seatDesignationHandle, seatDesignation);
+ }
+ Score score = localSearchSolverScope.calculateScoreFromWorkingMemory();
+ if (score.compareTo(bestScore) > 0) {
+ bestScore = score;
+ bestSeat = seat;
+ }
+ }
+ }
+ if (bestSeat == null) {
+ throw new IllegalStateException("The bestSeat (" + bestSeat + ") cannot be null.");
+ }
+ workingMemory.modifyRetract(seatDesignationHandle);
+ seatDesignation.setSeat(bestSeat);
+ workingMemory.modifyInsert(seatDesignationHandle, seatDesignation);
+ }
+ Collections.sort(seatDesignationList); // For the GUI's combobox list mainly, not really needed
+ manners2009.setSeatDesignationList(seatDesignationList);
+ }
+
+ private List<SeatDesignation> createSeatDesignationList(Manners2009 manners2009) {
List<SeatDesignation> seatDesignationList = new ArrayList<SeatDesignation>(manners2009.getGuestList().size());
for (Guest guest : manners2009.getGuestList()) {
SeatDesignation seatDesignation = new SeatDesignation();
+ seatDesignation.setId(guest.getId());
seatDesignation.setGuest(guest);
- seatDesignation.setSeat(manners2009.getSeatList().get(guest.getId().intValue())); // TODO FIXME
seatDesignationList.add(seatDesignation);
- workingMemory.insert(seatDesignation);
}
- Collections.sort(seatDesignationList);
- manners2009.setSeatDesignationList(seatDesignationList);
+ return seatDesignationList;
}
}
\ No newline at end of file
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009ScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009ScoreRules.drl 2009-05-02 14:40:19 UTC (rev 26340)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009ScoreRules.drl 2009-05-02 15:26:03 UTC (rev 26341)
@@ -24,27 +24,7 @@
// Maintain a boy-girl-boy-girl seating arrangement is obsolete because it's build into the moves
-rule "oneDemocratPoliticianPerTable"
- when
- $job : Job(jobType == JobType.POLITICIAN, name == "Democrat");
- $table : Table();
- not SeatDesignation(guestJob == $job, seatTable == $table);
- then
- insertLogical(new UnweightedConstraintOccurrence("oneDemocratPoliticianPerTable",
- $table));
-end
-
-rule "oneRepublicanPoliticianPerTable"
- when
- $job : Job(jobType == JobType.POLITICIAN, name == "Republican");
- $table : Table();
- not SeatDesignation(guestJob == $job, seatTable == $table);
- then
- insertLogical(new UnweightedConstraintOccurrence("oneRepublicanPoliticianPerTable",
- $table));
-end
-
-// 1 democrat and 1 republican
+// 1 democrat and 1 republican = 2 politians at each table but NOT two of the same kind
// 2 doctors at each table but NOT two of the same kind
// 2 sports stars at each table but NOT two of the same kind
// 2 programmers at each table but NOT two of the same kind
More information about the jboss-svn-commits
mailing list