clpfd中的边界传播是什么



我试图弄清楚什么是clpfd中的边界传播,但似乎在任何地方都找不到好的解释。

我正在为Prolog和clpfd复习,遇到了这个问题,但看讲义,我觉得这没有意义。有人能解释一下界限传播的实际含义以及它的用途吗。

以下是我所指的问题:

当以下Prolog程序

:-use_module(库(clpfd))
边界(X,Y,Z):-X在1..5中,Y在1..2中,Z在3..5,X#=Y+Z。
它给出了答案:
?-边界(X,Y,Z)。X在4..5中,Y在1..2中,Z在3..4.

解释如何应用边界传播来推断这个答案。

我给你一个开始:

在发布了所有约束后,有一件事很明显:X在;最少;4.为什么?因为CCD_ 2至少是;1,并且Z至少为;3,并且X是;CCD_ 5和;Z

有了这些知识,再次查看发布的约束,看看是否可以调整任何边界。

这就是边界传播所做的:遍历所有变量的边界,看看是否有任何变量可以由于发布的约束而进行调整。重复此操作,直到不再存在可能的域缩减。

最新更新