[jboss-svn-commits] JBL Code SVN: r29027 - in labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark: statistic and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Aug 23 11:39:12 EDT 2009
Author: ge0ffrey
Date: 2009-08-23 11:39:11 -0400 (Sun, 23 Aug 2009)
New Revision: 29027
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatistic.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatisticListener.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatisticPoint.java
Removed:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatistic.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticDetail.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticListener.java
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/SolverStatistic.java
Log:
BestSolutionStatistic rename to BestScoreStatistic + fix removeListener bug
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java 2009-08-23 12:08:07 UTC (rev 29026)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java 2009-08-23 15:39:11 UTC (rev 29027)
@@ -27,8 +27,7 @@
import org.drools.solver.config.localsearch.LocalSearchSolverConfig;
import org.drools.solver.core.Solver;
import org.drools.solver.core.solution.Solution;
-import org.drools.solver.benchmark.statistic.BestSolutionStatisticListener;
-import org.drools.solver.benchmark.statistic.BestSolutionStatistic;
+import org.drools.solver.benchmark.statistic.BestScoreStatistic;
import org.drools.solver.benchmark.statistic.SolverStatistic;
/**
@@ -196,6 +195,10 @@
result.setTimeMillesSpend(solver.getTimeMillisSpend());
Solution solvedSolution = solver.getBestSolution();
result.setScore(solvedSolution.getScore());
+ if (solverStatisticType != SolverStatisticType.NONE) {
+ SolverStatistic statistic = unsolvedSolutionFileToStatisticMap.get(unsolvedSolutionFile);
+ statistic.removeListener(solver, solverBenchmark.getName());
+ }
writeSolvedSolution(xStream, solverBenchmark, result, solvedSolution);
}
if (solverStatisticType != SolverStatisticType.NONE) {
@@ -269,7 +272,7 @@
case NONE:
return null;
case BEST_SOLUTION_CHANGED:
- return new BestSolutionStatistic();
+ return new BestScoreStatistic();
default:
throw new IllegalStateException("The solverStatisticType (" + this + ") is not implemented");
}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatistic.java (from rev 29026, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatistic.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatistic.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatistic.java 2009-08-23 15:39:11 UTC (rev 29027)
@@ -0,0 +1,147 @@
+package org.drools.solver.benchmark.statistic;
+
+import java.util.List;
+import java.util.Map;
+import java.util.LinkedHashMap;
+import java.util.Set;
+import java.util.HashMap;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.io.File;
+import java.io.Writer;
+import java.io.OutputStreamWriter;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.drools.solver.core.Solver;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.SimpleScore;
+import org.drools.solver.core.score.HardAndSoftScore;
+import org.apache.commons.io.IOUtils;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class BestScoreStatistic implements SolverStatistic {
+
+ // A LinkedHashMap because the order is important
+ private Map<String, BestScoreStatisticListener> bestScoreStatisticListenerMap
+ = new LinkedHashMap<String, BestScoreStatisticListener>();
+
+ public void addListener(Solver solver) {
+ addListener(solver, "solver");
+ }
+
+ public void addListener(Solver solver, String configName) {
+ if (bestScoreStatisticListenerMap.containsKey(configName)) {
+ throw new IllegalArgumentException("Cannot add a listener with the same configName (" + configName
+ + ") twice.");
+ }
+ BestScoreStatisticListener bestScoreStatisticListener = new BestScoreStatisticListener();
+ solver.addEventListener(bestScoreStatisticListener);
+ bestScoreStatisticListenerMap.put(configName, bestScoreStatisticListener);
+ }
+
+ public void removeListener(Solver solver) {
+ removeListener(solver, "solver");
+ }
+
+ public void removeListener(Solver solver, String configName) {
+ BestScoreStatisticListener bestScoreStatisticListener = bestScoreStatisticListenerMap.get(configName);
+ solver.removeEventListener(bestScoreStatisticListener);
+ }
+
+ public void writeStatistic(File solverStatisticFilesDirectory, String baseName) {
+ // The configNameSet is ordered because it comes from a LinkedHashMap
+ Set<String> configNameSet = bestScoreStatisticListenerMap.keySet();
+ List<TimeToBestScoresLine> timeToBestScoresLineList = extractTimeToBestScoresLineList();
+ File statisticFile = new File(solverStatisticFilesDirectory, baseName + "Statistic.csv");
+ Writer writer = null;
+ try {
+ writer = new OutputStreamWriter(new FileOutputStream(statisticFile), "utf-8");
+ writer.append("\"TimeMillisSpend\"");
+ for (String configName : configNameSet) {
+ writer.append(",\"").append(configName.replaceAll("\\\"","\\\"")).append("\"");
+ }
+ writer.append("\n");
+ for (TimeToBestScoresLine timeToBestScoresLine : timeToBestScoresLineList) {
+ writer.write(Long.toString(timeToBestScoresLine.getTimeMillisSpend()));
+ for (String configName : configNameSet) {
+ writer.append(",");
+ Score score = timeToBestScoresLine.getConfigNameToScoreMap().get(configName);
+ if (score != null) {
+ Integer scoreAlias;
+ if (score instanceof SimpleScore) {
+ SimpleScore simpleScore = (SimpleScore) score;
+ scoreAlias = simpleScore.getScore();
+ } else if (score instanceof HardAndSoftScore) {
+ HardAndSoftScore hardAndSoftScore = (HardAndSoftScore) score;
+ if (hardAndSoftScore.getHardScore() == 0) {
+ scoreAlias = hardAndSoftScore.getSoftScore();
+ } else {
+ scoreAlias = null;
+ }
+ } else {
+ throw new IllegalStateException("Score class (" + score.getClass() + ") not supported.");
+ }
+ if (scoreAlias != null) {
+ writer.append(scoreAlias.toString());
+ }
+ }
+ }
+ writer.append("\n");
+ }
+ } catch (IOException e) {
+ throw new IllegalArgumentException("Problem writing statisticFile: " + statisticFile, e);
+ } finally {
+ IOUtils.closeQuietly(writer);
+ }
+ }
+
+ private List<TimeToBestScoresLine> extractTimeToBestScoresLineList() {
+ Map<Long, TimeToBestScoresLine> timeToBestScoresLineMap = new HashMap<Long, TimeToBestScoresLine>();
+ for (Map.Entry<String, BestScoreStatisticListener> listenerEntry : bestScoreStatisticListenerMap.entrySet()) {
+ String configName = listenerEntry.getKey();
+ List<BestScoreStatisticPoint> statisticPointList = listenerEntry.getValue()
+ .getBestScoreStatisticPointList();
+ for (BestScoreStatisticPoint statisticPoint : statisticPointList) {
+ long timeMillisSpend = statisticPoint.getTimeMillisSpend();
+ TimeToBestScoresLine line = timeToBestScoresLineMap.get(timeMillisSpend);
+ if (line == null) {
+ line = new TimeToBestScoresLine(timeMillisSpend);
+ timeToBestScoresLineMap.put(timeMillisSpend, line);
+ }
+ line.getConfigNameToScoreMap().put(configName, statisticPoint.getScore());
+ }
+ }
+ List<TimeToBestScoresLine> timeToBestScoresLineList
+ = new ArrayList<TimeToBestScoresLine>(timeToBestScoresLineMap.values());
+ Collections.sort(timeToBestScoresLineList);
+ return timeToBestScoresLineList;
+ }
+
+ protected class TimeToBestScoresLine implements Comparable<TimeToBestScoresLine> {
+
+ private long timeMillisSpend;
+ private Map<String, Score> configNameToScoreMap;
+
+ public TimeToBestScoresLine(long timeMillisSpend) {
+ this.timeMillisSpend = timeMillisSpend;
+ configNameToScoreMap = new HashMap<String, Score>();
+ }
+
+ public long getTimeMillisSpend() {
+ return timeMillisSpend;
+ }
+
+ public Map<String, Score> getConfigNameToScoreMap() {
+ return configNameToScoreMap;
+ }
+
+ public int compareTo(TimeToBestScoresLine other) {
+ return timeMillisSpend < other.timeMillisSpend ? -1 : (timeMillisSpend > other.timeMillisSpend ? 1 : 0);
+ }
+
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatisticListener.java (from rev 29024, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticListener.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatisticListener.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatisticListener.java 2009-08-23 15:39:11 UTC (rev 29027)
@@ -0,0 +1,25 @@
+package org.drools.solver.benchmark.statistic;
+
+import java.util.List;
+import java.util.ArrayList;
+
+import org.drools.solver.core.event.BestSolutionChangedEvent;
+import org.drools.solver.core.event.SolverEventListener;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class BestScoreStatisticListener implements SolverEventListener {
+
+ private List<BestScoreStatisticPoint> bestScoreStatisticPointList
+ = new ArrayList<BestScoreStatisticPoint>();
+
+ public void bestSolutionChanged(BestSolutionChangedEvent event) {
+ bestScoreStatisticPointList.add(new BestScoreStatisticPoint(event));
+ }
+
+ public List<BestScoreStatisticPoint> getBestScoreStatisticPointList() {
+ return bestScoreStatisticPointList;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatisticPoint.java (from rev 29024, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticDetail.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatisticPoint.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestScoreStatisticPoint.java 2009-08-23 15:39:11 UTC (rev 29027)
@@ -0,0 +1,28 @@
+package org.drools.solver.benchmark.statistic;
+
+import org.drools.solver.core.event.BestSolutionChangedEvent;
+import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class BestScoreStatisticPoint {
+
+ private long timeMillisSpend;
+ private Score score;
+
+ public BestScoreStatisticPoint(BestSolutionChangedEvent event) {
+ timeMillisSpend = event.getTimeMillisSpend();
+ score = event.getNewBestSolution().getScore();
+ }
+
+ public long getTimeMillisSpend() {
+ return timeMillisSpend;
+ }
+
+ public Score getScore() {
+ return score;
+ }
+
+}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatistic.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatistic.java 2009-08-23 12:08:07 UTC (rev 29026)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatistic.java 2009-08-23 15:39:11 UTC (rev 29027)
@@ -1,137 +0,0 @@
-package org.drools.solver.benchmark.statistic;
-
-import java.util.List;
-import java.util.Map;
-import java.util.LinkedHashMap;
-import java.util.Set;
-import java.util.HashMap;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.io.File;
-import java.io.Writer;
-import java.io.OutputStreamWriter;
-import java.io.FileOutputStream;
-import java.io.IOException;
-
-import org.drools.solver.core.Solver;
-import org.drools.solver.core.score.Score;
-import org.drools.solver.core.score.SimpleScore;
-import org.drools.solver.core.score.HardAndSoftScore;
-import org.apache.commons.io.IOUtils;
-
-/**
- * @author Geoffrey De Smet
- */
-public class BestSolutionStatistic implements SolverStatistic {
-
- // A LinkedHashMap because the order is important
- private Map<String, BestSolutionStatisticListener> bestSolutionStatisticListenerMap
- = new LinkedHashMap<String, BestSolutionStatisticListener>();
-
- public void addListener(Solver solver) {
- addListener(solver, "solver");
- }
-
- public void addListener(Solver solver, String configName) {
- if (bestSolutionStatisticListenerMap.containsKey(configName)) {
- throw new IllegalArgumentException("Cannot add a listener with the same configName (" + configName
- + ") twice.");
- }
- BestSolutionStatisticListener bestSolutionStatisticListener = new BestSolutionStatisticListener();
- solver.addEventListener(bestSolutionStatisticListener);
- bestSolutionStatisticListenerMap.put(configName, bestSolutionStatisticListener);
- }
-
- public void writeStatistic(File solverStatisticFilesDirectory, String baseName) {
- Set<String> configNameSet = bestSolutionStatisticListenerMap.keySet();
- List<TimeMillisSpendDetail> timeMillisSpendDetailList = extractTimeMillisSpendDetailList();
- File statisticFile = new File(solverStatisticFilesDirectory, baseName + "Statistic.csv");
- Writer writer = null;
- try {
- writer = new OutputStreamWriter(new FileOutputStream(statisticFile), "utf-8");
- writer.append("\"TimeMillisSpend\"");
- for (String configName : configNameSet) {
- writer.append(",\"").append(configName.replaceAll("\\\"","\\\"")).append("\"");
- }
- writer.append("\n");
- for (TimeMillisSpendDetail timeMillisSpendDetail : timeMillisSpendDetailList) {
- writer.write(Long.toString(timeMillisSpendDetail.getTimeMillisSpend()));
- for (String configName : configNameSet) {
- writer.append(",");
- Score score = timeMillisSpendDetail.getConfigNameToScoreMap().get(configName);
- if (score != null) {
- Integer scoreAlias;
- if (score instanceof SimpleScore) {
- SimpleScore simpleScore = (SimpleScore) score;
- scoreAlias = simpleScore.getScore();
- } else if (score instanceof HardAndSoftScore) {
- HardAndSoftScore hardAndSoftScore = (HardAndSoftScore) score;
- if (hardAndSoftScore.getHardScore() == 0) {
- scoreAlias = hardAndSoftScore.getSoftScore();
- } else {
- scoreAlias = null;
- }
- } else {
- throw new IllegalStateException("Score class (" + score.getClass() + ") not supported.");
- }
- if (scoreAlias != null) {
- writer.append(scoreAlias.toString());
- }
- }
- }
- writer.append("\n");
- }
- } catch (IOException e) {
- throw new IllegalArgumentException("Problem writing statisticFile: " + statisticFile, e);
- } finally {
- IOUtils.closeQuietly(writer);
- }
- }
-
- private List<TimeMillisSpendDetail> extractTimeMillisSpendDetailList() {
- Map<Long, TimeMillisSpendDetail> timeMillisSpendToDetailMap = new HashMap<Long, TimeMillisSpendDetail>();
- for (Map.Entry<String, BestSolutionStatisticListener> listenerEntry : bestSolutionStatisticListenerMap.entrySet()) {
- String configName = listenerEntry.getKey();
- List<BestSolutionStatisticDetail> statisticDetailList = listenerEntry.getValue()
- .getBestSolutionStatisticDetailList();
- for (BestSolutionStatisticDetail statisticDetail : statisticDetailList) {
- long timeMillisSpend = statisticDetail.getTimeMillisSpend();
- TimeMillisSpendDetail detail = timeMillisSpendToDetailMap.get(timeMillisSpend);
- if (detail == null) {
- detail = new TimeMillisSpendDetail(timeMillisSpend);
- timeMillisSpendToDetailMap.put(timeMillisSpend, detail);
- }
- detail.getConfigNameToScoreMap().put(configName, statisticDetail.getScore());
- }
- }
- List<TimeMillisSpendDetail> timeMillisSpendDetailList
- = new ArrayList<TimeMillisSpendDetail>(timeMillisSpendToDetailMap.values());
- Collections.sort(timeMillisSpendDetailList);
- return timeMillisSpendDetailList;
- }
-
- protected class TimeMillisSpendDetail implements Comparable<TimeMillisSpendDetail> {
-
- private long timeMillisSpend;
- private Map<String, Score> configNameToScoreMap;
-
- public TimeMillisSpendDetail(long timeMillisSpend) {
- this.timeMillisSpend = timeMillisSpend;
- configNameToScoreMap = new HashMap<String, Score>();
- }
-
- public long getTimeMillisSpend() {
- return timeMillisSpend;
- }
-
- public Map<String, Score> getConfigNameToScoreMap() {
- return configNameToScoreMap;
- }
-
- public int compareTo(TimeMillisSpendDetail other) {
- return timeMillisSpend < other.timeMillisSpend ? -1 : (timeMillisSpend > other.timeMillisSpend ? 1 : 0);
- }
-
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticDetail.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticDetail.java 2009-08-23 12:08:07 UTC (rev 29026)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticDetail.java 2009-08-23 15:39:11 UTC (rev 29027)
@@ -1,28 +0,0 @@
-package org.drools.solver.benchmark.statistic;
-
-import org.drools.solver.core.event.BestSolutionChangedEvent;
-import org.drools.solver.core.solution.Solution;
-import org.drools.solver.core.score.Score;
-
-/**
- * @author Geoffrey De Smet
- */
-public class BestSolutionStatisticDetail {
-
- private long timeMillisSpend;
- private Score score;
-
- public BestSolutionStatisticDetail(BestSolutionChangedEvent event) {
- timeMillisSpend = event.getTimeMillisSpend();
- score = event.getNewBestSolution().getScore();
- }
-
- public long getTimeMillisSpend() {
- return timeMillisSpend;
- }
-
- public Score getScore() {
- return score;
- }
-
-}
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticListener.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticListener.java 2009-08-23 12:08:07 UTC (rev 29026)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticListener.java 2009-08-23 15:39:11 UTC (rev 29027)
@@ -1,25 +0,0 @@
-package org.drools.solver.benchmark.statistic;
-
-import java.util.List;
-import java.util.ArrayList;
-
-import org.drools.solver.core.event.BestSolutionChangedEvent;
-import org.drools.solver.core.event.SolverEventListener;
-
-/**
- * @author Geoffrey De Smet
- */
-public class BestSolutionStatisticListener implements SolverEventListener {
-
- private List<BestSolutionStatisticDetail> bestSolutionStatisticDetailList
- = new ArrayList<BestSolutionStatisticDetail>();
-
- public void bestSolutionChanged(BestSolutionChangedEvent event) {
- bestSolutionStatisticDetailList.add(new BestSolutionStatisticDetail(event));
- }
-
- public List<BestSolutionStatisticDetail> getBestSolutionStatisticDetailList() {
- return bestSolutionStatisticDetailList;
- }
-
-}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/SolverStatistic.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/SolverStatistic.java 2009-08-23 12:08:07 UTC (rev 29026)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/SolverStatistic.java 2009-08-23 15:39:11 UTC (rev 29027)
@@ -14,6 +14,10 @@
void addListener(Solver solver, String configName);
+ void removeListener(Solver solver);
+
+ void removeListener(Solver solver, String configName);
+
void writeStatistic(File solverStatisticFilesDirectory, String baseName);
}
More information about the jboss-svn-commits
mailing list