[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