2

我想使用溯因逻辑编程来找到最佳计划。详尽地搜索计划空间是不切实际的,但是在普通逻辑编程中,有一些排序启发法将用于将事实(基础谓词)表示为排序列表。当然,排序列表可以以谓词形式重新转换为带有排序谓词的事实(基础谓词)——鉴于可溯源词是谓词,我更喜欢采用这种形式。

在这种形式中,我想根据它们的(各自的)排序谓词搜索优先级的基础谓词,并在第一个解决方案处终止,因为可以证明任何其他解决方案都不是最优的。

我知道这至少需要表格逻辑编程。幸运的是,表格现在得到了广泛的支持。但是,它可能还需要增量表,因为在绑架期间断言和收回可溯源——这将其限制为 XSB、AFAIK。

如何告诉 Prolog 引擎使用排序谓词来搜索基本术语?

此外,是否需要增量表才能使其实用?

4

2 回答 2

2

至少在 XSB 中,制表遵循(默认情况下)称为本地调度的调度策略。这意味着目标的答案不会在派生时返回(就像在通常的 Prolog 中一样,没有表格),但只有在该目标的表格完成时才返回。出于这个原因,使用表格来帮助仅返回(并终止)第一个解决方案(如您的情况)可能不合适。尽管如此,人们仍然可以选择 XSB 表的批处理调度,因此一旦得到答案就会立即返回。但是这个选项只能在 XSB 安装期间设置,而不是在谓词级别。

或者,XSB 提供了可用于存储事实的尝试数据结构。它可用于在存在默认本地调度的情况下模拟批处理调度(一得到答案就返回)。例如,这种技术用于按需计算双重规则。这个想法是根据给定的顺序逐一计算和存储解决方案。

XSB 第一本手册中讨论了这些策略及其(缺点)优势以及尝试。

关于增量表的使用,如果断言的或撤回的可引物影响其他表谓词,它肯定是有用的;后面的谓词应该被增量地列出并且可溯源应该被声明为增量动态的(不仅仅是动态的谓词)。这样做,表格谓词将正确反映此类更新。

于 2014-04-04T10:11:15.443 回答
1

我和我的博士生 Ari Saptawijaya,ari.saptawijaya@gmail.com,一直在发布关于在 XSB 中实施的桌面绑架,您可能希望查看我们的出版物,可在我的主页上下载(您可以在其中找到我们最新的论文,在 ICLP'14 接受)。目前,我们正在将表格溯因与流利的表格增量更新相结合,其中我们可以溯源并逐步传播它们对流利的影响。我们使用的一个通用概念是语境溯因,即溯因推理可以从一种语境使用到另一种语境,或者拒绝更糟糕的尝试解决方案。那里的问题非常技术性,无法在这里解释。我建议你看看我们的文件,然后再回到我们身边,在看到你的尝试可能会从我们的立场中受益之后。我还建议您查看 Sourceforge 上提供的 XSB 用户手册的表格章节。XSB Prolog 的主要架构师 David Warren 教授也可以帮到你。最好的祝愿路易斯·莫尼兹·佩雷拉

于 2014-04-04T10:03:28.720 回答