[jboss-svn-commits] JBL Code SVN: r32710 - in labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch: decider and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 3 15:43:42 EDT 2010


Author: ge0ffrey
Date: 2010-05-03 15:43:41 -0400 (Mon, 03 May 2010)
New Revision: 32710

Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/LocalSearchSolverScope.java
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/DefaultDecider.java
Log:
buildConstraintOccurrenceSummary

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/LocalSearchSolverScope.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/LocalSearchSolverScope.java	2010-05-03 15:17:54 UTC (rev 32709)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/LocalSearchSolverScope.java	2010-05-03 19:43:41 UTC (rev 32710)
@@ -1,12 +1,20 @@
 package org.drools.planner.core.localsearch;
 
+import java.util.Iterator;
+import java.util.Map;
 import java.util.Random;
+import java.util.TreeMap;
 
+import org.drools.ClassObjectFilter;
 import org.drools.RuleBase;
 import org.drools.StatefulSession;
 import org.drools.WorkingMemory;
 import org.drools.planner.core.score.calculator.ScoreCalculator;
 import org.drools.planner.core.score.Score;
+import org.drools.planner.core.score.constraint.ConstraintOccurrence;
+import org.drools.planner.core.score.constraint.DoubleConstraintOccurrence;
+import org.drools.planner.core.score.constraint.IntConstraintOccurrence;
+import org.drools.planner.core.score.constraint.UnweightedConstraintOccurrence;
 import org.drools.planner.core.score.definition.ScoreDefinition;
 import org.drools.planner.core.solution.Solution;
 
@@ -162,4 +170,39 @@
         }
     }
 
+    public String buildConstraintOccurrenceSummary() {
+        if (workingMemory == null) {
+            return "  The workingMemory is null.";
+        }
+        Map<String, Number> scoreTotalMap = new TreeMap<String, Number>();
+        Iterator<ConstraintOccurrence> it = (Iterator<ConstraintOccurrence>) workingMemory.iterateObjects(
+                new ClassObjectFilter(ConstraintOccurrence.class));
+        while (it.hasNext()) {
+            ConstraintOccurrence occurrence = it.next();
+            Number scoreTotalNumber = scoreTotalMap.get(occurrence.getRuleId());
+            if (occurrence instanceof IntConstraintOccurrence) {
+                int scoreTotal = scoreTotalNumber == null ? 0 : (Integer) scoreTotalNumber;
+                scoreTotal += ((IntConstraintOccurrence) occurrence).getWeight();
+                scoreTotalMap.put(occurrence.getRuleId(), scoreTotal);
+            } else if (occurrence instanceof DoubleConstraintOccurrence) {
+                double scoreTotal = scoreTotalNumber == null ? 0 : (Double) scoreTotalNumber;
+                scoreTotal += ((DoubleConstraintOccurrence) occurrence).getWeight();
+                scoreTotalMap.put(occurrence.getRuleId(), scoreTotal);
+            } else if (occurrence instanceof UnweightedConstraintOccurrence) {
+                int scoreTotal = scoreTotalNumber == null ? 0 : (Integer) scoreTotalNumber;
+                scoreTotal += 1;
+                scoreTotalMap.put(occurrence.getRuleId(), scoreTotal);
+            } else {
+                throw new IllegalStateException("Cannot determine occurrenceScore of ConstraintOccurrence class: "
+                        + occurrence.getClass());
+            }
+        }
+        StringBuilder summary = new StringBuilder();
+        for (Map.Entry<String, Number> scoreTotalEntry : scoreTotalMap.entrySet()) {
+            summary.append("  Score rule (").append(scoreTotalEntry.getKey()).append(") has score total (")
+                    .append(scoreTotalEntry.getValue()).append(").\n");
+        }
+        return summary.toString();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/DefaultDecider.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/DefaultDecider.java	2010-05-03 15:17:54 UTC (rev 32709)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/core/localsearch/decider/DefaultDecider.java	2010-05-03 19:43:41 UTC (rev 32710)
@@ -125,7 +125,8 @@
                 throw new IllegalStateException(
                         "Corrupted undo move (" + undoMove + ") received from move (" + move + ").\n"
                         + "Unequal lastCompletedStepScore (" + lastCompletedStepScore + ") and undoScore ("
-                        + undoScore + ").");
+                        + undoScore + ").\n"
+                        + moveScope.getStepScope().getLocalSearchSolverScope().buildConstraintOccurrenceSummary());
             }
         }
         logger.debug("    Move ({}) with score ({}) and acceptChance ({}).",



More information about the jboss-svn-commits mailing list