2

我正在寻找不评估不必要规则的Datalog的 Jave 实现。我查看了IRIS 推理器,它似乎是最稳定的推理器。

但是,它评估所有规则,而不仅仅是正在使用的规则。举个例子:

parent('homer', 'bart').
parent('abe', 'homer').
ancestor(?a, ?b) :- parent(?a, ?b).
ancestor(?a, ?b) :- ancestor(?a, ?c), ancestor(?c, ?b).

// query.. find all parent-child pairs.
?-parent(?x, ?y).

我发现ancestor即使从未使用过 IRIS 也会计算关系。

Java 还有哪些其他实现?是否有任何执行此优化?

4

2 回答 2

0

在 IRIS 中有一个选项,

从这里

import org.deri.iris.optimisations.rulefilter.RuleFilter;
import org.deri.iris.Configuration;

Configuration config = new Configuration();
config.programOptmimisers.add(new RuleFilter());

但是,我无法让它发挥作用。我在使用的底层JGraphT库中出现“循环异常” 。

最后,我最终编写了自己的规则过滤器。这并不难。我们需要确保只包含在导致最终关系的规则尾部引用的规则。

于 2014-06-23T06:30:48.177 回答
0

引用 OP 链接到的 IRIS 网站:

支持以下程序优化: - 规则过滤(删除无助于回答查询的规则) - 魔术集和横向信息传递策略 (SIPS)

于 2014-06-10T14:56:38.497 回答