[jboss-svn-commits] JBL Code SVN: r17829 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main: java/org/drools/solver/examples/itc2007/examination/solver and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Jan 14 14:03:49 EST 2008


Author: ge0ffrey
Date: 2008-01-14 14:03:49 -0500 (Mon, 14 Jan 2008)
New Revision: 17829

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/solver/ExaminationStartingSolutionInitializer.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
Log:
better starting order + id's for room/period hard constraint

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-14 17:38:21 UTC (rev 17828)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java	2008-01-14 19:03:49 UTC (rev 17829)
@@ -209,9 +209,11 @@
         List<Topic> topicList = examination.getTopicList();
         List<PeriodHardConstraint> periodHardConstraintList = new ArrayList<PeriodHardConstraint>();
         String line = bufferedReader.readLine();
+        int id = 0;
         while (!line.equals("[RoomHardConstraints]")) {
             String[] lineTokens = line.split(SPLIT_REGEX);
             PeriodHardConstraint periodHardConstraint = new PeriodHardConstraint();
+            periodHardConstraint.setId((long) id);
             if (lineTokens.length != 3) {
                 throw new IllegalArgumentException("Read line (" + line + ") is expected to contain 3 tokens.");
             }
@@ -220,6 +222,7 @@
             periodHardConstraint.setRightSideTopic(topicList.get(Integer.parseInt(lineTokens[2])));
             periodHardConstraintList.add(periodHardConstraint);
             line = bufferedReader.readLine();
+            id++;
         }
         examination.setPeriodHardConstraintList(periodHardConstraintList);
     }
@@ -229,9 +232,11 @@
         List<Topic> topicList = examination.getTopicList();
         List<RoomHardConstraint> roomHardConstraintList = new ArrayList<RoomHardConstraint>();
         String line = bufferedReader.readLine();
+        int id = 0;
         while (!line.equals("[InstitutionalWeightings]")) {
             String[] lineTokens = line.split(SPLIT_REGEX);
             RoomHardConstraint roomHardConstraint = new RoomHardConstraint();
+            roomHardConstraint.setId((long) id);
             if (lineTokens.length != 2) {
                 throw new IllegalArgumentException("Read line (" + line + ") is expected to contain 3 tokens.");
             }
@@ -239,6 +244,7 @@
             roomHardConstraint.setRoomHardConstraintType(RoomHardConstraintType.valueOf(lineTokens[1]));
             roomHardConstraintList.add(roomHardConstraint);
             line = bufferedReader.readLine();
+            id++;
         }
         examination.setRoomHardConstraintList(roomHardConstraintList);
     }
@@ -254,6 +260,7 @@
 
     private void readInstitutionalWeighting(BufferedReader bufferedReader, Examination examination) throws IOException {
         InstitutionalWeighting institutionalWeighting = new InstitutionalWeighting();
+        institutionalWeighting.setId(0L);
         String[] lineTokens;
         lineTokens = readInstitutionalWeightingProperty(bufferedReader, "TWOINAROW", 2);
         institutionalWeighting.setTwoInARowPenality(Integer.parseInt(lineTokens[1]));

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-14 17:38:21 UTC (rev 17828)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/ExaminationStartingSolutionInitializer.java	2008-01-14 19:03:49 UTC (rev 17829)
@@ -122,14 +122,24 @@
         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())
+                        .append(b.getStudentListSize(), a.getStudentListSize()) // Descending
+                        .append(b.getDuration(), a.getDuration()) // Descending
+                        .append(a.getId(), b.getId()) // Ascending
                         .toComparison();
             }
         });
         for (PeriodHardConstraint periodHardConstraint : examination.getPeriodHardConstraintList()) {
-            if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.AFTER) {
+            if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.EXAM_COINCIDENCE) {
+                int leftSideIndex = assigningTopicList.indexOf(periodHardConstraint.getLeftSideTopic());
+                int rightSideIndex = assigningTopicList.indexOf(periodHardConstraint.getRightSideTopic());
+                int firstIndex = Math.min(leftSideIndex, rightSideIndex);
+                int lastIndex = Math.max(leftSideIndex, rightSideIndex);
+                if ((lastIndex - firstIndex) > 1) {
+                    Topic lastTopic = assigningTopicList.remove(lastIndex);
+                    assigningTopicList.add(firstIndex + 1, lastTopic);
+                }
+            } else if (periodHardConstraint.getPeriodHardConstraintType() == PeriodHardConstraintType.AFTER) {
                 int afterSideIndex = assigningTopicList.indexOf(periodHardConstraint.getLeftSideTopic());
                 int beforeSideIndex = assigningTopicList.indexOf(periodHardConstraint.getRightSideTopic());
                 if (afterSideIndex < beforeSideIndex) {

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml	2008-01-14 17:38:21 UTC (rev 17828)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml	2008-01-14 19:03:49 UTC (rev 17829)
@@ -21,7 +21,12 @@
         </scoreCalculator>
         <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
         <finish>
-            <maximumSecondsSpend>3</maximumSecondsSpend>
+            <!--
+                Official benchmark maximumSecondsSpend allowed on:
+                ge0ffrey's main pc: 429
+                ge0ffrey's old pc: 1152
+            -->
+            <maximumSecondsSpend>1152</maximumSecondsSpend>
         </finish>
     </inheritedLocalSearchSolver>
 




More information about the jboss-svn-commits mailing list