Разъяснение правил Drools в приложении NurseRostering

Я столкнулся с проблемами в понимании правил Drools, которые реализованы в одном из демонстрационных примеров OptaPlanner (приложение NurseRostering). Может ли кто-нибудь объяснить, как работает приведенное ниже правило:

// a nurse can only work one shift per day, i.e. no two shift can be assigned to the same nurse on a day.
rule "oneShiftPerDay"
when
    $leftAssignment : ShiftAssignment($leftId : id, $employee : employee, $shiftDate : shiftDate)
    $rightAssignment : ShiftAssignment(employee == $employee, shiftDate == $shiftDate, id > $leftId)
then
    insertLogical(new IntConstraintOccurrence("oneShiftPerDay", ConstraintType.NEGATIVE_HARD,
            1,
            $leftAssignment, $rightAssignment));
end

Есть ли какие-либо ресурсы, в которых подробно рассказывается об объяснении правил и того, как они реализуются? Когда я проверяю некоторые примеры в Интернете и в некоторых книгах, мне довольно легко понять, однако, когда я проверяю образцы, представленные в Drools, я не могу понять.


person Ranjith Nair    schedule 25.06.2013    source источник


Ответы (2)


when
    // When a specific shift with id $leftId is assigned to employee $employee and that shift is on date $shiftDate
    $leftAssignment : ShiftAssignment($leftId : id, $employee : employee, $shiftDate : shiftDate)
    // AND there is another shift assigned to the same for the same date and with a higher id
    $rightAssignment : ShiftAssignment(employee == $employee, shiftDate == $shiftDate, id > $leftId)
then
    // Then this solution is penalized: it gets -1 hard score point
    scoreHolder.addHardConstraintMatch(kcontext, -1);

Примечание. На той стороне я использовал синтаксис OptaPlanner 6 (вместо устаревшего синтаксиса Planner 5.x) , потому что это быстрее и проще.

О части id < $leftId: это для того, чтобы убедиться, что Drools сопоставляет только ShiftAssignment A с ShiftAssignment B (который дает A-B), а не A-A, B-B, B-A тоже, чтобы избежать слишком больших штрафов.

person Geoffrey De Smet    schedule 26.06.2013

Ради изучения синтаксиса DRL рекомендую прочитать документацию Drools здесь:

http://docs.jboss.org/drools/release/6.0.0.CR1/drools-expert-docs/html/ch04.html.

Насколько я понимаю, это помогло мне немного больше, чем Документы OptaPlanner / Drools Planner относительно настроек правил.

person mchlfchr    schedule 22.08.2013