[jboss-svn-commits] JBL Code SVN: r17796 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: resources/org/drools/solver/examples/itc2007/examination/solver and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Jan 13 16:40:21 EST 2008
Author: ge0ffrey
Date: 2008-01-13 16:40:20 -0500 (Sun, 13 Jan 2008)
New Revision: 17796
Modified:
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/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl
Log:
hack to fix out-of-sync bug, starting solution intializer re-order
Modified: 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-13 20:49:58 UTC (rev 17795)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationStartingSolutionInitializer.java 2008-01-13 21:40:20 UTC (rev 17796)
@@ -14,6 +14,8 @@
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;
@@ -39,17 +41,9 @@
evaluationHandler.setSolution(examination);
StatefulSession statefulSession = evaluationHandler.getStatefulSession();
- // Sort the order in which we 'll assign the topics into periods and rooms
- List<Topic> sortedTopicList = new ArrayList<Topic>(topicList);
- Collections.sort(sortedTopicList, new Comparator<Topic>() {
- public int compare(Topic a, Topic b) {
- return new CompareToBuilder()
- .append(a.getStudentListSize(), b.getStudentListSize())
- .toComparison();
- }
- });
+ List<Topic> assigningTopicList = createAssigningTopicList(examination);
- for (Topic topic : sortedTopicList) {
+ for (Topic topic : assigningTopicList) {
double unscheduledScore = evaluationHandler.fireAllRulesAndCalculateStepScore();
Exam exam = new Exam();
@@ -119,6 +113,35 @@
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) {
+ // Descending
+ return new CompareToBuilder()
+ .append(b.getStudentListSize(), a.getStudentListSize())
+ .toComparison();
+ }
+ });
+ for (PeriodHardConstraint periodHardConstraint : examination.getPeriodHardConstraintList()) {
+ 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;
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl 2008-01-13 20:49:58 UTC (rev 17795)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl 2008-01-13 21:40:20 UTC (rev 17796)
@@ -123,9 +123,15 @@
Exam(topic == $leftSideTopic, $afterSidePeriod : period);
Exam(topic == $rightSideTopic, eval($afterSidePeriod.getPeriodIndex() <= period.getPeriodIndex()),
$beforeSidePeriod : period);
+ // HACK to fix wierd truth maintance behavior in drools
+ // because making weight part of the equals/hashcode doesn't cut it
+ not(IntConstraintOccurrence(
+ ruleId == "periodHardConstraintAfter",
+ constraintType == ConstraintType.NEGATIVE_HARD,
+ causes contains $periodHardConstraint,
+ eval(weight != ($beforeSidePeriod.getPeriodIndex() - $afterSidePeriod.getPeriodIndex() + 1))));
then
insertLogical(new IntConstraintOccurrence("periodHardConstraintAfter", ConstraintType.NEGATIVE_HARD,
- // TODO this gets corrupted as long as the rule fires because a wierd feature (=bug?) in drools
($beforeSidePeriod.getPeriodIndex() - $afterSidePeriod.getPeriodIndex() + 1),
$periodHardConstraint));
end
More information about the jboss-svn-commits
mailing list