[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