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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon Aug 17 09:32:37 EDT 2009


Author: ge0ffrey
Date: 2009-08-17 09:32:37 -0400 (Mon, 17 Aug 2009)
New Revision: 28959

Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/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-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverScope.java
   labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/solution/Solution.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/CurriculumCourseSchedule.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Examination.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/LessonSchedule.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Manners2009.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/domain/NQueens.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/PatientAdmissionSchedule.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/TravelingTournament.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/java/org/drools/solver/examples/nqueens/NQueensSmokeTest.java
   labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
Log:
JBRULES-1977 Solution should have a getScore() and setScore()

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/benchmark/SolverBenchmarkSuite.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -152,8 +152,8 @@
                 solver.setStartingSolution(unsolvedSolution);
                 solver.solve();
                 result.setTimeMillesSpend(solver.getTimeMillisSpend());
-                result.setScore(solver.getBestScore());
                 Solution solvedSolution = solver.getBestSolution();
+                result.setScore(solvedSolution.getScore());
                 writeSolvedSolution(xStream, solverBenchmark, result, solvedSolution);
             }
         }

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-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/Solver.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -14,11 +14,9 @@
 public interface Solver {
 
     /**
-     * @param startingSolution cannot be null
+     * @param startingSolution never null
      */
     void setStartingSolution(Solution startingSolution);
-
-    Score getBestScore();
     
     Solution getBestSolution();
 

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-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -77,10 +77,6 @@
         localSearchSolverScope.setWorkingSolution(startingSolution);
     }
 
-    public Score getBestScore() {
-        return this.localSearchSolverScope.getBestScore();
-    }
-
     public Solution getBestSolution() {
         return this.localSearchSolverScope.getBestSolution();
     }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverScope.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverScope.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/LocalSearchSolverScope.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -134,7 +134,9 @@
 
     public Score calculateScoreFromWorkingMemory() {
         workingMemory.fireAllRules();
-        return workingScoreCalculator.calculateScore();
+        Score score = workingScoreCalculator.calculateScore();
+        workingSolution.setScore(score);
+        return score;
     }
 
     public void resetTimeMillisSpend() {

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/solution/Solution.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/solution/Solution.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/solution/Solution.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -2,6 +2,9 @@
 
 import java.util.Collection;
 
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.Solver;
+
 /**
  * A Solution represents a problem and a possible solution of that problem.
  * A possible solution does not need to optimal or even feasible.
@@ -15,16 +18,31 @@
 public interface Solution {
 
     /**
-     * Called when the solution needs to be asserted into an empty WorkingMemory.
+     * Returns the Score of this Solution.
+     * @return null if the Solution is unitialized
+     * or the last calculated Score is dirty the new Score has not yet been recalculated
+     */
+    Score getScore();
+
+    /**
+     * Called by the {@link Solver} when the Score of this Solution has been calculated.
+     * @param score null if the Solution has changed and the new Score has not yet been recalculated
+     */
+    void setScore(Score score);
+
+    /**
+     * Called by the {@link Solver} when the solution needs to be asserted into an empty WorkingMemory.
      * These facts can be used by the score rules.
-     * @return all the facts of this solution
+     * @return never null (although an empty collection is allowed), all the facts of this solution
      */
     Collection<? extends Object> getFacts();
 
     /**
-     * Called when the solution needs to be cloned during solving,
-     * for example to store a clone of the current solution as the best solution. 
-     * @return a clone of which the properties that change during solving are deep cloned
+     * Called by the {@link Solver} when the solution needs to be cloned,
+     * for example to store a clone of the current solution as the best solution.
+     * <p/>
+     * A clone must also shallow copy the score.
+     * @return never null, a clone of which the properties that change during solving are deep cloned
      */
     Solution cloneSolution();
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/CurriculumCourseSchedule.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/CurriculumCourseSchedule.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/curriculumcourse/domain/CurriculumCourseSchedule.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -7,6 +7,8 @@
 
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.HardAndSoftScore;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
@@ -28,6 +30,8 @@
 
     private List<Lecture> lectureList;
 
+    private HardAndSoftScore score;
+
     public String getName() {
         return name;
     }
@@ -108,7 +112,15 @@
         this.lectureList = lectureList;
     }
 
+    public HardAndSoftScore getScore() {
+        return score;
+    }
 
+    public void setScore(Score score) {
+        this.score = (HardAndSoftScore) score;
+    }
+
+
     public boolean isInitialized() {
         return (lectureList != null);
     }
@@ -151,6 +163,7 @@
             clonedLectureList.add(clonedLecture);
         }
         clone.lectureList = clonedLectureList;
+        clone.score = score;
         return clone;
     }
 
@@ -186,4 +199,4 @@
         return hashCodeBuilder.toHashCode();
     }
 
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Examination.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Examination.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Examination.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -7,6 +7,8 @@
 
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.HardAndSoftScore;
+import org.drools.solver.core.score.Score;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 import org.drools.solver.examples.itc2007.examination.domain.solver.TopicConflict;
 
@@ -27,6 +29,8 @@
 
     private List<Exam> examList;
 
+    private HardAndSoftScore score;
+
     public InstitutionalWeighting getInstitutionalWeighting() {
         return institutionalWeighting;
     }
@@ -91,7 +95,15 @@
         this.examList = examList;
     }
 
+    public HardAndSoftScore getScore() {
+        return score;
+    }
 
+    public void setScore(Score score) {
+        this.score = (HardAndSoftScore) score;
+    }
+
+
     public boolean isInitialized() {
         return (examList != null);
     }
@@ -156,6 +168,7 @@
             clonedExamList.add(clonedExam);
         }
         clone.examList = clonedExamList;
+        clone.score = score;
         return clone;
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/LessonSchedule.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/LessonSchedule.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/LessonSchedule.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -5,6 +5,8 @@
 import java.util.List;
 
 import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.HardAndSoftScore;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
@@ -18,6 +20,8 @@
 
     private List<Lesson> lessonList;
 
+    private HardAndSoftScore score;
+
     public List<Timeslot> getTimeslotList() {
         return timeslotList;
     }
@@ -50,7 +54,15 @@
         this.lessonList = lessonList;
     }
 
+    public HardAndSoftScore getScore() {
+        return score;
+    }
 
+    public void setScore(Score score) {
+        this.score = (HardAndSoftScore) score;
+    }
+
+
     public Collection<? extends Object> getFacts() {
         List<Object> facts = new ArrayList<Object>();
         facts.addAll(timeslotList);
@@ -74,6 +86,7 @@
             clonedLessonList.add(lesson.clone());
         }
         clone.lessonList = clonedLessonList;
+        clone.score = score;
         return clone;
     }
     

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Manners2009.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Manners2009.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/Manners2009.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -8,6 +8,8 @@
 
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.SimpleScore;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
@@ -23,6 +25,8 @@
 
     private List<SeatDesignation> seatDesignationList;
 
+    private SimpleScore score;
+
     public List<Job> getJobList() {
         return jobList;
     }
@@ -71,7 +75,15 @@
         this.seatDesignationList = seatDesignationList;
     }
 
+    public SimpleScore getScore() {
+        return score;
+    }
 
+    public void setScore(Score score) {
+        this.score = (SimpleScore) score;
+    }
+
+
     public boolean isInitialized() {
         return (seatDesignationList != null);
     }
@@ -107,6 +119,7 @@
             clonedSeatDesignationList.add(seatDesignation.clone());
         }
         clone.seatDesignationList = clonedSeatDesignationList;
+        clone.score = score;
         return clone;
     }
 
@@ -142,4 +155,4 @@
         return hashCodeBuilder.toHashCode();
     }
 
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/domain/NQueens.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/domain/NQueens.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/domain/NQueens.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -5,6 +5,9 @@
 import java.util.List;
 
 import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.HardAndSoftScore;
+import org.drools.solver.core.score.SimpleScore;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
@@ -14,6 +17,8 @@
 
     private List<Queen> queenList;
 
+    private SimpleScore score;
+
     public List<Queen> getQueenList() {
         return queenList;
     }
@@ -22,6 +27,14 @@
         this.queenList = queenList;
     }
 
+    public SimpleScore getScore() {
+        return score;
+    }
+
+    public void setScore(Score score) {
+        this.score = (SimpleScore) score;
+    }
+
     public int getN() {
         return queenList.size();
     }
@@ -54,6 +67,7 @@
             clonedQueenList.add(queen.clone());
         }
         clone.queenList = clonedQueenList;
+        clone.score = score;
         return clone;
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/PatientAdmissionSchedule.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/PatientAdmissionSchedule.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/pas/domain/PatientAdmissionSchedule.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -7,6 +7,8 @@
 
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.HardAndSoftScore;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 import org.drools.solver.examples.pas.domain.solver.AdmissionPartConflict;
 
@@ -31,6 +33,8 @@
 
     private List<BedDesignation> bedDesignationList;
 
+    private HardAndSoftScore score;
+
     public List<Specialism> getSpecialismList() {
         return specialismList;
     }
@@ -143,6 +147,15 @@
         this.bedDesignationList = bedDesignationList;
     }
 
+    public HardAndSoftScore getScore() {
+        return score;
+    }
+
+    public void setScore(Score score) {
+        this.score = (HardAndSoftScore) score;
+    }
+
+
     public boolean isInitialized() {
         return (bedDesignationList != null);
     }
@@ -234,6 +247,7 @@
             clonedBedDesignationList.add(clonedBedDesignation);
         }
         clone.bedDesignationList = clonedBedDesignationList;
+        clone.score = score;
         return clone;
     }
 
@@ -269,4 +283,4 @@
         return hashCodeBuilder.toHashCode();
     }
 
-}
\ No newline at end of file
+}

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/TravelingTournament.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/TravelingTournament.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/TravelingTournament.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -7,6 +7,8 @@
 
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.drools.solver.core.solution.Solution;
+import org.drools.solver.core.score.Score;
+import org.drools.solver.core.score.HardAndSoftScore;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
 
 /**
@@ -19,6 +21,8 @@
 
     private List<Match> matchList;
 
+    private HardAndSoftScore score;
+
     public List<Day> getDayList() {
         return dayList;
     }
@@ -43,6 +47,14 @@
         this.matchList = matchSets;
     }
 
+    public HardAndSoftScore getScore() {
+        return score;
+    }
+
+    public void setScore(Score score) {
+        this.score = (HardAndSoftScore) score;
+    }
+
     public int getN() {
         return teamList.size();
     }
@@ -69,6 +81,7 @@
             clonedMatchList.add(match.clone());
         }
         clone.matchList = clonedMatchList;
+        clone.score = score;
         return clone;
     }
 

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/java/org/drools/solver/examples/nqueens/NQueensSmokeTest.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/java/org/drools/solver/examples/nqueens/NQueensSmokeTest.java	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/test/java/org/drools/solver/examples/nqueens/NQueensSmokeTest.java	2009-08-17 13:32:37 UTC (rev 28959)
@@ -30,7 +30,7 @@
         solver.solve();
         Solution bestSolution = solver.getBestSolution();
         assertNotNull(bestSolution);
-        Score bestScore = solver.getBestScore();
+        Score bestScore = solver.getBestSolution().getScore();
         assertEquals(DefaultSimpleScore.valueOf(0), bestScore);
     }
 

Modified: labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt
===================================================================
--- labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt	2009-08-17 11:54:57 UTC (rev 28958)
+++ labs/jbossrules/trunk/drools-solver/src/main/assembly/docs/UpgradeFromPreviousVersionRecipe.txt	2009-08-17 13:32:37 UTC (rev 28959)
@@ -131,3 +131,57 @@
     <termination>
         <scoreAttained>...</scoreAttained>
     </termination>
+
+
+The interface Solution now has a Score property: Solution.getScore() and Solution.getScore()
+Before:
+    public class ... implements Solution {
+        ...
+    }
+After if you use a SimpleScore:
+    public class ... implements Solution {
+        ...
+        private SimpleScore score;
+        ...
+        public SimpleScore getScore() {
+            return score;
+        }
+        public void setScore(Score score) {
+            this.score = (SimpleScore) score;
+        }
+        ...
+    }
+After if you use a HardAndSoftScore:
+    public class ... implements Solution {
+        ...
+        private HardAndSoftScore score;
+        ...
+        public HardAndSoftScore getScore() {
+            return score;
+        }
+        public void setScore(Score score) {
+            this.score = (HardAndSoftScore) score;
+        }
+        ...
+    }
+
+The score property of a Solution needs to be cloned:
+Before:
+    public X cloneSolution() {
+        X clone = new X();
+        ...
+        return clone;
+    }
+After:
+    public X cloneSolution() {
+        X clone = new X();
+        ...
+        clone.score = score;
+        return clone;
+    }
+
+The Solver interface no longer has a method Solver.getBestScore().
+Before:
+     solver.getBestScore()
+After:
+     solver.getBestSolution().getScore()
\ No newline at end of file



More information about the jboss-svn-commits mailing list