Nano Hash - криптовалюты, майнинг, программирование

Drools Таблица решений Действие Порядок выполнения

У меня есть таблица решений Drools (см. ниже), в соответствии с которой правило 2 имеет условие, которое проверяет, находится ли показатель питательных веществ между определенным порогом, и выполняет действие на основе этого условия. Существует начальное правило (ПРАВИЛО 1), которое выполняет проверку и выполняет свое действие, которое обновляет общие оценки, которые я хочу, чтобы Правило 2 использовало при выполнении его условий.

Что я ожидаю/нужно:

Правило 1 для запуска, если условие выполнено, то обновите общий балл $model (путем выполнения его действия), а затем запустите правило 2 и для его условий используйте обновленное значение балла, которое было обновлено при выполнении действия правила 1.

Что происходит на самом деле

Правило 1 выполняет свое условие, Правило 2 выполняет свое условие, действие Правила 1 выполняется, действие Правила 2 выполняется. Правило 2 запускается до того, как запустится действие Правила 1, и поэтому использует устаревшую оценку.

Я доказал (я думаю), изменив значение приоритета/значимости, что я могу изменить порядок, в котором правила выполняют свои условия, но кажется, что все условия правил выполняются до действий. Я ожидал, что действие Правила 1 будет выполнено до следующего правила.

Я принципиально неправильно понял концепцию? Явная ошибка? Или, если у кого-то есть предложенный обходной путь, это было бы здорово.

Чтобы уточнить, это сеанс ки без состояния.

Заранее спасибо, это сводит меня с ума!

введите здесь описание изображения

19.03.2021

  • если вы не вызовете update или insert в правой части/последствиях, любые сделанные вами изменения фактически невидимы для условных выражений и не будут учитываться при оценке. этот ответ я написал на другом вопрос объясняет это дальше; тот другой вопрос был конкретно о DRL, но те же самые концепции используются для таблиц решений. 20.03.2021
  • Это именно то, чего мне не хватало! Вы хотите добавить в качестве ответа, чтобы я мог отдать вам должное? Большое спасибо в любом случае! 22.03.2021

Ответы:


1

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

По мере выполнения правил они могут изменять рабочую память, как в вашем примере. Однако, если вы явно не сообщите Drools, что делаете это, он не будет переоценивать совпадения. К моменту выполнения правил фаза матча уже завершена.

Можно сообщить Drools, что вы модифицируете рабочую память и вам нужно переоценить ее правила на основе новых данных. Для этого нужно воспользоваться одним из встроенных методов:

Method Explanation
insert Put a new fact into working memory.
delete or retract Removes some information (object/s) from working memory.
update Update/replace a fact in working memory.
modify Change fields inside of a fact in working memory.

Какой из них вы выберете, зависит от того, что вы пытаетесь сделать. Обратите внимание, что вызов 'update' вызовет повторную оценку всех совпадений... это эквивалентно вызову правил пожарной безопасности во второй раз с новыми данными (поэтому одно и то же правило может срабатывать несколько раз, что может быть, а может и не быть преднамеренным). Для сравнения, insert будет оценивать только последующие правила, чтобы определить, соответствуют ли они теперь новым условиям или нет.

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

Я обсуждаю эту концепцию более подробно в этот ответ конкретно о DRL. Те же принципы применимы к таблицам решений.

23.03.2021
  • Идеальное объяснение. Спасибо. 24.03.2021
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..