[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