我试图弄清楚什么是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
。
有了这些知识,再次查看发布的约束,看看是否可以调整任何边界。
这就是边界传播所做的:遍历所有变量的边界,看看是否有任何变量可以由于发布的约束而进行调整。重复此操作,直到不再存在可能的域缩减。