[jboss-svn-commits] JBL Code SVN: r33829 - in labs/jbossrules/trunk/drools-planner: src/main/assembly/docs and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Jul 11 11:54:20 EDT 2010


Author: ge0ffrey
Date: 2010-07-11 11:54:20 -0400 (Sun, 11 Jul 2010)
New Revision: 33829

Added:
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/TotalScoreSolverBenchmarkComparator.java
Removed:
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/AverageScoreSolverBenchmarkComparator.java
Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/SolverBenchmark.java
   labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/SolverBenchmarkSuite.java
   labs/jbossrules/trunk/drools-planner/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
Log:
benchmarking: remove auto sorting, introduce ranking

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/AverageScoreSolverBenchmarkComparator.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/AverageScoreSolverBenchmarkComparator.java	2010-07-11 14:47:09 UTC (rev 33828)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/AverageScoreSolverBenchmarkComparator.java	2010-07-11 15:54:20 UTC (rev 33829)
@@ -1,23 +0,0 @@
-package org.drools.planner.benchmark;
-
-import java.util.Comparator;
-
-import org.apache.commons.lang.builder.CompareToBuilder;
-import org.drools.planner.core.score.Score;
-
-/**
- * @author Geoffrey De Smet
- */
-public class AverageScoreSolverBenchmarkComparator implements Comparator<SolverBenchmark> {
-
-    private WorstScoreSolverBenchmarkComparator worstScoreSolverBenchmarkComparator
-            = new WorstScoreSolverBenchmarkComparator();
-
-    public int compare(SolverBenchmark a, SolverBenchmark b) {
-        return new CompareToBuilder()
-                .append(a.getAverageScore(), b.getAverageScore())
-                .append(a, b, worstScoreSolverBenchmarkComparator)
-                .toComparison();
-    }
-
-}

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/SolverBenchmark.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/SolverBenchmark.java	2010-07-11 14:47:09 UTC (rev 33828)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/SolverBenchmark.java	2010-07-11 15:54:20 UTC (rev 33829)
@@ -25,6 +25,9 @@
     @XStreamImplicit(itemFieldName = "solverBenchmarkResult")
     private List<SolverBenchmarkResult> solverBenchmarkResultList = null;
 
+    // Ranking starts from 0
+    private Integer ranking = null;
+
     public String getName() {
         return name;
     }
@@ -57,6 +60,14 @@
         this.solverBenchmarkResultList = solverBenchmarkResultList;
     }
 
+    public Integer getRanking() {
+        return ranking;
+    }
+
+    public void setRanking(Integer ranking) {
+        this.ranking = ranking;
+    }
+
     // ************************************************************************
     // Builder methods
     // ************************************************************************
@@ -109,9 +120,9 @@
     }
 
     /**
-     * @return the average score
+     * @return the total score
      */
-    public Score getAverageScore() {
+    public Score getTotalScore() {
         Score totalScore = null;
         for (SolverBenchmarkResult solverBenchmarkResult : solverBenchmarkResultList) {
             if (totalScore == null) {
@@ -120,7 +131,14 @@
                 totalScore = totalScore.add(solverBenchmarkResult.getScore());
             }
         }
-        return totalScore.divide(solverBenchmarkResultList.size());
+        return totalScore;
     }
 
+    /**
+     * @return the average score
+     */
+    public Score getAverageScore() {
+        return getTotalScore().divide(solverBenchmarkResultList.size());
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/SolverBenchmarkSuite.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/SolverBenchmarkSuite.java	2010-07-11 14:47:09 UTC (rev 33828)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/SolverBenchmarkSuite.java	2010-07-11 15:54:20 UTC (rev 33829)
@@ -13,6 +13,7 @@
 import java.io.UnsupportedEncodingException;
 import java.io.Writer;
 import java.text.NumberFormat;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.LinkedHashMap;
@@ -54,7 +55,6 @@
     private File solvedSolutionFilesDirectory = null;
     private File solverStatisticFilesDirectory = null;
     private SolverStatisticType solverStatisticType = SolverStatisticType.NONE;
-    private boolean sortSolverBenchmarks = true;
     private Comparator<SolverBenchmark> solverBenchmarkComparator = null;
 
     @XStreamAlias("inheritedLocalSearchSolver")
@@ -98,14 +98,6 @@
         this.solverStatisticType = solverStatisticType;
     }
 
-    public boolean isSortSolverBenchmarks() {
-        return sortSolverBenchmarks;
-    }
-
-    public void setSortSolverBenchmarks(boolean sortSolverBenchmarks) {
-        this.sortSolverBenchmarks = sortSolverBenchmarks;
-    }
-
     public Comparator<SolverBenchmark> getSolverBenchmarkComparator() {
         return solverBenchmarkComparator;
     }
@@ -184,6 +176,9 @@
             solverStatisticFilesDirectory = new File(benchmarkDirectory, "statistic");
         }
         solverStatisticFilesDirectory.mkdirs();
+        if (solverBenchmarkComparator == null) {
+            solverBenchmarkComparator = new TotalScoreSolverBenchmarkComparator();
+        }
     }
 
     public void benchmark(XStream xStream) { // TODO refactor out xstream
@@ -256,13 +251,7 @@
     }
 
     public void benchmarkingEnded(XStream xStream, Map<File, SolverStatistic> unsolvedSolutionFileToStatisticMap) {
-        if (sortSolverBenchmarks) {
-            if (solverBenchmarkComparator == null) {
-                solverBenchmarkComparator = new AverageScoreSolverBenchmarkComparator();
-            }
-            Collections.sort(solverBenchmarkList, solverBenchmarkComparator);
-            Collections.reverse(solverBenchmarkList); // Best results first, worst results last
-        }
+        determineRankings();
         writeBestScoreSummaryChart();
         // 2 lines at 80 chars per line give a max of 160 per entry
         StringBuilder htmlFragment = new StringBuilder(unsolvedSolutionFileToStatisticMap.size() * 160);
@@ -283,6 +272,15 @@
         writeBenchmarkResult(xStream);
     }
 
+    private void determineRankings() {
+        List<SolverBenchmark> sortedSolverBenchmarkList = new ArrayList<SolverBenchmark>(solverBenchmarkList);
+        Collections.sort(sortedSolverBenchmarkList, solverBenchmarkComparator);
+        Collections.reverse(sortedSolverBenchmarkList); // Best results first, worst results last
+        for (SolverBenchmark solverBenchmark : solverBenchmarkList) {
+            solverBenchmark.setRanking(sortedSolverBenchmarkList.indexOf(solverBenchmark));
+        }
+    }
+
     private CharSequence writeBestScoreSummaryChart() {
         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
         for (SolverBenchmark solverBenchmark : solverBenchmarkList) {
@@ -313,21 +311,27 @@
     }
 
     private CharSequence writeBestScoreSummaryTable() {
+
         StringBuilder htmlFragment = new StringBuilder(solverBenchmarkList.size() * 160);
         htmlFragment.append("  <table border=\"1\">\n");
         htmlFragment.append("    <tr><th/>");
         for (File unsolvedSolutionFile : inheritedUnsolvedSolutionFileList) {
             htmlFragment.append("<th>").append(unsolvedSolutionFile.getName()).append("</th>");
         }
-        htmlFragment.append("<th>Average</th></tr>\n");
+        htmlFragment.append("<th>Average</th><th>Ranking</th></tr>\n");
+        boolean oddLine = true;
         for (SolverBenchmark solverBenchmark : solverBenchmarkList) {
-            htmlFragment.append("    <tr><th>").append(solverBenchmark.getName()).append("</th>");
+            String backgroundColor = solverBenchmark.getRanking() == 0 ? "Yellow" : oddLine ? "White" : "Gray";
+            htmlFragment.append("    <tr style=\"background-color: ").append(backgroundColor).append("\"><th>")
+                    .append(solverBenchmark.getName()).append("</th>");
             for (SolverBenchmarkResult result : solverBenchmark.getSolverBenchmarkResultList()) {
                 Score score = result.getScore();
                 htmlFragment.append("<td>").append(score.toString()).append("</td>");
             }
-            htmlFragment.append("<td>").append(solverBenchmark.getAverageScore().toString()).append("</td>");
+            htmlFragment.append("<td>").append(solverBenchmark.getAverageScore().toString())
+                    .append("</td><td>").append(solverBenchmark.getRanking()).append("</td>");
             htmlFragment.append("</tr>\n");
+            oddLine = !oddLine;
         }
         htmlFragment.append("  </table>\n");
         return htmlFragment.toString();

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/TotalScoreSolverBenchmarkComparator.java (from rev 33818, labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/AverageScoreSolverBenchmarkComparator.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/TotalScoreSolverBenchmarkComparator.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-core/src/main/java/org/drools/planner/benchmark/TotalScoreSolverBenchmarkComparator.java	2010-07-11 15:54:20 UTC (rev 33829)
@@ -0,0 +1,23 @@
+package org.drools.planner.benchmark;
+
+import java.util.Comparator;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.planner.core.score.Score;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class TotalScoreSolverBenchmarkComparator implements Comparator<SolverBenchmark> {
+
+    private WorstScoreSolverBenchmarkComparator worstScoreSolverBenchmarkComparator
+            = new WorstScoreSolverBenchmarkComparator();
+
+    public int compare(SolverBenchmark a, SolverBenchmark b) {
+        return new CompareToBuilder()
+                .append(a.getTotalScore(), b.getTotalScore())
+                .append(a, b, worstScoreSolverBenchmarkComparator)
+                .toComparison();
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-planner/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
===================================================================
--- labs/jbossrules/trunk/drools-planner/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt	2010-07-11 14:47:09 UTC (rev 33828)
+++ labs/jbossrules/trunk/drools-planner/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt	2010-07-11 15:54:20 UTC (rev 33829)
@@ -324,7 +324,7 @@
 Benchmarker: the class MaxScoreSolverBenchmarkComparator has been renamed to WorstScoreSolverBenchmarkComparator.
 
 A benchmarker no longer uses WorstScoreSolverBenchmarkComparator by default.
-It now uses AverageScoreSolverBenchmarkComparator by default.
+It now uses TotalScoreSolverBenchmarkComparator by default.
 
 The benchmarker method writeResults(resultFile) has been removed.
 The result is now always written at the end of the benchmark() method
@@ -439,3 +439,10 @@
         <pickEarlyType>NEVER</pickEarlyType>
         <minimalAcceptedSelection>1</minimalAcceptedSelection>
     </forager>
+
+
+The benchmarker no longer sorts the solvers, because that was confusing to read.
+Instead outputs a table with a ranking column.
+You can still set a custom solverBenchmarkComparator to influence that ranking.
+Before in *BenchmarkConfig.xml:
+    <sortSolverBenchmarks>true</sortSolverBenchmarks>



More information about the jboss-svn-commits mailing list