2014-04-04 52 views
2

我想使用逻辑程序设计寻找最佳计划。彻底搜索计划的空间将是不切实际的,但有一种排序启发式方法,即在普通的逻辑编程中,将用于将事实(地面谓词)表示为排序列表。当然,排序列表可以谓词形式重新表达为具有有序谓词的事实(地面谓词) - 并且正是以这种形式,我倾向于以不可推断性为谓词来工作。在这种形式下,我想根据它们(各自的)排序谓词来优先搜索基本谓词,并在第一个解决方案中终止,因为可以证明任何其他解决方案都不是最优的。使用递增式逻辑程序设计的最佳计划

据我所知,这至少需要tabled logic programming。幸运的是,表格现在得到了广泛的支持。然而,它也可能需要增量制表,因为绑定过程中断言和撤销可能会导致缩减 - 这将限制XSB,AFAIK。

如何告诉Prolog引擎使用排序谓词来搜索基础条件?

此外,增量制表是必要的,使这种实际?

回答

1

我和我的博士生Ari Saptawijaya,ari.saptawijaya @ gmail.com已经发布了绑定绑定,在XSB中实现,您可能希望看到我们的出版物,可以从我的主页下载可以找到我们最新的论文,在ICLP14上接受)。目前,我们正在将台式绑架与逐步增加的洗涤剂更新相结合,在那里我们将采取行动并逐步宣传其对洗涤剂的影响。 我们使用的一个一般概念是上下文绑定,因此可以从一个上下文到另一个上下文使用绑定,或拒绝更糟的尝试解决方案。那里的问题相当技术化,不容易在这里解释。 我建议你浏览一下我们的论文,在看到你的尝试可能会从我们的立场中受益后回到我们身边。我还建议您查看Sourceforge提供的XSB用户手册中的表格章节。 XSB Prolog的主要设计师David Warren教授可能也会帮助你。 Best wishes Luis Moniz Pereira

2

至少在XSB中,至少在XSB中启用调度策略(默认情况下)称为本地调度。这意味着对目标的回答不会在返回时返回(如通常的Prolog中所示),但只有当该目标的表已完成时才会返回。出于这个原因,使用表格来帮助返回(并终止)第一个解决方案(如你的情况)可能不合适。可以选择批量调度XSB制表,所以答案会在派生时立即返回。但是这个选项只能在XSB安装期间设置,而不能在谓词级别设置。

或者,XSB提供尝试可用于存储事实的数据结构。它可用于模拟批处理调度(在派生出来时立即返回答案),并存在默认的本地调度。例如在​​中使用该技术。这个想法是根据给定的顺序逐个计算和存储解决方案。

XSB第一本手册讨论了这些策略,以及它们的(缺点)优点以及尝试。

对于增量制表的使用,如果断言或缩回的可引用会影响其他制表谓词,它肯定会有用;后面的谓词应该是递增表示的,而可解释的表达式应该是增量动态的(不只是简单的动态谓词)。这样做,表格谓词将正确反映这种更新。