Hi all,<div><br></div><div>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.</div>
<div><br></div><div>I've implement it as a hard constraint :</div><div><div>rule "hard-Seniority"</div><div><span style="white-space:pre-wrap">        </span>when</div><div><span style="white-space:pre-wrap">                </span>$employee : Employee()</div>
<div><span style="white-space:pre-wrap">                </span>$assignment : PlanifEventAssignment( $planifEmployee : employee )</div><div><span style="white-space:pre-wrap">                </span>not PlanifEventAssignment( employee == $employee )</div>
<div><span style="white-space:pre-wrap">                </span>eval(Helper.compareEmployee($employee, $planifEmployee) < 0)</div><div><span style="white-space:pre-wrap">        </span>then</div><div><span style="white-space:pre-wrap">                </span>insertLogical(new IntConstraintOccurrence("hard-Seniority",</div>
<div> <span style="white-space:pre-wrap">                </span>ConstraintType.NEGATIVE_HARD,</div><div> <span style="white-space:pre-wrap">                </span>1,</div><div> <span style="white-space:pre-wrap">                </span>$employee, $assignment));</div>
<div>end</div></div><div><br></div><div>The function Helper.compareEmployee(e1, e2) return -1 if e1 is more senior then e2 (mostly based on hire date and other boolean fields).</div><div><br></div><div>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:</div>
<div><br></div><div>PlanifEventAssignment1 = e2</div><div>PlanifEventAssignment2 = e3</div><div>PlanifEventAssignment3 = e4</div><div>PlanifEventAssignment4 = e5</div><div><br></div><div>e1 is not working. Multiple move are require to reach the best solution : </div>
<div><div>PlanifEventAssignment1 = e1</div><div>PlanifEventAssignment2 = e2</div><div>PlanifEventAssignment3 = e3</div><div>PlanifEventAssignment4 = e4</div><div><br></div><div>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 ?</div>
<div><br></div><div><div>-- <br>Patrik Dufresne<br>
</div></div></div>