问题标签 [rule-engine]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 开发小型规则引擎的简单设计模式
我有一个要求,它需要针对 java 值对象验证大量规则并产生结果。(我们公司不能使用任何规则引擎应用程序,手续繁多,需要回答的问题很多)。所以,与其在java代码中实现规则,我建议实现一个小的规则引擎,简单和可扩展。遵循哪种设计模式?
我在下面添加了一个粗略的定义规则的 xml 结构。
java - Drools - 在规则条件或结果中做复杂的事情
在我的公司,我们计划在几个项目中使用 Drools 和 BRE。现在我们试图定义一些最佳实践。
我的问题是在规则条件/结果中应该做什么和不应该做什么。鉴于我们可以直接编写 Java 或调用方法(例如 From a Global object in the Working Memory)。
例子。给定一个评估通用对象(例如人)的规则,将属性设置为 true。现在,只能为进入数据库并获取该信息的对象定义该特定属性。所以我们有两种实现方式:
备选方案 A:
- 转到数据库并获取对象属性(真/假,代码)
- 将对象插入工作内存
- 评估规则
备选方案 B:
- 插入具有连接到数据库的方法的全局对象并检查给定对象的属性。
- 将对象插入到工作内存中进行评估
- 在规则中,调用全局对象并执行对数据库的访问
其中哪个被认为更好?我真的很喜欢 A,但有时 B 更直接,但是如果引发数据库中的异常之类的会发生什么?
我已经在 Packt Publishing 的 Drools 5.0 书中看到了替代 B 的实现,但是他们只是在模拟,他们根本没有谈论访问数据库的实际含义。
谢谢,
java - 我想我需要一个简单的规则引擎?
我需要一些关于解决这个问题的最佳方法的建议。
我研究了 DROOLS、Java Rule Engine 和其他一些。所有这些都很强大,并且有它们的优点。我不知道哪个(如果有的话)对我来说是最好的选择。
我有一个业务对象。(简化为演示)
我需要在 Web 应用程序中编写一个编辑器,以允许围绕这些字段构建复杂的规则。我需要支持复杂的嵌套 AND/OR 逻辑。我只需要基本的运算符,规则应该简单地评估为真或假。如果规则评估为真或假,将分别发生一个动作。
例如,
firstName CONTAINS "value" AND (lastName EQUALS "input" OR department CONTAINS "input")
我曾想过,也许我应该编写自己的解析器并在自己的代码中评估逻辑。我不知道该怎么做,任何建议或要阅读的东西的链接将不胜感激。有没有我可以研究的特定设计模式?
你将如何解决这个问题?关于规则引擎的一个保留意见是,它们可能对于一个简单的问题来说太复杂了?
logic - 通过生产规则解决数独
我正在尝试使用生产规则解决任何数独难题,并使用 Drools 作为我的推理引擎。Drools 的示例之一正是数独求解器,以下是相关规则:
...但它不能正常工作。一直以来,网格中的一个或多个单元格最终都是空的,程序将这个谜题报告为“未解决”。
有没有人为数独构建了一个基于推理规则的工作求解器?使用的语言或引擎无关紧要,我希望看到一组规则,以便我可以将它们调整为 Drools
oracle - 配置规则引擎 - 替代方案?
我一直在开发一款软件,它采用“A Disallows B”或“X Requires Y”形式的规则来制作一个允许您配置复杂项目的应用程序。
为了更全面地描述它,假设您有一个文件夹级别,其中有一些子文件夹,每个子文件夹都有一些项目。目的是以帮助用户创建有效选择集合的方式表达项目之间的关系。
所以实际的规则看起来更像'All(A, B, C) Disallows Any(X, Y, Z)',它规定如果用户选择A、B和C,他们就不能选择X中的任何一个, Y 或 Z。它基本上只是布尔逻辑。
还有其他类型,例如那些说如果您选择 A,那么您还必须选择 B,但不值得深入了解所有这些细节。
这不是业务逻辑(至少不是正常意义上的),并且规则可以随时更改(并且它们会)因此需要从字符串中读取它们并通过复杂的数据库结构进行解释或连接(我会宁愿远离)。
真正的问题是:是否有某种系统或框架可以处理这种运行时行为?我知道甲骨文有一个叫做“甲骨文配置器”的东西,它完全符合我的意思,但我认为它非常昂贵。
该项目几乎结束了,我已经建立了一个“工作”系统,但我正在尝试进行事后分析,看看它是否可以做得更好/更快/更便宜。
c# - C# 中复杂 if/else 问题的库/算法
我必须实现一个问卷调查引擎,其中对单个问题的每个答案都可能最终得到完全不同的结果。
所以,如果我们有 10 个问题,每个问题有 10 个答案,我们就有 10 的 10 次方可能性。
我猜这应该是一个脚本化的人工智能......
那么,对于这样的问题,我会使用什么样的规则引擎或实现方法呢?
我猜这种算法有点太简单了?
感谢您对此的任何建议。
scope - 使用 Drools 声明局部规则变量
可以使用 Drools 规则引擎将局部变量创建到局部规则定义中吗?
我写了一个示例代码,但它没有编译。这个例子只是为了暴露关于局部声明的想法(我知道它是错误的)
错误信息是:
位置 [25,2] 由以下行定义:
java - Drools 适用于我的场景吗?如果不是还有什么?
场景 1. 最终用户应该能够从前端创建规则。该规则将具有条件(我无法在 Drools 中找到一种根据用户创建的规则动态修改 .drl 文件的方法)
规则应该能够在层次结构中定义,并且相同的规则可以属于多个层次结构
最终用户应该能够触发规则的执行。这里需要注意的是,事实可能在 KnowledgeSession 中不可用,规则会根据底层数据库转换为相关查询,然后在底层数据库上触发。
因此,想法是在对实体的有限了解的情况下创建规则-> 触发规则时,它与底层数据库一起创建与底层数据库中存在的实体相关的查询
我可以用另一个规则引擎 Drools 做点什么,而不是构建自定义实现吗?
rule-engine - 如何开始使用大型决策表
今天我遇到了一个有趣的挑战,我希望你能就如何处理这种情况提供意见。
所以问题如下(我已将其转换为演示数据,因为如果不熟记公司字典,真正的问题就没有多大意义)。
我们有一个至少有 16 个条件的决策表。因为要管理所有这些(2^16 种可能性)是一项不可能的壮举,我们决定只列出例外情况。像这样:
作为一个例子,我只添加了 10 个条件,但实际上(目前)有 16 个。基本思想是我们有一个基线(默认),它对每个人都有效,并且此默认值的所有例外。
例子:
你有一个外国人也是海盗。如果您逐个检查所有异常,并逐个条件地删除具有至少一个条件失败的异常。最后,您将得到以下两个对我们的案例有效的例外情况。匹配是在 IsPirate 和 IsForeigner 条件下。但正如您所看到的,这里有 2 个结果,如果算上默认值,实际上是 3 个。
我们的解决方案
现在我们想出如何解决这个问题的是,在您添加这些异常的 GUI 中,应该运行一个算法来检查这种情况并强制您更具体地定义异常。这仍然只是一个理论,还没有经过测试,但我们认为它可以这样工作。
我的问题
我正在寻找使规则易于管理并防止我在示例中显示的问题的替代解决方案。
java - 检查列表的所有元素(Drools Expert)
我正在尝试在 Drools Expert 中编写规则。在when
规则部分,我检查了Application
对象的一些属性。该对象包含一个列表,我想检查一堆规则是否适用于该列表中 SomeOtherType 的所有对象。仅当约束对该列表中的所有对象都有效时,该规则才应触发。