问题标签 [inference-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.

0 投票
6 回答
2313 浏览

java - 推理引擎根据内部规则计算匹配集

我有一组具有属性的对象和一堆规则,当应用于这组对象时,这些规则提供了这些对象的子集。为了让这更容易理解,我将提供一个具体的例子。

我的对象是人,每个人都有三个属性:原籍国、性别和年龄组(所有属性都是离散的)。我有一堆规则,比如“所有来自美国的男性”,它们与这个更大对象集的子集相对应。

我正在寻找一个现有的 Java“推理引擎”或类似的东西,它能够从规则映射到一个人的子集,或者关于如何创建我自己的建议。我已经阅读了规则引擎,但该术语似乎专门用于将业务规则外部化的专家系统,并且通常不包括任何高级形式的推理。以下是我必须处理的更复杂场景的一些示例:

  1. 我需要规则的结合。因此,当同时出现“包括所有男性”和“排除 10 至 20 岁年龄段的所有美国人”时,我只对美国以外的男性以及美国境内 10 至 20 岁以下的男性感兴趣。 20岁年龄段。

  2. 规则可能有不同的优先级(明确定义)。因此,“排除所有男性”的规则将覆盖“包括所有美国男性”的规则。

  3. 规则可能有冲突。因此,我可以同时设置“包括所有男性”和“排除所有男性”,在这种情况下,必须优先解决问题。

  4. 规则是对称的。所以“包括所有男性”相当于“排除所有女性”。

  5. 规则(或更确切地说是子集)可能具有与之关联的元规则(明确定义)。在应用原始规则或通过推理达到子集的任何情况下,都必须应用这些元规则。因此,如果“排除美国”的元规则附加到“包括所有男性”规则,并且我为引擎提供“排除所有女性”规则,它应该能够推断出“排除所有女性”子集相当于“包括所有男性”子集,因此另外应用“排除美国”规则。

如果没有第 5 项,我很可能可以生活,但我确实需要提到的所有其他属性。我的规则和对象都存储在数据库中,并且可以在任何阶段更新,因此我需要在需要时实例化“推理引擎”并在之后销毁它。

0 投票
2 回答
846 浏览

.net - 如何将类似 Prolog 的推理引擎嵌入到 .NET 应用程序中?

使用 Prolog 谓词比 C# 对象更自然地表示某些类型的域逻辑。这种域的一个例子是代表家庭关系

有没有办法将类似 Prolog 的推理引擎嵌入到 .NET 应用程序中?在我的应用程序的其余部分使用推理来驱动我的领域但传统的 OO 会很好。

0 投票
0 回答
621 浏览

java - 专家系统“推理机”中的系统诊断

我有毕业项目,我正在专家系统中工作“疾病的系统诊断”(我还没有开始实施阶段)在专家系统中我没有看到任何有用的教程(代码)可以帮助我建立规则

我正在尝试openrules,但我不确定它是否适合专家系统

我的问题是什么是 Java 中一个好的推理引擎(开源),我可以构建规则并正确测试建立这个系统的方法,如果我没有找到正确的方法,我的主管会拒绝我的工作。

谢谢你的阅读

0 投票
3 回答
178 浏览

xml - 为什么我的 OWL 推理器没有给我预期的结果?

嗨语义网的人,

<rdf:type rdf:resource='#Tsunami'>在推断以下 OWL 代码后,我不希望在 NamedIndividual: instance_Dromen 中有。不知何故,#Huis 和 #Auto 之间的不相交有问题,或者我没有以正确的方式使用补全?在推理器的结果中,NamedIndividual: instance_Dromen 具有以下输出:

--


我用作推理器输入的 OWL 代码是:



我希望有人能帮助我。

提前致谢。

问候, Martijn van der Plaat

0 投票
1 回答
156 浏览

rdf - 在 OWL 中使用排除者

亲爱的语义网人,

我在质疑自己如何在 OWL 中定义“排除者”结构。目前我能想到的唯一解决方案是使用 disjointWith。示例代码中演示了“排除者”的含义。房屋对象是屋顶、墙壁、窗户和地板的交集。因此,如果其中一个课程错过,个人将不会成为众议院。但是推理器会进一步推理,因为特定交集的缺失类可能会成为真的。另一方面,House 类与 Tsunami 类具有脱节的关系。当我的个人是海啸班级时,我直接知道我的个人永远不会成为众议院班级。这是我在谈论“排除者”时所期望的行为。但也许其他人对此有不同的看法?

问候, Martijn van der Plaat

0 投票
1 回答
706 浏览

java - 使用 Jena API 进行基本 RDFS 推理

我目前正在关注 Jena API 推理教程:

https://jena.apache.org/documentation/inference/

作为一个测试我理解的练习,我想重写第一个示例,它演示了从编程构建的模型中进行的简单 RDFS 推理:

做同样的事情,但是使用从这个 Turtle 文件中读取的模型(这是我自己对上述内容的翻译,因此可能是错误的):

使用此代码:

这似乎不是正确的方法(我特别怀疑我对q财产的提取在某种程度上是不正确的)。我究竟做错了什么?

0 投票
6 回答
3768 浏览

database - prolog 中数据管理的最佳实践

我只是参与使用 Prolog 来处理不仅仅是最简单形式的数据(事实),并且正在寻找经验丰富的 Prologers 的一些指导......

如果我想动态管理数据或事实,我有几个主要的选择,例如:

  • 在 Prolog 中将数据作为断言进行管理,或者
  • 从 Prolog 到数据库的接口,或者
  • 可能是两者的结合

如果我在 Prolog 中将事实作为断言来管理,那么我还有一个问题是表示这些事实的最佳方式。假设我有一个person有名字、姓氏和年龄的人。我可以断言它为:

或者对 person 的属性有一个隐含的假设:

如果我想将一个人与其他事物联系起来,我真的需要一个人的钥匙。所以我可能倾向于断言一个人为:

当然,现在我让我的 Prolog 断言看起来像关系数据库表条目。这让我想知道我是否采取了错误的方法并使事实的表达过于复杂。

所以真的,我的问题是:在 Prolog 中管理中到复杂数据时,是否有一些最佳实践需要考虑?命名约定是它的一小部分。我读过像 Prolog 中的断言/撤回这样的位是低效的。因此,我还想知道如何处理数据组织本身,例如何时使用外部 SQL 数据库与仅使用 Prolog 表示。

附录

我会假设由于关系数据库使用它们的原因,像在关系数据库中所做的那样,对记录使用键是可取的。这意味着必须维护密钥。对于每种情况,在 Prolog 中手动(显式)执行此操作似乎很麻烦,那么这通常是如何完成的呢?还是我的假设正确?

0 投票
0 回答
285 浏览

rdf - RDF 推理引擎应用程序

我对 RDF、推理引擎等知之甚少,但我正在寻找一个可能适合使用推理引擎而不是算法解决方案的应用程序。

我想知道是否有任何我可以查看的现有示例执行我正在考虑的事情,即将一个图表转换为另一个图表。

基本上,我们有一个有向图作为输入。边缘是关系——有些是传递的,有些不是。该图表示系统的期望状态。

输出将是一个有向图,它为将该系统置于所需状态提供设置和指令。举个简单的例子,也许输出是婚宴的座位表,输入是谁和谁关系好,谁是某人的前妻等等,还有不让某人坐在同一个座位上的规则与前妻同桌。

这些图表在我看来就像 RDF 三元组。这是推理引擎可以用来做的事情吗?

0 投票
1 回答
91 浏览

android - 在android中定义基于语法的规则和推理

我必须从某个来源收集信息并根据某些规则对信息进行分类。输入将是一个文本文件。例如:“Raj 喜欢吃巧克力。Rohan 喜欢花。Ravi 很受欢迎。”

根据我迄今为止所学到的,我们可以根据名词短语、动词短语等来标记文本。所以,我打算先标记文本。现在我想定义如下规则:

如果名词短语出现在“love*”之后,则将巧克力添加到列表中。同样,如果名词短语出现在“like*”之后,则将鲜花添加到列表中。

现在,为了分类,我将创建一个 RDF,为巧克力和鲜花定义类和个体。

我的问题是 1. 如何在 Android 中定义基于语法的规则?2. 得到名词短语后,如何将这些名词归入RDF中定义的一类项目?

谢谢。

0 投票
1 回答
187 浏览

sparql - 使用 SPIN 规则推断匿名超类

我正在 TopBraidComposer 中构建一个本体,它有一个类层次结构和几个单独工作的规则。在我的本体中,我在类级别上工作,所以我创建的所有定义都只与类有关,而不是与个人相关。现在我想推断像这样的子类定义:

匿名子类

我尝试了以下 SPARQL 查询,它似乎可以完成这项工作:

SPARQL 测试

然后我将所说的查询作为 SPIN 规则添加到 owl:Thing 类中,如下所示:

旋转规则 1

回车后,自动转换成如下形式:

旋转规则 2

它看起来很合理,但是当我现在开始推理过程时,它不会在我添加测试规则之前终止。当我强制停止推理时,我可以看到所需的三元组已多次添加到 Test 类中。

如何在 SPIN 中推断出匿名超类?

编辑:

一种解决方法是将限制绑定到类。然后逻辑似乎有效,但它不像匿名超类那样显示出来;在 TBC 和 Protege 中都没有。