2011/10/14 Geoffrey De Smet <ge0ffrey.spam(a)gmail.com>
**
Probably you forgot to notify the workingMemory.update in the doMove
method:
public void doMove(WorkingMemory workingMemory) {
FactHandle factHandle = workingMemory.getFactHandle(activity);
activity.setAssignee(...);
workingMemory.update(factHandle, activity);
}
Op 14-10-11 09:21, Geoffrey De Smet schreef:
A corrupted score normally indicates a problem with the Move implementation
(or sometimes the score drl).
Basically this happened: for a number of moves, it did the move, calculated
the score and undo the move.
One of those move was associated with a score -10hard/0soft, that was the
best one.
Now, it does that move (which is now called the "step") and when it
calculates the score it's a different score 0hard/0soft.
Try TRACE environment and see if it crashes sooner. Copy paste your Move
implementation here.
Using the TRACE environment gave the same results of DEBUG.
Here's my move implementation, as well as the snipet of drools rule file
that calculates the score based on remaining activities:
http://pastebin.mozilla.org/1355014
In Planner 5.4 there will be 2 out-of-the-box Move implementations to
use,
so writing Move's become optional.
Cool!
By the way, I'm using Drools 5.2.0 final.
Thanks,
Op 13-10-11 16:37, Guilherme Kunigami schreef:
Hi,
I've implemented a very simple application using drools planner
consisting of a bunch of activities. My rule file is very simple too and
just counts the number of activities not assigned. When I run
Solver.solve(), I get the following error message:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException:
The presumedScore (-10hard/0soft) is corrupted because it is not the
realScore (0hard/0soft).
Presumed workingMemory:
Score rule (remainingActivitiesCount) has count (1) and weight total
(11).
Real workingMemory:
Score rule (remainingActivitiesCount) has count (1) and weight total (0).
I've tracked down this message and found this piece of code
@DefaultLocalSearchSolver.solveImplementation():
// there is no need to recalculate the score, but we still need to set
it
localSearchSolverScope.getWorkingSolution().setScore(localSearchStepScope.getScore());
if (assertStepScoreIsUncorrupted) {
localSearchSolverScope.assertWorkingScore(localSearchStepScope.getScore());
}
It seems that the working score is never updated along the algorithm, but
the score in the working memory changes. Thus, when we use the DEBUG
environment, assertStepScoreIsUncorrupted is turned on and the assertion
fails.
Should the score be updated or am I using the library incorrectly?
Thanks,
_______________________________________________
rules-users mailing
listrules-users@lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
--
With kind regards,
Geoffrey De Smet
_______________________________________________
rules-users mailing
listrules-users@lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
--
With kind regards,
Geoffrey De Smet
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users