Оценка на основе затрат в Drools? - PullRequest
0 голосов
/ 21 июня 2011

У меня есть проблема, которую я могу решить с помощью механизма правил, и наша команда уже писала приложения, используя Drools (но я новичок в этом, поэтому извиняюсь за вопрос новичка).

Одна из моих проблем -что один из фактов действительно дорог для вычисления (REST-вызовы на удаленный сервер).Я предполагаю, что это означает функцию eval Drools для отложенной оценки.

Но также я действительно хочу перенести этот конкретный факт в конец порядка оценки.Я действительно не хочу, чтобы алгоритмы Drools решили, что «ответ этой функции - действительно эффективный способ разбить набор правил» - возможно, если бы затраты были несущественными, но этот намного дороже, чем другие.

У Drools есть какие-то инструменты / хаки для решения этой проблемы или это не тот инструмент для этой проблемы?

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

eval () не выполняет отложенную оценку;он просто оценивает логическое выражение, которое не может быть выражено в синтаксисе шаблона DRL.Это должно быть менее распространенным в 5.2, поскольку оно поддерживает более богатые выражения в свободной форме в шаблонах.

Относительно вашего конкретного вопроса о дорогих фактах;Предварительная загрузка перед использованием в Базе знаний, вероятно, будет вашим лучшим вариантом (как говорит Гоффи).Я предполагаю, что если их вычисления после загрузки дороги, они довольно статичны.

По слухам, после 5.2 существуют планы асинхронного «от», чтобы шаблоны могли реагировать на факты, загруженные асинхронно.Это было упомянуто во время длительного перелета из Аргентины, и на данный момент его лучше всего рассматривать etherware , но нажмите на него в списке рассылки drools-user, и может появиться что-то более конкретное.

0 голосов
/ 21 июня 2011

Если вы можете предварительно загрузить факты REST, сделайте это, чтобы Drools мог оптимизировать индексацию (хэширование) и присоединение к ним.Если нет, у вас есть ситуация, похожая на использование hibernate напрямую для drools с from.

Некоторые вещи, которые вы можете сделать: Посмотрите на salience в руководстве, чтобы выполнить эти правила последними.Кроме того, поставьте ваш eval() последний в вашем правиле LHS.

...