Re: [rules-users] [planner] The presumed score is corrupted

2011-10-17 Thread Guilherme Kunigami
2011/10/14 Geoffrey De Smet ge0ffrey.s...@gmail.com

 **
 In your doMove you're doing:

 crew.addActivity(activity);
 remainingActivities.remove(activity);

 If crew and/or remainingActivities are used by your score rules, the
 working memory should be notified of their changes.
 That's causing the corruption


Hmm, actually the only object that are being used by the score rules is an
activity. Here's the corresponding .drl:

rule remainingActivitiesCount
 when
$remainingCount : Number() from accumulate(
  $activity : ActivityBundle(),
sum(1)
)
then
insertLogical(new
IntConstraintOccurrence(remainingActivitiesCount,
ConstraintType.NEGATIVE_HARD,
$remainingCount.intValue(),
null));
end



 Extra advice:
 I think you're making your moves too complex and your domain model too
 complex.
 If you upgrade to 5.3, it will be hard to identify the planning entities.
 There will be many (and I doubt you need more than 1).
 Read

 http://docs.jboss.org/drools/release/5.3.0.CR1/drools-planner-docs/html_single/index.html#d0e1411
 and specificly this note in that chapter:

 *Do not create unnecessary planning entity classes.* This leads to
 difficult Move implementations and slower score calculation.

 For example, do not create a planning entity class to hold the total free
 time of a teacher, which needs to be kept up to date as the Lectureplanning 
 entities change. Instead, calculate the free time in the score
 constraints and put the result per teacher into a logically inserted score
 object.

 If historic data needs to be considered too, then create problem fact to
 hold the historic data up to, but *not including*, the planning window (so
 it doesn't change when a planning entity changes) and let the score
 constraints take it into account.


Thanks for the advice. I'll rethink my model and try to use a single
planning entity.





 Op 14-10-11 15:48, Guilherme Kunigami schreef:



 2011/10/14 Geoffrey De Smet ge0ffrey.s...@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


 ___
 

Re: [rules-users] [planner] The presumed score is corrupted

2011-10-14 Thread Geoffrey De Smet
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.
In Planner 5.4 there will be 2 out-of-the-box Move implementations to 
use, so writing Move's become optional.


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 list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


--
With kind regards,
Geoffrey De Smet

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] [planner] The presumed score is corrupted

2011-10-14 Thread Geoffrey De Smet

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.
In Planner 5.4 there will be 2 out-of-the-box Move implementations to 
use, so writing Move's become optional.


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 list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


--
With kind regards,
Geoffrey De Smet


___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


--
With kind regards,
Geoffrey De Smet

___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] [planner] The presumed score is corrupted

2011-10-14 Thread Guilherme Kunigami
2011/10/14 Geoffrey De Smet ge0ffrey.s...@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@lists.jboss.org
 https://lists.jboss.org/mailman/listinfo/rules-users


___
rules-users mailing list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


Re: [rules-users] [planner] The presumed score is corrupted

2011-10-14 Thread Geoffrey De Smet

In your doMove you're doing:

crew.addActivity(activity);
remainingActivities.remove(activity);

If crew and/or remainingActivities are used by your score rules, the 
working memory should be notified of their changes.

That's causing the corruption


Extra advice:
I think you're making your moves too complex and your domain model too 
complex.
If you upgrade to 5.3, it will be hard to identify the planning 
entities. There will be many (and I doubt you need more than 1).

Read
  
http://docs.jboss.org/drools/release/5.3.0.CR1/drools-planner-docs/html_single/index.html#d0e1411

and specificly this note in that chapter:


/Do not create unnecessary planning entity classes./This leads to 
difficult |Move| implementations and slower score calculation.


For example, do not create a planning entity class to hold the total 
free time of a teacher, which needs to be kept up to date as the 
|Lecture| planning entities change. Instead, calculate the free time 
in the score constraints and put the result per teacher into a 
logically inserted score object.


If historic data needs to be considered too, then create problem fact 
to hold the historic data up to, but /not including/, the planning 
window (so it doesn't change when a planning entity changes) and let 
the score constraints take it into account.






Op 14-10-11 15:48, Guilherme Kunigami schreef:



2011/10/14 Geoffrey De Smet ge0ffrey.s...@gmail.com 
mailto:ge0ffrey.s...@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 tel:13-10-11%2016: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 list
rules-users@lists.jboss.org  mailto:rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


-- 
With kind regards,

Geoffrey De Smet


___
rules-users mailing list
rules-users@lists.jboss.org  mailto:rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users


-- 
With kind regards,

Geoffrey De Smet


___
rules-users mailing list
rules-users@lists.jboss.org mailto:rules-users@lists.jboss.org

[rules-users] [planner] The presumed score is corrupted

2011-10-13 Thread Guilherme Kunigami
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 list
rules-users@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users