Wednesday, December 12, 2007

Drools solver Javapolis 2007 slides

The BOF was a success and as promised, I 've posted the slides online:
People asked a bunch of interesting questions afterwards.
One question I felt I left a bit unanswered: how do you weigh your constraints in DRL? So, here's a code example that should answer that question too:

rule "twoExamsInARow"
when
// ...
then
insertLogical(new IntConstraintOccurrence(
"twoExamsInARow",
10, // weight
$leftExam, $rightExam));
end

rule "twoExamsInADay"
when
// ...
then
insertLogical(new IntConstraintOccurrence(
"
twoExamsInADay",
1, // weight
$leftExam, $rightExam));
end

rule "softConstraintsBroken"
when
$total : Double() from accumulate(
IntConstraintOccurrence($weight : weight),
sum($
weight)
);
then
scoreCalculator.setSoftConstraintsBroken($total.intValue());
end

So the 2 in a row constraint is 10 times heavier than the 2 in a day constraint.
Share/Bookmark