问题标签 [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 - 为实时跑道入侵防御系统选择哪个知识库/基于规则的推理引擎
我们正在设计一个项目,该项目将听取机场管制员和飞行员之间的对话,以防止跑道侵入(例如,一架飞机起飞而另一架飞机穿过跑道)。我们的教授希望我们使用Jena作为知识库(或其他任何东西,但它应该是某种基于规则的引擎)。推理不是耶拿的主要内容,也没有太多的文档和示例。因此,我们需要一个引擎,它可以从飞行员那里获取消息作为输入,并输出可能的入侵风险或消息协议中的任何其他错误。它应该易于编写规则,并且应该易于为引擎提供实时数据。
我把它想象成这样:
- 飞行员发送信息说他降落在某条跑道上,系统会记住跑道很忙,没有人可以穿过它
- 如果有人被指示穿过这条跑道,引擎应该触发一条规则,表明有问题
- 当飞行员发出他离开跑道并前往登机口的信息时,系统会清理跑道并让其他飞机使用它。
Jena、prolog 或任何其他规则引擎适合这个吗?我的意思是它是合适的,但我们真的需要使用它吗?我问教授。如果我们可以保持跑道状态并根据我们收到的消息使用一些简单的检查,他说它不可扩展,我们需要知识库。有人可以就该系统使用哪种方法给我任何建议吗?如果您推荐 kb,那么我们应该使用哪一个?该项目是用java编写的。
谢谢你。
tsql - 用户需要创建适用于其他用户访问组的动态规则
好的,这就是我想要完成的“简而言之”......
我的应用程序的用户可以去创建一个新组。他们可以指定他们将允许/拒绝的其他用户的标准,以确定允许谁加入该组。
示例:年龄:12 - 16 岁身高:5 - 6 英尺
存储规则的数据表如下: Allow or Deny Flag (Y/N) AgeStart: 12 AgeEnd: 16 HeightStart: 5 HeightEnd: 6
然后,我们需要检查用户是否符合条件以确定是否允许他们加入组。
这有意义吗?也可能有与它相反的例外规则......例如第一个“允许:Y”可能是 12 到 30 岁,但第二条记录可能会添加到拒绝 25 到 28 岁,因此用户必须同时满足这两个条件才能进入。
有这个的接盘侠吗?
user-interface - 规则引擎用户界面设计
在工作中,我们有优化引擎,这些引擎使用的输入之一是业务规则,我们使用专有的规则编辑器创建和编辑。
这些规则是我们自己的专有格式,因为现有的规则引擎无法表示我们需要的复杂业务规则。
无论如何,我们或多或少对规则引擎当前的工作方式感到满意——它非常适用于复杂的业务规则,但对用户界面(规则编辑器)不满意。基本上,这目前由一组表组成,这些表从字面上看是使用复杂的类似电子表格的表格 GUI 进行编辑的。
虽然这是功能性的,但它是一个糟糕的界面,呈现给不是开发人员但相当于业务分析师的最终用户。在动手之前,我认为最好询问 StackOverflow 社区对针对这种情况的用户界面设计的意见。
我的问题
- 您在现有的规则编辑器中看到了哪些最好的用户界面?
- 您认为规则编辑器中用户界面设计背后的最佳原则是什么?
我分别使用术语规则引擎和规则编辑器。对于这个问题,我只关心规则编辑器
StackOverflow 上的其他问题涉及规则引擎,但既不是规则编辑器也不是他们的用户界面设计:
database - 存储逻辑规则的合适数据结构和数据库模式是什么?
前言:我没有规则引擎、构建规则、建模规则、为规则实现数据结构等方面的经验。因此,我不知道我在做什么,或者我在下面尝试的内容是否离谱。
我试图弄清楚如何存储和处理以下假设场景。为了简化我的问题,假设我有一种游戏,其中用户购买了一个对象,其中可能有 1000 个可能的对象,并且对象必须以指定的顺序购买,并且只能在某些组中购买。例如,假设我是用户,我想购买对象 F。在我购买对象 F 之前,我必须之前购买了对象 A OR (B AND C)。我不能同时购买 F 和 A,也不能同时购买 F 和 B、C。它们必须按照规则指定的顺序排列。先是A,然后是F。或者,首先是 B,C,然后是 F。我现在不关心购买之间的时间跨度或用户的任何其他特征,只是它们现在是正确的顺序。
为潜在的数千个对象存储此信息的最佳方法是什么,让我可以读取所购买对象的规则,然后将其与用户之前的购买历史记录进行核对?
我已经尝试过了,但是我一直在尝试实现诸如 A OR (B AND C) 之类的分组。我想将规则存储在我有这些表的数据库中:
但很明显,当你处理结果时,如果没有分组,你会得到错误的答案。如果可能的话,我想避免过多的字符串解析:)。一个对象可能有未知数量的先前所需购买。用于处理规则的 SQL 或伪代码片段将不胜感激。:)
java - OpenRules rules only in a database possible?
I am experimenting with OpenRules and Java and I'd like to store all my rules in a database only. If I understand the documentation correctly, I need to have one "Main.xls" in which to store the environment settings. Now the question: Is there a way to completely circumvent this one physical .xls file? Best case would be, if I could just call something like
where the method defineOpenRulesDatabase() defines all the settings which are defined in the db.properties file mentioned in the documentation.
Any idea on this?
java - C 或 Python 中的规则引擎
我正在寻找 C 或 Python 中的规则引擎,但如果您知道用另一种语言实现的规则引擎,我会很高兴知道它。
该引擎将用作使房屋自动化的方式,例如当有人离开房间时关灯等。因此,那里没有“办公室”规则(也就是您在 Excel 等中是否有规则)。
我研究了 Java 中的 Jess 和 Drools 并且做得很完美。我想知道其他人,并且可能使用比 Java 更少的内存。我听说过 Python 中的 RuleCore,但实际上找不到任何文档(SourceForge 提供 1.0 版,但看起来他们正在销售 2.0 版)。
编辑:通过规则引擎(推理引擎),我的意思是 RETE 或等效的实现。
c++ - 暴露给脚本系统的 C++ 函数 - 自描述参数类型
C++ 规则引擎在 XML 中定义规则,其中每个规则归结为“如果 X,则 Y”,其中 X 是一组测试,Y 是一组动作。在 C++ 代码中,可用于测试/动作的“函数”被创建为每个“函数”的类,每个函数都有一个“run(args)”方法……每个都有自己的一组参数。
这工作正常。
但是,需要一个单独的工具来节省用户手工制作的 XML;规则引擎是针对非程序员的。该工具需要知道所有可用的“功能”,以及它们所需的输入参数。考虑这样做的最佳方法是什么?我考虑了几种可能性:
- 配置文件描述了“功能”及其参数,并由工具读取。这很简单,实际的 C++ 代码可以使用它来执行参数验证,但仍然不能保证 C++ 和 XML 同步 - 程序员可能会修改 C++ 而忘记更新 XML,从而导致验证错误
- 每个“功能”类都有描述它的方法。不知何故,该工具加载了 C++ 类......这在支持反射的语言中很容易,但在 C++ 中更混乱,可能你必须构建一个包含所有“函数”或其他东西的特殊 DLL。这意味着额外的开销。
考虑到 C++ 的性质,什么是有意义的?
编辑:标题是描述性的吗?我想不出更好的了。
architecture - Outlook Express 中使用的规则系统在理论上是如何工作的?怎么可能做到?
我很好奇这个:
在 Microsoft 的 Outlook Express(或 Outlook,记不太清了,我是 Mac 用户)中,他们有一些非常酷的东西。通用规则:
例如,您可以配置一组规则来自动排序或删除您的电子邮件。它功能强大且易于使用。
这些规则看起来很像这样:
“如果收件箱中的电子邮件主题包含“foo”、“bar”或“foobar”,请将其删除”
我需要为强大的表单验证系统编写类似的代码。开发人员应该能够简单地创建如下规则:
好吧,我有一些想法如何做到这一点,我会将它们发布在这里作为答案。但在我重新发明轮子之前:是否有任何书面概念可以用作开发类似于此的基于规则的验证系统的基础?或者,如果没有,您对如何做到这一点有什么建议吗?
在上面的示例中,方括号中的所有内容都是 html 表单元素的名称。撇号 '' 中的所有内容都是要比较的“硬编码”值。
定义的规则被翻译成 PHP 代码和 JavaScript 代码来进行客户端和服务器端验证。
它必须具备的功能:
- 条件规则:A 依赖 B
- 值比较:对于整数、浮点数、字符串
- 也启用一些表单控制逻辑,例如上面的“[gender] is_equal_with 'female'”示例。
怎么可能做到这一点?从科学的角度来看,我必须考虑哪些实体?
我认为这个的理论概念是平台无关的。尽管我将在 PHP 和 JavaScript 中实现这一点,但 C++ 开发人员没有理由不响应 ;-)(我是 Objective-C 人,顺便说一句)
java - java应用程序的规则引擎
我想为我的 Java 应用程序使用一些规则引擎。那么你能推荐一些好的规则框架吗?
algorithm - 聚合自动生成的特征向量
我有一个分类系统,不幸的是,出于工作原因,我需要对其进行模糊处理。假设我们有 5 个特性需要考虑,它基本上是一组规则:
我们取一个主题并获取它的 AE 值,然后尝试按顺序匹配规则。如果一个匹配,我们返回第一个结果。
C 是一个离散值,可以是 ae 中的任何一个。其余的只是整数。
规则集是从我们的旧系统自动生成的,并且有非常多的规则(约 2500 万条)。旧规则是 if 语句,例如
如您所见,旧规则通常甚至不使用某些功能或接受范围。有些更烦人:
规则集需要小得多,因为它必须由人工维护,所以我想缩小规则集,以便第一个示例变为:
结果是我们可以通过 Result 列拆分规则集并分别收缩。但是,我想不出一种简单的方法来识别和缩小规则集。我尝试过聚类算法,但由于某些数据是离散的,因此它们会窒息,并且将其视为连续数据是不完美的。另一个例子:
在理想的世界中,这将是两个规则:
即:算法不仅会识别 A 和 B 之间的关系,还会推断出 C 是噪声(对规则不重要)
有谁知道如何解决这个问题?任何语言或库都是公平的游戏,因为我希望这主要是一次性的过程。提前致谢。