[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