[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