使用递增表格的外展逻辑编程进行最优规划

时间:2014-04-04 01:05:12

标签: prolog prolog-tabling

我想使用外展逻辑编程来寻找最佳计划。彻底搜索计划的空间将是不切实际的,但是在普通的逻辑编程中,存在有序的启发式方法,用于将事实(地面谓词)表示为排序列表。当然,排序列表可以谓词形式重新定义为具有排序谓词的事实(地面谓词) - 并且在这种形式中,我更愿意工作,因为可推导词是谓词。

在这种形式中,我希望优先考虑它们(各自的)排序谓词来搜索地面谓词,并在第一个解决方案中终止,因为可以证明任何其他解决方案都会更少最佳的。

我知道这至少需要tabled logic programming。幸运的是,现在广泛支持表格。然而,它可能还需要增量制表,因为诱导物在绑架期间被断言和缩回 - 这将限制为XSB,AFAIK。

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

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

2 个答案:

答案 0 :(得分:2)

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

或者,XSB提供可用于存储事实的尝试数据结构。在存在默认本地调度的情况下,它可用于模拟批量调度(在派生后立即返回答案)。例如,在computing dual rules by-need中使用该技术。我们的想法是根据给定的顺序逐个计算并存储解决方案。

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

关于增量表格的使用,如果断言或收回的可引物影响其他表格谓词,它肯定是有用的;然后应该逐步增加后面的谓词,并且应该逐步声明可推导的动态(不仅仅是动态谓词)。这样做,tabled谓词将正确反映此类更新。

答案 1 :(得分:1)

我和我的博士生Ari Saptawijaya,ari.saptawijaya @ gmail.com,已经发布了在XSB上实施的桌面绑架,你可能希望看到我们的出版物,可以在我的主页上下载(你可以在哪里找到)找到我们的最新论文,在ICLP' 14上接受。目前,我们正在将tabled绑架与流量的表格增量更新结合起来,我们引用行动并逐渐传播它们对流水的影响。 我们使用的一个一般概念是上下文绑定,从而可以从一个上下文到另一个上下文使用外展,或拒绝更糟糕的尝试解决方案。那里的问题非常技术性,不容易在这里解释。 我建议你看一下我们的论文,回过头来看看你的尝试后可能会从我们的立场中受益。我还建议您查看Sourceforge上提供的XSB用户手册的表格章节。 XSB Prolog的主要架构师David Warren教授也可以为您提供帮助。 最好的祝愿 Luis Moniz Pereira