[jboss-svn-commits] JBL Code SVN: r18115 - in labs/jbossrules/trunk/drools-solver: drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider and 5 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Jan 25 10:51:49 EST 2008
Author: ge0ffrey
Date: 2008-01-25 10:51:49 -0500 (Fri, 25 Jan 2008)
New Revision: 18115
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/decider/Decider.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptionListBasedForager.java
labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl
Log:
hard constraints should take studentSize into account
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 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/DefaultLocalSearchSolver.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -122,11 +122,12 @@
beforeDeciding();
Move nextStep = decider.decideNextStep();
if (nextStep == null) {
- logger.warn("No move accepted for step ({}). Finishing early.", getStepIndex());
+ logger.warn("No move accepted for step ({}) out of {} accepted moves. Finishing early.",
+ getStepIndex(), decider.getAcceptedMovesSize());
break;
}
- logger.info("Step ({}), time spend ({}) doing next step ({}).",
- new Object[]{getStepIndex(), getTimeMillisSpend(), nextStep});
+ logger.info("Step index ({}), time spend ({}) taking step ({}) out of {} accepted moves.",
+ new Object[]{getStepIndex(), getTimeMillisSpend(), nextStep, decider.getAcceptedMovesSize()});
stepDecided(nextStep);
nextStep.doMove(evaluationHandler.getStatefulSession());
stepScore = evaluationHandler.fireAllRulesAndCalculateStepScore();
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/Decider.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -11,4 +11,6 @@
Move decideNextStep();
+ int getAcceptedMovesSize();
+
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/DefaultDecider.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -1,5 +1,7 @@
package org.drools.solver.core.localsearch.decider;
+import java.util.List;
+
import org.drools.WorkingMemory;
import org.drools.solver.core.evaluation.EvaluationHandler;
import org.drools.solver.core.localsearch.LocalSearchSolver;
@@ -66,7 +68,8 @@
public Move decideNextStep() {
WorkingMemory workingMemory = localSearchSolver.getEvaluationHandler().getStatefulSession();
- for (Move move : selector.selectMoveList()) {
+ List<Move> moveList = selector.selectMoveList();
+ for (Move move : moveList) {
// Filter out not doable moves
if (move.isMoveDoable(workingMemory)) {
doMove(move);
@@ -104,6 +107,10 @@
forager.addMove(move, score, acceptChance);
}
+ public int getAcceptedMovesSize() {
+ return forager.getAcceptedMovesSize();
+ }
+
public void stepDecided(Move step) {
selector.stepDecided(step);
accepter.stepDecided(step);
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptionListBasedForager.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptionListBasedForager.java 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/AcceptionListBasedForager.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -24,7 +24,7 @@
@Override
public void beforeDeciding() {
- acceptionList = new ArrayList<Acception>();
+ acceptionList = new ArrayList<Acception>(); // TODO use size of moveList in decider
listSorted = false;
maxScore = Double.NEGATIVE_INFINITY;
acceptChanceMaxScoreTotal = 0.0;
@@ -67,6 +67,10 @@
return pickedMove;
}
+ public int getAcceptedMovesSize() {
+ return acceptionList.size();
+ }
+
public List<Move> getTopList(int topSize) {
sortAcceptionList();
int size = acceptionList.size();
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-core/src/main/java/org/drools/solver/core/localsearch/decider/forager/Forager.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -17,6 +17,8 @@
Move pickMove();
+ int getAcceptedMovesSize();
+
List<Move> getTopList(int topSize);
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -129,8 +129,8 @@
return getTopic().getDuration();
}
- public int getTopicStudentListSize() {
- return getTopic().getStudentListSize();
+ public int getTopicStudentSize() {
+ return getTopic().getStudentSize();
}
public int getPeriodDuration() {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -34,7 +34,7 @@
this.studentList = studentList;
}
- public int getStudentListSize() {
+ public int getStudentSize() {
return studentList.size();
}
@@ -66,7 +66,7 @@
}
public String toString() {
- return id + " {" + duration + ", " + getStudentListSize() + "}";
+ return id + " {" + duration + ", " + getStudentSize() + "}";
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -309,7 +309,7 @@
Collections.sort(sortedTopicList, new Comparator<Topic>() {
public int compare(Topic a, Topic b) {
return new CompareToBuilder()
- .append(a.getStudentListSize(), b.getStudentListSize()) // Ascending
+ .append(a.getStudentSize(), b.getStudentSize()) // Ascending
.append(b.getId(), a.getId()) // Descending (according to spec)
.toComparison();
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/solver/solution/initializer/ExaminationStartingSolutionInitializer.java 2008-01-25 15:51:49 UTC (rev 18115)
@@ -287,10 +287,10 @@
private int calculateTotalStudentSize(Exam innerExam) {
int innerTotalStudentSize = 0;
if (innerExam.getExamCoincidence() == null) {
- innerTotalStudentSize = innerExam.getTopicStudentListSize();
+ innerTotalStudentSize = innerExam.getTopicStudentSize();
} else {
for (Exam coincidenceExam : innerExam.getExamCoincidence().getCoincidenceExamSet()) {
- innerTotalStudentSize += coincidenceExam.getTopicStudentListSize();
+ innerTotalStudentSize += coincidenceExam.getTopicStudentSize();
}
}
if (innerExam.getExamBefore() != null) {
@@ -305,7 +305,7 @@
int innerMaximumDuration = innerExam.getTopic().getDuration();
if (innerExam.getExamCoincidence() != null) {
for (Exam coincidenceExam : innerExam.getExamCoincidence().getCoincidenceExamSet()) {
- innerMaximumDuration = Math.max(innerMaximumDuration, coincidenceExam.getTopicStudentListSize());
+ innerMaximumDuration = Math.max(innerMaximumDuration, coincidenceExam.getTopicStudentSize());
}
}
if (innerExam.getExamBefore() != null) {
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 2008-01-25 15:48:25 UTC (rev 18114)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/resources/org/drools/solver/examples/itc2007/examination/solver/examinationScoreRules.drl 2008-01-25 15:51:49 UTC (rev 18115)
@@ -57,6 +57,7 @@
$rightExam : Exam(topic == $rightTopic, period == $period);
then
insertLogical(new IntConstraintOccurrence("conflictingExamsInSamePeriod", ConstraintType.NEGATIVE_HARD,
+ $topicConflict.getStudentSize(),
$leftExam, $rightExam));
end
@@ -66,6 +67,7 @@
$exam : Exam(eval(topicDuration > periodDuration));
then
insertLogical(new IntConstraintOccurrence("periodDurationTooShort", ConstraintType.NEGATIVE_HARD,
+ $exam.getTopicStudentSize(),
$exam));
end
@@ -74,10 +76,10 @@
when
$period : Period();
$room : Room($capacity : capacity);
- $totalStudentListSize : Number(intValue > $capacity) from accumulate(
- Exam(period == $period, room == $room, $studentListSize : topicStudentListSize),
- // sumInteger($studentListSize) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
- sum($studentListSize)
+ $totalStudentSize : Number(intValue > $capacity) from accumulate(
+ Exam(period == $period, room == $room, $studentSize : topicStudentSize),
+ // sumInteger($studentSize) // Vote for http://jira.jboss.com/jira/browse/JBRULES-1075
+ sum($studentSize)
);
// HACK to fix wierd truth maintance behavior in drools
// because making weight part of the equals/hashcode doesn't cut it
@@ -85,10 +87,10 @@
ruleId == "roomCapacityTooSmall",
constraintType == ConstraintType.NEGATIVE_HARD,
causes contains $period, causes contains $room,
- eval(weight != ($totalStudentListSize.intValue() - $capacity))));
+ eval(weight != ($totalStudentSize.intValue() - $capacity))));
then
insertLogical(new IntConstraintOccurrence("roomCapacityTooSmall", ConstraintType.NEGATIVE_HARD,
- ($totalStudentListSize.intValue() - $capacity),
+ ($totalStudentSize.intValue() - $capacity),
$period, $room));
end
@@ -105,6 +107,7 @@
// LeftSide and rightSide don't share a student because those are filtered out in the InputConvertor
then
insertLogical(new IntConstraintOccurrence("periodHardConstraintExamCoincidence", ConstraintType.NEGATIVE_HARD,
+ ($leftSideTopic.getStudentSize() + $rightSideTopic.getStudentSize()),
$periodHardConstraint));
end
rule "periodHardConstraintExclusion"
@@ -118,6 +121,7 @@
Exam(topic == $rightSideTopic, period == $leftSidePeriod);
then
insertLogical(new IntConstraintOccurrence("periodHardConstraintExclusion", ConstraintType.NEGATIVE_HARD,
+ ($leftSideTopic.getStudentSize() + $rightSideTopic.getStudentSize()),
$periodHardConstraint));
end
rule "periodHardConstraintAfter"
@@ -132,14 +136,15 @@
$beforeSidePeriod : period);
// HACK to fix wierd truth maintance behavior in drools
// because making weight part of the equals/hashcode doesn't cut it
- not(IntConstraintOccurrence(
- ruleId == "periodHardConstraintAfter",
- constraintType == ConstraintType.NEGATIVE_HARD,
- causes contains $periodHardConstraint,
- eval(weight != ($beforeSidePeriod.getPeriodIndex() - $afterSidePeriod.getPeriodIndex() + 1))));
+// not(IntConstraintOccurrence(
+// ruleId == "periodHardConstraintAfter",
+// constraintType == ConstraintType.NEGATIVE_HARD,
+// causes contains $periodHardConstraint,
+// eval(weight != ($beforeSidePeriod.getPeriodIndex() - $afterSidePeriod.getPeriodIndex() + 1))));
then
insertLogical(new IntConstraintOccurrence("periodHardConstraintAfter", ConstraintType.NEGATIVE_HARD,
- ($beforeSidePeriod.getPeriodIndex() - $afterSidePeriod.getPeriodIndex() + 1),
+// ($beforeSidePeriod.getPeriodIndex() - $afterSidePeriod.getPeriodIndex() + 1),
+ ($leftSideTopic.getStudentSize() + $rightSideTopic.getStudentSize()),
$periodHardConstraint));
end
@@ -151,9 +156,10 @@
$topic : topic
)
Exam(topic == $topic, $room : room);
- Exam(topic != $topic, room == $room);
+ Exam(room == $room, topic != $topic, $otherTopic : topic);
then
insertLogical(new IntConstraintOccurrence("roomHardConstraintExclusive", ConstraintType.NEGATIVE_HARD,
+ ($topic.getStudentSize() + $otherTopic.getStudentSize()),
$roomHardConstraint));
end
More information about the jboss-svn-commits
mailing list