[jboss-svn-commits] JBL Code SVN: r18115 - in labs/jbossrules/trunk/drools-solver: drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider and 5 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jan 25 10:51:49 EST 2008


Author: ge0ffrey
Date: 2008-01-25 10:51:49 -0500 (Fri, 25 Jan 2008)
New Revision: 18115

Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptionListBasedForager.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.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/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/examination/solver/examinationScoreRules.drl
Log:
hard constraints should take studentSize into account

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java	2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -122,11 +122,12 @@
             beforeDeciding();
             Move nextStep = decider.decideNextStep();
             if (nextStep == null) {
-                logger.warn("No move accepted for step ({}). Finishing early.", getStepIndex());
+                logger.warn("No move accepted for step ({}) out of {} accepted moves. Finishing early.",
+                        getStepIndex(), decider.getAcceptedMovesSize());
                 break;
             }
-            logger.info("Step ({}), time spend ({}) doing next step ({}).",
-                    new Object[]{getStepIndex(), getTimeMillisSpend(), nextStep});
+            logger.info("Step index ({}), time spend ({}) taking step ({}) out of {} accepted moves.",
+                    new Object[]{getStepIndex(), getTimeMillisSpend(), nextStep, decider.getAcceptedMovesSize()});
             stepDecided(nextStep);
             nextStep.doMove(evaluationHandler.getStatefulSession());
             stepScore = evaluationHandler.fireAllRulesAndCalculateStepScore();

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java	2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -11,4 +11,6 @@
 
     Move decideNextStep();
 
+    int getAcceptedMovesSize();
+
 }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java	2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -1,5 +1,7 @@
 package org.drools.solver.core.localsearch.decider;
 
+import java.util.List;
+
 import org.drools.WorkingMemory;
 import org.drools.solver.core.evaluation.EvaluationHandler;
 import org.drools.solver.core.localsearch.LocalSearchSolver;
@@ -66,7 +68,8 @@
 
     public Move decideNextStep() {
         WorkingMemory workingMemory = localSearchSolver.getEvaluationHandler().getStatefulSession();
-        for (Move move : selector.selectMoveList()) {
+        List<Move> moveList = selector.selectMoveList();
+        for (Move move : moveList) {
             // Filter out not doable moves
             if (move.isMoveDoable(workingMemory)) {
                 doMove(move);
@@ -104,6 +107,10 @@
         forager.addMove(move, score, acceptChance);
     }
 
+    public int getAcceptedMovesSize() {
+        return forager.getAcceptedMovesSize();
+    }
+
     public void stepDecided(Move step) {
         selector.stepDecided(step);
         accepter.stepDecided(step);

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptionListBasedForager.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptionListBasedForager.java	2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptionListBasedForager.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -24,7 +24,7 @@
 
     @Override
     public void beforeDeciding() {
-        acceptionList = new ArrayList<Acception>();
+        acceptionList = new ArrayList<Acception>(); // TODO use size of moveList in decider
         listSorted = false;
         maxScore = Double.NEGATIVE_INFINITY;
         acceptChanceMaxScoreTotal = 0.0;
@@ -67,6 +67,10 @@
         return pickedMove;
     }
 
+    public int getAcceptedMovesSize() {
+        return acceptionList.size();
+    }
+
     public List<Move> getTopList(int topSize) {
         sortAcceptionList();
         int size = acceptionList.size();

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java	2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -17,6 +17,8 @@
 
     Move pickMove();
 
+    int getAcceptedMovesSize();
+
     List<Move> getTopList(int topSize);
     
 }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java	2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -129,8 +129,8 @@
         return getTopic().getDuration();
     }
 
-    public int getTopicStudentListSize() {
-        return getTopic().getStudentListSize();
+    public int getTopicStudentSize() {
+        return getTopic().getStudentSize();
     }
 
     public int getPeriodDuration() {

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java	2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -34,7 +34,7 @@
         this.studentList = studentList;
     }
 
-    public int getStudentListSize() {
+    public int getStudentSize() {
         return studentList.size();
     }
 
@@ -66,7 +66,7 @@
     }
 
     public String toString() {
-        return id + " {" + duration + ", " + getStudentListSize() + "}";
+        return id + " {" + duration + ", " + getStudentSize() + "}";
     }
 
 }

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-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -309,7 +309,7 @@
         Collections.sort(sortedTopicList, new Comparator<Topic>() {
             public int compare(Topic a, Topic b) {
                 return new CompareToBuilder()
-                        .append(a.getStudentListSize(), b.getStudentListSize()) // Ascending
+                        .append(a.getStudentSize(), b.getStudentSize()) // Ascending
                         .append(b.getId(), a.getId()) // Descending (according to spec)
                         .toComparison();
             }

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-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java	2008-01-25 15:51:49 UTC (rev 18115)
@@ -287,10 +287,10 @@
         private int calculateTotalStudentSize(Exam innerExam) {
             int innerTotalStudentSize = 0;
             if (innerExam.getExamCoincidence() == null) {
-                innerTotalStudentSize = innerExam.getTopicStudentListSize();
+                innerTotalStudentSize = innerExam.getTopicStudentSize();
             } else {
                 for (Exam coincidenceExam : innerExam.getExamCoincidence().getCoincidenceExamSet()) {
-                    innerTotalStudentSize += coincidenceExam.getTopicStudentListSize();
+                    innerTotalStudentSize += coincidenceExam.getTopicStudentSize();
                 }
             }
             if (innerExam.getExamBefore() != null) {
@@ -305,7 +305,7 @@
             int innerMaximumDuration = innerExam.getTopic().getDuration();
             if (innerExam.getExamCoincidence() != null) {
                 for (Exam coincidenceExam : innerExam.getExamCoincidence().getCoincidenceExamSet()) {
-                    innerMaximumDuration = Math.max(innerMaximumDuration, coincidenceExam.getTopicStudentListSize());
+                    innerMaximumDuration = Math.max(innerMaximumDuration, coincidenceExam.getTopicStudentSize());
                 }
             }
             if (innerExam.getExamBefore() != null) {

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-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl	2008-01-25 15:51:49 UTC (rev 18115)
@@ -57,6 +57,7 @@
         $rightExam : Exam(topic == $rightTopic, period == $period);
     then
         insertLogical(new IntConstraintOccurrence("conflictingExamsInSamePeriod", ConstraintType.NEGATIVE_HARD,
+            $topicConflict.getStudentSize(),
             $leftExam, $rightExam));
 end
 
@@ -66,6 +67,7 @@
         $exam : Exam(eval(topicDuration > periodDuration));
     then
         insertLogical(new IntConstraintOccurrence("periodDurationTooShort", ConstraintType.NEGATIVE_HARD,
+            $exam.getTopicStudentSize(),
             $exam));
 end
 
@@ -74,10 +76,10 @@
     when
         $period : Period();
         $room : Room($capacity : capacity);
-        $totalStudentListSize : Number(intValue > $capacity) from accumulate(
-            Exam(period == $period, room == $room, $studentListSize : topicStudentListSize),
-            // sumInteger($studentListSize) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
-            sum($studentListSize)
+        $totalStudentSize : Number(intValue > $capacity) from accumulate(
+            Exam(period == $period, room == $room, $studentSize : topicStudentSize),
+            // sumInteger($studentSize) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
+            sum($studentSize)
         );
         // HACK to fix wierd truth maintance behavior in drools
         // because making weight part of the equals/hashcode doesn't cut it
@@ -85,10 +87,10 @@
             ruleId == "roomCapacityTooSmall",
             constraintType == ConstraintType.NEGATIVE_HARD,
             causes contains $period, causes contains $room,
-            eval(weight != ($totalStudentListSize.intValue() - $capacity))));
+            eval(weight != ($totalStudentSize.intValue() - $capacity))));
     then
         insertLogical(new IntConstraintOccurrence("roomCapacityTooSmall", ConstraintType.NEGATIVE_HARD,
-            ($totalStudentListSize.intValue() - $capacity),
+            ($totalStudentSize.intValue() - $capacity),
             $period, $room));
 end
 
@@ -105,6 +107,7 @@
         // LeftSide and rightSide don't share a student because those are filtered out in the InputConvertor
     then
         insertLogical(new IntConstraintOccurrence("periodHardConstraintExamCoincidence", ConstraintType.NEGATIVE_HARD,
+            ($leftSideTopic.getStudentSize() + $rightSideTopic.getStudentSize()),
             $periodHardConstraint));
 end
 rule "periodHardConstraintExclusion"
@@ -118,6 +121,7 @@
         Exam(topic == $rightSideTopic, period == $leftSidePeriod);
     then
         insertLogical(new IntConstraintOccurrence("periodHardConstraintExclusion", ConstraintType.NEGATIVE_HARD,
+            ($leftSideTopic.getStudentSize() + $rightSideTopic.getStudentSize()),
             $periodHardConstraint));
 end
 rule "periodHardConstraintAfter"
@@ -132,14 +136,15 @@
                 $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))));
+//        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,
-            ($beforeSidePeriod.getPeriodIndex() - $afterSidePeriod.getPeriodIndex() + 1),
+//            ($beforeSidePeriod.getPeriodIndex() - $afterSidePeriod.getPeriodIndex() + 1),
+            ($leftSideTopic.getStudentSize() + $rightSideTopic.getStudentSize()),
             $periodHardConstraint));
 end
 
@@ -151,9 +156,10 @@
             $topic : topic
         )
         Exam(topic == $topic, $room : room);
-        Exam(topic != $topic, room == $room);
+        Exam(room == $room, topic != $topic, $otherTopic : topic);
     then
         insertLogical(new IntConstraintOccurrence("roomHardConstraintExclusive", ConstraintType.NEGATIVE_HARD,
+            ($topic.getStudentSize() + $otherTopic.getStudentSize()),
             $roomHardConstraint));
 end
 




More information about the jboss-svn-commits mailing list