[jboss-svn-commits] JBL Code SVN: r19189 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: java/org/drools/solver/examples/itc2007/curriculumcourse/persistence and 3 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Mar 21 15:53:43 EDT 2008


Author: ge0ffrey
Date: 2008-03-21 15:53:43 -0400 (Fri, 21 Mar 2008)
New Revision: 19189

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java
Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Course.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Curriculum.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Day.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Lecture.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Period.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Room.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Teacher.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Timeslot.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/UnavailablePeriodConstraint.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/persistence/CurriculumCourseScheduleInputConvertor.java
   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/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml
Log:
curruculumcourse dummy initializer

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Course.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Course.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Course.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,13 +1,11 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
  * @author Geoffrey De Smet
  */
- at XStreamAlias("Course")
 public class Course extends AbstractPersistable implements Comparable<Course> {
 
     private String code;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Curriculum.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Curriculum.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Curriculum.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,13 +1,11 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
  * @author Geoffrey De Smet
  */
- at XStreamAlias("Curriculum")
 public class Curriculum extends AbstractPersistable implements Comparable<Curriculum> {
 
     private String code;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Day.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Day.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Day.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,13 +1,11 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
  * @author Geoffrey De Smet
  */
- at XStreamAlias("Day")
 public class Day extends AbstractPersistable implements Comparable<Day> {
 
     private int dayIndex;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Lecture.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Lecture.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Lecture.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,6 +1,5 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
@@ -9,7 +8,6 @@
 /**
  * @author Geoffrey De Smet
  */
- at XStreamAlias("Lecture")
 public class Lecture extends AbstractPersistable implements Comparable<Lecture> {
 
     private Course course;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Period.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Period.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Period.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,13 +1,11 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
  * @author Geoffrey De Smet
  */
- at XStreamAlias("Period")
 public class Period extends AbstractPersistable implements Comparable<Period> {
 
     private Day day;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Room.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Room.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Room.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,13 +1,11 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
  * @author Geoffrey De Smet
  */
- at XStreamAlias("Room")
 public class Room extends AbstractPersistable implements Comparable<Room> {
 
     private String code;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Teacher.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Teacher.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Teacher.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,6 +1,5 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
@@ -8,7 +7,6 @@
  * Not used during score calculation, so not inserted into the working memory.
  * @author Geoffrey De Smet
  */
- at XStreamAlias("Teacher")
 public class Teacher extends AbstractPersistable implements Comparable<Teacher> {
 
     private String code;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Timeslot.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Timeslot.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/Timeslot.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,13 +1,11 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
  * @author Geoffrey De Smet
  */
- at XStreamAlias("Timeslot")
 public class Timeslot extends AbstractPersistable implements Comparable<Timeslot> {
 
     private int timeslotIndex;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/UnavailablePeriodConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/UnavailablePeriodConstraint.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/UnavailablePeriodConstraint.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -1,13 +1,11 @@
 package org.drools.solver.examples.itc2007.curriculumcourse.domain;
 
-import com.thoughtworks.xstream.annotations.XStreamAlias;
 import org.apache.commons.lang.builder.CompareToBuilder;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
  * @author Geoffrey De Smet
  */
- at XStreamAlias("UnavailablePeriodConstraint")
 public class UnavailablePeriodConstraint extends AbstractPersistable
         implements Comparable<UnavailablePeriodConstraint> {
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/persistence/CurriculumCourseScheduleInputConvertor.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/persistence/CurriculumCourseScheduleInputConvertor.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/persistence/CurriculumCourseScheduleInputConvertor.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -181,6 +181,7 @@
         for (int i = 0; i < dayListSize; i++) {
             Day day = new Day();
             day.setId((long) i);
+            day.setDayIndex(i);
             dayList.add(day);
         }
         schedule.setDayList(dayList);
@@ -188,6 +189,7 @@
         for (int i = 0; i < timeslotListSize; i++) {
             Timeslot timeslot = new Timeslot();
             timeslot.setId((long) i);
+            timeslot.setTimeslotIndex(i);
             timeslotList.add(timeslot);
         }
         schedule.setTimeslotList(timeslotList);

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java (from rev 18895, 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/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/solver/solution/initializer/CurriculumCourseStartingSolutionInitializer.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -0,0 +1,388 @@
+package org.drools.solver.examples.itc2007.curriculumcourse.solver.solution.initializer;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.drools.WorkingMemory;
+import org.drools.solver.core.evaluation.EvaluationHandler;
+import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.solution.initializer.AbstractStartingSolutionInitializer;
+import org.drools.solver.examples.common.domain.PersistableIdComparator;
+import org.drools.solver.examples.itc2007.curriculumcourse.domain.Course;
+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.Period;
+import org.drools.solver.examples.itc2007.curriculumcourse.domain.Room;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class CurriculumCourseStartingSolutionInitializer extends AbstractStartingSolutionInitializer {
+
+    @Override
+    public boolean isSolutionInitialized(Solution solution) {
+        CurriculumCourseSchedule schedule = (CurriculumCourseSchedule) solution;
+        return schedule.isInitialized();
+    }
+
+    public void initializeSolution(Solution solution) {
+        CurriculumCourseSchedule schedule = (CurriculumCourseSchedule) solution;
+        initializeLectureList(schedule);
+    }
+
+    private void initializeLectureList(CurriculumCourseSchedule schedule) {
+        EvaluationHandler evaluationHandler = solver.getEvaluationHandler();
+        List<Period> periodList = schedule.getPeriodList();
+        List<Room> roomList = schedule.getRoomList();
+//        List<Lecture> lectureList = new ArrayList<Lecture>(schedule.getCourseList().size() * 5);
+        evaluationHandler.setSolution(schedule);
+        WorkingMemory workingMemory = evaluationHandler.getStatefulSession();
+
+        List<Lecture> lectureList = createLectureList(schedule);
+        int tmp = 0;
+        for (Lecture lecture : lectureList) {
+            lecture.setPeriod(periodList.get(tmp % periodList.size()));
+            lecture.setRoom(roomList.get(tmp % roomList.size()));
+            tmp++;
+        }
+
+//        List<ExamInitialWeight> examInitialWeightList = createExamAssigningScoreList(schedule);
+//
+//        for (ExamInitialWeight examInitialWeight : examInitialWeightList) {
+//            double unscheduledScore = evaluationHandler.fireAllRulesAndCalculateStepScore();
+//            Exam leader = examInitialWeight.getExam();
+//            FactHandle leaderHandle = null;
+//
+//            List<ExamToHandle> examToHandleList = new ArrayList<ExamToHandle>(5);
+//            if (leader.getExamCoincidence() == null) {
+//                examToHandleList.add(new ExamToHandle(leader));
+//            } else {
+//                for (Exam coincidenceExam : leader.getExamCoincidence().getCoincidenceExamSet()) {
+//                    examToHandleList.add(new ExamToHandle(coincidenceExam));
+//                }
+//            }
+//
+//            List<PeriodScoring> periodScoringList = new ArrayList<PeriodScoring>(periodList.size());
+//            for (Period period : periodList) {
+//                for (ExamToHandle examToHandle : examToHandleList) {
+//                    if (examToHandle.getExamHandle() == null) {
+//                        examToHandle.getExam().setPeriod(period);
+//                        examToHandle.setExamHandle(workingMemory.insert(examToHandle.getExam()));
+//                        if (examToHandle.getExam().isCoincidenceLeader()) {
+//                            leaderHandle = examToHandle.getExamHandle();
+//                        }
+//                    } else {
+//                        workingMemory.modifyRetract(examToHandle.getExamHandle());
+//                        examToHandle.getExam().setPeriod(period);
+//                        workingMemory.modifyInsert(examToHandle.getExamHandle(), examToHandle.getExam());
+//                    }
+//                }
+//                double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
+//                periodScoringList.add(new PeriodScoring(period, score));
+//            }
+//            Collections.sort(periodScoringList);
+//
+//            scheduleLeader(periodScoringList, roomList, evaluationHandler, workingMemory, unscheduledScore,
+//                    examToHandleList, leader, leaderHandle);
+//            lectureList.add(leader);
+//
+//            // Schedule the non leaders
+//            for (ExamToHandle examToHandle : examToHandleList) {
+//                Exam exam = examToHandle.getExam();
+//                // Leader already has a room
+//                if (!exam.isCoincidenceLeader()) {
+//                    scheduleNonLeader(roomList, evaluationHandler, workingMemory, exam, examToHandle.getExamHandle());
+//                    lectureList.add(exam);
+//                }
+//            }
+//        }
+        Collections.sort(lectureList, new PersistableIdComparator());
+        schedule.setLectureList(lectureList);
+    }
+
+
+    public List<Lecture> createLectureList(CurriculumCourseSchedule schedule) {
+        List<Course> courseList = schedule.getCourseList();
+        List<Lecture> lectureList = new ArrayList<Lecture>(courseList.size() * 5);
+        int lectureId = 0;
+        for (Course course : courseList) {
+            for (int i = 0; i < course.getLectureSize(); i++) {
+                Lecture lecture = new Lecture();
+                lecture.setId((long) lectureId);
+                lecture.setCourse(course);
+                lecture.setLectureIndexInCourse(i);
+                lectureList.add(lecture);
+                lectureId++;
+            }
+        }
+        return lectureList;
+    }
+
+//    private void scheduleLeader(List<PeriodScoring> periodScoringList, List<Room> roomList,
+//            EvaluationHandler evaluationHandler, WorkingMemory workingMemory, double unscheduledScore,
+//            List<ExamToHandle> examToHandleList, Exam leader, FactHandle leaderHandle) {
+//        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;
+//            }
+//            for (ExamToHandle examToHandle : examToHandleList) {
+//                workingMemory.modifyRetract(examToHandle.getExamHandle());
+//                examToHandle.getExam().setPeriod(periodScoring.getPeriod());
+//                workingMemory.modifyInsert(examToHandle.getExamHandle(), examToHandle.getExam());
+//            }
+//            for (Room room : roomList) {
+//                workingMemory.modifyRetract(leaderHandle);
+//                leader.setRoom(room);
+//                workingMemory.modifyInsert(leaderHandle, leader);
+//                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.");
+//            }
+//            workingMemory.modifyRetract(leaderHandle);
+//            leader.setRoom(bestRoom);
+//            workingMemory.modifyInsert(leaderHandle, leader);
+//            for (ExamToHandle examToHandle : examToHandleList) {
+//                workingMemory.modifyRetract(examToHandle.getExamHandle());
+//                examToHandle.getExam().setPeriod(bestPeriod);
+//                workingMemory.modifyInsert(examToHandle.getExamHandle(), examToHandle.getExam());
+//            }
+//        }
+//        logger.debug("    Exam ({}) initialized for starting solution.", leader);
+//    }
+//
+//    private void scheduleNonLeader(List<Room> roomList,
+//            EvaluationHandler evaluationHandler, WorkingMemory workingMemory,
+//            Exam exam, FactHandle examHandle) {
+//        if (exam.getRoom() != null) {
+//            throw new IllegalStateException("Exam (" + exam + ") already has a room.");
+//        }
+//        double unscheduledScore = evaluationHandler.fireAllRulesAndCalculateStepScore();
+//        boolean perfectMatch = false;
+//        double bestScore = Double.NEGATIVE_INFINITY;
+//        Room bestRoom = null;
+//        for (Room room : roomList) {
+//            workingMemory.modifyRetract(examHandle);
+//            exam.setRoom(room);
+//            workingMemory.modifyInsert(examHandle, exam);
+//            double score = evaluationHandler.fireAllRulesAndCalculateStepScore();
+//            if (score < unscheduledScore) {
+//                if (score > bestScore) {
+//                    bestScore = score;
+//                    bestRoom = room;
+//                }
+//            } else if (score == unscheduledScore) {
+//                perfectMatch = true;
+//                break;
+//            } else {
+//                throw new IllegalStateException("The score (" + score
+//                        + ") cannot be higher than unscheduledScore (" + unscheduledScore + ").");
+//            }
+//        }
+//        if (!perfectMatch) {
+//            if (bestRoom == null) {
+//                throw new IllegalStateException("The bestRoom ("
+//                        + bestRoom + ") cannot be null.");
+//            }
+//            workingMemory.modifyRetract(examHandle);
+//            exam.setRoom(bestRoom);
+//            workingMemory.modifyInsert(examHandle, exam);
+//        }
+//        logger.debug("    Exam ({}) initialized for starting solution. *", exam);
+//    }
+//
+//    public static class ExamToHandle {
+//
+//        private Exam exam;
+//        private FactHandle examHandle;
+//
+//        public ExamToHandle(Exam exam) {
+//            this.exam = exam;
+//        }
+//
+//        public Exam getExam() {
+//            return exam;
+//        }
+//
+//        public FactHandle getExamHandle() {
+//            return examHandle;
+//        }
+//
+//        public void setExamHandle(FactHandle examHandle) {
+//            this.examHandle = examHandle;
+//        }
+//    }
+//
+//    /**
+//     * Create and order the exams in the order which we 'll assign them into periods and rooms.
+//     * @param examination not null
+//     * @return not null
+//     */
+//    private List<ExamInitialWeight> createExamAssigningScoreList(Examination examination) {
+//        List<Exam> examList = createExamList(examination);
+//        List<ExamInitialWeight> examInitialWeightList = new ArrayList<ExamInitialWeight>(examList.size());
+//        for (Exam exam : examList) {
+//            if (exam.isCoincidenceLeader()) {
+//                examInitialWeightList.add(new ExamInitialWeight(exam));
+//            }
+//        }
+//        Collections.sort(examInitialWeightList);
+//        return examInitialWeightList;
+//    }
+//
+//    public List<Exam> createExamList(Examination examination) {
+//        List<Topic> topicList = examination.getTopicList();
+//        List<Exam> examList = new ArrayList<Exam>(topicList.size());
+//        Map<Topic, Exam> topicToExamMap = new HashMap<Topic, Exam>(topicList.size());
+//        for (Topic topic : topicList) {
+//            Exam exam = new Exam();
+//            exam.setId(topic.getId());
+//            exam.setTopic(topic);
+//            examList.add(exam);
+//            topicToExamMap.put(topic, exam);
+//        }
+//        for (PeriodHardConstraint periodHardConstraint : examination.getPeriodHardConstraintList()) {
+//            if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.EXAM_COINCIDENCE) {
+//                Exam leftExam = topicToExamMap.get(periodHardConstraint.getLeftSideTopic());
+//                Exam rightExam = topicToExamMap.get(periodHardConstraint.getRightSideTopic());
+//
+//                Set<Exam> newCoincidenceExamSet = new LinkedHashSet<Exam>(4);
+//                ExamCoincidence leftExamCoincidence = leftExam.getExamCoincidence();
+//                if (leftExamCoincidence != null) {
+//                    newCoincidenceExamSet.addAll(leftExamCoincidence.getCoincidenceExamSet());
+//                } else {
+//                    newCoincidenceExamSet.add(leftExam);
+//                }
+//                ExamCoincidence rightExamCoincidence = rightExam.getExamCoincidence();
+//                if (rightExamCoincidence != null) {
+//                    newCoincidenceExamSet.addAll(rightExamCoincidence.getCoincidenceExamSet());
+//                } else {
+//                    newCoincidenceExamSet.add(rightExam);
+//                }
+//                ExamCoincidence newExamCoincidence = new ExamCoincidence(newCoincidenceExamSet);
+//                for (Exam exam : newCoincidenceExamSet) {
+//                    exam.setExamCoincidence(newExamCoincidence);
+//                }
+//            } else if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.AFTER) {
+//                Exam afterExam = topicToExamMap.get(periodHardConstraint.getLeftSideTopic());
+//                Exam beforeExam = topicToExamMap.get(periodHardConstraint.getRightSideTopic());
+//                ExamBefore examBefore = beforeExam.getExamBefore();
+//                if (examBefore == null) {
+//                    examBefore = new ExamBefore(new LinkedHashSet<Exam>(2));
+//                    beforeExam.setExamBefore(examBefore);
+//                }
+//                examBefore.getAfterExamSet().add(afterExam);
+//            }
+//        }
+//        return examList;
+//    }
+//
+//    private class ExamInitialWeight implements Comparable<ExamInitialWeight> {
+//
+//        private Exam exam;
+//        private int totalStudentSize;
+//        private int maximumDuration;
+//
+//        private ExamInitialWeight(Exam exam) {
+//            this.exam = exam;
+//            totalStudentSize = calculateTotalStudentSize(exam);
+//            maximumDuration = calculateMaximumDuration(exam);
+//        }
+//
+//        private int calculateTotalStudentSize(Exam innerExam) {
+//            int innerTotalStudentSize = 0;
+//            if (innerExam.getExamCoincidence() == null) {
+//                innerTotalStudentSize = innerExam.getTopicStudentSize();
+//            } else {
+//                for (Exam coincidenceExam : innerExam.getExamCoincidence().getCoincidenceExamSet()) {
+//                    innerTotalStudentSize += coincidenceExam.getTopicStudentSize();
+//                }
+//            }
+//            if (innerExam.getExamBefore() != null) {
+//                for (Exam afterExam : innerExam.getExamBefore().getAfterExamSet()) {
+//                    innerTotalStudentSize += calculateTotalStudentSize(afterExam); // recursive
+//                }
+//            }
+//            return innerTotalStudentSize;
+//        }
+//
+//        private int calculateMaximumDuration(Exam innerExam) {
+//            int innerMaximumDuration = innerExam.getTopic().getDuration();
+//            if (innerExam.getExamCoincidence() != null) {
+//                for (Exam coincidenceExam : innerExam.getExamCoincidence().getCoincidenceExamSet()) {
+//                    innerMaximumDuration = Math.max(innerMaximumDuration, coincidenceExam.getTopicStudentSize());
+//                }
+//            }
+//            if (innerExam.getExamBefore() != null) {
+//                for (Exam afterExam : innerExam.getExamBefore().getAfterExamSet()) {
+//                    innerMaximumDuration = Math.max(innerMaximumDuration, calculateMaximumDuration(afterExam)); // recursive
+//                }
+//            }
+//            return innerMaximumDuration;
+//        }
+//
+//        public Exam getExam() {
+//            return exam;
+//        }
+//
+//        public int compareTo(ExamInitialWeight other) {
+//            // TODO calculate a assigningScore based on the properties of a topic and sort on that assigningScore
+//            return new CompareToBuilder()
+//                    .append(other.totalStudentSize, totalStudentSize) // Descending
+//                    .append(other.maximumDuration, maximumDuration) // Descending
+//                    .append(exam.getId(), other.exam.getId()) // Ascending
+//                    .toComparison();
+//        }
+//
+//    }
+//
+//    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();
+//        }
+//
+//    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java	2008-03-21 19:53:43 UTC (rev 19189)
@@ -46,7 +46,6 @@
         List<Period> periodList = examination.getPeriodList();
         List<Room> roomList = examination.getRoomList();
         List<Exam> examList = new ArrayList<Exam>(examination.getTopicList().size());
-        examination.setExamList(examList);
         evaluationHandler.setSolution(examination);
         WorkingMemory workingMemory = evaluationHandler.getStatefulSession();
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml	2008-03-21 19:26:16 UTC (rev 19188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml	2008-03-21 19:53:43 UTC (rev 19189)
@@ -4,14 +4,14 @@
     <scoreCalculator>
         <scoreCalculatorType>HARD_AND_SOFT_CONSTRAINTS</scoreCalculatorType>
     </scoreCalculator>
-    <!--<startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>-->
+    <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.solution.initializer.CurriculumCourseStartingSolutionInitializer</startingSolutionInitializerClass>
     <finish>
         <!--
             Official benchmark maximumSecondsSpend allowed on:
             ge0ffrey's main pc: 429
             ge0ffrey's old pc: 1152
         -->
-        <maximumSecondsSpend>429</maximumSecondsSpend>
+        <maximumSecondsSpend>1</maximumSecondsSpend>
         <!--<feasableScore>-999999.0</feasableScore>-->
         <!--<maximumStepCount>100</maximumStepCount>-->
     </finish>




More information about the jboss-svn-commits mailing list