[jboss-svn-commits] JBL Code SVN: r28180 - in labs/jbossrules/trunk/drools-solver: drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination and 19 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Jul 18 08:53:23 EDT 2009


Author: ge0ffrey
Date: 2009-07-18 08:53:22 -0400 (Sat, 18 Jul 2009)
New Revision: 28180

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/
   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/core/localsearch/termination/
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractCompositeTermination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractTermination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AndCompositeTermination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/FeasableScoreTermination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/OrCompositeTermination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/StepCountTermination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/Termination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/TimeMillisSpendTermination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/UnimprovedStepCountTermination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/termination/
Removed:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/finish/
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/FinishConfig.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractCompositeFinish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractFinish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AndCompositeFinish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/FeasableScoreFinish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/Finish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/OrCompositeFinish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/StepCountFinish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/TimeMillisSpendFinish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/UnimprovedStepCountFinish.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/finish/
Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/app/ExaminationShellApp.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseShortSolverBenchmarkConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseScoreRules.drl
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/lessonschedule/solver/lessonScheduleSolverConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009SolverConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/benchmark/nqueensSolverBenchmarkConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/solver/nqueensSolverConfig.xml
   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/solver/patientAdmissionScheduleBaseScoreRules.drl
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/breakNl14SolverBenchmarkConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/smartTravelingTournamentSolverBenchmarkConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentScoreRules.drl
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentSolverConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentScoreRules.drl
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentSolverConfig.xml
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/resources/org/drools/solver/examples/nqueens/solver/nqueensSmokeSolverConfig.xml
   labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
Log:
JBRULES-2212 Rename Finish interface to Termination.

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/LocalSearchSolverConfig.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -17,7 +17,7 @@
 import org.drools.solver.config.localsearch.decider.forager.ForagerConfig;
 import org.drools.solver.config.localsearch.decider.selector.SelectorConfig;
 import org.drools.solver.config.localsearch.decider.deciderscorecomparator.DeciderScoreComparatorFactoryConfig;
-import org.drools.solver.config.localsearch.finish.FinishConfig;
+import org.drools.solver.config.localsearch.termination.TerminationConfig;
 import org.drools.solver.config.score.definition.ScoreDefinitionConfig;
 import org.drools.solver.core.localsearch.DefaultLocalSearchSolver;
 import org.drools.solver.core.localsearch.LocalSearchSolver;
@@ -43,8 +43,8 @@
     private StartingSolutionInitializer startingSolutionInitializer = null;
     private Class<StartingSolutionInitializer> startingSolutionInitializerClass = null;
 
-    @XStreamAlias("finish")
-    private FinishConfig finishConfig = new FinishConfig(); // TODO this new is pointless due to xstream
+    @XStreamAlias("termination")
+    private TerminationConfig terminationConfig = new TerminationConfig(); // TODO this new is pointless due to xstream
 
     @XStreamAlias("deciderScoreComparatorFactory")
     private DeciderScoreComparatorFactoryConfig deciderScoreComparatorFactoryConfig
@@ -96,12 +96,12 @@
         this.startingSolutionInitializerClass = startingSolutionInitializerClass;
     }
 
-    public FinishConfig getFinishConfig() {
-        return finishConfig;
+    public TerminationConfig getTerminationConfig() {
+        return terminationConfig;
     }
 
-    public void setFinishConfig(FinishConfig finishConfig) {
-        this.finishConfig = finishConfig;
+    public void setTerminationConfig(TerminationConfig terminationConfig) {
+        this.terminationConfig = terminationConfig;
     }
 
     public DeciderScoreComparatorFactoryConfig getDeciderScoreComparatorFactoryConfig() {
@@ -155,7 +155,7 @@
         localSearchSolver.setScoreCalculator(scoreDefinitionConfig.buildScoreCalculator());
         localSearchSolver.setStartingSolutionInitializer(buildStartingSolutionInitializer());
         localSearchSolver.setBestSolutionRecaller(new BestSolutionRecaller());
-        localSearchSolver.setFinish(finishConfig.buildFinish(scoreDefinition));
+        localSearchSolver.setTermination(terminationConfig.buildTermination(scoreDefinition));
         localSearchSolver.setDecider(buildDecider());
         return localSearchSolver;
     }
@@ -241,10 +241,10 @@
             startingSolutionInitializer = inheritedConfig.getStartingSolutionInitializer();
             startingSolutionInitializerClass = inheritedConfig.getStartingSolutionInitializerClass();
         }
-        if (finishConfig == null) {
-            finishConfig = inheritedConfig.getFinishConfig();
-        } else if (inheritedConfig.getFinishConfig() != null) {
-            finishConfig.inherit(inheritedConfig.getFinishConfig());
+        if (terminationConfig == null) {
+            terminationConfig = inheritedConfig.getTerminationConfig();
+        } else if (inheritedConfig.getTerminationConfig() != null) {
+            terminationConfig.inherit(inheritedConfig.getTerminationConfig());
         }
         if (deciderScoreComparatorFactoryConfig == null) {
             deciderScoreComparatorFactoryConfig = inheritedConfig.getDeciderScoreComparatorFactoryConfig();

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/finish)

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/FinishConfig.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/finish/FinishConfig.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/FinishConfig.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,231 +0,0 @@
-package org.drools.solver.config.localsearch.finish;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import com.thoughtworks.xstream.annotations.XStreamAlias;
-import org.drools.solver.core.localsearch.finish.AbstractCompositeFinish;
-import org.drools.solver.core.localsearch.finish.AndCompositeFinish;
-import org.drools.solver.core.localsearch.finish.FeasableScoreFinish;
-import org.drools.solver.core.localsearch.finish.Finish;
-import org.drools.solver.core.localsearch.finish.OrCompositeFinish;
-import org.drools.solver.core.localsearch.finish.StepCountFinish;
-import org.drools.solver.core.localsearch.finish.TimeMillisSpendFinish;
-import org.drools.solver.core.localsearch.finish.UnimprovedStepCountFinish;
-import org.drools.solver.core.score.definition.ScoreDefinition;
-
-/**
- * @author Geoffrey De Smet
- */
- at XStreamAlias("finish")
-public class FinishConfig {
-
-    private Finish finish = null; // TODO make into a list
-    private Class<Finish> finishClass = null;
-
-    private FinishCompositionStyle finishCompositionStyle = null;
-
-    private Integer maximumStepCount = null;
-    private Long maximumTimeMillisSpend = null;
-    private Long maximumSecondsSpend = null;
-    private Long maximumMinutesSpend = null;
-    private Long maximumHouresSpend = null;
-    private String feasableScore = null;
-    private Integer maximumUnimprovedStepCount = null;
-
-    public Finish getFinish() {
-        return finish;
-    }
-
-    public void setFinish(Finish finish) {
-        this.finish = finish;
-    }
-
-    public Class<Finish> getFinishClass() {
-        return finishClass;
-    }
-
-    public void setFinishClass(Class<Finish> finishClass) {
-        this.finishClass = finishClass;
-    }
-
-    public FinishCompositionStyle getFinishCompositionStyle() {
-        return finishCompositionStyle;
-    }
-
-    public void setFinishCompositionStyle(FinishCompositionStyle finishCompositionStyle) {
-        this.finishCompositionStyle = finishCompositionStyle;
-    }
-
-    public Integer getMaximumStepCount() {
-        return maximumStepCount;
-    }
-
-    public void setMaximumStepCount(Integer maximumStepCount) {
-        this.maximumStepCount = maximumStepCount;
-    }
-
-    public Long getMaximumTimeMillisSpend() {
-        return maximumTimeMillisSpend;
-    }
-
-    public void setMaximumTimeMillisSpend(Long maximumTimeMillisSpend) {
-        this.maximumTimeMillisSpend = maximumTimeMillisSpend;
-    }
-
-    public Long getMaximumSecondsSpend() {
-        return maximumSecondsSpend;
-    }
-
-    public void setMaximumSecondsSpend(Long maximumSecondsSpend) {
-        this.maximumSecondsSpend = maximumSecondsSpend;
-    }
-
-    public Long getMaximumMinutesSpend() {
-        return maximumMinutesSpend;
-    }
-
-    public void setMaximumMinutesSpend(Long maximumMinutesSpend) {
-        this.maximumMinutesSpend = maximumMinutesSpend;
-    }
-
-    public Long getMaximumHouresSpend() {
-        return maximumHouresSpend;
-    }
-
-    public void setMaximumHouresSpend(Long maximumHouresSpend) {
-        this.maximumHouresSpend = maximumHouresSpend;
-    }
-
-    public String getFeasableScore() {
-        return feasableScore;
-    }
-
-    public void setFeasableScore(String feasableScore) {
-        this.feasableScore = feasableScore;
-    }
-
-    public Integer getMaximumUnimprovedStepCount() {
-        return maximumUnimprovedStepCount;
-    }
-
-    public void setMaximumUnimprovedStepCount(Integer maximumUnimprovedStepCount) {
-        this.maximumUnimprovedStepCount = maximumUnimprovedStepCount;
-    }
-
-    // ************************************************************************
-    // Builder methods
-    // ************************************************************************
-
-    public Finish buildFinish(ScoreDefinition scoreDefinition) {
-        List<Finish> finishList = new ArrayList<Finish>();
-        if (finish != null) {
-            finishList.add(finish);
-        }
-        if (finishClass != null) {
-            try {
-                finishList.add(finishClass.newInstance());
-            } catch (InstantiationException e) {
-                throw new IllegalArgumentException("finishClass (" + finishClass.getName()
-                        + ") does not have a public no-arg constructor", e);
-            } catch (IllegalAccessException e) {
-                throw new IllegalArgumentException("finishClass (" + finishClass.getName()
-                        + ") does not have a public no-arg constructor", e);
-            }
-        }
-        if (maximumStepCount != null) {
-            StepCountFinish finish = new StepCountFinish();
-            finish.setMaximumStepCount(maximumStepCount);
-            finishList.add(finish);
-        }
-        if (maximumTimeMillisSpend != null) {
-            TimeMillisSpendFinish finish = new TimeMillisSpendFinish();
-            finish.setMaximumTimeMillisSpend(maximumTimeMillisSpend);
-            finishList.add(finish);
-        }
-        if (maximumSecondsSpend != null) {
-            TimeMillisSpendFinish finish = new TimeMillisSpendFinish();
-            finish.setMaximumTimeMillisSpend(maximumSecondsSpend * 1000L);
-            finishList.add(finish);
-        }
-        if (maximumMinutesSpend != null) {
-            TimeMillisSpendFinish finish = new TimeMillisSpendFinish();
-            finish.setMaximumTimeMillisSpend(maximumMinutesSpend * 60000L);
-            finishList.add(finish);
-        }
-        if (maximumHouresSpend != null) {
-            TimeMillisSpendFinish finish = new TimeMillisSpendFinish();
-            finish.setMaximumTimeMillisSpend(maximumHouresSpend * 3600000L);
-            finishList.add(finish);
-        }
-        if (feasableScore != null) {
-            FeasableScoreFinish finish = new FeasableScoreFinish();
-            finish.setFeasableScore(scoreDefinition.parseScore(feasableScore));
-            finishList.add(finish);
-        }
-        if (maximumUnimprovedStepCount != null) {
-            UnimprovedStepCountFinish finish = new UnimprovedStepCountFinish();
-            finish.setMaximumUnimprovedStepCount(maximumUnimprovedStepCount);
-            finishList.add(finish);
-        }
-        if (finishList.size() == 1) {
-            return finishList.get(0);
-        } else if (finishList.size() > 1) {
-            AbstractCompositeFinish compositeFinish;
-            if (finishCompositionStyle == null || finishCompositionStyle == FinishCompositionStyle.OR) {
-                compositeFinish = new OrCompositeFinish();
-            } else if (finishCompositionStyle == FinishCompositionStyle.AND) {
-                compositeFinish = new AndCompositeFinish();
-            } else {
-                throw new IllegalStateException("finishCompositionStyle (" + finishCompositionStyle
-                        + ") not implemented");
-            }
-            compositeFinish.setFinishList(finishList);
-            return compositeFinish;
-        } else {
-            TimeMillisSpendFinish finish = new TimeMillisSpendFinish();
-            finish.setMaximumTimeMillisSpend(60000);
-            return finish;
-        }
-    }
-
-    public void inherit(FinishConfig inheritedConfig) {
-        // inherited finishes get compositely added
-        if (finish == null) {
-            finish = inheritedConfig.getFinish();
-        }
-        if (finishClass == null) {
-            finishClass = inheritedConfig.getFinishClass();
-        }
-        if (finishCompositionStyle == null) {
-            finishCompositionStyle = inheritedConfig.getFinishCompositionStyle();
-        }
-        if (maximumStepCount == null) {
-            maximumStepCount = inheritedConfig.getMaximumStepCount();
-        }
-        if (maximumTimeMillisSpend == null) {
-            maximumTimeMillisSpend = inheritedConfig.getMaximumTimeMillisSpend();
-        }
-        if (maximumSecondsSpend == null) {
-            maximumSecondsSpend = inheritedConfig.getMaximumSecondsSpend();
-        }
-        if (maximumMinutesSpend == null) {
-            maximumMinutesSpend = inheritedConfig.getMaximumMinutesSpend();
-        }
-        if (maximumHouresSpend == null) {
-            maximumHouresSpend = inheritedConfig.getMaximumHouresSpend();
-        }
-        if (feasableScore == null) {
-            feasableScore = inheritedConfig.getFeasableScore();
-        }
-        if (maximumUnimprovedStepCount == null) {
-            maximumUnimprovedStepCount = inheritedConfig.getMaximumUnimprovedStepCount();
-        }
-    }
-
-    public enum FinishCompositionStyle {
-        AND,
-        OR,
-    }
-    
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/TerminationConfig.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/finish/FinishConfig.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/TerminationConfig.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/config/localsearch/termination/TerminationConfig.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,231 @@
+package org.drools.solver.config.localsearch.termination;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.drools.solver.core.localsearch.termination.AbstractCompositeTermination;
+import org.drools.solver.core.localsearch.termination.AndCompositeTermination;
+import org.drools.solver.core.localsearch.termination.FeasableScoreTermination;
+import org.drools.solver.core.localsearch.termination.Termination;
+import org.drools.solver.core.localsearch.termination.OrCompositeTermination;
+import org.drools.solver.core.localsearch.termination.StepCountTermination;
+import org.drools.solver.core.localsearch.termination.TimeMillisSpendTermination;
+import org.drools.solver.core.localsearch.termination.UnimprovedStepCountTermination;
+import org.drools.solver.core.score.definition.ScoreDefinition;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("termination")
+public class TerminationConfig {
+
+    private Termination termination = null; // TODO make into a list
+    private Class<Termination> terminationClass = null;
+
+    private TerminationCompositionStyle terminationCompositionStyle = null;
+
+    private Integer maximumStepCount = null;
+    private Long maximumTimeMillisSpend = null;
+    private Long maximumSecondsSpend = null;
+    private Long maximumMinutesSpend = null;
+    private Long maximumHouresSpend = null;
+    private String feasableScore = null;
+    private Integer maximumUnimprovedStepCount = null;
+
+    public Termination getTermination() {
+        return termination;
+    }
+
+    public void setTermination(Termination termination) {
+        this.termination = termination;
+    }
+
+    public Class<Termination> getTerminationClass() {
+        return terminationClass;
+    }
+
+    public void setTerminationClass(Class<Termination> terminationClass) {
+        this.terminationClass = terminationClass;
+    }
+
+    public TerminationCompositionStyle getTerminationCompositionStyle() {
+        return terminationCompositionStyle;
+    }
+
+    public void setTerminationCompositionStyle(TerminationCompositionStyle terminationCompositionStyle) {
+        this.terminationCompositionStyle = terminationCompositionStyle;
+    }
+
+    public Integer getMaximumStepCount() {
+        return maximumStepCount;
+    }
+
+    public void setMaximumStepCount(Integer maximumStepCount) {
+        this.maximumStepCount = maximumStepCount;
+    }
+
+    public Long getMaximumTimeMillisSpend() {
+        return maximumTimeMillisSpend;
+    }
+
+    public void setMaximumTimeMillisSpend(Long maximumTimeMillisSpend) {
+        this.maximumTimeMillisSpend = maximumTimeMillisSpend;
+    }
+
+    public Long getMaximumSecondsSpend() {
+        return maximumSecondsSpend;
+    }
+
+    public void setMaximumSecondsSpend(Long maximumSecondsSpend) {
+        this.maximumSecondsSpend = maximumSecondsSpend;
+    }
+
+    public Long getMaximumMinutesSpend() {
+        return maximumMinutesSpend;
+    }
+
+    public void setMaximumMinutesSpend(Long maximumMinutesSpend) {
+        this.maximumMinutesSpend = maximumMinutesSpend;
+    }
+
+    public Long getMaximumHouresSpend() {
+        return maximumHouresSpend;
+    }
+
+    public void setMaximumHouresSpend(Long maximumHouresSpend) {
+        this.maximumHouresSpend = maximumHouresSpend;
+    }
+
+    public String getFeasableScore() {
+        return feasableScore;
+    }
+
+    public void setFeasableScore(String feasableScore) {
+        this.feasableScore = feasableScore;
+    }
+
+    public Integer getMaximumUnimprovedStepCount() {
+        return maximumUnimprovedStepCount;
+    }
+
+    public void setMaximumUnimprovedStepCount(Integer maximumUnimprovedStepCount) {
+        this.maximumUnimprovedStepCount = maximumUnimprovedStepCount;
+    }
+
+    // ************************************************************************
+    // Builder methods
+    // ************************************************************************
+
+    public Termination buildTermination(ScoreDefinition scoreDefinition) {
+        List<Termination> terminationList = new ArrayList<Termination>();
+        if (termination != null) {
+            terminationList.add(termination);
+        }
+        if (terminationClass != null) {
+            try {
+                terminationList.add(terminationClass.newInstance());
+            } catch (InstantiationException e) {
+                throw new IllegalArgumentException("terminationClass (" + terminationClass.getName()
+                        + ") does not have a public no-arg constructor", e);
+            } catch (IllegalAccessException e) {
+                throw new IllegalArgumentException("terminationClass (" + terminationClass.getName()
+                        + ") does not have a public no-arg constructor", e);
+            }
+        }
+        if (maximumStepCount != null) {
+            StepCountTermination termination = new StepCountTermination();
+            termination.setMaximumStepCount(maximumStepCount);
+            terminationList.add(termination);
+        }
+        if (maximumTimeMillisSpend != null) {
+            TimeMillisSpendTermination termination = new TimeMillisSpendTermination();
+            termination.setMaximumTimeMillisSpend(maximumTimeMillisSpend);
+            terminationList.add(termination);
+        }
+        if (maximumSecondsSpend != null) {
+            TimeMillisSpendTermination termination = new TimeMillisSpendTermination();
+            termination.setMaximumTimeMillisSpend(maximumSecondsSpend * 1000L);
+            terminationList.add(termination);
+        }
+        if (maximumMinutesSpend != null) {
+            TimeMillisSpendTermination termination = new TimeMillisSpendTermination();
+            termination.setMaximumTimeMillisSpend(maximumMinutesSpend * 60000L);
+            terminationList.add(termination);
+        }
+        if (maximumHouresSpend != null) {
+            TimeMillisSpendTermination termination = new TimeMillisSpendTermination();
+            termination.setMaximumTimeMillisSpend(maximumHouresSpend * 3600000L);
+            terminationList.add(termination);
+        }
+        if (feasableScore != null) {
+            FeasableScoreTermination termination = new FeasableScoreTermination();
+            termination.setFeasableScore(scoreDefinition.parseScore(feasableScore));
+            terminationList.add(termination);
+        }
+        if (maximumUnimprovedStepCount != null) {
+            UnimprovedStepCountTermination termination = new UnimprovedStepCountTermination();
+            termination.setMaximumUnimprovedStepCount(maximumUnimprovedStepCount);
+            terminationList.add(termination);
+        }
+        if (terminationList.size() == 1) {
+            return terminationList.get(0);
+        } else if (terminationList.size() > 1) {
+            AbstractCompositeTermination compositeTermination;
+            if (terminationCompositionStyle == null || terminationCompositionStyle == TerminationCompositionStyle.OR) {
+                compositeTermination = new OrCompositeTermination();
+            } else if (terminationCompositionStyle == TerminationCompositionStyle.AND) {
+                compositeTermination = new AndCompositeTermination();
+            } else {
+                throw new IllegalStateException("terminationCompositionStyle (" + terminationCompositionStyle
+                        + ") not implemented");
+            }
+            compositeTermination.setTerminationList(terminationList);
+            return compositeTermination;
+        } else {
+            TimeMillisSpendTermination termination = new TimeMillisSpendTermination();
+            termination.setMaximumTimeMillisSpend(60000);
+            return termination;
+        }
+    }
+
+    public void inherit(TerminationConfig inheritedConfig) {
+        // inherited terminations get compositely added
+        if (termination == null) {
+            termination = inheritedConfig.getTermination();
+        }
+        if (terminationClass == null) {
+            terminationClass = inheritedConfig.getTerminationClass();
+        }
+        if (terminationCompositionStyle == null) {
+            terminationCompositionStyle = inheritedConfig.getTerminationCompositionStyle();
+        }
+        if (maximumStepCount == null) {
+            maximumStepCount = inheritedConfig.getMaximumStepCount();
+        }
+        if (maximumTimeMillisSpend == null) {
+            maximumTimeMillisSpend = inheritedConfig.getMaximumTimeMillisSpend();
+        }
+        if (maximumSecondsSpend == null) {
+            maximumSecondsSpend = inheritedConfig.getMaximumSecondsSpend();
+        }
+        if (maximumMinutesSpend == null) {
+            maximumMinutesSpend = inheritedConfig.getMaximumMinutesSpend();
+        }
+        if (maximumHouresSpend == null) {
+            maximumHouresSpend = inheritedConfig.getMaximumHouresSpend();
+        }
+        if (feasableScore == null) {
+            feasableScore = inheritedConfig.getFeasableScore();
+        }
+        if (maximumUnimprovedStepCount == null) {
+            maximumUnimprovedStepCount = inheritedConfig.getMaximumUnimprovedStepCount();
+        }
+    }
+
+    public enum TerminationCompositionStyle {
+        AND,
+        OR,
+    }
+    
+}

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -5,7 +5,7 @@
 import org.drools.RuleBase;
 import org.drools.solver.core.localsearch.bestsolution.BestSolutionRecaller;
 import org.drools.solver.core.localsearch.decider.Decider;
-import org.drools.solver.core.localsearch.finish.Finish;
+import org.drools.solver.core.localsearch.termination.Termination;
 import org.drools.solver.core.move.Move;
 import org.drools.solver.core.score.calculator.ScoreCalculator;
 import org.drools.solver.core.score.Score;
@@ -25,7 +25,7 @@
 
     protected StartingSolutionInitializer startingSolutionInitializer = null; // TODO refactor to AbstractSolver
     protected BestSolutionRecaller bestSolutionRecaller;
-    protected Finish finish;
+    protected Termination termination;
     protected Decider decider;
 
     protected LocalSearchSolverScope localSearchSolverScope = new LocalSearchSolverScope(); // TODO remove me
@@ -68,9 +68,9 @@
         this.decider.setLocalSearchSolver(this);
     }
 
-    public void setFinish(Finish finish) {
-        this.finish = finish;
-        this.finish.setLocalSearchSolver(this);
+    public void setTermination(Termination termination) {
+        this.termination = termination;
+        this.termination.setLocalSearchSolver(this);
     }
 
     public void setStartingSolution(Solution startingSolution) {
@@ -103,13 +103,14 @@
         solvingStarted(localSearchSolverScope);
 
         StepScope stepScope = createNextStepScope(localSearchSolverScope, null);
-        while (!terminatedEarly.get() && !finish.isFinished(stepScope)) {
-            stepScope.setTimeGradient(finish.calculateTimeGradient(stepScope));
+        while (!terminatedEarly.get() && !termination.isTerminated(stepScope)) {
+            stepScope.setTimeGradient(termination.calculateTimeGradient(stepScope));
             beforeDeciding(stepScope);
             decider.decideNextStep(stepScope);
             Move nextStep = stepScope.getStep();
             if (nextStep == null) {
-                logger.warn("No move accepted for step index ({}) out of {} accepted moves. Finishing early.",
+                // TODO JBRULES-2213 do not terminate, but warn and try again (especially with relativeSelection)
+                logger.warn("No move accepted for step index ({}) out of {} accepted moves. Terminating by exception.",
                         stepScope.getStepIndex(), decider.getForager().getAcceptedMovesSize());
                 break;
             }
@@ -151,31 +152,31 @@
         }
         localSearchSolverScope.setStartingScore(localSearchSolverScope.calculateScoreFromWorkingMemory());
         bestSolutionRecaller.solvingStarted(localSearchSolverScope);
-        finish.solvingStarted(localSearchSolverScope);
+        termination.solvingStarted(localSearchSolverScope);
         decider.solvingStarted(localSearchSolverScope);
     }
 
     public void beforeDeciding(StepScope stepScope) {
         bestSolutionRecaller.beforeDeciding(stepScope);
-        finish.beforeDeciding(stepScope);
+        termination.beforeDeciding(stepScope);
         decider.beforeDeciding(stepScope);
     }
 
     public void stepDecided(StepScope stepScope) {
         bestSolutionRecaller.stepDecided(stepScope);
-        finish.stepDecided(stepScope);
+        termination.stepDecided(stepScope);
         decider.stepDecided(stepScope);
     }
 
     public void stepTaken(StepScope stepScope) {
         bestSolutionRecaller.stepTaken(stepScope);
-        finish.stepTaken(stepScope);
+        termination.stepTaken(stepScope);
         decider.stepTaken(stepScope);
     }
 
     public void solvingEnded(LocalSearchSolverScope localSearchSolverScope) {
         bestSolutionRecaller.solvingEnded(localSearchSolverScope);
-        finish.solvingEnded(localSearchSolverScope);
+        termination.solvingEnded(localSearchSolverScope);
         decider.solvingEnded(localSearchSolverScope);
         logger.info("Solved at step index ({}) with time spend ({}) for best score ({}).", new Object[] {
                 localSearchSolverScope.getLastCompletedStepScope().getStepIndex(),

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish)

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractCompositeFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/AbstractCompositeFinish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractCompositeFinish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,68 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import java.util.List;
-
-import org.drools.solver.core.localsearch.LocalSearchSolver;
-import org.drools.solver.core.localsearch.LocalSearchSolverScope;
-import org.drools.solver.core.localsearch.StepScope;
-
-/**
- * Abstract superclass for CompositeFinish classes that combine multiple Finishes.
- * @author Geoffrey De Smet
- */
-public abstract class AbstractCompositeFinish extends AbstractFinish implements Finish {
-
-    protected List<Finish> finishList;
-
-    public void setFinishList(List<Finish> finishList) {
-        this.finishList = finishList;
-    }
-
-    @Override
-    public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
-        super.setLocalSearchSolver(localSearchSolver);
-        for (Finish finish : finishList) {
-            finish.setLocalSearchSolver(localSearchSolver);
-        }
-    }
-
-    // ************************************************************************
-    // Worker methods
-    // ************************************************************************
-
-    @Override
-    public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
-        for (Finish finish : finishList) {
-            finish.solvingStarted(localSearchSolverScope);
-        }
-    }
-
-    @Override
-    public void beforeDeciding(StepScope stepScope) {
-        for (Finish finish : finishList) {
-            finish.beforeDeciding(stepScope);
-        }
-    }
-
-    @Override
-    public void stepDecided(StepScope stepScope) {
-        for (Finish finish : finishList) {
-            finish.stepDecided(stepScope);
-        }
-    }
-
-    @Override
-    public void stepTaken(StepScope stepScope) {
-        for (Finish finish : finishList) {
-            finish.stepTaken(stepScope);
-        }
-    }
-
-    @Override
-    public void solvingEnded(LocalSearchSolverScope localSearchSolverScope) {
-        for (Finish finish : finishList) {
-            finish.solvingEnded(localSearchSolverScope);
-        }
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractCompositeTermination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/AbstractCompositeFinish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractCompositeTermination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractCompositeTermination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,68 @@
+package org.drools.solver.core.localsearch.termination;
+
+import java.util.List;
+
+import org.drools.solver.core.localsearch.LocalSearchSolver;
+import org.drools.solver.core.localsearch.LocalSearchSolverScope;
+import org.drools.solver.core.localsearch.StepScope;
+
+/**
+ * Abstract superclass for CompositeTermination classes that combine multiple Terminations.
+ * @author Geoffrey De Smet
+ */
+public abstract class AbstractCompositeTermination extends AbstractTermination implements Termination {
+
+    protected List<Termination> terminationList;
+
+    public void setTerminationList(List<Termination> terminationList) {
+        this.terminationList = terminationList;
+    }
+
+    @Override
+    public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
+        super.setLocalSearchSolver(localSearchSolver);
+        for (Termination termination : terminationList) {
+            termination.setLocalSearchSolver(localSearchSolver);
+        }
+    }
+
+    // ************************************************************************
+    // Worker methods
+    // ************************************************************************
+
+    @Override
+    public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
+        for (Termination termination : terminationList) {
+            termination.solvingStarted(localSearchSolverScope);
+        }
+    }
+
+    @Override
+    public void beforeDeciding(StepScope stepScope) {
+        for (Termination termination : terminationList) {
+            termination.beforeDeciding(stepScope);
+        }
+    }
+
+    @Override
+    public void stepDecided(StepScope stepScope) {
+        for (Termination termination : terminationList) {
+            termination.stepDecided(stepScope);
+        }
+    }
+
+    @Override
+    public void stepTaken(StepScope stepScope) {
+        for (Termination termination : terminationList) {
+            termination.stepTaken(stepScope);
+        }
+    }
+
+    @Override
+    public void solvingEnded(LocalSearchSolverScope localSearchSolverScope) {
+        for (Termination termination : terminationList) {
+            termination.solvingEnded(localSearchSolverScope);
+        }
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/AbstractFinish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractFinish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,47 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import org.drools.solver.core.localsearch.LocalSearchSolver;
-import org.drools.solver.core.localsearch.LocalSearchSolverScope;
-import org.drools.solver.core.localsearch.StepScope;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Abstract superclass for {@link Finish}.
- * @author Geoffrey De Smet
- */
-public abstract class AbstractFinish implements Finish {
-
-    protected final transient Logger logger = LoggerFactory.getLogger(getClass());
-
-    protected LocalSearchSolver localSearchSolver;
-
-    public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
-        this.localSearchSolver = localSearchSolver;
-    }
-
-    // ************************************************************************
-    // Worker methods
-    // ************************************************************************
-
-    public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
-        // Hook which can be optionally overwritten by subclasses.
-    }
-
-    public void beforeDeciding(StepScope stepScope) {
-        // Hook which can be optionally overwritten by subclasses.
-    }
-
-    public void stepDecided(StepScope stepScope) {
-        // Hook which can be optionally overwritten by subclasses.
-    }
-
-    public void stepTaken(StepScope stepScope) {
-        // Hook which can be optionally overwritten by subclasses.
-    }
-
-    public void solvingEnded(LocalSearchSolverScope localSearchSolverScope) {
-        // Hook which can be optionally overwritten by subclasses.
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractTermination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/AbstractFinish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractTermination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AbstractTermination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,47 @@
+package org.drools.solver.core.localsearch.termination;
+
+import org.drools.solver.core.localsearch.LocalSearchSolver;
+import org.drools.solver.core.localsearch.LocalSearchSolverScope;
+import org.drools.solver.core.localsearch.StepScope;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Abstract superclass for {@link Termination}.
+ * @author Geoffrey De Smet
+ */
+public abstract class AbstractTermination implements Termination {
+
+    protected final transient Logger logger = LoggerFactory.getLogger(getClass());
+
+    protected LocalSearchSolver localSearchSolver;
+
+    public void setLocalSearchSolver(LocalSearchSolver localSearchSolver) {
+        this.localSearchSolver = localSearchSolver;
+    }
+
+    // ************************************************************************
+    // Worker methods
+    // ************************************************************************
+
+    public void solvingStarted(LocalSearchSolverScope localSearchSolverScope) {
+        // Hook which can be optionally overwritten by subclasses.
+    }
+
+    public void beforeDeciding(StepScope stepScope) {
+        // Hook which can be optionally overwritten by subclasses.
+    }
+
+    public void stepDecided(StepScope stepScope) {
+        // Hook which can be optionally overwritten by subclasses.
+    }
+
+    public void stepTaken(StepScope stepScope) {
+        // Hook which can be optionally overwritten by subclasses.
+    }
+
+    public void solvingEnded(LocalSearchSolverScope localSearchSolverScope) {
+        // Hook which can be optionally overwritten by subclasses.
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AndCompositeFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/AndCompositeFinish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AndCompositeFinish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,44 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import org.drools.solver.core.localsearch.StepScope;
-
-/**
- * @author Geoffrey De Smet
- */
-public class AndCompositeFinish extends AbstractCompositeFinish {
-
-    // ************************************************************************
-    // Worker methods
-    // ************************************************************************
-
-    /**
-     * @return true if all the Finishes are finished.
-     * @param stepScope
-     */
-    public boolean isFinished(StepScope stepScope) {
-        for (Finish finish : finishList) {
-            if (!finish.isFinished(stepScope)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Calculates the minimum timeGradient of all finishes.
-     * Not supported timeGradients (-1.0) are ignored. 
-     * @return the minimum timeGradient of the finishes.
-     * @param stepScope
-     */
-    public double calculateTimeGradient(StepScope stepScope) {
-        double timeGradient = 1.0;
-        for (Finish finish : finishList) {
-            double nextTimeGradient = finish.calculateTimeGradient(stepScope);
-            if (nextTimeGradient >= 0.0) {
-                timeGradient = Math.min(timeGradient, nextTimeGradient);
-            }
-        }
-        return timeGradient;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AndCompositeTermination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/AndCompositeFinish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AndCompositeTermination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/AndCompositeTermination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,44 @@
+package org.drools.solver.core.localsearch.termination;
+
+import org.drools.solver.core.localsearch.StepScope;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class AndCompositeTermination extends AbstractCompositeTermination {
+
+    // ************************************************************************
+    // Worker methods
+    // ************************************************************************
+
+    /**
+     * @return true if all the Terminations are terminated.
+     * @param stepScope
+     */
+    public boolean isTerminated(StepScope stepScope) {
+        for (Termination termination : terminationList) {
+            if (!termination.isTerminated(stepScope)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Calculates the minimum timeGradient of all Terminations.
+     * Not supported timeGradients (-1.0) are ignored. 
+     * @return the minimum timeGradient of the Terminations.
+     * @param stepScope
+     */
+    public double calculateTimeGradient(StepScope stepScope) {
+        double timeGradient = 1.0;
+        for (Termination termination : terminationList) {
+            double nextTimeGradient = termination.calculateTimeGradient(stepScope);
+            if (nextTimeGradient >= 0.0) {
+                timeGradient = Math.min(timeGradient, nextTimeGradient);
+            }
+        }
+        return timeGradient;
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/FeasableScoreFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/FeasableScoreFinish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/FeasableScoreFinish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,35 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import org.drools.solver.core.localsearch.LocalSearchSolverScope;
-import org.drools.solver.core.localsearch.StepScope;
-import org.drools.solver.core.score.Score;
-
-/**
- * @author Geoffrey De Smet
- */
-public class FeasableScoreFinish extends AbstractFinish {
-
-    private Score feasableScore;
-    
-    public void setFeasableScore(Score feasableScore) {
-        this.feasableScore = feasableScore;
-    }
-
-    // ************************************************************************
-    // Worker methods
-    // ************************************************************************
-
-    public boolean isFinished(StepScope stepScope) {
-        Score bestScore = stepScope.getLocalSearchSolverScope().getBestScore();
-        return bestScore.compareTo(feasableScore) >= 0;
-    }
-
-    public double calculateTimeGradient(StepScope stepScope) {
-        LocalSearchSolverScope localSearchSolverScope = stepScope.getLocalSearchSolverScope();
-        Score startingScore = localSearchSolverScope.getStartingScore();
-        Score stepScore = localSearchSolverScope.getLastCompletedStepScope().getScore();
-        return localSearchSolverScope.getScoreDefinition()
-                .calculateTimeGradient(startingScore, feasableScore, stepScore);
-    }
-    
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/FeasableScoreTermination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/FeasableScoreFinish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/FeasableScoreTermination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/FeasableScoreTermination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,35 @@
+package org.drools.solver.core.localsearch.termination;
+
+import org.drools.solver.core.localsearch.LocalSearchSolverScope;
+import org.drools.solver.core.localsearch.StepScope;
+import org.drools.solver.core.score.Score;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class FeasableScoreTermination extends AbstractTermination {
+
+    private Score feasableScore;
+    
+    public void setFeasableScore(Score feasableScore) {
+        this.feasableScore = feasableScore;
+    }
+
+    // ************************************************************************
+    // Worker methods
+    // ************************************************************************
+
+    public boolean isTerminated(StepScope stepScope) {
+        Score bestScore = stepScope.getLocalSearchSolverScope().getBestScore();
+        return bestScore.compareTo(feasableScore) >= 0;
+    }
+
+    public double calculateTimeGradient(StepScope stepScope) {
+        LocalSearchSolverScope localSearchSolverScope = stepScope.getLocalSearchSolverScope();
+        Score startingScore = localSearchSolverScope.getStartingScore();
+        Score stepScore = localSearchSolverScope.getLastCompletedStepScope().getScore();
+        return localSearchSolverScope.getScoreDefinition()
+                .calculateTimeGradient(startingScore, feasableScore, stepScore);
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/Finish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/Finish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/Finish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,37 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import org.drools.solver.core.localsearch.LocalSearchSolverAware;
-import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
-import org.drools.solver.core.localsearch.StepScope;
-
-/**
- * A Finish determines when the LocalSearchSolver should stop.
- * @author Geoffrey De Smet
- */
-public interface Finish extends LocalSearchSolverAware, LocalSearchSolverLifecycleListener {
-
-    /**
-     * Called by the LocalSearchSolver after every step to determine if the search should stop.
-     * @param stepScope never null
-     * @return true if the search should finish.
-     */
-    boolean isFinished(StepScope stepScope);
-
-    /**
-     * A timeGradient is a relative estimate of how long the search will continue.
-     * </p>
-     * Clients that use a timeGradient should cache it at the start of a single step
-     * because some implementations are not time-stable.
-     * </p>
-     * If a timeGradient can not be calulated, it should return -1.0.
-     * Several implementations (such a similated annealing) require a correctly implemented timeGradient.
-     * <p/>
-     * A Finish's timeGradient can be requested after they are finished, so implementations
-     * should be carefull not to return a tempature above 1.0.
-     * @param stepScope never null
-     * @return timeGradient t for which 0.0 &lt;= t &lt;= 1.0 or -1.0 when it is not supported.
-     * At the start of a search t is 0.0 and at the end of a search t would be 1.0.
-     */
-    double calculateTimeGradient(StepScope stepScope);
-
-}

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/OrCompositeFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/OrCompositeFinish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/OrCompositeFinish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,44 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import org.drools.solver.core.localsearch.StepScope;
-
-/**
- * @author Geoffrey De Smet
- */
-public class OrCompositeFinish extends AbstractCompositeFinish {
-
-    // ************************************************************************
-    // Worker methods
-    // ************************************************************************
-
-    /**
-     * @return true if any of the Finishes is finished.
-     * @param stepScope
-     */
-    public boolean isFinished(StepScope stepScope) {
-        for (Finish finish : finishList) {
-            if (finish.isFinished(stepScope)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Calculates the minimum timeGradient of all finishes.
-     * Not supported timeGradients (-1.0) are ignored.
-     * @return the maximum timeGradient of the finishes.
-     * @param stepScope
-     */
-    public double calculateTimeGradient(StepScope stepScope) {
-        double timeGradient = 0.0;
-        for (Finish finish : finishList) {
-            double nextTimeGradient = finish.calculateTimeGradient(stepScope);
-            if (nextTimeGradient >= 0.0) {
-                timeGradient = Math.max(timeGradient, nextTimeGradient);
-            }
-        }
-        return timeGradient;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/OrCompositeTermination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/OrCompositeFinish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/OrCompositeTermination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/OrCompositeTermination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,44 @@
+package org.drools.solver.core.localsearch.termination;
+
+import org.drools.solver.core.localsearch.StepScope;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class OrCompositeTermination extends AbstractCompositeTermination {
+
+    // ************************************************************************
+    // Worker methods
+    // ************************************************************************
+
+    /**
+     * @return true if any of the Termination is terminated.
+     * @param stepScope
+     */
+    public boolean isTerminated(StepScope stepScope) {
+        for (Termination termination : terminationList) {
+            if (termination.isTerminated(stepScope)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Calculates the minimum timeGradient of all Terminations.
+     * Not supported timeGradients (-1.0) are ignored.
+     * @return the maximum timeGradient of the Terminations.
+     * @param stepScope
+     */
+    public double calculateTimeGradient(StepScope stepScope) {
+        double timeGradient = 0.0;
+        for (Termination termination : terminationList) {
+            double nextTimeGradient = termination.calculateTimeGradient(stepScope);
+            if (nextTimeGradient >= 0.0) {
+                timeGradient = Math.max(timeGradient, nextTimeGradient);
+            }
+        }
+        return timeGradient;
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/StepCountFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/StepCountFinish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/StepCountFinish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,35 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import org.drools.solver.core.localsearch.StepScope;
-
-/**
- * @author Geoffrey De Smet
- */
-public class StepCountFinish extends AbstractFinish {
-
-    private int maximumStepCount = 100;
-
-    public void setMaximumStepCount(int maximumStepCount) {
-        this.maximumStepCount = maximumStepCount;
-        if (maximumStepCount < 0) {
-            throw new IllegalArgumentException("Property maximumStepCount (" + maximumStepCount
-                    + ") must be greater or equal to 0.");
-        }
-    }
-
-    // ************************************************************************
-    // Worker methods
-    // ************************************************************************
-
-    public boolean isFinished(StepScope stepScope) {
-        int stepIndex = stepScope.getStepIndex();
-        return stepIndex >= maximumStepCount;
-    }
-
-    public double calculateTimeGradient(StepScope stepScope) {
-        int stepIndex = stepScope.getStepIndex();
-        double timeGradient = ((double) stepIndex) / ((double) maximumStepCount);
-        return Math.min(timeGradient, 1.0);
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/StepCountTermination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/StepCountFinish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/StepCountTermination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/StepCountTermination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,35 @@
+package org.drools.solver.core.localsearch.termination;
+
+import org.drools.solver.core.localsearch.StepScope;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class StepCountTermination extends AbstractTermination {
+
+    private int maximumStepCount = 100;
+
+    public void setMaximumStepCount(int maximumStepCount) {
+        this.maximumStepCount = maximumStepCount;
+        if (maximumStepCount < 0) {
+            throw new IllegalArgumentException("Property maximumStepCount (" + maximumStepCount
+                    + ") must be greater or equal to 0.");
+        }
+    }
+
+    // ************************************************************************
+    // Worker methods
+    // ************************************************************************
+
+    public boolean isTerminated(StepScope stepScope) {
+        int stepIndex = stepScope.getStepIndex();
+        return stepIndex >= maximumStepCount;
+    }
+
+    public double calculateTimeGradient(StepScope stepScope) {
+        int stepIndex = stepScope.getStepIndex();
+        double timeGradient = ((double) stepIndex) / ((double) maximumStepCount);
+        return Math.min(timeGradient, 1.0);
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/Termination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/Finish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/Termination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/Termination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,37 @@
+package org.drools.solver.core.localsearch.termination;
+
+import org.drools.solver.core.localsearch.LocalSearchSolverAware;
+import org.drools.solver.core.localsearch.LocalSearchSolverLifecycleListener;
+import org.drools.solver.core.localsearch.StepScope;
+
+/**
+ * A Termination determines when the LocalSearchSolver should stop.
+ * @author Geoffrey De Smet
+ */
+public interface Termination extends LocalSearchSolverAware, LocalSearchSolverLifecycleListener {
+
+    /**
+     * Called by the LocalSearchSolver after every step to determine if the search should stop.
+     * @param stepScope never null
+     * @return true if the search should terminate.
+     */
+    boolean isTerminated(StepScope stepScope);
+
+    /**
+     * A timeGradient is a relative estimate of how long the search will continue.
+     * </p>
+     * Clients that use a timeGradient should cache it at the start of a single step
+     * because some implementations are not time-stable.
+     * </p>
+     * If a timeGradient can not be calulated, it should return -1.0.
+     * Several implementations (such a similated annealing) require a correctly implemented timeGradient.
+     * <p/>
+     * A Termination's timeGradient can be requested after they are terminated, so implementations
+     * should be carefull not to return a tempature above 1.0.
+     * @param stepScope never null
+     * @return timeGradient t for which 0.0 &lt;= t &lt;= 1.0 or -1.0 when it is not supported.
+     * At the start of a search t is 0.0 and at the end of a search t would be 1.0.
+     */
+    double calculateTimeGradient(StepScope stepScope);
+
+}

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/TimeMillisSpendFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/TimeMillisSpendFinish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/TimeMillisSpendFinish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,35 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import org.drools.solver.core.localsearch.StepScope;
-
-/**
- * @author Geoffrey De Smet
- */
-public class TimeMillisSpendFinish extends AbstractFinish {
-
-    private long maximumTimeMillisSpend;
-
-    public void setMaximumTimeMillisSpend(long maximumTimeMillisSpend) {
-        this.maximumTimeMillisSpend = maximumTimeMillisSpend;
-        if (maximumTimeMillisSpend <= 0L) {
-            throw new IllegalArgumentException("Property maximumTimeMillisSpend (" + maximumTimeMillisSpend
-                    + ") must be greater than 0.");
-        }
-    }
-
-    // ************************************************************************
-    // Worker methods
-    // ************************************************************************
-
-    public boolean isFinished(StepScope stepScope) {
-        long timeMillisSpend = stepScope.getLocalSearchSolverScope().calculateTimeMillisSpend();
-        return timeMillisSpend >= maximumTimeMillisSpend;
-    }
-
-    public double calculateTimeGradient(StepScope stepScope) {
-        long timeMillisSpend = stepScope.getLocalSearchSolverScope().calculateTimeMillisSpend();
-        double timeGradient = ((double) timeMillisSpend) / ((double) maximumTimeMillisSpend);
-        return Math.min(timeGradient, 1.0);
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/TimeMillisSpendTermination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/TimeMillisSpendFinish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/TimeMillisSpendTermination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/TimeMillisSpendTermination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,35 @@
+package org.drools.solver.core.localsearch.termination;
+
+import org.drools.solver.core.localsearch.StepScope;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class TimeMillisSpendTermination extends AbstractTermination {
+
+    private long maximumTimeMillisSpend;
+
+    public void setMaximumTimeMillisSpend(long maximumTimeMillisSpend) {
+        this.maximumTimeMillisSpend = maximumTimeMillisSpend;
+        if (maximumTimeMillisSpend <= 0L) {
+            throw new IllegalArgumentException("Property maximumTimeMillisSpend (" + maximumTimeMillisSpend
+                    + ") must be greater than 0.");
+        }
+    }
+
+    // ************************************************************************
+    // Worker methods
+    // ************************************************************************
+
+    public boolean isTerminated(StepScope stepScope) {
+        long timeMillisSpend = stepScope.getLocalSearchSolverScope().calculateTimeMillisSpend();
+        return timeMillisSpend >= maximumTimeMillisSpend;
+    }
+
+    public double calculateTimeGradient(StepScope stepScope) {
+        long timeMillisSpend = stepScope.getLocalSearchSolverScope().calculateTimeMillisSpend();
+        double timeGradient = ((double) timeMillisSpend) / ((double) maximumTimeMillisSpend);
+        return Math.min(timeGradient, 1.0);
+    }
+
+}

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/UnimprovedStepCountFinish.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/UnimprovedStepCountFinish.java	2009-07-18 12:09:26 UTC (rev 28178)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/UnimprovedStepCountFinish.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -1,41 +0,0 @@
-package org.drools.solver.core.localsearch.finish;
-
-import org.drools.solver.core.localsearch.StepScope;
-
-/**
- * @author Geoffrey De Smet
- */
-public class UnimprovedStepCountFinish extends AbstractFinish {
-
-    private int maximumUnimprovedStepCount = 100;
-
-    public void setMaximumUnimprovedStepCount(int maximumUnimprovedStepCount) {
-        this.maximumUnimprovedStepCount = maximumUnimprovedStepCount;
-        if (maximumUnimprovedStepCount < 0) {
-            throw new IllegalArgumentException("Property maximumUnimprovedStepCount (" + maximumUnimprovedStepCount
-                    + ") must be greater or equal to 0.");
-        }
-    }
-
-    // ************************************************************************
-    // Worker methods
-    // ************************************************************************
-    
-    private int calculateUnimprovedStepCount(StepScope stepScope) {
-        int bestStepIndex = stepScope.getLocalSearchSolverScope().getBestSolutionStepIndex();
-        int stepIndex = stepScope.getStepIndex();
-        return stepIndex - bestStepIndex;
-    }
-
-    public boolean isFinished(StepScope stepScope) {
-        int unimprovedStepCount = calculateUnimprovedStepCount(stepScope);
-        return unimprovedStepCount >= maximumUnimprovedStepCount;
-    }
-
-    public double calculateTimeGradient(StepScope stepScope) {
-        int unimprovedStepCount = calculateUnimprovedStepCount(stepScope);
-        double timeGradient = ((double) unimprovedStepCount) / ((double) maximumUnimprovedStepCount);
-        return Math.min(timeGradient, 1.0);
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/UnimprovedStepCountTermination.java (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/finish/UnimprovedStepCountFinish.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/UnimprovedStepCountTermination.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/termination/UnimprovedStepCountTermination.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -0,0 +1,41 @@
+package org.drools.solver.core.localsearch.termination;
+
+import org.drools.solver.core.localsearch.StepScope;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class UnimprovedStepCountTermination extends AbstractTermination {
+
+    private int maximumUnimprovedStepCount = 100;
+
+    public void setMaximumUnimprovedStepCount(int maximumUnimprovedStepCount) {
+        this.maximumUnimprovedStepCount = maximumUnimprovedStepCount;
+        if (maximumUnimprovedStepCount < 0) {
+            throw new IllegalArgumentException("Property maximumUnimprovedStepCount (" + maximumUnimprovedStepCount
+                    + ") must be greater or equal to 0.");
+        }
+    }
+
+    // ************************************************************************
+    // Worker methods
+    // ************************************************************************
+    
+    private int calculateUnimprovedStepCount(StepScope stepScope) {
+        int bestStepIndex = stepScope.getLocalSearchSolverScope().getBestSolutionStepIndex();
+        int stepIndex = stepScope.getStepIndex();
+        return stepIndex - bestStepIndex;
+    }
+
+    public boolean isTerminated(StepScope stepScope) {
+        int unimprovedStepCount = calculateUnimprovedStepCount(stepScope);
+        return unimprovedStepCount >= maximumUnimprovedStepCount;
+    }
+
+    public double calculateTimeGradient(StepScope stepScope) {
+        int unimprovedStepCount = calculateUnimprovedStepCount(stepScope);
+        double timeGradient = ((double) unimprovedStepCount) / ((double) maximumUnimprovedStepCount);
+        return Math.min(timeGradient, 1.0);
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/termination (from rev 28178, labs/jbossrules/trunk/drools-solver/drools-solver-core/src/test/java/org/drools/solver/core/localsearch/finish)

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/app/ExaminationShellApp.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/app/ExaminationShellApp.java	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/app/ExaminationShellApp.java	2009-07-18 12:53:22 UTC (rev 28180)
@@ -53,7 +53,7 @@
     private void configureSolver(long maximumSecondsSpend) {
         XmlSolverConfigurer configurer = new XmlSolverConfigurer();
         configurer.configure(SOLVER_CONFIG);
-        configurer.getConfig().getFinishConfig().setMaximumSecondsSpend(maximumSecondsSpend);
+        configurer.getConfig().getTerminationConfig().setMaximumSecondsSpend(maximumSecondsSpend);
         solver = configurer.buildSolver();
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseShortSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseShortSolverBenchmarkConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseShortSolverBenchmarkConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -10,9 +10,9 @@
     <inheritedLocalSearchSolver>
         <scoreDrl>/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseScoreRules.drl</scoreDrl>
         <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.solution.initializer.CurriculumCourseStartingSolutionInitializer</startingSolutionInitializerClass>
-        <finish>
+        <termination>
             <maximumStepCount>500</maximumStepCount>
-        </finish>
+        </termination>
     </inheritedLocalSearchSolver>
 
     <solverBenchmark>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/benchmark/curriculumCourseSolverBenchmarkConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -23,14 +23,14 @@
     <inheritedLocalSearchSolver>
         <scoreDrl>/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseScoreRules.drl</scoreDrl>
         <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.solution.initializer.CurriculumCourseStartingSolutionInitializer</startingSolutionInitializerClass>
-        <finish>
+        <termination>
             <!--
                 Official benchmark maximumSecondsSpend allowed on:
                 ge0ffrey's main pc: 429
                 ge0ffrey's old pc: 1152
             -->
             <maximumSecondsSpend>429</maximumSecondsSpend>
-        </finish>
+        </termination>
     </inheritedLocalSearchSolver>
 
     <solverBenchmark>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseScoreRules.drl	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseScoreRules.drl	2009-07-18 12:53:22 UTC (rev 28180)
@@ -73,7 +73,7 @@
 
 // Accumulate hard constraints
 rule "hardConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $hardTotal : Number() from accumulate(
             IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_HARD, $weight : weight),
@@ -177,7 +177,7 @@
 
 // Accumulate soft constraints
 rule "softConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $softTotal : Number() from accumulate(
             IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_SOFT, $weight : weight),

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/curriculumcourse/solver/curriculumCourseSolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -5,7 +5,7 @@
         <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
     </scoreDefinition>
     <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.curriculumcourse.solver.solution.initializer.CurriculumCourseStartingSolutionInitializer</startingSolutionInitializerClass>
-    <finish>
+    <termination>
         <!--
             Official benchmark maximumSecondsSpend allowed on:
             ge0ffrey's main pc: 429
@@ -14,7 +14,7 @@
         <maximumSecondsSpend>429</maximumSecondsSpend>
         <!--<feasableScore>-0hard/-999999soft</feasableScore>-->
         <!--<maximumStepCount>100</maximumStepCount>-->
-    </finish>
+    </termination>
     <selector>
         <selector>
             <topSize>10</topSize>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationShortSolverBenchmarkConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -9,9 +9,9 @@
     <inheritedLocalSearchSolver>
         <scoreDrl>/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl</scoreDrl>
         <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
-        <finish>
+        <termination>
             <maximumStepCount>100</maximumStepCount>
-        </finish>
+        </termination>
     </inheritedLocalSearchSolver>
 
     <solverBenchmark>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/benchmark/examinationSolverBenchmarkConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -20,14 +20,14 @@
             <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
         </scoreDefinition>
         <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
-        <finish>
+        <termination>
             <!--
                 Official benchmark maximumSecondsSpend allowed on:
                 ge0ffrey's main pc: 429
                 ge0ffrey's old pc: 1152
             -->
             <maximumSecondsSpend>429</maximumSecondsSpend>
-        </finish>
+        </termination>
     </inheritedLocalSearchSolver>
 
     <solverBenchmark>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl	2009-07-18 12:53:22 UTC (rev 28180)
@@ -136,7 +136,7 @@
 
 // Accumulate hard constraints
 rule "hardConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $hardTotal : Number() from accumulate(
             IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_HARD, $weight : weight),
@@ -256,7 +256,7 @@
 
 // Accumulate soft constraints
 rule "softConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $softTotal : Number() from accumulate(
             IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_SOFT, $weight : weight),

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationSolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -5,7 +5,7 @@
         <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
     </scoreDefinition>
     <startingSolutionInitializerClass>org.drools.solver.examples.itc2007.examination.solver.solution.initializer.ExaminationStartingSolutionInitializer</startingSolutionInitializerClass>
-    <finish>
+    <termination>
         <!--
             Official benchmark maximumSecondsSpend allowed on:
             ge0ffrey's main pc: 429
@@ -14,7 +14,7 @@
         <maximumSecondsSpend>429</maximumSecondsSpend>
         <!--<feasableScore>-0hard/-999999soft</feasableScore>-->
         <!--<maximumStepCount>100</maximumStepCount>-->
-    </finish>
+    </termination>
     <!--<deciderScoreComparatorFactory>-->
         <!--<deciderScoreComparatorFactoryType>SHIFTING_HARD_PENALTY</deciderScoreComparatorFactoryType>-->
         <!--<hardScoreActivationThreshold>0</hardScoreActivationThreshold>-->

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/lessonschedule/solver/lessonScheduleSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/lessonschedule/solver/lessonScheduleSolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/lessonschedule/solver/lessonScheduleSolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -4,9 +4,9 @@
     <scoreDefinition>
         <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
     </scoreDefinition>
-    <finish>
+    <termination>
         <maximumUnimprovedStepCount>10</maximumUnimprovedStepCount>
-    </finish>
+    </termination>
     <selector>
         <moveFactoryClass>org.drools.solver.examples.lessonschedule.solver.move.factory.LessonScheduleMoveFactory</moveFactoryClass>
     </selector>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009SolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009SolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/manners2009/solver/manners2009SolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -5,11 +5,11 @@
         <scoreDefinitionType>SIMPLE</scoreDefinitionType>
     </scoreDefinition>
     <startingSolutionInitializerClass>org.drools.solver.examples.manners2009.solver.solution.initializer.Manners2009StartingSolutionInitializer</startingSolutionInitializerClass>
-        <finish>
-        <!--<finishCompositionStyle>OR</finishCompositionStyle>-->
+        <termination>
+        <!--<terminationCompositionStyle>OR</terminationCompositionStyle>-->
         <!--<maximumMinutesSpend>1</maximumMinutesSpend>-->
         <feasableScore>0</feasableScore>
-    </finish>
+    </termination>
     <selector>
         <moveFactoryClass>org.drools.solver.examples.manners2009.solver.move.factory.SeatDesignationSwitchMoveFactory</moveFactoryClass>
     </selector>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/benchmark/nqueensSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/benchmark/nqueensSolverBenchmarkConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/benchmark/nqueensSolverBenchmarkConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -9,11 +9,11 @@
         <scoreDefinition>
             <scoreDefinitionType>SIMPLE</scoreDefinitionType>
         </scoreDefinition>
-        <finish>
-            <finishCompositionStyle>OR</finishCompositionStyle>
+        <termination>
+            <terminationCompositionStyle>OR</terminationCompositionStyle>
             <maximumSecondsSpend>10</maximumSecondsSpend>
             <feasableScore>0</feasableScore>
-        </finish>
+        </termination>
         <selector>
             <moveFactoryClass>org.drools.solver.examples.nqueens.solver.move.factory.NQueensMoveFactory</moveFactoryClass>
         </selector>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/solver/nqueensSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/solver/nqueensSolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/nqueens/solver/nqueensSolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -4,11 +4,11 @@
     <scoreDefinition>
         <scoreDefinitionType>SIMPLE</scoreDefinitionType>
     </scoreDefinition>
-    <finish>
-        <finishCompositionStyle>OR</finishCompositionStyle>
+    <termination>
+        <terminationCompositionStyle>OR</terminationCompositionStyle>
         <maximumStepCount>100</maximumStepCount>
         <feasableScore>0</feasableScore>
-    </finish>
+    </termination>
     <selector>
         <moveFactoryClass>org.drools.solver.examples.nqueens.solver.move.factory.NQueensMoveFactory</moveFactoryClass>
     </selector>

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-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/benchmark/patientAdmissionScheduleSolverBenchmarkConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -37,13 +37,13 @@
             <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
         </scoreDefinition>
         <startingSolutionInitializerClass>org.drools.solver.examples.pas.solver.solution.initializer.PatientAdmissionScheduleStartingSolutionInitializer</startingSolutionInitializerClass>
-        <finish>
+        <termination>
             <!--
                On Geoffrey De Smet's PC: 372 (short run), 3720 (long run).
                On Peter Demeester's PC: 300 (short run), 3000 (long run).
             -->
             <maximumSecondsSpend>3720</maximumSecondsSpend>
-        </finish>
+        </termination>
     </inheritedLocalSearchSolver>
 
     <solverBenchmark>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleBaseScoreRules.drl	2009-07-18 12:53:22 UTC (rev 28180)
@@ -66,7 +66,7 @@
 
 // Accumulate hard constraints
 rule "hardConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $hardTotal : Number() from accumulate(
             IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_HARD, $weight : weight),
@@ -143,7 +143,7 @@
 
 // Accumulate soft constraints
 rule "softConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $softTotal : Number() from accumulate(
             IntConstraintOccurrence(constraintType == ConstraintType.NEGATIVE_SOFT, $weight : weight),

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/pas/solver/patientAdmissionScheduleSolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -5,13 +5,13 @@
         <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
     </scoreDefinition>
     <startingSolutionInitializerClass>org.drools.solver.examples.pas.solver.solution.initializer.PatientAdmissionScheduleStartingSolutionInitializer</startingSolutionInitializerClass>
-    <finish>
+    <termination>
         <!--
            On Geoffrey De Smet's PC: 372 (short run), 3720 (long run).
            On Peter Demeester's PC: 300 (short run), 3000 (long run).
         -->
         <maximumSecondsSpend>3720</maximumSecondsSpend>
-    </finish>
+    </termination>
     <selector>
         <!--<selector>-->
             <!--<moveFactoryClass>org.drools.solver.examples.pas.solver.move.factory.BedChangeMoveFactory</moveFactoryClass>-->

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/breakNl14SolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/breakNl14SolverBenchmarkConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/breakNl14SolverBenchmarkConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -23,11 +23,11 @@
 
     <solverBenchmark>
         <localSearchSolver>
-            <finish>
-                <finishCompositionStyle>AND</finishCompositionStyle>
+            <termination>
+                <terminationCompositionStyle>AND</terminationCompositionStyle>
                 <feasableScore>-0hard/-188727soft</feasableScore><!-- 188728 (Van Hentenryck and Vergados, May 18 2006) -->
                 <maximumUnimprovedStepCount>20</maximumUnimprovedStepCount>
-            </finish>
+            </termination>
         </localSearchSolver>
     </solverBenchmark>
 </solverBenchmarkSuite>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/smartTravelingTournamentSolverBenchmarkConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/smartTravelingTournamentSolverBenchmarkConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/benchmark/smart/smartTravelingTournamentSolverBenchmarkConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -10,10 +10,10 @@
         <scoreDefinition>
             <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
         </scoreDefinition>
-        <finish>
+        <termination>
             <!--<maximumHouresSpend>2</maximumHouresSpend>-->
             <maximumMinutesSpend>10</maximumMinutesSpend>
-        </finish>
+        </termination>
         <selector>
             <moveFactoryClass>org.drools.solver.examples.travelingtournament.solver.smart.move.factory.SmartTravelingTournamentMoveFactory</moveFactoryClass>
         </selector>
@@ -49,9 +49,9 @@
     <!--<solverBenchmark>-->
         <!--<localSearchSolver>-->
             <!-- Warmup JIT -->
-            <!--<finish>-->
+            <!--<termination>-->
                 <!--<maximumMinutesSpend>2</maximumMinutesSpend>-->
-            <!--</finish>-->
+            <!--</termination>-->
             <!--<accepter>-->
                 <!--<completeSolutionTabuSize>10</completeSolutionTabuSize>-->
                 <!--<completeMoveTabuSize>10</completeMoveTabuSize>-->

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentScoreRules.drl	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentScoreRules.drl	2009-07-18 12:53:22 UTC (rev 28180)
@@ -59,7 +59,7 @@
 end
 
 rule "hardConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $occurrenceCount : Number() from accumulate(
             $unweightedConstraintOccurrence : UnweightedConstraintOccurrence(),
@@ -110,7 +110,7 @@
 end
 
 rule "softConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $totalDistance : Double() from accumulate(
             Hop($distance : distance),

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentSolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/simple/simpleTravelingTournamentSolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -4,9 +4,9 @@
     <scoreDefinition>
         <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
     </scoreDefinition>
-    <finish>
+    <termination>
         <maximumHouresSpend>2</maximumHouresSpend>
-    </finish>
+    </termination>
     <selector>
         <moveFactoryClass>org.drools.solver.examples.travelingtournament.solver.simple.move.factory.SimpleTravelingTournamentMoveFactory</moveFactoryClass>
     </selector>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentScoreRules.drl	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentScoreRules.drl	2009-07-18 12:53:22 UTC (rev 28180)
@@ -50,7 +50,7 @@
 end
 
 rule "hardConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $occurrenceCount : Number() from accumulate(
             $unweightedConstraintOccurrence : UnweightedConstraintOccurrence(),
@@ -101,7 +101,7 @@
 end
 
 rule "softConstraintsBroken"
-        salience -1 // Finish the other rules first (optional, for performance)
+        salience -1 // Do the other rules first (optional, for performance)
     when
         $totalDistance : Double() from accumulate(
             Hop($distance : distance),

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentSolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/travelingtournament/solver/smart/smartTravelingTournamentSolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -4,9 +4,9 @@
     <scoreDefinition>
         <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
     </scoreDefinition>
-    <finish>
+    <termination>
         <feasableScore>0hard/0soft</feasableScore>
-    </finish>
+    </termination>
     <deciderScoreComparatorFactory>
         <deciderScoreComparatorFactoryType>SHIFTING_HARD_PENALTY</deciderScoreComparatorFactoryType>
         <hardScoreActivationThreshold>0</hardScoreActivationThreshold>

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/resources/org/drools/solver/examples/nqueens/solver/nqueensSmokeSolverConfig.xml
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/resources/org/drools/solver/examples/nqueens/solver/nqueensSmokeSolverConfig.xml	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/resources/org/drools/solver/examples/nqueens/solver/nqueensSmokeSolverConfig.xml	2009-07-18 12:53:22 UTC (rev 28180)
@@ -4,11 +4,11 @@
     <scoreDefinition>
         <scoreDefinitionType>SIMPLE</scoreDefinitionType>
     </scoreDefinition>
-    <finish>
-        <finishCompositionStyle>OR</finishCompositionStyle>
+    <termination>
+        <terminationCompositionStyle>OR</terminationCompositionStyle>
         <maximumStepCount>5</maximumStepCount>
         <feasableScore>0</feasableScore>
-    </finish>
+    </termination>
     <selector>
         <moveFactoryClass>org.drools.solver.examples.nqueens.solver.move.factory.NQueensMoveFactory</moveFactoryClass>
     </selector>

Modified: labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
===================================================================
--- labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt	2009-07-18 12:50:02 UTC (rev 28179)
+++ labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt	2009-07-18 12:53:22 UTC (rev 28180)
@@ -12,7 +12,8 @@
 From 5.0.0 to 5.0.1
 -------------------
 
-A score is no longer a double, now it's a Score instance.
+A score is no longer a double, now it's a Score instance,
+because a SimpleScore is now just an int and a HardAndSoftScore is now 2 seperated ints.
 
 
 In the Solver interface, the return type of the getBestScore() method changed:
@@ -84,4 +85,37 @@
     solver.cancel();
 After:
     solver.terminateEarly();
+
 Likewise, Solver.isCancelled() has been renamed to Solver.isTerminatedEarly().
+Before:
+    solver.isCancelled();
+After:
+    solver.isTerminatedEarly();
+
+
+The Finish interface has been renamed to Termination
+because Termination seems the defacto standard name for it in the literature.
+Before:
+   ... extends Finish
+After:
+   ... extends Termination
+Before in solver config xml's and benchmarker config xml's :
+    <finish>
+        ...
+    </finish>
+After:
+    <termination>
+        ...
+    </termination>
+
+Likewise FinishCompositionStyle has been renamed to TerminationCompositionStyle.
+Before in solver config xml's and benchmarker config xml's :
+        <finishCompositionStyle>...</finishCompositionStyle>
+After:
+        <terminationCompositionStyle>...</terminationCompositionStyle>
+
+The Finish.isFinished(...) has been renamed to Termination.isTerminated().
+Before:
+   .isFinished(...)
+After:
+   .isTerminated(...)



More information about the jboss-svn-commits mailing list