[jboss-svn-commits] JBL Code SVN: r29024 - in labs/jbossrules/trunk/drools-solver: drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic and 11 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Aug 22 11:21:34 EDT 2009


Author: ge0ffrey
Date: 2009-08-22 11:21:33 -0400 (Sat, 22 Aug 2009)
New Revision: 29024

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/
   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
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/SolverStatistic.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/XmlSolverBenchmarker.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/forager/ForagerConfig.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/TerminationConfig.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/ScoreDefinitionConfig.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/AbstractSolver.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/event/SolverEventSupport.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/bestsolution/BestSolutionRecaller.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Room.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml
Log:
BestSolutionStatistic

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-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -16,6 +16,8 @@
 import java.util.Set;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.HashMap;
 
 import com.thoughtworks.xstream.XStream;
 import com.thoughtworks.xstream.annotations.XStreamAlias;
@@ -25,6 +27,9 @@
 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.SolverStatistic;
 
 /**
  * @author Geoffrey De Smet
@@ -38,6 +43,8 @@
     private File solvedSolutionFilesDirectory = null;
     private boolean sortSolverBenchmarks = true;
     private Comparator<SolverBenchmark> solverBenchmarkComparator = null;
+    private SolverStatisticType solverStatisticType = SolverStatisticType.NONE;
+    private File solverStatisticFilesDirectory = null;
 
     @XStreamAlias("inheritedLocalSearchSolver")
     private LocalSearchSolverConfig inheritedLocalSearchSolverConfig = null;
@@ -79,6 +86,22 @@
         this.solverBenchmarkComparator = solverBenchmarkComparator;
     }
 
+    public SolverStatisticType getSolverStatisticType() {
+        return solverStatisticType;
+    }
+
+    public void setSolverStatisticType(SolverStatisticType solverStatisticType) {
+        this.solverStatisticType = solverStatisticType;
+    }
+
+    public File getSolverStatisticFilesDirectory() {
+        return solverStatisticFilesDirectory;
+    }
+
+    public void setSolverStatisticFilesDirectory(File solverStatisticFilesDirectory) {
+        this.solverStatisticFilesDirectory = solverStatisticFilesDirectory;
+    }
+
     public LocalSearchSolverConfig getInheritedLocalSearchSolverConfig() {
         return inheritedLocalSearchSolverConfig;
     }
@@ -144,18 +167,45 @@
         if (solvedSolutionFilesDirectory != null) {
             solvedSolutionFilesDirectory.mkdirs();
         }
+        Map<File, SolverStatistic> unsolvedSolutionFileToStatisticMap;
+        if (solverStatisticType != SolverStatisticType.NONE) {
+            unsolvedSolutionFileToStatisticMap = new HashMap<File, SolverStatistic>();
+            if (solverStatisticFilesDirectory == null) {
+                throw new IllegalArgumentException("With solverStatisticType (" + solverStatisticType
+                        + ") the solverStatisticFilesDirectory must not be null.");
+            }
+            solverStatisticFilesDirectory.mkdirs();
+        } else {
+            unsolvedSolutionFileToStatisticMap = null;
+        }
         for (SolverBenchmark solverBenchmark : solverBenchmarkList) {
             Solver solver = solverBenchmark.getLocalSearchSolverConfig().buildSolver();
             for (SolverBenchmarkResult result : solverBenchmark.getSolverBenchmarkResultList()) {
                 File unsolvedSolutionFile = result.getUnsolvedSolutionFile();
                 Solution unsolvedSolution = readUnsolvedSolution(xStream, unsolvedSolutionFile);
                 solver.setStartingSolution(unsolvedSolution);
+                if (solverStatisticType != SolverStatisticType.NONE) {
+                    SolverStatistic statistic = unsolvedSolutionFileToStatisticMap.get(unsolvedSolutionFile);
+                    if (statistic == null) {
+                        statistic = solverStatisticType.create();
+                        unsolvedSolutionFileToStatisticMap.put(unsolvedSolutionFile, statistic);
+                    }
+                    statistic.addListener(solver, solverBenchmark.getName());
+                }
                 solver.solve();
                 result.setTimeMillesSpend(solver.getTimeMillisSpend());
                 Solution solvedSolution = solver.getBestSolution();
                 result.setScore(solvedSolution.getScore());
                 writeSolvedSolution(xStream, solverBenchmark, result, solvedSolution);
             }
+            if (solverStatisticType != SolverStatisticType.NONE) {
+                for (Map.Entry<File, SolverStatistic> entry : unsolvedSolutionFileToStatisticMap.entrySet()) {
+                    File unsolvedSolutionFile = entry.getKey();
+                    SolverStatistic statistic = entry.getValue();
+                    String baseName = FilenameUtils.getBaseName(unsolvedSolutionFile.getName());
+                    statistic.writeStatistic(solverStatisticFilesDirectory, baseName);
+                }
+            }
         }
         benchmarkingEnded();
     }
@@ -180,14 +230,14 @@
             return;
         }
         File solvedSolutionFile = null;
+        String baseName = FilenameUtils.getBaseName(result.getUnsolvedSolutionFile().getName());
+        String solverBenchmarkName = solverBenchmark.getName().replaceAll(" ", "_").replaceAll("[^\\w\\d_\\-]", "");
+        String scoreString = result.getScore().toString().replaceAll("[\\/ ]", "_");
+        String timeString = TIME_FORMAT.format(result.getTimeMillesSpend()) + "ms";
+        solvedSolutionFile = new File(solvedSolutionFilesDirectory, baseName + "_" + solverBenchmarkName
+                + "_score" + scoreString + "_time" + timeString + ".xml");
         Writer writer = null;
         try {
-            String baseName = FilenameUtils.getBaseName(result.getUnsolvedSolutionFile().getName());
-            String solverBenchmarkName = solverBenchmark.getName().replaceAll(" ", "_").replaceAll("[^\\w\\d_\\-]", "");
-            String scoreString = result.getScore().toString().replaceAll("[\\/ ]", "_");
-            String timeString = TIME_FORMAT.format(result.getTimeMillesSpend()) + "ms";
-            solvedSolutionFile = new File(solvedSolutionFilesDirectory, baseName + "_" + solverBenchmarkName
-                    + "_score" + scoreString + "_time" + timeString + ".xml");
             writer = new OutputStreamWriter(new FileOutputStream(solvedSolutionFile), "utf-8");
             xStream.toXML(solvedSolution, writer);
         } catch (IOException e) {
@@ -210,4 +260,20 @@
         ALL
     }
 
+    public static enum SolverStatisticType {
+        NONE,
+        BEST_SOLUTION_CHANGED;
+
+        public SolverStatistic create() {
+            switch (this) {
+                case NONE:
+                    return null;
+                case BEST_SOLUTION_CHANGED:
+                    return new BestSolutionStatistic();
+                default:
+                    throw new IllegalStateException("The solverStatisticType (" + this + ") is not implemented");
+            }
+        }
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/XmlSolverBenchmarker.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/XmlSolverBenchmarker.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/XmlSolverBenchmarker.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -28,13 +28,13 @@
         // TODO From Xstream 1.3.3 that KeySorter will be the default. See http://jira.codehaus.org/browse/XSTR-363
         xStream = new XStream(new PureJavaReflectionProvider(new FieldDictionary(new NativeFieldKeySorter())));
         xStream.setMode(XStream.ID_REFERENCES);
-        Annotations.configureAliases(xStream, SolverBenchmarkSuite.class);
+        xStream.processAnnotations(SolverBenchmarkSuite.class);
         // It doesn't pick up the annotations of the @XStreamImplicit in xstream 1.2.2
-        Annotations.configureAliases(xStream, SolverBenchmark.class);
+        xStream.processAnnotations(SolverBenchmark.class);
     }
 
-    public void addXstreamAlias(Class aliasClass) {
-		Annotations.configureAliases(xStream, aliasClass);
+    public void addXstreamAnnotations(Class annotationsClass) {
+        xStream.processAnnotations(annotationsClass);
     }
 
     // ************************************************************************

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatistic.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -0,0 +1,124 @@
+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.txt");
+        Writer writer = null;
+        try {
+            writer = new OutputStreamWriter(new FileOutputStream(statisticFile), "utf-8");
+            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) {
+                        int scoreAlias;
+                        if (score instanceof SimpleScore) {
+                            scoreAlias = ((SimpleScore) score).getScore();
+                        } else if (score instanceof HardAndSoftScore) {
+                            scoreAlias = ((HardAndSoftScore) score).getSoftScore();
+                        } else {
+                            throw new IllegalStateException("Score class (" + score.getClass() + ") not supported.");
+                        }
+                        writer.append(Integer.toString(scoreAlias));
+                    }
+                }
+                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);
+        }
+
+    }
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticDetail.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -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 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;
+    }
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/BestSolutionStatisticListener.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -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 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;
+    }
+
+}

Added: 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	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/statistic/SolverStatistic.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -0,0 +1,19 @@
+package org.drools.solver.benchmark.statistic;
+
+import java.io.File;
+
+import org.drools.solver.core.Solver;
+
+/**
+ * TODO is this the correct package? Statistics can maybe be used outside the benchmarker
+ * @author Geoffrey De Smet
+ */
+public interface SolverStatistic {
+
+    void addListener(Solver solver);
+
+    void addListener(Solver solver, String configName);
+
+    void writeStatistic(File solverStatisticFilesDirectory, String baseName);
+
+}

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/deciderscorecomparator/DeciderScoreComparatorFactoryConfig.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -136,8 +136,8 @@
                     }
                     return deciderScoreComparator;
                 default:
-                    throw new IllegalStateException("deciderScoreComparatorFactoryType ("
-                            + deciderScoreComparatorFactoryType + ") not implemented");
+                    throw new IllegalStateException("The deciderScoreComparatorFactoryType ("
+                            + deciderScoreComparatorFactoryType + ") is not implemented");
             }
         } else {
             return new NaturalDeciderScoreComparatorFactory();

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/forager/ForagerConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/forager/ForagerConfig.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/decider/forager/ForagerConfig.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -67,7 +67,7 @@
                 case FIRST_RANDOMLY_ACCEPTED:
                     return new AcceptedForager(PickEarlyByScore.NONE, true);
                 default:
-                    throw new IllegalStateException("foragerType (" + foragerType + ") not implemented");
+                    throw new IllegalStateException("The foragerType (" + foragerType + ") is not implemented");
             }
         } else {
             return new AcceptedForager(PickEarlyByScore.NONE, false);

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/TerminationConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/TerminationConfig.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/TerminationConfig.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -177,8 +177,8 @@
             } else if (terminationCompositionStyle == TerminationCompositionStyle.AND) {
                 compositeTermination = new AndCompositeTermination();
             } else {
-                throw new IllegalStateException("terminationCompositionStyle (" + terminationCompositionStyle
-                        + ") not implemented");
+                throw new IllegalStateException("The terminationCompositionStyle (" + terminationCompositionStyle
+                        + ") is not implemented");
             }
             compositeTermination.setTerminationList(terminationList);
             return compositeTermination;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/ScoreConfig.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -52,7 +52,7 @@
                 case HARD_AND_SOFT:
                     return DefaultHardAndSoftScore.parseScore(scoreString);
                 default:
-                    throw new IllegalStateException("scoreType (" + scoreType + ") not implemented");
+                    throw new IllegalStateException("The scoreType (" + scoreType + ") is not implemented");
             }
         } else {
             return null;

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/ScoreDefinitionConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/ScoreDefinitionConfig.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/score/definition/ScoreDefinitionConfig.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -66,7 +66,8 @@
                 case HARD_AND_SOFT:
                     return new HardAndSoftScoreDefinition();
                 default:
-                    throw new IllegalStateException("scoreDefinitionType (" + scoreDefinitionType + ") not implemented");
+                    throw new IllegalStateException("The scoreDefinitionType (" + scoreDefinitionType
+                            + ") is not implemented");
             }
         } else {
             return new SimpleScoreDefinition();
@@ -84,7 +85,8 @@
                 case HARD_AND_SOFT:
                     return new DefaultHardAndSoftConstraintScoreCalculator();
                 default:
-                    throw new IllegalStateException("scoreDefinitionType (" + scoreDefinitionType + ") not implemented");
+                    throw new IllegalStateException("The scoreDefinitionType (" + scoreDefinitionType
+                            + ") is not implemented");
             }
         } else {
             return new SimpleScoreCalculator();

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/AbstractSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/AbstractSolver.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/AbstractSolver.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -18,7 +18,7 @@
 
     protected final transient Logger logger = LoggerFactory.getLogger(getClass());
 
-    protected SolverEventSupport solverEventSupport = new SolverEventSupport();
+    protected SolverEventSupport solverEventSupport = new SolverEventSupport(this);
 
     // TODO atomic enum with values NOT_STARTED, RUNNING, DONE, CANCELLED
     // TODO introduce a solver factory and make a solver one time use

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/event/SolverEventSupport.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/event/SolverEventSupport.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/event/SolverEventSupport.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -14,11 +14,17 @@
  */
 public class SolverEventSupport extends AbstractEventSupport<SolverEventListener> {
 
-    public void fireBestSolutionChanged(Solver source, long timeMillisSpend, Solution newBestSolution) {
+    private Solver solver;
+
+    public SolverEventSupport(Solver solver) {
+        this.solver = solver;
+    }
+
+    public void fireBestSolutionChanged(Solution newBestSolution) {
         final Iterator<SolverEventListener> iter = getEventListenersIterator();
         if (iter.hasNext()) {
-            final BestSolutionChangedEvent event = new BestSolutionChangedEvent(
-                    source, timeMillisSpend, newBestSolution);
+            final BestSolutionChangedEvent event = new BestSolutionChangedEvent(solver,
+                    solver.getTimeMillisSpend(), newBestSolution);
             do {
                 iter.next().bestSolutionChanged(event);
             } while (iter.hasNext());

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/bestsolution/BestSolutionRecaller.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/bestsolution/BestSolutionRecaller.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/bestsolution/BestSolutionRecaller.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -60,8 +60,7 @@
             Solution newBestSolution = stepScope.createOrGetClonedSolution();
             localSearchSolverScope.setBestSolution(newBestSolution);
             localSearchSolverScope.setBestScore(newBestSolution.getScore());
-            solverEventSupport.fireBestSolutionChanged(localSearchSolver,
-                    localSearchSolverScope.calculateTimeMillisSpend(), newBestSolution);
+            solverEventSupport.fireBestSolutionChanged(newBestSolution);
         } else {
             logger.info("New score ({}) is not better then last best score ({}).", newScore, bestScore);
         }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptedForager.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -84,7 +84,7 @@
                 }
                 break;
             default:
-                throw new IllegalStateException("pickEarlyByScore (" + pickEarlyByScore + ") not implemented");
+                throw new IllegalStateException("The pickEarlyByScore (" + pickEarlyByScore + ") is not implemented");
         }
         if (pickEarlyRandomly) {
             if (moveScope.getAcceptChance() >= 1.0) {

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Room.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Room.java	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/Room.java	2009-08-22 15:21:33 UTC (rev 29024)
@@ -97,7 +97,7 @@
                 // scoreRules check this
                 return true;
             default:
-                throw new IllegalStateException("genderLimitation (" + genderLimitation + ") not implemented");
+                throw new IllegalStateException("The genderLimitation (" + genderLimitation + ") is not implemented");
         }
     }
 
@@ -135,7 +135,7 @@
                 // scoreRules check this
                 return 0;
             default:
-                throw new IllegalStateException("genderLimitation (" + genderLimitation + ") not implemented");
+                throw new IllegalStateException("The genderLimitation (" + genderLimitation + ") is not implemented");
         }
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml	2009-08-21 23:48:30 UTC (rev 29023)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml	2009-08-22 15:21:33 UTC (rev 29024)
@@ -3,14 +3,16 @@
     <solvedSolutionVerbosity>ALL</solvedSolutionVerbosity>
     <solvedSolutionFilesDirectory>local/data/pas/solved</solvedSolutionFilesDirectory>
     <sortSolverBenchmarks>true</sortSolverBenchmarks>
+    <solverStatisticType>BEST_SOLUTION_CHANGED</solverStatisticType>
+    <solverStatisticFilesDirectory>local/data/pas/statistic</solverStatisticFilesDirectory>
     <!-- solverBenchmarkResultComparator -->
 
     <inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata01.xml</inheritedUnsolvedSolutionFile>
     <inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata02.xml</inheritedUnsolvedSolutionFile>
-    <inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata03.xml</inheritedUnsolvedSolutionFile>
-    <inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata04.xml</inheritedUnsolvedSolutionFile>
-    <inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata05.xml</inheritedUnsolvedSolutionFile>
-    <inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata06.xml</inheritedUnsolvedSolutionFile>
+    <!--<inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata03.xml</inheritedUnsolvedSolutionFile>-->
+    <!--<inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata04.xml</inheritedUnsolvedSolutionFile>-->
+    <!--<inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata05.xml</inheritedUnsolvedSolutionFile>-->
+    <!--<inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata06.xml</inheritedUnsolvedSolutionFile>-->
     <!--<inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata07.xml</inheritedUnsolvedSolutionFile>-->
     <!--<inheritedUnsolvedSolutionFile>data/pas/unsolved/testdata08.xml</inheritedUnsolvedSolutionFile>-->
     <!--



More information about the jboss-svn-commits mailing list