[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