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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Jul 3 09:30:15 EDT 2009


Author: ge0ffrey
Date: 2009-07-03 09:30:14 -0400 (Fri, 03 Jul 2009)
New Revision: 27505

Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/AbstractSolver.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.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/common/business/SolutionBusiness.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java
   labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
Log:
Solver interface: rename cancel() to terminateEarly() and isCancelled() to isTerminatedEarly()

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/AbstractSolver.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/AbstractSolver.java	2009-07-03 13:10:11 UTC (rev 27504)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/AbstractSolver.java	2009-07-03 13:30:14 UTC (rev 27505)
@@ -18,22 +18,22 @@
 
     // TODO atomic enum with values NOT_STARTED, RUNNING, DONE, CANCELLED
     // TODO introduce a solver factory and make a solver one time use
-    protected final AtomicBoolean cancelled = new AtomicBoolean(false);
+    protected final AtomicBoolean terminatedEarly = new AtomicBoolean(false);
 
-    public boolean cancel() {
-        boolean cancellingSuccesful = !cancelled.getAndSet(true);
-        if (cancellingSuccesful) {
-            logger.info("Cancelling solver.");
+    public boolean terminateEarly() {
+        boolean terminationEarlySuccessful = !terminatedEarly.getAndSet(true);
+        if (terminationEarlySuccessful) {
+            logger.info("Terminating solver early.");
         }
-        return cancellingSuccesful;
+        return terminationEarlySuccessful;
     }
 
-    public boolean isCancelled() {
-        return cancelled.get();
+    public boolean isTerminatedEarly() {
+        return terminatedEarly.get();
     }
 
     public final void solve() {
-        cancelled.set(false);
+        terminatedEarly.set(false);
         solveImplementation();
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java	2009-07-03 13:10:11 UTC (rev 27504)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java	2009-07-03 13:30:14 UTC (rev 27505)
@@ -7,13 +7,19 @@
 
 /**
  * A Solver solves planning problems.
+ * <p/>
+ * Most methods are not thread-safe and should be called from the same thread.
  * @author Geoffrey De Smet
  */
 public interface Solver {
 
+    /**
+     * @param startingSolution cannot be null
+     */
     void setStartingSolution(Solution startingSolution);
 
     Score getBestScore();
+    
     Solution getBestSolution();
 
     /**
@@ -21,18 +27,32 @@
      */
     long getTimeMillisSpend();
 
+    /**
+     * Solves the planning problem.
+     * It can take minutes, even hours or days before this method returns,
+     * depending on the termination configuration.
+     * To terminate a {@link Solver} early, call {@link #terminateEarly()}.
+     * @see #terminateEarly()
+     */
     void solve();
 
     /**
+     * Notifies the solver that it should stop at its earliest convenience.
+     * This method returns immediatly, but it takes an undetermined time
+     * for the {@link #solve()} to actually return.
+     * <p/>
+     * This method is thread-safe.
+     * @see #isTerminatedEarly()
      * @see Future#cancel(boolean)
      * @return true if successful
      */
-    boolean cancel();
+    boolean terminateEarly();
 
     /**
+     * This method is thread-safe.
      * @see Future#isCancelled()
-     * @return true if cancelled
+     * @return true if terminateEarly has been called since the {@Solver} started.
      */
-    boolean isCancelled();
-    
+    boolean isTerminatedEarly();
+
 }

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-03 13:10:11 UTC (rev 27504)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java	2009-07-03 13:30:14 UTC (rev 27505)
@@ -9,13 +9,10 @@
 import org.drools.solver.core.move.Move;
 import org.drools.solver.core.score.calculator.ScoreCalculator;
 import org.drools.solver.core.score.Score;
-import org.drools.solver.core.score.HardAndSoftScore;
 import org.drools.solver.core.score.definition.ScoreDefinition;
 import org.drools.solver.core.solution.Solution;
 import org.drools.solver.core.solution.initializer.StartingSolutionInitializer;
 import org.drools.solver.core.AbstractSolver;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Default implementation of {@link LocalSearchSolver}.
@@ -106,7 +103,7 @@
         solvingStarted(localSearchSolverScope);
 
         StepScope stepScope = createNextStepScope(localSearchSolverScope, null);
-        while (!cancelled.get() && !finish.isFinished(stepScope)) {
+        while (!terminatedEarly.get() && !finish.isFinished(stepScope)) {
             stepScope.setTimeGradient(finish.calculateTimeGradient(stepScope));
             beforeDeciding(stepScope);
             decider.decideNextStep(stepScope);

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java	2009-07-03 13:10:11 UTC (rev 27504)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/business/SolutionBusiness.java	2009-07-03 13:30:14 UTC (rev 27505)
@@ -151,8 +151,8 @@
         solver.setStartingSolution(solution);
     }
 
-    public void cancelSolving() {
-        solver.cancel();
+    public void terminateSolvingEarly() {
+        solver.terminateEarly();
     }
 
     public class SolverExampleFileFilter implements FileFilter {

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java	2009-07-03 13:10:11 UTC (rev 27504)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/common/swingui/WorkflowFrame.java	2009-07-03 13:30:14 UTC (rev 27505)
@@ -166,7 +166,7 @@
         private ExecutorService solvingExecutor = Executors.newFixedThreadPool(1);
 
         public SolveAction() {
-            super("Solve!");
+            super("Solve");
         }
 
         public void actionPerformed(ActionEvent e) {
@@ -190,12 +190,12 @@
     private class CancelSolvingAction extends AbstractAction {
 
         public CancelSolvingAction() {
-            super("Cancel solving");
+            super("Terminate solving early");
         }
 
         public void actionPerformed(ActionEvent e) {
             // This async, so it doesn't stop the solving immediatly
-            solutionBusiness.cancelSolving();
+            solutionBusiness.terminateSolvingEarly();
         }
 
     }

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-03 13:10:11 UTC (rev 27504)
+++ labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt	2009-07-03 13:30:14 UTC (rev 27505)
@@ -74,3 +74,14 @@
     <scoreDefinition>
         <scoreDefinitionType>HARD_AND_SOFT</scoreDefinitionType>
     </scoreDefinition>
+
+From 5.0.1 to 5.1.0
+-------------------
+
+The Solver.cancel() method has been renamed to Solver.terminateEarly()
+because it does not undo the solving but terminates it early and there's a best solution.
+Before:
+    solver.cancel();
+After:
+    solver.terminateEarly();
+Likewise, Solver.isCancelled() has been renamed to Solver.isTerminatedEarly().




More information about the jboss-svn-commits mailing list