Querying rules engine что это
What is Rule-Engine?
Oct 3, 2019 · 6 min read
Here I’m trying to explain rule-engine in a very simple way. Let’s start with the problem. Suppose if I tell you that you have to build a bank application, where you have to implement the logic like mentioned below.
You can easily implement these types of rules or logic in your application. But If you will get some additional requirements like:
Terminologies:
Knowledge in the form of rules:
Now let’s try to understand rule-engine.
Rule-Engine
It is an expert-system program, which runs the rules on the data and if any condition matches then it executes the corresponding actions.
In the above diagram, it’s showed that we collect knowledge in the form of rules (if-then form) and stored them in any store. The rules could be stored in any storage like files or databases. Now inference engine picks the rules according to requirements and runs them on input data or query. If any patterns/condition matches then it performs the corresponding action and returns the result or solution.
Inference-Engine
The inference engine is the component of the intelligent system in artificial intelligence, which applies logical rules to the knowledge base to infer new information from known facts. The first inference engine was part of the expert system. Inference engine commonly proceeds in two modes, which are:
Inference-Engine’s program works in three phases to execute the rule on given data.
Phase 1 — Match: In this phase, the inference engine matches the facts and data against the set of rules. This process called pattern matching.
An algorithm which we can use for pattern matching are:
Drools is one of the implementations of rule-engine and use the Rete Algorithm for pattern matching. It is one of the best algorithms for pattern matching.
The output of the first phase is a conflict set. Conflict set means, for the same fact or condition, it might be possible that more than one rule is satisfied. So it returns the set of conflict rules.
Phase 2 — Resolve: In this phase, the inference engine manages the order of conflicting rules. It resolves the conflict and gives the selected one rules. For resolving conflict it could use any of the following algorithms.
Phase 3 — Execute: In this phase, the inference engine simply runs the action of the selected rule on given data and return the output/result to the client.
Inference Methods:
Rule engines generally use one of the following inference methods to implement an inference engine.
But before understanding the inference method, let’s understand the reasoning. There are two types of reasoning.
1. Goal-Directed/Backward Reasoning: It is working backward from the goal. Here we start from the main goal and then will go for sub-goals. So in goal-directed reasoning, if we want to achieve the main goal then we have to think that “ to achieve the main goal, what sub-goals we have to achieve.”
Example: If we plan for an evening out, and for this, we plan to go for a movie, outing, and dinner. Then evening out is our main goal and the movie, outing and dinner are the sub-goals of the main goal.
2. Data-Driven/Forward Reasoning: It starts with the available data and uses rules to extract more data until a goal is reached. Here we look at data and if we found some pattern then it performs respective action.
Example: Suppose we have to figure out the color of a pet named Fritz with given rules and data.
Here using given rules and data we can extract more data like:
So now let’s discuss the Inference Methods:
There is one more category called Hybrid chaining. Drools use it. It is a combination of both forward and backward chaining.
Advantages of rule-engine
We can consider the all above specific requirements in the given example as the advantages of the rule engine.
Implementation of rule-engine
There are many implementations are available for rules-engine. Few are like:
Что такое Rule-Engine?
Дата публикации Oct 3, 2019
Здесь я пытаюсь объяснить механизм правил очень простым способом. Давайте начнем с проблемы. Предположим, если я скажу вам, что вам нужно создать банковское приложение, в котором вы должны реализовать логику, как указано ниже.
Вы можете легко реализовать эти типы правил или логики в своем приложении. Но если вы получите некоторые дополнительные требования, такие как:
Для достижения всех этих требований в нашем приложении мы можем использоватьПравило двигатель,Но прежде чем запускать механизм правил, давайте разберемся с несколькими терминологиями и опытом.
терминологической:
Условие также известно какфакт или предшественники или шаблоны, И действие также известно какследствие,
Знание в виде правил:
Теперь давайте попробуем разобраться с движком правил.
Правило-Engine
Это программа экспертной системы, которая запускает правила для данных и, если выполняется какое-либо условие, выполняет соответствующие действия.
На приведенной выше диаграмме показано, что мы собираем знания в форме правил (форма if-then) и храним их в любом магазине. Правила могут храниться в любом хранилище, таком как файлы или базы данных. Теперь механизм вывода выбирает правила в соответствии с требованиями и запускает их на входных данных или запросах. Если какие-либо шаблоны / условия соответствуют, тогда он выполняет соответствующее действие и возвращает результат или решение.
Механизм логического вывода
Программа Inference-Engine работает в три этапа, чтобы выполнить правило для данных.
Алгоритм, который мы можем использовать для сопоставления с образцом:
Droolsявляется одной из реализаций двигателя правил и использоватьАлгоритм повторениядля сопоставления с образцом. Это один из лучших алгоритмов для сопоставления с образцом.
Выход первого этапа является конфликтным набором.Конфликтный набор означает, что для одного и того же факта или условия может быть возможно, что выполняется более одного правила. Таким образом, он возвращает набор правил конфликта.
Методы вывода:
В правилах двигателей обычно используется одно из следующихметоды выводареализовать механизм вывода.
Но прежде чем понять метод логического вывода, давайте разберемсярассуждения, Есть два типа рассуждений.
1. Направленная на цель / обратная аргументация:Это работает в обратном направлении от цели Здесь мы начнем с основной цели, а затем перейдем к подцелям. Таким образом, в целенаправленных рассуждениях, если мы хотим достичь главной цели, мы должны думать, что «чтобы достичь главной цели, какие подцели мы должны достичь ».
Пример:Если мы планируем провести вечер, и для этого мы планируем пойти в кино, на прогулку и на ужин. затемвечернаша главная цельикино, прогулка и ужинявляются подцелями основной цели,
2. Обоснование данных / пересылка:Он начинается с доступных данных и использует правила для извлечения дополнительных данных, пока не будет достигнута цель. Здесь мы смотрим на данные, и если мы нашли какой-то шаблон, то он выполняет соответствующее действие.
Пример:Предположим, мы должны выяснитьокрас питомца по кличке Фрицс заданными правилами и данными.
Здесь, используя данные правила и данные, мы можем извлечь больше данных, таких как:
Итак, теперь давайте обсудим методы вывода:
Прямая цепочка:
Обратная цепочка:
Есть еще одна категория под названиемГибридная цепочка, Слюни используют это. Это сочетание прямой и обратной цепочки.
Преимущества правила двигателя
Все приведенные выше конкретные требования в данном примере можно рассматривать как преимущества механизма правил.
Реализация правил двигателя
Есть много реализаций, доступных для движка правил. Немного похоже на:
rules engine
Смотреть что такое «rules engine» в других словарях:
Business rules engine — A business rules engine is a software system that executes one or more business rules in a runtime production environment. The rules might come from legal regulation ( An employee can be fired for any reason or no reason but not for an illegal… … Wikipedia
Engine swap — Warning: in some jurisdictions with strict smog rules it may not be possible to register a late model vehicle with an engine swap, even if it can be proven that it produces less pollution than the original engine (owing to visual inspection… … Wikipedia
Engine (computer science) — An engine is a continuation based construct that provides timed preemption. Engines which can contain other engines are sometimes called nesters and engines which don t have this ability are then called flat engines. To implement timed preemption … Wikipedia
Inference engine — In computer science, and specifically the branches of knowledge engineering and artificial intelligence, an inference engine is a computer program that tries to derive answers from a knowledge base. It is the brain that expert systems use to… … Wikipedia
Business rules approach — Business rules are abstractions of the policies and practices of a business organization. The Business Rules Approach is a development methodology where rules are in a form that is used by, but does not have to be embedded in business process… … Wikipedia
Cleverpath AION Business Rules Expert — (formerly Platinum AIONDS, and before that Trinsic AIONDS, and originally Aion) is an expert system and Business rules engine owned by Computer Associates by 2005.[1] The product was created around 1986 as Aion by the Aion company. In its initial … Wikipedia
Parser Grammar Engine — The Parser Grammar Engine (originally Parrot Grammar Engine) or PGE is a compiler and runtime for a Perl 6 rules for the Parrot virtual machine. [cite web | url=http://search.cpan.org/ ltoetsch/parrot 0.2.2/compilers/pge/README | title=Parrot… … Wikipedia
NASCAR rules and regulations — The National Association for Stock Car Auto Racing (NASCAR) makes and enforces numerous rules and regulations that transcend all racing series. NASCAR issues a different rule book for each racing series; however, rule books are published… … Wikipedia
Pontiac V8 engine — From 1955 to 1981 the Pontiac Division of General Motors manufactured its own, unique V8 engines, distinct from Buick, Cadillac, Chevrolet, or Oldsmobile. Displacement began at 287 in³ and grew as large as 455 in³ (7.5 L) by 1970. Pontiac s… … Wikipedia
RulesEngine
Should I use a Rules Engine?
The subtlety is that rules can be written in any order, the engine decides when to evaluate them using whatever order makes sense for it. A good way of thinking of it is that the system runs through all the rules, picks the ones for which the condition is true, and then evaluates the corresponding actions. The nice thing about this is that many problems naturally fit this model:
A rules engine is a tool that makes it easier to program using this computational model. It may be a complete development environment, or a framework that can work with a traditional platform. Most of what I’ve seen in recent years are tools that are designed to fit in with an existing platform. At one time there was the notion of building an entire system using a tool like this, but now people (wisely) tend to use rule engines just for the sections of a system. The production rule computational model is best suited for only a subset of computational problems, so rules engines are better embedded into larger systems.
You can build a simple rules engine yourself. All you need is to create a bunch of objects with conditions and actions, store them in a collection, and run through them to evaluate the conditions and execute the actions. But mostly when people refer to «rules engine» they mean a product built specifically to help you build and run a rules engine. Techniques to specify rules can vary from an API for people to describe rules as Java objects, a DSL to express rules, or a GUI that allows people enter rules. More efficient execution engines help to quickly evaluate conditions on hundreds of rules using specialized algorithms (such as the Rete algorithm).
I’ve run into a few cases where people have made use of rules engine products, and each time things don’t seem to have worked out well (disclaimer: I’m not a statistically valid sample). Often the central pitch for a rules engine is that it will allow the business people to specify the rules themselves, so they can build the rules without involving programmers. As so often, this can sound plausible but rarely works out in practice.
I haven’t spent enough time with these systems to get a sense of what heuristics we should follow to keep this implicit behavior under control.
All of these lead me to think that there’s a lot to be said for avoiding rules engine products. The basic idea of production rules is very simple. In order to keep the implicit behavior under control you also need to limit the number of rules by keeping the rules within a narrow context. This would argue for a more domain specific approach to rules, where a team builds a limited rules engine that’s only designed to work within that narrow context. Certainly if you’re thinking of using a rules engine I’d suggest prototyping with both a product and a hand-rolled domain specific approach so you can get a good feel for how they would compare.
For more information on building your own simple rules engine, including a couple of toy examples, see the Production Rules System chapter of my DSL book.
Поскольку у меня пока нет с ними опыта, просто любопытство, мне было интересно услышать о плюсах и минусах использования механизма правил? Единственный профессионал, о котором я могу подумать, это то, что вам не нужно перестраивать все приложение целиком, чтобы просто изменить какое-то бизнес-правило (но на самом деле, сколько приложений действительно имеет столько изменений?). Но использование движка правил для решения этой проблемы для меня звучит как наложение бинта на рану дробовика.
Большинство систем правил, которые я видел, рассматриваются как черный ящик системным кодом. Если бы я строил модель предметной области, я бы хотел, чтобы определенные бизнес-правила были неотъемлемой частью модели предметной области, например, бизнес-правила, которые говорят мне, когда объект имеет недопустимые значения. Это позволяет нескольким системам совместно использовать модель домена без дублирования бизнес-логики. Я мог бы заставить каждую систему использовать одну и ту же службу правил для проверки моей доменной модели, но это, похоже, ослабляет мою доменную модель (как было указано в вопросе). Зачем? Поскольку вместо того, чтобы постоянно обеспечивать соблюдение моих бизнес-правил во всех системах, я полагаюсь на системных программистов, чтобы определить, когда следует применять бизнес-правила (вызывая службу правил). Это может не быть проблемой, если модель предметной области приходит к вам полностью заполненной, но может быть проблематично, если вы имеете дело с пользовательским интерфейсом или системой, которая изменяет значения в модели предметной области в течение срока ее службы.
Я думаю, что ваши опасения по поводу анемичных моделей предметной области верны.
Я видел два приложения известного коммерческого движка правил Rete, работающего на производстве, где я работаю. Я бы посчитал один успехом, а другой неудачей.
Успешное приложение представляет собой приложение дерева решений, состоящее из
30 точек ветвления в каждом. Механизм правил имеет пользовательский интерфейс, который позволяет деловым людям поддерживать правила.
Менее успешное приложение имеет
Я бы слегка наступил. Когда набор правил скромен по размеру, легко понять изменения, как, например, упрощенный пример электронной почты, приведенный выше. Как только количество правил вырастет до сотен, я думаю, у вас могут возникнуть проблемы.
Я бы также беспокоился о том, чтобы механизм правил стал узким местом в вашем приложении.
Я не вижу ничего плохого в использовании объектов в качестве способа разбиения, который управляет пространством движка. Встраивание поведения в объекты, которые относятся к частному механизму правил, мне кажется вполне приемлемым. Проблемы поразят вас, когда движок правил требует, чтобы состояние, которое не является частью его объекта, срабатывало должным образом. Но это просто еще один пример сложности дизайна.
Правило Двигатели могут предложить большую ценность, в определенных случаях.
Во-первых, многие механизмы правил работают более декларативно. Очень грубым примером будет AWK, где вы можете назначать регулярные выражения для блоков кода. Когда регулярное выражение видит файловый сканер, блок кода выполняется.
Вы можете видеть, что в этом случае, если у вас есть, скажем, большой файл AWK, и вы хотите добавить еще одно «правило», вы можете легко перейти к нижней части файла, добавить свои регулярные выражения и логику и покончить с Это. В частности, для многих приложений вас не особо беспокоит то, что делают другие правила, и эти правила на самом деле не взаимодействуют друг с другом.
Таким образом, файл AWK становится больше похож на «суп из правил». Эта «суповая линейка правил» позволяет людям сосредоточиться на своей области, не обращая внимания на все остальные правила, которые могут присутствовать в системе.
Например, Фрэнк интересуется заказами на общую сумму более 1000 долларов, поэтому он подключается к системе правил, которая ему интересна. «IF order.total> 1000 THEN электронной почты Фрэнка».
Тем временем Салли хочет получить все заказы с западного побережья: «IF order.source == ‘WEST_COAST’ THEN email Sally».
Таким образом, вы можете видеть в этом тривиальном надуманном случае, что ордер может удовлетворять обоим правилам, но оба правила не зависят друг от друга. Заказ на 1200 долларов с Западного побережья уведомляет Фрэнка и Салли. Когда Фрэнк перестанет беспокоиться, он просто вытянет свое правило из супа.
Для многих ситуаций эта гибкость может быть очень мощной. Как и в этом случае, он также может быть представлен конечным пользователям по простым правилам. Использование высокоуровневых выражений и, возможно, легких сценариев.
Очевидно, что в сложной системе существуют всевозможные взаимосвязи, и именно поэтому вся система не «покончила с правилами». Кто-то где-то будет отвечать за то, чтобы правила не выходили из-под контроля. Но это не обязательно уменьшает ценность, которую может обеспечить такая система.
Помните, что это даже не относится к таким вещам, как экспертные системы, где правила запускают данные, которые могут быть созданы правилами, а к более простой системе правил.
В любом случае, я надеюсь, что этот пример показывает, как система правил может помочь в расширении более крупного приложения.
Самым большим плюсом, который я видел для механизмов правил, является то, что он позволяет владельцам бизнес-правил реализовывать бизнес-правила вместо того, чтобы возлагать ответственность на программистов. Даже если у вас есть гибкий процесс, в котором вы постоянно получаете обратную связь от заинтересованных сторон и проходите быстрые итерации, он все равно не достигнет уровня эффективности, которого можно достичь, если люди, создающие бизнес-правила, также будут их реализовывать.
Кроме того, вы не можете недооценивать значение при удалении цикла Recompile-Retest-Redeploy, который может возникнуть в результате простого изменения правила, если правила встроены в код. Часто есть несколько команд, которые участвуют в создании благословения для сборки, и использование движка правил может сделать большую часть этого ненужным.
Я написал механизм правил для клиента. Самая большая победа была в том числе всех заинтересованных сторон. Движок может запустить (или воспроизвести) запрос и объяснить, что происходит в тексте. Деловые люди могут посмотреть на текстовое описание и быстро указать нюансы в правилах, исключениях и других особых случаях. Как только деловая сторона была вовлечена, проверка стала намного лучше, потому что было легко получить их вклад. Кроме того, механизм правил может работать отдельно от других частей базы кода приложения, поэтому вы можете использовать его в разных приложениях.
Это (как и все остальное) зависит от вашего приложения. Для некоторых приложений (обычно тех, которые никогда не меняются, или правила лучше всего подходят для реальных констант, то есть не будут заметно меняться в течение эонов, например, физических свойств и формул), не имеет смысла использовать механизм правил, это просто вносит дополнительную сложность и требует от разработчика большего набора навыков.
До сих пор все были очень позитивны в отношении механизмов правил, но я советую читателю быть осторожнее. Когда проблема становится немного более сложной, вы можете внезапно обнаружить, что весь механизм правил был сделан непригодным или намного более сложным, чем в более мощном языке. Кроме того, для многих проблем механизмы правил не смогут легко обнаружить свойства, которые значительно сокращают время выполнения и объем памяти, необходимый для оценки состояния. Есть относительно немного ситуаций, в которых я бы предпочел механизм правил, а не систему внедрения зависимостей или более динамичный язык программирования.
«но на самом деле, сколько приложений действительно имеют столько изменений?»
Реальность такова, что вы не можете думать обо всем заранее, отсюда и причина гибких процессов. Кроме того, БА, кажется, всегда упускает что-то жизненно важное, пока оно не будет найдено в ходе испытаний.
Механизмы правил заставляют вас по-настоящему отделить бизнес-логику от представления и хранения. Кроме того, если вы используете правильный двигатель, ваши БА могут добавлять и удалять логику по мере необходимости. Как сказал Крис Марасти-Георг, это ложится бременем на БА. Но более того, это позволяет БА получить именно то, что они просят.
Уже много хороших ответов, но хотелось бы добавить пару вещей:
Я вижу правила, процессы и механизмы обработки данных (базы данных a.k.a.), по сути, сходные. Но по какой-то причине мы никогда не говорим, что «черный ящик» подсистемы персистентности плох.
Самая большая сложность из моего опыта в Rule Engines заключается в том, что: