[rules-users] Hard constraints to enforce employee seniority
Geoffrey De Smet
ge0ffrey.spam at gmail.com
Fri Dec 9 02:38:19 EST 2011
Op 08-12-11 23:35, Patrik Dufresne schreef:
> Thanks Geoffrey,
>
> I really like you're suggestion to use intermediate facts to keep the
> employee's seniority. After this email, I will try to implement it,
> but I do have a question about your way to implement it. Since my goal
> is to make senior employee ($higherRankedEmployee) work before a less
> senior employee ($lowerRankedEmployee), I think the rule should
> contain a 'not' or a 'not exists' expression. It may be stated as
> follow :
Yep a "not" is missing, apparently my hands didn't type what my brains
were thinking :)
"not exists" is not possible (or doesn't make sense), because it's the
same as just "not" afaik.
>
> rule "hard-Seniority"
> when
> EmployeeRanking($higherRankedEmployee, $lowerRankedEmployee,
> $numberOfEmployeesInRankBetweenThem)
> PlanifEventAssignment(employee == $lowerRankedEmployee)
> not PlanifEventAssignment(employee == $higherRankedEmployee)
> then
> insertLogical(new IntConstraintOccurrence("hard-Seniority",
> ConstraintType.NEGATIVE_HARD,
> $numberOfEmployeesInRankBetweenThem,
> $employee, $assignment));
> end
>
> Thanks
>
> 2011/12/8 Geoffrey De Smet <ge0ffrey.spam at gmail.com
> <mailto:ge0ffrey.spam at gmail.com>>
>
>
>
> Op 07-12-11 21:41, Patrik Dufresne schreef:
>> Hi all,
>>
>> I'm trying to create rules to model my problem. So far, I didn't
>> manage to create rules to make Drools converge to a solution
>> because of score traps. I don't see any way to avoid it (as I'm
>> not an expert with Drools). I can express the rule as follow : a
>> senior employee should work before a less senior employee.
>>
>> I've implement it as a hard constraint :
>> rule "hard-Seniority"
>> when
>> $employee : Employee()
>> $assignment : PlanifEventAssignment( $planifEmployee : employee )
> What's does this $planifEmployee do?
>
>> not PlanifEventAssignment( employee == $employee )
>> eval(Helper.compareEmployee($employee, $planifEmployee) < 0)
>> then
>> insertLogical(new IntConstraintOccurrence("hard-Seniority",
>> ConstraintType.NEGATIVE_HARD,
>> 1,
>> $employee, $assignment));
>> end
>>
>> The function Helper.compareEmployee(e1, e2) return -1 if e1 is
>> more senior then e2 (mostly based on hire date and other boolean
>> fields).
>>
> On first sight, in Solution.getProblemFact() I would add these
> cached problem facts, for any 2 employees (but just once per
> combination):
> new EmployeeRanking(higherRankedEmployee, lowerRankedEmployee,
> numberOfEmployeesInRankBetweenThem)
>
> then you can do
> rule "hard-Seniority"
> when
> EmployeeRanking($higherRankedEmployee,
> $lowerRankedEmployee, $numberOfEmployeesInRankBetweenThem)
> PlanifEventAssignment(employee == $lowerRankedEmployee)
> PlanifEventAssignment(employee == $higherRankedEmployee)
>
> then
> insertLogical(new IntConstraintOccurrence("hard-Seniority",
> ConstraintType.NEGATIVE_HARD,
> $numberOfEmployeesInRankBetweenThem,
> $employee, $assignment));
>
>
>> This way, the rule make sure a senior employee is working. But
>> it's a score trap since, many moves are required to resolve the
>> constraint. e.g:
>>
>> PlanifEventAssignment1 = e2
>> PlanifEventAssignment2 = e3
>> PlanifEventAssignment3 = e4
>> PlanifEventAssignment4 = e5
>>
>> e1 is not working. Multiple move are require to reach the best
>> solution :
>> PlanifEventAssignment1 = e1
>> PlanifEventAssignment2 = e2
>> PlanifEventAssignment3 = e3
>> PlanifEventAssignment4 = e4
>>
>> So I'm asking you. What is the best way to make Drools converge ?
>> Do I need to change my rule, or should I create a BigMove ?
> course grained moves will work mostly, but solving the score trap
> itself is a far better long-term solution (and it still allows you
> to add course grained moves later).
>>
>> --
>> Patrik Dufresne
>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
>> https://lists.jboss.org/mailman/listinfo/rules-users
>
> --
> With kind regards,
> Geoffrey De Smet
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org <mailto:rules-users at lists.jboss.org>
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
>
> --
> Patrik Dufresne
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
--
With kind regards,
Geoffrey De Smet
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20111209/071257cf/attachment.html
More information about the rules-users
mailing list