[jboss-svn-commits] JBL Code SVN: r17481 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: java/org/drools/solver/examples/itc2007/examination/persistence and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Tue Jan 1 08:09:36 EST 2008
Author: ge0ffrey
Date: 2008-01-01 08:09:36 -0500 (Tue, 01 Jan 2008)
New Revision: 17481
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/InstitutionalWeighting.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl
Log:
periodSpread
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/InstitutionalWeighting.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/InstitutionalWeighting.java 2008-01-01 13:04:04 UTC (rev 17480)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/InstitutionalWeighting.java 2008-01-01 13:09:36 UTC (rev 17481)
@@ -10,6 +10,7 @@
private int twoInARowPenality;
private int twoInADayPenality;
+ private int periodSpreadLength;
private int periodSpreadPenality;
private int mixedDurationPenality;
private int frontLoadLargeTopicSize;
@@ -32,6 +33,14 @@
this.twoInADayPenality = twoInADayPenality;
}
+ public int getPeriodSpreadLength() {
+ return periodSpreadLength;
+ }
+
+ public void setPeriodSpreadLength(int periodSpreadLength) {
+ this.periodSpreadLength = periodSpreadLength;
+ }
+
public int getPeriodSpreadPenality() {
return periodSpreadPenality;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java 2008-01-01 13:04:04 UTC (rev 17480)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java 2008-01-01 13:09:36 UTC (rev 17481)
@@ -294,7 +294,8 @@
lineTokens = readInstitutionalWeightingProperty(bufferedReader, "TWOINADAY", 2);
institutionalWeighting.setTwoInADayPenality(Integer.parseInt(lineTokens[1]));
lineTokens = readInstitutionalWeightingProperty(bufferedReader, "PERIODSPREAD", 2);
- institutionalWeighting.setPeriodSpreadPenality(Integer.parseInt(lineTokens[1]));
+ institutionalWeighting.setPeriodSpreadLength(Integer.parseInt(lineTokens[1]));
+ institutionalWeighting.setPeriodSpreadPenality(1); // constant
lineTokens = readInstitutionalWeightingProperty(bufferedReader, "NONMIXEDDURATIONS", 2);
institutionalWeighting.setMixedDurationPenality(Integer.parseInt(lineTokens[1]));
lineTokens = readInstitutionalWeightingProperty(bufferedReader, "FRONTLOAD", 4);
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-01 13:04:04 UTC (rev 17480)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl 2008-01-01 13:09:36 UTC (rev 17481)
@@ -157,6 +157,9 @@
// Soft constraints
// ############################################################################
+// TODO check if merging twoExamsInARow and twoExamsInADay can be a noticable performance boost
+// because it avoids OR nodes.
+
// Two exams in a row which share students.
rule "twoExamsInARow"
when
@@ -180,7 +183,7 @@
$topicConflict : TopicConflict($leftTopic : leftTopic, $rightTopic : rightTopic);
$leftExam : Exam(topic == $leftTopic, $leftPeriod : period);
$rightExam : Exam(topic == $rightTopic, $rightPeriod : period);
- eval($rightPeriod.getDayIndex() == $leftPeriod.getDayIndex());
+ eval($leftPeriod.getDayIndex() == $rightPeriod.getDayIndex());
eval($leftPeriod != $rightPeriod);
eval(($leftPeriod.getPeriodIndex() + 1) != $rightPeriod.getPeriodIndex());
eval($leftPeriod.getPeriodIndex() != ($rightPeriod.getPeriodIndex() + 1));
@@ -190,9 +193,22 @@
$leftExam, $rightExam));
end
-//Period Spread
-// TODO implement me
+// Exams which share students have to few periods between them.
+rule "periodSpread"
+ when
+ $institutionalWeighting : InstitutionalWeighting();
+ $topicConflict : TopicConflict($leftTopic : leftTopic, $rightTopic : rightTopic);
+ $leftExam : Exam(topic == $leftTopic, $leftPeriod : period);
+ $rightExam : Exam(topic == $rightTopic, $rightPeriod : period);
+ eval(Math.abs($leftPeriod.getPeriodIndex() - $rightPeriod.getPeriodIndex())
+ < $institutionalWeighting.getPeriodSpreadLength());
+ then
+ insertLogical(new IntConstraintOccurrence("periodSpread", ConstraintType.NEGATIVE_SOFT,
+ $topicConflict.getStudentSize() * $institutionalWeighting.getPeriodSpreadPenality(),
+ $leftExam, $rightExam));
+end
+
// Several exams in the same room and period have different durations
rule "mixedDurations"
when
More information about the jboss-svn-commits
mailing list