Отличительность в слюнях - PullRequest
       12

Отличительность в слюнях

3 голосов
/ 09 сентября 2010

Каков результат нескольких правил, имеющих одинаковую значимость?Является ли их порядок выполнения просто порядком, в котором они перечислены, или это поведение не определено, то есть они проверены в произвольном порядке?Я не могу найти документацию о том, как это обрабатывается внутри.

Ответы [ 3 ]

12 голосов
/ 09 сентября 2010

Короткий ответ: вы не должны полагаться на порядок применения правил одинакового значения - если они «находятся в конфликте» (т.е. оба имеют право на стрельбу). Правила без значимости - это просто нулевые, кстати.

Конечно, это детерминистично - просто алгоритм может меняться между версиями (хотя и не очень).

Это относится к общей области "разрешения конфликтов", и об этом много написано. Я не могу найти текущую статью о стратегии Drools - но я полагаю, что большая ее часть - это «свежесть» - то есть последний измененный / вставленный факт «выигрывает» - или, скорее, победят правила, которые ссылаются на самый последний факт. Если после всего этого он не может решить - это обычно порядок загрузки правил (что обычно совпадает с тем, как они записаны в файле). Если у вас должен быть заказ - используйте отчетливость, или используйте поток правил или аналогичный, лучше не гадать, как он будет работать.

2 голосов
/ 03 ноября 2011

Алгоритм Rete использовал свежесть и специфику условий.

1 голос
/ 01 ноября 2010

Мой опыт работы с Drools 5.1 заключается в том, что он последним, первым вышел. То есть правило, определенное последним в вашем drl, будет выполнено первым.

Но да, полагаться на такое поведение было бы не самой лучшей идеей:)

...